summaryrefslogtreecommitdiff
path: root/testsuite/testutils.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2021-09-14 13:51:17 +0200
committerNiels Möller <nisse@lysator.liu.se>2021-09-14 13:51:17 +0200
commit7a966ac3869b7b8d94fb92740415ad71bbbdeee7 (patch)
treef56b1749eabb4779cb6a497bca7786d36809f26d /testsuite/testutils.c
parentdfc8ee82e1f1be274ee62937d350731d40cddcde (diff)
downloadnettle-7a966ac3869b7b8d94fb92740415ad71bbbdeee7.tar.gz
Test AEAD encrypt/decrypt with message split into pieces.
Diffstat (limited to 'testsuite/testutils.c')
-rw-r--r--testsuite/testutils.c91
1 files changed, 51 insertions, 40 deletions
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);