diff options
author | Niels Möller <nisse@lysator.liu.se> | 2019-12-25 17:55:19 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2019-12-25 17:55:19 +0100 |
commit | 64a6def6410eccdf3f8cef658a4ec761f889dc48 (patch) | |
tree | bec38cd4ad7120f3a087e84ac033fdcaca5a6b66 /testsuite/testutils.c | |
parent | 4c658fbfae00580593b9d82a25aee182f313773a (diff) | |
download | nettle-64a6def6410eccdf3f8cef658a4ec761f889dc48.tar.gz |
Support for SHAKE256, based on patch by Daiki Ueno.
* shake256.c (sha3_256_shake): New file and function.
* Makefile.in (nettle_SOURCES): Add shake256.c.
* testsuite/testutils.c (test_hash): Allow arbitrary digest size,
if hash->digest_size == 0.
* testsuite/shake.awk: New script to extract test vectors.
* testsuite/Makefile.in (TS_NETTLE_SOURCES): Add shake256-test.c.
(DISTFILES): Add shake.awk.
Diffstat (limited to 'testsuite/testutils.c')
-rw-r--r-- | testsuite/testutils.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/testsuite/testutils.c b/testsuite/testutils.c index 53bb8703..7772d2b0 100644 --- a/testsuite/testutils.c +++ b/testsuite/testutils.c @@ -866,33 +866,36 @@ test_hash(const struct nettle_hash *hash, const struct tstring *digest) { void *ctx = xalloc(hash->context_size); - uint8_t *buffer = xalloc(hash->digest_size); + uint8_t *buffer = xalloc(digest->length); uint8_t *input; unsigned offset; - ASSERT (digest->length == hash->digest_size); + /* Here, hash->digest_size zero means arbitrary size. */ + if (hash->digest_size) + ASSERT (digest->length == hash->digest_size); hash->init(ctx); hash->update(ctx, msg->length, msg->data); - hash->digest(ctx, hash->digest_size, buffer); + hash->digest(ctx, digest->length, buffer); - if (MEMEQ(hash->digest_size, digest->data, buffer) == 0) + if (MEMEQ(digest->length, digest->data, buffer) == 0) { fprintf(stdout, "\nGot:\n"); - print_hex(hash->digest_size, buffer); + print_hex(digest->length, buffer); fprintf(stdout, "\nExpected:\n"); - print_hex(hash->digest_size, digest->data); + print_hex(digest->length, digest->data); abort(); } - memset(buffer, 0, hash->digest_size); + memset(buffer, 0, digest->length); hash->update(ctx, msg->length, msg->data); - hash->digest(ctx, hash->digest_size - 1, buffer); + ASSERT(digest->length > 0); + hash->digest(ctx, digest->length - 1, buffer); - ASSERT(MEMEQ(hash->digest_size - 1, digest->data, buffer)); + ASSERT(MEMEQ(digest->length - 1, digest->data, buffer)); - ASSERT(buffer[hash->digest_size - 1] == 0); + ASSERT(buffer[digest->length - 1] == 0); input = xalloc (msg->length + 16); for (offset = 0; offset < 16; offset++) @@ -900,13 +903,13 @@ test_hash(const struct nettle_hash *hash, memset (input, 0, msg->length + 16); memcpy (input + offset, msg->data, msg->length); hash->update (ctx, msg->length, input + offset); - hash->digest (ctx, hash->digest_size, buffer); - if (MEMEQ(hash->digest_size, digest->data, buffer) == 0) + hash->digest (ctx, digest->length, buffer); + if (MEMEQ(digest->length, digest->data, buffer) == 0) { fprintf(stdout, "hash input address: %p\nGot:\n", input + offset); - print_hex(hash->digest_size, buffer); + print_hex(digest->length, buffer); fprintf(stdout, "\nExpected:\n"); - print_hex(hash->digest_size, digest->data); + print_hex(digest->length, digest->data); abort(); } } |