From: Niels Möller Date: Wed, 9 Apr 2025 07:53:16 +0000 (+0200) Subject: Test cipher encrypt/decrypt methods with varying data alignment. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4a4813cda5189e12802414e0e6db2a7ba591bec4;p=thirdparty%2Fnettle.git Test cipher encrypt/decrypt methods with varying data alignment. --- diff --git a/ChangeLog b/ChangeLog index 92cbb661..14ba0358 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2025-04-09 Niels Möller + + * testsuite/testutils.c (test_cipher): Test encrypt and + decrypt methods with varying data alignment. + 2025-04-08 Niels Möller * twofish.c (twofish_encrypt, twofish_decrypt): Avoid copying via diff --git a/testsuite/testutils.c b/testsuite/testutils.c index 1274331d..a60e20d6 100644 --- a/testsuite/testutils.c +++ b/testsuite/testutils.c @@ -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