summaryrefslogtreecommitdiff
path: root/ctr.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2012-12-04 20:50:00 +0100
committerNiels Möller <nisse@lysator.liu.se>2012-12-04 20:50:00 +0100
commitc36c0f4e22fad4374c05f6e526e1fb34d0457ee2 (patch)
tree968d89fafae99aae7b8afcf084b1c4739d4c355e /ctr.c
parent5b7605e07de1a6199760160edce31622ae33ca3d (diff)
downloadnettle-c36c0f4e22fad4374c05f6e526e1fb34d0457ee2.tar.gz
Fixed ctr_crypt zero-length bug, reported by Tim Kosse.
Diffstat (limited to 'ctr.c')
-rw-r--r--ctr.c20
1 files changed, 10 insertions, 10 deletions
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);
+ }
}
}