]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Test cipher encrypt/decrypt methods with varying data alignment.
authorNiels Möller <nisse@lysator.liu.se>
Wed, 9 Apr 2025 07:53:16 +0000 (09:53 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Wed, 9 Apr 2025 07:53:16 +0000 (09:53 +0200)
ChangeLog
testsuite/testutils.c

index 92cbb661f8adf01c39ce55216b2748581bd3cb58..14ba03588af2d6f09c639f997d589e91b80fca9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2025-04-09  Niels Möller  <nisse@lysator.liu.se>
+
+       * testsuite/testutils.c (test_cipher): Test encrypt and
+       decrypt methods with varying data alignment.
+
 2025-04-08  Niels Möller  <nisse@lysator.liu.se>
 
        * twofish.c (twofish_encrypt, twofish_decrypt): Avoid copying via
index 1274331d353901535595c0dd0ac6d55146f050ae..a60e20d665d3b6eb5ae8e76d4398d11adbc9efa6 100644 (file)
@@ -183,43 +183,48 @@ test_cipher(const struct nettle_cipher *cipher,
            const struct tstring *ciphertext)
 {
   void *ctx = xalloc(cipher->context_size);
-  uint8_t *data = xalloc(cleartext->length);
+  uint8_t *buf = xalloc(cleartext->length + 7);
   size_t length;
+  unsigned align;
   ASSERT (cleartext->length == ciphertext->length);
   length = cleartext->length;
 
   ASSERT (key->length == cipher->key_size);
-  cipher->set_encrypt_key(ctx, key->data);
-  cipher->encrypt(ctx, length, data, cleartext->data);
 
-  if (!MEMEQ(length, data, ciphertext->data))
+  for (align = 0; align <= 7; align++)
     {
-      fprintf(stderr, "Encrypt failed:\nInput:");
-      tstring_print_hex(cleartext);
-      fprintf(stderr, "\nOutput: ");
-      print_hex(length, data);
-      fprintf(stderr, "\nExpected:");
-      tstring_print_hex(ciphertext);
-      fprintf(stderr, "\n");
-      FAIL();
-    }
-  cipher->set_decrypt_key(ctx, key->data);
-  cipher->decrypt(ctx, length, data, data);
+      uint8_t *data = buf + align;
+      cipher->set_encrypt_key(ctx, key->data);
+      cipher->encrypt(ctx, length, data, cleartext->data);
 
-  if (!MEMEQ(length, data, cleartext->data))
-    {
-      fprintf(stderr, "Decrypt failed:\nInput:");
-      tstring_print_hex(ciphertext);
-      fprintf(stderr, "\nOutput: ");
-      print_hex(length, data);
-      fprintf(stderr, "\nExpected:");
-      tstring_print_hex(cleartext);
-      fprintf(stderr, "\n");
-      FAIL();
-    }
+      if (!MEMEQ(length, data, ciphertext->data))
+       {
+         fprintf(stderr, "Encrypt failed (align %d):\nInput:", align);
+         tstring_print_hex(cleartext);
+         fprintf(stderr, "\nOutput: ");
+         print_hex(length, data);
+         fprintf(stderr, "\nExpected:");
+         tstring_print_hex(ciphertext);
+         fprintf(stderr, "\n");
+         FAIL();
+       }
+      cipher->set_decrypt_key(ctx, key->data);
+      cipher->decrypt(ctx, length, data, data);
 
+      if (!MEMEQ(length, data, cleartext->data))
+       {
+         fprintf(stderr, "Decrypt failed (align %d):\nInput:", align);
+         tstring_print_hex(ciphertext);
+         fprintf(stderr, "\nOutput: ");
+         print_hex(length, data);
+         fprintf(stderr, "\nExpected:");
+         tstring_print_hex(cleartext);
+         fprintf(stderr, "\n");
+         FAIL();
+       }
+    }
   free(ctx);
-  free(data);
+  free(buf);
 }
 
 void