5 #include <sec/hash/sha1.h>
6 #include <sec/hash/md5.h>
9 int hmac_testSetup(void)
15 int hmac_testTearDown(void)
29 const struct Test_HMAC tests_hmac_md5[] =
32 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 16,
34 "\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
38 "what do ya want for nothing?", 28,
39 "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
42 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 16,
43 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
44 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
45 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
46 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
47 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
48 "\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
51 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
52 "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
53 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
54 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
55 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
56 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
57 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
58 "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea\x3a\x75\x16\x47\x46\xff\xaa\x79",
61 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 16,
62 "Test With Truncation", 20,
63 "\x56\x46\x1e\xf2\x34\x2e\xdc\x00\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
66 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
67 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
68 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
69 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
70 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
71 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
72 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
73 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
74 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
75 "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
78 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
79 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
80 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
81 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
82 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
83 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
84 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
85 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
86 "Test Using Larger Than Block-Size Key and Larger Than One "
87 "Block-Size Data", 73,
88 "\x6f\x63\x0f\xad\x67\xcd\xa0\xee\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
92 const struct Test_HMAC tests_hmac_sha1[] =
95 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b", 20,
97 "\xb6\x17\x31\x86\x55\x05\x72\x64\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1\x46\xbe\x00",
101 "what do ya want for nothing?", 28,
102 "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
105 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 20,
106 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
107 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
108 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
109 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
110 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd", 50,
111 "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
114 "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19", 25,
115 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
116 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
117 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
118 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
119 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd", 50,
120 "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
123 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c", 20,
124 "Test With Truncation", 20,
125 "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
128 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
129 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
130 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
131 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
132 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
133 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
134 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
135 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
136 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
137 "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
140 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
141 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
142 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
143 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
144 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
145 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
146 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
147 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", 80,
148 "Test Using Larger Than Block-Size Key and Larger "
149 "Than One Block-Size Data", 73,
150 "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
154 static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count)
156 for (int i=0; i<count; ++i, ++t)
158 mac_set_key(mac, (const uint8_t*)t->key, t->key_len);
160 mac_update(mac, (const uint8_t*)t->data, t->data_len);
161 ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0);
165 int hmac_testRun(void)
167 algo_run_tests(hmac_stackinit(MD5_stackinit()),
168 tests_hmac_md5, countof(tests_hmac_md5));
170 algo_run_tests(hmac_stackinit(SHA1_stackinit()),
171 tests_hmac_sha1, countof(tests_hmac_sha1));