[Title] Add packaging/nettle.spec to build nettle on OBS system
[external/nettle.git] / testsuite / hmac-test.c
1 #include "testutils.h"
2 #include "hmac.h"
3
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);                               \
8   digest[length] = 17;                                          \
9   hmac_##alg##_digest(&alg, length, digest);                    \
10   ASSERT(MEMEQ (length, digest, mac));                          \
11   ASSERT(digest[length] == 17);                                 \
12 } while (0)
13
14 int
15 test_main(void)
16 {
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;
23
24   /* sha512's digests are longest */
25   uint8_t digest[SHA512_DIGEST_SIZE+1];
26
27   memset(digest, 0, sizeof(digest));
28
29   /* Test vectors for md5, from RFC-2202 */
30
31   /* md5 - 1 */
32   HMAC_TEST(md5, MD5_DIGEST_SIZE,
33             HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"),
34             LDATA("Hi There"),
35             H("9294727a3638bb1c 13f48ef8158bfc9d"));
36
37
38   /* md5 - 2 */
39   HMAC_TEST(md5, MD5_DIGEST_SIZE,
40             LDATA("Jefe"),
41             LDATA("what do ya want for nothing?"),
42             H("750c783e6ab0b503 eaa86e310a5db738"));        
43
44   /* md5 - 3 */
45   HMAC_TEST(md5, MD5_DIGEST_SIZE,
46             HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
47             HL("dddddddddddddddd dddddddddddddddd"
48                "dddddddddddddddd dddddddddddddddd"
49                "dddddddddddddddd dddddddddddddddd"
50                "dddd"),
51             H("56be34521d144c88 dbb8c733f0e8b3f6"));
52   
53   /* md5 - 4 */
54   HMAC_TEST(md5, MD5_DIGEST_SIZE,
55             HL("0102030405060708 090a0b0c0d0e0f10" 
56                "1112131415161718 19"),
57             HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
58                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
59                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
60                "cdcd"),
61             H("697eaf0aca3a3aea 3a75164746ffaa79"));
62
63   /* md5 - 5 */
64   HMAC_TEST(md5, 12,
65             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c"),
66             LDATA("Test With Truncation"),
67             H("56461ef2342edc00 f9bab995"));
68
69   /* md5 - 6 */
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"));
78
79   /* md5 - 7 */
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"));
89
90   /* Additional test vectors, from Daniel Kahn Gillmor */
91   HMAC_TEST(md5, MD5_DIGEST_SIZE,
92             LDATA("monkey monkey monkey monkey"),
93             LDATA(""),
94             H("e84db42a188813f30a15e611d64c7869"));
95   
96   HMAC_TEST(md5, MD5_DIGEST_SIZE,
97             LDATA("monkey monkey monkey monkey"),
98             LDATA("a"),
99             H("123662062e67c2aab371cc49db0df134"));
100   
101   HMAC_TEST(md5, MD5_DIGEST_SIZE,
102             LDATA("monkey monkey monkey monkey"),
103             LDATA("38"),
104             H("0a46cc10a49d4b7025c040c597bf5d76"));
105   
106   HMAC_TEST(md5, MD5_DIGEST_SIZE,
107             LDATA("monkey monkey monkey monkey"),
108             LDATA("abc"),
109             H("d1f4d89f0e8b2b6ed0623c99ec298310"));
110   
111   HMAC_TEST(md5, MD5_DIGEST_SIZE,
112             LDATA("monkey monkey monkey monkey"),
113             LDATA("message digest"),
114             H("1627207b9bed5009a4f6e9ca8d2ca01e"));
115   
116   HMAC_TEST(md5, MD5_DIGEST_SIZE,
117             LDATA("monkey monkey monkey monkey"),
118             LDATA("abcdefghijklmnopqrstuvwxyz"),
119             H("922aae6ab3b3a29202e21ce5f916ae9a"));
120
121   HMAC_TEST(md5, MD5_DIGEST_SIZE,
122             LDATA("monkey monkey monkey monkey"),
123             LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
124             H("ede9cb83679ba82d88fbeae865b3f8fc"));
125
126   HMAC_TEST(md5, MD5_DIGEST_SIZE,
127             LDATA("monkey monkey monkey monkey"),
128             LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
129             H("939dd45512ee3a594b6654f6b8de27f7"));
130   
131   /* Test vectors for sha1, from RFC-2202 */
132
133   /* sha1 - 1 */
134   HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
135             HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b 0b0b0b0b"),
136             LDATA("Hi There"),
137             H("b617318655057264 e28bc0b6fb378c8e f146be00"));
138
139   /* sha1 - 2 */
140   HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
141             LDATA("Jefe"),
142             LDATA("what do ya want for nothing?"),
143             H("effcdf6ae5eb2fa2 d27416d5f184df9c 259a7c79"));
144
145   /* sha1 - 3 */
146   HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
147             HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaa"),
148             HL("dddddddddddddddd dddddddddddddddd"
149                "dddddddddddddddd dddddddddddddddd"
150                "dddddddddddddddd dddddddddddddddd"
151                "dddd"),
152             H("125d7342b9ac11cd 91a39af48aa17b4f 63f175d3"));
153
154   /* sha1 - 4 */
155   HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
156             HL("0102030405060708 090a0b0c0d0e0f10" 
157                "1112131415161718 19"),
158             HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
159                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
160                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
161                "cdcd"),
162             H("4c9007f4026250c6 bc8414f9bf50c86c 2d7235da"));
163
164   /* sha1 - 5 */
165   HMAC_TEST(sha1, 12,
166             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
167             LDATA("Test With Truncation"),
168             H("4c1a03424b55e07f e7f27be1"));
169
170   /* sha1 - 6 */
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"));
179
180   /* sha1 - 7 */
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"));
190
191   /* Additional test vectors, from Daniel Kahn Gillmor */
192   HMAC_TEST(md5, MD5_DIGEST_SIZE,
193             LDATA("monkey monkey monkey monkey"),
194             LDATA(""),
195             H("e84db42a188813f30a15e611d64c7869"));
196   
197   HMAC_TEST(md5, MD5_DIGEST_SIZE,
198             LDATA("monkey monkey monkey monkey"),
199             LDATA("a"),
200             H("123662062e67c2aab371cc49db0df134"));
201   
202   HMAC_TEST(md5, MD5_DIGEST_SIZE,
203             LDATA("monkey monkey monkey monkey"),
204             LDATA("38"),
205             H("0a46cc10a49d4b7025c040c597bf5d76"));
206   
207   HMAC_TEST(md5, MD5_DIGEST_SIZE,
208             LDATA("monkey monkey monkey monkey"),
209             LDATA("abc"),
210             H("d1f4d89f0e8b2b6ed0623c99ec298310"));
211   
212   HMAC_TEST(md5, MD5_DIGEST_SIZE,
213             LDATA("monkey monkey monkey monkey"),
214             LDATA("message digest"),
215             H("1627207b9bed5009a4f6e9ca8d2ca01e"));
216   
217   HMAC_TEST(md5, MD5_DIGEST_SIZE,
218             LDATA("monkey monkey monkey monkey"),
219             LDATA("abcdefghijklmnopqrstuvwxyz"),
220             H("922aae6ab3b3a29202e21ce5f916ae9a"));
221
222   HMAC_TEST(md5, MD5_DIGEST_SIZE,
223             LDATA("monkey monkey monkey monkey"),
224             LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
225             H("ede9cb83679ba82d88fbeae865b3f8fc"));
226
227   HMAC_TEST(md5, MD5_DIGEST_SIZE,
228             LDATA("monkey monkey monkey monkey"),
229             LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
230             H("939dd45512ee3a594b6654f6b8de27f7"));
231
232   /* Test vectors for sha224, from RFC 4231 */
233   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
234             HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
235                "0b0b0b0b"),
236             LDATA("Hi There"),
237             H("896fb1128abbdf196832107cd49df33f"
238               "47b4b1169912ba4f53684b22"));
239
240   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
241             LDATA("Jefe"),
242             LDATA("what do ya want for nothing?"),
243             H("a30e01098bc6dbbf45690f3a7e9e6d0f"
244               "8bbea2a39e6148008fd05e44"));
245
246   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
247             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
248                "aaaaaaaa"),
249             HL("dddddddddddddddddddddddddddddddd"
250                "dddddddddddddddddddddddddddddddd"
251                "dddddddddddddddddddddddddddddddd"
252                "dddd"),
253             H("7fb3cb3588c6c1f6ffa9694d7d6ad264"
254               "9365b0c1f65d69d1ec8333ea"));
255
256   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
257             HL("0102030405060708090a0b0c0d0e0f10"
258                "111213141516171819"),
259             HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
260                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
261                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
262                "cdcd"),
263             H("6c11506874013cac6a2abc1bb382627c"
264               "ec6a90d86efc012de7afec5a"));
265
266   HMAC_TEST(sha224, 16,
267             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
268             LDATA("Test With Truncation"),
269             H("0e2aea68a90c8d37c988bcdb9fca6fa8"));
270
271   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
272             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
273                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
274                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
275                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
276                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
277                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
278                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
279                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
280                "aaaaaa"),
281             LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
282             H("95e9a0db962095adaebe9b2d6f0dbce2"
283               "d499f112f2d2b7273fa6870e"));
284
285   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
286             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
287                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
288                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
289                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
290                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
291                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
292                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
293                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
294                "aaaaaa"),
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"
298                   "gorithm."),
299             H("3a854166ac5d9f023f54d517d0b39dbd"
300               "946770db9c2b95c9f6f565d1"));
301
302   /* Additional test vectors, from Daniel Kahn Gillmor */
303   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
304             LDATA("monkey monkey monkey monkey"),
305             LDATA(""),
306             H("d12a49ae38177ffeaa548b2148bb5238"
307               "60849772d9391e675b103d89"));
308   
309   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
310             LDATA("monkey monkey monkey monkey"),
311             LDATA("a"),
312             H("b04ff8522f904f553970bfa8ad3f0086"
313               "bce1e8580affd8a12c94e31a"));
314   
315   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
316             LDATA("monkey monkey monkey monkey"),
317             LDATA("38"),
318             H("afcfb5511f710334f9350f57faec3c08"
319               "764b4bd126a6840f4347f116"));
320   
321   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
322             LDATA("monkey monkey monkey monkey"),
323             LDATA("abc"),
324             H("9df9907af127900c909376893565c6cf"
325               "2d7db244fdc4277da1e0b679"));
326   
327   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
328             LDATA("monkey monkey monkey monkey"),
329             LDATA("message digest"),
330             H("254ebf6b8ddd7a3271b3d9aca1699b0c"
331               "0bfb7df61e8a114922c88d27"));
332   
333   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
334             LDATA("monkey monkey monkey monkey"),
335             LDATA("abcdefghijklmnopqrstuvwxyz"),
336             H("6ec5bffba5880c3234a6cf257816e4d5"
337               "35ab178a7f12929769e378fb"));
338
339   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
340             LDATA("monkey monkey monkey monkey"),
341             LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
342             H("5f768179dbb29ca722875d0f461a2e2f"
343               "597d0210340a84df1a8e9c63"));
344
345   HMAC_TEST(sha224, SHA224_DIGEST_SIZE,
346             LDATA("monkey monkey monkey monkey"),
347             LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
348             H("c7667b0d7e56b2b4f6fcc1d8da9e22da"
349               "a1556f44c47132a87303c6a2"));
350
351   /* Test vectors for sha256, from RFC 4231 */
352   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
353             HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
354                "0b0b0b0b"),
355             LDATA("Hi There"),
356             H("b0344c61d8db38535ca8afceaf0bf12b"
357               "881dc200c9833da726e9376c2e32cff7"));
358
359   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
360             LDATA("Jefe"),
361             LDATA("what do ya want for nothing?"),
362             H("5bdcc146bf60754e6a042426089575c7"
363               "5a003f089d2739839dec58b964ec3843"));
364
365   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
366             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
367                "aaaaaaaa"),
368             HL("dddddddddddddddddddddddddddddddd"
369                "dddddddddddddddddddddddddddddddd"
370                "dddddddddddddddddddddddddddddddd"
371                "dddd"),
372             H("773ea91e36800e46854db8ebd09181a7"
373               "2959098b3ef8c122d9635514ced565fe"));
374
375   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
376             HL("0102030405060708090a0b0c0d0e0f10"
377                "111213141516171819"),
378             HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
379                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
380                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
381                "cdcd"),
382             H("82558a389a443c0ea4cc819899f2083a"
383               "85f0faa3e578f8077a2e3ff46729665b"));
384
385   HMAC_TEST(sha256, 16,
386             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
387             LDATA("Test With Truncation"),
388             H("a3b6167473100ee06e0c796c2955552b"));
389
390   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
391             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
392                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
393                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
394                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
395                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
396                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
397                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
398                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
399                "aaaaaa"),
400             LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
401             H("60e431591ee0b67f0d8a26aacbf5b77f"
402               "8e0bc6213728c5140546040f0ee37f54"));
403
404   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
405             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
406                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
407                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
408                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
409                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
410                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
411                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
412                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
413                "aaaaaa"),
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"
417                   "gorithm."),
418             H("9b09ffa71b942fcb27635fbcd5b0e944"
419               "bfdc63644f0713938a7f51535c3a35e2"));
420
421   /* Additional test vectors for sha256, from
422      draft-ietf-ipsec-ciph-sha-256-01.txt */
423
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"),
428             LDATA("abc"),
429             H("a21b1f5d4cf4f73a 4dd939750f7a066a"
430                  "7f98cc131cb16a66 92759021cfab8181"));
431
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"));
440
441   /* Test Case #3: HMAC-SHA-256 with 112-byte (multi-block) input
442      and 32-byte key */
443   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
444             HL("0102030405060708 090a0b0c0d0e0f10"
445                "1112131415161718 191a1b1c1d1e1f20"),
446             LDATA("abcdbcdecdefdefgefghfghighijhijk"
447                   "ijkljklmklmnlmnomnopnopqabcdbcde"
448                   "cdefdefgefghfghighijhijkijkljklm"
449                   "klmnlmnomnopnopq"),
450             H("470305fc7e40fe34 d3eeb3e773d95aab"
451               "73acf0fd060447a5 eb4595bf33a9d1a3"));
452
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"),
457             LDATA("Hi There"),
458             H("198a607eb44bfbc6 9903a0f1cf2bbdc5"
459               "ba0aa3f3d9ae3c1c 7a3b1696a0b68cf7"));
460
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"
468                "dddd"),
469             H("cdcb1220d1ecccea 91e53aba3092f962"
470               "e549fe6ce9ed7fdc 43191fbde45c30b0"));
471
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"
476                "2122232425"),
477             HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
478                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
479                "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
480                "cdcd"),
481             H("d4633c17f6fb8d74 4c66dee0f8f07455"
482               "6ec4af55ef079985 41468eb49bd2e917"));
483
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"));
490
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"));
501
502   /* Test Case #10: HMAC-SHA-256 with 73-byte (multi-block) input
503      and 80-byte key */
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"));
513
514   /* Additional test vectors, from Daniel Kahn Gillmor */
515   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
516             LDATA("monkey monkey monkey monkey"),
517             LDATA(""),
518             H("5c780648c90d121c50091c3a0c3afc1f"
519               "4ab847528005d99d9821ad3f341b651a"));
520   
521   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
522             LDATA("monkey monkey monkey monkey"),
523             LDATA("a"),
524             H("6142364c0646b0cfe426866f21d613e0"
525               "55a136a7d9b45d85685e080a09cec463"));
526   
527   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
528             LDATA("monkey monkey monkey monkey"),
529             LDATA("38"),
530             H("e49aa7839977e130ad87b63da9d4eb7b"
531               "263cd5a27c54a7604b6044eb35901171"));
532   
533   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
534             LDATA("monkey monkey monkey monkey"),
535             LDATA("abc"),
536             H("e5ef49f545c7af933a9d18c7c562bc91"
537               "08583fd5cf00d9e0db351d6d8f8e41bc"));
538   
539   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
540             LDATA("monkey monkey monkey monkey"),
541             LDATA("message digest"),
542             H("373b04877180fea27a41a8fb8f88201c"
543               "a6268411ee3c80b01a424483eb9156e1"));
544   
545   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
546             LDATA("monkey monkey monkey monkey"),
547             LDATA("abcdefghijklmnopqrstuvwxyz"),
548             H("eb5945d56eefbdb41602946ea6448d53"
549               "86b08d7d801a87f439fab52f8bb9736e"));
550
551   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
552             LDATA("monkey monkey monkey monkey"),
553             LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
554             H("3798f363c57afa6edaffe39016ca7bad"
555               "efd1e670afb0e3987194307dec3197db"));
556
557   HMAC_TEST(sha256, SHA256_DIGEST_SIZE,
558             LDATA("monkey monkey monkey monkey"),
559             LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
560             H("c89a7039a62985ff813fe4509b918a43"
561               "6d7b1ffd8778e2c24dec464849fb6128"));
562
563   /* Test vectors for sha384, from RFC 4231 */
564   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
565             HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
566                "0b0b0b0b"),
567             LDATA("Hi There"),
568             H("afd03944d84895626b0825f4ab46907f"
569               "15f9dadbe4101ec682aa034c7cebc59c"
570               "faea9ea9076ede7f4af152e8b2fa9cb6"));
571
572   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
573             LDATA("Jefe"),
574             LDATA("what do ya want for nothing?"),
575             H("af45d2e376484031617f78d2b58a6b1b"
576               "9c7ef464f5a01b47e42ec3736322445e"
577               "8e2240ca5e69e2c78b3239ecfab21649"));
578
579   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
580             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
581                "aaaaaaaa"),
582             HL("dddddddddddddddddddddddddddddddd"
583                "dddddddddddddddddddddddddddddddd"
584                "dddddddddddddddddddddddddddddddd"
585                "dddd"),
586             H("88062608d3e6ad8a0aa2ace014c8a86f"
587               "0aa635d947ac9febe83ef4e55966144b"
588               "2a5ab39dc13814b94e3ab6e101a34f27"));
589
590   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
591             HL("0102030405060708090a0b0c0d0e0f10"
592                "111213141516171819"),
593             HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
594                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
595                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
596                "cdcd"),
597             H("3e8a69b7783c25851933ab6290af6ca7"
598               "7a9981480850009cc5577c6e1f573b4e"
599               "6801dd23c4a7d679ccf8a386c674cffb"));
600
601   HMAC_TEST(sha384, 16,
602             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
603             LDATA("Test With Truncation"),
604             H("3abf34c3503b2a23a46efc619baef897"));
605
606   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
607             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
608                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
609                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
610                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
611                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
612                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
613                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
614                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
615                "aaaaaa"),
616             LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
617             H("4ece084485813e9088d2c63a041bc5b4"
618               "4f9ef1012a2b588f3cd11f05033ac4c6"
619               "0c2ef6ab4030fe8296248df163f44952"));
620
621   HMAC_TEST(sha384, SHA384_DIGEST_SIZE,
622             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
623                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
624                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
625                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
626                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
627                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
628                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
629                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
630                "aaaaaa"),
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"
634                   "gorithm."),
635             H("6617178e941f020d351e2f254e8fd32c"
636               "602420feb0b8fb9adccebb82461e99c5"
637               "a678cc31e799176d3860e6110c46523e"));
638
639   /* Test vectors for sha512, from RFC 4231 */
640   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
641             HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
642                "0b0b0b0b"),
643             LDATA("Hi There"),
644             H("87aa7cdea5ef619d4ff0b4241a1d6cb0"
645               "2379f4e2ce4ec2787ad0b30545e17cde"
646               "daa833b7d6b8a702038b274eaea3f4e4"
647               "be9d914eeb61f1702e696c203a126854"));
648
649   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
650             LDATA("Jefe"),
651             LDATA("what do ya want for nothing?"),
652             H("164b7a7bfcf819e2e395fbe73b56e0a3"
653               "87bd64222e831fd610270cd7ea250554"
654               "9758bf75c05a994a6d034f65f8f0e6fd"
655               "caeab1a34d4a6b4b636e070a38bce737"));
656
657   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
658             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
659                "aaaaaaaa"),
660             HL("dddddddddddddddddddddddddddddddd"
661                "dddddddddddddddddddddddddddddddd"
662                "dddddddddddddddddddddddddddddddd"
663                "dddd"),
664             H("fa73b0089d56a284efb0f0756c890be9"
665               "b1b5dbdd8ee81a3655f83e33b2279d39"
666               "bf3e848279a722c806b485a47e67c807"
667               "b946a337bee8942674278859e13292fb"));
668
669   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
670             HL("0102030405060708090a0b0c0d0e0f10"
671                "111213141516171819"),
672             HL("cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
673                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
674                "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd"
675                "cdcd"),
676             H("b0ba465637458c6990e5a8c5f61d4af7"
677               "e576d97ff94b872de76f8050361ee3db"
678               "a91ca5c11aa25eb4d679275cc5788063"
679               "a5f19741120c4f2de2adebeb10a298dd"));
680
681   HMAC_TEST(sha512, 16,
682             HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"),
683             LDATA("Test With Truncation"),
684             H("415fad6271580a531d4179bc891d87a6"));
685
686   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
687             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
688                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
689                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
690                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
691                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
692                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
693                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
694                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
695                "aaaaaa"),
696             LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
697             H("80b24263c7c1a3ebb71493c1dd7be8b4"
698               "9b46d1f41b4aeec1121b013783f8f352"
699               "6b56d037e05f2598bd0fd2215d6a1e52"
700               "95e64f73f63f0aec8b915a985d786598"));
701
702   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
703             HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
704                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
705                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
706                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
707                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
708                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
709                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
710                "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
711                "aaaaaa"),
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"
715                   "gorithm."),
716             H("e37b6a775dc87dbaa4dfa9f96e5e3ffd"
717               "debd71f8867289865df5a32d20cdc944"
718               "b6022cac3c4982b10d5eeb55c3e4de15"
719               "134676fb6de0446065c97440fa8c6a58"));
720
721   /* Additional test vectors, from Daniel Kahn Gillmor */
722   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
723             LDATA("monkey monkey monkey monkey"),
724             LDATA(""),
725             H("34316413c2d6940572d0bbbf099d529d"
726               "148b424533cf562bc1b365f530e21a31"
727               "799fc51cef78060cc6f448a8e5d780c2"
728               "6cdf20d4c3e6f27fe5ef576bbd05e855"));
729   
730   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
731             LDATA("monkey monkey monkey monkey"),
732             LDATA("a"),
733             H("cf1948507378bc3ab58cb6ec87f4d456"
734               "b90d3298395c29873f1ded1e111b50fe"
735               "c336ed24684bf19716efc309212f37aa"
736               "715cfb9ecccf3af13691ded167b4b336"));
737   
738   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
739             LDATA("monkey monkey monkey monkey"),
740             LDATA("38"),
741             H("b8201784216ce01b83cdd282616c6e89"
742               "644c6dfd1269ed8580bbc39b92add364"
743               "c2b2a2018cffb1915e8625e473b67d0f"
744               "e54a50e475dfa0e2b1a97bac1383792c"));
745   
746   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
747             LDATA("monkey monkey monkey monkey"),
748             LDATA("abc"),
749             H("f097ee08b8c44e847a384f9fd645e35e"
750               "4816baa9791ba39d3dc611210500b044"
751               "873ee296bf1047dc06daa201a5767192"
752               "5b73b4ea59c60114881c8287d0699c83"));
753   
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"));
761   
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"));
769
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"));
777
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"));
785
786   /* Additional test vectors, from
787      draft-kelly-ipsec-ciph-sha2-01.txt */
788
789   /* Test case AUTH512-1: */
790   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
791             HL("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
792                "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
793                "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"
794                "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
795             LDATA("Hi There"),
796             H("637edc6e01dce7e6742a99451aae82df"
797               "23da3e92439e590e43e761b33e910fb8"
798               "ac2878ebd5803f6f0b61dbce5e251ff8"
799               "789a4722c1be65aea45fd464e89f8f5b"));
800
801   /* Test case AUTH512-2: */
802   HMAC_TEST(sha512, SHA512_DIGEST_SIZE,
803             LDATA("JefeJefeJefeJefe"
804                   "JefeJefeJefeJefe"
805                   "JefeJefeJefeJefe"
806                   "JefeJefeJefeJefe"),      
807             LDATA("what do ya want for nothing?"),
808             H("cb370917ae8a7ce28cfd1d8f4705d614"
809               "1c173b2a9362c15df235dfb251b15454"
810               "6aa334ae9fb9afc2184932d8695e397b"
811               "fa0ffb93466cfcceaae38c833b7dba38"));
812
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"
822                "dddd"),
823             H("2ee7acd783624ca9398710f3ee05ae41"
824               "b9f9b0510c87e49e586cc9bf961733d8"
825               "623c7b55cebefccf02d5581acc1c9d5f"
826               "b1ff68a1de45509fbe4da9a433922655"));
827
828   /* Test case AUTH512-3 from same document seems broken. */
829   
830   SUCCESS();
831 }