diff options
author | George Kadianakis <desnacked@riseup.net> | 2016-09-05 17:21:44 +0200 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2016-12-14 15:17:57 -0500 |
commit | b9010c8bf5f1231c51cd3c7b134ec8576a8f9de5 (patch) | |
tree | 7272f4769e19e6e6a94f8b805e9f305c82896346 /src/test/test_crypto.c | |
parent | 0980787f91cfc420f02dead3fea99882ab8c2ada (diff) | |
download | tor-b9010c8bf5f1231c51cd3c7b134ec8576a8f9de5.tar.gz tor-b9010c8bf5f1231c51cd3c7b134ec8576a8f9de5.zip |
prop224 prepwork: Introduce HMAC-SHA3 function.
Diffstat (limited to 'src/test/test_crypto.c')
-rw-r--r-- | src/test/test_crypto.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c index 64a46f7914..91c55d8c3d 100644 --- a/src/test/test_crypto.c +++ b/src/test/test_crypto.c @@ -1135,6 +1135,48 @@ test_crypto_sha3_xof(void *arg) tor_free(mem_op_hex_tmp); } +/* Test our MAC-SHA3 function. There are not actually any MAC-SHA3 test + * vectors out there for our H(len(k) || k || m) construction. Hence what we + * are gonna do is test our crypto_mac_sha3_256() function against manually + * doing H(len(k) || k||m). If in the future the Keccak group decides to + * standarize an MAC construction and make test vectors, we should + * incorporate them here. */ +static void +test_crypto_mac_sha3(void *arg) +{ + const char msg[] = "i am in a library somewhere using my computer"; + const char key[] = "i'm from the past talking to the future."; + + char hmac_test[DIGEST256_LEN]; + char hmac_manual[DIGEST256_LEN]; + + (void) arg; + + /* First let's use our nice HMAC-SHA3 function */ + crypto_mac_sha3_256(hmac_test, sizeof(hmac_test), + key, strlen(key), + msg, strlen(msg)); + + /* Now let's try a manual H(k || m) construction */ + { + char *key_msg_concat = NULL; + int result; + + tor_asprintf(&key_msg_concat, "%s%s", key, msg); + + result = crypto_digest256(hmac_manual, + key_msg_concat, strlen(key_msg_concat), + DIGEST_SHA3_256); + tt_int_op(result, ==, 0); + tor_free(key_msg_concat); + } + + /* Now compare the two results */ + tt_mem_op(hmac_test, OP_EQ, hmac_manual, DIGEST256_LEN); + + done: ; +} + /** Run unit tests for our public key crypto functions */ static void test_crypto_pk(void *arg) @@ -2918,6 +2960,7 @@ struct testcase_t crypto_tests[] = { { "digest_names", test_crypto_digest_names, 0, NULL, NULL }, { "sha3", test_crypto_sha3, TT_FORK, NULL, NULL}, { "sha3_xof", test_crypto_sha3_xof, TT_FORK, NULL, NULL}, + { "mac_sha3", test_crypto_mac_sha3, TT_FORK, NULL, NULL}, CRYPTO_LEGACY(dh), { "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &passthrough_setup, (void*)"aes" }, |