diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/charon/testcases/hmac_test.c | 180 | ||||
-rw-r--r-- | Source/charon/testcases/hmac_test.h | 37 | ||||
-rw-r--r-- | Source/charon/testcases/testcases.c | 12 |
3 files changed, 226 insertions, 3 deletions
diff --git a/Source/charon/testcases/hmac_test.c b/Source/charon/testcases/hmac_test.c new file mode 100644 index 000000000..4a36dcb9c --- /dev/null +++ b/Source/charon/testcases/hmac_test.c @@ -0,0 +1,180 @@ +/** + * @file hmac_test.h + * + * @brief Tests the hmac class + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <string.h> + +#include "hmac_test.h" + +#include "../transforms/hmac.h" +#include "../utils/allocator.h" + + +/* + * described in Header-File + */ +void test_hmac_sha1(tester_t *tester) +{ + /* + * Test cases from RFC2202 + * + * test_case = 1 + * key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b + * key_len = 20 + * data = "Hi There" + * data_len = 8 + * digest = 0xb617318655057264e28bc0b6fb378c8ef146be00 + * + * test_case = 2 + * key = "Jefe" + * key_len = 4 + * data = "what do ya want for nothing?" + * data_len = 28 + * digest = 0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79 + * + * test_case = 3 + * key = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + * key_len = 20 + * data = 0xdd repeated 50 times + * data_len = 50 + * digest = 0x125d7342b9ac11cd91a39af48aa17b4f63f175d3 + * + * test_case = 4 + * key = 0x0102030405060708090a0b0c0d0e0f10111213141516171819 + * key_len = 25 + * data = 0xcd repeated 50 times + * data_len = 50 + * digest = 0x4c9007f4026250c6bc8414f9bf50c86c2d7235da + * + * test_case = 5 + * key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c + * key_len = 20 + * data = "Test With Truncation" + * data_len = 20 + * digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04 + * digest-96 = 0x4c1a03424b55e07fe7f27be1 + * + * test_case = 6 + * key = 0xaa repeated 80 times + * key_len = 80 + * data = "Test Using Larger Than Block-Size Key - Hash Key First" + * data_len = 54 + * digest = 0xaa4ae5e15272d00e95705637ce8a3b55ed402112 + * + * test_case = 7 + * key = 0xaa repeated 80 times + * key_len = 80 + * data = "Test Using Larger Than Block-Size Key and Larger + * Than One Block-Size Data" + * data_len = 73 + * digest = 0xe8e99d0f45237d786d6bbaa7965c7808bbff1a91 + * + * currently performing test 1, 2 and 7 + */ + + chunk_t keys[7]; + chunk_t data[7]; + chunk_t digest[7]; + chunk_t reference[7]; + int i; + + /* + * values for test 1 + */ + u_int8_t key1[] = { + 0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b, + 0x0b,0x0b,0x0b,0x0b + }; + keys[0].ptr = key1; + keys[0].len = sizeof(key1); + data[0].ptr = "Hi There"; + data[0].len = 8; + u_int8_t reference1[] = { + 0xb6,0x17,0x31,0x86, + 0x55,0x05,0x72,0x64, + 0xe2,0x8b,0xc0,0xb6, + 0xfb,0x37,0x8c,0x8e, + 0xf1,0x46,0xbe,0x00 + }; + reference[0].ptr = reference1; + reference[0].len = sizeof(reference1); + + /* + * values for test 2 + */ + u_int8_t reference2[] = { + 0xef,0xfc,0xdf,0x6a, + 0xe5,0xeb,0x2f,0xa2, + 0xd2,0x74,0x16,0xd5, + 0xf1,0x84,0xdf,0x9c, + 0x25,0x9a,0x7c,0x79 + }; + keys[1].ptr = "Jefe"; + keys[1].len = 4; + data[1].ptr = "what do ya want for nothing?"; + data[1].len = 28; + reference[1].ptr = reference2; + reference[1].len = sizeof(reference2); + + /* + * values for test 7 + */ + u_int8_t key7[] = { + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa, + }; + u_int8_t reference7[] = { + 0xe8,0xe9,0x9d,0x0f, + 0x45,0x23,0x7d,0x78, + 0x6d,0x6b,0xba,0xa7, + 0x96,0x5c,0x78,0x08, + 0xbb,0xff,0x1a,0x91 + }; + keys[2].ptr = key7; + keys[2].len = sizeof(key7); + data[2].ptr = "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"; + data[2].len = 73; + reference[2].ptr = reference7; + reference[2].len = sizeof(reference7); + + + for (i=0; i<3; i++) + { + hmac_t *hmac = hmac_create(HASH_SHA1, keys[i]); + hmac->allocate_mac(hmac, data[i], &digest[i]); + hmac->destroy(hmac); + + tester->assert_true(tester, digest[i].len == 20, "chunk len"); + tester->assert_false(tester, memcmp(digest[i].ptr, reference[i].ptr, 20), "hmac value"); + allocator_free(digest[i].ptr); + } +} diff --git a/Source/charon/testcases/hmac_test.h b/Source/charon/testcases/hmac_test.h new file mode 100644 index 000000000..6afddef2f --- /dev/null +++ b/Source/charon/testcases/hmac_test.h @@ -0,0 +1,37 @@ +/** + * @file hmac_test.h + * + * @brief Tests the hmac class + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef HMAC_TEST_H_ +#define HMAC_TEST_H_ + +#include "../transforms/hmac.h" +#include "../utils/tester.h" + +/** + * @brief Test function used to test the hmac functionality + * using sha1. + * + * @param tester associated tester object + */ +void test_hmac_sha1(tester_t *tester); + +#endif /*HMAC_TEST_H_*/ diff --git a/Source/charon/testcases/testcases.c b/Source/charon/testcases/testcases.c index 14611f12e..dd758a91b 100644 --- a/Source/charon/testcases/testcases.c +++ b/Source/charon/testcases/testcases.c @@ -49,6 +49,7 @@ #include "packet_test.h" #include "diffie_hellman_test.h" #include "hasher_sha1_test.h" +#include "hmac_test.h" /* output for test messages */ @@ -174,10 +175,15 @@ test_t packet_test = {test_packet,"Packet"}; test_t diffie_hellman_test = {test_diffie_hellman,"Diffie Hellman"}; /** - * Test for packet_t + * Test for sha1 hasher */ test_t hasher_sha1_test = {test_hasher_sha1,"SHA1 hasher"}; +/** + * Test for hmac + */ +test_t hmac_test1 = {test_hmac_sha1, "HMAC-SHA1"}; + /** * Global job-queue @@ -267,8 +273,8 @@ logger_manager_t *global_logger_manager; tester_t *tester = tester_create(test_output, FALSE); - tester->perform_tests(tester,all_tests); - //tester->perform_test(tester,&hasher_sha1_test); + //tester->perform_tests(tester,all_tests); + tester->perform_test(tester,&hmac_test1); |