2 * Algorithm testing framework and tests.
4 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
5 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
6 * Copyright (c) 2007 Nokia Siemens Networks
7 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
15 #ifndef _CRYPTO_TESTMGR_H
16 #define _CRYPTO_TESTMGR_H
18 #include <linux/netlink.h>
19 #include <linux/zlib.h>
21 #include <crypto/compress.h>
23 #define MAX_DIGEST_SIZE 64
30 /* only used with keyed hash algorithms */
34 unsigned char tap[MAX_TAP];
40 struct cipher_testvec {
45 unsigned short tap[MAX_TAP];
48 unsigned char wk; /* weak key flag */
60 unsigned char tap[MAX_TAP];
61 unsigned char atap[MAX_TAP];
65 unsigned char novrfy; /* ccm dec verification failure expected */
66 unsigned char wk; /* weak key flag */
73 struct cprng_testvec {
85 static char zeroed_string[48];
88 * MD4 test vectors from RFC1320
90 #define MD4_TEST_VECTORS 7
92 static struct hash_testvec md4_tv_template [] = {
95 .digest = "\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31"
96 "\xb7\x3c\x59\xd7\xe0\xc0\x89\xc0",
100 .digest = "\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46"
101 "\x24\x5e\x05\xfb\xdb\xd6\xfb\x24",
105 .digest = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52"
106 "\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d",
108 .plaintext = "message digest",
110 .digest = "\xd9\x13\x0a\x81\x64\x54\x9f\xe8"
111 "\x18\x87\x48\x06\xe1\xc7\x01\x4b",
113 .plaintext = "abcdefghijklmnopqrstuvwxyz",
115 .digest = "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd"
116 "\xee\xa8\xed\x63\xdf\x41\x2d\xa9",
120 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
122 .digest = "\x04\x3f\x85\x82\xf2\x41\xdb\x35"
123 "\x1c\xe6\x27\xe1\x53\xe7\xf0\xe4",
125 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
128 .digest = "\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19"
129 "\x9c\x3e\x7b\x16\x4f\xcc\x05\x36",
134 * MD5 test vectors from RFC1321
136 #define MD5_TEST_VECTORS 7
138 static struct hash_testvec md5_tv_template[] = {
140 .digest = "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04"
141 "\xe9\x80\x09\x98\xec\xf8\x42\x7e",
145 .digest = "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8"
146 "\x31\xc3\x99\xe2\x69\x77\x26\x61",
150 .digest = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0"
151 "\xd6\x96\x3f\x7d\x28\xe1\x7f\x72",
153 .plaintext = "message digest",
155 .digest = "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d"
156 "\x52\x5a\x2f\x31\xaa\xf1\x61\xd0",
158 .plaintext = "abcdefghijklmnopqrstuvwxyz",
160 .digest = "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00"
161 "\x7d\xfb\x49\x6c\xca\x67\xe1\x3b",
165 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
167 .digest = "\xd1\x74\xab\x98\xd2\x77\xd9\xf5"
168 "\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f",
170 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
171 "345678901234567890",
173 .digest = "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55"
174 "\xac\x49\xda\x2e\x21\x07\xb6\x7a",
180 * RIPEMD-128 test vectors from ISO/IEC 10118-3:2004(E)
182 #define RMD128_TEST_VECTORS 10
184 static struct hash_testvec rmd128_tv_template[] = {
186 .digest = "\xcd\xf2\x62\x13\xa1\x50\xdc\x3e"
187 "\xcb\x61\x0f\x18\xf6\xb3\x8b\x46",
191 .digest = "\x86\xbe\x7a\xfa\x33\x9d\x0f\xc7"
192 "\xcf\xc7\x85\xe7\x2f\x57\x8d\x33",
196 .digest = "\xc1\x4a\x12\x19\x9c\x66\xe4\xba"
197 "\x84\x63\x6b\x0f\x69\x14\x4c\x77",
199 .plaintext = "message digest",
201 .digest = "\x9e\x32\x7b\x3d\x6e\x52\x30\x62"
202 "\xaf\xc1\x13\x2d\x7d\xf9\xd1\xb8",
204 .plaintext = "abcdefghijklmnopqrstuvwxyz",
206 .digest = "\xfd\x2a\xa6\x07\xf7\x1d\xc8\xf5"
207 "\x10\x71\x49\x22\xb3\x71\x83\x4e",
209 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
210 "fghijklmnopqrstuvwxyz0123456789",
212 .digest = "\xd1\xe9\x59\xeb\x17\x9c\x91\x1f"
213 "\xae\xa4\x62\x4c\x60\xc5\xc7\x02",
215 .plaintext = "1234567890123456789012345678901234567890"
216 "1234567890123456789012345678901234567890",
218 .digest = "\x3f\x45\xef\x19\x47\x32\xc2\xdb"
219 "\xb2\xc4\xa2\xc7\x69\x79\x5f\xa3",
221 .plaintext = "abcdbcdecdefdefgefghfghighij"
222 "hijkijkljklmklmnlmnomnopnopq",
224 .digest = "\xa1\xaa\x06\x89\xd0\xfa\xfa\x2d"
225 "\xdc\x22\xe8\x8b\x49\x13\x3a\x06",
229 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
230 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
231 "lmnopqrsmnopqrstnopqrstu",
233 .digest = "\xd4\xec\xc9\x13\xe1\xdf\x77\x6b"
234 "\xf4\x8d\xe9\xd5\x5b\x1f\x25\x46",
236 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
238 .digest = "\x13\xfc\x13\xe8\xef\xff\x34\x7d"
239 "\xe1\x93\xff\x46\xdb\xac\xcf\xd4",
244 * RIPEMD-160 test vectors from ISO/IEC 10118-3:2004(E)
246 #define RMD160_TEST_VECTORS 10
248 static struct hash_testvec rmd160_tv_template[] = {
250 .digest = "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28"
251 "\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31",
255 .digest = "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae"
256 "\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe",
260 .digest = "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04"
261 "\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc",
263 .plaintext = "message digest",
265 .digest = "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8"
266 "\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36",
268 .plaintext = "abcdefghijklmnopqrstuvwxyz",
270 .digest = "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb"
271 "\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc",
273 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
274 "fghijklmnopqrstuvwxyz0123456789",
276 .digest = "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed"
277 "\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89",
279 .plaintext = "1234567890123456789012345678901234567890"
280 "1234567890123456789012345678901234567890",
282 .digest = "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb"
283 "\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb",
285 .plaintext = "abcdbcdecdefdefgefghfghighij"
286 "hijkijkljklmklmnlmnomnopnopq",
288 .digest = "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05"
289 "\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b",
293 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
294 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
295 "lmnopqrsmnopqrstnopqrstu",
297 .digest = "\x6f\x3f\xa3\x9b\x6b\x50\x3c\x38\x4f\x91"
298 "\x9a\x49\xa7\xaa\x5c\x2c\x08\xbd\xfb\x45",
300 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
302 .digest = "\x94\xc2\x64\x11\x54\x04\xe6\x33\x79\x0d"
303 "\xfc\xc8\x7b\x58\x7d\x36\x77\x06\x7d\x9f",
308 * RIPEMD-256 test vectors
310 #define RMD256_TEST_VECTORS 8
312 static struct hash_testvec rmd256_tv_template[] = {
314 .digest = "\x02\xba\x4c\x4e\x5f\x8e\xcd\x18"
315 "\x77\xfc\x52\xd6\x4d\x30\xe3\x7a"
316 "\x2d\x97\x74\xfb\x1e\x5d\x02\x63"
317 "\x80\xae\x01\x68\xe3\xc5\x52\x2d",
321 .digest = "\xf9\x33\x3e\x45\xd8\x57\xf5\xd9"
322 "\x0a\x91\xba\xb7\x0a\x1e\xba\x0c"
323 "\xfb\x1b\xe4\xb0\x78\x3c\x9a\xcf"
324 "\xcd\x88\x3a\x91\x34\x69\x29\x25",
328 .digest = "\xaf\xbd\x6e\x22\x8b\x9d\x8c\xbb"
329 "\xce\xf5\xca\x2d\x03\xe6\xdb\xa1"
330 "\x0a\xc0\xbc\x7d\xcb\xe4\x68\x0e"
331 "\x1e\x42\xd2\xe9\x75\x45\x9b\x65",
333 .plaintext = "message digest",
335 .digest = "\x87\xe9\x71\x75\x9a\x1c\xe4\x7a"
336 "\x51\x4d\x5c\x91\x4c\x39\x2c\x90"
337 "\x18\xc7\xc4\x6b\xc1\x44\x65\x55"
338 "\x4a\xfc\xdf\x54\xa5\x07\x0c\x0e",
340 .plaintext = "abcdefghijklmnopqrstuvwxyz",
342 .digest = "\x64\x9d\x30\x34\x75\x1e\xa2\x16"
343 "\x77\x6b\xf9\xa1\x8a\xcc\x81\xbc"
344 "\x78\x96\x11\x8a\x51\x97\x96\x87"
345 "\x82\xdd\x1f\xd9\x7d\x8d\x51\x33",
347 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
348 "fghijklmnopqrstuvwxyz0123456789",
350 .digest = "\x57\x40\xa4\x08\xac\x16\xb7\x20"
351 "\xb8\x44\x24\xae\x93\x1c\xbb\x1f"
352 "\xe3\x63\xd1\xd0\xbf\x40\x17\xf1"
353 "\xa8\x9f\x7e\xa6\xde\x77\xa0\xb8",
355 .plaintext = "1234567890123456789012345678901234567890"
356 "1234567890123456789012345678901234567890",
358 .digest = "\x06\xfd\xcc\x7a\x40\x95\x48\xaa"
359 "\xf9\x13\x68\xc0\x6a\x62\x75\xb5"
360 "\x53\xe3\xf0\x99\xbf\x0e\xa4\xed"
361 "\xfd\x67\x78\xdf\x89\xa8\x90\xdd",
363 .plaintext = "abcdbcdecdefdefgefghfghighij"
364 "hijkijkljklmklmnlmnomnopnopq",
366 .digest = "\x38\x43\x04\x55\x83\xaa\xc6\xc8"
367 "\xc8\xd9\x12\x85\x73\xe7\xa9\x80"
368 "\x9a\xfb\x2a\x0f\x34\xcc\xc3\x6e"
369 "\xa9\xe7\x2f\x16\xf6\x36\x8e\x3f",
376 * RIPEMD-320 test vectors
378 #define RMD320_TEST_VECTORS 8
380 static struct hash_testvec rmd320_tv_template[] = {
382 .digest = "\x22\xd6\x5d\x56\x61\x53\x6c\xdc\x75\xc1"
383 "\xfd\xf5\xc6\xde\x7b\x41\xb9\xf2\x73\x25"
384 "\xeb\xc6\x1e\x85\x57\x17\x7d\x70\x5a\x0e"
385 "\xc8\x80\x15\x1c\x3a\x32\xa0\x08\x99\xb8",
389 .digest = "\xce\x78\x85\x06\x38\xf9\x26\x58\xa5\xa5"
390 "\x85\x09\x75\x79\x92\x6d\xda\x66\x7a\x57"
391 "\x16\x56\x2c\xfc\xf6\xfb\xe7\x7f\x63\x54"
392 "\x2f\x99\xb0\x47\x05\xd6\x97\x0d\xff\x5d",
396 .digest = "\xde\x4c\x01\xb3\x05\x4f\x89\x30\xa7\x9d"
397 "\x09\xae\x73\x8e\x92\x30\x1e\x5a\x17\x08"
398 "\x5b\xef\xfd\xc1\xb8\xd1\x16\x71\x3e\x74"
399 "\xf8\x2f\xa9\x42\xd6\x4c\xdb\xc4\x68\x2d",
401 .plaintext = "message digest",
403 .digest = "\x3a\x8e\x28\x50\x2e\xd4\x5d\x42\x2f\x68"
404 "\x84\x4f\x9d\xd3\x16\xe7\xb9\x85\x33\xfa"
405 "\x3f\x2a\x91\xd2\x9f\x84\xd4\x25\xc8\x8d"
406 "\x6b\x4e\xff\x72\x7d\xf6\x6a\x7c\x01\x97",
408 .plaintext = "abcdefghijklmnopqrstuvwxyz",
410 .digest = "\xca\xbd\xb1\x81\x0b\x92\x47\x0a\x20\x93"
411 "\xaa\x6b\xce\x05\x95\x2c\x28\x34\x8c\xf4"
412 "\x3f\xf6\x08\x41\x97\x51\x66\xbb\x40\xed"
413 "\x23\x40\x04\xb8\x82\x44\x63\xe6\xb0\x09",
415 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
416 "fghijklmnopqrstuvwxyz0123456789",
418 .digest = "\xed\x54\x49\x40\xc8\x6d\x67\xf2\x50\xd2"
419 "\x32\xc3\x0b\x7b\x3e\x57\x70\xe0\xc6\x0c"
420 "\x8c\xb9\xa4\xca\xfe\x3b\x11\x38\x8a\xf9"
421 "\x92\x0e\x1b\x99\x23\x0b\x84\x3c\x86\xa4",
423 .plaintext = "1234567890123456789012345678901234567890"
424 "1234567890123456789012345678901234567890",
426 .digest = "\x55\x78\x88\xaf\x5f\x6d\x8e\xd6\x2a\xb6"
427 "\x69\x45\xc6\xd2\xa0\xa4\x7e\xcd\x53\x41"
428 "\xe9\x15\xeb\x8f\xea\x1d\x05\x24\x95\x5f"
429 "\x82\x5d\xc7\x17\xe4\xa0\x08\xab\x2d\x42",
431 .plaintext = "abcdbcdecdefdefgefghfghighij"
432 "hijkijkljklmklmnlmnomnopnopq",
434 .digest = "\xd0\x34\xa7\x95\x0c\xf7\x22\x02\x1b\xa4"
435 "\xb8\x4d\xf7\x69\xa5\xde\x20\x60\xe2\x59"
436 "\xdf\x4c\x9b\xb4\xa4\x26\x8c\x0e\x93\x5b"
437 "\xbc\x74\x70\xa9\x69\xc9\xd0\x72\xa1\xac",
444 * SHA1 test vectors from from FIPS PUB 180-1
446 #define SHA1_TEST_VECTORS 2
448 static struct hash_testvec sha1_tv_template[] = {
452 .digest = "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
453 "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d",
455 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
457 .digest = "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
458 "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1",
466 * SHA224 test vectors from from FIPS PUB 180-2
468 #define SHA224_TEST_VECTORS 2
470 static struct hash_testvec sha224_tv_template[] = {
474 .digest = "\x23\x09\x7D\x22\x34\x05\xD8\x22"
475 "\x86\x42\xA4\x77\xBD\xA2\x55\xB3"
476 "\x2A\xAD\xBC\xE4\xBD\xA0\xB3\xF7"
480 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
482 .digest = "\x75\x38\x8B\x16\x51\x27\x76\xCC"
483 "\x5D\xBA\x5D\xA1\xFD\x89\x01\x50"
484 "\xB0\xC6\x45\x5C\xB4\xF5\x8B\x19"
492 * SHA256 test vectors from from NIST
494 #define SHA256_TEST_VECTORS 2
496 static struct hash_testvec sha256_tv_template[] = {
500 .digest = "\xba\x78\x16\xbf\x8f\x01\xcf\xea"
501 "\x41\x41\x40\xde\x5d\xae\x22\x23"
502 "\xb0\x03\x61\xa3\x96\x17\x7a\x9c"
503 "\xb4\x10\xff\x61\xf2\x00\x15\xad",
505 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
507 .digest = "\x24\x8d\x6a\x61\xd2\x06\x38\xb8"
508 "\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
509 "\xa3\x3c\xe4\x59\x64\xff\x21\x67"
510 "\xf6\xec\xed\xd4\x19\xdb\x06\xc1",
517 * SHA384 test vectors from from NIST and kerneli
519 #define SHA384_TEST_VECTORS 4
521 static struct hash_testvec sha384_tv_template[] = {
525 .digest = "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b"
526 "\xb5\xa0\x3d\x69\x9a\xc6\x50\x07"
527 "\x27\x2c\x32\xab\x0e\xde\xd1\x63"
528 "\x1a\x8b\x60\x5a\x43\xff\x5b\xed"
529 "\x80\x86\x07\x2b\xa1\xe7\xcc\x23"
530 "\x58\xba\xec\xa1\x34\xc8\x25\xa7",
532 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
534 .digest = "\x33\x91\xfd\xdd\xfc\x8d\xc7\x39"
535 "\x37\x07\xa6\x5b\x1b\x47\x09\x39"
536 "\x7c\xf8\xb1\xd1\x62\xaf\x05\xab"
537 "\xfe\x8f\x45\x0d\xe5\xf3\x6b\xc6"
538 "\xb0\x45\x5a\x85\x20\xbc\x4e\x6f"
539 "\x5f\xe9\x5b\x1f\xe3\xc8\x45\x2b",
541 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
542 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
544 .digest = "\x09\x33\x0c\x33\xf7\x11\x47\xe8"
545 "\x3d\x19\x2f\xc7\x82\xcd\x1b\x47"
546 "\x53\x11\x1b\x17\x3b\x3b\x05\xd2"
547 "\x2f\xa0\x80\x86\xe3\xb0\xf7\x12"
548 "\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9"
549 "\x66\xc3\xe9\xfa\x91\x74\x60\x39",
551 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
552 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
554 .digest = "\x3d\x20\x89\x73\xab\x35\x08\xdb"
555 "\xbd\x7e\x2c\x28\x62\xba\x29\x0a"
556 "\xd3\x01\x0e\x49\x78\xc1\x98\xdc"
557 "\x4d\x8f\xd0\x14\xe5\x82\x82\x3a"
558 "\x89\xe1\x6f\x9b\x2a\x7b\xbc\x1a"
559 "\xc9\x38\xe2\xd1\x99\xe8\xbe\xa4",
561 .tap = { 26, 26, 26, 26 }
566 * SHA512 test vectors from from NIST and kerneli
568 #define SHA512_TEST_VECTORS 4
570 static struct hash_testvec sha512_tv_template[] = {
574 .digest = "\xdd\xaf\x35\xa1\x93\x61\x7a\xba"
575 "\xcc\x41\x73\x49\xae\x20\x41\x31"
576 "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2"
577 "\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a"
578 "\x21\x92\x99\x2a\x27\x4f\xc1\xa8"
579 "\x36\xba\x3c\x23\xa3\xfe\xeb\xbd"
580 "\x45\x4d\x44\x23\x64\x3c\xe8\x0e"
581 "\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f",
583 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
585 .digest = "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a"
586 "\x0c\xed\x7b\xeb\x8e\x08\xa4\x16"
587 "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8"
588 "\x27\x9b\xe3\x31\xa7\x03\xc3\x35"
589 "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9"
590 "\xaa\x1d\x3b\xea\x57\x78\x9c\xa0"
591 "\x31\xad\x85\xc7\xa7\x1d\xd7\x03"
592 "\x54\xec\x63\x12\x38\xca\x34\x45",
594 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
595 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
597 .digest = "\x8e\x95\x9b\x75\xda\xe3\x13\xda"
598 "\x8c\xf4\xf7\x28\x14\xfc\x14\x3f"
599 "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1"
600 "\x72\x99\xae\xad\xb6\x88\x90\x18"
601 "\x50\x1d\x28\x9e\x49\x00\xf7\xe4"
602 "\x33\x1b\x99\xde\xc4\xb5\x43\x3a"
603 "\xc7\xd3\x29\xee\xb6\xdd\x26\x54"
604 "\x5e\x96\xe5\x5b\x87\x4b\xe9\x09",
606 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
607 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
609 .digest = "\x93\x0d\x0c\xef\xcb\x30\xff\x11"
610 "\x33\xb6\x89\x81\x21\xf1\xcf\x3d"
611 "\x27\x57\x8a\xfc\xaf\xe8\x67\x7c"
612 "\x52\x57\xcf\x06\x99\x11\xf7\x5d"
613 "\x8f\x58\x31\xb5\x6e\xbf\xda\x67"
614 "\xb2\x78\xe6\x6d\xff\x8b\x84\xfe"
615 "\x2b\x28\x70\xf7\x42\xa5\x80\xd8"
616 "\xed\xb4\x19\x87\x23\x28\x50\xc9",
618 .tap = { 26, 26, 26, 26 }
624 * WHIRLPOOL test vectors from Whirlpool package
625 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
628 #define WP512_TEST_VECTORS 8
630 static struct hash_testvec wp512_tv_template[] = {
634 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
635 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
636 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
637 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
638 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
639 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57"
640 "\xEA\x89\x64\xE5\x9B\x63\xD9\x37"
641 "\x08\xB1\x38\xCC\x42\xA6\x6E\xB3",
647 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
648 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
649 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
650 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
651 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
652 "\x3A\x42\x39\x1A\x39\x14\x5A\x59"
653 "\x1A\x92\x20\x0D\x56\x01\x95\xE5"
654 "\x3B\x47\x85\x84\xFD\xAE\x23\x1A",
658 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
659 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
660 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
661 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
662 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
663 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6"
664 "\xC7\x97\xFC\x9D\x95\xD8\xB5\x82"
665 "\xD2\x25\x29\x20\x76\xD4\xEE\xF5",
667 .plaintext = "message digest",
669 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
670 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
671 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
672 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
673 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
674 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6"
675 "\x92\xED\x92\x00\x52\x83\x8F\x33"
676 "\x62\xE8\x6D\xBD\x37\xA8\x90\x3E",
678 .plaintext = "abcdefghijklmnopqrstuvwxyz",
680 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
681 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
682 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
683 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
684 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
685 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6"
686 "\xF6\x8F\x67\x3E\x72\x07\x86\x5D"
687 "\x5D\x98\x19\xA3\xDB\xA4\xEB\x3B",
689 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
690 "abcdefghijklmnopqrstuvwxyz0123456789",
692 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
693 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
694 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
695 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
696 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
697 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6"
698 "\x55\x17\xCC\x87\x9D\x7B\x96\x21"
699 "\x42\xC6\x5F\x5A\x7A\xF0\x14\x67",
701 .plaintext = "1234567890123456789012345678901234567890"
702 "1234567890123456789012345678901234567890",
704 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
705 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
706 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
707 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
708 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
709 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A"
710 "\x2C\x60\x48\x1E\x88\xC5\xA2\x0B"
711 "\x2C\x2A\x80\xCF\x3A\x9A\x08\x3B",
713 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
715 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
716 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
717 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
718 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
719 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
720 "\x7B\x94\x76\x39\xFE\x05\x0B\x56"
721 "\x93\x9B\xAA\xA0\xAD\xFF\x9A\xE6"
722 "\x74\x5B\x7B\x18\x1C\x3B\xE3\xFD",
726 #define WP384_TEST_VECTORS 8
728 static struct hash_testvec wp384_tv_template[] = {
732 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
733 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
734 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
735 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
736 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
737 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57",
743 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
744 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
745 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
746 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
747 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
748 "\x3A\x42\x39\x1A\x39\x14\x5A\x59",
752 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
753 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
754 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
755 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
756 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
757 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6",
759 .plaintext = "message digest",
761 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
762 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
763 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
764 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
765 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
766 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6",
768 .plaintext = "abcdefghijklmnopqrstuvwxyz",
770 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
771 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
772 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
773 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
774 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
775 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6",
777 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
778 "abcdefghijklmnopqrstuvwxyz0123456789",
780 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
781 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
782 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
783 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
784 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
785 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6",
787 .plaintext = "1234567890123456789012345678901234567890"
788 "1234567890123456789012345678901234567890",
790 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
791 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
792 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
793 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
794 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
795 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A",
797 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
799 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
800 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
801 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
802 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
803 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
804 "\x7B\x94\x76\x39\xFE\x05\x0B\x56",
808 #define WP256_TEST_VECTORS 8
810 static struct hash_testvec wp256_tv_template[] = {
814 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
815 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
816 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
817 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7",
823 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
824 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
825 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
826 "\x73\xC4\x50\x01\xD0\x08\x7B\x42",
830 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
831 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
832 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
833 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C",
835 .plaintext = "message digest",
837 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
838 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
839 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
840 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B",
842 .plaintext = "abcdefghijklmnopqrstuvwxyz",
844 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
845 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
846 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
847 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B",
849 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
850 "abcdefghijklmnopqrstuvwxyz0123456789",
852 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
853 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
854 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
855 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E",
857 .plaintext = "1234567890123456789012345678901234567890"
858 "1234567890123456789012345678901234567890",
860 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
861 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
862 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
863 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29",
865 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
867 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
868 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
869 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
870 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69",
875 * TIGER test vectors from Tiger website
877 #define TGR192_TEST_VECTORS 6
879 static struct hash_testvec tgr192_tv_template[] = {
883 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
884 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
885 "\xf3\x73\xde\x2d\x49\x58\x4e\x7a",
889 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
890 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
891 "\x93\x5f\x7b\x95\x1c\x13\x29\x51",
893 .plaintext = "Tiger",
895 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
896 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
897 "\x37\x79\x0c\x11\x6f\x9d\x2b\xdf",
899 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
901 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
902 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
903 "\xb5\x86\x44\x50\x34\xa5\xa3\x86",
905 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
907 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
908 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
909 "\x57\x89\x65\x65\x97\x5f\x91\x97",
911 .plaintext = "Tiger - A Fast New Hash Function, "
912 "by Ross Anderson and Eli Biham, "
913 "proceedings of Fast Software Encryption 3, "
916 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
917 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
918 "\xdd\x68\x15\x1d\x50\x39\x74\xfc",
922 #define TGR160_TEST_VECTORS 6
924 static struct hash_testvec tgr160_tv_template[] = {
928 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
929 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
934 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
935 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
938 .plaintext = "Tiger",
940 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
941 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
944 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
946 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
947 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
950 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
952 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
953 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
956 .plaintext = "Tiger - A Fast New Hash Function, "
957 "by Ross Anderson and Eli Biham, "
958 "proceedings of Fast Software Encryption 3, "
961 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
962 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
967 #define TGR128_TEST_VECTORS 6
969 static struct hash_testvec tgr128_tv_template[] = {
973 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
974 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f",
978 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
979 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf",
981 .plaintext = "Tiger",
983 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
984 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec",
986 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
988 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
989 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e",
991 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
993 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
994 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9",
996 .plaintext = "Tiger - A Fast New Hash Function, "
997 "by Ross Anderson and Eli Biham, "
998 "proceedings of Fast Software Encryption 3, "
1001 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
1002 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24",
1007 * HMAC-MD5 test vectors from RFC2202
1008 * (These need to be fixed to not use strlen).
1010 #define HMAC_MD5_TEST_VECTORS 7
1012 static struct hash_testvec hmac_md5_tv_template[] =
1015 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1017 .plaintext = "Hi There",
1019 .digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c"
1020 "\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
1024 .plaintext = "what do ya want for nothing?",
1026 .digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03"
1027 "\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
1031 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1033 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1034 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1035 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1036 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1038 .digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88"
1039 "\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
1041 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1042 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1043 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1045 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1046 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1047 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1048 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1050 .digest = "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea"
1051 "\x3a\x75\x16\x47\x46\xff\xaa\x79",
1053 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1055 .plaintext = "Test With Truncation",
1057 .digest = "\x56\x46\x1e\xf2\x34\x2e\xdc\x00"
1058 "\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
1060 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1061 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1062 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1063 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1064 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1065 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1068 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1070 .digest = "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f"
1071 "\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
1073 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1074 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1075 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1076 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1077 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1078 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1081 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1084 .digest = "\x6f\x63\x0f\xad\x67\xcd\xa0\xee"
1085 "\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
1090 * HMAC-RIPEMD128 test vectors from RFC2286
1092 #define HMAC_RMD128_TEST_VECTORS 7
1094 static struct hash_testvec hmac_rmd128_tv_template[] = {
1096 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1098 .plaintext = "Hi There",
1100 .digest = "\xfb\xf6\x1f\x94\x92\xaa\x4b\xbf"
1101 "\x81\xc1\x72\xe8\x4e\x07\x34\xdb",
1105 .plaintext = "what do ya want for nothing?",
1107 .digest = "\x87\x5f\x82\x88\x62\xb6\xb3\x34"
1108 "\xb4\x27\xc5\x5f\x9f\x7f\xf0\x9b",
1112 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1114 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1115 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1116 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1117 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1119 .digest = "\x09\xf0\xb2\x84\x6d\x2f\x54\x3d"
1120 "\xa3\x63\xcb\xec\x8d\x62\xa3\x8d",
1122 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1123 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1124 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1126 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1127 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1128 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1129 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1131 .digest = "\xbd\xbb\xd7\xcf\x03\xe4\x4b\x5a"
1132 "\xa6\x0a\xf8\x15\xbe\x4d\x22\x94",
1134 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1136 .plaintext = "Test With Truncation",
1138 .digest = "\xe7\x98\x08\xf2\x4b\x25\xfd\x03"
1139 "\x1c\x15\x5f\x0d\x55\x1d\x9a\x3a",
1141 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1142 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1143 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1144 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1145 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1146 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1149 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1151 .digest = "\xdc\x73\x29\x28\xde\x98\x10\x4a"
1152 "\x1f\x59\xd3\x73\xc1\x50\xac\xbb",
1154 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1155 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1156 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1157 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1158 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1159 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1162 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1165 .digest = "\x5c\x6b\xec\x96\x79\x3e\x16\xd4"
1166 "\x06\x90\xc2\x37\x63\x5f\x30\xc5",
1171 * HMAC-RIPEMD160 test vectors from RFC2286
1173 #define HMAC_RMD160_TEST_VECTORS 7
1175 static struct hash_testvec hmac_rmd160_tv_template[] = {
1177 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1179 .plaintext = "Hi There",
1181 .digest = "\x24\xcb\x4b\xd6\x7d\x20\xfc\x1a\x5d\x2e"
1182 "\xd7\x73\x2d\xcc\x39\x37\x7f\x0a\x56\x68",
1186 .plaintext = "what do ya want for nothing?",
1188 .digest = "\xdd\xa6\xc0\x21\x3a\x48\x5a\x9e\x24\xf4"
1189 "\x74\x20\x64\xa7\xf0\x33\xb4\x3c\x40\x69",
1193 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1195 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1196 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1197 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1198 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1200 .digest = "\xb0\xb1\x05\x36\x0d\xe7\x59\x96\x0a\xb4"
1201 "\xf3\x52\x98\xe1\x16\xe2\x95\xd8\xe7\xc1",
1203 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1204 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1205 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1207 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1208 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1209 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1210 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1212 .digest = "\xd5\xca\x86\x2f\x4d\x21\xd5\xe6\x10\xe1"
1213 "\x8b\x4c\xf1\xbe\xb9\x7a\x43\x65\xec\xf4",
1215 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1217 .plaintext = "Test With Truncation",
1219 .digest = "\x76\x19\x69\x39\x78\xf9\x1d\x90\x53\x9a"
1220 "\xe7\x86\x50\x0f\xf3\xd8\xe0\x51\x8e\x39",
1222 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1223 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1224 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1225 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1226 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1227 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1230 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1232 .digest = "\x64\x66\xca\x07\xac\x5e\xac\x29\xe1\xbd"
1233 "\x52\x3e\x5a\xda\x76\x05\xb7\x91\xfd\x8b",
1235 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1236 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1237 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1238 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1239 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1240 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1243 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1246 .digest = "\x69\xea\x60\x79\x8d\x71\x61\x6c\xce\x5f"
1247 "\xd0\x87\x1e\x23\x75\x4c\xd7\x5d\x5a\x0a",
1252 * HMAC-SHA1 test vectors from RFC2202
1254 #define HMAC_SHA1_TEST_VECTORS 7
1256 static struct hash_testvec hmac_sha1_tv_template[] = {
1258 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1260 .plaintext = "Hi There",
1262 .digest = "\xb6\x17\x31\x86\x55\x05\x72\x64"
1263 "\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1"
1268 .plaintext = "what do ya want for nothing?",
1270 .digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74"
1271 "\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
1275 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1277 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1278 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1279 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1280 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1282 .digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3"
1283 "\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
1285 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1286 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1287 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1289 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1290 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1291 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1292 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1294 .digest = "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84"
1295 "\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
1297 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1299 .plaintext = "Test With Truncation",
1301 .digest = "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2"
1302 "\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
1304 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1305 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1306 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1307 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1308 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1309 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1312 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1314 .digest = "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70"
1315 "\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
1317 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1318 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1319 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1320 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1321 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1322 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1325 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1328 .digest = "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b"
1329 "\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
1335 * SHA224 HMAC test vectors from RFC4231
1337 #define HMAC_SHA224_TEST_VECTORS 4
1339 static struct hash_testvec hmac_sha224_tv_template[] = {
1341 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1342 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1346 .plaintext = "\x48\x69\x20\x54\x68\x65\x72\x65",
1348 .digest = "\x89\x6f\xb1\x12\x8a\xbb\xdf\x19"
1349 "\x68\x32\x10\x7c\xd4\x9d\xf3\x3f"
1350 "\x47\xb4\xb1\x16\x99\x12\xba\x4f"
1355 /* ("what do ya want for nothing?") */
1356 .plaintext = "\x77\x68\x61\x74\x20\x64\x6f\x20"
1357 "\x79\x61\x20\x77\x61\x6e\x74\x20"
1358 "\x66\x6f\x72\x20\x6e\x6f\x74\x68"
1361 .digest = "\xa3\x0e\x01\x09\x8b\xc6\xdb\xbf"
1362 "\x45\x69\x0f\x3a\x7e\x9e\x6d\x0f"
1363 "\x8b\xbe\xa2\xa3\x9e\x61\x48\x00"
1366 .tap = { 7, 7, 7, 7 }
1368 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1369 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1370 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1371 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1372 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1373 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1374 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1375 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1376 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1377 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1378 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1379 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1380 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1381 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1382 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1383 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1386 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
1387 .plaintext = "\x54\x65\x73\x74\x20\x55\x73\x69"
1388 "\x6e\x67\x20\x4c\x61\x72\x67\x65"
1389 "\x72\x20\x54\x68\x61\x6e\x20\x42"
1390 "\x6c\x6f\x63\x6b\x2d\x53\x69\x7a"
1391 "\x65\x20\x4b\x65\x79\x20\x2d\x20"
1392 "\x48\x61\x73\x68\x20\x4b\x65\x79"
1393 "\x20\x46\x69\x72\x73\x74",
1395 .digest = "\x95\xe9\xa0\xdb\x96\x20\x95\xad"
1396 "\xae\xbe\x9b\x2d\x6f\x0d\xbc\xe2"
1397 "\xd4\x99\xf1\x12\xf2\xd2\xb7\x27"
1400 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1401 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1402 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1403 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1404 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1405 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1406 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1407 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1408 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1409 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1410 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1411 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1412 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1413 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1414 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1415 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1418 /* ("This is a test using a larger than block-size key and a")
1419 (" larger than block-size data. The key needs to be")
1420 (" hashed before being used by the HMAC algorithm.") */
1421 .plaintext = "\x54\x68\x69\x73\x20\x69\x73\x20"
1422 "\x61\x20\x74\x65\x73\x74\x20\x75"
1423 "\x73\x69\x6e\x67\x20\x61\x20\x6c"
1424 "\x61\x72\x67\x65\x72\x20\x74\x68"
1425 "\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1426 "\x2d\x73\x69\x7a\x65\x20\x6b\x65"
1427 "\x79\x20\x61\x6e\x64\x20\x61\x20"
1428 "\x6c\x61\x72\x67\x65\x72\x20\x74"
1429 "\x68\x61\x6e\x20\x62\x6c\x6f\x63"
1430 "\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1431 "\x61\x74\x61\x2e\x20\x54\x68\x65"
1432 "\x20\x6b\x65\x79\x20\x6e\x65\x65"
1433 "\x64\x73\x20\x74\x6f\x20\x62\x65"
1434 "\x20\x68\x61\x73\x68\x65\x64\x20"
1435 "\x62\x65\x66\x6f\x72\x65\x20\x62"
1436 "\x65\x69\x6e\x67\x20\x75\x73\x65"
1437 "\x64\x20\x62\x79\x20\x74\x68\x65"
1438 "\x20\x48\x4d\x41\x43\x20\x61\x6c"
1439 "\x67\x6f\x72\x69\x74\x68\x6d\x2e",
1441 .digest = "\x3a\x85\x41\x66\xac\x5d\x9f\x02"
1442 "\x3f\x54\xd5\x17\xd0\xb3\x9d\xbd"
1443 "\x94\x67\x70\xdb\x9c\x2b\x95\xc9"
1449 * HMAC-SHA256 test vectors from
1450 * draft-ietf-ipsec-ciph-sha-256-01.txt
1452 #define HMAC_SHA256_TEST_VECTORS 10
1454 static struct hash_testvec hmac_sha256_tv_template[] = {
1456 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1457 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1458 "\x11\x12\x13\x14\x15\x16\x17\x18"
1459 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1463 .digest = "\xa2\x1b\x1f\x5d\x4c\xf4\xf7\x3a"
1464 "\x4d\xd9\x39\x75\x0f\x7a\x06\x6a"
1465 "\x7f\x98\xcc\x13\x1c\xb1\x6a\x66"
1466 "\x92\x75\x90\x21\xcf\xab\x81\x81",
1468 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1469 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1470 "\x11\x12\x13\x14\x15\x16\x17\x18"
1471 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1473 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1475 .digest = "\x10\x4f\xdc\x12\x57\x32\x8f\x08"
1476 "\x18\x4b\xa7\x31\x31\xc5\x3c\xae"
1477 "\xe6\x98\xe3\x61\x19\x42\x11\x49"
1478 "\xea\x8c\x71\x24\x56\x69\x7d\x30",
1480 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1481 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1482 "\x11\x12\x13\x14\x15\x16\x17\x18"
1483 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1485 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1486 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1488 .digest = "\x47\x03\x05\xfc\x7e\x40\xfe\x34"
1489 "\xd3\xee\xb3\xe7\x73\xd9\x5a\xab"
1490 "\x73\xac\xf0\xfd\x06\x04\x47\xa5"
1491 "\xeb\x45\x95\xbf\x33\xa9\xd1\xa3",
1493 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1494 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1495 "\x0b\x0b\x0b\x0b\x0b\x0b",
1497 .plaintext = "Hi There",
1499 .digest = "\x19\x8a\x60\x7e\xb4\x4b\xfb\xc6"
1500 "\x99\x03\xa0\xf1\xcf\x2b\xbd\xc5"
1501 "\xba\x0a\xa3\xf3\xd9\xae\x3c\x1c"
1502 "\x7a\x3b\x16\x96\xa0\xb6\x8c\xf7",
1506 .plaintext = "what do ya want for nothing?",
1508 .digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e"
1509 "\x6a\x04\x24\x26\x08\x95\x75\xc7"
1510 "\x5a\x00\x3f\x08\x9d\x27\x39\x83"
1511 "\x9d\xec\x58\xb9\x64\xec\x38\x43",
1515 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1516 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1517 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1519 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1520 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1521 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1522 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1524 .digest = "\xcd\xcb\x12\x20\xd1\xec\xcc\xea"
1525 "\x91\xe5\x3a\xba\x30\x92\xf9\x62"
1526 "\xe5\x49\xfe\x6c\xe9\xed\x7f\xdc"
1527 "\x43\x19\x1f\xbd\xe4\x5c\x30\xb0",
1529 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1530 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1531 "\x11\x12\x13\x14\x15\x16\x17\x18"
1532 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
1533 "\x21\x22\x23\x24\x25",
1535 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1536 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1537 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1538 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1540 .digest = "\xd4\x63\x3c\x17\xf6\xfb\x8d\x74"
1541 "\x4c\x66\xde\xe0\xf8\xf0\x74\x55"
1542 "\x6e\xc4\xaf\x55\xef\x07\x99\x85"
1543 "\x41\x46\x8e\xb4\x9b\xd2\xe9\x17",
1545 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1546 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1547 "\x0c\x0c\x0c\x0c\x0c\x0c",
1549 .plaintext = "Test With Truncation",
1551 .digest = "\x75\x46\xaf\x01\x84\x1f\xc0\x9b"
1552 "\x1a\xb9\xc3\x74\x9a\x5f\x1c\x17"
1553 "\xd4\xf5\x89\x66\x8a\x58\x7b\x27"
1554 "\x00\xa9\xc9\x7c\x11\x93\xcf\x42",
1556 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1557 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1558 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1559 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1560 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1561 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1564 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1566 .digest = "\x69\x53\x02\x5e\xd9\x6f\x0c\x09"
1567 "\xf8\x0a\x96\xf7\x8e\x65\x38\xdb"
1568 "\xe2\xe7\xb8\x20\xe3\xdd\x97\x0e"
1569 "\x7d\xdd\x39\x09\x1b\x32\x35\x2f",
1571 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1572 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1573 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1574 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1575 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1576 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1579 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1580 "One Block-Size Data",
1582 .digest = "\x63\x55\xac\x22\xe8\x90\xd0\xa3"
1583 "\xc8\x48\x1a\x5c\xa4\x82\x5b\xc8"
1584 "\x84\xd3\xe7\xa1\xff\x98\xa2\xfc"
1585 "\x2a\xc7\xd8\xe0\x64\xc3\xb2\xe6",
1589 #define XCBC_AES_TEST_VECTORS 6
1591 static struct hash_testvec aes_xcbc128_tv_template[] = {
1593 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1594 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1595 .plaintext = zeroed_string,
1596 .digest = "\x75\xf0\x25\x1d\x52\x8a\xc0\x1c"
1597 "\x45\x73\xdf\xd5\x84\xd7\x9f\x29",
1601 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1602 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1603 .plaintext = "\x00\x01\x02",
1604 .digest = "\x5b\x37\x65\x80\xae\x2f\x19\xaf"
1605 "\xe7\x21\x9c\xee\xf1\x72\x75\x6f",
1609 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1610 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1611 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1612 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1613 .digest = "\xd2\xa2\x46\xfa\x34\x9b\x68\xa7"
1614 "\x99\x98\xa4\x39\x4f\xf7\xa2\x63",
1618 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1619 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1620 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1621 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1623 .digest = "\x47\xf5\x1b\x45\x64\x96\x62\x15"
1624 "\xb8\x98\x5c\x63\x05\x5e\xd3\x08",
1630 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1631 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1632 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1633 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1634 "\x10\x11\x12\x13\x14\x15\x16\x17"
1635 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
1636 .digest = "\xf5\x4f\x0e\xc8\xd2\xb9\xf3\xd3"
1637 "\x68\x07\x73\x4b\xd5\x28\x3f\xd4",
1641 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1642 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1643 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1644 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1645 "\x10\x11\x12\x13\x14\x15\x16\x17"
1646 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
1648 .digest = "\xbe\xcb\xb3\xbc\xcd\xb5\x18\xa3"
1649 "\x06\x77\xd5\x48\x1f\xb6\xb4\xd8",
1658 * SHA384 HMAC test vectors from RFC4231
1661 #define HMAC_SHA384_TEST_VECTORS 4
1663 static struct hash_testvec hmac_sha384_tv_template[] = {
1665 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1666 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1669 .plaintext = "Hi There",
1671 .digest = "\xaf\xd0\x39\x44\xd8\x48\x95\x62"
1672 "\x6b\x08\x25\xf4\xab\x46\x90\x7f"
1673 "\x15\xf9\xda\xdb\xe4\x10\x1e\xc6"
1674 "\x82\xaa\x03\x4c\x7c\xeb\xc5\x9c"
1675 "\xfa\xea\x9e\xa9\x07\x6e\xde\x7f"
1676 "\x4a\xf1\x52\xe8\xb2\xfa\x9c\xb6",
1680 .plaintext = "what do ya want for nothing?",
1682 .digest = "\xaf\x45\xd2\xe3\x76\x48\x40\x31"
1683 "\x61\x7f\x78\xd2\xb5\x8a\x6b\x1b"
1684 "\x9c\x7e\xf4\x64\xf5\xa0\x1b\x47"
1685 "\xe4\x2e\xc3\x73\x63\x22\x44\x5e"
1686 "\x8e\x22\x40\xca\x5e\x69\xe2\xc7"
1687 "\x8b\x32\x39\xec\xfa\xb2\x16\x49",
1689 .tap = { 7, 7, 7, 7 }
1691 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1692 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1693 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1694 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1695 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1696 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1697 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1698 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1699 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1700 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1701 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1702 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1703 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1704 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1705 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1706 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1709 .plaintext = "Test Using Larger Than Block-Siz"
1710 "e Key - Hash Key First",
1712 .digest = "\x4e\xce\x08\x44\x85\x81\x3e\x90"
1713 "\x88\xd2\xc6\x3a\x04\x1b\xc5\xb4"
1714 "\x4f\x9e\xf1\x01\x2a\x2b\x58\x8f"
1715 "\x3c\xd1\x1f\x05\x03\x3a\xc4\xc6"
1716 "\x0c\x2e\xf6\xab\x40\x30\xfe\x82"
1717 "\x96\x24\x8d\xf1\x63\xf4\x49\x52",
1719 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1720 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1721 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1722 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1723 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1724 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1725 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1726 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1727 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1728 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1729 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1730 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1731 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1732 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1733 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1734 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1737 .plaintext = "This is a test u"
1748 .digest = "\x66\x17\x17\x8e\x94\x1f\x02\x0d"
1749 "\x35\x1e\x2f\x25\x4e\x8f\xd3\x2c"
1750 "\x60\x24\x20\xfe\xb0\xb8\xfb\x9a"
1751 "\xdc\xce\xbb\x82\x46\x1e\x99\xc5"
1752 "\xa6\x78\xcc\x31\xe7\x99\x17\x6d"
1753 "\x38\x60\xe6\x11\x0c\x46\x52\x3e",
1758 * SHA512 HMAC test vectors from RFC4231
1761 #define HMAC_SHA512_TEST_VECTORS 4
1763 static struct hash_testvec hmac_sha512_tv_template[] = {
1765 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1766 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1769 .plaintext = "Hi There",
1771 .digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d"
1772 "\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0"
1773 "\x23\x79\xf4\xe2\xce\x4e\xc2\x78"
1774 "\x7a\xd0\xb3\x05\x45\xe1\x7c\xde"
1775 "\xda\xa8\x33\xb7\xd6\xb8\xa7\x02"
1776 "\x03\x8b\x27\x4e\xae\xa3\xf4\xe4"
1777 "\xbe\x9d\x91\x4e\xeb\x61\xf1\x70"
1778 "\x2e\x69\x6c\x20\x3a\x12\x68\x54",
1782 .plaintext = "what do ya want for nothing?",
1784 .digest = "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2"
1785 "\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3"
1786 "\x87\xbd\x64\x22\x2e\x83\x1f\xd6"
1787 "\x10\x27\x0c\xd7\xea\x25\x05\x54"
1788 "\x97\x58\xbf\x75\xc0\x5a\x99\x4a"
1789 "\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd"
1790 "\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b"
1791 "\x63\x6e\x07\x0a\x38\xbc\xe7\x37",
1793 .tap = { 7, 7, 7, 7 }
1795 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1796 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1797 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1798 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1799 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1800 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1801 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1802 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1803 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1804 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1805 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1806 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1807 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1808 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1809 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1810 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1813 .plaintext = "Test Using Large"
1818 .digest = "\x80\xb2\x42\x63\xc7\xc1\xa3\xeb"
1819 "\xb7\x14\x93\xc1\xdd\x7b\xe8\xb4"
1820 "\x9b\x46\xd1\xf4\x1b\x4a\xee\xc1"
1821 "\x12\x1b\x01\x37\x83\xf8\xf3\x52"
1822 "\x6b\x56\xd0\x37\xe0\x5f\x25\x98"
1823 "\xbd\x0f\xd2\x21\x5d\x6a\x1e\x52"
1824 "\x95\xe6\x4f\x73\xf6\x3f\x0a\xec"
1825 "\x8b\x91\x5a\x98\x5d\x78\x65\x98",
1827 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1828 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1829 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1830 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1831 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1832 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1833 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1834 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1835 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1836 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1837 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1838 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1839 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1840 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1841 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1842 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1857 .digest = "\xe3\x7b\x6a\x77\x5d\xc8\x7d\xba"
1858 "\xa4\xdf\xa9\xf9\x6e\x5e\x3f\xfd"
1859 "\xde\xbd\x71\xf8\x86\x72\x89\x86"
1860 "\x5d\xf5\xa3\x2d\x20\xcd\xc9\x44"
1861 "\xb6\x02\x2c\xac\x3c\x49\x82\xb1"
1862 "\x0d\x5e\xeb\x55\xc3\xe4\xde\x15"
1863 "\x13\x46\x76\xfb\x6d\xe0\x44\x60"
1864 "\x65\xc9\x74\x40\xfa\x8c\x6a\x58",
1871 #define DES_ENC_TEST_VECTORS 10
1872 #define DES_DEC_TEST_VECTORS 4
1873 #define DES_CBC_ENC_TEST_VECTORS 5
1874 #define DES_CBC_DEC_TEST_VECTORS 4
1875 #define DES3_EDE_ENC_TEST_VECTORS 3
1876 #define DES3_EDE_DEC_TEST_VECTORS 3
1877 #define DES3_EDE_CBC_ENC_TEST_VECTORS 1
1878 #define DES3_EDE_CBC_DEC_TEST_VECTORS 1
1880 static struct cipher_testvec des_enc_tv_template[] = {
1881 { /* From Applied Cryptography */
1882 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1884 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1886 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1888 }, { /* Same key, different plaintext block */
1889 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1891 .input = "\x22\x33\x44\x55\x66\x77\x88\x99",
1893 .result = "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1895 }, { /* Sbox test from NBS */
1896 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1898 .input = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1900 .result = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1902 }, { /* Three blocks */
1903 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1905 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1906 "\x22\x33\x44\x55\x66\x77\x88\x99"
1907 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1909 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1910 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1911 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1916 .key = "\x01\x01\x01\x01\x01\x01\x01\x01",
1918 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1920 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1922 }, { /* Two blocks -- for testing encryption across pages */
1923 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1925 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1926 "\x22\x33\x44\x55\x66\x77\x88\x99",
1928 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1929 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1933 }, { /* Four blocks -- for testing encryption with chunking */
1934 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1936 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1937 "\x22\x33\x44\x55\x66\x77\x88\x99"
1938 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef"
1939 "\x22\x33\x44\x55\x66\x77\x88\x99",
1941 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1942 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1943 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90"
1944 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1947 .tap = { 14, 10, 8 }
1949 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1951 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1952 "\x22\x33\x44\x55\x66\x77\x88\x99"
1953 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1955 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1956 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1957 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1960 .tap = { 2, 1, 3, 18 }
1962 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1964 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1965 "\x22\x33\x44\x55\x66\x77\x88\x99",
1967 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1968 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1971 .tap = { 2, 2, 2, 2, 8 }
1973 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1975 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1977 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1980 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
1984 static struct cipher_testvec des_dec_tv_template[] = {
1985 { /* From Applied Cryptography */
1986 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1988 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1990 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1992 }, { /* Sbox test from NBS */
1993 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1995 .input = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1997 .result = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1999 }, { /* Two blocks, for chunking test */
2000 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2002 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2003 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2005 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2006 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2011 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2013 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2014 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2016 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2017 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2024 static struct cipher_testvec des_cbc_enc_tv_template[] = {
2025 { /* From OpenSSL */
2026 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2028 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2029 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2030 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2031 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2033 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2034 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2035 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2037 }, { /* FIPS Pub 81 */
2038 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2040 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2041 .input = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2043 .result = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2046 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2048 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2049 .input = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2051 .result = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2054 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2056 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2057 .input = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2059 .result = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2061 }, { /* Copy of openssl vector for chunk testing */
2063 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2065 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2066 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2067 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2068 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2070 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2071 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2072 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2079 static struct cipher_testvec des_cbc_dec_tv_template[] = {
2081 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2083 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2084 .input = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2086 .result = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2089 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2091 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2092 .input = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2094 .result = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2097 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2099 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2100 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2102 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2104 }, { /* Copy of above, for chunk testing */
2105 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2107 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2108 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2110 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2117 static struct cipher_testvec des3_ede_enc_tv_template[] = {
2118 { /* These are from openssl */
2119 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2120 "\x55\x55\x55\x55\x55\x55\x55\x55"
2121 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2123 .input = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2125 .result = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2128 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2129 "\x86\x02\x87\x66\x59\x08\x21\x98"
2130 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2132 .input = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2134 .result = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2137 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2138 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2139 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2141 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2143 .result = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2148 static struct cipher_testvec des3_ede_dec_tv_template[] = {
2149 { /* These are from openssl */
2150 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2151 "\x55\x55\x55\x55\x55\x55\x55\x55"
2152 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2154 .input = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2156 .result = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2159 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2160 "\x86\x02\x87\x66\x59\x08\x21\x98"
2161 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2163 .input = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2165 .result = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2168 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2169 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2170 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2172 .input = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2174 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2179 static struct cipher_testvec des3_ede_cbc_enc_tv_template[] = {
2180 { /* Generated from openssl */
2181 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2182 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2183 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2185 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2186 .input = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2187 "\x53\x20\x63\x65\x65\x72\x73\x74"
2188 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2189 "\x20\x79\x65\x53\x72\x63\x74\x65"
2190 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2191 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2192 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2193 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2194 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2195 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2196 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2197 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2198 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2199 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2200 "\x63\x65\x65\x72\x73\x74\x54\x20"
2201 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2203 .result = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2204 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2205 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2206 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2207 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2208 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2209 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2210 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2211 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2212 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2213 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2214 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2215 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2216 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2217 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2218 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2223 static struct cipher_testvec des3_ede_cbc_dec_tv_template[] = {
2224 { /* Generated from openssl */
2225 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2226 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2227 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2229 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2230 .input = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2231 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2232 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2233 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2234 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2235 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2236 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2237 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2238 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2239 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2240 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2241 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2242 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2243 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2244 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2245 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2247 .result = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2248 "\x53\x20\x63\x65\x65\x72\x73\x74"
2249 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2250 "\x20\x79\x65\x53\x72\x63\x74\x65"
2251 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2252 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2253 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2254 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2255 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2256 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2257 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2258 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2259 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2260 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2261 "\x63\x65\x65\x72\x73\x74\x54\x20"
2262 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2268 * Blowfish test vectors.
2270 #define BF_ENC_TEST_VECTORS 6
2271 #define BF_DEC_TEST_VECTORS 6
2272 #define BF_CBC_ENC_TEST_VECTORS 1
2273 #define BF_CBC_DEC_TEST_VECTORS 1
2275 static struct cipher_testvec bf_enc_tv_template[] = {
2276 { /* DES test vectors from OpenSSL */
2277 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2279 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2281 .result = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2284 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2286 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2288 .result = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2291 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2293 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2295 .result = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2297 }, { /* Vary the keylength... */
2298 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2299 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2301 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2303 .result = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2306 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2307 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2308 "\x00\x11\x22\x33\x44",
2310 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2312 .result = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2314 }, { /* Generated with bf488 */
2315 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2316 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2317 "\x00\x11\x22\x33\x44\x55\x66\x77"
2318 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2319 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2320 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2321 "\xff\xff\xff\xff\xff\xff\xff\xff",
2323 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2325 .result = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2330 static struct cipher_testvec bf_dec_tv_template[] = {
2331 { /* DES test vectors from OpenSSL */
2332 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2334 .input = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2336 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2339 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2341 .input = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2343 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2346 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2348 .input = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2350 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2352 }, { /* Vary the keylength... */
2353 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2354 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2356 .input = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2358 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2361 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2362 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2363 "\x00\x11\x22\x33\x44",
2365 .input = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2367 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2369 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
2370 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2371 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2372 "\x00\x11\x22\x33\x44\x55\x66\x77"
2373 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2374 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2375 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2376 "\xff\xff\xff\xff\xff\xff\xff\xff",
2378 .input = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2380 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2385 static struct cipher_testvec bf_cbc_enc_tv_template[] = {
2386 { /* From OpenSSL */
2387 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2388 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2390 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2391 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2392 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2393 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2394 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2396 .result = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2397 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2398 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2399 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2404 static struct cipher_testvec bf_cbc_dec_tv_template[] = {
2405 { /* From OpenSSL */
2406 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2407 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2409 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2410 .input = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2411 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2412 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2413 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2415 .result = "\x37\x36\x35\x34\x33\x32\x31\x20"
2416 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2417 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2418 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2424 * Twofish test vectors.
2426 #define TF_ENC_TEST_VECTORS 3
2427 #define TF_DEC_TEST_VECTORS 3
2428 #define TF_CBC_ENC_TEST_VECTORS 4
2429 #define TF_CBC_DEC_TEST_VECTORS 4
2431 static struct cipher_testvec tf_enc_tv_template[] = {
2433 .key = zeroed_string,
2435 .input = zeroed_string,
2437 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2438 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2441 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2442 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2443 "\x00\x11\x22\x33\x44\x55\x66\x77",
2445 .input = zeroed_string,
2447 .result = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2448 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2451 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2452 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2453 "\x00\x11\x22\x33\x44\x55\x66\x77"
2454 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2456 .input = zeroed_string,
2458 .result = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2459 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2464 static struct cipher_testvec tf_dec_tv_template[] = {
2466 .key = zeroed_string,
2468 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2469 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2471 .result = zeroed_string,
2474 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2475 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2476 "\x00\x11\x22\x33\x44\x55\x66\x77",
2478 .input = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2479 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2481 .result = zeroed_string,
2484 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2485 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2486 "\x00\x11\x22\x33\x44\x55\x66\x77"
2487 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2489 .input = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2490 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2492 .result = zeroed_string,
2497 static struct cipher_testvec tf_cbc_enc_tv_template[] = {
2498 { /* Generated with Nettle */
2499 .key = zeroed_string,
2501 .iv = zeroed_string,
2502 .input = zeroed_string,
2504 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2505 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2508 .key = zeroed_string,
2510 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2511 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2512 .input = zeroed_string,
2514 .result = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2515 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2518 .key = zeroed_string,
2520 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2521 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2522 .input = zeroed_string,
2524 .result = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2525 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2528 .key = zeroed_string,
2530 .iv = zeroed_string,
2531 .input = zeroed_string,
2533 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2534 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2535 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2536 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2537 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2538 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2543 static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2544 { /* Reverse of the first four above */
2545 .key = zeroed_string,
2547 .iv = zeroed_string,
2548 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2549 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2551 .result = zeroed_string,
2554 .key = zeroed_string,
2556 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2557 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2558 .input = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2559 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2561 .result = zeroed_string,
2564 .key = zeroed_string,
2566 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2567 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2568 .input = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2569 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2571 .result = zeroed_string,
2574 .key = zeroed_string,
2576 .iv = zeroed_string,
2577 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2578 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2579 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2580 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2581 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2582 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2584 .result = zeroed_string,
2590 * Serpent test vectors. These are backwards because Serpent writes
2591 * octet sequences in right-to-left mode.
2593 #define SERPENT_ENC_TEST_VECTORS 4
2594 #define SERPENT_DEC_TEST_VECTORS 4
2596 #define TNEPRES_ENC_TEST_VECTORS 4
2597 #define TNEPRES_DEC_TEST_VECTORS 4
2599 static struct cipher_testvec serpent_enc_tv_template[] = {
2601 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2602 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2604 .result = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2605 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2608 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2609 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2611 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2612 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2614 .result = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2615 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2618 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2619 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2620 "\x10\x11\x12\x13\x14\x15\x16\x17"
2621 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2623 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2624 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2626 .result = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2627 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2630 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2632 .input = zeroed_string,
2634 .result = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2635 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2640 static struct cipher_testvec tnepres_enc_tv_template[] = {
2641 { /* KeySize=128, PT=0, I=1 */
2642 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2643 "\x00\x00\x00\x00\x00\x00\x00\x00",
2644 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2645 "\x00\x00\x00\x00\x00\x00\x00\x00",
2648 .result = "\x49\xaf\xbf\xad\x9d\x5a\x34\x05"
2649 "\x2c\xd8\xff\xa5\x98\x6b\xd2\xdd",
2651 }, { /* KeySize=192, PT=0, I=1 */
2652 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2653 "\x00\x00\x00\x00\x00\x00\x00\x00"
2654 "\x00\x00\x00\x00\x00\x00\x00\x00",
2656 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2657 "\x00\x00\x00\x00\x00\x00\x00\x00",
2659 .result = "\xe7\x8e\x54\x02\xc7\x19\x55\x68"
2660 "\xac\x36\x78\xf7\xa3\xf6\x0c\x66",
2662 }, { /* KeySize=256, PT=0, I=1 */
2663 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2664 "\x00\x00\x00\x00\x00\x00\x00\x00"
2665 "\x00\x00\x00\x00\x00\x00\x00\x00"
2666 "\x00\x00\x00\x00\x00\x00\x00\x00",
2668 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2669 "\x00\x00\x00\x00\x00\x00\x00\x00",
2671 .result = "\xab\xed\x96\xe7\x66\xbf\x28\xcb"
2672 "\xc0\xeb\xd2\x1a\x82\xef\x08\x19",
2674 }, { /* KeySize=256, I=257 */
2675 .key = "\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18"
2676 "\x17\x16\x15\x14\x13\x12\x11\x10"
2677 "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2678 "\x07\x06\x05\x04\x03\x02\x01\x00",
2680 .input = "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2681 "\x07\x06\x05\x04\x03\x02\x01\x00",
2683 .result = "\x5c\xe7\x1c\x70\xd2\x88\x2e\x5b"
2684 "\xb8\x32\xe4\x33\xf8\x9f\x26\xde",
2690 static struct cipher_testvec serpent_dec_tv_template[] = {
2692 .input = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2693 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2695 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2696 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2699 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2700 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2702 .input = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2703 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2705 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2706 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2709 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2710 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2711 "\x10\x11\x12\x13\x14\x15\x16\x17"
2712 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2714 .input = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2715 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2717 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2718 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2721 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2723 .input = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2724 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2726 .result = zeroed_string,
2731 static struct cipher_testvec tnepres_dec_tv_template[] = {
2733 .input = "\x41\xcc\x6b\x31\x59\x31\x45\x97"
2734 "\x6d\x6f\xbb\x38\x4b\x37\x21\x28",
2736 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2737 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2740 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2741 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2743 .input = "\xea\xf4\xd7\xfc\xd8\x01\x34\x47"
2744 "\x81\x45\x0b\xfa\x0c\xd6\xad\x6e",
2746 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2747 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2750 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2751 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2752 "\x10\x11\x12\x13\x14\x15\x16\x17"
2753 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2755 .input = "\x64\xa9\x1a\x37\xed\x9f\xe7\x49"
2756 "\xa8\x4e\x76\xd6\xf5\x0d\x78\xee",
2758 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2759 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2761 }, { /* KeySize=128, I=121 */
2762 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2764 .input = "\x3d\xda\xbf\xc0\x06\xda\xab\x06"
2765 "\x46\x2a\xf4\xef\x81\x54\x4e\x26",
2767 .result = zeroed_string,
2773 /* Cast6 test vectors from RFC 2612 */
2774 #define CAST6_ENC_TEST_VECTORS 3
2775 #define CAST6_DEC_TEST_VECTORS 3
2777 static struct cipher_testvec cast6_enc_tv_template[] = {
2779 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2780 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2782 .input = zeroed_string,
2784 .result = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2785 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2788 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2789 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2790 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2792 .input = zeroed_string,
2794 .result = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2795 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2798 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2799 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2800 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2801 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2803 .input = zeroed_string,
2805 .result = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2806 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2811 static struct cipher_testvec cast6_dec_tv_template[] = {
2813 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2814 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2816 .input = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2817 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2819 .result = zeroed_string,
2822 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2823 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2824 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2826 .input = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2827 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2829 .result = zeroed_string,
2832 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2833 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2834 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2835 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2837 .input = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2838 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2840 .result = zeroed_string,
2849 #define AES_ENC_TEST_VECTORS 3
2850 #define AES_DEC_TEST_VECTORS 3
2851 #define AES_CBC_ENC_TEST_VECTORS 4
2852 #define AES_CBC_DEC_TEST_VECTORS 4
2853 #define AES_LRW_ENC_TEST_VECTORS 8
2854 #define AES_LRW_DEC_TEST_VECTORS 8
2855 #define AES_XTS_ENC_TEST_VECTORS 4
2856 #define AES_XTS_DEC_TEST_VECTORS 4
2857 #define AES_CTR_ENC_TEST_VECTORS 3
2858 #define AES_CTR_DEC_TEST_VECTORS 3
2859 #define AES_CTR_3686_ENC_TEST_VECTORS 7
2860 #define AES_CTR_3686_DEC_TEST_VECTORS 6
2861 #define AES_GCM_ENC_TEST_VECTORS 9
2862 #define AES_GCM_DEC_TEST_VECTORS 8
2863 #define AES_CCM_ENC_TEST_VECTORS 7
2864 #define AES_CCM_DEC_TEST_VECTORS 7
2865 #define AES_CCM_4309_ENC_TEST_VECTORS 7
2866 #define AES_CCM_4309_DEC_TEST_VECTORS 10
2868 static struct cipher_testvec aes_enc_tv_template[] = {
2869 { /* From FIPS-197 */
2870 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2871 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2873 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2874 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2876 .result = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2877 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2880 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2881 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2882 "\x10\x11\x12\x13\x14\x15\x16\x17",
2884 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2885 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2887 .result = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2888 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2891 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2892 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2893 "\x10\x11\x12\x13\x14\x15\x16\x17"
2894 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2896 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2897 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2899 .result = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2900 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2905 static struct cipher_testvec aes_dec_tv_template[] = {
2906 { /* From FIPS-197 */
2907 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2908 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2910 .input = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2911 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2913 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2914 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2917 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2918 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2919 "\x10\x11\x12\x13\x14\x15\x16\x17",
2921 .input = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2922 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2924 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2925 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2928 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2929 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2930 "\x10\x11\x12\x13\x14\x15\x16\x17"
2931 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2933 .input = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2934 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2936 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2937 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2942 static struct cipher_testvec aes_cbc_enc_tv_template[] = {
2943 { /* From RFC 3602 */
2944 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
2945 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
2947 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
2948 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
2949 .input = "Single block msg",
2951 .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
2952 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
2955 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
2956 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
2958 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
2959 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
2960 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2961 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2962 "\x10\x11\x12\x13\x14\x15\x16\x17"
2963 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2965 .result = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
2966 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
2967 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
2968 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
2970 }, { /* From NIST SP800-38A */
2971 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
2972 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
2973 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
2975 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
2976 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2977 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
2978 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
2979 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
2980 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
2981 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
2982 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
2983 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
2984 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
2986 .result = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
2987 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
2988 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
2989 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
2990 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
2991 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
2992 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
2993 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
2996 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
2997 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
2998 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
2999 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
3001 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3002 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3003 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3004 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3005 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3006 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3007 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3008 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3009 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3010 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3012 .result = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
3013 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
3014 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
3015 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
3016 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
3017 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
3018 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
3019 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
3024 static struct cipher_testvec aes_cbc_dec_tv_template[] = {
3025 { /* From RFC 3602 */
3026 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
3027 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
3029 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
3030 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
3031 .input = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
3032 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
3034 .result = "Single block msg",
3037 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
3038 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
3040 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
3041 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
3042 .input = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
3043 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
3044 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
3045 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
3047 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
3048 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3049 "\x10\x11\x12\x13\x14\x15\x16\x17"
3050 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
3052 }, { /* From NIST SP800-38A */
3053 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
3054 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
3055 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
3057 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3058 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3059 .input = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
3060 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
3061 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
3062 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
3063 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
3064 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
3065 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
3066 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
3068 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3069 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3070 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3071 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3072 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3073 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3074 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3075 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3078 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
3079 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
3080 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
3081 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
3083 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3084 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3085 .input = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
3086 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
3087 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
3088 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
3089 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
3090 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
3091 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
3092 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
3094 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3095 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3096 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3097 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3098 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3099 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3100 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3101 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3106 static struct cipher_testvec aes_lrw_enc_tv_template[] = {
3107 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
3108 { /* LRW-32-AES 1 */
3109 .key = "\x45\x62\xac\x25\xf8\x28\x17\x6d"
3110 "\x4c\x26\x84\x14\xb5\x68\x01\x85"
3111 "\x25\x8e\x2a\x05\xe7\x3e\x9d\x03"
3112 "\xee\x5a\x83\x0c\xcc\x09\x4c\x87",
3114 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3115 "\x00\x00\x00\x00\x00\x00\x00\x01",
3116 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3117 "\x38\x39\x41\x42\x43\x44\x45\x46",
3119 .result = "\xf1\xb2\x73\xcd\x65\xa3\xdf\x5f"
3120 "\xe9\x5d\x48\x92\x54\x63\x4e\xb8",
3122 }, { /* LRW-32-AES 2 */
3123 .key = "\x59\x70\x47\x14\xf5\x57\x47\x8c"
3124 "\xd7\x79\xe8\x0f\x54\x88\x79\x44"
3125 "\x0d\x48\xf0\xb7\xb1\x5a\x53\xea"
3126 "\x1c\xaa\x6b\x29\xc2\xca\xfb\xaf",
3128 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3129 "\x00\x00\x00\x00\x00\x00\x00\x02",
3130 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3131 "\x38\x39\x41\x42\x43\x44\x45\x46",
3133 .result = "\x00\xc8\x2b\xae\x95\xbb\xcd\xe5"
3134 "\x27\x4f\x07\x69\xb2\x60\xe1\x36",
3136 }, { /* LRW-32-AES 3 */
3137 .key = "\xd8\x2a\x91\x34\xb2\x6a\x56\x50"
3138 "\x30\xfe\x69\xe2\x37\x7f\x98\x47"
3139 "\xcd\xf9\x0b\x16\x0c\x64\x8f\xb6"
3140 "\xb0\x0d\x0d\x1b\xae\x85\x87\x1f",
3142 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3143 "\x00\x00\x00\x02\x00\x00\x00\x00",
3144 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3145 "\x38\x39\x41\x42\x43\x44\x45\x46",
3147 .result = "\x76\x32\x21\x83\xed\x8f\xf1\x82"
3148 "\xf9\x59\x62\x03\x69\x0e\x5e\x01",
3150 }, { /* LRW-32-AES 4 */
3151 .key = "\x0f\x6a\xef\xf8\xd3\xd2\xbb\x15"
3152 "\x25\x83\xf7\x3c\x1f\x01\x28\x74"
3153 "\xca\xc6\xbc\x35\x4d\x4a\x65\x54"
3154 "\x90\xae\x61\xcf\x7b\xae\xbd\xcc"
3155 "\xad\xe4\x94\xc5\x4a\x29\xae\x70",
3157 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3158 "\x00\x00\x00\x00\x00\x00\x00\x01",
3159 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3160 "\x38\x39\x41\x42\x43\x44\x45\x46",
3162 .result = "\x9c\x0f\x15\x2f\x55\xa2\xd8\xf0"
3163 "\xd6\x7b\x8f\x9e\x28\x22\xbc\x41",
3165 }, { /* LRW-32-AES 5 */
3166 .key = "\x8a\xd4\xee\x10\x2f\xbd\x81\xff"
3167 "\xf8\x86\xce\xac\x93\xc5\xad\xc6"
3168 "\xa0\x19\x07\xc0\x9d\xf7\xbb\xdd"
3169 "\x52\x13\xb2\xb7\xf0\xff\x11\xd8"
3170 "\xd6\x08\xd0\xcd\x2e\xb1\x17\x6f",
3172 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3173 "\x00\x00\x00\x02\x00\x00\x00\x00",
3174 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3175 "\x38\x39\x41\x42\x43\x44\x45\x46",
3177 .result = "\xd4\x27\x6a\x7f\x14\x91\x3d\x65"
3178 "\xc8\x60\x48\x02\x87\xe3\x34\x06",
3180 }, { /* LRW-32-AES 6 */
3181 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3182 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3183 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3184 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3185 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3186 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3188 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"