diff options
author | Niels Möller <nisse@lysator.liu.se> | 2012-12-04 20:50:00 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2012-12-04 20:50:00 +0100 |
commit | c36c0f4e22fad4374c05f6e526e1fb34d0457ee2 (patch) | |
tree | 968d89fafae99aae7b8afcf084b1c4739d4c355e /ctr.c | |
parent | 5b7605e07de1a6199760160edce31622ae33ca3d (diff) | |
download | nettle-c36c0f4e22fad4374c05f6e526e1fb34d0457ee2.tar.gz |
Fixed ctr_crypt zero-length bug, reported by Tim Kosse.
Diffstat (limited to 'ctr.c')
-rw-r--r-- | ctr.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -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); + } } } |