lib/crypto: sync AES_cfb8_encrypt() from heimdal
authorStefan Metzmacher <metze@samba.org>
Wed, 12 Aug 2015 10:58:49 +0000 (12:58 +0200)
committerJeremy Allison <jra@samba.org>
Thu, 27 Aug 2015 18:23:20 +0000 (20:23 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11451

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/crypto/aes.c
lib/crypto/aes.h

index a47a45659332a0c29e5348a5fb8e6777d433e82b..f7f96889c127535daaec8236dc91354f442199b0 100644 (file)
@@ -113,24 +113,25 @@ AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
     }
 }
 
-void aes_cfb8_encrypt(const uint8_t *in, uint8_t *out,
-                     size_t length, const AES_KEY *key,
-                     uint8_t *iv, int forward)
+void
+AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
+                 unsigned long size, const AES_KEY *key,
+                 unsigned char *iv, int forward_encrypt)
 {
-       size_t i;
+    int i;
 
-       for (i=0; i < length; i++) {
-               uint8_t tiv[AES_BLOCK_SIZE*2];
+    for (i = 0; i < size; i++) {
+        unsigned char tmp[AES_BLOCK_SIZE + 1];
 
-               memcpy(tiv, iv, AES_BLOCK_SIZE);
-               AES_encrypt(iv, iv, key);
-               if (!forward) {
-                       tiv[AES_BLOCK_SIZE] = in[i];
-               }
-               out[i] = in[i] ^ iv[0];
-               if (forward) {
-                       tiv[AES_BLOCK_SIZE] = out[i];
-               }
-               memcpy(iv, tiv+1, AES_BLOCK_SIZE);
-       }
+        memcpy(tmp, iv, AES_BLOCK_SIZE);
+        AES_encrypt(iv, iv, key);
+        if (!forward_encrypt) {
+            tmp[AES_BLOCK_SIZE] = in[i];
+        }
+        out[i] = in[i] ^ iv[0];
+        if (forward_encrypt) {
+            tmp[AES_BLOCK_SIZE] = out[i];
+        }
+        memcpy(iv, &tmp[1], AES_BLOCK_SIZE);
+    }
 }
index 2cfb58786ec780b5ce0a4100660174976fafc13f..7487486370acb896329c25627e64c50f1a3608be 100644 (file)
@@ -42,6 +42,7 @@
 #define AES_encrypt samba_AES_encrypt
 #define AES_decrypt samba_AES_decrypt
 #define AES_cbc_encrypt samba_AES_cbc_encrypt
+#define AES_cfb8_encrypt samba_AES_cfb8_encrypt
 
 /*
  *
@@ -72,9 +73,12 @@ void AES_cbc_encrypt(const unsigned char *, unsigned char *,
                     const unsigned long, const AES_KEY *,
                     unsigned char *, int);
 
-void aes_cfb8_encrypt(const uint8_t *in, uint8_t *out,
-                     size_t length, const AES_KEY *key,
-                     uint8_t *iv, int forward);
+void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
+                     unsigned long size, const AES_KEY *key,
+                     unsigned char *iv, int forward_encrypt);
+
+#define aes_cfb8_encrypt(in, out, size, key, iv, forward_encrypt) \
+       AES_cfb8_encrypt(in, out, size, key, iv, forward_encrypt)
 
 #ifdef  __cplusplus
 }