Fix block cipher padding when using libgcrypt.
This commit is contained in:
parent
c845bc109c
commit
3c90be7678
1 changed files with 7 additions and 3 deletions
|
@ -196,7 +196,7 @@ bool cipher_encrypt(cipher_t *cipher, const void *indata, size_t inlen, void *ou
|
||||||
if(!oneshot)
|
if(!oneshot)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t reqlen = ((inlen + 1) / cipher->blklen) * cipher->blklen;
|
size_t reqlen = ((inlen + 8) / cipher->blklen) * cipher->blklen;
|
||||||
uint8_t padbyte = reqlen - inlen;
|
uint8_t padbyte = reqlen - inlen;
|
||||||
inlen = reqlen - cipher->blklen;
|
inlen = reqlen - cipher->blklen;
|
||||||
|
|
||||||
|
@ -239,14 +239,18 @@ bool cipher_decrypt(cipher_t *cipher, const void *indata, size_t inlen, void *ou
|
||||||
|
|
||||||
uint8_t padbyte = ((uint8_t *)outdata)[inlen - 1];
|
uint8_t padbyte = ((uint8_t *)outdata)[inlen - 1];
|
||||||
|
|
||||||
if(padbyte == 0 || padbyte > cipher->blklen || padbyte > inlen)
|
if(padbyte == 0 || padbyte > cipher->blklen || padbyte > inlen) {
|
||||||
|
logger(LOG_ERR, "Error while decrypting: invalid padding");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
size_t origlen = inlen - padbyte;
|
size_t origlen = inlen - padbyte;
|
||||||
|
|
||||||
for(int i = inlen - 1; i >= origlen; i--)
|
for(int i = inlen - 1; i >= origlen; i--)
|
||||||
if(((uint8_t *)indata)[i] != padbyte)
|
if(((uint8_t *)outdata)[i] != padbyte) {
|
||||||
|
logger(LOG_ERR, "Error while decrypting: invalid padding");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
*outlen = origlen;
|
*outlen = origlen;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue