From 36261650024ba8e18f9c77396f1d7a4e51f20602 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sat, 19 Dec 2009 23:23:25 +0100 Subject: [PATCH] Do not use hardcoded cipher block length when padding. --- src/gcrypt/cipher.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gcrypt/cipher.c b/src/gcrypt/cipher.c index ad2a9505..6a2cc5a1 100644 --- a/src/gcrypt/cipher.c +++ b/src/gcrypt/cipher.c @@ -196,7 +196,13 @@ bool cipher_encrypt(cipher_t *cipher, const void *indata, size_t inlen, void *ou if(!oneshot) return false; - size_t reqlen = ((inlen + 8) / cipher->blklen) * cipher->blklen; + size_t reqlen = ((inlen + cipher->blklen) / cipher->blklen) * cipher->blklen; + + if(*outlen < reqlen) { + logger(LOG_ERR, "Error while encrypting: not enough room for padding"); + return false; + } + uint8_t padbyte = reqlen - inlen; inlen = reqlen - cipher->blklen; @@ -259,7 +265,8 @@ bool cipher_decrypt(cipher_t *cipher, const void *indata, size_t inlen, void *ou } *outlen = origlen; - } + } else + *outlen = inlen; return true; }