cfb8: Fix decrypt path master
authorStefan Metzmacher <metze@samba.org>
Tue, 17 Sep 2019 16:27:09 +0000 (18:27 +0200)
committerGünther Deschner <gd@samba.org>
Tue, 17 Sep 2019 18:59:45 +0000 (20:59 +0200)
It failed to decrypt buffers smaller than blocksize.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
cfb.c

diff --git a/cfb.c b/cfb.c
index 5429fc9c8afa11f3aa72171d68edbfa80bb1a3e9..93c3025a220cc17a2cf0edf2d2d77dd7e5632558 100644 (file)
--- a/cfb.c
+++ b/cfb.c
@@ -210,13 +210,15 @@ cfb8_decrypt(const void *ctx, nettle_cipher_func *f,
   TMP_ALLOC(outbuf, block_size * 2);
   uint8_t i = 0;
 
-  memcpy(buffer, iv, block_size);
-  memcpy(buffer + block_size, src,
-        length < block_size ? length : block_size);
+  memcpy(buffer + block_size, iv, block_size);
 
   while (length)
     {
 
+      memcpy(buffer, buffer + block_size, block_size);
+      memcpy(buffer + block_size, src,
+            length < block_size ? length : block_size);
+
       for (i = 0; i < length && i < block_size; i++)
        f(ctx, block_size, outbuf + i, buffer + i);
 
@@ -226,10 +228,6 @@ cfb8_decrypt(const void *ctx, nettle_cipher_func *f,
       src += i;
       dst += i;
 
-      memcpy(buffer, buffer + block_size, block_size);
-      memcpy(buffer + block_size, src,
-            length < block_size ? length : block_size);
-
     }
 
   memcpy(iv, buffer + i, block_size);