From: Niels Möller Date: Tue, 14 Sep 2021 11:51:17 +0000 (+0200) Subject: Test AEAD encrypt/decrypt with message split into pieces. X-Git-Tag: nettle_3.8_release_20220602~98 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a966ac3869b7b8d94fb92740415ad71bbbdeee7;p=thirdparty%2Fnettle.git Test AEAD encrypt/decrypt with message split into pieces. --- diff --git a/ChangeLog b/ChangeLog index 8321d731..fbe076ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2021-09-14 Niels Möller + + * testsuite/testutils.c (test_aead): Test encrypt/decrypt with + message split into pieces. + 2021-09-12 Niels Möller * Merged CBC-AES changes into master branch. diff --git a/testsuite/testutils.c b/testsuite/testutils.c index 781907a9..64dbcd0d 100644 --- a/testsuite/testutils.c +++ b/testsuite/testutils.c @@ -798,50 +798,20 @@ test_aead(const struct nettle_aead *aead, void *ctx = xalloc(aead->context_size); uint8_t *data; uint8_t *buffer = xalloc(aead->digest_size); - size_t length; + size_t offset; ASSERT (cleartext->length == ciphertext->length); - length = cleartext->length; ASSERT (key->length == aead->key_size); - data = xalloc(length); - - /* encryption */ - memset(buffer, 0, aead->digest_size); - aead->set_encrypt_key(ctx, key->data); - - if (nonce->length != aead->nonce_size) - { - ASSERT (set_nonce); - set_nonce (ctx, nonce->length, nonce->data); - } - else - aead->set_nonce(ctx, nonce->data); - - if (aead->update && authtext->length) - aead->update(ctx, authtext->length, authtext->data); - - if (length) - aead->encrypt(ctx, length, data, cleartext->data); - - if (digest) - { - ASSERT (digest->length <= aead->digest_size); - aead->digest(ctx, digest->length, buffer); - ASSERT(MEMEQ(digest->length, buffer, digest->data)); - } - else - ASSERT(!aead->digest); + data = xalloc(cleartext->length); - ASSERT(MEMEQ(length, data, ciphertext->data)); + ASSERT(aead->block_size > 0); - /* decryption */ - if (aead->set_decrypt_key) + for (offset = 0; offset <= cleartext->length; offset += aead->block_size) { - memset(buffer, 0, aead->digest_size); - - aead->set_decrypt_key(ctx, key->data); + /* encryption */ + aead->set_encrypt_key(ctx, key->data); if (nonce->length != aead->nonce_size) { @@ -853,16 +823,57 @@ test_aead(const struct nettle_aead *aead, if (aead->update && authtext->length) aead->update(ctx, authtext->length, authtext->data); - - if (length) - aead->decrypt(ctx, length, data, data); + + if (offset > 0) + aead->encrypt(ctx, offset, data, cleartext->data); + + if (offset < cleartext->length) + aead->encrypt(ctx, cleartext->length - offset, + data + offset, cleartext->data + offset); if (digest) { + ASSERT (digest->length <= aead->digest_size); + memset(buffer, 0, aead->digest_size); aead->digest(ctx, digest->length, buffer); ASSERT(MEMEQ(digest->length, buffer, digest->data)); } - ASSERT(MEMEQ(length, data, cleartext->data)); + else + ASSERT(!aead->digest); + + ASSERT(MEMEQ(cleartext->length, data, ciphertext->data)); + + /* decryption */ + if (aead->set_decrypt_key) + { + aead->set_decrypt_key(ctx, key->data); + + if (nonce->length != aead->nonce_size) + { + ASSERT (set_nonce); + set_nonce (ctx, nonce->length, nonce->data); + } + else + aead->set_nonce(ctx, nonce->data); + + if (aead->update && authtext->length) + aead->update(ctx, authtext->length, authtext->data); + + if (offset > 0) + aead->decrypt (ctx, offset, data, data); + + if (offset < cleartext->length) + aead->decrypt(ctx, cleartext->length - offset, + data + offset, data + offset); + + if (digest) + { + memset(buffer, 0, aead->digest_size); + aead->digest(ctx, digest->length, buffer); + ASSERT(MEMEQ(digest->length, buffer, digest->data)); + } + ASSERT(MEMEQ(cleartext->length, data, cleartext->data)); + } } free(ctx); free(data);