/crypto/testmgr.h
C Header | 9555 lines | 9183 code | 190 blank | 182 comment | 0 complexity | cabf10221da7621ef57f0015bd45d0ed MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0, AGPL-1.0
Large files files are truncated, but you can click here to view the full file
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 _CRYPTO_TESTMGR_H
16#define _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
29struct 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
40struct 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
54struct 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
73struct 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
85static char zeroed_string[48];
86
87/*
88 * MD4 test vectors from RFC1320
89 */
90#define MD4_TEST_VECTORS 7
91
92static 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
138static 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
184static 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
248static 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
312static 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
380static 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
448static 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
470static 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
496static 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
521static 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
570static 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
630static 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
728static 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
810static 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
879static 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
924static 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
969static 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#define GHASH_TEST_VECTORS 1
1007
1008static struct hash_testvec ghash_tv_template[] =
1009{
1010 {
1011
1012 .key = "\xdf\xa6\xbf\x4d\xed\x81\xdb\x03\xff\xca\xff\x95\xf8\x30\xf0\x61",
1013 .ksize = 16,
1014 .plaintext = "\x95\x2b\x2a\x56\xa5\x60\x04a\xc0\xb3\x2b\x66\x56\xa0\x5b\x40\xb6",
1015 .psize = 16,
1016 .digest = "\xda\x53\xeb\x0a\xd2\xc5\x5b\xb6"
1017 "\x4f\xc4\x80\x2c\xc3\xfe\xda\x60",
1018 },
1019};
1020
1021/*
1022 * HMAC-MD5 test vectors from RFC2202
1023 * (These need to be fixed to not use strlen).
1024 */
1025#define HMAC_MD5_TEST_VECTORS 7
1026
1027static struct hash_testvec hmac_md5_tv_template[] =
1028{
1029 {
1030 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1031 .ksize = 16,
1032 .plaintext = "Hi There",
1033 .psize = 8,
1034 .digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c"
1035 "\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
1036 }, {
1037 .key = "Jefe",
1038 .ksize = 4,
1039 .plaintext = "what do ya want for nothing?",
1040 .psize = 28,
1041 .digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03"
1042 "\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
1043 .np = 2,
1044 .tap = {14, 14}
1045 }, {
1046 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1047 .ksize = 16,
1048 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1049 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1050 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1051 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1052 .psize = 50,
1053 .digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88"
1054 "\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
1055 }, {
1056 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1057 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1058 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1059 .ksize = 25,
1060 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1061 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1062 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1063 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1064 .psize = 50,
1065 .digest = "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea"
1066 "\x3a\x75\x16\x47\x46\xff\xaa\x79",
1067 }, {
1068 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1069 .ksize = 16,
1070 .plaintext = "Test With Truncation",
1071 .psize = 20,
1072 .digest = "\x56\x46\x1e\xf2\x34\x2e\xdc\x00"
1073 "\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
1074 }, {
1075 .key = "\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"
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",
1082 .ksize = 80,
1083 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1084 .psize = 54,
1085 .digest = "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f"
1086 "\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
1087 }, {
1088 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1089 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1090 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1091 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1092 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1093 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1094 "\xaa\xaa",
1095 .ksize = 80,
1096 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1097 "Block-Size Data",
1098 .psize = 73,
1099 .digest = "\x6f\x63\x0f\xad\x67\xcd\xa0\xee"
1100 "\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
1101 },
1102};
1103
1104/*
1105 * HMAC-RIPEMD128 test vectors from RFC2286
1106 */
1107#define HMAC_RMD128_TEST_VECTORS 7
1108
1109static struct hash_testvec hmac_rmd128_tv_template[] = {
1110 {
1111 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1112 .ksize = 16,
1113 .plaintext = "Hi There",
1114 .psize = 8,
1115 .digest = "\xfb\xf6\x1f\x94\x92\xaa\x4b\xbf"
1116 "\x81\xc1\x72\xe8\x4e\x07\x34\xdb",
1117 }, {
1118 .key = "Jefe",
1119 .ksize = 4,
1120 .plaintext = "what do ya want for nothing?",
1121 .psize = 28,
1122 .digest = "\x87\x5f\x82\x88\x62\xb6\xb3\x34"
1123 "\xb4\x27\xc5\x5f\x9f\x7f\xf0\x9b",
1124 .np = 2,
1125 .tap = { 14, 14 },
1126 }, {
1127 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1128 .ksize = 16,
1129 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1130 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1131 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1132 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1133 .psize = 50,
1134 .digest = "\x09\xf0\xb2\x84\x6d\x2f\x54\x3d"
1135 "\xa3\x63\xcb\xec\x8d\x62\xa3\x8d",
1136 }, {
1137 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1138 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1139 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1140 .ksize = 25,
1141 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1142 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1143 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1144 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1145 .psize = 50,
1146 .digest = "\xbd\xbb\xd7\xcf\x03\xe4\x4b\x5a"
1147 "\xa6\x0a\xf8\x15\xbe\x4d\x22\x94",
1148 }, {
1149 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1150 .ksize = 16,
1151 .plaintext = "Test With Truncation",
1152 .psize = 20,
1153 .digest = "\xe7\x98\x08\xf2\x4b\x25\xfd\x03"
1154 "\x1c\x15\x5f\x0d\x55\x1d\x9a\x3a",
1155 }, {
1156 .key = "\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"
1160 "\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",
1163 .ksize = 80,
1164 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1165 .psize = 54,
1166 .digest = "\xdc\x73\x29\x28\xde\x98\x10\x4a"
1167 "\x1f\x59\xd3\x73\xc1\x50\xac\xbb",
1168 }, {
1169 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1170 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1171 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1172 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1173 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1174 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1175 "\xaa\xaa",
1176 .ksize = 80,
1177 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1178 "Block-Size Data",
1179 .psize = 73,
1180 .digest = "\x5c\x6b\xec\x96\x79\x3e\x16\xd4"
1181 "\x06\x90\xc2\x37\x63\x5f\x30\xc5",
1182 },
1183};
1184
1185/*
1186 * HMAC-RIPEMD160 test vectors from RFC2286
1187 */
1188#define HMAC_RMD160_TEST_VECTORS 7
1189
1190static struct hash_testvec hmac_rmd160_tv_template[] = {
1191 {
1192 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1193 .ksize = 20,
1194 .plaintext = "Hi There",
1195 .psize = 8,
1196 .digest = "\x24\xcb\x4b\xd6\x7d\x20\xfc\x1a\x5d\x2e"
1197 "\xd7\x73\x2d\xcc\x39\x37\x7f\x0a\x56\x68",
1198 }, {
1199 .key = "Jefe",
1200 .ksize = 4,
1201 .plaintext = "what do ya want for nothing?",
1202 .psize = 28,
1203 .digest = "\xdd\xa6\xc0\x21\x3a\x48\x5a\x9e\x24\xf4"
1204 "\x74\x20\x64\xa7\xf0\x33\xb4\x3c\x40\x69",
1205 .np = 2,
1206 .tap = { 14, 14 },
1207 }, {
1208 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1209 .ksize = 20,
1210 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1211 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1212 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1213 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1214 .psize = 50,
1215 .digest = "\xb0\xb1\x05\x36\x0d\xe7\x59\x96\x0a\xb4"
1216 "\xf3\x52\x98\xe1\x16\xe2\x95\xd8\xe7\xc1",
1217 }, {
1218 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1219 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1220 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1221 .ksize = 25,
1222 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1223 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1224 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1225 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1226 .psize = 50,
1227 .digest = "\xd5\xca\x86\x2f\x4d\x21\xd5\xe6\x10\xe1"
1228 "\x8b\x4c\xf1\xbe\xb9\x7a\x43\x65\xec\xf4",
1229 }, {
1230 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1231 .ksize = 20,
1232 .plaintext = "Test With Truncation",
1233 .psize = 20,
1234 .digest = "\x76\x19\x69\x39\x78\xf9\x1d\x90\x53\x9a"
1235 "\xe7\x86\x50\x0f\xf3\xd8\xe0\x51\x8e\x39",
1236 }, {
1237 .key = "\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"
1241 "\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",
1244 .ksize = 80,
1245 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1246 .psize = 54,
1247 .digest = "\x64\x66\xca\x07\xac\x5e\xac\x29\xe1\xbd"
1248 "\x52\x3e\x5a\xda\x76\x05\xb7\x91\xfd\x8b",
1249 }, {
1250 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1251 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1252 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1253 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1254 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1255 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1256 "\xaa\xaa",
1257 .ksize = 80,
1258 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1259 "Block-Size Data",
1260 .psize = 73,
1261 .digest = "\x69\xea\x60\x79\x8d\x71\x61\x6c\xce\x5f"
1262 "\xd0\x87\x1e\x23\x75\x4c\xd7\x5d\x5a\x0a",
1263 },
1264};
1265
1266/*
1267 * HMAC-SHA1 test vectors from RFC2202
1268 */
1269#define HMAC_SHA1_TEST_VECTORS 7
1270
1271static struct hash_testvec hmac_sha1_tv_template[] = {
1272 {
1273 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1274 .ksize = 20,
1275 .plaintext = "Hi There",
1276 .psize = 8,
1277 .digest = "\xb6\x17\x31\x86\x55\x05\x72\x64"
1278 "\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1"
1279 "\x46\xbe",
1280 }, {
1281 .key = "Jefe",
1282 .ksize = 4,
1283 .plaintext = "what do ya want for nothing?",
1284 .psize = 28,
1285 .digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74"
1286 "\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
1287 .np = 2,
1288 .tap = { 14, 14 }
1289 }, {
1290 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1291 .ksize = 20,
1292 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1293 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1294 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1295 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1296 .psize = 50,
1297 .digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3"
1298 "\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
1299 }, {
1300 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1301 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1302 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1303 .ksize = 25,
1304 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1305 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1306 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1307 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1308 .psize = 50,
1309 .digest = "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84"
1310 "\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
1311 }, {
1312 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1313 .ksize = 20,
1314 .plaintext = "Test With Truncation",
1315 .psize = 20,
1316 .digest = "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2"
1317 "\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
1318 }, {
1319 .key = "\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"
1323 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1324 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1325 "\xaa\xaa",
1326 .ksize = 80,
1327 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1328 .psize = 54,
1329 .digest = "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70"
1330 "\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
1331 }, {
1332 .key = "\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\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1336 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1337 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1338 "\xaa\xaa",
1339 .ksize = 80,
1340 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1341 "Block-Size Data",
1342 .psize = 73,
1343 .digest = "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b"
1344 "\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
1345 },
1346};
1347
1348
1349/*
1350 * SHA224 HMAC test vectors from RFC4231
1351 */
1352#define HMAC_SHA224_TEST_VECTORS 4
1353
1354static struct hash_testvec hmac_sha224_tv_template[] = {
1355 {
1356 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1357 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1358 "\x0b\x0b\x0b\x0b",
1359 .ksize = 20,
1360 /* ("Hi There") */
1361 .plaintext = "\x48\x69\x20\x54\x68\x65\x72\x65",
1362 .psize = 8,
1363 .digest = "\x89\x6f\xb1\x12\x8a\xbb\xdf\x19"
1364 "\x68\x32\x10\x7c\xd4\x9d\xf3\x3f"
1365 "\x47\xb4\xb1\x16\x99\x12\xba\x4f"
1366 "\x53\x68\x4b\x22",
1367 }, {
1368 .key = "Jefe",
1369 .ksize = 4,
1370 /* ("what do ya want for nothing?") */
1371 .plaintext = "\x77\x68\x61\x74\x20\x64\x6f\x20"
1372 "\x79\x61\x20\x77\x61\x6e\x74\x20"
1373 "\x66\x6f\x72\x20\x6e\x6f\x74\x68"
1374 "\x69\x6e\x67\x3f",
1375 .psize = 28,
1376 .digest = "\xa3\x0e\x01\x09\x8b\xc6\xdb\xbf"
1377 "\x45\x69\x0f\x3a\x7e\x9e\x6d\x0f"
1378 "\x8b\xbe\xa2\xa3\x9e\x61\x48\x00"
1379 "\x8f\xd0\x5e\x44",
1380 .np = 4,
1381 .tap = { 7, 7, 7, 7 }
1382 }, {
1383 .key = "\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\xaa\xaa\xaa\xaa\xaa"
1398 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1399 "\xaa\xaa\xaa",
1400 .ksize = 131,
1401 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
1402 .plaintext = "\x54\x65\x73\x74\x20\x55\x73\x69"
1403 "\x6e\x67\x20\x4c\x61\x72\x67\x65"
1404 "\x72\x20\x54\x68\x61\x6e\x20\x42"
1405 "\x6c\x6f\x63\x6b\x2d\x53\x69\x7a"
1406 "\x65\x20\x4b\x65\x79\x20\x2d\x20"
1407 "\x48\x61\x73\x68\x20\x4b\x65\x79"
1408 "\x20\x46\x69\x72\x73\x74",
1409 .psize = 54,
1410 .digest = "\x95\xe9\xa0\xdb\x96\x20\x95\xad"
1411 "\xae\xbe\x9b\x2d\x6f\x0d\xbc\xe2"
1412 "\xd4\x99\xf1\x12\xf2\xd2\xb7\x27"
1413 "\x3f\xa6\x87\x0e",
1414 }, {
1415 .key = "\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\xaa\xaa\xaa\xaa\xaa"
1430 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1431 "\xaa\xaa\xaa",
1432 .ksize = 131,
1433 /* ("This is a test using a larger than block-size key and a")
1434 (" larger than block-size data. The key needs to be")
1435 (" hashed before being used by the HMAC algorithm.") */
1436 .plaintext = "\x54\x68\x69\x73\x20\x69\x73\x20"
1437 "\x61\x20\x74\x65\x73\x74\x20\x75"
1438 "\x73\x69\x6e\x67\x20\x61\x20\x6c"
1439 "\x61\x72\x67\x65\x72\x20\x74\x68"
1440 "\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1441 "\x2d\x73\x69\x7a\x65\x20\x6b\x65"
1442 "\x79\x20\x61\x6e\x64\x20\x61\x20"
1443 "\x6c\x61\x72\x67\x65\x72\x20\x74"
1444 "\x68\x61\x6e\x20\x62\x6c\x6f\x63"
1445 "\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1446 "\x61\x74\x61\x2e\x20\x54\x68\x65"
1447 "\x20\x6b\x65\x79\x20\x6e\x65\x65"
1448 "\x64\x73\x20\x74\x6f\x20\x62\x65"
1449 "\x20\x68\x61\x73\x68\x65\x64\x20"
1450 "\x62\x65\x66\x6f\x72\x65\x20\x62"
1451 "\x65\x69\x6e\x67\x20\x75\x73\x65"
1452 "\x64\x20\x62\x79\x20\x74\x68\x65"
1453 "\x20\x48\x4d\x41\x43\x20\x61\x6c"
1454 "\x67\x6f\x72\x69\x74\x68\x6d\x2e",
1455 .psize = 152,
1456 .digest = "\x3a\x85\x41\x66\xac\x5d\x9f\x02"
1457 "\x3f\x54\xd5\x17\xd0\xb3\x9d\xbd"
1458 "\x94\x67\x70\xdb\x9c\x2b\x95\xc9"
1459 "\xf6\xf5\x65\xd1",
1460 },
1461};
1462
1463/*
1464 * HMAC-SHA256 test vectors from
1465 * draft-ietf-ipsec-ciph-sha-256-01.txt
1466 */
1467#define HMAC_SHA256_TEST_VECTORS 10
1468
1469static struct hash_testvec hmac_sha256_tv_template[] = {
1470 {
1471 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1472 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1473 "\x11\x12\x13\x14\x15\x16\x17\x18"
1474 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1475 .ksize = 32,
1476 .plaintext = "abc",
1477 .psize = 3,
1478 .digest = "\xa2\x1b\x1f\x5d\x4c\xf4\xf7\x3a"
1479 "\x4d\xd9\x39\x75\x0f\x7a\x06\x6a"
1480 "\x7f\x98\xcc\x13\x1c\xb1\x6a\x66"
1481 "\x92\x75\x90\x21\xcf\xab\x81\x81",
1482 }, {
1483 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1484 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1485 "\x11\x12\x13\x14\x15\x16\x17\x18"
1486 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1487 .ksize = 32,
1488 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1489 .psize = 56,
1490 .digest = "\x10\x4f\xdc\x12\x57\x32\x8f\x08"
1491 "\x18\x4b\xa7\x31\x31\xc5\x3c\xae"
1492 "\xe6\x98\xe3\x61\x19\x42\x11\x49"
1493 "\xea\x8c\x71\x24\x56\x69\x7d\x30",
1494 }, {
1495 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1496 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1497 "\x11\x12\x13\x14\x15\x16\x17\x18"
1498 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1499 .ksize = 32,
1500 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1501 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1502 .psize = 112,
1503 .digest = "\x47\x03\x05\xfc\x7e\x40\xfe\x34"
1504 "\xd3\xee\xb3\xe7\x73\xd9\x5a\xab"
1505 "\x73\xac\xf0\xfd\x06\x04\x47\xa5"
1506 "\xeb\x45\x95\xbf\x33\xa9\xd1\xa3",
1507 }, {
1508 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1509 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1510 "\x0b\x0b\x0b\x0b\x0b\x0b",
1511 .ksize = 32,
1512 .plaintext = "Hi There",
1513 .psize = 8,
1514 .digest = "\x19\x8a\x60\x7e\xb4\x4b\xfb\xc6"
1515 "\x99\x03\xa0\xf1\xcf\x2b\xbd\xc5"
1516 "\xba\x0a\xa3\xf3\xd9\xae\x3c\x1c"
1517 "\x7a\x3b\x16\x96\xa0\xb6\x8c\xf7",
1518 }, {
1519 .key = "Jefe",
1520 .ksize = 4,
1521 .plaintext = "what do ya want for nothing?",
1522 .psize = 28,
1523 .digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e"
1524 "\x6a\x04\x24\x26\x08\x95\x75\xc7"
1525 "\x5a\x00\x3f\x08\x9d\x27\x39\x83"
1526 "\x9d\xec\x58\xb9\x64\xec\x38\x43",
1527 .np = 2,
1528 .tap = { 14, 14 }
1529 }, {
1530 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1531 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1532 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1533 .ksize = 32,
1534 .plaintext = "\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\xdd"
1536 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1537 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1538 .psize = 50,
1539 .digest = "\xcd\xcb\x12\x20\xd1\xec\xcc\xea"
1540 "\x91\xe5\x3a\xba\x30\x92\xf9\x62"
1541 "\xe5\x49\xfe\x6c\xe9\xed\x7f\xdc"
1542 "\x43\x19\x1f\xbd\xe4\x5c\x30\xb0",
1543 }, {
1544 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1545 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1546 "\x11\x12\x13\x14\x15\x16\x17\x18"
1547 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
1548 "\x21\x22\x23\x24\x25",
1549 .ksize = 37,
1550 .plaintext = "\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\xcd"
1552 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1553 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1554 .psize = 50,
1555 .digest = "\xd4\x63\x3c\x17\xf6\xfb\x8d\x74"
1556 "\x4c\x66\xde\xe0\xf8\xf0\x74\x55"
1557 "\x6e\xc4\xaf\x55\xef\x07\x99\x85"
1558 "\x41\x46\x8e\xb4\x9b\xd2\xe9\x17",
1559 }, {
1560 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1561 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1562 "\x0c\x0c\x0c\x0c\x0c\x0c",
1563 .ksize = 32,
1564 .plaintext = "Test With Truncation",
1565 .psize = 20,
1566 .digest = "\x75\x46\xaf\x01\x84\x1f\xc0\x9b"
1567 "\x1a\xb9\xc3\x74\x9a\x5f\x1c\x17"
1568 "\xd4\xf5\x89\x66\x8a\x58\x7b\x27"
1569 "\x00\xa9\xc9\x7c\x11\x93\xcf\x42",
1570 }, {
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\…
Large files files are truncated, but you can click here to view the full file