From: Niels Möller Date: Fri, 20 Sep 2013 12:56:34 +0000 (+0200) Subject: More tests for gcm_hash. X-Git-Tag: nettle_3.0_release_20140607~215 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6882951a9e88125abf0c7639d5a43ad4506997a2;p=thirdparty%2Fnettle.git More tests for gcm_hash. --- diff --git a/ChangeLog b/ChangeLog index bfea9904..eee1e97d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-09-20 Niels Möller + + * testsuite/gcm-test.c: Added tests with associated data of + varying size. + + * testsuite/testutils.c (tstring_alloc): Add NUL-termination. + 2013-09-18 Niels Möller * Makefile.in: New stampfiles, libnettle.stamp and diff --git a/testsuite/gcm-test.c b/testsuite/gcm-test.c index b1e11a4b..d0278b68 100644 --- a/testsuite/gcm-test.c +++ b/testsuite/gcm-test.c @@ -1,5 +1,29 @@ #include "testutils.h" #include "nettle-internal.h" +#include "gcm.h" + +static void +test_gcm_hash (const struct tstring *msg, const struct tstring *ref) +{ + struct gcm_aes_ctx ctx; + const uint8_t z16[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + uint8_t digest[16]; + + ASSERT (ref->length == sizeof(digest)); + gcm_aes_set_key (&ctx, 16, z16); + gcm_aes_set_iv (&ctx, 16, z16); + gcm_aes_update (&ctx, msg->length, msg->data); + gcm_aes_digest (&ctx, sizeof(digest), digest); + if (!MEMEQ (ref->length, ref->data, digest)) + { + fprintf (stderr, "gcm_hash failed, msg: %s\nOutput: ", msg->data); + print_hex (16, digest); + fprintf(stderr, "Expected:"); + tstring_print_hex(ref); + fprintf(stderr, "\n"); + FAIL(); + } +} void test_main(void) @@ -272,5 +296,44 @@ test_main(void) "c3c0c95156809539fcf0e2429a6b5254" "16aedbf5a0de6a57a637b39b"), SHEX("a44a8266ee1c8eb0c8b5d4cf5ae9f19a")); + + /* Test gcm_hash, with varying message size, keys and iv all zero. + Not compared to any other implementation. */ + test_gcm_hash (SDATA("a"), + SHEX("1521c9a442bbf63b 2293a21d4874a5fd")); + test_gcm_hash (SDATA("ab"), + SHEX("afb4592d2c7c1687 37f27271ee30412a")); + test_gcm_hash (SDATA("abc"), + SHEX("9543ca3e1662ba03 9a921ec2a20769be")); + test_gcm_hash (SDATA("abcd"), + SHEX("8f041cc12bcb7e1b 0257a6da22ee1185")); + test_gcm_hash (SDATA("abcde"), + SHEX("0b2376e5fed58ffb 717b520c27cd5c35")); + test_gcm_hash (SDATA("abcdef"), + SHEX("9679497a1eafa161 4942963380c1a76f")); + test_gcm_hash (SDATA("abcdefg"), + SHEX("83862e40339536bc 723d9817f7df8282")); + test_gcm_hash (SDATA("abcdefgh"), + SHEX("b73bcc4d6815c4dc d7424a04e61b87c5")); + test_gcm_hash (SDATA("abcdefghi"), + SHEX("8e7846a383f0b3b2 07b01160a5ef993d")); + test_gcm_hash (SDATA("abcdefghij"), + SHEX("37651643b6f8ecac 4ea1b320e6ea308c")); + test_gcm_hash (SDATA("abcdefghijk"), + SHEX("c1ce10106ee23286 f00513f55e2226b0")); + test_gcm_hash (SDATA("abcdefghijkl"), + SHEX("c6a3e32a90196cdf b2c7a415d637e6ca")); + test_gcm_hash (SDATA("abcdefghijklm"), + SHEX("6cca29389d4444fa 3d20e65497088fd8")); + test_gcm_hash (SDATA("abcdefghijklmn"), + SHEX("19476a997ec0a824 2022db0f0e8455ce")); + test_gcm_hash (SDATA("abcdefghijklmno"), + SHEX("f66931cee7eadcbb d42753c3ac3c4c16")); + test_gcm_hash (SDATA("abcdefghijklmnop"), + SHEX("a79699ce8bed61f9 b8b1b4c5abb1712e")); + test_gcm_hash (SDATA("abcdefghijklmnopq"), + SHEX("65f8245330febf15 6fd95e324304c258")); + test_gcm_hash (SDATA("abcdefghijklmnopqr"), + SHEX("d07259e85d4fc998 5a662eed41c8ed1d")); } diff --git a/testsuite/testutils.c b/testsuite/testutils.c index 4f57c550..669669e6 100644 --- a/testsuite/testutils.c +++ b/testsuite/testutils.c @@ -65,9 +65,11 @@ static struct tstring *tstring_first = NULL; struct tstring * tstring_alloc (size_t length) { - struct tstring *s = xalloc(sizeof(struct tstring) + length - 1); + struct tstring *s = xalloc(sizeof(struct tstring) + length); s->length = length; s->next = tstring_first; + /* NUL-terminate, for convenience. */ + s->data[length] = '\0'; tstring_first = s; return s; }