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

Signed-off-by: Stefan Metzmacher <metze@samba.org>
lib/nettle/backport/cfb8.c

index e9816feb78a859695236dd159d0f8c5d10556cd4..92e325cdc32f9d5088dca55dffed6556deb0844f 100644 (file)
@@ -94,13 +94,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);
 
@@ -110,10 +112,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);