From c36c0f4e22fad4374c05f6e526e1fb34d0457ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Tue, 4 Dec 2012 20:50:00 +0100 Subject: Fixed ctr_crypt zero-length bug, reported by Tim Kosse. --- ctr.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'ctr.c') diff --git a/ctr.c b/ctr.c index 49cfa2a9..6b970305 100644 --- a/ctr.c +++ b/ctr.c @@ -82,16 +82,7 @@ ctr_crypt(void *ctx, nettle_crypt_func *f, } else { - if (length <= block_size) - { - TMP_DECL(buffer, uint8_t, NETTLE_MAX_CIPHER_BLOCK_SIZE); - TMP_ALLOC(buffer, block_size); - - f(ctx, block_size, buffer, ctr); - INCREMENT(block_size, ctr); - memxor3(dst, src, buffer, length); - } - else + if (length > block_size) { TMP_DECL(buffer, uint8_t, NBLOCKS * NETTLE_MAX_CIPHER_BLOCK_SIZE); unsigned chunk = NBLOCKS * block_size; @@ -124,5 +115,14 @@ ctr_crypt(void *ctx, nettle_crypt_func *f, memxor3(dst, src, buffer, length); } } + else if (length > 0) + { + TMP_DECL(buffer, uint8_t, NETTLE_MAX_CIPHER_BLOCK_SIZE); + TMP_ALLOC(buffer, block_size); + + f(ctx, block_size, buffer, ctr); + INCREMENT(block_size, ctr); + memxor3(dst, src, buffer, length); + } } } -- cgit v1.2.1