packages: clean up the package folder
[openwrt/staging/yousong.git] / package / kernel / lantiq / ltq-deu / src / ifxmips_testmgr.h
1 /*
2 * Algorithm testing framework and tests.
3 *
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>
8 *
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)
12 * any later version.
13 *
14 */
15 #ifndef _IFXMIPS_CRYPTO_TESTMGR_H
16 #define _IFXMIPS_CRYPTO_TESTMGR_H
17
18 #include <linux/netlink.h>
19 #include <linux/zlib.h>
20
21 #include <crypto/compress.h>
22
23 #define MAX_DIGEST_SIZE 64
24 #define MAX_TAP 8
25
26 #define MAX_KEYLEN 56
27 #define MAX_IVLEN 32
28
29 struct hash_testvec {
30 /* only used with keyed hash algorithms */
31 char *key;
32 char *plaintext;
33 char *digest;
34 unsigned char tap[MAX_TAP];
35 unsigned char psize;
36 unsigned char np;
37 unsigned char ksize;
38 };
39
40 struct cipher_testvec {
41 char *key;
42 char *iv;
43 char *input;
44 char *result;
45 unsigned short tap[MAX_TAP];
46 int np;
47 unsigned char fail;
48 unsigned char wk; /* weak key flag */
49 unsigned char klen;
50 unsigned short ilen;
51 unsigned short rlen;
52 };
53
54 struct aead_testvec {
55 char *key;
56 char *iv;
57 char *input;
58 char *assoc;
59 char *result;
60 unsigned char tap[MAX_TAP];
61 unsigned char atap[MAX_TAP];
62 int np;
63 int anp;
64 unsigned char fail;
65 unsigned char novrfy; /* ccm dec verification failure expected */
66 unsigned char wk; /* weak key flag */
67 unsigned char klen;
68 unsigned short ilen;
69 unsigned short alen;
70 unsigned short rlen;
71 };
72
73 struct cprng_testvec {
74 char *key;
75 char *dt;
76 char *v;
77 char *result;
78 unsigned char klen;
79 unsigned short dtlen;
80 unsigned short vlen;
81 unsigned short rlen;
82 unsigned short loops;
83 };
84
85 static char zeroed_string[48];
86
87 /*
88 * MD4 test vectors from RFC1320
89 */
90 #define MD4_TEST_VECTORS 7
91
92 static struct hash_testvec md4_tv_template [] = {
93 {
94 .plaintext = "",
95 .digest = "\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31"
96 "\xb7\x3c\x59\xd7\xe0\xc0\x89\xc0",
97 }, {
98 .plaintext = "a",
99 .psize = 1,
100 .digest = "\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46"
101 "\x24\x5e\x05\xfb\xdb\xd6\xfb\x24",
102 }, {
103 .plaintext = "abc",
104 .psize = 3,
105 .digest = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52"
106 "\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d",
107 }, {
108 .plaintext = "message digest",
109 .psize = 14,
110 .digest = "\xd9\x13\x0a\x81\x64\x54\x9f\xe8"
111 "\x18\x87\x48\x06\xe1\xc7\x01\x4b",
112 }, {
113 .plaintext = "abcdefghijklmnopqrstuvwxyz",
114 .psize = 26,
115 .digest = "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd"
116 "\xee\xa8\xed\x63\xdf\x41\x2d\xa9",
117 .np = 2,
118 .tap = { 13, 13 },
119 }, {
120 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
121 .psize = 62,
122 .digest = "\x04\x3f\x85\x82\xf2\x41\xdb\x35"
123 "\x1c\xe6\x27\xe1\x53\xe7\xf0\xe4",
124 }, {
125 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
126 "45678901234567890",
127 .psize = 80,
128 .digest = "\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19"
129 "\x9c\x3e\x7b\x16\x4f\xcc\x05\x36",
130 },
131 };
132
133 /*
134 * MD5 test vectors from RFC1321
135 */
136 #define MD5_TEST_VECTORS 7
137
138 static struct hash_testvec md5_tv_template[] = {
139 {
140 .digest = "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04"
141 "\xe9\x80\x09\x98\xec\xf8\x42\x7e",
142 }, {
143 .plaintext = "a",
144 .psize = 1,
145 .digest = "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8"
146 "\x31\xc3\x99\xe2\x69\x77\x26\x61",
147 }, {
148 .plaintext = "abc",
149 .psize = 3,
150 .digest = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0"
151 "\xd6\x96\x3f\x7d\x28\xe1\x7f\x72",
152 }, {
153 .plaintext = "message digest",
154 .psize = 14,
155 .digest = "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d"
156 "\x52\x5a\x2f\x31\xaa\xf1\x61\xd0",
157 }, {
158 .plaintext = "abcdefghijklmnopqrstuvwxyz",
159 .psize = 26,
160 .digest = "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00"
161 "\x7d\xfb\x49\x6c\xca\x67\xe1\x3b",
162 .np = 2,
163 .tap = {13, 13}
164 }, {
165 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
166 .psize = 62,
167 .digest = "\xd1\x74\xab\x98\xd2\x77\xd9\xf5"
168 "\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f",
169 }, {
170 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
171 "345678901234567890",
172 .psize = 80,
173 .digest = "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55"
174 "\xac\x49\xda\x2e\x21\x07\xb6\x7a",
175 }
176
177 };
178
179 /*
180 * RIPEMD-128 test vectors from ISO/IEC 10118-3:2004(E)
181 */
182 #define RMD128_TEST_VECTORS 10
183
184 static struct hash_testvec rmd128_tv_template[] = {
185 {
186 .digest = "\xcd\xf2\x62\x13\xa1\x50\xdc\x3e"
187 "\xcb\x61\x0f\x18\xf6\xb3\x8b\x46",
188 }, {
189 .plaintext = "a",
190 .psize = 1,
191 .digest = "\x86\xbe\x7a\xfa\x33\x9d\x0f\xc7"
192 "\xcf\xc7\x85\xe7\x2f\x57\x8d\x33",
193 }, {
194 .plaintext = "abc",
195 .psize = 3,
196 .digest = "\xc1\x4a\x12\x19\x9c\x66\xe4\xba"
197 "\x84\x63\x6b\x0f\x69\x14\x4c\x77",
198 }, {
199 .plaintext = "message digest",
200 .psize = 14,
201 .digest = "\x9e\x32\x7b\x3d\x6e\x52\x30\x62"
202 "\xaf\xc1\x13\x2d\x7d\xf9\xd1\xb8",
203 }, {
204 .plaintext = "abcdefghijklmnopqrstuvwxyz",
205 .psize = 26,
206 .digest = "\xfd\x2a\xa6\x07\xf7\x1d\xc8\xf5"
207 "\x10\x71\x49\x22\xb3\x71\x83\x4e",
208 }, {
209 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
210 "fghijklmnopqrstuvwxyz0123456789",
211 .psize = 62,
212 .digest = "\xd1\xe9\x59\xeb\x17\x9c\x91\x1f"
213 "\xae\xa4\x62\x4c\x60\xc5\xc7\x02",
214 }, {
215 .plaintext = "1234567890123456789012345678901234567890"
216 "1234567890123456789012345678901234567890",
217 .psize = 80,
218 .digest = "\x3f\x45\xef\x19\x47\x32\xc2\xdb"
219 "\xb2\xc4\xa2\xc7\x69\x79\x5f\xa3",
220 }, {
221 .plaintext = "abcdbcdecdefdefgefghfghighij"
222 "hijkijkljklmklmnlmnomnopnopq",
223 .psize = 56,
224 .digest = "\xa1\xaa\x06\x89\xd0\xfa\xfa\x2d"
225 "\xdc\x22\xe8\x8b\x49\x13\x3a\x06",
226 .np = 2,
227 .tap = { 28, 28 },
228 }, {
229 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
230 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
231 "lmnopqrsmnopqrstnopqrstu",
232 .psize = 112,
233 .digest = "\xd4\xec\xc9\x13\xe1\xdf\x77\x6b"
234 "\xf4\x8d\xe9\xd5\x5b\x1f\x25\x46",
235 }, {
236 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
237 .psize = 32,
238 .digest = "\x13\xfc\x13\xe8\xef\xff\x34\x7d"
239 "\xe1\x93\xff\x46\xdb\xac\xcf\xd4",
240 }
241 };
242
243 /*
244 * RIPEMD-160 test vectors from ISO/IEC 10118-3:2004(E)
245 */
246 #define RMD160_TEST_VECTORS 10
247
248 static struct hash_testvec rmd160_tv_template[] = {
249 {
250 .digest = "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28"
251 "\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31",
252 }, {
253 .plaintext = "a",
254 .psize = 1,
255 .digest = "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae"
256 "\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe",
257 }, {
258 .plaintext = "abc",
259 .psize = 3,
260 .digest = "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04"
261 "\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc",
262 }, {
263 .plaintext = "message digest",
264 .psize = 14,
265 .digest = "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8"
266 "\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36",
267 }, {
268 .plaintext = "abcdefghijklmnopqrstuvwxyz",
269 .psize = 26,
270 .digest = "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb"
271 "\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc",
272 }, {
273 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
274 "fghijklmnopqrstuvwxyz0123456789",
275 .psize = 62,
276 .digest = "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed"
277 "\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89",
278 }, {
279 .plaintext = "1234567890123456789012345678901234567890"
280 "1234567890123456789012345678901234567890",
281 .psize = 80,
282 .digest = "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb"
283 "\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb",
284 }, {
285 .plaintext = "abcdbcdecdefdefgefghfghighij"
286 "hijkijkljklmklmnlmnomnopnopq",
287 .psize = 56,
288 .digest = "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05"
289 "\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b",
290 .np = 2,
291 .tap = { 28, 28 },
292 }, {
293 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
294 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
295 "lmnopqrsmnopqrstnopqrstu",
296 .psize = 112,
297 .digest = "\x6f\x3f\xa3\x9b\x6b\x50\x3c\x38\x4f\x91"
298 "\x9a\x49\xa7\xaa\x5c\x2c\x08\xbd\xfb\x45",
299 }, {
300 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
301 .psize = 32,
302 .digest = "\x94\xc2\x64\x11\x54\x04\xe6\x33\x79\x0d"
303 "\xfc\xc8\x7b\x58\x7d\x36\x77\x06\x7d\x9f",
304 }
305 };
306
307 /*
308 * RIPEMD-256 test vectors
309 */
310 #define RMD256_TEST_VECTORS 8
311
312 static struct hash_testvec rmd256_tv_template[] = {
313 {
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",
318 }, {
319 .plaintext = "a",
320 .psize = 1,
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",
325 }, {
326 .plaintext = "abc",
327 .psize = 3,
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",
332 }, {
333 .plaintext = "message digest",
334 .psize = 14,
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",
339 }, {
340 .plaintext = "abcdefghijklmnopqrstuvwxyz",
341 .psize = 26,
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",
346 }, {
347 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
348 "fghijklmnopqrstuvwxyz0123456789",
349 .psize = 62,
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",
354 }, {
355 .plaintext = "1234567890123456789012345678901234567890"
356 "1234567890123456789012345678901234567890",
357 .psize = 80,
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",
362 }, {
363 .plaintext = "abcdbcdecdefdefgefghfghighij"
364 "hijkijkljklmklmnlmnomnopnopq",
365 .psize = 56,
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",
370 .np = 2,
371 .tap = { 28, 28 },
372 }
373 };
374
375 /*
376 * RIPEMD-320 test vectors
377 */
378 #define RMD320_TEST_VECTORS 8
379
380 static struct hash_testvec rmd320_tv_template[] = {
381 {
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",
386 }, {
387 .plaintext = "a",
388 .psize = 1,
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",
393 }, {
394 .plaintext = "abc",
395 .psize = 3,
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",
400 }, {
401 .plaintext = "message digest",
402 .psize = 14,
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",
407 }, {
408 .plaintext = "abcdefghijklmnopqrstuvwxyz",
409 .psize = 26,
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",
414 }, {
415 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
416 "fghijklmnopqrstuvwxyz0123456789",
417 .psize = 62,
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",
422 }, {
423 .plaintext = "1234567890123456789012345678901234567890"
424 "1234567890123456789012345678901234567890",
425 .psize = 80,
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",
430 }, {
431 .plaintext = "abcdbcdecdefdefgefghfghighij"
432 "hijkijkljklmklmnlmnomnopnopq",
433 .psize = 56,
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",
438 .np = 2,
439 .tap = { 28, 28 },
440 }
441 };
442
443 /*
444 * SHA1 test vectors from from FIPS PUB 180-1
445 */
446 #define SHA1_TEST_VECTORS 2
447
448 static struct hash_testvec sha1_tv_template[] = {
449 {
450 .plaintext = "abc",
451 .psize = 3,
452 .digest = "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
453 "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d",
454 }, {
455 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
456 .psize = 56,
457 .digest = "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
458 "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1",
459 .np = 2,
460 .tap = { 28, 28 }
461 }
462 };
463
464
465 /*
466 * SHA224 test vectors from from FIPS PUB 180-2
467 */
468 #define SHA224_TEST_VECTORS 2
469
470 static struct hash_testvec sha224_tv_template[] = {
471 {
472 .plaintext = "abc",
473 .psize = 3,
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"
477 "\xE3\x6C\x9D\xA7",
478 }, {
479 .plaintext =
480 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
481 .psize = 56,
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"
485 "\x52\x52\x25\x25",
486 .np = 2,
487 .tap = { 28, 28 }
488 }
489 };
490
491 /*
492 * SHA256 test vectors from from NIST
493 */
494 #define SHA256_TEST_VECTORS 2
495
496 static struct hash_testvec sha256_tv_template[] = {
497 {
498 .plaintext = "abc",
499 .psize = 3,
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",
504 }, {
505 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
506 .psize = 56,
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",
511 .np = 2,
512 .tap = { 28, 28 }
513 },
514 };
515
516 /*
517 * SHA384 test vectors from from NIST and kerneli
518 */
519 #define SHA384_TEST_VECTORS 4
520
521 static struct hash_testvec sha384_tv_template[] = {
522 {
523 .plaintext= "abc",
524 .psize = 3,
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",
531 }, {
532 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
533 .psize = 56,
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",
540 }, {
541 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
542 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
543 .psize = 112,
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",
550 }, {
551 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
552 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
553 .psize = 104,
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",
560 .np = 4,
561 .tap = { 26, 26, 26, 26 }
562 },
563 };
564
565 /*
566 * SHA512 test vectors from from NIST and kerneli
567 */
568 #define SHA512_TEST_VECTORS 4
569
570 static struct hash_testvec sha512_tv_template[] = {
571 {
572 .plaintext = "abc",
573 .psize = 3,
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",
582 }, {
583 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
584 .psize = 56,
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",
593 }, {
594 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
595 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
596 .psize = 112,
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",
605 }, {
606 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
607 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
608 .psize = 104,
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",
617 .np = 4,
618 .tap = { 26, 26, 26, 26 }
619 },
620 };
621
622
623 /*
624 * WHIRLPOOL test vectors from Whirlpool package
625 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
626 * submission
627 */
628 #define WP512_TEST_VECTORS 8
629
630 static struct hash_testvec wp512_tv_template[] = {
631 {
632 .plaintext = "",
633 .psize = 0,
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",
642
643
644 }, {
645 .plaintext = "a",
646 .psize = 1,
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",
655 }, {
656 .plaintext = "abc",
657 .psize = 3,
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",
666 }, {
667 .plaintext = "message digest",
668 .psize = 14,
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",
677 }, {
678 .plaintext = "abcdefghijklmnopqrstuvwxyz",
679 .psize = 26,
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",
688 }, {
689 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
690 "abcdefghijklmnopqrstuvwxyz0123456789",
691 .psize = 62,
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",
700 }, {
701 .plaintext = "1234567890123456789012345678901234567890"
702 "1234567890123456789012345678901234567890",
703 .psize = 80,
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",
712 }, {
713 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
714 .psize = 32,
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",
723 },
724 };
725
726 #define WP384_TEST_VECTORS 8
727
728 static struct hash_testvec wp384_tv_template[] = {
729 {
730 .plaintext = "",
731 .psize = 0,
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",
738
739
740 }, {
741 .plaintext = "a",
742 .psize = 1,
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",
749 }, {
750 .plaintext = "abc",
751 .psize = 3,
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",
758 }, {
759 .plaintext = "message digest",
760 .psize = 14,
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",
767 }, {
768 .plaintext = "abcdefghijklmnopqrstuvwxyz",
769 .psize = 26,
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",
776 }, {
777 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
778 "abcdefghijklmnopqrstuvwxyz0123456789",
779 .psize = 62,
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",
786 }, {
787 .plaintext = "1234567890123456789012345678901234567890"
788 "1234567890123456789012345678901234567890",
789 .psize = 80,
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",
796 }, {
797 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
798 .psize = 32,
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",
805 },
806 };
807
808 #define WP256_TEST_VECTORS 8
809
810 static struct hash_testvec wp256_tv_template[] = {
811 {
812 .plaintext = "",
813 .psize = 0,
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",
818
819
820 }, {
821 .plaintext = "a",
822 .psize = 1,
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",
827 }, {
828 .plaintext = "abc",
829 .psize = 3,
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",
834 }, {
835 .plaintext = "message digest",
836 .psize = 14,
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",
841 }, {
842 .plaintext = "abcdefghijklmnopqrstuvwxyz",
843 .psize = 26,
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",
848 }, {
849 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
850 "abcdefghijklmnopqrstuvwxyz0123456789",
851 .psize = 62,
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",
856 }, {
857 .plaintext = "1234567890123456789012345678901234567890"
858 "1234567890123456789012345678901234567890",
859 .psize = 80,
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",
864 }, {
865 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
866 .psize = 32,
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",
871 },
872 };
873
874 /*
875 * TIGER test vectors from Tiger website
876 */
877 #define TGR192_TEST_VECTORS 6
878
879 static struct hash_testvec tgr192_tv_template[] = {
880 {
881 .plaintext = "",
882 .psize = 0,
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",
886 }, {
887 .plaintext = "abc",
888 .psize = 3,
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",
892 }, {
893 .plaintext = "Tiger",
894 .psize = 5,
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",
898 }, {
899 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
900 .psize = 64,
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",
904 }, {
905 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
906 .psize = 64,
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",
910 }, {
911 .plaintext = "Tiger - A Fast New Hash Function, "
912 "by Ross Anderson and Eli Biham, "
913 "proceedings of Fast Software Encryption 3, "
914 "Cambridge, 1996.",
915 .psize = 125,
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",
919 },
920 };
921
922 #define TGR160_TEST_VECTORS 6
923
924 static struct hash_testvec tgr160_tv_template[] = {
925 {
926 .plaintext = "",
927 .psize = 0,
928 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
929 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
930 "\xf3\x73\xde\x2d",
931 }, {
932 .plaintext = "abc",
933 .psize = 3,
934 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
935 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
936 "\x93\x5f\x7b\x95",
937 }, {
938 .plaintext = "Tiger",
939 .psize = 5,
940 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
941 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
942 "\x37\x79\x0c\x11",
943 }, {
944 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
945 .psize = 64,
946 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
947 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
948 "\xb5\x86\x44\x50",
949 }, {
950 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
951 .psize = 64,
952 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
953 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
954 "\x57\x89\x65\x65",
955 }, {
956 .plaintext = "Tiger - A Fast New Hash Function, "
957 "by Ross Anderson and Eli Biham, "
958 "proceedings of Fast Software Encryption 3, "
959 "Cambridge, 1996.",
960 .psize = 125,
961 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
962 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
963 "\xdd\x68\x15\x1d",
964 },
965 };
966
967 #define TGR128_TEST_VECTORS 6
968
969 static struct hash_testvec tgr128_tv_template[] = {
970 {
971 .plaintext = "",
972 .psize = 0,
973 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
974 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f",
975 }, {
976 .plaintext = "abc",
977 .psize = 3,
978 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
979 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf",
980 }, {
981 .plaintext = "Tiger",
982 .psize = 5,
983 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
984 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec",
985 }, {
986 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
987 .psize = 64,
988 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
989 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e",
990 }, {
991 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
992 .psize = 64,
993 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
994 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9",
995 }, {
996 .plaintext = "Tiger - A Fast New Hash Function, "
997 "by Ross Anderson and Eli Biham, "
998 "proceedings of Fast Software Encryption 3, "
999 "Cambridge, 1996.",
1000 .psize = 125,
1001 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
1002 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24",
1003 },
1004 };
1005
1006 /*
1007 * HMAC-MD5 test vectors from RFC2202
1008 * (These need to be fixed to not use strlen).
1009 */
1010 #ifndef CONFIG_CRYPTO_DEV_MD5_HMAC
1011 #define HMAC_MD5_TEST_VECTORS 7
1012 #else
1013 #define HMAC_MD5_TEST_VECTORS 5
1014 #endif
1015
1016 static struct hash_testvec hmac_md5_tv_template[] =
1017 {
1018 {
1019 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1020 .ksize = 16,
1021 .plaintext = "Hi There",
1022 .psize = 8,
1023 .digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c"
1024 "\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
1025 }, {
1026 .key = "Jefe",
1027 .ksize = 4,
1028 .plaintext = "what do ya want for nothing?",
1029 .psize = 28,
1030 .digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03"
1031 "\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
1032 .np = 2,
1033 .tap = {14, 14}
1034 }, {
1035 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1036 .ksize = 16,
1037 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1038 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1039 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1040 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1041 .psize = 50,
1042 .digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88"
1043 "\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
1044 }, {
1045 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1046 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1047 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1048 .ksize = 25,
1049 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1050 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1051 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1052 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1053 .psize = 50,
1054 .digest = "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea"
1055 "\x3a\x75\x16\x47\x46\xff\xaa\x79",
1056 }, {
1057 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1058 .ksize = 16,
1059 .plaintext = "Test With Truncation",
1060 .psize = 20,
1061 .digest = "\x56\x46\x1e\xf2\x34\x2e\xdc\x00"
1062 "\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
1063 #ifndef CONFIG_CRYPTO_DEV_MD5_HMAC
1064 }, {
1065 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1066 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1067 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1068 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1069 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1070 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1071 "\xaa\xaa",
1072 .ksize = 80,
1073 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1074 .psize = 54,
1075 .digest = "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f"
1076 "\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
1077 }, {
1078 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1079 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1080 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1081 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1082 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1083 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1084 "\xaa\xaa",
1085 .ksize = 80,
1086 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1087 "Block-Size Data",
1088 .psize = 73,
1089 .digest = "\x6f\x63\x0f\xad\x67\xcd\xa0\xee"
1090 "\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
1091 #endif /* CONFIG_CRYPTO_DEV_MD5_HMAC */
1092 },
1093 };
1094
1095 /*
1096 * HMAC-RIPEMD128 test vectors from RFC2286
1097 */
1098 #define HMAC_RMD128_TEST_VECTORS 7
1099
1100 static struct hash_testvec hmac_rmd128_tv_template[] = {
1101 {
1102 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1103 .ksize = 16,
1104 .plaintext = "Hi There",
1105 .psize = 8,
1106 .digest = "\xfb\xf6\x1f\x94\x92\xaa\x4b\xbf"
1107 "\x81\xc1\x72\xe8\x4e\x07\x34\xdb",
1108 }, {
1109 .key = "Jefe",
1110 .ksize = 4,
1111 .plaintext = "what do ya want for nothing?",
1112 .psize = 28,
1113 .digest = "\x87\x5f\x82\x88\x62\xb6\xb3\x34"
1114 "\xb4\x27\xc5\x5f\x9f\x7f\xf0\x9b",
1115 .np = 2,
1116 .tap = { 14, 14 },
1117 }, {
1118 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1119 .ksize = 16,
1120 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1121 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1122 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1123 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1124 .psize = 50,
1125 .digest = "\x09\xf0\xb2\x84\x6d\x2f\x54\x3d"
1126 "\xa3\x63\xcb\xec\x8d\x62\xa3\x8d",
1127 }, {
1128 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1129 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1130 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1131 .ksize = 25,
1132 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1133 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1134 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1135 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1136 .psize = 50,
1137 .digest = "\xbd\xbb\xd7\xcf\x03\xe4\x4b\x5a"
1138 "\xa6\x0a\xf8\x15\xbe\x4d\x22\x94",
1139 }, {
1140 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1141 .ksize = 16,
1142 .plaintext = "Test With Truncation",
1143 .psize = 20,
1144 .digest = "\xe7\x98\x08\xf2\x4b\x25\xfd\x03"
1145 "\x1c\x15\x5f\x0d\x55\x1d\x9a\x3a",
1146 }, {
1147 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1148 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1149 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1150 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1151 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1152 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1153 "\xaa\xaa",
1154 .ksize = 80,
1155 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1156 .psize = 54,
1157 .digest = "\xdc\x73\x29\x28\xde\x98\x10\x4a"
1158 "\x1f\x59\xd3\x73\xc1\x50\xac\xbb",
1159 }, {
1160 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1161 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1162 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1163 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1164 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1165 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1166 "\xaa\xaa",
1167 .ksize = 80,
1168 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1169 "Block-Size Data",
1170 .psize = 73,
1171 .digest = "\x5c\x6b\xec\x96\x79\x3e\x16\xd4"
1172 "\x06\x90\xc2\x37\x63\x5f\x30\xc5",
1173 },
1174 };
1175
1176 /*
1177 * HMAC-RIPEMD160 test vectors from RFC2286
1178 */
1179 #define HMAC_RMD160_TEST_VECTORS 7
1180
1181 static struct hash_testvec hmac_rmd160_tv_template[] = {
1182 {
1183 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1184 .ksize = 20,
1185 .plaintext = "Hi There",
1186 .psize = 8,
1187 .digest = "\x24\xcb\x4b\xd6\x7d\x20\xfc\x1a\x5d\x2e"
1188 "\xd7\x73\x2d\xcc\x39\x37\x7f\x0a\x56\x68",
1189 }, {
1190 .key = "Jefe",
1191 .ksize = 4,
1192 .plaintext = "what do ya want for nothing?",
1193 .psize = 28,
1194 .digest = "\xdd\xa6\xc0\x21\x3a\x48\x5a\x9e\x24\xf4"
1195 "\x74\x20\x64\xa7\xf0\x33\xb4\x3c\x40\x69",
1196 .np = 2,
1197 .tap = { 14, 14 },
1198 }, {
1199 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1200 .ksize = 20,
1201 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1202 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1203 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1204 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1205 .psize = 50,
1206 .digest = "\xb0\xb1\x05\x36\x0d\xe7\x59\x96\x0a\xb4"
1207 "\xf3\x52\x98\xe1\x16\xe2\x95\xd8\xe7\xc1",
1208 }, {
1209 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1210 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1211 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1212 .ksize = 25,
1213 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1214 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1215 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1216 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1217 .psize = 50,
1218 .digest = "\xd5\xca\x86\x2f\x4d\x21\xd5\xe6\x10\xe1"
1219 "\x8b\x4c\xf1\xbe\xb9\x7a\x43\x65\xec\xf4",
1220 }, {
1221 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1222 .ksize = 20,
1223 .plaintext = "Test With Truncation",
1224 .psize = 20,
1225 .digest = "\x76\x19\x69\x39\x78\xf9\x1d\x90\x53\x9a"
1226 "\xe7\x86\x50\x0f\xf3\xd8\xe0\x51\x8e\x39",
1227 }, {
1228 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1229 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1230 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1231 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1232 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1233 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1234 "\xaa\xaa",
1235 .ksize = 80,
1236 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1237 .psize = 54,
1238 .digest = "\x64\x66\xca\x07\xac\x5e\xac\x29\xe1\xbd"
1239 "\x52\x3e\x5a\xda\x76\x05\xb7\x91\xfd\x8b",
1240 }, {
1241 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1242 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1243 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1244 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1245 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1246 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1247 "\xaa\xaa",
1248 .ksize = 80,
1249 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1250 "Block-Size Data",
1251 .psize = 73,
1252 .digest = "\x69\xea\x60\x79\x8d\x71\x61\x6c\xce\x5f"
1253 "\xd0\x87\x1e\x23\x75\x4c\xd7\x5d\x5a\x0a",
1254 },
1255 };
1256
1257 /*
1258 * HMAC-SHA1 test vectors from RFC2202
1259 */
1260 #ifndef CONFIG_CRYPTO_DEV_SHA1_HMAC
1261 #define HMAC_SHA1_TEST_VECTORS 7
1262 #else
1263 #define HMAC_SHA1_TEST_VECTORS 5
1264 #endif
1265
1266 static struct hash_testvec hmac_sha1_tv_template[] = {
1267 {
1268 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1269 .ksize = 20,
1270 .plaintext = "Hi There",
1271 .psize = 8,
1272 .digest = "\xb6\x17\x31\x86\x55\x05\x72\x64"
1273 "\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1"
1274 "\x46\xbe",
1275 }, {
1276 .key = "Jefe",
1277 .ksize = 4,
1278 .plaintext = "what do ya want for nothing?",
1279 .psize = 28,
1280 .digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74"
1281 "\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
1282 .np = 2,
1283 .tap = { 14, 14 }
1284 }, {
1285 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1286 .ksize = 20,
1287 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1288 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1289 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1290 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1291 .psize = 50,
1292 .digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3"
1293 "\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
1294 }, {
1295 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1296 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1297 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1298 .ksize = 25,
1299 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1300 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1301 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1302 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1303 .psize = 50,
1304 .digest = "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84"
1305 "\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
1306 }, {
1307 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1308 .ksize = 20,
1309 .plaintext = "Test With Truncation",
1310 .psize = 20,
1311 .digest = "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2"
1312 "\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
1313
1314 #ifndef CONFIG_CRYPTO_DEV_SHA1_HMAC
1315 }, {
1316 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1317 "\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",
1323 .ksize = 80,
1324 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1325 .psize = 54,
1326 .digest = "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70"
1327 "\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
1328 }, {
1329 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1330 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1331 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1332 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1333 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1334 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1335 "\xaa\xaa",
1336 .ksize = 80,
1337 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1338 "Block-Size Data",
1339 .psize = 73,
1340 .digest = "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b"
1341 "\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
1342 #endif
1343 },
1344 };
1345
1346
1347 /*
1348 * SHA224 HMAC test vectors from RFC4231
1349 */
1350 #define HMAC_SHA224_TEST_VECTORS 4
1351
1352 static struct hash_testvec hmac_sha224_tv_template[] = {
1353 {
1354 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1355 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1356 "\x0b\x0b\x0b\x0b",
1357 .ksize = 20,
1358 /* ("Hi There") */
1359 .plaintext = "\x48\x69\x20\x54\x68\x65\x72\x65",
1360 .psize = 8,
1361 .digest = "\x89\x6f\xb1\x12\x8a\xbb\xdf\x19"
1362 "\x68\x32\x10\x7c\xd4\x9d\xf3\x3f"
1363 "\x47\xb4\xb1\x16\x99\x12\xba\x4f"
1364 "\x53\x68\x4b\x22",
1365 }, {
1366 .key = "Jefe",
1367 .ksize = 4,
1368 /* ("what do ya want for nothing?") */
1369 .plaintext = "\x77\x68\x61\x74\x20\x64\x6f\x20"
1370 "\x79\x61\x20\x77\x61\x6e\x74\x20"
1371 "\x66\x6f\x72\x20\x6e\x6f\x74\x68"
1372 "\x69\x6e\x67\x3f",
1373 .psize = 28,
1374 .digest = "\xa3\x0e\x01\x09\x8b\xc6\xdb\xbf"
1375 "\x45\x69\x0f\x3a\x7e\x9e\x6d\x0f"
1376 "\x8b\xbe\xa2\xa3\x9e\x61\x48\x00"
1377 "\x8f\xd0\x5e\x44",
1378 .np = 4,
1379 .tap = { 7, 7, 7, 7 }
1380 }, {
1381 .key = "\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"
1384 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1385 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1386 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1387 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1388 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1389 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1390 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1391 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1392 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1393 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1394 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1395 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1396 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1397 "\xaa\xaa\xaa",
1398 .ksize = 131,
1399 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
1400 .plaintext = "\x54\x65\x73\x74\x20\x55\x73\x69"
1401 "\x6e\x67\x20\x4c\x61\x72\x67\x65"
1402 "\x72\x20\x54\x68\x61\x6e\x20\x42"
1403 "\x6c\x6f\x63\x6b\x2d\x53\x69\x7a"
1404 "\x65\x20\x4b\x65\x79\x20\x2d\x20"
1405 "\x48\x61\x73\x68\x20\x4b\x65\x79"
1406 "\x20\x46\x69\x72\x73\x74",
1407 .psize = 54,
1408 .digest = "\x95\xe9\xa0\xdb\x96\x20\x95\xad"
1409 "\xae\xbe\x9b\x2d\x6f\x0d\xbc\xe2"
1410 "\xd4\x99\xf1\x12\xf2\xd2\xb7\x27"
1411 "\x3f\xa6\x87\x0e",
1412 }, {
1413 .key = "\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"
1416 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1417 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1418 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1419 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1420 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1421 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1422 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1423 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1424 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1425 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1426 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1427 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1428 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1429 "\xaa\xaa\xaa",
1430 .ksize = 131,
1431 /* ("This is a test using a larger than block-size key and a")
1432 (" larger than block-size data. The key needs to be")
1433 (" hashed before being used by the HMAC algorithm.") */
1434 .plaintext = "\x54\x68\x69\x73\x20\x69\x73\x20"
1435 "\x61\x20\x74\x65\x73\x74\x20\x75"
1436 "\x73\x69\x6e\x67\x20\x61\x20\x6c"
1437 "\x61\x72\x67\x65\x72\x20\x74\x68"
1438 "\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1439 "\x2d\x73\x69\x7a\x65\x20\x6b\x65"
1440 "\x79\x20\x61\x6e\x64\x20\x61\x20"
1441 "\x6c\x61\x72\x67\x65\x72\x20\x74"
1442 "\x68\x61\x6e\x20\x62\x6c\x6f\x63"
1443 "\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1444 "\x61\x74\x61\x2e\x20\x54\x68\x65"
1445 "\x20\x6b\x65\x79\x20\x6e\x65\x65"
1446 "\x64\x73\x20\x74\x6f\x20\x62\x65"
1447 "\x20\x68\x61\x73\x68\x65\x64\x20"
1448 "\x62\x65\x66\x6f\x72\x65\x20\x62"
1449 "\x65\x69\x6e\x67\x20\x75\x73\x65"
1450 "\x64\x20\x62\x79\x20\x74\x68\x65"
1451 "\x20\x48\x4d\x41\x43\x20\x61\x6c"
1452 "\x67\x6f\x72\x69\x74\x68\x6d\x2e",
1453 .psize = 152,
1454 .digest = "\x3a\x85\x41\x66\xac\x5d\x9f\x02"
1455 "\x3f\x54\xd5\x17\xd0\xb3\x9d\xbd"
1456 "\x94\x67\x70\xdb\x9c\x2b\x95\xc9"
1457 "\xf6\xf5\x65\xd1",
1458 },
1459 };
1460
1461 /*
1462 * HMAC-SHA256 test vectors from
1463 * draft-ietf-ipsec-ciph-sha-256-01.txt
1464 */
1465 #define HMAC_SHA256_TEST_VECTORS 10
1466
1467 static struct hash_testvec hmac_sha256_tv_template[] = {
1468 {
1469 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1470 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1471 "\x11\x12\x13\x14\x15\x16\x17\x18"
1472 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1473 .ksize = 32,
1474 .plaintext = "abc",
1475 .psize = 3,
1476 .digest = "\xa2\x1b\x1f\x5d\x4c\xf4\xf7\x3a"
1477 "\x4d\xd9\x39\x75\x0f\x7a\x06\x6a"
1478 "\x7f\x98\xcc\x13\x1c\xb1\x6a\x66"
1479 "\x92\x75\x90\x21\xcf\xab\x81\x81",
1480 }, {
1481 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1482 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1483 "\x11\x12\x13\x14\x15\x16\x17\x18"
1484 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1485 .ksize = 32,
1486 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1487 .psize = 56,
1488 .digest = "\x10\x4f\xdc\x12\x57\x32\x8f\x08"
1489 "\x18\x4b\xa7\x31\x31\xc5\x3c\xae"
1490 "\xe6\x98\xe3\x61\x19\x42\x11\x49"
1491 "\xea\x8c\x71\x24\x56\x69\x7d\x30",
1492 }, {
1493 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1494 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1495 "\x11\x12\x13\x14\x15\x16\x17\x18"
1496 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1497 .ksize = 32,
1498 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1499 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1500 .psize = 112,
1501 .digest = "\x47\x03\x05\xfc\x7e\x40\xfe\x34"
1502 "\xd3\xee\xb3\xe7\x73\xd9\x5a\xab"
1503 "\x73\xac\xf0\xfd\x06\x04\x47\xa5"
1504 "\xeb\x45\x95\xbf\x33\xa9\xd1\xa3",
1505 }, {
1506 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1507 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1508 "\x0b\x0b\x0b\x0b\x0b\x0b",
1509 .ksize = 32,
1510 .plaintext = "Hi There",
1511 .psize = 8,
1512 .digest = "\x19\x8a\x60\x7e\xb4\x4b\xfb\xc6"
1513 "\x99\x03\xa0\xf1\xcf\x2b\xbd\xc5"
1514 "\xba\x0a\xa3\xf3\xd9\xae\x3c\x1c"
1515 "\x7a\x3b\x16\x96\xa0\xb6\x8c\xf7",
1516 }, {
1517 .key = "Jefe",
1518 .ksize = 4,
1519 .plaintext = "what do ya want for nothing?",
1520 .psize = 28,
1521 .digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e"
1522 "\x6a\x04\x24\x26\x08\x95\x75\xc7"
1523 "\x5a\x00\x3f\x08\x9d\x27\x39\x83"
1524 "\x9d\xec\x58\xb9\x64\xec\x38\x43",
1525 .np = 2,
1526 .tap = { 14, 14 }
1527 }, {
1528 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1529 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1530 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1531 .ksize = 32,
1532 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1533 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1534 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1535 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1536 .psize = 50,
1537 .digest = "\xcd\xcb\x12\x20\xd1\xec\xcc\xea"
1538 "\x91\xe5\x3a\xba\x30\x92\xf9\x62"
1539 "\xe5\x49\xfe\x6c\xe9\xed\x7f\xdc"
1540 "\x43\x19\x1f\xbd\xe4\x5c\x30\xb0",
1541 }, {
1542 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1543 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1544 "\x11\x12\x13\x14\x15\x16\x17\x18"
1545 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
1546 "\x21\x22\x23\x24\x25",
1547 .ksize = 37,
1548 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1549 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1550 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1551 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1552 .psize = 50,
1553 .digest = "\xd4\x63\x3c\x17\xf6\xfb\x8d\x74"
1554 "\x4c\x66\xde\xe0\xf8\xf0\x74\x55"
1555 "\x6e\xc4\xaf\x55\xef\x07\x99\x85"
1556 "\x41\x46\x8e\xb4\x9b\xd2\xe9\x17",
1557 }, {
1558 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1559 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1560 "\x0c\x0c\x0c\x0c\x0c\x0c",
1561 .ksize = 32,
1562 .plaintext = "Test With Truncation",
1563 .psize = 20,
1564 .digest = "\x75\x46\xaf\x01\x84\x1f\xc0\x9b"
1565 "\x1a\xb9\xc3\x74\x9a\x5f\x1c\x17"
1566 "\xd4\xf5\x89\x66\x8a\x58\x7b\x27"
1567 "\x00\xa9\xc9\x7c\x11\x93\xcf\x42",
1568 }, {
1569 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1570 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1571 "\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",
1576 .ksize = 80,
1577 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1578 .psize = 54,
1579 .digest = "\x69\x53\x02\x5e\xd9\x6f\x0c\x09"
1580 "\xf8\x0a\x96\xf7\x8e\x65\x38\xdb"
1581 "\xe2\xe7\xb8\x20\xe3\xdd\x97\x0e"
1582 "\x7d\xdd\x39\x09\x1b\x32\x35\x2f",
1583 }, {
1584 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1585 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1586 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1587 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1588 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1589 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1590 "\xaa\xaa",
1591 .ksize = 80,
1592 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1593 "One Block-Size Data",
1594 .psize = 73,
1595 .digest = "\x63\x55\xac\x22\xe8\x90\xd0\xa3"
1596 "\xc8\x48\x1a\x5c\xa4\x82\x5b\xc8"
1597 "\x84\xd3\xe7\xa1\xff\x98\xa2\xfc"
1598 "\x2a\xc7\xd8\xe0\x64\xc3\xb2\xe6",
1599 },
1600 };
1601
1602 #define XCBC_AES_TEST_VECTORS 6
1603
1604 static struct hash_testvec aes_xcbc128_tv_template[] = {
1605 {
1606 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1607 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1608 .plaintext = zeroed_string,
1609 .digest = "\x75\xf0\x25\x1d\x52\x8a\xc0\x1c"
1610 "\x45\x73\xdf\xd5\x84\xd7\x9f\x29",
1611 .psize = 0,
1612 .ksize = 16,
1613 }, {
1614 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1615 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1616 .plaintext = "\x00\x01\x02",
1617 .digest = "\x5b\x37\x65\x80\xae\x2f\x19\xaf"
1618 "\xe7\x21\x9c\xee\xf1\x72\x75\x6f",
1619 .psize = 3,
1620 .ksize = 16,
1621 } , {
1622 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1623 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1624 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1625 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1626 .digest = "\xd2\xa2\x46\xfa\x34\x9b\x68\xa7"
1627 "\x99\x98\xa4\x39\x4f\xf7\xa2\x63",
1628 .psize = 16,
1629 .ksize = 16,
1630 }, {
1631 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1632 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1633 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1634 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1635 "\x10\x11\x12\x13",
1636 .digest = "\x47\xf5\x1b\x45\x64\x96\x62\x15"
1637 "\xb8\x98\x5c\x63\x05\x5e\xd3\x08",
1638 .tap = { 10, 10 },
1639 .psize = 20,
1640 .np = 2,
1641 .ksize = 16,
1642 }, {
1643 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1644 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1645 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1646 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1647 "\x10\x11\x12\x13\x14\x15\x16\x17"
1648 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
1649 .digest = "\xf5\x4f\x0e\xc8\xd2\xb9\xf3\xd3"
1650 "\x68\x07\x73\x4b\xd5\x28\x3f\xd4",
1651 .psize = 32,
1652 .ksize = 16,
1653 }, {
1654 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1655 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1656 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1657 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1658 "\x10\x11\x12\x13\x14\x15\x16\x17"
1659 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
1660 "\x20\x21",
1661 .digest = "\xbe\xcb\xb3\xbc\xcd\xb5\x18\xa3"
1662 "\x06\x77\xd5\x48\x1f\xb6\xb4\xd8",
1663 .tap = { 17, 17 },
1664 .psize = 34,
1665 .np = 2,
1666 .ksize = 16,
1667 }
1668 };
1669
1670 #define VMAC_AES_TEST_VECTORS 1
1671 static char vmac_string[128] = {'\x01', '\x01', '\x01', '\x01',
1672 '\x02', '\x03', '\x02', '\x02',
1673 '\x02', '\x04', '\x01', '\x07',
1674 '\x04', '\x01', '\x04', '\x03',};
1675 static struct hash_testvec aes_vmac128_tv_template[] = {
1676 {
1677 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1678 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1679 .plaintext = vmac_string,
1680 .digest = "\xcb\xd7\x8a\xfd\xb7\x33\x79\xe7",
1681 .psize = 128,
1682 .ksize = 16,
1683 },
1684 };
1685
1686 /*
1687 * SHA384 HMAC test vectors from RFC4231
1688 */
1689
1690 #define HMAC_SHA384_TEST_VECTORS 4
1691
1692 static struct hash_testvec hmac_sha384_tv_template[] = {
1693 {
1694 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1695 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1696 "\x0b\x0b\x0b\x0b",
1697 .ksize = 20,
1698 .plaintext = "Hi There",
1699 .psize = 8,
1700 .digest = "\xaf\xd0\x39\x44\xd8\x48\x95\x62"
1701 "\x6b\x08\x25\xf4\xab\x46\x90\x7f"
1702 "\x15\xf9\xda\xdb\xe4\x10\x1e\xc6"
1703 "\x82\xaa\x03\x4c\x7c\xeb\xc5\x9c"
1704 "\xfa\xea\x9e\xa9\x07\x6e\xde\x7f"
1705 "\x4a\xf1\x52\xe8\xb2\xfa\x9c\xb6",
1706 }, {
1707 .key = "Jefe",
1708 .ksize = 4,
1709 .plaintext = "what do ya want for nothing?",
1710 .psize = 28,
1711 .digest = "\xaf\x45\xd2\xe3\x76\x48\x40\x31"
1712 "\x61\x7f\x78\xd2\xb5\x8a\x6b\x1b"
1713 "\x9c\x7e\xf4\x64\xf5\xa0\x1b\x47"
1714 "\xe4\x2e\xc3\x73\x63\x22\x44\x5e"
1715 "\x8e\x22\x40\xca\x5e\x69\xe2\xc7"
1716 "\x8b\x32\x39\xec\xfa\xb2\x16\x49",
1717 .np = 4,
1718 .tap = { 7, 7, 7, 7 }
1719 }, {
1720 .key = "\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"
1735 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1736 "\xaa\xaa\xaa",
1737 .ksize = 131,
1738 .plaintext = "Test Using Larger Than Block-Siz"
1739 "e Key - Hash Key First",
1740 .psize = 54,
1741 .digest = "\x4e\xce\x08\x44\x85\x81\x3e\x90"
1742 "\x88\xd2\xc6\x3a\x04\x1b\xc5\xb4"
1743 "\x4f\x9e\xf1\x01\x2a\x2b\x58\x8f"
1744 "\x3c\xd1\x1f\x05\x03\x3a\xc4\xc6"
1745 "\x0c\x2e\xf6\xab\x40\x30\xfe\x82"
1746 "\x96\x24\x8d\xf1\x63\xf4\x49\x52",
1747 }, {
1748 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1749 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1750 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1751 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1752 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1753 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1754 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1755 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1756 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1757 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1758 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1759 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1760 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1761 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1762 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1763 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1764 "\xaa\xaa\xaa",
1765 .ksize = 131,
1766 .plaintext = "This is a test u"
1767 "sing a larger th"
1768 "an block-size ke"
1769 "y and a larger t"
1770 "han block-size d"
1771 "ata. The key nee"
1772 "ds to be hashed "
1773 "before being use"
1774 "d by the HMAC al"
1775 "gorithm.",
1776 .psize = 152,
1777 .digest = "\x66\x17\x17\x8e\x94\x1f\x02\x0d"
1778 "\x35\x1e\x2f\x25\x4e\x8f\xd3\x2c"
1779 "\x60\x24\x20\xfe\xb0\xb8\xfb\x9a"
1780 "\xdc\xce\xbb\x82\x46\x1e\x99\xc5"
1781 "\xa6\x78\xcc\x31\xe7\x99\x17\x6d"
1782 "\x38\x60\xe6\x11\x0c\x46\x52\x3e",
1783 },
1784 };
1785
1786 /*
1787 * SHA512 HMAC test vectors from RFC4231
1788 */
1789
1790 #define HMAC_SHA512_TEST_VECTORS 4
1791
1792 static struct hash_testvec hmac_sha512_tv_template[] = {
1793 {
1794 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1795 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1796 "\x0b\x0b\x0b\x0b",
1797 .ksize = 20,
1798 .plaintext = "Hi There",
1799 .psize = 8,
1800 .digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d"
1801 "\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0"
1802 "\x23\x79\xf4\xe2\xce\x4e\xc2\x78"
1803 "\x7a\xd0\xb3\x05\x45\xe1\x7c\xde"
1804 "\xda\xa8\x33\xb7\xd6\xb8\xa7\x02"
1805 "\x03\x8b\x27\x4e\xae\xa3\xf4\xe4"
1806 "\xbe\x9d\x91\x4e\xeb\x61\xf1\x70"
1807 "\x2e\x69\x6c\x20\x3a\x12\x68\x54",
1808 }, {
1809 .key = "Jefe",
1810 .ksize = 4,
1811 .plaintext = "what do ya want for nothing?",
1812 .psize = 28,
1813 .digest = "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2"
1814 "\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3"
1815 "\x87\xbd\x64\x22\x2e\x83\x1f\xd6"
1816 "\x10\x27\x0c\xd7\xea\x25\x05\x54"
1817 "\x97\x58\xbf\x75\xc0\x5a\x99\x4a"
1818 "\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd"
1819 "\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b"
1820 "\x63\x6e\x07\x0a\x38\xbc\xe7\x37",
1821 .np = 4,
1822 .tap = { 7, 7, 7, 7 }
1823 }, {
1824 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1825 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1826 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1827 "\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",
1841 .ksize = 131,
1842 .plaintext = "Test Using Large"
1843 "r Than Block-Siz"
1844 "e Key - Hash Key"
1845 " First",
1846 .psize = 54,
1847 .digest = "\x80\xb2\x42\x63\xc7\xc1\xa3\xeb"
1848 "\xb7\x14\x93\xc1\xdd\x7b\xe8\xb4"
1849 "\x9b\x46\xd1\xf4\x1b\x4a\xee\xc1"
1850 "\x12\x1b\x01\x37\x83\xf8\xf3\x52"
1851 "\x6b\x56\xd0\x37\xe0\x5f\x25\x98"
1852 "\xbd\x0f\xd2\x21\x5d\x6a\x1e\x52"
1853 "\x95\xe6\x4f\x73\xf6\x3f\x0a\xec"
1854 "\x8b\x91\x5a\x98\x5d\x78\x65\x98",
1855 }, {
1856 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1857 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1858 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1859 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1860 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1861 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1862 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1863 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1864 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1865 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1866 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1867 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1868 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1869 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1870 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1871 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1872 "\xaa\xaa\xaa",
1873 .ksize = 131,
1874 .plaintext =
1875 "This is a test u"
1876 "sing a larger th"
1877 "an block-size ke"
1878 "y and a larger t"
1879 "han block-size d"
1880 "ata. The key nee"
1881 "ds to be hashed "
1882 "before being use"
1883 "d by the HMAC al"
1884 "gorithm.",
1885 .psize = 152,
1886 .digest = "\xe3\x7b\x6a\x77\x5d\xc8\x7d\xba"
1887 "\xa4\xdf\xa9\xf9\x6e\x5e\x3f\xfd"
1888 "\xde\xbd\x71\xf8\x86\x72\x89\x86"
1889 "\x5d\xf5\xa3\x2d\x20\xcd\xc9\x44"
1890 "\xb6\x02\x2c\xac\x3c\x49\x82\xb1"
1891 "\x0d\x5e\xeb\x55\xc3\xe4\xde\x15"
1892 "\x13\x46\x76\xfb\x6d\xe0\x44\x60"
1893 "\x65\xc9\x74\x40\xfa\x8c\x6a\x58",
1894 },
1895 };
1896
1897 /*
1898 * DES test vectors.
1899 */
1900 #if defined(CONFIG_CRYPTO_DEV_DES) || defined (CONFIG_CRYPTO_ASYNC_DES)
1901 #define DES_ENC_TEST_VECTORS 5
1902 #define DES_DEC_TEST_VECTORS 3
1903 #define DES_CBC_ENC_TEST_VECTORS 4
1904 #define DES_CBC_DEC_TEST_VECTORS 3
1905 #define DES3_EDE_ENC_TEST_VECTORS 3
1906 #define DES3_EDE_DEC_TEST_VECTORS 3
1907 #define DES3_EDE_CBC_ENC_TEST_VECTORS 1
1908 #define DES3_EDE_CBC_DEC_TEST_VECTORS 1
1909 #else
1910 #define DES_ENC_TEST_VECTORS 10
1911 #define DES_DEC_TEST_VECTORS 4
1912 #define DES_CBC_ENC_TEST_VECTORS 5
1913 #define DES_CBC_DEC_TEST_VECTORS 4
1914 #define DES3_EDE_ENC_TEST_VECTORS 3
1915 #define DES3_EDE_DEC_TEST_VECTORS 3
1916 #define DES3_EDE_CBC_ENC_TEST_VECTORS 1
1917 #define DES3_EDE_CBC_DEC_TEST_VECTORS 1
1918 #endif /*CONFIG_CRYPTO_DEV_DES*/
1919
1920 static struct cipher_testvec des_enc_tv_template[] = {
1921 { /* From Applied Cryptography */
1922 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1923 .klen = 8,
1924 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1925 .ilen = 8,
1926 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1927 .rlen = 8,
1928 }, { /* Same key, different plaintext block */
1929 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1930 .klen = 8,
1931 .input = "\x22\x33\x44\x55\x66\x77\x88\x99",
1932 .ilen = 8,
1933 .result = "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1934 .rlen = 8,
1935 }, { /* Sbox test from NBS */
1936 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1937 .klen = 8,
1938 .input = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1939 .ilen = 8,
1940 .result = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1941 .rlen = 8,
1942 }, { /* Three blocks */
1943 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1944 .klen = 8,
1945 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1946 "\x22\x33\x44\x55\x66\x77\x88\x99"
1947 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1948 .ilen = 24,
1949 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1950 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1951 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1952 .rlen = 24,
1953 //#if !defined(CONFIG_CRYPTO_DEV_DES) && !defined(CONFIG_CRYPTO_ASYNC_DES)
1954 #if 0
1955 }, { /* Weak key */
1956 .fail = 1,
1957 .wk = 1,
1958 .key = "\x01\x01\x01\x01\x01\x01\x01\x01",
1959 .klen = 8,
1960 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1961 .ilen = 8,
1962 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1963 .rlen = 8,
1964 #endif
1965 }, { /* Two blocks -- for testing encryption across pages */
1966 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1967 .klen = 8,
1968 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1969 "\x22\x33\x44\x55\x66\x77\x88\x99",
1970 .ilen = 16,
1971 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1972 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1973 .rlen = 16,
1974 .np = 2,
1975 .tap = { 8, 8 }
1976 //#if !defined(CONFIG_CRYPTO_DEV_DES) && !defined(CONFIG_CRYPTO_ASYNC_DES)
1977 #if 0
1978 }, { /* Four blocks -- for testing encryption with chunking */
1979 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1980 .klen = 8,
1981 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1982 "\x22\x33\x44\x55\x66\x77\x88\x99"
1983 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef"
1984 "\x22\x33\x44\x55\x66\x77\x88\x99",
1985 .ilen = 32,
1986 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1987 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1988 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90"
1989 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1990 .rlen = 32,
1991 .np = 3,
1992 .tap = { 14, 10, 8 }
1993 }, {
1994 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1995 .klen = 8,
1996 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1997 "\x22\x33\x44\x55\x66\x77\x88\x99"
1998 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1999 .ilen = 24,
2000 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2001 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
2002 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
2003 .rlen = 24,
2004 .np = 4,
2005 .tap = { 2, 1, 3, 18 }
2006 }, {
2007 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2008 .klen = 8,
2009 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2010 "\x22\x33\x44\x55\x66\x77\x88\x99",
2011 .ilen = 16,
2012 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2013 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
2014 .rlen = 16,
2015 .np = 5,
2016 .tap = { 2, 2, 2, 2, 8 }
2017 }, {
2018 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2019 .klen = 8,
2020 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
2021 .ilen = 8,
2022 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
2023 .rlen = 8,
2024 .np = 8,
2025 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
2026 #endif
2027 },
2028 };
2029
2030 static struct cipher_testvec des_dec_tv_template[] = {
2031 { /* From Applied Cryptography */
2032 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2033 .klen = 8,
2034 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
2035 .ilen = 8,
2036 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
2037 .rlen = 8,
2038 }, { /* Sbox test from NBS */
2039 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
2040 .klen = 8,
2041 .input = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2042 .ilen = 8,
2043 .result = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
2044 .rlen = 8,
2045 }, { /* Two blocks, for chunking test */
2046 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2047 .klen = 8,
2048 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2049 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2050 .ilen = 16,
2051 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2052 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2053 .rlen = 16,
2054 .np = 2,
2055 .tap = { 8, 8 }
2056 }, {
2057 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2058 .klen = 8,
2059 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2060 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2061 .ilen = 16,
2062 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2063 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2064 .rlen = 16,
2065 .np = 3,
2066 .tap = { 3, 12, 1 }
2067 },
2068 };
2069
2070 static struct cipher_testvec des_cbc_enc_tv_template[] = {
2071 { /* From OpenSSL */
2072 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2073 .klen = 8,
2074 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2075 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2076 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2077 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2078 .ilen = 24,
2079 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2080 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2081 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2082 .rlen = 24,
2083 }, { /* FIPS Pub 81 */
2084 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2085 .klen = 8,
2086 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2087 .input = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2088 .ilen = 8,
2089 .result = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2090 .rlen = 8,
2091 }, {
2092 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2093 .klen = 8,
2094 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2095 .input = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2096 .ilen = 8,
2097 .result = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2098 .rlen = 8,
2099 }, {
2100 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2101 .klen = 8,
2102 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2103 .input = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2104 .ilen = 8,
2105 .result = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2106 .rlen = 8,
2107 #if 0
2108 }, { /* Copy of openssl vector for chunk testing */
2109 /* From OpenSSL */
2110 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2111 .klen = 8,
2112 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2113 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2114 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2115 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2116 .ilen = 24,
2117 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2118 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2119 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2120 .rlen = 24,
2121 .np = 2,
2122 .tap = { 13, 11 }
2123 #endif
2124 },
2125 };
2126
2127 static struct cipher_testvec des_cbc_dec_tv_template[] = {
2128 { /* FIPS Pub 81 */
2129 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2130 .klen = 8,
2131 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2132 .input = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2133 .ilen = 8,
2134 .result = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2135 .rlen = 8,
2136 }, {
2137 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2138 .klen = 8,
2139 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2140 .input = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2141 .ilen = 8,
2142 .result = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2143 .rlen = 8,
2144 }, {
2145 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2146 .klen = 8,
2147 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2148 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2149 .ilen = 8,
2150 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2151 .rlen = 8,
2152 }, { /* Copy of above, for chunk testing */
2153 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2154 .klen = 8,
2155 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2156 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2157 .ilen = 8,
2158 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2159 .rlen = 8,
2160 .np = 2,
2161 .tap = { 4, 4 }
2162 },
2163 };
2164
2165 static struct cipher_testvec des3_ede_enc_tv_template[] = {
2166 { /* These are from openssl */
2167 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2168 "\x55\x55\x55\x55\x55\x55\x55\x55"
2169 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2170 .klen = 24,
2171 .input = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2172 .ilen = 8,
2173 .result = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2174 .rlen = 8,
2175 }, {
2176 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2177 "\x86\x02\x87\x66\x59\x08\x21\x98"
2178 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2179 .klen = 24,
2180 .input = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2181 .ilen = 8,
2182 .result = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2183 .rlen = 8,
2184 }, {
2185 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2186 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2187 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2188 .klen = 24,
2189 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2190 .ilen = 8,
2191 .result = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2192 .rlen = 8,
2193 },
2194 };
2195
2196 static struct cipher_testvec des3_ede_dec_tv_template[] = {
2197 { /* These are from openssl */
2198 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2199 "\x55\x55\x55\x55\x55\x55\x55\x55"
2200 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2201 .klen = 24,
2202 .input = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2203 .ilen = 8,
2204 .result = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2205 .rlen = 8,
2206 }, {
2207 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2208 "\x86\x02\x87\x66\x59\x08\x21\x98"
2209 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2210 .klen = 24,
2211 .input = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2212 .ilen = 8,
2213 .result = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2214 .rlen = 8,
2215 }, {
2216 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2217 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2218 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2219 .klen = 24,
2220 .input = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2221 .ilen = 8,
2222 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2223 .rlen = 8,
2224 },
2225 };
2226
2227 static struct cipher_testvec des3_ede_cbc_enc_tv_template[] = {
2228 { /* Generated from openssl */
2229 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2230 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2231 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2232 .klen = 24,
2233 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2234 .input = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2235 "\x53\x20\x63\x65\x65\x72\x73\x74"
2236 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2237 "\x20\x79\x65\x53\x72\x63\x74\x65"
2238 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2239 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2240 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2241 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2242 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2243 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2244 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2245 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2246 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2247 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2248 "\x63\x65\x65\x72\x73\x74\x54\x20"
2249 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2250 .ilen = 128,
2251 .result = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2252 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2253 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2254 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2255 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2256 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2257 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2258 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2259 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2260 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2261 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2262 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2263 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2264 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2265 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2266 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2267 .rlen = 128,
2268 },
2269 };
2270
2271 static struct cipher_testvec des3_ede_cbc_dec_tv_template[] = {
2272 { /* Generated from openssl */
2273 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2274 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2275 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2276 .klen = 24,
2277 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2278 .input = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2279 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2280 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2281 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2282 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2283 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2284 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2285 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2286 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2287 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2288 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2289 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2290 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2291 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2292 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2293 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2294 .ilen = 128,
2295 .result = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2296 "\x53\x20\x63\x65\x65\x72\x73\x74"
2297 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2298 "\x20\x79\x65\x53\x72\x63\x74\x65"
2299 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2300 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2301 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2302 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2303 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2304 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2305 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2306 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2307 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2308 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2309 "\x63\x65\x65\x72\x73\x74\x54\x20"
2310 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2311 .rlen = 128,
2312 },
2313 };
2314
2315 /*
2316 * Blowfish test vectors.
2317 */
2318 #define BF_ENC_TEST_VECTORS 6
2319 #define BF_DEC_TEST_VECTORS 6
2320 #define BF_CBC_ENC_TEST_VECTORS 1
2321 #define BF_CBC_DEC_TEST_VECTORS 1
2322
2323 static struct cipher_testvec bf_enc_tv_template[] = {
2324 { /* DES test vectors from OpenSSL */
2325 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2326 .klen = 8,
2327 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2328 .ilen = 8,
2329 .result = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2330 .rlen = 8,
2331 }, {
2332 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2333 .klen = 8,
2334 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2335 .ilen = 8,
2336 .result = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2337 .rlen = 8,
2338 }, {
2339 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2340 .klen = 8,
2341 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2342 .ilen = 8,
2343 .result = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2344 .rlen = 8,
2345 }, { /* Vary the keylength... */
2346 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2347 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2348 .klen = 16,
2349 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2350 .ilen = 8,
2351 .result = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2352 .rlen = 8,
2353 }, {
2354 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2355 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2356 "\x00\x11\x22\x33\x44",
2357 .klen = 21,
2358 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2359 .ilen = 8,
2360 .result = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2361 .rlen = 8,
2362 }, { /* Generated with bf488 */
2363 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2364 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2365 "\x00\x11\x22\x33\x44\x55\x66\x77"
2366 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2367 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2368 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2369 "\xff\xff\xff\xff\xff\xff\xff\xff",
2370 .klen = 56,
2371 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2372 .ilen = 8,
2373 .result = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2374 .rlen = 8,
2375 },
2376 };
2377
2378 static struct cipher_testvec bf_dec_tv_template[] = {
2379 { /* DES test vectors from OpenSSL */
2380 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2381 .klen = 8,
2382 .input = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2383 .ilen = 8,
2384 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2385 .rlen = 8,
2386 }, {
2387 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2388 .klen = 8,
2389 .input = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2390 .ilen = 8,
2391 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2392 .rlen = 8,
2393 }, {
2394 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2395 .klen = 8,
2396 .input = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2397 .ilen = 8,
2398 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2399 .rlen = 8,
2400 }, { /* Vary the keylength... */
2401 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2402 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2403 .klen = 16,
2404 .input = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2405 .ilen = 8,
2406 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2407 .rlen = 8,
2408 }, {
2409 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2410 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2411 "\x00\x11\x22\x33\x44",
2412 .klen = 21,
2413 .input = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2414 .ilen = 8,
2415 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2416 .rlen = 8,
2417 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
2418 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2419 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2420 "\x00\x11\x22\x33\x44\x55\x66\x77"
2421 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2422 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2423 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2424 "\xff\xff\xff\xff\xff\xff\xff\xff",
2425 .klen = 56,
2426 .input = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2427 .ilen = 8,
2428 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2429 .rlen = 8,
2430 },
2431 };
2432
2433 static struct cipher_testvec bf_cbc_enc_tv_template[] = {
2434 { /* From OpenSSL */
2435 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2436 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2437 .klen = 16,
2438 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2439 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2440 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2441 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2442 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2443 .ilen = 32,
2444 .result = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2445 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2446 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2447 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2448 .rlen = 32,
2449 },
2450 };
2451
2452 static struct cipher_testvec bf_cbc_dec_tv_template[] = {
2453 { /* From OpenSSL */
2454 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2455 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2456 .klen = 16,
2457 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2458 .input = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2459 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2460 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2461 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2462 .ilen = 32,
2463 .result = "\x37\x36\x35\x34\x33\x32\x31\x20"
2464 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2465 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2466 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2467 .rlen = 32,
2468 },
2469 };
2470
2471 /*
2472 * Twofish test vectors.
2473 */
2474 #define TF_ENC_TEST_VECTORS 3
2475 #define TF_DEC_TEST_VECTORS 3
2476 #define TF_CBC_ENC_TEST_VECTORS 4
2477 #define TF_CBC_DEC_TEST_VECTORS 4
2478
2479 static struct cipher_testvec tf_enc_tv_template[] = {
2480 {
2481 .key = zeroed_string,
2482 .klen = 16,
2483 .input = zeroed_string,
2484 .ilen = 16,
2485 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2486 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2487 .rlen = 16,
2488 }, {
2489 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2490 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2491 "\x00\x11\x22\x33\x44\x55\x66\x77",
2492 .klen = 24,
2493 .input = zeroed_string,
2494 .ilen = 16,
2495 .result = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2496 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2497 .rlen = 16,
2498 }, {
2499 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2500 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2501 "\x00\x11\x22\x33\x44\x55\x66\x77"
2502 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2503 .klen = 32,
2504 .input = zeroed_string,
2505 .ilen = 16,
2506 .result = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2507 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2508 .rlen = 16,
2509 },
2510 };
2511
2512 static struct cipher_testvec tf_dec_tv_template[] = {
2513 {
2514 .key = zeroed_string,
2515 .klen = 16,
2516 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2517 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2518 .ilen = 16,
2519 .result = zeroed_string,
2520 .rlen = 16,
2521 }, {
2522 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2523 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2524 "\x00\x11\x22\x33\x44\x55\x66\x77",
2525 .klen = 24,
2526 .input = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2527 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2528 .ilen = 16,
2529 .result = zeroed_string,
2530 .rlen = 16,
2531 }, {
2532 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2533 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2534 "\x00\x11\x22\x33\x44\x55\x66\x77"
2535 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2536 .klen = 32,
2537 .input = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2538 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2539 .ilen = 16,
2540 .result = zeroed_string,
2541 .rlen = 16,
2542 },
2543 };
2544
2545 static struct cipher_testvec tf_cbc_enc_tv_template[] = {
2546 { /* Generated with Nettle */
2547 .key = zeroed_string,
2548 .klen = 16,
2549 .iv = zeroed_string,
2550 .input = zeroed_string,
2551 .ilen = 16,
2552 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2553 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2554 .rlen = 16,
2555 }, {
2556 .key = zeroed_string,
2557 .klen = 16,
2558 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2559 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2560 .input = zeroed_string,
2561 .ilen = 16,
2562 .result = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2563 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2564 .rlen = 16,
2565 }, {
2566 .key = zeroed_string,
2567 .klen = 16,
2568 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2569 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2570 .input = zeroed_string,
2571 .ilen = 16,
2572 .result = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2573 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2574 .rlen = 16,
2575 }, {
2576 .key = zeroed_string,
2577 .klen = 16,
2578 .iv = zeroed_string,
2579 .input = zeroed_string,
2580 .ilen = 48,
2581 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2582 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2583 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2584 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2585 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2586 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2587 .rlen = 48,
2588 },
2589 };
2590
2591 static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2592 { /* Reverse of the first four above */
2593 .key = zeroed_string,
2594 .klen = 16,
2595 .iv = zeroed_string,
2596 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2597 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2598 .ilen = 16,
2599 .result = zeroed_string,
2600 .rlen = 16,
2601 }, {
2602 .key = zeroed_string,
2603 .klen = 16,
2604 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2605 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2606 .input = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2607 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2608 .ilen = 16,
2609 .result = zeroed_string,
2610 .rlen = 16,
2611 }, {
2612 .key = zeroed_string,
2613 .klen = 16,
2614 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2615 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2616 .input = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2617 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2618 .ilen = 16,
2619 .result = zeroed_string,
2620 .rlen = 16,
2621 }, {
2622 .key = zeroed_string,
2623 .klen = 16,
2624 .iv = zeroed_string,
2625 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2626 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2627 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2628 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2629 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2630 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2631 .ilen = 48,
2632 .result = zeroed_string,
2633 .rlen = 48,
2634 },
2635 };
2636
2637 /*
2638 * Serpent test vectors. These are backwards because Serpent writes
2639 * octet sequences in right-to-left mode.
2640 */
2641 #define SERPENT_ENC_TEST_VECTORS 4
2642 #define SERPENT_DEC_TEST_VECTORS 4
2643
2644 #define TNEPRES_ENC_TEST_VECTORS 4
2645 #define TNEPRES_DEC_TEST_VECTORS 4
2646
2647 static struct cipher_testvec serpent_enc_tv_template[] = {
2648 {
2649 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2650 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2651 .ilen = 16,
2652 .result = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2653 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2654 .rlen = 16,
2655 }, {
2656 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2657 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",