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);
247 g_test_init (&argc, &argv, NULL);
249 for (i = 0 ; hmac_sha1_tests[i].key_len > 0 ; i++)
251 gchar *name = g_strdup_printf ("/hmac/sha1-%d", i + 1);
252 g_test_add_data_func (name, hmac_sha1_tests + i,
253 (void (*)(const void *)) test_hmac);
257 for (i = 0 ; hmac_md5_tests[i].key_len > 0 ; i++)
259 gchar *name = g_strdup_printf ("/hmac/md5-%d", i + 1);
260 g_test_add_data_func (name, hmac_md5_tests + i,
261 (void (*)(const void *)) test_hmac);
265 g_test_add_func ("/hmac/ref-unref", test_hmac_ref_unref);
267 return g_test_run ();