10 /* HMAC-MD5 test vectors as per RFC 2202 */
13 guint8 key_md5_test1[] = {
14 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
15 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
16 guint8 result_md5_test1[] = {
17 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c, 0x13, 0xf4,
18 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d };
21 guint8 result_md5_test2[] = {
22 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8,
23 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 };
26 guint8 key_md5_test3[] = {
27 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
28 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
29 guint8 data_md5_test3[] = {
30 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
31 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
32 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
33 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
34 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd };
35 guint8 result_md5_test3[] = {
36 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8,
37 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 };
40 guint8 key_md5_test4[] = {
41 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
42 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
43 0x15, 0x16, 0x17, 0x18, 0x19 };
44 guint8 data_md5_test4[] = {
45 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
46 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
47 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
48 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
49 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };
50 guint8 result_md5_test4[] = {
51 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75,
52 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 };
55 guint8 key_md5_test5[] = {
56 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
57 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c};
58 guint8 result_md5_test5[] = {
59 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba,
60 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c };
63 guint8 key_md5_test6[] = {
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 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
68 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
69 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
70 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
71 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
72 guint8 result_md5_test6[] = {
73 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, 0x0b, 0x62,
74 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd };
77 guint8 key_md5_test7[] = {
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 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
82 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
83 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
84 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
85 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
86 guint8 result_md5_test7[] = {
87 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee, 0x1f, 0xb1,
88 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e };
90 /* HMAC-SHA1 test vectors as per RFC 2202 */
93 guint8 key_sha1_test1[] = {
94 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
95 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
96 guint8 result_sha1_test1[] = {
97 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64, 0xe2, 0x8b,
98 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1, 0x46, 0xbe, 0x00 };
101 guint8 result_sha1_test2[] = {
102 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
103 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 };
106 guint8 key_sha1_test3[] = {
107 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
108 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
109 guint8 data_sha1_test3[] = {
110 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
111 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
112 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
113 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
114 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd };
115 guint8 result_sha1_test3[] = {
116 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
117 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 };
120 guint8 key_sha1_test4[] = {
121 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
122 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
123 0x15, 0x16, 0x17, 0x18, 0x19 };
124 guint8 data_sha1_test4[] = {
125 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
126 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
127 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
128 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
129 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };
130 guint8 result_sha1_test4[] = {
131 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
132 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda };
135 guint8 key_sha1_test5[] = {
136 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
137 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c };
138 guint8 result_sha1_test5[] = {
139 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
140 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 };
143 guint8 key_sha1_test6_7[] = {
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,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
148 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
149 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
150 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
151 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };
153 guint8 result_sha1_test6[] = {
154 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
155 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 };
157 guint8 result_sha1_test7[] = {
158 0xe8, 0xe9, 0x9d, 0xf, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
159 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x8, 0xbb, 0xff, 0x1a, 0x91 };
163 GChecksumType digest_type;
171 HmacCase hmac_md5_tests[] = {
172 { G_CHECKSUM_MD5, key_md5_test1, 16, "Hi There", 8, result_md5_test1 },
173 { G_CHECKSUM_MD5, "Jefe", 4, "what do ya want for nothing?", 28,
175 { G_CHECKSUM_MD5, key_md5_test3, 16, data_md5_test3, 50,
177 { G_CHECKSUM_MD5, key_md5_test4, 25, data_md5_test4, 50,
179 { G_CHECKSUM_MD5, key_md5_test5, 16, "Test With Truncation", 20,
181 { G_CHECKSUM_MD5, key_md5_test6, 80,
182 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
184 { G_CHECKSUM_MD5, key_md5_test7, 80,
185 "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data",
186 73, result_md5_test7 },
187 { -1, NULL, 0, NULL, 0, NULL },
190 HmacCase hmac_sha1_tests[] = {
191 { G_CHECKSUM_SHA1, key_sha1_test1, 20, "Hi There", 8, result_sha1_test1 },
192 { G_CHECKSUM_SHA1, "Jefe", 4, "what do ya want for nothing?", 28,
194 { G_CHECKSUM_SHA1, key_sha1_test3, 20, data_sha1_test3, 50,
196 { G_CHECKSUM_SHA1, key_sha1_test4, 25, data_sha1_test4, 50,
198 { G_CHECKSUM_SHA1, key_sha1_test5, 20, "Test With Truncation", 20,
200 { G_CHECKSUM_SHA1, key_sha1_test6_7, 80,
201 "Test Using Larger Than Block-Size Key - Hash Key First", 54,
203 { G_CHECKSUM_SHA1, key_sha1_test6_7, 80,
204 "Test Using Larger Than Block-Size Key and Larger" \
205 " Than One Block-Size Data", 73, result_sha1_test7, },
206 { -1, NULL, 0, NULL, 0, NULL },
210 test_hmac (HmacCase *t)
213 gsize digest_len, hmac_len;
216 hmac_len = digest_len = g_checksum_type_get_length (t->digest_type);
217 digest = g_malloc (hmac_len);
219 hmac = g_hmac_new (t->digest_type, t->key, t->key_len);
220 g_hmac_update (hmac, t->data, t->data_len);
221 g_hmac_get_digest (hmac, digest, &digest_len);
223 g_assert_cmpuint (digest_len, ==, hmac_len);
224 g_assert (memcmp (digest, t->result, digest_len) == 0);
231 test_hmac_ref_unref (void)
235 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
236 check = g_hmac_ref (hmac);
237 g_assert (check == hmac);
238 g_hmac_unref (check);
243 test_hmac_copy (void)
247 hmac = g_hmac_new (G_CHECKSUM_SHA256, (guchar*)"aaa", 3);
248 check = g_hmac_copy (hmac);
249 g_assert (check != hmac);
250 g_assert_cmpstr (g_hmac_get_string (hmac), ==, g_hmac_get_string (check));
251 g_hmac_unref (check);
256 test_hmac_for_data (void)
261 string = g_compute_hmac_for_data (G_CHECKSUM_SHA1,
263 (guchar*)"bcdef", 5);
265 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
266 g_hmac_update (hmac, (guchar*)"bcdef", 5);
267 g_assert_cmpstr (string, ==, g_hmac_get_string (hmac));
273 test_hmac_for_string (void)
278 string = g_compute_hmac_for_string (G_CHECKSUM_SHA1,
282 hmac = g_hmac_new (G_CHECKSUM_SHA1, (guchar*)"aaa", 3);
283 g_hmac_update (hmac, (guchar*)"bcdef", 5);
284 g_assert_cmpstr (string, ==, g_hmac_get_string (hmac));
294 g_test_init (&argc, &argv, NULL);
296 for (i = 0 ; hmac_sha1_tests[i].key_len > 0 ; i++)
298 gchar *name = g_strdup_printf ("/hmac/sha1-%d", i + 1);
299 g_test_add_data_func (name, hmac_sha1_tests + i,
300 (void (*)(const void *)) test_hmac);
304 for (i = 0 ; hmac_md5_tests[i].key_len > 0 ; i++)
306 gchar *name = g_strdup_printf ("/hmac/md5-%d", i + 1);
307 g_test_add_data_func (name, hmac_md5_tests + i,
308 (void (*)(const void *)) test_hmac);
312 g_test_add_func ("/hmac/ref-unref", test_hmac_ref_unref);
313 g_test_add_func ("/hmac/copy", test_hmac_copy);
314 g_test_add_func ("/hmac/for-data", test_hmac_for_data);
315 g_test_add_func ("/hmac/for-string", test_hmac_for_string);
317 return g_test_run ();