5 /* HMAC-MD5 test vectors as per RFC 2202 */
8 guint8 key_md5_test1[] = {
9 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
10 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
11 guint8 result_md5_test1[] = {
12 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4,
13 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d };
16 guint8 result_md5_test2[] = {
17 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
18 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 };
21 guint8 key_md5_test3[] = {
22 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
23 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
24 guint8 data_md5_test3[] = {
25 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
26 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
27 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
28 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
29 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd };
30 guint8 result_md5_test3[] = {
31 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8,
32 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 };
35 guint8 key_md5_test4[] = {
36 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
37 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
38 0x15, 0x16, 0x17, 0x18, 0x19 };
39 guint8 data_md5_test4[] = {
40 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
41 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
42 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
43 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
44 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };
45 guint8 result_md5_test4[] = {
46 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75,
47 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 };
50 guint8 key_md5_test5[] = {
51 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
52 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c};
53 guint8 result_md5_test5[] = {
54 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba,
55 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c };
58 guint8 key_md5_test6[] = {
59 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
60 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
61 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
62 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
63 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
64 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
65 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
66 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
67 guint8 result_md5_test6[] = {
68 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, 0x0b, 0x62,
69 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd };
72 guint8 key_md5_test7[] = {
73 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
74 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
75 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
76 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
77 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
78 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
79 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
80 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
81 guint8 result_md5_test7[] = {
82 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, 0x1f, 0xb1,
83 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e };
85 /* HMAC-SHA1 test vectors as per RFC 2202 */
88 guint8 key_sha1_test1[] = {
89 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
90 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
91 guint8 result_sha1_test1[] = {
92 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b,
93 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1, 0x46, 0xbe, 0x00 };
96 guint8 result_sha1_test2[] = {
97 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
98 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 };
101 guint8 key_sha1_test3[] = {
102 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
103 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
104 guint8 data_sha1_test3[] = {
105 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
106 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
107 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
108 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
109 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd };
110 guint8 result_sha1_test3[] = {
111 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
112 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 };
115 guint8 key_sha1_test4[] = {
116 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
117 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
118 0x15, 0x16, 0x17, 0x18, 0x19 };
119 guint8 data_sha1_test4[] = {
120 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
121 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
122 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
123 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
124 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };
125 guint8 result_sha1_test4[] = {
126 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
127 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda };
130 guint8 key_sha1_test5[] = {
131 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
132 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c };
133 guint8 result_sha1_test5[] = {
134 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
135 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 };
138 guint8 key_sha1_test6_7[] = {
139 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
140 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
141 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
142 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
143 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
144 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
148 guint8 result_sha1_test6[] = {
149 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
150 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 };
152 guint8 result_sha1_test7[] = {
153 0xe8, 0xe9, 0x9d, 0xf, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
154 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x8, 0xbb, 0xff, 0x1a, 0x91 };
158 GChecksumType digest_type;
163 gconstpointer result;
166 HmacCase hmac_md5_tests[] = {
167 { G_CHECKSUM_MD5, key_md5_test1, 16, "Hi There", 8, result_md5_test1 },
168 { G_CHECKSUM_MD5, "Jefe", 4, "what do ya want for nothing?", 28,
170 { G_CHECKSUM_MD5, key_md5_test3, 16, data_md5_test3, 50,
172 { G_CHECKSUM_MD5, key_md5_test4, 25, data_md5_test4, 50,
174 { G_CHECKSUM_MD5, key_md5_test5, 16, "Test With Truncation", 20,
176 { G_CHECKSUM_MD5, key_md5_test6, 80,
177 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
179 { G_CHECKSUM_MD5, key_md5_test7, 80,
180 "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
181 73, result_md5_test7 },
182 { -1, NULL, 0, NULL, 0, NULL },
185 HmacCase hmac_sha1_tests[] = {
186 { G_CHECKSUM_SHA1, key_sha1_test1, 20, "Hi There", 8, result_sha1_test1 },
187 { G_CHECKSUM_SHA1, "Jefe", 4, "what do ya want for nothing?", 28,
189 { G_CHECKSUM_SHA1, key_sha1_test3, 20, data_sha1_test3, 50,
191 { G_CHECKSUM_SHA1, key_sha1_test4, 25, data_sha1_test4, 50,
193 { G_CHECKSUM_SHA1, key_sha1_test5, 20, "Test With Truncation", 20,
195 { G_CHECKSUM_SHA1, key_sha1_test6_7, 80,
196 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
198 { G_CHECKSUM_SHA1, key_sha1_test6_7, 80,
199 "Test Using Larger Than Block-Size Key and Larger" \
200 " Than One Block-Size Data", 73, result_sha1_test7, },
201 { -1, NULL, 0, NULL, 0, NULL },
205 test_hmac (HmacCase *t)
208 gsize digest_len, hmac_len;
211 hmac_len = digest_len = g_checksum_type_get_length (t->digest_type);
212 digest = g_malloc (hmac_len);
214 hmac = g_hmac_new (t->digest_type, t->key, t->key_len);
215 g_hmac_update (hmac, t->data, t->data_len);
216 g_hmac_get_digest (hmac, digest, &digest_len);
218 g_assert_cmpuint (digest_len, ==, hmac_len);
219 g_assert (memcmp (digest, t->result, digest_len) == 0);
226 test_hmac_ref_unref (void)
230 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
231 check = g_hmac_ref (hmac);
232 g_assert (check == hmac);
233 g_hmac_unref (check);
238 test_hmac_copy (void)
242 hmac = g_hmac_new (G_CHECKSUM_SHA256, (guchar*)"aaa", 3);
243 check = g_hmac_copy (hmac);
244 g_assert (check != hmac);
245 g_assert_cmpstr (g_hmac_get_string (hmac), ==, g_hmac_get_string (check));
246 g_hmac_unref (check);
251 test_hmac_for_data (void)
256 string = g_compute_hmac_for_data (G_CHECKSUM_SHA1,
258 (guchar*)"bcdef", 5);
260 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
261 g_hmac_update (hmac, (guchar*)"bcdef", 5);
262 g_assert_cmpstr (string, ==, g_hmac_get_string (hmac));
268 test_hmac_for_string (void)
273 string = g_compute_hmac_for_string (G_CHECKSUM_SHA1,
277 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
278 g_hmac_update (hmac, (guchar*)"bcdef", 5);
279 g_assert_cmpstr (string, ==, g_hmac_get_string (hmac));
289 g_test_init (&argc, &argv, NULL);
291 for (i = 0 ; hmac_sha1_tests[i].key_len > 0 ; i++)
293 gchar *name = g_strdup_printf ("/hmac/sha1-%d", i + 1);
294 g_test_add_data_func (name, hmac_sha1_tests + i,
295 (void (*)(const void *)) test_hmac);
299 for (i = 0 ; hmac_md5_tests[i].key_len > 0 ; i++)
301 gchar *name = g_strdup_printf ("/hmac/md5-%d", i + 1);
302 g_test_add_data_func (name, hmac_md5_tests + i,
303 (void (*)(const void *)) test_hmac);
307 g_test_add_func ("/hmac/ref-unref", test_hmac_ref_unref);
308 g_test_add_func ("/hmac/copy", test_hmac_copy);
309 g_test_add_func ("/hmac/for-data", test_hmac_for_data);
310 g_test_add_func ("/hmac/for-string", test_hmac_for_string);
312 return g_test_run ();