diff options
author | Niels Möller <nisse@lysator.liu.se> | 2021-09-14 13:51:17 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2021-09-14 13:51:17 +0200 |
commit | 7a966ac3869b7b8d94fb92740415ad71bbbdeee7 (patch) | |
tree | f56b1749eabb4779cb6a497bca7786d36809f26d /testsuite/testutils.c | |
parent | dfc8ee82e1f1be274ee62937d350731d40cddcde (diff) | |
download | nettle-7a966ac3869b7b8d94fb92740415ad71bbbdeee7.tar.gz |
Test AEAD encrypt/decrypt with message split into pieces.
Diffstat (limited to 'testsuite/testutils.c')
-rw-r--r-- | testsuite/testutils.c | 91 |
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); |