4 /* KEY and MSG are supposed to expand to length, data */
5 #define HMAC_TEST(alg, length, key, msg, mac) do { \
6 hmac_##alg##_set_key(&alg, key); \
7 hmac_##alg##_update(&alg, msg); \
9 hmac_##alg##_digest(&alg, length, digest); \
10 ASSERT(MEMEQ (length, digest, mac)); \
11 ASSERT(digest[length] == 17); \
17 struct hmac_md5_ctx md5;
18 struct hmac_sha1_ctx sha1;
19 struct hmac_sha224_ctx sha224;
20 struct hmac_sha256_ctx sha256;
21 struct hmac_sha384_ctx sha384;
22 struct hmac_sha512_ctx sha512;
24 /* sha512's digests are longest */
25 uint8_t digest[SHA512_DIGEST_SIZE+1];
27 memset(digest, 0, sizeof(digest));
29 /* Test vectors for md5, from RFC-2202 */
32 HMAC_TEST(md5, MD5_DIGEST_SIZE,
33 HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"),
35 H("9294727a3638bb1c 13f48ef8158bfc9d"));
39 HMAC_TEST(md5, MD5_DIGEST_SIZE,
41 LDATA("what do ya want for nothing?"),
42 H("750c783e6ab0b503 eaa86e310a5db738"));
45 HMAC_TEST(md5, MD5_DIGEST_SIZE,
46 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
47 HL("dddddddddddddddd dddddddddddddddd"
48 "dddddddddddddddd dddddddddddddddd"
49 "dddddddddddddddd dddddddddddddddd"
51 H("56be34521d144c88 dbb8c733f0e8b3f6"));
54 HMAC_TEST(md5, MD5_DIGEST_SIZE,
55 HL("0102030405060708 090a0b0c0d0e0f10"
56 "1112131415161718 19"),
57 HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
58 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
59 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
61 H("697eaf0aca3a3aea 3a75164746ffaa79"));
65 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c"),
66 LDATA("Test With Truncation"),
67 H("56461ef2342edc00 f9bab995"));
70 HMAC_TEST(md5, MD5_DIGEST_SIZE,
71 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
72 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
73 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
74 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
75 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
76 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
77 H("6b1ab7fe4bd7bf8f 0b62e6ce61b9d0cd"));
80 HMAC_TEST(md5, MD5_DIGEST_SIZE,
81 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
82 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
83 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
84 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
85 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
86 LDATA("Test Using Larger Than Block-Size Key and Larger "
87 "Than One Block-Size Data"),
88 H("6f630fad67cda0ee 1fb1f562db3aa53e"));
90 /* Additional test vectors, from Daniel Kahn Gillmor */
91 HMAC_TEST(md5, MD5_DIGEST_SIZE,
92 LDATA("monkey monkey monkey monkey"),
94 H("e84db42a188813f30a15e611d64c7869"));
96 HMAC_TEST(md5, MD5_DIGEST_SIZE,
97 LDATA("monkey monkey monkey monkey"),
99 H("123662062e67c2aab371cc49db0df134"));
101 HMAC_TEST(md5, MD5_DIGEST_SIZE,
102 LDATA("monkey monkey monkey monkey"),
104 H("0a46cc10a49d4b7025c040c597bf5d76"));
106 HMAC_TEST(md5, MD5_DIGEST_SIZE,
107 LDATA("monkey monkey monkey monkey"),
109 H("d1f4d89f0e8b2b6ed0623c99ec298310"));
111 HMAC_TEST(md5, MD5_DIGEST_SIZE,
112 LDATA("monkey monkey monkey monkey"),
113 LDATA("message digest"),
114 H("1627207b9bed5009a4f6e9ca8d2ca01e"));
116 HMAC_TEST(md5, MD5_DIGEST_SIZE,
117 LDATA("monkey monkey monkey monkey"),
118 LDATA("abcdefghijklmnopqrstuvwxyz"),
119 H("922aae6ab3b3a29202e21ce5f916ae9a"));
121 HMAC_TEST(md5, MD5_DIGEST_SIZE,
122 LDATA("monkey monkey monkey monkey"),
123 LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
124 H("ede9cb83679ba82d88fbeae865b3f8fc"));
126 HMAC_TEST(md5, MD5_DIGEST_SIZE,
127 LDATA("monkey monkey monkey monkey"),
128 LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
129 H("939dd45512ee3a594b6654f6b8de27f7"));
131 /* Test vectors for sha1, from RFC-2202 */
134 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
135 HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b 0b0b0b0b"),
137 H("b617318655057264 e28bc0b6fb378c8e f146be00"));
140 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
142 LDATA("what do ya want for nothing?"),
143 H("effcdf6ae5eb2fa2 d27416d5f184df9c 259a7c79"));
146 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
147 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaa"),
148 HL("dddddddddddddddd dddddddddddddddd"
149 "dddddddddddddddd dddddddddddddddd"
150 "dddddddddddddddd dddddddddddddddd"
152 H("125d7342b9ac11cd 91a39af48aa17b4f 63f175d3"));
155 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
156 HL("0102030405060708 090a0b0c0d0e0f10"
157 "1112131415161718 19"),
158 HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
159 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
160 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
162 H("4c9007f4026250c6 bc8414f9bf50c86c 2d7235da"));
166 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
167 LDATA("Test With Truncation"),
168 H("4c1a03424b55e07f e7f27be1"));
171 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
172 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
173 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
174 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
175 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
176 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
177 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
178 H("aa4ae5e15272d00e 95705637ce8a3b55 ed402112"));
181 HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
182 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
183 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
184 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
185 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
186 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
187 LDATA("Test Using Larger Than Block-Size Key and Larger "
188 "Than One Block-Size Data"),
189 H("e8e99d0f45237d78 6d6bbaa7965c7808 bbff1a91"));
191 /* Additional test vectors, from Daniel Kahn Gillmor */
192 HMAC_TEST(md5, MD5_DIGEST_SIZE,
193 LDATA("monkey monkey monkey monkey"),
195 H("e84db42a188813f30a15e611d64c7869"));
197 HMAC_TEST(md5, MD5_DIGEST_SIZE,
198 LDATA("monkey monkey monkey monkey"),
200 H("123662062e67c2aab371cc49db0df134"));
202 HMAC_TEST(md5, MD5_DIGEST_SIZE,
203 LDATA("monkey monkey monkey monkey"),
205 H("0a46cc10a49d4b7025c040c597bf5d76"));
207 HMAC_TEST(md5, MD5_DIGEST_SIZE,
208 LDATA("monkey monkey monkey monkey"),
210 H("d1f4d89f0e8b2b6ed0623c99ec298310"));
212 HMAC_TEST(md5, MD5_DIGEST_SIZE,
213 LDATA("monkey monkey monkey monkey"),
214 LDATA("message digest"),
215 H("1627207b9bed5009a4f6e9ca8d2ca01e"));
217 HMAC_TEST(md5, MD5_DIGEST_SIZE,
218 LDATA("monkey monkey monkey monkey"),
219 LDATA("abcdefghijklmnopqrstuvwxyz"),
220 H("922aae6ab3b3a29202e21ce5f916ae9a"));
222 HMAC_TEST(md5, MD5_DIGEST_SIZE,
223 LDATA("monkey monkey monkey monkey"),
224 LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
225 H("ede9cb83679ba82d88fbeae865b3f8fc"));
227 HMAC_TEST(md5, MD5_DIGEST_SIZE,
228 LDATA("monkey monkey monkey monkey"),
229 LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
230 H("939dd45512ee3a594b6654f6b8de27f7"));
232 /* Test vectors for sha224, from RFC 4231 */
233 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
234 HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
237 H("896fb1128abbdf196832107cd49df33f"
238 "47b4b1169912ba4f53684b22"));
240 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
242 LDATA("what do ya want for nothing?"),
243 H("a30e01098bc6dbbf45690f3a7e9e6d0f"
244 "8bbea2a39e6148008fd05e44"));
246 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
247 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
249 HL("dddddddddddddddddddddddddddddddd"
250 "dddddddddddddddddddddddddddddddd"
251 "dddddddddddddddddddddddddddddddd"
253 H("7fb3cb3588c6c1f6ffa9694d7d6ad264"
254 "9365b0c1f65d69d1ec8333ea"));
256 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
257 HL("0102030405060708090a0b0c0d0e0f10"
258 "111213141516171819"),
259 HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
260 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
261 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
263 H("6c11506874013cac6a2abc1bb382627c"
264 "ec6a90d86efc012de7afec5a"));
266 HMAC_TEST(sha224, 16,
267 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
268 LDATA("Test With Truncation"),
269 H("0e2aea68a90c8d37c988bcdb9fca6fa8"));
271 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
272 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
273 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
274 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
275 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
276 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
277 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
278 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
279 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
281 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
282 H("95e9a0db962095adaebe9b2d6f0dbce2"
283 "d499f112f2d2b7273fa6870e"));
285 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
286 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
287 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
288 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
289 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
290 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
291 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
292 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
293 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
295 LDATA("This is a test using a larger than block-size ke"
296 "y and a larger than block-size data. The key nee"
297 "ds to be hashed before being used by the HMAC al"
299 H("3a854166ac5d9f023f54d517d0b39dbd"
300 "946770db9c2b95c9f6f565d1"));
302 /* Additional test vectors, from Daniel Kahn Gillmor */
303 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
304 LDATA("monkey monkey monkey monkey"),
306 H("d12a49ae38177ffeaa548b2148bb5238"
307 "60849772d9391e675b103d89"));
309 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
310 LDATA("monkey monkey monkey monkey"),
312 H("b04ff8522f904f553970bfa8ad3f0086"
313 "bce1e8580affd8a12c94e31a"));
315 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
316 LDATA("monkey monkey monkey monkey"),
318 H("afcfb5511f710334f9350f57faec3c08"
319 "764b4bd126a6840f4347f116"));
321 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
322 LDATA("monkey monkey monkey monkey"),
324 H("9df9907af127900c909376893565c6cf"
325 "2d7db244fdc4277da1e0b679"));
327 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
328 LDATA("monkey monkey monkey monkey"),
329 LDATA("message digest"),
330 H("254ebf6b8ddd7a3271b3d9aca1699b0c"
331 "0bfb7df61e8a114922c88d27"));
333 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
334 LDATA("monkey monkey monkey monkey"),
335 LDATA("abcdefghijklmnopqrstuvwxyz"),
336 H("6ec5bffba5880c3234a6cf257816e4d5"
337 "35ab178a7f12929769e378fb"));
339 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
340 LDATA("monkey monkey monkey monkey"),
341 LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
342 H("5f768179dbb29ca722875d0f461a2e2f"
343 "597d0210340a84df1a8e9c63"));
345 HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
346 LDATA("monkey monkey monkey monkey"),
347 LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
348 H("c7667b0d7e56b2b4f6fcc1d8da9e22da"
349 "a1556f44c47132a87303c6a2"));
351 /* Test vectors for sha256, from RFC 4231 */
352 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
353 HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
356 H("b0344c61d8db38535ca8afceaf0bf12b"
357 "881dc200c9833da726e9376c2e32cff7"));
359 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
361 LDATA("what do ya want for nothing?"),
362 H("5bdcc146bf60754e6a042426089575c7"
363 "5a003f089d2739839dec58b964ec3843"));
365 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
366 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
368 HL("dddddddddddddddddddddddddddddddd"
369 "dddddddddddddddddddddddddddddddd"
370 "dddddddddddddddddddddddddddddddd"
372 H("773ea91e36800e46854db8ebd09181a7"
373 "2959098b3ef8c122d9635514ced565fe"));
375 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
376 HL("0102030405060708090a0b0c0d0e0f10"
377 "111213141516171819"),
378 HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
379 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
380 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
382 H("82558a389a443c0ea4cc819899f2083a"
383 "85f0faa3e578f8077a2e3ff46729665b"));
385 HMAC_TEST(sha256, 16,
386 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
387 LDATA("Test With Truncation"),
388 H("a3b6167473100ee06e0c796c2955552b"));
390 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
391 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
392 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
393 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
394 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
395 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
396 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
397 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
398 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
400 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
401 H("60e431591ee0b67f0d8a26aacbf5b77f"
402 "8e0bc6213728c5140546040f0ee37f54"));
404 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
405 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
406 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
407 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
408 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
409 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
410 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
411 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
412 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
414 LDATA("This is a test using a larger than block-size ke"
415 "y and a larger than block-size data. The key nee"
416 "ds to be hashed before being used by the HMAC al"
418 H("9b09ffa71b942fcb27635fbcd5b0e944"
419 "bfdc63644f0713938a7f51535c3a35e2"));
421 /* Additional test vectors for sha256, from
422 draft-ietf-ipsec-ciph-sha-256-01.txt */
424 /* Test Case #1: HMAC-SHA-256 with 3-byte input and 32-byte key */
425 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
426 HL("0102030405060708 090a0b0c0d0e0f10"
427 "1112131415161718 191a1b1c1d1e1f20"),
429 H("a21b1f5d4cf4f73a 4dd939750f7a066a"
430 "7f98cc131cb16a66 92759021cfab8181"));
432 /* Test Case #2: HMAC-SHA-256 with 56-byte input and 32-byte key */
433 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
434 HL("0102030405060708 090a0b0c0d0e0f10"
435 "1112131415161718 191a1b1c1d1e1f20"),
436 LDATA("abcdbcdecdefdefgefghfghighijhijk"
437 "ijkljklmklmnlmnomnopnopq"),
438 H("104fdc1257328f08 184ba73131c53cae"
439 "e698e36119421149 ea8c712456697d30"));
441 /* Test Case #3: HMAC-SHA-256 with 112-byte (multi-block) input
443 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
444 HL("0102030405060708 090a0b0c0d0e0f10"
445 "1112131415161718 191a1b1c1d1e1f20"),
446 LDATA("abcdbcdecdefdefgefghfghighijhijk"
447 "ijkljklmklmnlmnomnopnopqabcdbcde"
448 "cdefdefgefghfghighijhijkijkljklm"
450 H("470305fc7e40fe34 d3eeb3e773d95aab"
451 "73acf0fd060447a5 eb4595bf33a9d1a3"));
453 /* Test Case #4: HMAC-SHA-256 with 8-byte input and 32-byte key */
454 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
455 HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"
456 "0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"),
458 H("198a607eb44bfbc6 9903a0f1cf2bbdc5"
459 "ba0aa3f3d9ae3c1c 7a3b1696a0b68cf7"));
461 /* Test Case #6: HMAC-SHA-256 with 50-byte input and 32-byte key */
462 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
463 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
464 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
465 HL("dddddddddddddddd dddddddddddddddd"
466 "dddddddddddddddd dddddddddddddddd"
467 "dddddddddddddddd dddddddddddddddd"
469 H("cdcb1220d1ecccea 91e53aba3092f962"
470 "e549fe6ce9ed7fdc 43191fbde45c30b0"));
472 /* Test Case #7: HMAC-SHA-256 with 50-byte input and 37-byte key */
473 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
474 HL("0102030405060708 090a0b0c0d0e0f10"
475 "1112131415161718 191a1b1c1d1e1f20"
477 HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
478 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
479 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
481 H("d4633c17f6fb8d74 4c66dee0f8f07455"
482 "6ec4af55ef079985 41468eb49bd2e917"));
484 /* Test Case #8: HMAC-SHA-256 with 20-byte input and 32-byte key */
485 HMAC_TEST(sha256, 16,
486 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c"
487 "0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c"),
488 LDATA("Test With Truncation"),
489 H("7546af01841fc09b 1ab9c3749a5f1c17"));
491 /* Test Case #9: HMAC-SHA-256 with 54-byte input and 80-byte key */
492 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
493 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
494 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
495 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
496 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
497 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
498 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
499 H("6953025ed96f0c09 f80a96f78e6538db"
500 "e2e7b820e3dd970e 7ddd39091b32352f"));
502 /* Test Case #10: HMAC-SHA-256 with 73-byte (multi-block) input
504 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
505 HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
506 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
507 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
508 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
509 "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
510 LDATA("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"),
511 H("6355ac22e890d0a3 c8481a5ca4825bc8"
512 "84d3e7a1ff98a2fc 2ac7d8e064c3b2e6"));
514 /* Additional test vectors, from Daniel Kahn Gillmor */
515 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
516 LDATA("monkey monkey monkey monkey"),
518 H("5c780648c90d121c50091c3a0c3afc1f"
519 "4ab847528005d99d9821ad3f341b651a"));
521 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
522 LDATA("monkey monkey monkey monkey"),
524 H("6142364c0646b0cfe426866f21d613e0"
525 "55a136a7d9b45d85685e080a09cec463"));
527 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
528 LDATA("monkey monkey monkey monkey"),
530 H("e49aa7839977e130ad87b63da9d4eb7b"
531 "263cd5a27c54a7604b6044eb35901171"));
533 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
534 LDATA("monkey monkey monkey monkey"),
536 H("e5ef49f545c7af933a9d18c7c562bc91"
537 "08583fd5cf00d9e0db351d6d8f8e41bc"));
539 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
540 LDATA("monkey monkey monkey monkey"),
541 LDATA("message digest"),
542 H("373b04877180fea27a41a8fb8f88201c"
543 "a6268411ee3c80b01a424483eb9156e1"));
545 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
546 LDATA("monkey monkey monkey monkey"),
547 LDATA("abcdefghijklmnopqrstuvwxyz"),
548 H("eb5945d56eefbdb41602946ea6448d53"
549 "86b08d7d801a87f439fab52f8bb9736e"));
551 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
552 LDATA("monkey monkey monkey monkey"),
553 LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
554 H("3798f363c57afa6edaffe39016ca7bad"
555 "efd1e670afb0e3987194307dec3197db"));
557 HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
558 LDATA("monkey monkey monkey monkey"),
559 LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
560 H("c89a7039a62985ff813fe4509b918a43"
561 "6d7b1ffd8778e2c24dec464849fb6128"));
563 /* Test vectors for sha384, from RFC 4231 */
564 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
565 HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
568 H("afd03944d84895626b0825f4ab46907f"
569 "15f9dadbe4101ec682aa034c7cebc59c"
570 "faea9ea9076ede7f4af152e8b2fa9cb6"));
572 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
574 LDATA("what do ya want for nothing?"),
575 H("af45d2e376484031617f78d2b58a6b1b"
576 "9c7ef464f5a01b47e42ec3736322445e"
577 "8e2240ca5e69e2c78b3239ecfab21649"));
579 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
580 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
582 HL("dddddddddddddddddddddddddddddddd"
583 "dddddddddddddddddddddddddddddddd"
584 "dddddddddddddddddddddddddddddddd"
586 H("88062608d3e6ad8a0aa2ace014c8a86f"
587 "0aa635d947ac9febe83ef4e55966144b"
588 "2a5ab39dc13814b94e3ab6e101a34f27"));
590 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
591 HL("0102030405060708090a0b0c0d0e0f10"
592 "111213141516171819"),
593 HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
594 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
595 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
597 H("3e8a69b7783c25851933ab6290af6ca7"
598 "7a9981480850009cc5577c6e1f573b4e"
599 "6801dd23c4a7d679ccf8a386c674cffb"));
601 HMAC_TEST(sha384, 16,
602 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
603 LDATA("Test With Truncation"),
604 H("3abf34c3503b2a23a46efc619baef897"));
606 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
607 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
608 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
609 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
610 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
611 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
612 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
613 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
614 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
616 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
617 H("4ece084485813e9088d2c63a041bc5b4"
618 "4f9ef1012a2b588f3cd11f05033ac4c6"
619 "0c2ef6ab4030fe8296248df163f44952"));
621 HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
622 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
623 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
624 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
625 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
626 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
627 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
628 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
629 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
631 LDATA("This is a test using a larger than block-size ke"
632 "y and a larger than block-size data. The key nee"
633 "ds to be hashed before being used by the HMAC al"
635 H("6617178e941f020d351e2f254e8fd32c"
636 "602420feb0b8fb9adccebb82461e99c5"
637 "a678cc31e799176d3860e6110c46523e"));
639 /* Test vectors for sha512, from RFC 4231 */
640 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
641 HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
644 H("87aa7cdea5ef619d4ff0b4241a1d6cb0"
645 "2379f4e2ce4ec2787ad0b30545e17cde"
646 "daa833b7d6b8a702038b274eaea3f4e4"
647 "be9d914eeb61f1702e696c203a126854"));
649 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
651 LDATA("what do ya want for nothing?"),
652 H("164b7a7bfcf819e2e395fbe73b56e0a3"
653 "87bd64222e831fd610270cd7ea250554"
654 "9758bf75c05a994a6d034f65f8f0e6fd"
655 "caeab1a34d4a6b4b636e070a38bce737"));
657 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
658 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
660 HL("dddddddddddddddddddddddddddddddd"
661 "dddddddddddddddddddddddddddddddd"
662 "dddddddddddddddddddddddddddddddd"
664 H("fa73b0089d56a284efb0f0756c890be9"
665 "b1b5dbdd8ee81a3655f83e33b2279d39"
666 "bf3e848279a722c806b485a47e67c807"
667 "b946a337bee8942674278859e13292fb"));
669 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
670 HL("0102030405060708090a0b0c0d0e0f10"
671 "111213141516171819"),
672 HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
673 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
674 "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
676 H("b0ba465637458c6990e5a8c5f61d4af7"
677 "e576d97ff94b872de76f8050361ee3db"
678 "a91ca5c11aa25eb4d679275cc5788063"
679 "a5f19741120c4f2de2adebeb10a298dd"));
681 HMAC_TEST(sha512, 16,
682 HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
683 LDATA("Test With Truncation"),
684 H("415fad6271580a531d4179bc891d87a6"));
686 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
687 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
688 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
689 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
690 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
691 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
692 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
693 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
694 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
696 LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
697 H("80b24263c7c1a3ebb71493c1dd7be8b4"
698 "9b46d1f41b4aeec1121b013783f8f352"
699 "6b56d037e05f2598bd0fd2215d6a1e52"
700 "95e64f73f63f0aec8b915a985d786598"));
702 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
703 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
704 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
705 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
706 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
707 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
708 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
709 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
710 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
712 LDATA("This is a test using a larger than block-size ke"
713 "y and a larger than block-size data. The key nee"
714 "ds to be hashed before being used by the HMAC al"
716 H("e37b6a775dc87dbaa4dfa9f96e5e3ffd"
717 "debd71f8867289865df5a32d20cdc944"
718 "b6022cac3c4982b10d5eeb55c3e4de15"
719 "134676fb6de0446065c97440fa8c6a58"));
721 /* Additional test vectors, from Daniel Kahn Gillmor */
722 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
723 LDATA("monkey monkey monkey monkey"),
725 H("34316413c2d6940572d0bbbf099d529d"
726 "148b424533cf562bc1b365f530e21a31"
727 "799fc51cef78060cc6f448a8e5d780c2"
728 "6cdf20d4c3e6f27fe5ef576bbd05e855"));
730 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
731 LDATA("monkey monkey monkey monkey"),
733 H("cf1948507378bc3ab58cb6ec87f4d456"
734 "b90d3298395c29873f1ded1e111b50fe"
735 "c336ed24684bf19716efc309212f37aa"
736 "715cfb9ecccf3af13691ded167b4b336"));
738 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
739 LDATA("monkey monkey monkey monkey"),
741 H("b8201784216ce01b83cdd282616c6e89"
742 "644c6dfd1269ed8580bbc39b92add364"
743 "c2b2a2018cffb1915e8625e473b67d0f"
744 "e54a50e475dfa0e2b1a97bac1383792c"));
746 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
747 LDATA("monkey monkey monkey monkey"),
749 H("f097ee08b8c44e847a384f9fd645e35e"
750 "4816baa9791ba39d3dc611210500b044"
751 "873ee296bf1047dc06daa201a5767192"
752 "5b73b4ea59c60114881c8287d0699c83"));
754 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
755 LDATA("monkey monkey monkey monkey"),
756 LDATA("message digest"),
757 H("921a441a884b83c76a8526da8e60d60d"
758 "17ded4eee5c29375e0d93717669a4c3e"
759 "eba7473e95f7c1a2a85afc24a0adbc4d"
760 "6c2bdd6ca6cab8b18d19f82d4a6c51bc"));
762 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
763 LDATA("monkey monkey monkey monkey"),
764 LDATA("abcdefghijklmnopqrstuvwxyz"),
765 H("640054c96f35815095617d0a8c956066"
766 "1a6ff46bfb39110333b2c52c8866abfb"
767 "59d9152c9b0948c1ed65c3fd72a8fb82"
768 "190acc8830770afe5b0c5b6414c75a77"));
770 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
771 LDATA("monkey monkey monkey monkey"),
772 LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
773 H("835a4f5b3750b4c1fccfa88da2f746a4"
774 "900160c9f18964309bb736c13b59491b"
775 "8e32d37b724cc5aebb0f554c6338a3b5"
776 "94c4ba26862b2dadb59b7ede1d08d53e"));
778 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
779 LDATA("monkey monkey monkey monkey"),
780 LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
781 H("fdf83dc879e3476c8e8aceff2bf6fece"
782 "2e4f39c7e1a167845465bb549dfa5ffe"
783 "997e6c7cf3720eae51ed2b00ad2a8225"
784 "375092290edfa9d48ec7e4bc8e276088"));
786 /* Additional test vectors, from
787 draft-kelly-ipsec-ciph-sha2-01.txt */
789 /* Test case AUTH512-1: */
790 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
791 HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
792 "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
793 "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
794 "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
796 H("637edc6e01dce7e6742a99451aae82df"
797 "23da3e92439e590e43e761b33e910fb8"
798 "ac2878ebd5803f6f0b61dbce5e251ff8"
799 "789a4722c1be65aea45fd464e89f8f5b"));
801 /* Test case AUTH512-2: */
802 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
803 LDATA("JefeJefeJefeJefe"
807 LDATA("what do ya want for nothing?"),
808 H("cb370917ae8a7ce28cfd1d8f4705d614"
809 "1c173b2a9362c15df235dfb251b15454"
810 "6aa334ae9fb9afc2184932d8695e397b"
811 "fa0ffb93466cfcceaae38c833b7dba38"));
813 /* Test case AUTH512-3: */
814 HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
815 HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
816 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
817 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
818 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
819 HL("dddddddddddddddddddddddddddddddd"
820 "dddddddddddddddddddddddddddddddd"
821 "dddddddddddddddddddddddddddddddd"
823 H("2ee7acd783624ca9398710f3ee05ae41"
824 "b9f9b0510c87e49e586cc9bf961733d8"
825 "623c7b55cebefccf02d5581acc1c9d5f"
826 "b1ff68a1de45509fbe4da9a433922655"));
828 /* Test case AUTH512-3 from same document seems broken. */