- added hmac test
authorMartin Willi <martin@strongswan.org>
Tue, 22 Nov 2005 09:10:38 +0000 (09:10 -0000)
committerMartin Willi <martin@strongswan.org>
Tue, 22 Nov 2005 09:10:38 +0000 (09:10 -0000)
Source/charon/testcases/hmac_test.c [new file with mode: 0644]
Source/charon/testcases/hmac_test.h [new file with mode: 0644]
Source/charon/testcases/testcases.c

diff --git a/Source/charon/testcases/hmac_test.c b/Source/charon/testcases/hmac_test.c
new file mode 100644 (file)
index 0000000..4a36dcb
--- /dev/null
@@ -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 (file)
index 0000000..6afddef
--- /dev/null
@@ -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_*/
index 14611f1..dd758a9 100644 (file)
@@ -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);