]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - crypto/tcrypt.h
[CRYPTO] gcm: New algorithm
[mirror_ubuntu-zesty-kernel.git] / crypto / tcrypt.h
1 /*
2 * Quick & dirty crypto testing module.
3 *
4 * This will only exist until we have a better testing mechanism
5 * (e.g. a char device).
6 *
7 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
8 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
9 * Copyright (c) 2007 Nokia Siemens Networks
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the Free
13 * Software Foundation; either version 2 of the License, or (at your option)
14 * any later version.
15 *
16 * 2007-11-13 Added GCM tests
17 * 2007-11-13 Added AEAD support
18 * 2006-12-07 Added SHA384 HMAC and SHA512 HMAC tests
19 * 2004-08-09 Cipher speed tests by Reyk Floeter <reyk@vantronix.net>
20 * 2003-09-14 Changes by Kartikey Mahendra Bhatt
21 *
22 */
23 #ifndef _CRYPTO_TCRYPT_H
24 #define _CRYPTO_TCRYPT_H
25
26 #define MAX_DIGEST_SIZE 64
27 #define MAX_TAP 8
28
29 #define MAX_KEYLEN 56
30 #define MAX_IVLEN 32
31
32 struct hash_testvec {
33 /* only used with keyed hash algorithms */
34 char key[132] __attribute__ ((__aligned__(4)));
35 char plaintext[240];
36 char digest[MAX_DIGEST_SIZE];
37 unsigned char tap[MAX_TAP];
38 unsigned char psize;
39 unsigned char np;
40 unsigned char ksize;
41 };
42
43 struct cipher_testvec {
44 char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
45 char iv[MAX_IVLEN];
46 char input[512];
47 char result[512];
48 unsigned char tap[MAX_TAP];
49 int np;
50 unsigned char fail;
51 unsigned char wk; /* weak key flag */
52 unsigned char klen;
53 unsigned short ilen;
54 unsigned short rlen;
55 };
56
57 struct aead_testvec {
58 char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
59 char iv[MAX_IVLEN];
60 char input[512];
61 char assoc[512];
62 char result[512];
63 char tag[128];
64 unsigned char tap[MAX_TAP];
65 unsigned char atap[MAX_TAP];
66 int np;
67 int anp;
68 unsigned char fail;
69 unsigned char wk; /* weak key flag */
70 unsigned char klen;
71 unsigned short ilen;
72 unsigned short alen;
73 unsigned short rlen;
74 unsigned short tlen;
75 };
76
77 struct cipher_speed {
78 unsigned char klen;
79 unsigned int blen;
80 };
81
82 struct hash_speed {
83 unsigned int blen; /* buffer length */
84 unsigned int plen; /* per-update length */
85 };
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 = { 0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31,
96 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0 },
97 }, {
98 .plaintext = "a",
99 .psize = 1,
100 .digest = { 0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46,
101 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24 },
102 }, {
103 .plaintext = "abc",
104 .psize = 3,
105 .digest = { 0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52,
106 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d },
107 }, {
108 .plaintext = "message digest",
109 .psize = 14,
110 .digest = { 0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8,
111 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b },
112 }, {
113 .plaintext = "abcdefghijklmnopqrstuvwxyz",
114 .psize = 26,
115 .digest = { 0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd,
116 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9 },
117 .np = 2,
118 .tap = { 13, 13 },
119 }, {
120 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
121 .psize = 62,
122 .digest = { 0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35,
123 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4 },
124 }, {
125 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
126 "45678901234567890",
127 .psize = 80,
128 .digest = { 0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19,
129 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36 },
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 = { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04,
141 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e },
142 }, {
143 .plaintext = "a",
144 .psize = 1,
145 .digest = { 0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8,
146 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 },
147 }, {
148 .plaintext = "abc",
149 .psize = 3,
150 .digest = { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0,
151 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 },
152 }, {
153 .plaintext = "message digest",
154 .psize = 14,
155 .digest = { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d,
156 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 },
157 }, {
158 .plaintext = "abcdefghijklmnopqrstuvwxyz",
159 .psize = 26,
160 .digest = { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00,
161 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b },
162 .np = 2,
163 .tap = {13, 13}
164 }, {
165 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
166 .psize = 62,
167 .digest = { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5,
168 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f },
169 }, {
170 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
171 "345678901234567890",
172 .psize = 80,
173 .digest = { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55,
174 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a },
175 }
176 };
177
178 /*
179 * SHA1 test vectors from from FIPS PUB 180-1
180 */
181 #define SHA1_TEST_VECTORS 2
182
183 static struct hash_testvec sha1_tv_template[] = {
184 {
185 .plaintext = "abc",
186 .psize = 3,
187 .digest = { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e,
188 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 0x9c, 0xd0, 0xd8, 0x9d },
189 }, {
190 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
191 .psize = 56,
192 .digest = { 0x84, 0x98, 0x3e, 0x44, 0x1c, 0x3b, 0xd2, 0x6e, 0xba, 0xae,
193 0x4a, 0xa1, 0xf9, 0x51, 0x29, 0xe5, 0xe5, 0x46, 0x70, 0xf1 },
194 .np = 2,
195 .tap = { 28, 28 }
196 }
197 };
198
199
200 /*
201 * SHA224 test vectors from from FIPS PUB 180-2
202 */
203 #define SHA224_TEST_VECTORS 2
204
205 static struct hash_testvec sha224_tv_template[] = {
206 {
207 .plaintext = "abc",
208 .psize = 3,
209 .digest = { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22,
210 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3,
211 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7,
212 0xE3, 0x6C, 0x9D, 0xA7},
213 }, {
214 .plaintext =
215 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
216 .psize = 56,
217 .digest = { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC,
218 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50,
219 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19,
220 0x52, 0x52, 0x25, 0x25 },
221 .np = 2,
222 .tap = { 28, 28 }
223 }
224 };
225
226 /*
227 * SHA256 test vectors from from NIST
228 */
229 #define SHA256_TEST_VECTORS 2
230
231 static struct hash_testvec sha256_tv_template[] = {
232 {
233 .plaintext = "abc",
234 .psize = 3,
235 .digest = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
236 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
237 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
238 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad },
239 }, {
240 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
241 .psize = 56,
242 .digest = { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
243 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
244 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
245 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 },
246 .np = 2,
247 .tap = { 28, 28 }
248 },
249 };
250
251 /*
252 * SHA384 test vectors from from NIST and kerneli
253 */
254 #define SHA384_TEST_VECTORS 4
255
256 static struct hash_testvec sha384_tv_template[] = {
257 {
258 .plaintext= "abc",
259 .psize = 3,
260 .digest = { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
261 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
262 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
263 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
264 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
265 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 },
266 }, {
267 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
268 .psize = 56,
269 .digest = { 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39,
270 0x37, 0x07, 0xa6, 0x5b, 0x1b, 0x47, 0x09, 0x39,
271 0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf, 0x05, 0xab,
272 0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6,
273 0xb0, 0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f,
274 0x5f, 0xe9, 0x5b, 0x1f, 0xe3, 0xc8, 0x45, 0x2b},
275 }, {
276 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
277 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
278 .psize = 112,
279 .digest = { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
280 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
281 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
282 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
283 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
284 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 },
285 }, {
286 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
287 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
288 .psize = 104,
289 .digest = { 0x3d, 0x20, 0x89, 0x73, 0xab, 0x35, 0x08, 0xdb,
290 0xbd, 0x7e, 0x2c, 0x28, 0x62, 0xba, 0x29, 0x0a,
291 0xd3, 0x01, 0x0e, 0x49, 0x78, 0xc1, 0x98, 0xdc,
292 0x4d, 0x8f, 0xd0, 0x14, 0xe5, 0x82, 0x82, 0x3a,
293 0x89, 0xe1, 0x6f, 0x9b, 0x2a, 0x7b, 0xbc, 0x1a,
294 0xc9, 0x38, 0xe2, 0xd1, 0x99, 0xe8, 0xbe, 0xa4 },
295 .np = 4,
296 .tap = { 26, 26, 26, 26 }
297 },
298 };
299
300 /*
301 * SHA512 test vectors from from NIST and kerneli
302 */
303 #define SHA512_TEST_VECTORS 4
304
305 static struct hash_testvec sha512_tv_template[] = {
306 {
307 .plaintext = "abc",
308 .psize = 3,
309 .digest = { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
310 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
311 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
312 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
313 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
314 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
315 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
316 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f },
317 }, {
318 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
319 .psize = 56,
320 .digest = { 0x20, 0x4a, 0x8f, 0xc6, 0xdd, 0xa8, 0x2f, 0x0a,
321 0x0c, 0xed, 0x7b, 0xeb, 0x8e, 0x08, 0xa4, 0x16,
322 0x57, 0xc1, 0x6e, 0xf4, 0x68, 0xb2, 0x28, 0xa8,
323 0x27, 0x9b, 0xe3, 0x31, 0xa7, 0x03, 0xc3, 0x35,
324 0x96, 0xfd, 0x15, 0xc1, 0x3b, 0x1b, 0x07, 0xf9,
325 0xaa, 0x1d, 0x3b, 0xea, 0x57, 0x78, 0x9c, 0xa0,
326 0x31, 0xad, 0x85, 0xc7, 0xa7, 0x1d, 0xd7, 0x03,
327 0x54, 0xec, 0x63, 0x12, 0x38, 0xca, 0x34, 0x45 },
328 }, {
329 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
330 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
331 .psize = 112,
332 .digest = { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
333 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
334 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
335 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
336 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
337 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
338 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
339 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 },
340 }, {
341 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
342 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
343 .psize = 104,
344 .digest = { 0x93, 0x0d, 0x0c, 0xef, 0xcb, 0x30, 0xff, 0x11,
345 0x33, 0xb6, 0x89, 0x81, 0x21, 0xf1, 0xcf, 0x3d,
346 0x27, 0x57, 0x8a, 0xfc, 0xaf, 0xe8, 0x67, 0x7c,
347 0x52, 0x57, 0xcf, 0x06, 0x99, 0x11, 0xf7, 0x5d,
348 0x8f, 0x58, 0x31, 0xb5, 0x6e, 0xbf, 0xda, 0x67,
349 0xb2, 0x78, 0xe6, 0x6d, 0xff, 0x8b, 0x84, 0xfe,
350 0x2b, 0x28, 0x70, 0xf7, 0x42, 0xa5, 0x80, 0xd8,
351 0xed, 0xb4, 0x19, 0x87, 0x23, 0x28, 0x50, 0xc9 },
352 .np = 4,
353 .tap = { 26, 26, 26, 26 }
354 },
355 };
356
357
358 /*
359 * WHIRLPOOL test vectors from Whirlpool package
360 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
361 * submission
362 */
363 #define WP512_TEST_VECTORS 8
364
365 static struct hash_testvec wp512_tv_template[] = {
366 {
367 .plaintext = "",
368 .psize = 0,
369 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
370 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
371 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
372 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
373 0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
374 0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57,
375 0xEA, 0x89, 0x64, 0xE5, 0x9B, 0x63, 0xD9, 0x37,
376 0x08, 0xB1, 0x38, 0xCC, 0x42, 0xA6, 0x6E, 0xB3 },
377
378
379 }, {
380 .plaintext = "a",
381 .psize = 1,
382 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
383 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
384 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
385 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
386 0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
387 0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59,
388 0x1A, 0x92, 0x20, 0x0D, 0x56, 0x01, 0x95, 0xE5,
389 0x3B, 0x47, 0x85, 0x84, 0xFD, 0xAE, 0x23, 0x1A },
390 }, {
391 .plaintext = "abc",
392 .psize = 3,
393 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
394 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
395 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
396 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
397 0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
398 0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6,
399 0xC7, 0x97, 0xFC, 0x9D, 0x95, 0xD8, 0xB5, 0x82,
400 0xD2, 0x25, 0x29, 0x20, 0x76, 0xD4, 0xEE, 0xF5 },
401 }, {
402 .plaintext = "message digest",
403 .psize = 14,
404 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
405 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
406 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
407 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
408 0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
409 0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6,
410 0x92, 0xED, 0x92, 0x00, 0x52, 0x83, 0x8F, 0x33,
411 0x62, 0xE8, 0x6D, 0xBD, 0x37, 0xA8, 0x90, 0x3E },
412 }, {
413 .plaintext = "abcdefghijklmnopqrstuvwxyz",
414 .psize = 26,
415 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
416 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
417 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
418 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
419 0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
420 0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6,
421 0xF6, 0x8F, 0x67, 0x3E, 0x72, 0x07, 0x86, 0x5D,
422 0x5D, 0x98, 0x19, 0xA3, 0xDB, 0xA4, 0xEB, 0x3B },
423 }, {
424 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
425 "abcdefghijklmnopqrstuvwxyz0123456789",
426 .psize = 62,
427 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
428 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
429 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
430 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
431 0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
432 0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6,
433 0x55, 0x17, 0xCC, 0x87, 0x9D, 0x7B, 0x96, 0x21,
434 0x42, 0xC6, 0x5F, 0x5A, 0x7A, 0xF0, 0x14, 0x67 },
435 }, {
436 .plaintext = "1234567890123456789012345678901234567890"
437 "1234567890123456789012345678901234567890",
438 .psize = 80,
439 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
440 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
441 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
442 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
443 0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
444 0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A,
445 0x2C, 0x60, 0x48, 0x1E, 0x88, 0xC5, 0xA2, 0x0B,
446 0x2C, 0x2A, 0x80, 0xCF, 0x3A, 0x9A, 0x08, 0x3B },
447 }, {
448 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
449 .psize = 32,
450 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
451 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
452 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
453 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
454 0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
455 0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56,
456 0x93, 0x9B, 0xAA, 0xA0, 0xAD, 0xFF, 0x9A, 0xE6,
457 0x74, 0x5B, 0x7B, 0x18, 0x1C, 0x3B, 0xE3, 0xFD },
458 },
459 };
460
461 #define WP384_TEST_VECTORS 8
462
463 static struct hash_testvec wp384_tv_template[] = {
464 {
465 .plaintext = "",
466 .psize = 0,
467 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
468 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
469 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
470 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
471 0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
472 0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57 },
473
474
475 }, {
476 .plaintext = "a",
477 .psize = 1,
478 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
479 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
480 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
481 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
482 0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
483 0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59 },
484 }, {
485 .plaintext = "abc",
486 .psize = 3,
487 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
488 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
489 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
490 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
491 0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
492 0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6 },
493 }, {
494 .plaintext = "message digest",
495 .psize = 14,
496 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
497 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
498 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
499 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
500 0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
501 0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6 },
502 }, {
503 .plaintext = "abcdefghijklmnopqrstuvwxyz",
504 .psize = 26,
505 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
506 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
507 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
508 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
509 0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
510 0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6 },
511 }, {
512 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
513 "abcdefghijklmnopqrstuvwxyz0123456789",
514 .psize = 62,
515 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
516 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
517 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
518 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
519 0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
520 0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6 },
521 }, {
522 .plaintext = "1234567890123456789012345678901234567890"
523 "1234567890123456789012345678901234567890",
524 .psize = 80,
525 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
526 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
527 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
528 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
529 0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
530 0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A },
531 }, {
532 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
533 .psize = 32,
534 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
535 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
536 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
537 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
538 0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
539 0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56 },
540 },
541 };
542
543 #define WP256_TEST_VECTORS 8
544
545 static struct hash_testvec wp256_tv_template[] = {
546 {
547 .plaintext = "",
548 .psize = 0,
549 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
550 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
551 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
552 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7 },
553
554
555 }, {
556 .plaintext = "a",
557 .psize = 1,
558 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
559 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
560 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
561 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42 },
562 }, {
563 .plaintext = "abc",
564 .psize = 3,
565 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
566 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
567 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
568 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C },
569 }, {
570 .plaintext = "message digest",
571 .psize = 14,
572 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
573 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
574 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
575 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B },
576 }, {
577 .plaintext = "abcdefghijklmnopqrstuvwxyz",
578 .psize = 26,
579 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
580 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
581 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
582 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B },
583 }, {
584 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
585 "abcdefghijklmnopqrstuvwxyz0123456789",
586 .psize = 62,
587 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
588 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
589 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
590 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E },
591 }, {
592 .plaintext = "1234567890123456789012345678901234567890"
593 "1234567890123456789012345678901234567890",
594 .psize = 80,
595 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
596 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
597 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
598 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29 },
599 }, {
600 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
601 .psize = 32,
602 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
603 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
604 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
605 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69 },
606 },
607 };
608
609 /*
610 * TIGER test vectors from Tiger website
611 */
612 #define TGR192_TEST_VECTORS 6
613
614 static struct hash_testvec tgr192_tv_template[] = {
615 {
616 .plaintext = "",
617 .psize = 0,
618 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
619 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
620 0xf3, 0x73, 0xde, 0x2d, 0x49, 0x58, 0x4e, 0x7a },
621 }, {
622 .plaintext = "abc",
623 .psize = 3,
624 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
625 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
626 0x93, 0x5f, 0x7b, 0x95, 0x1c, 0x13, 0x29, 0x51 },
627 }, {
628 .plaintext = "Tiger",
629 .psize = 5,
630 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
631 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
632 0x37, 0x79, 0x0c, 0x11, 0x6f, 0x9d, 0x2b, 0xdf },
633 }, {
634 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
635 .psize = 64,
636 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
637 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
638 0xb5, 0x86, 0x44, 0x50, 0x34, 0xa5, 0xa3, 0x86 },
639 }, {
640 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
641 .psize = 64,
642 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
643 0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
644 0x57, 0x89, 0x65, 0x65, 0x97, 0x5f, 0x91, 0x97 },
645 }, {
646 .plaintext = "Tiger - A Fast New Hash Function, "
647 "by Ross Anderson and Eli Biham, "
648 "proceedings of Fast Software Encryption 3, "
649 "Cambridge, 1996.",
650 .psize = 125,
651 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
652 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
653 0xdd, 0x68, 0x15, 0x1d, 0x50, 0x39, 0x74, 0xfc },
654 },
655 };
656
657 #define TGR160_TEST_VECTORS 6
658
659 static struct hash_testvec tgr160_tv_template[] = {
660 {
661 .plaintext = "",
662 .psize = 0,
663 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
664 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
665 0xf3, 0x73, 0xde, 0x2d },
666 }, {
667 .plaintext = "abc",
668 .psize = 3,
669 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
670 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
671 0x93, 0x5f, 0x7b, 0x95 },
672 }, {
673 .plaintext = "Tiger",
674 .psize = 5,
675 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
676 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
677 0x37, 0x79, 0x0c, 0x11 },
678 }, {
679 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
680 .psize = 64,
681 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
682 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
683 0xb5, 0x86, 0x44, 0x50 },
684 }, {
685 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
686 .psize = 64,
687 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
688 0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
689 0x57, 0x89, 0x65, 0x65 },
690 }, {
691 .plaintext = "Tiger - A Fast New Hash Function, "
692 "by Ross Anderson and Eli Biham, "
693 "proceedings of Fast Software Encryption 3, "
694 "Cambridge, 1996.",
695 .psize = 125,
696 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
697 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
698 0xdd, 0x68, 0x15, 0x1d },
699 },
700 };
701
702 #define TGR128_TEST_VECTORS 6
703
704 static struct hash_testvec tgr128_tv_template[] = {
705 {
706 .plaintext = "",
707 .psize = 0,
708 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
709 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f },
710 }, {
711 .plaintext = "abc",
712 .psize = 3,
713 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
714 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf },
715 }, {
716 .plaintext = "Tiger",
717 .psize = 5,
718 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
719 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec },
720 }, {
721 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
722 .psize = 64,
723 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
724 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e },
725 }, {
726 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
727 .psize = 64,
728 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
729 0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9 },
730 }, {
731 .plaintext = "Tiger - A Fast New Hash Function, "
732 "by Ross Anderson and Eli Biham, "
733 "proceedings of Fast Software Encryption 3, "
734 "Cambridge, 1996.",
735 .psize = 125,
736 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
737 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24 },
738 },
739 };
740
741 /*
742 * HMAC-MD5 test vectors from RFC2202
743 * (These need to be fixed to not use strlen).
744 */
745 #define HMAC_MD5_TEST_VECTORS 7
746
747 static struct hash_testvec hmac_md5_tv_template[] =
748 {
749 {
750 .key = { [0 ... 15] = 0x0b },
751 .ksize = 16,
752 .plaintext = "Hi There",
753 .psize = 8,
754 .digest = { 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c,
755 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d },
756 }, {
757 .key = { 'J', 'e', 'f', 'e' },
758 .ksize = 4,
759 .plaintext = "what do ya want for nothing?",
760 .psize = 28,
761 .digest = { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03,
762 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 },
763 .np = 2,
764 .tap = {14, 14}
765 }, {
766 .key = { [0 ... 15] = 0xaa },
767 .ksize = 16,
768 .plaintext = { [0 ... 49] = 0xdd },
769 .psize = 50,
770 .digest = { 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88,
771 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 },
772 }, {
773 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
774 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
775 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, },
776 .ksize = 25,
777 .plaintext = { [0 ... 49] = 0xcd },
778 .psize = 50,
779 .digest = { 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea,
780 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 },
781 }, {
782 .key = { [0 ... 15] = 0x0c },
783 .ksize = 16,
784 .plaintext = "Test With Truncation",
785 .psize = 20,
786 .digest = { 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00,
787 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c },
788 }, {
789 .key = { [0 ... 79] = 0xaa },
790 .ksize = 80,
791 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
792 .psize = 54,
793 .digest = { 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,
794 0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd },
795 }, {
796 .key = { [0 ... 79] = 0xaa },
797 .ksize = 80,
798 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
799 "Block-Size Data",
800 .psize = 73,
801 .digest = { 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,
802 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e },
803 },
804 };
805
806 /*
807 * HMAC-SHA1 test vectors from RFC2202
808 */
809 #define HMAC_SHA1_TEST_VECTORS 7
810
811 static struct hash_testvec hmac_sha1_tv_template[] = {
812 {
813 .key = { [0 ... 19] = 0x0b },
814 .ksize = 20,
815 .plaintext = "Hi There",
816 .psize = 8,
817 .digest = { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64,
818 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1,
819 0x46, 0xbe },
820 }, {
821 .key = { 'J', 'e', 'f', 'e' },
822 .ksize = 4,
823 .plaintext = "what do ya want for nothing?",
824 .psize = 28,
825 .digest = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
826 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 },
827 .np = 2,
828 .tap = { 14, 14 }
829 }, {
830 .key = { [0 ... 19] = 0xaa },
831 .ksize = 20,
832 .plaintext = { [0 ... 49] = 0xdd },
833 .psize = 50,
834 .digest = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
835 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 },
836 }, {
837 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
838 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
839 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 },
840 .ksize = 25,
841 .plaintext = { [0 ... 49] = 0xcd },
842 .psize = 50,
843 .digest = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
844 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda },
845 }, {
846 .key = { [0 ... 19] = 0x0c },
847 .ksize = 20,
848 .plaintext = "Test With Truncation",
849 .psize = 20,
850 .digest = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
851 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 },
852 }, {
853 .key = { [0 ... 79] = 0xaa },
854 .ksize = 80,
855 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
856 .psize = 54,
857 .digest = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
858 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 },
859 }, {
860 .key = { [0 ... 79] = 0xaa },
861 .ksize = 80,
862 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
863 "Block-Size Data",
864 .psize = 73,
865 .digest = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
866 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 },
867 },
868 };
869
870
871 /*
872 * SHA224 HMAC test vectors from RFC4231
873 */
874 #define HMAC_SHA224_TEST_VECTORS 4
875
876 static struct hash_testvec hmac_sha224_tv_template[] = {
877 {
878 .key = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
879 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
880 0x0b, 0x0b, 0x0b, 0x0b },
881 .ksize = 20,
882 /* ("Hi There") */
883 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 },
884 .psize = 8,
885 .digest = { 0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19,
886 0x68, 0x32, 0x10, 0x7c, 0xd4, 0x9d, 0xf3, 0x3f,
887 0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f,
888 0x53, 0x68, 0x4b, 0x22},
889 }, {
890 .key = { 0x4a, 0x65, 0x66, 0x65 }, /* ("Jefe") */
891 .ksize = 4,
892 /* ("what do ya want for nothing?") */
893 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
894 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20,
895 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
896 0x69, 0x6e, 0x67, 0x3f },
897 .psize = 28,
898 .digest = { 0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf,
899 0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f,
900 0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00,
901 0x8f, 0xd0, 0x5e, 0x44 },
902 .np = 4,
903 .tap = { 7, 7, 7, 7 }
904 }, {
905 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
906 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
907 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
908 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
909 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
910 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
911 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
912 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
913 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
914 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
915 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
916 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
917 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
918 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
919 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
920 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
921 0xaa, 0xaa, 0xaa },
922 .ksize = 131,
923 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
924 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
925 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65,
926 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
927 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a,
928 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
929 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79,
930 0x20, 0x46, 0x69, 0x72, 0x73, 0x74 },
931 .psize = 54,
932 .digest = { 0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad,
933 0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2,
934 0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27,
935 0x3f, 0xa6, 0x87, 0x0e },
936 }, {
937 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
938 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
939 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
940 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
941 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
942 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
943 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
944 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
945 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
946 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
947 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
948 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
949 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
950 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
951 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
952 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
953 0xaa, 0xaa, 0xaa },
954 .ksize = 131,
955 /* ("This is a test using a larger than block-size key and a")
956 (" larger than block-size data. The key needs to be")
957 (" hashed before being used by the HMAC algorithm.") */
958 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
959 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75,
960 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
961 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68,
962 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
963 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65,
964 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
965 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74,
966 0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
967 0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64,
968 0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
969 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65,
970 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
971 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20,
972 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
973 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65,
974 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
975 0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c,
976 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e },
977 .psize = 152,
978 .digest = { 0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
979 0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
980 0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
981 0xf6, 0xf5, 0x65, 0xd1 },
982 },
983 };
984
985 /*
986 * HMAC-SHA256 test vectors from
987 * draft-ietf-ipsec-ciph-sha-256-01.txt
988 */
989 #define HMAC_SHA256_TEST_VECTORS 10
990
991 static struct hash_testvec hmac_sha256_tv_template[] = {
992 {
993 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
994 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
995 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
996 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20},
997 .ksize = 32,
998 .plaintext = "abc",
999 .psize = 3,
1000 .digest = { 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a,
1001 0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a,
1002 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66,
1003 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81 },
1004 }, {
1005 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1006 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1007 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1008 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
1009 .ksize = 32,
1010 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1011 .psize = 56,
1012 .digest = { 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08,
1013 0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae,
1014 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49,
1015 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30 },
1016 }, {
1017 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1018 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1019 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1020 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
1021 .ksize = 32,
1022 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1023 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1024 .psize = 112,
1025 .digest = { 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34,
1026 0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab,
1027 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5,
1028 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3 },
1029 }, {
1030 .key = { [0 ... 31] = 0x0b },
1031 .ksize = 32,
1032 .plaintext = "Hi There",
1033 .psize = 8,
1034 .digest = { 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
1035 0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5,
1036 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c,
1037 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7 },
1038 }, {
1039 .key = "Jefe",
1040 .ksize = 4,
1041 .plaintext = "what do ya want for nothing?",
1042 .psize = 28,
1043 .digest = { 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
1044 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
1045 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
1046 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 },
1047 .np = 2,
1048 .tap = { 14, 14 }
1049 }, {
1050 .key = { [0 ... 31] = 0xaa },
1051 .ksize = 32,
1052 .plaintext = { [0 ... 49] = 0xdd },
1053 .psize = 50,
1054 .digest = { 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
1055 0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62,
1056 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc,
1057 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0 },
1058 }, {
1059 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1060 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1061 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1062 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
1063 0x21, 0x22, 0x23, 0x24, 0x25 },
1064 .ksize = 37,
1065 .plaintext = { [0 ... 49] = 0xcd },
1066 .psize = 50,
1067 .digest = { 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74,
1068 0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55,
1069 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85,
1070 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17 },
1071 }, {
1072 .key = { [0 ... 31] = 0x0c },
1073 .ksize = 32,
1074 .plaintext = "Test With Truncation",
1075 .psize = 20,
1076 .digest = { 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b,
1077 0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17,
1078 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27,
1079 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42 },
1080 }, {
1081 .key = { [0 ... 79] = 0xaa },
1082 .ksize = 80,
1083 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1084 .psize = 54,
1085 .digest = { 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09,
1086 0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb,
1087 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e,
1088 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f },
1089 }, {
1090 .key = { [0 ... 79] = 0xaa },
1091 .ksize = 80,
1092 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1093 "One Block-Size Data",
1094 .psize = 73,
1095 .digest = { 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3,
1096 0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8,
1097 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc,
1098 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6 },
1099 },
1100 };
1101
1102 #define XCBC_AES_TEST_VECTORS 6
1103
1104 static struct hash_testvec aes_xcbc128_tv_template[] = {
1105 {
1106 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1107 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1108 .plaintext = { [0 ... 15] = 0 },
1109 .digest = { 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, 0xc0, 0x1c,
1110 0x45, 0x73, 0xdf, 0xd5, 0x84, 0xd7, 0x9f, 0x29 },
1111 .psize = 0,
1112 .ksize = 16,
1113 }, {
1114 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1115 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1116 .plaintext = { 0x00, 0x01, 0x02 },
1117 .digest = { 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, 0x19, 0xaf,
1118 0xe7, 0x21, 0x9c, 0xee, 0xf1, 0x72, 0x75, 0x6f },
1119 .psize = 3,
1120 .ksize = 16,
1121 } , {
1122 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1123 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1124 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1125 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1126 .digest = { 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, 0x68, 0xa7,
1127 0x99, 0x98, 0xa4, 0x39, 0x4f, 0xf7, 0xa2, 0x63 },
1128 .psize = 16,
1129 .ksize = 16,
1130 }, {
1131 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1132 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1133 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1134 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1135 0x10, 0x11, 0x12, 0x13 },
1136 .digest = { 0x47, 0xf5, 0x1b, 0x45, 0x64, 0x96, 0x62, 0x15,
1137 0xb8, 0x98, 0x5c, 0x63, 0x05, 0x5e, 0xd3, 0x08 },
1138 .tap = { 10, 10 },
1139 .psize = 20,
1140 .np = 2,
1141 .ksize = 16,
1142 }, {
1143 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1144 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1145 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1146 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1147 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1148 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1149 .digest = { 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, 0xf3, 0xd3,
1150 0x68, 0x07, 0x73, 0x4b, 0xd5, 0x28, 0x3f, 0xd4 },
1151 .psize = 32,
1152 .ksize = 16,
1153 }, {
1154 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1155 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1156 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1157 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1158 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1159 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1160 0x20, 0x21 },
1161 .digest = { 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, 0x18, 0xa3,
1162 0x06, 0x77, 0xd5, 0x48, 0x1f, 0xb6, 0xb4, 0xd8 },
1163 .tap = { 17, 17 },
1164 .psize = 34,
1165 .np = 2,
1166 .ksize = 16,
1167 }
1168 };
1169
1170 /*
1171 * SHA384 HMAC test vectors from RFC4231
1172 */
1173
1174 #define HMAC_SHA384_TEST_VECTORS 4
1175
1176 static struct hash_testvec hmac_sha384_tv_template[] = {
1177 {
1178 .key = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1179 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1180 0x0b, 0x0b, 0x0b, 0x0b }, // (20 bytes)
1181 .ksize = 20,
1182 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }, // ("Hi There")
1183 .psize = 8,
1184 .digest = { 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62,
1185 0x6b, 0x08, 0x25, 0xf4, 0xab, 0x46, 0x90, 0x7f,
1186 0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6,
1187 0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c,
1188 0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f,
1189 0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6 },
1190 }, {
1191 .key = { 0x4a, 0x65, 0x66, 0x65 }, // ("Jefe")
1192 .ksize = 4,
1193 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
1194 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, // ("what do ya want ")
1195 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
1196 0x69, 0x6e, 0x67, 0x3f }, // ("for nothing?")
1197 .psize = 28,
1198 .digest = { 0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
1199 0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
1200 0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
1201 0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
1202 0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
1203 0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49 },
1204 .np = 4,
1205 .tap = { 7, 7, 7, 7 }
1206 }, {
1207 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1208 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1209 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1210 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1211 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1212 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1213 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1214 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1215 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1216 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1217 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1218 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1219 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1220 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1221 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1222 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1223 0xaa, 0xaa, 0xaa }, // (131 bytes)
1224 .ksize = 131,
1225 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
1226 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, // ("Test Using Large")
1227 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
1228 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, // ("r Than Block-Siz")
1229 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
1230 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, // ("e Key - Hash Key")
1231 0x20, 0x46, 0x69, 0x72, 0x73, 0x74 }, // (" First")
1232 .psize = 54,
1233 .digest = { 0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
1234 0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
1235 0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
1236 0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
1237 0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
1238 0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52 },
1239 }, {
1240 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1241 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1242 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1243 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1244 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1245 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1246 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1247 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1248 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1249 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1250 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1251 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1252 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1253 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1254 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1255 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1256 0xaa, 0xaa, 0xaa }, // (131 bytes)
1257 .ksize = 131,
1258 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
1259 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75, // ("This is a test u")
1260 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
1261 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, // ("sing a larger th")
1262 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
1263 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65, // ("an block-size ke")
1264 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
1265 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, // ("y and a larger t")
1266 0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
1267 0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, // ("han block-size d")
1268 0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
1269 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, // ("ata. The key nee")
1270 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
1271 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20, // ("ds to be hashed ")
1272 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
1273 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, // ("before being use")
1274 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
1275 0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c, // ("d by the HMAC al")
1276 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e }, // ("gorithm.")
1277 .psize = 152,
1278 .digest = { 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
1279 0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
1280 0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
1281 0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
1282 0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
1283 0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e },
1284 },
1285 };
1286
1287 /*
1288 * SHA512 HMAC test vectors from RFC4231
1289 */
1290
1291 #define HMAC_SHA512_TEST_VECTORS 4
1292
1293 static struct hash_testvec hmac_sha512_tv_template[] = {
1294 {
1295 .key = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1296 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1297 0x0b, 0x0b, 0x0b, 0x0b }, // (20 bytes)
1298 .ksize = 20,
1299 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }, // ("Hi There")
1300 .psize = 8,
1301 .digest = { 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d,
1302 0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0,
1303 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78,
1304 0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde,
1305 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02,
1306 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4,
1307 0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70,
1308 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54 },
1309 }, {
1310 .key = { 0x4a, 0x65, 0x66, 0x65 }, // ("Jefe")
1311 .ksize = 4,
1312 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
1313 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, // ("what do ya want ")
1314 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
1315 0x69, 0x6e, 0x67, 0x3f }, // ("for nothing?")
1316 .psize = 28,
1317 .digest = { 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
1318 0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
1319 0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
1320 0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
1321 0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
1322 0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
1323 0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
1324 0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37 },
1325 .np = 4,
1326 .tap = { 7, 7, 7, 7 }
1327 }, {
1328 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1329 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1330 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1331 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1332 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1333 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1334 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1335 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1336 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1337 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1338 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1339 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1340 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1341 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1342 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1343 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1344 0xaa, 0xaa, 0xaa }, // (131 bytes)
1345 .ksize = 131,
1346 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
1347 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, // ("Test Using Large")
1348 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
1349 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, // ("r Than Block-Siz")
1350 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
1351 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, // ("e Key - Hash Key")
1352 0x20, 0x46, 0x69, 0x72, 0x73, 0x74 }, // (" First")
1353 .psize = 54,
1354 .digest = { 0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
1355 0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
1356 0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
1357 0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
1358 0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
1359 0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
1360 0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
1361 0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98 },
1362 }, {
1363 .key = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1364 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1365 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1366 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1367 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1368 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1369 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1370 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1371 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1372 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1373 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1374 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1375 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1376 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1377 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1378 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1379 0xaa, 0xaa, 0xaa }, // (131 bytes)
1380 .ksize = 131,
1381 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
1382 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75, // ("This is a test u")
1383 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
1384 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, // ("sing a larger th")
1385 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
1386 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65, // ("an block-size ke")
1387 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
1388 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, // ("y and a larger t")
1389 0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
1390 0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, // ("han block-size d")
1391 0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
1392 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, // ("ata. The key nee")
1393 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
1394 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20, // ("ds to be hashed ")
1395 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
1396 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, // ("before being use")
1397 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
1398 0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c, // ("d by the HMAC al")
1399 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e }, // ("gorithm.")
1400 .psize = 152,
1401 .digest = { 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
1402 0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
1403 0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
1404 0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
1405 0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
1406 0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
1407 0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
1408 0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58 },
1409 },
1410 };
1411
1412 /*
1413 * DES test vectors.
1414 */
1415 #define DES_ENC_TEST_VECTORS 10
1416 #define DES_DEC_TEST_VECTORS 4
1417 #define DES_CBC_ENC_TEST_VECTORS 5
1418 #define DES_CBC_DEC_TEST_VECTORS 4
1419 #define DES3_EDE_ENC_TEST_VECTORS 3
1420 #define DES3_EDE_DEC_TEST_VECTORS 3
1421
1422 static struct cipher_testvec des_enc_tv_template[] = {
1423 { /* From Applied Cryptography */
1424 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1425 .klen = 8,
1426 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1427 .ilen = 8,
1428 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1429 .rlen = 8,
1430 }, { /* Same key, different plaintext block */
1431 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1432 .klen = 8,
1433 .input = { 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1434 .ilen = 8,
1435 .result = { 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1436 .rlen = 8,
1437 }, { /* Sbox test from NBS */
1438 .key = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
1439 .klen = 8,
1440 .input = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
1441 .ilen = 8,
1442 .result = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1443 .rlen = 8,
1444 }, { /* Three blocks */
1445 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1446 .klen = 8,
1447 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1448 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1449 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
1450 .ilen = 24,
1451 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1452 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1453 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
1454 .rlen = 24,
1455 }, { /* Weak key */
1456 .fail = 1,
1457 .wk = 1,
1458 .key = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
1459 .klen = 8,
1460 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1461 .ilen = 8,
1462 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1463 .rlen = 8,
1464 }, { /* Two blocks -- for testing encryption across pages */
1465 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1466 .klen = 8,
1467 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1468 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1469 .ilen = 16,
1470 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1471 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1472 .rlen = 16,
1473 .np = 2,
1474 .tap = { 8, 8 }
1475 }, { /* Four blocks -- for testing encryption with chunking */
1476 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1477 .klen = 8,
1478 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1479 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1480 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef,
1481 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1482 .ilen = 32,
1483 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1484 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1485 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90,
1486 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1487 .rlen = 32,
1488 .np = 3,
1489 .tap = { 14, 10, 8 }
1490 }, {
1491 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1492 .klen = 8,
1493 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1494 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1495 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
1496 .ilen = 24,
1497 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1498 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1499 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
1500 .rlen = 24,
1501 .np = 4,
1502 .tap = { 2, 1, 3, 18 }
1503 }, {
1504 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1505 .klen = 8,
1506 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1507 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1508 .ilen = 16,
1509 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1510 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1511 .rlen = 16,
1512 .np = 5,
1513 .tap = { 2, 2, 2, 2, 8 }
1514 }, {
1515 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1516 .klen = 8,
1517 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1518 .ilen = 8,
1519 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1520 .rlen = 8,
1521 .np = 8,
1522 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
1523 },
1524 };
1525
1526 static struct cipher_testvec des_dec_tv_template[] = {
1527 { /* From Applied Cryptography */
1528 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1529 .klen = 8,
1530 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1531 .ilen = 8,
1532 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1533 .rlen = 8,
1534 }, { /* Sbox test from NBS */
1535 .key = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
1536 .klen = 8,
1537 .input = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1538 .ilen = 8,
1539 .result = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
1540 .rlen = 8,
1541 }, { /* Two blocks, for chunking test */
1542 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1543 .klen = 8,
1544 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1545 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1546 .ilen = 16,
1547 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1548 0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1549 .rlen = 16,
1550 .np = 2,
1551 .tap = { 8, 8 }
1552 }, {
1553 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1554 .klen = 8,
1555 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1556 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1557 .ilen = 16,
1558 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1559 0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1560 .rlen = 16,
1561 .np = 3,
1562 .tap = { 3, 12, 1 }
1563 },
1564 };
1565
1566 static struct cipher_testvec des_cbc_enc_tv_template[] = {
1567 { /* From OpenSSL */
1568 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1569 .klen = 8,
1570 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1571 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1572 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1573 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1574 .ilen = 24,
1575 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1576 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1577 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1578 .rlen = 24,
1579 }, { /* FIPS Pub 81 */
1580 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1581 .klen = 8,
1582 .iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1583 .input = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1584 .ilen = 8,
1585 .result = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1586 .rlen = 8,
1587 }, {
1588 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1589 .klen = 8,
1590 .iv = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1591 .input = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1592 .ilen = 8,
1593 .result = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1594 .rlen = 8,
1595 }, {
1596 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1597 .klen = 8,
1598 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1599 .input = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1600 .ilen = 8,
1601 .result = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1602 .rlen = 8,
1603 }, { /* Copy of openssl vector for chunk testing */
1604 /* From OpenSSL */
1605 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1606 .klen = 8,
1607 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1608 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1609 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1610 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1611 .ilen = 24,
1612 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1613 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1614 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1615 .rlen = 24,
1616 .np = 2,
1617 .tap = { 13, 11 }
1618 },
1619 };
1620
1621 static struct cipher_testvec des_cbc_dec_tv_template[] = {
1622 { /* FIPS Pub 81 */
1623 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1624 .klen = 8,
1625 .iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1626 .input = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1627 .ilen = 8,
1628 .result = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1629 .rlen = 8,
1630 }, {
1631 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1632 .klen = 8,
1633 .iv = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1634 .input = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1635 .ilen = 8,
1636 .result = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1637 .rlen = 8,
1638 }, {
1639 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1640 .klen = 8,
1641 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1642 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1643 .ilen = 8,
1644 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1645 .rlen = 8,
1646 }, { /* Copy of above, for chunk testing */
1647 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1648 .klen = 8,
1649 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1650 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1651 .ilen = 8,
1652 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1653 .rlen = 8,
1654 .np = 2,
1655 .tap = { 4, 4 }
1656 },
1657 };
1658
1659 /*
1660 * We really need some more test vectors, especially for DES3 CBC.
1661 */
1662 static struct cipher_testvec des3_ede_enc_tv_template[] = {
1663 { /* These are from openssl */
1664 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1665 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1666 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1667 .klen = 24,
1668 .input = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1669 .ilen = 8,
1670 .result = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1671 .rlen = 8,
1672 }, {
1673 .key = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1674 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1675 0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1676 .klen = 24,
1677 .input = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1678 .ilen = 8,
1679 .result = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1680 .rlen = 8,
1681 }, {
1682 .key = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1683 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1684 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1685 .klen = 24,
1686 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1687 .ilen = 8,
1688 .result = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1689 .rlen = 8,
1690 },
1691 };
1692
1693 static struct cipher_testvec des3_ede_dec_tv_template[] = {
1694 { /* These are from openssl */
1695 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1696 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1697 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1698 .klen = 24,
1699 .input = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1700 .ilen = 8,
1701 .result = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1702 .rlen = 8,
1703 }, {
1704 .key = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1705 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1706 0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1707 .klen = 24,
1708 .input = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1709 .ilen = 8,
1710 .result = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1711 .rlen = 8,
1712 }, {
1713 .key = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1714 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1715 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1716 .klen = 24,
1717 .input = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1718 .ilen = 8,
1719 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1720 .rlen = 8,
1721 },
1722 };
1723
1724 /*
1725 * Blowfish test vectors.
1726 */
1727 #define BF_ENC_TEST_VECTORS 6
1728 #define BF_DEC_TEST_VECTORS 6
1729 #define BF_CBC_ENC_TEST_VECTORS 1
1730 #define BF_CBC_DEC_TEST_VECTORS 1
1731
1732 static struct cipher_testvec bf_enc_tv_template[] = {
1733 { /* DES test vectors from OpenSSL */
1734 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
1735 .klen = 8,
1736 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1737 .ilen = 8,
1738 .result = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1739 .rlen = 8,
1740 }, {
1741 .key = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1742 .klen = 8,
1743 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1744 .ilen = 8,
1745 .result = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1746 .rlen = 8,
1747 }, {
1748 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1749 .klen = 8,
1750 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1751 .ilen = 8,
1752 .result = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1753 .rlen = 8,
1754 }, { /* Vary the keylength... */
1755 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1756 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1757 .klen = 16,
1758 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1759 .ilen = 8,
1760 .result = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1761 .rlen = 8,
1762 }, {
1763 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1764 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1765 0x00, 0x11, 0x22, 0x33, 0x44 },
1766 .klen = 21,
1767 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1768 .ilen = 8,
1769 .result = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1770 .rlen = 8,
1771 }, { /* Generated with bf488 */
1772 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1773 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1774 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1775 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1776 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1777 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1778 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1779 .klen = 56,
1780 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1781 .ilen = 8,
1782 .result = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1783 .rlen = 8,
1784 },
1785 };
1786
1787 static struct cipher_testvec bf_dec_tv_template[] = {
1788 { /* DES test vectors from OpenSSL */
1789 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1790 .klen = 8,
1791 .input = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1792 .ilen = 8,
1793 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1794 .rlen = 8,
1795 }, {
1796 .key = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1797 .klen = 8,
1798 .input = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1799 .ilen = 8,
1800 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1801 .rlen = 8,
1802 }, {
1803 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1804 .klen = 8,
1805 .input = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1806 .ilen = 8,
1807 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1808 .rlen = 8,
1809 }, { /* Vary the keylength... */
1810 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1811 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1812 .klen = 16,
1813 .input = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1814 .ilen = 8,
1815 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1816 .rlen = 8,
1817 }, {
1818 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1819 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1820 0x00, 0x11, 0x22, 0x33, 0x44 },
1821 .klen = 21,
1822 .input = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1823 .ilen = 8,
1824 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1825 .rlen = 8,
1826 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
1827 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1828 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1829 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1830 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1831 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1832 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1833 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1834 .klen = 56,
1835 .input = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1836 .ilen = 8,
1837 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1838 .rlen = 8,
1839 },
1840 };
1841
1842 static struct cipher_testvec bf_cbc_enc_tv_template[] = {
1843 { /* From OpenSSL */
1844 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1845 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1846 .klen = 16,
1847 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1848 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1849 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1850 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1851 0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1852 .ilen = 32,
1853 .result = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1854 0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1855 0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1856 0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1857 .rlen = 32,
1858 },
1859 };
1860
1861 static struct cipher_testvec bf_cbc_dec_tv_template[] = {
1862 { /* From OpenSSL */
1863 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1864 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1865 .klen = 16,
1866 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1867 .input = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1868 0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1869 0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1870 0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1871 .ilen = 32,
1872 .result = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1873 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1874 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1875 0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1876 .rlen = 32,
1877 },
1878 };
1879
1880 /*
1881 * Twofish test vectors.
1882 */
1883 #define TF_ENC_TEST_VECTORS 3
1884 #define TF_DEC_TEST_VECTORS 3
1885 #define TF_CBC_ENC_TEST_VECTORS 4
1886 #define TF_CBC_DEC_TEST_VECTORS 4
1887
1888 static struct cipher_testvec tf_enc_tv_template[] = {
1889 {
1890 .key = { [0 ... 15] = 0x00 },
1891 .klen = 16,
1892 .input = { [0 ... 15] = 0x00 },
1893 .ilen = 16,
1894 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1895 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1896 .rlen = 16,
1897 }, {
1898 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1899 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1900 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1901 .klen = 24,
1902 .input = { [0 ... 15] = 0x00 },
1903 .ilen = 16,
1904 .result = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1905 0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1906 .rlen = 16,
1907 }, {
1908 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1909 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1910 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1911 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1912 .klen = 32,
1913 .input = { [0 ... 15] = 0x00 },
1914 .ilen = 16,
1915 .result = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1916 0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1917 .rlen = 16,
1918 },
1919 };
1920
1921 static struct cipher_testvec tf_dec_tv_template[] = {
1922 {
1923 .key = { [0 ... 15] = 0x00 },
1924 .klen = 16,
1925 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1926 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1927 .ilen = 16,
1928 .result = { [0 ... 15] = 0x00 },
1929 .rlen = 16,
1930 }, {
1931 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1932 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1933 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1934 .klen = 24,
1935 .input = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1936 0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1937 .ilen = 16,
1938 .result = { [0 ... 15] = 0x00 },
1939 .rlen = 16,
1940 }, {
1941 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1942 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1943 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1944 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1945 .klen = 32,
1946 .input = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1947 0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1948 .ilen = 16,
1949 .result = { [0 ... 15] = 0x00 },
1950 .rlen = 16,
1951 },
1952 };
1953
1954 static struct cipher_testvec tf_cbc_enc_tv_template[] = {
1955 { /* Generated with Nettle */
1956 .key = { [0 ... 15] = 0x00 },
1957 .klen = 16,
1958 .iv = { [0 ... 15] = 0x00 },
1959 .input = { [0 ... 15] = 0x00 },
1960 .ilen = 16,
1961 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1962 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1963 .rlen = 16,
1964 }, {
1965 .key = { [0 ... 15] = 0x00 },
1966 .klen = 16,
1967 .iv = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1968 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1969 .input = { [0 ... 15] = 0x00 },
1970 .ilen = 16,
1971 .result = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1972 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1973 .rlen = 16,
1974 }, {
1975 .key = { [0 ... 15] = 0x00 },
1976 .klen = 16,
1977 .iv = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1978 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1979 .input = { [0 ... 15] = 0x00 },
1980 .ilen = 16,
1981 .result = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1982 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1983 .rlen = 16,
1984 }, {
1985 .key = { [0 ... 15] = 0x00 },
1986 .klen = 16,
1987 .iv = { [0 ... 15] = 0x00 },
1988 .input = { [0 ... 47] = 0x00 },
1989 .ilen = 48,
1990 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1991 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
1992 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1993 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
1994 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1995 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1996 .rlen = 48,
1997 },
1998 };
1999
2000 static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2001 { /* Reverse of the first four above */
2002 .key = { [0 ... 15] = 0x00 },
2003 .klen = 16,
2004 .iv = { [0 ... 15] = 0x00 },
2005 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2006 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
2007 .ilen = 16,
2008 .result = { [0 ... 15] = 0x00 },
2009 .rlen = 16,
2010 }, {
2011 .key = { [0 ... 15] = 0x00 },
2012 .klen = 16,
2013 .iv = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2014 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
2015 .input = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2016 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
2017 .ilen = 16,
2018 .result = { [0 ... 15] = 0x00 },
2019 .rlen = 16,
2020 }, {
2021 .key = { [0 ... 15] = 0x00 },
2022 .klen = 16,
2023 .iv = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2024 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
2025 .input = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
2026 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
2027 .ilen = 16,
2028 .result = { [0 ... 15] = 0x00 },
2029 .rlen = 16,
2030 }, {
2031 .key = { [0 ... 15] = 0x00 },
2032 .klen = 16,
2033 .iv = { [0 ... 15] = 0x00 },
2034 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2035 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
2036 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2037 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
2038 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
2039 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
2040 .ilen = 48,
2041 .result = { [0 ... 47] = 0x00 },
2042 .rlen = 48,
2043 },
2044 };
2045
2046 /*
2047 * Serpent test vectors. These are backwards because Serpent writes
2048 * octet sequences in right-to-left mode.
2049 */
2050 #define SERPENT_ENC_TEST_VECTORS 4
2051 #define SERPENT_DEC_TEST_VECTORS 4
2052
2053 #define TNEPRES_ENC_TEST_VECTORS 4
2054 #define TNEPRES_DEC_TEST_VECTORS 4
2055
2056 static struct cipher_testvec serpent_enc_tv_template[] = {
2057 {
2058 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2059 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2060 .ilen = 16,
2061 .result = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
2062 0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
2063 .rlen = 16,
2064 }, {
2065 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2066 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2067 .klen = 16,
2068 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2069 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2070 .ilen = 16,
2071 .result = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
2072 0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
2073 .rlen = 16,
2074 }, {
2075 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2076 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2077 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2078 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2079 .klen = 32,
2080 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2081 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2082 .ilen = 16,
2083 .result = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
2084 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
2085 .rlen = 16,
2086 }, {
2087 .key = { [15] = 0x80 },
2088 .klen = 16,
2089 .input = { [0 ... 15] = 0x00 },
2090 .ilen = 16,
2091 .result = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
2092 0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
2093 .rlen = 16,
2094 },
2095 };
2096
2097 static struct cipher_testvec tnepres_enc_tv_template[] = {
2098 { /* KeySize=128, PT=0, I=1 */
2099 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2100 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2101 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2103 .klen = 16,
2104 .ilen = 16,
2105 .result = { 0x49, 0xaf, 0xbf, 0xad, 0x9d, 0x5a, 0x34, 0x05,
2106 0x2c, 0xd8, 0xff, 0xa5, 0x98, 0x6b, 0xd2, 0xdd },
2107 .rlen = 16,
2108 }, { /* KeySize=192, PT=0, I=1 */
2109 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2112 .klen = 24,
2113 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2115 .ilen = 16,
2116 .result = { 0xe7, 0x8e, 0x54, 0x02, 0xc7, 0x19, 0x55, 0x68,
2117 0xac, 0x36, 0x78, 0xf7, 0xa3, 0xf6, 0x0c, 0x66 },
2118 .rlen = 16,
2119 }, { /* KeySize=256, PT=0, I=1 */
2120 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2124 .klen = 32,
2125 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2127 .ilen = 16,
2128 .result = { 0xab, 0xed, 0x96, 0xe7, 0x66, 0xbf, 0x28, 0xcb,
2129 0xc0, 0xeb, 0xd2, 0x1a, 0x82, 0xef, 0x08, 0x19 },
2130 .rlen = 16,
2131 }, { /* KeySize=256, I=257 */
2132 .key = { 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
2133 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
2134 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
2135 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
2136 .klen = 32,
2137 .input = { 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
2138 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
2139 .ilen = 16,
2140 .result = { 0x5c, 0xe7, 0x1c, 0x70, 0xd2, 0x88, 0x2e, 0x5b,
2141 0xb8, 0x32, 0xe4, 0x33, 0xf8, 0x9f, 0x26, 0xde },
2142 .rlen = 16,
2143 },
2144 };
2145
2146
2147 static struct cipher_testvec serpent_dec_tv_template[] = {
2148 {
2149 .input = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
2150 0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
2151 .ilen = 16,
2152 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2153 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2154 .rlen = 16,
2155 }, {
2156 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2157 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2158 .klen = 16,
2159 .input = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
2160 0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
2161 .ilen = 16,
2162 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2163 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2164 .rlen = 16,
2165 }, {
2166 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2167 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2168 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2169 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2170 .klen = 32,
2171 .input = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
2172 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
2173 .ilen = 16,
2174 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2175 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2176 .rlen = 16,
2177 }, {
2178 .key = { [15] = 0x80 },
2179 .klen = 16,
2180 .input = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
2181 0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
2182 .ilen = 16,
2183 .result = { [0 ... 15] = 0x00 },
2184 .rlen = 16,
2185 },
2186 };
2187
2188 static struct cipher_testvec tnepres_dec_tv_template[] = {
2189 {
2190 .input = { 0x41, 0xcc, 0x6b, 0x31, 0x59, 0x31, 0x45, 0x97,
2191 0x6d, 0x6f, 0xbb, 0x38, 0x4b, 0x37, 0x21, 0x28 },
2192 .ilen = 16,
2193 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2194 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2195 .rlen = 16,
2196 }, {
2197 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2198 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2199 .klen = 16,
2200 .input = { 0xea, 0xf4, 0xd7, 0xfc, 0xd8, 0x01, 0x34, 0x47,
2201 0x81, 0x45, 0x0b, 0xfa, 0x0c, 0xd6, 0xad, 0x6e },
2202 .ilen = 16,
2203 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2204 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2205 .rlen = 16,
2206 }, {
2207 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2208 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2209 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2210 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2211 .klen = 32,
2212 .input = { 0x64, 0xa9, 0x1a, 0x37, 0xed, 0x9f, 0xe7, 0x49,
2213 0xa8, 0x4e, 0x76, 0xd6, 0xf5, 0x0d, 0x78, 0xee },
2214 .ilen = 16,
2215 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2216 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2217 .rlen = 16,
2218 }, { /* KeySize=128, I=121 */
2219 .key = { [15] = 0x80 },
2220 .klen = 16,
2221 .input = { 0x3d, 0xda, 0xbf, 0xc0, 0x06, 0xda, 0xab, 0x06,
2222 0x46, 0x2a, 0xf4, 0xef, 0x81, 0x54, 0x4e, 0x26 },
2223 .ilen = 16,
2224 .result = { [0 ... 15] = 0x00 },
2225 .rlen = 16,
2226 },
2227 };
2228
2229
2230 /* Cast6 test vectors from RFC 2612 */
2231 #define CAST6_ENC_TEST_VECTORS 3
2232 #define CAST6_DEC_TEST_VECTORS 3
2233
2234 static struct cipher_testvec cast6_enc_tv_template[] = {
2235 {
2236 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2237 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
2238 .klen = 16,
2239 .input = { [0 ... 15] = 0x00 },
2240 .ilen = 16,
2241 .result = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
2242 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
2243 .rlen = 16,
2244 }, {
2245 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2246 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2247 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
2248 .klen = 24,
2249 .input = { [0 ... 15] = 0x00 },
2250 .ilen = 16,
2251 .result = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
2252 0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
2253 .rlen = 16,
2254 }, {
2255 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2256 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2257 0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
2258 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
2259 .klen = 32,
2260 .input = { [0 ... 15] = 0x00 },
2261 .ilen = 16,
2262 .result = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
2263 0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
2264 .rlen = 16,
2265 },
2266 };
2267
2268 static struct cipher_testvec cast6_dec_tv_template[] = {
2269 {
2270 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2271 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
2272 .klen = 16,
2273 .input = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
2274 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
2275 .ilen = 16,
2276 .result = { [0 ... 15] = 0x00 },
2277 .rlen = 16,
2278 }, {
2279 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2280 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2281 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
2282 .klen = 24,
2283 .input = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
2284 0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
2285 .ilen = 16,
2286 .result = { [0 ... 15] = 0x00 },
2287 .rlen = 16,
2288 }, {
2289 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2290 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2291 0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
2292 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
2293 .klen = 32,
2294 .input = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
2295 0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
2296 .ilen = 16,
2297 .result = { [0 ... 15] = 0x00 },
2298 .rlen = 16,
2299 },
2300 };
2301
2302
2303 /*
2304 * AES test vectors.
2305 */
2306 #define AES_ENC_TEST_VECTORS 3
2307 #define AES_DEC_TEST_VECTORS 3
2308 #define AES_CBC_ENC_TEST_VECTORS 2
2309 #define AES_CBC_DEC_TEST_VECTORS 2
2310 #define AES_LRW_ENC_TEST_VECTORS 8
2311 #define AES_LRW_DEC_TEST_VECTORS 8
2312 #define AES_XTS_ENC_TEST_VECTORS 4
2313 #define AES_XTS_DEC_TEST_VECTORS 4
2314 #define AES_CTR_ENC_TEST_VECTORS 6
2315 #define AES_CTR_DEC_TEST_VECTORS 6
2316 #define AES_GCM_ENC_TEST_VECTORS 9
2317 #define AES_GCM_DEC_TEST_VECTORS 8
2318
2319 static struct cipher_testvec aes_enc_tv_template[] = {
2320 { /* From FIPS-197 */
2321 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2322 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2323 .klen = 16,
2324 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2325 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2326 .ilen = 16,
2327 .result = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
2328 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
2329 .rlen = 16,
2330 }, {
2331 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2332 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2333 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
2334 .klen = 24,
2335 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2336 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2337 .ilen = 16,
2338 .result = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
2339 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
2340 .rlen = 16,
2341 }, {
2342 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2343 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2344 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2345 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2346 .klen = 32,
2347 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2348 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2349 .ilen = 16,
2350 .result = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
2351 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
2352 .rlen = 16,
2353 },
2354 };
2355
2356 static struct cipher_testvec aes_dec_tv_template[] = {
2357 { /* From FIPS-197 */
2358 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2359 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2360 .klen = 16,
2361 .input = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
2362 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
2363 .ilen = 16,
2364 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2365 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2366 .rlen = 16,
2367 }, {
2368 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2369 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2370 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
2371 .klen = 24,
2372 .input = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
2373 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
2374 .ilen = 16,
2375 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2376 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2377 .rlen = 16,
2378 }, {
2379 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2380 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2381 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2382 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2383 .klen = 32,
2384 .input = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
2385 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
2386 .ilen = 16,
2387 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2388 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2389 .rlen = 16,
2390 },
2391 };
2392
2393 static struct cipher_testvec aes_cbc_enc_tv_template[] = {
2394 { /* From RFC 3602 */
2395 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
2396 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
2397 .klen = 16,
2398 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
2399 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
2400 .input = { "Single block msg" },
2401 .ilen = 16,
2402 .result = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
2403 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
2404 .rlen = 16,
2405 }, {
2406 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
2407 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
2408 .klen = 16,
2409 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
2410 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
2411 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2412 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2413 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2414 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2415 .ilen = 32,
2416 .result = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
2417 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
2418 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
2419 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
2420 .rlen = 32,
2421 },
2422 };
2423
2424 static struct cipher_testvec aes_cbc_dec_tv_template[] = {
2425 { /* From RFC 3602 */
2426 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
2427 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
2428 .klen = 16,
2429 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
2430 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
2431 .input = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
2432 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
2433 .ilen = 16,
2434 .result = { "Single block msg" },
2435 .rlen = 16,
2436 }, {
2437 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
2438 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
2439 .klen = 16,
2440 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
2441 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
2442 .input = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
2443 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
2444 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
2445 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
2446 .ilen = 32,
2447 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2448 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2449 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2450 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2451 .rlen = 32,
2452 },
2453 };
2454
2455 static struct cipher_testvec aes_lrw_enc_tv_template[] = {
2456 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
2457 { /* LRW-32-AES 1 */
2458 .key = { 0x45, 0x62, 0xac, 0x25, 0xf8, 0x28, 0x17, 0x6d,
2459 0x4c, 0x26, 0x84, 0x14, 0xb5, 0x68, 0x01, 0x85,
2460 0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03,
2461 0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 },
2462 .klen = 32,
2463 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2464 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2465 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2466 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2467 .ilen = 16,
2468 .result = { 0xf1, 0xb2, 0x73, 0xcd, 0x65, 0xa3, 0xdf, 0x5f,
2469 0xe9, 0x5d, 0x48, 0x92, 0x54, 0x63, 0x4e, 0xb8 },
2470 .rlen = 16,
2471 }, { /* LRW-32-AES 2 */
2472 .key = { 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c,
2473 0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44,
2474 0x0d, 0x48, 0xf0, 0xb7, 0xb1, 0x5a, 0x53, 0xea,
2475 0x1c, 0xaa, 0x6b, 0x29, 0xc2, 0xca, 0xfb, 0xaf
2476 },
2477 .klen = 32,
2478 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2479 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
2480 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2481 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2482 .ilen = 16,
2483 .result = { 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5,
2484 0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 },
2485 .rlen = 16,
2486 }, { /* LRW-32-AES 3 */
2487 .key = { 0xd8, 0x2a, 0x91, 0x34, 0xb2, 0x6a, 0x56, 0x50,
2488 0x30, 0xfe, 0x69, 0xe2, 0x37, 0x7f, 0x98, 0x47,
2489 0xcd, 0xf9, 0x0b, 0x16, 0x0c, 0x64, 0x8f, 0xb6,
2490 0xb0, 0x0d, 0x0d, 0x1b, 0xae, 0x85, 0x87, 0x1f },
2491 .klen = 32,
2492 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2493 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2494 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2495 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2496 .ilen = 16,
2497 .result = { 0x76, 0x32, 0x21, 0x83, 0xed, 0x8f, 0xf1, 0x82,
2498 0xf9, 0x59, 0x62, 0x03, 0x69, 0x0e, 0x5e, 0x01 },
2499 .rlen = 16,
2500 }, { /* LRW-32-AES 4 */
2501 .key = { 0x0f, 0x6a, 0xef, 0xf8, 0xd3, 0xd2, 0xbb, 0x15,
2502 0x25, 0x83, 0xf7, 0x3c, 0x1f, 0x01, 0x28, 0x74,
2503 0xca, 0xc6, 0xbc, 0x35, 0x4d, 0x4a, 0x65, 0x54,
2504 0x90, 0xae, 0x61, 0xcf, 0x7b, 0xae, 0xbd, 0xcc,
2505 0xad, 0xe4, 0x94, 0xc5, 0x4a, 0x29, 0xae, 0x70 },
2506 .klen = 40,
2507 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2509 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2510 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2511 .ilen = 16,
2512 .result = { 0x9c, 0x0f, 0x15, 0x2f, 0x55, 0xa2, 0xd8, 0xf0,
2513 0xd6, 0x7b, 0x8f, 0x9e, 0x28, 0x22, 0xbc, 0x41 },
2514 .rlen = 16,
2515 }, { /* LRW-32-AES 5 */
2516 .key = { 0x8a, 0xd4, 0xee, 0x10, 0x2f, 0xbd, 0x81, 0xff,
2517 0xf8, 0x86, 0xce, 0xac, 0x93, 0xc5, 0xad, 0xc6,
2518 0xa0, 0x19, 0x07, 0xc0, 0x9d, 0xf7, 0xbb, 0xdd,
2519 0x52, 0x13, 0xb2, 0xb7, 0xf0, 0xff, 0x11, 0xd8,
2520 0xd6, 0x08, 0xd0, 0xcd, 0x2e, 0xb1, 0x17, 0x6f },
2521 .klen = 40,
2522 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2523 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2524 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2525 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2526 .ilen = 16,
2527 .result = { 0xd4, 0x27, 0x6a, 0x7f, 0x14, 0x91, 0x3d, 0x65,
2528 0xc8, 0x60, 0x48, 0x02, 0x87, 0xe3, 0x34, 0x06 },
2529 .rlen = 16,
2530 }, { /* LRW-32-AES 6 */
2531 .key = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2532 0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2533 0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2534 0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2535 0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2536 0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2537 .klen = 48,
2538 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2539 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2540 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2541 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2542 .ilen = 16,
2543 .result = { 0xbd, 0x06, 0xb8, 0xe1, 0xdb, 0x98, 0x89, 0x9e,
2544 0xc4, 0x98, 0xe4, 0x91, 0xcf, 0x1c, 0x70, 0x2b },
2545 .rlen = 16,
2546 }, { /* LRW-32-AES 7 */
2547 .key = { 0xfb, 0x76, 0x15, 0xb2, 0x3d, 0x80, 0x89, 0x1d,
2548 0xd4, 0x70, 0x98, 0x0b, 0xc7, 0x95, 0x84, 0xc8,
2549 0xb2, 0xfb, 0x64, 0xce, 0x60, 0x97, 0x87, 0x8d,
2550 0x17, 0xfc, 0xe4, 0x5a, 0x49, 0xe8, 0x30, 0xb7,
2551 0x6e, 0x78, 0x17, 0xe7, 0x2d, 0x5e, 0x12, 0xd4,
2552 0x60, 0x64, 0x04, 0x7a, 0xf1, 0x2f, 0x9e, 0x0c },
2553 .klen = 48,
2554 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2555 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2556 .input = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2557 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2558 .ilen = 16,
2559 .result = { 0x5b, 0x90, 0x8e, 0xc1, 0xab, 0xdd, 0x67, 0x5f,
2560 0x3d, 0x69, 0x8a, 0x95, 0x53, 0xc8, 0x9c, 0xe5 },
2561 .rlen = 16,
2562 }, {
2563 /* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
2564 .key = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2565 0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2566 0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2567 0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2568 0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2569 0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2570 .klen = 48,
2571 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2572 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2573 .input = { 0x05, 0x11, 0xb7, 0x18, 0xab, 0xc6, 0x2d, 0xac,
2574 0x70, 0x5d, 0xf6, 0x22, 0x94, 0xcd, 0xe5, 0x6c,
2575 0x17, 0x6b, 0xf6, 0x1c, 0xf0, 0xf3, 0x6e, 0xf8,
2576 0x50, 0x38, 0x1f, 0x71, 0x49, 0xb6, 0x57, 0xd6,
2577 0x8f, 0xcb, 0x8d, 0x6b, 0xe3, 0xa6, 0x29, 0x90,
2578 0xfe, 0x2a, 0x62, 0x82, 0xae, 0x6d, 0x8b, 0xf6,
2579 0xad, 0x1e, 0x9e, 0x20, 0x5f, 0x38, 0xbe, 0x04,
2580 0xda, 0x10, 0x8e, 0xed, 0xa2, 0xa4, 0x87, 0xab,
2581 0xda, 0x6b, 0xb4, 0x0c, 0x75, 0xba, 0xd3, 0x7c,
2582 0xc9, 0xac, 0x42, 0x31, 0x95, 0x7c, 0xc9, 0x04,
2583 0xeb, 0xd5, 0x6e, 0x32, 0x69, 0x8a, 0xdb, 0xa6,
2584 0x15, 0xd7, 0x3f, 0x4f, 0x2f, 0x66, 0x69, 0x03,
2585 0x9c, 0x1f, 0x54, 0x0f, 0xde, 0x1f, 0xf3, 0x65,
2586 0x4c, 0x96, 0x12, 0xed, 0x7c, 0x92, 0x03, 0x01,
2587 0x6f, 0xbc, 0x35, 0x93, 0xac, 0xf1, 0x27, 0xf1,
2588 0xb4, 0x96, 0x82, 0x5a, 0x5f, 0xb0, 0xa0, 0x50,
2589 0x89, 0xa4, 0x8e, 0x66, 0x44, 0x85, 0xcc, 0xfd,
2590 0x33, 0x14, 0x70, 0xe3, 0x96, 0xb2, 0xc3, 0xd3,
2591 0xbb, 0x54, 0x5a, 0x1a, 0xf9, 0x74, 0xa2, 0xc5,
2592 0x2d, 0x64, 0x75, 0xdd, 0xb4, 0x54, 0xe6, 0x74,
2593 0x8c, 0xd3, 0x9d, 0x9e, 0x86, 0xab, 0x51, 0x53,
2594 0xb7, 0x93, 0x3e, 0x6f, 0xd0, 0x4e, 0x2c, 0x40,
2595 0xf6, 0xa8, 0x2e, 0x3e, 0x9d, 0xf4, 0x66, 0xa5,
2596 0x76, 0x12, 0x73, 0x44, 0x1a, 0x56, 0xd7, 0x72,
2597 0x88, 0xcd, 0x21, 0x8c, 0x4c, 0x0f, 0xfe, 0xda,
2598 0x95, 0xe0, 0x3a, 0xa6, 0xa5, 0x84, 0x46, 0xcd,
2599 0xd5, 0x3e, 0x9d, 0x3a, 0xe2, 0x67, 0xe6, 0x60,
2600 0x1a, 0xe2, 0x70, 0x85, 0x58, 0xc2, 0x1b, 0x09,
2601 0xe1, 0xd7, 0x2c, 0xca, 0xad, 0xa8, 0x8f, 0xf9,
2602 0xac, 0xb3, 0x0e, 0xdb, 0xca, 0x2e, 0xe2, 0xb8,
2603 0x51, 0x71, 0xd9, 0x3c, 0x6c, 0xf1, 0x56, 0xf8,
2604 0xea, 0x9c, 0xf1, 0xfb, 0x0c, 0xe6, 0xb7, 0x10,
2605 0x1c, 0xf8, 0xa9, 0x7c, 0xe8, 0x53, 0x35, 0xc1,
2606 0x90, 0x3e, 0x76, 0x4a, 0x74, 0xa4, 0x21, 0x2c,
2607 0xf6, 0x2c, 0x4e, 0x0f, 0x94, 0x3a, 0x88, 0x2e,
2608 0x41, 0x09, 0x6a, 0x33, 0x7d, 0xf6, 0xdd, 0x3f,
2609 0x8d, 0x23, 0x31, 0x74, 0x84, 0xeb, 0x88, 0x6e,
2610 0xcc, 0xb9, 0xbc, 0x22, 0x83, 0x19, 0x07, 0x22,
2611 0xa5, 0x2d, 0xdf, 0xa5, 0xf3, 0x80, 0x85, 0x78,
2612 0x84, 0x39, 0x6a, 0x6d, 0x6a, 0x99, 0x4f, 0xa5,
2613 0x15, 0xfe, 0x46, 0xb0, 0xe4, 0x6c, 0xa5, 0x41,
2614 0x3c, 0xce, 0x8f, 0x42, 0x60, 0x71, 0xa7, 0x75,
2615 0x08, 0x40, 0x65, 0x8a, 0x82, 0xbf, 0xf5, 0x43,
2616 0x71, 0x96, 0xa9, 0x4d, 0x44, 0x8a, 0x20, 0xbe,
2617 0xfa, 0x4d, 0xbb, 0xc0, 0x7d, 0x31, 0x96, 0x65,
2618 0xe7, 0x75, 0xe5, 0x3e, 0xfd, 0x92, 0x3b, 0xc9,
2619 0x55, 0xbb, 0x16, 0x7e, 0xf7, 0xc2, 0x8c, 0xa4,
2620 0x40, 0x1d, 0xe5, 0xef, 0x0e, 0xdf, 0xe4, 0x9a,
2621 0x62, 0x73, 0x65, 0xfd, 0x46, 0x63, 0x25, 0x3d,
2622 0x2b, 0xaf, 0xe5, 0x64, 0xfe, 0xa5, 0x5c, 0xcf,
2623 0x24, 0xf3, 0xb4, 0xac, 0x64, 0xba, 0xdf, 0x4b,
2624 0xc6, 0x96, 0x7d, 0x81, 0x2d, 0x8d, 0x97, 0xf7,
2625 0xc5, 0x68, 0x77, 0x84, 0x32, 0x2b, 0xcc, 0x85,
2626 0x74, 0x96, 0xf0, 0x12, 0x77, 0x61, 0xb9, 0xeb,
2627 0x71, 0xaa, 0x82, 0xcb, 0x1c, 0xdb, 0x89, 0xc8,
2628 0xc6, 0xb5, 0xe3, 0x5c, 0x7d, 0x39, 0x07, 0x24,
2629 0xda, 0x39, 0x87, 0x45, 0xc0, 0x2b, 0xbb, 0x01,
2630 0xac, 0xbc, 0x2a, 0x5c, 0x7f, 0xfc, 0xe8, 0xce,
2631 0x6d, 0x9c, 0x6f, 0xed, 0xd3, 0xc1, 0xa1, 0xd6,
2632 0xc5, 0x55, 0xa9, 0x66, 0x2f, 0xe1, 0xc8, 0x32,
2633 0xa6, 0x5d, 0xa4, 0x3a, 0x98, 0x73, 0xe8, 0x45,
2634 0xa4, 0xc7, 0xa8, 0xb4, 0xf6, 0x13, 0x03, 0xf6,
2635 0xe9, 0x2e, 0xc4, 0x29, 0x0f, 0x84, 0xdb, 0xc4,
2636 0x21, 0xc4, 0xc2, 0x75, 0x67, 0x89, 0x37, 0x0a },
2637 .ilen = 512,
2638 .result = { 0x1a, 0x1d, 0xa9, 0x30, 0xad, 0xf9, 0x2f, 0x9b,
2639 0xb6, 0x1d, 0xae, 0xef, 0xf0, 0x2f, 0xf8, 0x5a,
2640 0x39, 0x3c, 0xbf, 0x2a, 0xb2, 0x45, 0xb2, 0x23,
2641 0x1b, 0x63, 0x3c, 0xcf, 0xaa, 0xbe, 0xcf, 0x4e,
2642 0xfa, 0xe8, 0x29, 0xc2, 0x20, 0x68, 0x2b, 0x3c,
2643 0x2e, 0x8b, 0xf7, 0x6e, 0x25, 0xbd, 0xe3, 0x3d,
2644 0x66, 0x27, 0xd6, 0xaf, 0xd6, 0x64, 0x3e, 0xe3,
2645 0xe8, 0x58, 0x46, 0x97, 0x39, 0x51, 0x07, 0xde,
2646 0xcb, 0x37, 0xbc, 0xa9, 0xc0, 0x5f, 0x75, 0xc3,
2647 0x0e, 0x84, 0x23, 0x1d, 0x16, 0xd4, 0x1c, 0x59,
2648 0x9c, 0x1a, 0x02, 0x55, 0xab, 0x3a, 0x97, 0x1d,
2649 0xdf, 0xdd, 0xc7, 0x06, 0x51, 0xd7, 0x70, 0xae,
2650 0x23, 0xc6, 0x8c, 0xf5, 0x1e, 0xa0, 0xe5, 0x82,
2651 0xb8, 0xb2, 0xbf, 0x04, 0xa0, 0x32, 0x8e, 0x68,
2652 0xeb, 0xaf, 0x6e, 0x2d, 0x94, 0x22, 0x2f, 0xce,
2653 0x4c, 0xb5, 0x59, 0xe2, 0xa2, 0x2f, 0xa0, 0x98,
2654 0x1a, 0x97, 0xc6, 0xd4, 0xb5, 0x00, 0x59, 0xf2,
2655 0x84, 0x14, 0x72, 0xb1, 0x9a, 0x6e, 0xa3, 0x7f,
2656 0xea, 0x20, 0xe7, 0xcb, 0x65, 0x77, 0x3a, 0xdf,
2657 0xc8, 0x97, 0x67, 0x15, 0xc2, 0x2a, 0x27, 0xcc,
2658 0x18, 0x55, 0xa1, 0x24, 0x0b, 0x24, 0x24, 0xaf,
2659 0x5b, 0xec, 0x68, 0xb8, 0xc8, 0xf5, 0xba, 0x63,
2660 0xff, 0xed, 0x89, 0xce, 0xd5, 0x3d, 0x88, 0xf3,
2661 0x25, 0xef, 0x05, 0x7c, 0x3a, 0xef, 0xeb, 0xd8,
2662 0x7a, 0x32, 0x0d, 0xd1, 0x1e, 0x58, 0x59, 0x99,
2663 0x90, 0x25, 0xb5, 0x26, 0xb0, 0xe3, 0x2b, 0x6c,
2664 0x4c, 0xa9, 0x8b, 0x84, 0x4f, 0x5e, 0x01, 0x50,
2665 0x41, 0x30, 0x58, 0xc5, 0x62, 0x74, 0x52, 0x1d,
2666 0x45, 0x24, 0x6a, 0x42, 0x64, 0x4f, 0x97, 0x1c,
2667 0xa8, 0x66, 0xb5, 0x6d, 0x79, 0xd4, 0x0d, 0x48,
2668 0xc5, 0x5f, 0xf3, 0x90, 0x32, 0xdd, 0xdd, 0xe1,
2669 0xe4, 0xa9, 0x9f, 0xfc, 0xc3, 0x52, 0x5a, 0x46,
2670 0xe4, 0x81, 0x84, 0x95, 0x36, 0x59, 0x7a, 0x6b,
2671 0xaa, 0xb3, 0x60, 0xad, 0xce, 0x9f, 0x9f, 0x28,
2672 0xe0, 0x01, 0x75, 0x22, 0xc4, 0x4e, 0xa9, 0x62,
2673 0x5c, 0x62, 0x0d, 0x00, 0xcb, 0x13, 0xe8, 0x43,
2674 0x72, 0xd4, 0x2d, 0x53, 0x46, 0xb5, 0xd1, 0x16,
2675 0x22, 0x18, 0xdf, 0x34, 0x33, 0xf5, 0xd6, 0x1c,
2676 0xb8, 0x79, 0x78, 0x97, 0x94, 0xff, 0x72, 0x13,
2677 0x4c, 0x27, 0xfc, 0xcb, 0xbf, 0x01, 0x53, 0xa6,
2678 0xb4, 0x50, 0x6e, 0xde, 0xdf, 0xb5, 0x43, 0xa4,
2679 0x59, 0xdf, 0x52, 0xf9, 0x7c, 0xe0, 0x11, 0x6f,
2680 0x2d, 0x14, 0x8e, 0x24, 0x61, 0x2c, 0xe1, 0x17,
2681 0xcc, 0xce, 0x51, 0x0c, 0x19, 0x8a, 0x82, 0x30,
2682 0x94, 0xd5, 0x3d, 0x6a, 0x53, 0x06, 0x5e, 0xbd,
2683 0xb7, 0xeb, 0xfa, 0xfd, 0x27, 0x51, 0xde, 0x85,
2684 0x1e, 0x86, 0x53, 0x11, 0x53, 0x94, 0x00, 0xee,
2685 0x2b, 0x8c, 0x08, 0x2a, 0xbf, 0xdd, 0xae, 0x11,
2686 0xcb, 0x1e, 0xa2, 0x07, 0x9a, 0x80, 0xcf, 0x62,
2687 0x9b, 0x09, 0xdc, 0x95, 0x3c, 0x96, 0x8e, 0xb1,
2688 0x09, 0xbd, 0xe4, 0xeb, 0xdb, 0xca, 0x70, 0x7a,
2689 0x9e, 0xfa, 0x31, 0x18, 0x45, 0x3c, 0x21, 0x33,
2690 0xb0, 0xb3, 0x2b, 0xea, 0xf3, 0x71, 0x2d, 0xe1,
2691 0x03, 0xad, 0x1b, 0x48, 0xd4, 0x67, 0x27, 0xf0,
2692 0x62, 0xe4, 0x3d, 0xfb, 0x9b, 0x08, 0x76, 0xe7,
2693 0xdd, 0x2b, 0x01, 0x39, 0x04, 0x5a, 0x58, 0x7a,
2694 0xf7, 0x11, 0x90, 0xec, 0xbd, 0x51, 0x5c, 0x32,
2695 0x6b, 0xd7, 0x35, 0x39, 0x02, 0x6b, 0xf2, 0xa6,
2696 0xd0, 0x0d, 0x07, 0xe1, 0x06, 0xc4, 0x5b, 0x7d,
2697 0xe4, 0x6a, 0xd7, 0xee, 0x15, 0x1f, 0x83, 0xb4,
2698 0xa3, 0xa7, 0x5e, 0xc3, 0x90, 0xb7, 0xef, 0xd3,
2699 0xb7, 0x4f, 0xf8, 0x92, 0x4c, 0xb7, 0x3c, 0x29,
2700 0xcd, 0x7e, 0x2b, 0x5d, 0x43, 0xea, 0x42, 0xe7,
2701 0x74, 0x3f, 0x7d, 0x58, 0x88, 0x75, 0xde, 0x3e },
2702 .rlen = 512,
2703 }
2704 };
2705
2706 static struct cipher_testvec aes_lrw_dec_tv_template[] = {
2707 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
2708 /* same as enc vectors with input and result reversed */
2709 { /* LRW-32-AES 1 */
2710 .key = { 0x45, 0x62, 0xac, 0x25, 0xf8, 0x28, 0x17, 0x6d,
2711 0x4c, 0x26, 0x84, 0x14, 0xb5, 0x68, 0x01, 0x85,
2712 0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03,
2713 0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 },
2714 .klen = 32,
2715 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2716 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2717 .input = { 0xf1, 0xb2, 0x73, 0xcd, 0x65, 0xa3, 0xdf, 0x5f,
2718 0xe9, 0x5d, 0x48, 0x92, 0x54, 0x63, 0x4e, 0xb8 },
2719 .ilen = 16,
2720 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2721 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2722 .rlen = 16,
2723 }, { /* LRW-32-AES 2 */
2724 .key = { 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c,
2725 0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44,
2726 0x0d, 0x48, 0xf0, 0xb7, 0xb1, 0x5a, 0x53, 0xea,
2727 0x1c, 0xaa, 0x6b, 0x29, 0xc2, 0xca, 0xfb, 0xaf
2728 },
2729 .klen = 32,
2730 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2731 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
2732 .input = { 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5,
2733 0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 },
2734 .ilen = 16,
2735 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2736 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2737 .rlen = 16,
2738 }, { /* LRW-32-AES 3 */
2739 .key = { 0xd8, 0x2a, 0x91, 0x34, 0xb2, 0x6a, 0x56, 0x50,
2740 0x30, 0xfe, 0x69, 0xe2, 0x37, 0x7f, 0x98, 0x47,
2741 0xcd, 0xf9, 0x0b, 0x16, 0x0c, 0x64, 0x8f, 0xb6,
2742 0xb0, 0x0d, 0x0d, 0x1b, 0xae, 0x85, 0x87, 0x1f },
2743 .klen = 32,
2744 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2745 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2746 .input = { 0x76, 0x32, 0x21, 0x83, 0xed, 0x8f, 0xf1, 0x82,
2747 0xf9, 0x59, 0x62, 0x03, 0x69, 0x0e, 0x5e, 0x01 },
2748 .ilen = 16,
2749 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2750 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2751 .rlen = 16,
2752 }, { /* LRW-32-AES 4 */
2753 .key = { 0x0f, 0x6a, 0xef, 0xf8, 0xd3, 0xd2, 0xbb, 0x15,
2754 0x25, 0x83, 0xf7, 0x3c, 0x1f, 0x01, 0x28, 0x74,
2755 0xca, 0xc6, 0xbc, 0x35, 0x4d, 0x4a, 0x65, 0x54,
2756 0x90, 0xae, 0x61, 0xcf, 0x7b, 0xae, 0xbd, 0xcc,
2757 0xad, 0xe4, 0x94, 0xc5, 0x4a, 0x29, 0xae, 0x70 },
2758 .klen = 40,
2759 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2760 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2761 .input = { 0x9c, 0x0f, 0x15, 0x2f, 0x55, 0xa2, 0xd8, 0xf0,
2762 0xd6, 0x7b, 0x8f, 0x9e, 0x28, 0x22, 0xbc, 0x41 },
2763 .ilen = 16,
2764 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2765 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2766 .rlen = 16,
2767 }, { /* LRW-32-AES 5 */
2768 .key = { 0x8a, 0xd4, 0xee, 0x10, 0x2f, 0xbd, 0x81, 0xff,
2769 0xf8, 0x86, 0xce, 0xac, 0x93, 0xc5, 0xad, 0xc6,
2770 0xa0, 0x19, 0x07, 0xc0, 0x9d, 0xf7, 0xbb, 0xdd,
2771 0x52, 0x13, 0xb2, 0xb7, 0xf0, 0xff, 0x11, 0xd8,
2772 0xd6, 0x08, 0xd0, 0xcd, 0x2e, 0xb1, 0x17, 0x6f },
2773 .klen = 40,
2774 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2775 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2776 .input = { 0xd4, 0x27, 0x6a, 0x7f, 0x14, 0x91, 0x3d, 0x65,
2777 0xc8, 0x60, 0x48, 0x02, 0x87, 0xe3, 0x34, 0x06 },
2778 .ilen = 16,
2779 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2780 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2781 .rlen = 16,
2782 }, { /* LRW-32-AES 6 */
2783 .key = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2784 0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2785 0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2786 0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2787 0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2788 0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2789 .klen = 48,
2790 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2791 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2792 .input = { 0xbd, 0x06, 0xb8, 0xe1, 0xdb, 0x98, 0x89, 0x9e,
2793 0xc4, 0x98, 0xe4, 0x91, 0xcf, 0x1c, 0x70, 0x2b },
2794 .ilen = 16,
2795 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2796 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2797 .rlen = 16,
2798 }, { /* LRW-32-AES 7 */
2799 .key = { 0xfb, 0x76, 0x15, 0xb2, 0x3d, 0x80, 0x89, 0x1d,
2800 0xd4, 0x70, 0x98, 0x0b, 0xc7, 0x95, 0x84, 0xc8,
2801 0xb2, 0xfb, 0x64, 0xce, 0x60, 0x97, 0x87, 0x8d,
2802 0x17, 0xfc, 0xe4, 0x5a, 0x49, 0xe8, 0x30, 0xb7,
2803 0x6e, 0x78, 0x17, 0xe7, 0x2d, 0x5e, 0x12, 0xd4,
2804 0x60, 0x64, 0x04, 0x7a, 0xf1, 0x2f, 0x9e, 0x0c },
2805 .klen = 48,
2806 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2807 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2808 .input = { 0x5b, 0x90, 0x8e, 0xc1, 0xab, 0xdd, 0x67, 0x5f,
2809 0x3d, 0x69, 0x8a, 0x95, 0x53, 0xc8, 0x9c, 0xe5 },
2810 .ilen = 16,
2811 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2812 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2813 .rlen = 16,
2814 }, {
2815 /* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
2816 .key = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2817 0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2818 0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2819 0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2820 0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2821 0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2822 .klen = 48,
2823 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2824 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2825 .input = { 0x1a, 0x1d, 0xa9, 0x30, 0xad, 0xf9, 0x2f, 0x9b,
2826 0xb6, 0x1d, 0xae, 0xef, 0xf0, 0x2f, 0xf8, 0x5a,
2827 0x39, 0x3c, 0xbf, 0x2a, 0xb2, 0x45, 0xb2, 0x23,
2828 0x1b, 0x63, 0x3c, 0xcf, 0xaa, 0xbe, 0xcf, 0x4e,
2829 0xfa, 0xe8, 0x29, 0xc2, 0x20, 0x68, 0x2b, 0x3c,
2830 0x2e, 0x8b, 0xf7, 0x6e, 0x25, 0xbd, 0xe3, 0x3d,
2831 0x66, 0x27, 0xd6, 0xaf, 0xd6, 0x64, 0x3e, 0xe3,
2832 0xe8, 0x58, 0x46, 0x97, 0x39, 0x51, 0x07, 0xde,
2833 0xcb, 0x37, 0xbc, 0xa9, 0xc0, 0x5f, 0x75, 0xc3,
2834 0x0e, 0x84, 0x23, 0x1d, 0x16, 0xd4, 0x1c, 0x59,
2835 0x9c, 0x1a, 0x02, 0x55, 0xab, 0x3a, 0x97, 0x1d,
2836 0xdf, 0xdd, 0xc7, 0x06, 0x51, 0xd7, 0x70, 0xae,
2837 0x23, 0xc6, 0x8c, 0xf5, 0x1e, 0xa0, 0xe5, 0x82,
2838 0xb8, 0xb2, 0xbf, 0x04, 0xa0, 0x32, 0x8e, 0x68,
2839 0xeb, 0xaf, 0x6e, 0x2d, 0x94, 0x22, 0x2f, 0xce,
2840 0x4c, 0xb5, 0x59, 0xe2, 0xa2, 0x2f, 0xa0, 0x98,
2841 0x1a, 0x97, 0xc6, 0xd4, 0xb5, 0x00, 0x59, 0xf2,
2842 0x84, 0x14, 0x72, 0xb1, 0x9a, 0x6e, 0xa3, 0x7f,
2843 0xea, 0x20, 0xe7, 0xcb, 0x65, 0x77, 0x3a, 0xdf,
2844 0xc8, 0x97, 0x67, 0x15, 0xc2, 0x2a, 0x27, 0xcc,
2845 0x18, 0x55, 0xa1, 0x24, 0x0b, 0x24, 0x24, 0xaf,
2846 0x5b, 0xec, 0x68, 0xb8, 0xc8, 0xf5, 0xba, 0x63,
2847 0xff, 0xed, 0x89, 0xce, 0xd5, 0x3d, 0x88, 0xf3,
2848 0x25, 0xef, 0x05, 0x7c, 0x3a, 0xef, 0xeb, 0xd8,
2849 0x7a, 0x32, 0x0d, 0xd1, 0x1e, 0x58, 0x59, 0x99,
2850 0x90, 0x25, 0xb5, 0x26, 0xb0, 0xe3, 0x2b, 0x6c,
2851 0x4c, 0xa9, 0x8b, 0x84, 0x4f, 0x5e, 0x01, 0x50,
2852 0x41, 0x30, 0x58, 0xc5, 0x62, 0x74, 0x52, 0x1d,
2853 0x45, 0x24, 0x6a, 0x42, 0x64, 0x4f, 0x97, 0x1c,
2854 0xa8, 0x66, 0xb5, 0x6d, 0x79, 0xd4, 0x0d, 0x48,
2855 0xc5, 0x5f, 0xf3, 0x90, 0x32, 0xdd, 0xdd, 0xe1,
2856 0xe4, 0xa9, 0x9f, 0xfc, 0xc3, 0x52, 0x5a, 0x46,
2857 0xe4, 0x81, 0x84, 0x95, 0x36, 0x59, 0x7a, 0x6b,
2858 0xaa, 0xb3, 0x60, 0xad, 0xce, 0x9f, 0x9f, 0x28,
2859 0xe0, 0x01, 0x75, 0x22, 0xc4, 0x4e, 0xa9, 0x62,
2860 0x5c, 0x62, 0x0d, 0x00, 0xcb, 0x13, 0xe8, 0x43,
2861 0x72, 0xd4, 0x2d, 0x53, 0x46, 0xb5, 0xd1, 0x16,
2862 0x22, 0x18, 0xdf, 0x34, 0x33, 0xf5, 0xd6, 0x1c,
2863 0xb8, 0x79, 0x78, 0x97, 0x94, 0xff, 0x72, 0x13,
2864 0x4c, 0x27, 0xfc, 0xcb, 0xbf, 0x01, 0x53, 0xa6,
2865 0xb4, 0x50, 0x6e, 0xde, 0xdf, 0xb5, 0x43, 0xa4,
2866 0x59, 0xdf, 0x52, 0xf9, 0x7c, 0xe0, 0x11, 0x6f,
2867 0x2d, 0x14, 0x8e, 0x24, 0x61, 0x2c, 0xe1, 0x17,
2868 0xcc, 0xce, 0x51, 0x0c, 0x19, 0x8a, 0x82, 0x30,
2869 0x94, 0xd5, 0x3d, 0x6a, 0x53, 0x06, 0x5e, 0xbd,
2870 0xb7, 0xeb, 0xfa, 0xfd, 0x27, 0x51, 0xde, 0x85,
2871 0x1e, 0x86, 0x53, 0x11, 0x53, 0x94, 0x00, 0xee,
2872 0x2b, 0x8c, 0x08, 0x2a, 0xbf, 0xdd, 0xae, 0x11,
2873 0xcb, 0x1e, 0xa2, 0x07, 0x9a, 0x80, 0xcf, 0x62,
2874 0x9b, 0x09, 0xdc, 0x95, 0x3c, 0x96, 0x8e, 0xb1,
2875 0x09, 0xbd, 0xe4, 0xeb, 0xdb, 0xca, 0x70, 0x7a,
2876 0x9e, 0xfa, 0x31, 0x18, 0x45, 0x3c, 0x21, 0x33,
2877 0xb0, 0xb3, 0x2b, 0xea, 0xf3, 0x71, 0x2d, 0xe1,
2878 0x03, 0xad, 0x1b, 0x48, 0xd4, 0x67, 0x27, 0xf0,
2879 0x62, 0xe4, 0x3d, 0xfb, 0x9b, 0x08, 0x76, 0xe7,
2880 0xdd, 0x2b, 0x01, 0x39, 0x04, 0x5a, 0x58, 0x7a,
2881 0xf7, 0x11, 0x90, 0xec, 0xbd, 0x51, 0x5c, 0x32,
2882 0x6b, 0xd7, 0x35, 0x39, 0x02, 0x6b, 0xf2, 0xa6,
2883 0xd0, 0x0d, 0x07, 0xe1, 0x06, 0xc4, 0x5b, 0x7d,
2884 0xe4, 0x6a, 0xd7, 0xee, 0x15, 0x1f, 0x83, 0xb4,
2885 0xa3, 0xa7, 0x5e, 0xc3, 0x90, 0xb7, 0xef, 0xd3,
2886 0xb7, 0x4f, 0xf8, 0x92, 0x4c, 0xb7, 0x3c, 0x29,
2887 0xcd, 0x7e, 0x2b, 0x5d, 0x43, 0xea, 0x42, 0xe7,
2888 0x74, 0x3f, 0x7d, 0x58, 0x88, 0x75, 0xde, 0x3e },
2889 .ilen = 512,
2890 .result = { 0x05, 0x11, 0xb7, 0x18, 0xab, 0xc6, 0x2d, 0xac,
2891 0x70, 0x5d, 0xf6, 0x22, 0x94, 0xcd, 0xe5, 0x6c,
2892 0x17, 0x6b, 0xf6, 0x1c, 0xf0, 0xf3, 0x6e, 0xf8,
2893 0x50, 0x38, 0x1f, 0x71, 0x49, 0xb6, 0x57, 0xd6,
2894 0x8f, 0xcb, 0x8d, 0x6b, 0xe3, 0xa6, 0x29, 0x90,
2895 0xfe, 0x2a, 0x62, 0x82, 0xae, 0x6d, 0x8b, 0xf6,
2896 0xad, 0x1e, 0x9e, 0x20, 0x5f, 0x38, 0xbe, 0x04,
2897 0xda, 0x10, 0x8e, 0xed, 0xa2, 0xa4, 0x87, 0xab,
2898 0xda, 0x6b, 0xb4, 0x0c, 0x75, 0xba, 0xd3, 0x7c,
2899 0xc9, 0xac, 0x42, 0x31, 0x95, 0x7c, 0xc9, 0x04,
2900 0xeb, 0xd5, 0x6e, 0x32, 0x69, 0x8a, 0xdb, 0xa6,
2901 0x15, 0xd7, 0x3f, 0x4f, 0x2f, 0x66, 0x69, 0x03,
2902 0x9c, 0x1f, 0x54, 0x0f, 0xde, 0x1f, 0xf3, 0x65,
2903 0x4c, 0x96, 0x12, 0xed, 0x7c, 0x92, 0x03, 0x01,
2904 0x6f, 0xbc, 0x35, 0x93, 0xac, 0xf1, 0x27, 0xf1,
2905 0xb4, 0x96, 0x82, 0x5a, 0x5f, 0xb0, 0xa0, 0x50,
2906 0x89, 0xa4, 0x8e, 0x66, 0x44, 0x85, 0xcc, 0xfd,
2907 0x33, 0x14, 0x70, 0xe3, 0x96, 0xb2, 0xc3, 0xd3,
2908 0xbb, 0x54, 0x5a, 0x1a, 0xf9, 0x74, 0xa2, 0xc5,
2909 0x2d, 0x64, 0x75, 0xdd, 0xb4, 0x54, 0xe6, 0x74,
2910 0x8c, 0xd3, 0x9d, 0x9e, 0x86, 0xab, 0x51, 0x53,
2911 0xb7, 0x93, 0x3e, 0x6f, 0xd0, 0x4e, 0x2c, 0x40,
2912 0xf6, 0xa8, 0x2e, 0x3e, 0x9d, 0xf4, 0x66, 0xa5,
2913 0x76, 0x12, 0x73, 0x44, 0x1a, 0x56, 0xd7, 0x72,
2914 0x88, 0xcd, 0x21, 0x8c, 0x4c, 0x0f, 0xfe, 0xda,
2915 0x95, 0xe0, 0x3a, 0xa6, 0xa5, 0x84, 0x46, 0xcd,
2916 0xd5, 0x3e, 0x9d, 0x3a, 0xe2, 0x67, 0xe6, 0x60,
2917 0x1a, 0xe2, 0x70, 0x85, 0x58, 0xc2, 0x1b, 0x09,
2918 0xe1, 0xd7, 0x2c, 0xca, 0xad, 0xa8, 0x8f, 0xf9,
2919 0xac, 0xb3, 0x0e, 0xdb, 0xca, 0x2e, 0xe2, 0xb8,
2920 0x51, 0x71, 0xd9, 0x3c, 0x6c, 0xf1, 0x56, 0xf8,
2921 0xea, 0x9c, 0xf1, 0xfb, 0x0c, 0xe6, 0xb7, 0x10,
2922 0x1c, 0xf8, 0xa9, 0x7c, 0xe8, 0x53, 0x35, 0xc1,
2923 0x90, 0x3e, 0x76, 0x4a, 0x74, 0xa4, 0x21, 0x2c,
2924 0xf6, 0x2c, 0x4e, 0x0f, 0x94, 0x3a, 0x88, 0x2e,
2925 0x41, 0x09, 0x6a, 0x33, 0x7d, 0xf6, 0xdd, 0x3f,
2926 0x8d, 0x23, 0x31, 0x74, 0x84, 0xeb, 0x88, 0x6e,
2927 0xcc, 0xb9, 0xbc, 0x22, 0x83, 0x19, 0x07, 0x22,
2928 0xa5, 0x2d, 0xdf, 0xa5, 0xf3, 0x80, 0x85, 0x78,
2929 0x84, 0x39, 0x6a, 0x6d, 0x6a, 0x99, 0x4f, 0xa5,
2930 0x15, 0xfe, 0x46, 0xb0, 0xe4, 0x6c, 0xa5, 0x41,
2931 0x3c, 0xce, 0x8f, 0x42, 0x60, 0x71, 0xa7, 0x75,
2932 0x08, 0x40, 0x65, 0x8a, 0x82, 0xbf, 0xf5, 0x43,
2933 0x71, 0x96, 0xa9, 0x4d, 0x44, 0x8a, 0x20, 0xbe,
2934 0xfa, 0x4d, 0xbb, 0xc0, 0x7d, 0x31, 0x96, 0x65,
2935 0xe7, 0x75, 0xe5, 0x3e, 0xfd, 0x92, 0x3b, 0xc9,
2936 0x55, 0xbb, 0x16, 0x7e, 0xf7, 0xc2, 0x8c, 0xa4,
2937 0x40, 0x1d, 0xe5, 0xef, 0x0e, 0xdf, 0xe4, 0x9a,
2938 0x62, 0x73, 0x65, 0xfd, 0x46, 0x63, 0x25, 0x3d,
2939 0x2b, 0xaf, 0xe5, 0x64, 0xfe, 0xa5, 0x5c, 0xcf,
2940 0x24, 0xf3, 0xb4, 0xac, 0x64, 0xba, 0xdf, 0x4b,
2941 0xc6, 0x96, 0x7d, 0x81, 0x2d, 0x8d, 0x97, 0xf7,
2942 0xc5, 0x68, 0x77, 0x84, 0x32, 0x2b, 0xcc, 0x85,
2943 0x74, 0x96, 0xf0, 0x12, 0x77, 0x61, 0xb9, 0xeb,
2944 0x71, 0xaa, 0x82, 0xcb, 0x1c, 0xdb, 0x89, 0xc8,
2945 0xc6, 0xb5, 0xe3, 0x5c, 0x7d, 0x39, 0x07, 0x24,
2946 0xda, 0x39, 0x87, 0x45, 0xc0, 0x2b, 0xbb, 0x01,
2947 0xac, 0xbc, 0x2a, 0x5c, 0x7f, 0xfc, 0xe8, 0xce,
2948 0x6d, 0x9c, 0x6f, 0xed, 0xd3, 0xc1, 0xa1, 0xd6,
2949 0xc5, 0x55, 0xa9, 0x66, 0x2f, 0xe1, 0xc8, 0x32,
2950 0xa6, 0x5d, 0xa4, 0x3a, 0x98, 0x73, 0xe8, 0x45,
2951 0xa4, 0xc7, 0xa8, 0xb4, 0xf6, 0x13, 0x03, 0xf6,
2952 0xe9, 0x2e, 0xc4, 0x29, 0x0f, 0x84, 0xdb, 0xc4,
2953 0x21, 0xc4, 0xc2, 0x75, 0x67, 0x89, 0x37, 0x0a },
2954 .rlen = 512,
2955 }
2956 };
2957
2958 static struct cipher_testvec aes_xts_enc_tv_template[] = {
2959 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
2960 { /* XTS-AES 1 */
2961 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2962 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2963 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2964 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2965 .klen = 32,
2966 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2967 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2968 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2969 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2970 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2971 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2972 .ilen = 32,
2973 .result = { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec,
2974 0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92,
2975 0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85,
2976 0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e },
2977 .rlen = 32,
2978 }, { /* XTS-AES 2 */
2979 .key = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
2980 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
2981 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
2982 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
2983 .klen = 32,
2984 .iv = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
2985 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2986 .input = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2987 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2988 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2989 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
2990 .ilen = 32,
2991 .result = { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e,
2992 0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b,
2993 0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4,
2994 0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0 },
2995 .rlen = 32,
2996 }, { /* XTS-AES 3 */
2997 .key = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
2998 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
2999 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3000 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3001 .klen = 32,
3002 .iv = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3003 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3004 .input = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3005 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3006 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3007 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3008 .ilen = 32,
3009 .result = { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a,
3010 0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2,
3011 0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53,
3012 0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89 },
3013 .rlen = 32,
3014 }, { /* XTS-AES 4 */
3015 .key = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
3016 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
3017 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
3018 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95 },
3019 .klen = 32,
3020 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3021 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3022 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3023 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3024 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3025 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3026 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3027 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3028 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3029 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3030 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3031 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3032 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3033 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3034 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3035 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3036 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3037 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3038 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3039 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3040 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3041 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3042 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3043 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3044 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3045 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3046 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3047 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3048 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3049 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3050 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3051 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3052 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3053 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3054 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3055 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3056 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3057 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3058 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3059 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3060 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3061 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3062 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3063 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3064 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3065 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3066 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3067 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3068 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3069 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3070 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3071 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3072 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3073 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3074 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3075 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3076 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3077 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3078 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3079 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3080 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3081 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3082 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3083 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3084 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3085 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
3086 .ilen = 512,
3087 .result = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
3088 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
3089 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
3090 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
3091 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
3092 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
3093 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
3094 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
3095 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
3096 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
3097 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
3098 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
3099 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
3100 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
3101 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
3102 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
3103 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
3104 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
3105 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
3106 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
3107 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
3108 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
3109 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
3110 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
3111 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
3112 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
3113 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
3114 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
3115 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
3116 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
3117 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
3118 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
3119 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
3120 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
3121 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
3122 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
3123 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
3124 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
3125 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
3126 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
3127 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
3128 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
3129 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
3130 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
3131 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
3132 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
3133 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
3134 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
3135 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
3136 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
3137 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
3138 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
3139 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
3140 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
3141 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
3142 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
3143 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
3144 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
3145 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
3146 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
3147 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
3148 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
3149 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
3150 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68 },
3151 .rlen = 512,
3152 }
3153 };
3154
3155 static struct cipher_testvec aes_xts_dec_tv_template[] = {
3156 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3157 { /* XTS-AES 1 */
3158 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3162 .klen = 32,
3163 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3165 .input = { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec,
3166 0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92,
3167 0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85,
3168 0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e },
3169 .ilen = 32,
3170 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3174 .rlen = 32,
3175 }, { /* XTS-AES 2 */
3176 .key = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
3177 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
3178 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3179 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3180 .klen = 32,
3181 .iv = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3183 .input = { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e,
3184 0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b,
3185 0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4,
3186 0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0 },
3187 .ilen = 32,
3188 .result = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3189 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3190 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3191 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3192 .rlen = 32,
3193 }, { /* XTS-AES 3 */
3194 .key = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
3195 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
3196 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3197 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3198 .klen = 32,
3199 .iv = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3201 .input = { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a,
3202 0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2,
3203 0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53,
3204 0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89 },
3205 .ilen = 32,
3206 .result = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3207 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3208 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3209 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3210 .rlen = 32,
3211 }, { /* XTS-AES 4 */
3212 .key = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
3213 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
3214 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
3215 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95 },
3216 .klen = 32,
3217 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3218 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3219 .input = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
3220 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
3221 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
3222 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
3223 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
3224 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
3225 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
3226 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
3227 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
3228 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
3229 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
3230 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
3231 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
3232 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
3233 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
3234 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
3235 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
3236 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
3237 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
3238 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
3239 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
3240 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
3241 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
3242 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
3243 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
3244 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
3245 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
3246 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
3247 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
3248 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
3249 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
3250 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
3251 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
3252 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
3253 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
3254 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
3255 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
3256 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
3257 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
3258 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
3259 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
3260 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
3261 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
3262 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
3263 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
3264 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
3265 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
3266 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
3267 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
3268 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
3269 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
3270 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
3271 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
3272 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
3273 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
3274 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
3275 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
3276 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
3277 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
3278 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
3279 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
3280 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
3281 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
3282 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68 },
3283 .ilen = 512,
3284 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3285 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3286 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3287 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3288 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3289 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3290 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3291 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3292 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3293 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3294 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3295 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3296 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3297 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3298 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3299 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3300 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3301 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3302 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3303 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3304 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3305 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3306 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3307 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3308 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3309 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3310 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3311 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3312 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3313 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3314 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3315 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3316 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3317 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3318 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3319 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3320 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3321 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3322 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3323 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3324 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3325 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3326 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3327 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3328 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3329 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3330 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3331 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3332 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3333 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3334 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3335 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3336 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3337 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3338 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3339 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3340 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3341 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3342 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3343 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3344 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3345 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3346 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3347 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
3348 .rlen = 512,
3349 }
3350 };
3351
3352
3353 static struct cipher_testvec aes_ctr_enc_tv_template[] = {
3354 { /* From RFC 3686 */
3355 .key = { 0xae, 0x68, 0x52, 0xf8, 0x12, 0x10, 0x67, 0xcc,
3356 0x4b, 0xf7, 0xa5, 0x76, 0x55, 0x77, 0xf3, 0x9e,
3357 0x00, 0x00, 0x00, 0x30 },
3358 .klen = 20,
3359 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3360 .input = { "Single block msg" },
3361 .ilen = 16,
3362 .result = { 0xe4, 0x09, 0x5d, 0x4f, 0xb7, 0xa7, 0xb3, 0x79,
3363 0x2d, 0x61, 0x75, 0xa3, 0x26, 0x13, 0x11, 0xb8 },
3364 .rlen = 16,
3365 }, {
3366 .key = { 0x7e, 0x24, 0x06, 0x78, 0x17, 0xfa, 0xe0, 0xd7,
3367 0x43, 0xd6, 0xce, 0x1f, 0x32, 0x53, 0x91, 0x63,
3368 0x00, 0x6c, 0xb6, 0xdb },
3369 .klen = 20,
3370 .iv = { 0xc0, 0x54, 0x3b, 0x59, 0xda, 0x48, 0xd9, 0x0b },
3371 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3372 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3373 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3374 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3375 .ilen = 32,
3376 .result = { 0x51, 0x04, 0xa1, 0x06, 0x16, 0x8a, 0x72, 0xd9,
3377 0x79, 0x0d, 0x41, 0xee, 0x8e, 0xda, 0xd3, 0x88,
3378 0xeb, 0x2e, 0x1e, 0xfc, 0x46, 0xda, 0x57, 0xc8,
3379 0xfc, 0xe6, 0x30, 0xdf, 0x91, 0x41, 0xbe, 0x28 },
3380 .rlen = 32,
3381 }, {
3382 .key = { 0x16, 0xaf, 0x5b, 0x14, 0x5f, 0xc9, 0xf5, 0x79,
3383 0xc1, 0x75, 0xf9, 0x3e, 0x3b, 0xfb, 0x0e, 0xed,
3384 0x86, 0x3d, 0x06, 0xcc, 0xfd, 0xb7, 0x85, 0x15,
3385 0x00, 0x00, 0x00, 0x48 },
3386 .klen = 28,
3387 .iv = { 0x36, 0x73, 0x3c, 0x14, 0x7d, 0x6d, 0x93, 0xcb },
3388 .input = { "Single block msg" },
3389 .ilen = 16,
3390 .result = { 0x4b, 0x55, 0x38, 0x4f, 0xe2, 0x59, 0xc9, 0xc8,
3391 0x4e, 0x79, 0x35, 0xa0, 0x03, 0xcb, 0xe9, 0x28 },
3392 .rlen = 16,
3393 }, {
3394 .key = { 0x7c, 0x5c, 0xb2, 0x40, 0x1b, 0x3d, 0xc3, 0x3c,
3395 0x19, 0xe7, 0x34, 0x08, 0x19, 0xe0, 0xf6, 0x9c,
3396 0x67, 0x8c, 0x3d, 0xb8, 0xe6, 0xf6, 0xa9, 0x1a,
3397 0x00, 0x96, 0xb0, 0x3b },
3398 .klen = 28,
3399 .iv = { 0x02, 0x0c, 0x6e, 0xad, 0xc2, 0xcb, 0x50, 0x0d },
3400 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3401 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3402 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3403 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3404 .ilen = 32,
3405 .result = { 0x45, 0x32, 0x43, 0xfc, 0x60, 0x9b, 0x23, 0x32,
3406 0x7e, 0xdf, 0xaa, 0xfa, 0x71, 0x31, 0xcd, 0x9f,
3407 0x84, 0x90, 0x70, 0x1c, 0x5a, 0xd4, 0xa7, 0x9c,
3408 0xfc, 0x1f, 0xe0, 0xff, 0x42, 0xf4, 0xfb, 0x00 },
3409 .rlen = 32,
3410 }, {
3411 .key = { 0x77, 0x6b, 0xef, 0xf2, 0x85, 0x1d, 0xb0, 0x6f,
3412 0x4c, 0x8a, 0x05, 0x42, 0xc8, 0x69, 0x6f, 0x6c,
3413 0x6a, 0x81, 0xaf, 0x1e, 0xec, 0x96, 0xb4, 0xd3,
3414 0x7f, 0xc1, 0xd6, 0x89, 0xe6, 0xc1, 0xc1, 0x04,
3415 0x00, 0x00, 0x00, 0x60 },
3416 .klen = 36,
3417 .iv = { 0xdb, 0x56, 0x72, 0xc9, 0x7a, 0xa8, 0xf0, 0xb2 },
3418 .input = { "Single block msg" },
3419 .ilen = 16,
3420 .result = { 0x14, 0x5a, 0xd0, 0x1d, 0xbf, 0x82, 0x4e, 0xc7,
3421 0x56, 0x08, 0x63, 0xdc, 0x71, 0xe3, 0xe0, 0xc0 },
3422 .rlen = 16,
3423 }, {
3424 .key = { 0xf6, 0xd6, 0x6d, 0x6b, 0xd5, 0x2d, 0x59, 0xbb,
3425 0x07, 0x96, 0x36, 0x58, 0x79, 0xef, 0xf8, 0x86,
3426 0xc6, 0x6d, 0xd5, 0x1a, 0x5b, 0x6a, 0x99, 0x74,
3427 0x4b, 0x50, 0x59, 0x0c, 0x87, 0xa2, 0x38, 0x84,
3428 0x00, 0xfa, 0xac, 0x24 },
3429 .klen = 36,
3430 .iv = { 0xc1, 0x58, 0x5e, 0xf1, 0x5a, 0x43, 0xd8, 0x75 },
3431 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3432 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3433 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3434 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3435 .ilen = 32,
3436 .result = { 0xf0, 0x5e, 0x23, 0x1b, 0x38, 0x94, 0x61, 0x2c,
3437 0x49, 0xee, 0x00, 0x0b, 0x80, 0x4e, 0xb2, 0xa9,
3438 0xb8, 0x30, 0x6b, 0x50, 0x8f, 0x83, 0x9d, 0x6a,
3439 0x55, 0x30, 0x83, 0x1d, 0x93, 0x44, 0xaf, 0x1c },
3440 .rlen = 32,
3441 },
3442 };
3443
3444 static struct cipher_testvec aes_ctr_dec_tv_template[] = {
3445 { /* From RFC 3686 */
3446 .key = { 0xae, 0x68, 0x52, 0xf8, 0x12, 0x10, 0x67, 0xcc,
3447 0x4b, 0xf7, 0xa5, 0x76, 0x55, 0x77, 0xf3, 0x9e,
3448 0x00, 0x00, 0x00, 0x30 },
3449 .klen = 20,
3450 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3451 .input = { 0xe4, 0x09, 0x5d, 0x4f, 0xb7, 0xa7, 0xb3, 0x79,
3452 0x2d, 0x61, 0x75, 0xa3, 0x26, 0x13, 0x11, 0xb8 },
3453 .ilen = 16,
3454 .result = { "Single block msg" },
3455 .rlen = 16,
3456 }, {
3457 .key = { 0x7e, 0x24, 0x06, 0x78, 0x17, 0xfa, 0xe0, 0xd7,
3458 0x43, 0xd6, 0xce, 0x1f, 0x32, 0x53, 0x91, 0x63,
3459 0x00, 0x6c, 0xb6, 0xdb },
3460 .klen = 20,
3461 .iv = { 0xc0, 0x54, 0x3b, 0x59, 0xda, 0x48, 0xd9, 0x0b },
3462 .input = { 0x51, 0x04, 0xa1, 0x06, 0x16, 0x8a, 0x72, 0xd9,
3463 0x79, 0x0d, 0x41, 0xee, 0x8e, 0xda, 0xd3, 0x88,
3464 0xeb, 0x2e, 0x1e, 0xfc, 0x46, 0xda, 0x57, 0xc8,
3465 0xfc, 0xe6, 0x30, 0xdf, 0x91, 0x41, 0xbe, 0x28 },
3466 .ilen = 32,
3467 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3468 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3469 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3470 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3471 .rlen = 32,
3472 }, {
3473 .key = { 0x16, 0xaf, 0x5b, 0x14, 0x5f, 0xc9, 0xf5, 0x79,
3474 0xc1, 0x75, 0xf9, 0x3e, 0x3b, 0xfb, 0x0e, 0xed,
3475 0x86, 0x3d, 0x06, 0xcc, 0xfd, 0xb7, 0x85, 0x15,
3476 0x00, 0x00, 0x00, 0x48 },
3477 .klen = 28,
3478 .iv = { 0x36, 0x73, 0x3c, 0x14, 0x7d, 0x6d, 0x93, 0xcb },
3479 .input = { 0x4b, 0x55, 0x38, 0x4f, 0xe2, 0x59, 0xc9, 0xc8,
3480 0x4e, 0x79, 0x35, 0xa0, 0x03, 0xcb, 0xe9, 0x28 },
3481 .ilen = 16,
3482 .result = { "Single block msg" },
3483 .rlen = 16,
3484 }, {
3485 .key = { 0x7c, 0x5c, 0xb2, 0x40, 0x1b, 0x3d, 0xc3, 0x3c,
3486 0x19, 0xe7, 0x34, 0x08, 0x19, 0xe0, 0xf6, 0x9c,
3487 0x67, 0x8c, 0x3d, 0xb8, 0xe6, 0xf6, 0xa9, 0x1a,
3488 0x00, 0x96, 0xb0, 0x3b },
3489 .klen = 28,
3490 .iv = { 0x02, 0x0c, 0x6e, 0xad, 0xc2, 0xcb, 0x50, 0x0d },
3491 .input = { 0x45, 0x32, 0x43, 0xfc, 0x60, 0x9b, 0x23, 0x32,
3492 0x7e, 0xdf, 0xaa, 0xfa, 0x71, 0x31, 0xcd, 0x9f,
3493 0x84, 0x90, 0x70, 0x1c, 0x5a, 0xd4, 0xa7, 0x9c,
3494 0xfc, 0x1f, 0xe0, 0xff, 0x42, 0xf4, 0xfb, 0x00 },
3495 .ilen = 32,
3496 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3497 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3498 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3499 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3500 .rlen = 32,
3501 }, {
3502 .key = { 0x77, 0x6b, 0xef, 0xf2, 0x85, 0x1d, 0xb0, 0x6f,
3503 0x4c, 0x8a, 0x05, 0x42, 0xc8, 0x69, 0x6f, 0x6c,
3504 0x6a, 0x81, 0xaf, 0x1e, 0xec, 0x96, 0xb4, 0xd3,
3505 0x7f, 0xc1, 0xd6, 0x89, 0xe6, 0xc1, 0xc1, 0x04,
3506 0x00, 0x00, 0x00, 0x60 },
3507 .klen = 36,
3508 .iv = { 0xdb, 0x56, 0x72, 0xc9, 0x7a, 0xa8, 0xf0, 0xb2 },
3509 .input = { 0x14, 0x5a, 0xd0, 0x1d, 0xbf, 0x82, 0x4e, 0xc7,
3510 0x56, 0x08, 0x63, 0xdc, 0x71, 0xe3, 0xe0, 0xc0 },
3511 .ilen = 16,
3512 .result = { "Single block msg" },
3513 .rlen = 16,
3514 }, {
3515 .key = { 0xf6, 0xd6, 0x6d, 0x6b, 0xd5, 0x2d, 0x59, 0xbb,
3516 0x07, 0x96, 0x36, 0x58, 0x79, 0xef, 0xf8, 0x86,
3517 0xc6, 0x6d, 0xd5, 0x1a, 0x5b, 0x6a, 0x99, 0x74,
3518 0x4b, 0x50, 0x59, 0x0c, 0x87, 0xa2, 0x38, 0x84,
3519 0x00, 0xfa, 0xac, 0x24 },
3520 .klen = 36,
3521 .iv = { 0xc1, 0x58, 0x5e, 0xf1, 0x5a, 0x43, 0xd8, 0x75 },
3522 .input = { 0xf0, 0x5e, 0x23, 0x1b, 0x38, 0x94, 0x61, 0x2c,
3523 0x49, 0xee, 0x00, 0x0b, 0x80, 0x4e, 0xb2, 0xa9,
3524 0xb8, 0x30, 0x6b, 0x50, 0x8f, 0x83, 0x9d, 0x6a,
3525 0x55, 0x30, 0x83, 0x1d, 0x93, 0x44, 0xaf, 0x1c },
3526 .ilen = 32,
3527 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3528 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3529 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3530 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3531 .rlen = 32,
3532 },
3533 };
3534
3535 static struct aead_testvec aes_gcm_enc_tv_template[] = {
3536 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
3537 .klen = 16,
3538 .tag = { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
3539 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a },
3540 .tlen = 16
3541 }, {
3542 .klen = 16,
3543 .ilen = 16,
3544 .result = { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
3545 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 },
3546 .rlen = 16,
3547 .tag = { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
3548 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf },
3549 .tlen = 16
3550 }, {
3551 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3552 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3553 .klen = 16,
3554 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3555 0xde, 0xca, 0xf8, 0x88 },
3556 .input = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3557 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3558 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3559 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3560 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3561 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3562 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3563 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
3564 .ilen = 64,
3565 .result = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
3566 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
3567 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
3568 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
3569 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
3570 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
3571 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
3572 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 },
3573 .rlen = 64,
3574 .tag = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
3575 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
3576 .tlen = 16
3577 }, {
3578 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3579 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3580 .klen = 16,
3581 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3582 0xde, 0xca, 0xf8, 0x88 },
3583 .input = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3584 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3585 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3586 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3587 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3588 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3589 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3590 0xba, 0x63, 0x7b, 0x39 },
3591 .ilen = 60,
3592 .assoc = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3593 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3594 0xab, 0xad, 0xda, 0xd2 },
3595 .alen = 20,
3596 .result = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
3597 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
3598 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
3599 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
3600 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
3601 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
3602 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
3603 0x3d, 0x58, 0xe0, 0x91 },
3604 .rlen = 60,
3605 .tag = { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
3606 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 },
3607 .tlen = 16
3608 }, {
3609 .klen = 24,
3610 .tag = { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b,
3611 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 },
3612 .tlen = 16
3613 }, {
3614 .klen = 24,
3615 .ilen = 16,
3616 .result = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
3617 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 },
3618 .rlen = 16,
3619 .tag = { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
3620 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb },
3621 .tlen = 16
3622 }, {
3623 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3624 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3625 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
3626 .klen = 24,
3627 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3628 0xde, 0xca, 0xf8, 0x88 },
3629 .input = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3630 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3631 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3632 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3633 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3634 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3635 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3636 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
3637 .ilen = 64,
3638 .result = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
3639 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
3640 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
3641 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
3642 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
3643 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
3644 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
3645 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 },
3646 .rlen = 64,
3647 .tag = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
3648 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 },
3649 .tlen = 16
3650 }, {
3651 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3652 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3653 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
3654 .klen = 24,
3655 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3656 0xde, 0xca, 0xf8, 0x88 },
3657 .input = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3658 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3659 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3660 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3661 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3662 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3663 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3664 0xba, 0x63, 0x7b, 0x39 },
3665 .ilen = 60,
3666 .assoc = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3667 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3668 0xab, 0xad, 0xda, 0xd2 },
3669 .alen = 20,
3670 .result = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
3671 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
3672 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
3673 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
3674 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
3675 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
3676 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
3677 0xcc, 0xda, 0x27, 0x10 },
3678 .rlen = 60,
3679 .tag = { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
3680 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c },
3681 .tlen = 16,
3682 .np = 2,
3683 .tap = { 32, 28 },
3684 .anp = 2,
3685 .atap = { 8, 12 }
3686 }, {
3687 .klen = 32,
3688 .tag = { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9,
3689 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b },
3690 .tlen = 16
3691 }
3692 };
3693
3694 static struct aead_testvec aes_gcm_dec_tv_template[] = {
3695 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
3696 .klen = 32,
3697 .input = { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e,
3698 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 },
3699 .ilen = 16,
3700 .rlen = 16,
3701 .tag = { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0,
3702 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 },
3703 .tlen = 16
3704 }, {
3705 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3706 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3707 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3708 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3709 .klen = 32,
3710 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3711 0xde, 0xca, 0xf8, 0x88 },
3712 .input = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
3713 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
3714 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
3715 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
3716 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
3717 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
3718 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
3719 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad },
3720 .ilen = 64,
3721 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3722 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3723 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3724 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3725 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3726 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3727 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3728 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
3729 .rlen = 64,
3730 .tag = { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd,
3731 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c },
3732 .tlen = 16
3733 }, {
3734 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3735 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3736 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3737 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3738 .klen = 32,
3739 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3740 0xde, 0xca, 0xf8, 0x88 },
3741 .input = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
3742 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
3743 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
3744 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
3745 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
3746 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
3747 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
3748 0xbc, 0xc9, 0xf6, 0x62 },
3749 .ilen = 60,
3750 .assoc = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3751 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3752 0xab, 0xad, 0xda, 0xd2 },
3753 .alen = 20,
3754 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3755 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3756 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3757 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3758 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3759 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3760 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3761 0xba, 0x63, 0x7b, 0x39 },
3762 .rlen = 60,
3763 .tag = { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68,
3764 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b },
3765 .tlen = 16,
3766 .np = 2,
3767 .tap = { 48, 12 },
3768 .anp = 3,
3769 .atap = { 8, 8, 4 }
3770 }, {
3771 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3772 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3773 .klen = 16,
3774 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3775 0xde, 0xca, 0xf8, 0x88 },
3776 .input = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
3777 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
3778 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
3779 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
3780 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
3781 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
3782 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
3783 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 },
3784 .ilen = 64,
3785 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3786 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3787 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3788 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3789 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3790 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3791 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3792 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
3793 .rlen = 64,
3794 .tag = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
3795 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
3796 .tlen = 16
3797 }, {
3798 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3799 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
3800 .klen = 16,
3801 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3802 0xde, 0xca, 0xf8, 0x88 },
3803 .input = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
3804 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
3805 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
3806 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
3807 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
3808 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
3809 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
3810 0x3d, 0x58, 0xe0, 0x91 },
3811 .ilen = 60,
3812 .assoc = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3813 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3814 0xab, 0xad, 0xda, 0xd2 },
3815 .alen = 20,
3816 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3817 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3818 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3819 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3820 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3821 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3822 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3823 0xba, 0x63, 0x7b, 0x39 },
3824 .rlen = 60,
3825 .tag = { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
3826 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 },
3827 .tlen = 16
3828 }, {
3829 .klen = 24,
3830 .input = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
3831 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 },
3832 .ilen = 16,
3833 .rlen = 16,
3834 .tag = { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
3835 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb },
3836 .tlen = 16
3837 }, {
3838 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3839 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3840 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
3841 .klen = 24,
3842 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3843 0xde, 0xca, 0xf8, 0x88 },
3844 .input = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
3845 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
3846 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
3847 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
3848 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
3849 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
3850 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
3851 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 },
3852 .ilen = 64,
3853 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3854 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3855 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3856 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3857 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3858 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3859 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3860 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
3861 .rlen = 64,
3862 .tag = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
3863 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 },
3864 .tlen = 16
3865 }, {
3866 .key = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
3867 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
3868 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
3869 .klen = 24,
3870 .iv = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
3871 0xde, 0xca, 0xf8, 0x88 },
3872 .input = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
3873 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
3874 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
3875 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
3876 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
3877 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
3878 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
3879 0xcc, 0xda, 0x27, 0x10 },
3880 .ilen = 60,
3881 .assoc = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3882 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
3883 0xab, 0xad, 0xda, 0xd2 },
3884 .alen = 20,
3885 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
3886 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
3887 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
3888 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
3889 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
3890 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
3891 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
3892 0xba, 0x63, 0x7b, 0x39 },
3893 .rlen = 60,
3894 .tag = { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
3895 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c },
3896 .tlen = 16
3897 }
3898 };
3899
3900 /* Cast5 test vectors from RFC 2144 */
3901 #define CAST5_ENC_TEST_VECTORS 3
3902 #define CAST5_DEC_TEST_VECTORS 3
3903
3904 static struct cipher_testvec cast5_enc_tv_template[] = {
3905 {
3906 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
3907 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
3908 .klen = 16,
3909 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3910 .ilen = 8,
3911 .result = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
3912 .rlen = 8,
3913 }, {
3914 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
3915 0x23, 0x45 },
3916 .klen = 10,
3917 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3918 .ilen = 8,
3919 .result = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
3920 .rlen = 8,
3921 }, {
3922 .key = { 0x01, 0x23, 0x45, 0x67, 0x12 },
3923 .klen = 5,
3924 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3925 .ilen = 8,
3926 .result = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
3927 .rlen = 8,
3928 },
3929 };
3930
3931 static struct cipher_testvec cast5_dec_tv_template[] = {
3932 {
3933 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
3934 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
3935 .klen = 16,
3936 .input = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
3937 .ilen = 8,
3938 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3939 .rlen = 8,
3940 }, {
3941 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
3942 0x23, 0x45 },
3943 .klen = 10,
3944 .input = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
3945 .ilen = 8,
3946 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3947 .rlen = 8,
3948 }, {
3949 .key = { 0x01, 0x23, 0x45, 0x67, 0x12 },
3950 .klen = 5,
3951 .input = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
3952 .ilen = 8,
3953 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3954 .rlen = 8,
3955 },
3956 };
3957
3958 /*
3959 * ARC4 test vectors from OpenSSL
3960 */
3961 #define ARC4_ENC_TEST_VECTORS 7
3962 #define ARC4_DEC_TEST_VECTORS 7
3963
3964 static struct cipher_testvec arc4_enc_tv_template[] = {
3965 {
3966 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3967 .klen = 8,
3968 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3969 .ilen = 8,
3970 .result = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
3971 .rlen = 8,
3972 }, {
3973 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3974 .klen = 8,
3975 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3976 .ilen = 8,
3977 .result = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
3978 .rlen = 8,
3979 }, {
3980 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3981 .klen = 8,
3982 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3983 .ilen = 8,
3984 .result = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
3985 .rlen = 8,
3986 }, {
3987 .key = { 0xef, 0x01, 0x23, 0x45},
3988 .klen = 4,
3989 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3990 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3991 0x00, 0x00, 0x00, 0x00 },
3992 .ilen = 20,
3993 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
3994 0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
3995 0x36, 0xb6, 0x78, 0x58 },
3996 .rlen = 20,
3997 }, {
3998 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
3999 .klen = 8,
4000 .input = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4001 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4002 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4003 0x12, 0x34, 0x56, 0x78 },
4004 .ilen = 28,
4005 .result = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
4006 0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
4007 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
4008 0x40, 0x01, 0x1e, 0xcf },
4009 .rlen = 28,
4010 }, {
4011 .key = { 0xef, 0x01, 0x23, 0x45 },
4012 .klen = 4,
4013 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4014 0x00, 0x00 },
4015 .ilen = 10,
4016 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
4017 0xbd, 0x61 },
4018 .rlen = 10,
4019 }, {
4020 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
4021 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4022 .klen = 16,
4023 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
4024 .ilen = 8,
4025 .result = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
4026 .rlen = 8,
4027 },
4028 };
4029
4030 static struct cipher_testvec arc4_dec_tv_template[] = {
4031 {
4032 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4033 .klen = 8,
4034 .input = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
4035 .ilen = 8,
4036 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4037 .rlen = 8,
4038 }, {
4039 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4040 .klen = 8,
4041 .input = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
4042 .ilen = 8,
4043 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4044 .rlen = 8,
4045 }, {
4046 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4047 .klen = 8,
4048 .input = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
4049 .ilen = 8,
4050 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4051 .rlen = 8,
4052 }, {
4053 .key = { 0xef, 0x01, 0x23, 0x45},
4054 .klen = 4,
4055 .input = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
4056 0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
4057 0x36, 0xb6, 0x78, 0x58 },
4058 .ilen = 20,
4059 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4060 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4061 0x00, 0x00, 0x00, 0x00 },
4062 .rlen = 20,
4063 }, {
4064 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4065 .klen = 8,
4066 .input = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
4067 0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
4068 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
4069 0x40, 0x01, 0x1e, 0xcf },
4070 .ilen = 28,
4071 .result = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4072 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4073 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
4074 0x12, 0x34, 0x56, 0x78 },
4075 .rlen = 28,
4076 }, {
4077 .key = { 0xef, 0x01, 0x23, 0x45 },
4078 .klen = 4,
4079 .input = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
4080 0xbd, 0x61 },
4081 .ilen = 10,
4082 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4083 0x00, 0x00 },
4084 .rlen = 10,
4085 }, {
4086 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
4087 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4088 .klen = 16,
4089 .input = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
4090 .ilen = 8,
4091 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
4092 .rlen = 8,
4093 },
4094 };
4095
4096 /*
4097 * TEA test vectors
4098 */
4099 #define TEA_ENC_TEST_VECTORS 4
4100 #define TEA_DEC_TEST_VECTORS 4
4101
4102 static struct cipher_testvec tea_enc_tv_template[] = {
4103 {
4104 .key = { [0 ... 15] = 0x00 },
4105 .klen = 16,
4106 .input = { [0 ... 8] = 0x00 },
4107 .ilen = 8,
4108 .result = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
4109 .rlen = 8,
4110 }, {
4111 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4112 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4113 .klen = 16,
4114 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4115 .ilen = 8,
4116 .result = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
4117 .rlen = 8,
4118 }, {
4119 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4120 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4121 .klen = 16,
4122 .input = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
4123 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4124 .ilen = 16,
4125 .result = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
4126 0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
4127 .rlen = 16,
4128 }, {
4129 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4130 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4131 .klen = 16,
4132 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4133 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4134 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4135 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4136 .ilen = 32,
4137 .result = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
4138 0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
4139 0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
4140 0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
4141 .rlen = 32,
4142 }
4143 };
4144
4145 static struct cipher_testvec tea_dec_tv_template[] = {
4146 {
4147 .key = { [0 ... 15] = 0x00 },
4148 .klen = 16,
4149 .input = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
4150 .ilen = 8,
4151 .result = { [0 ... 8] = 0x00 },
4152 .rlen = 8,
4153 }, {
4154 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4155 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4156 .klen = 16,
4157 .input = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
4158 .ilen = 8,
4159 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4160 .rlen = 8,
4161 }, {
4162 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4163 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4164 .klen = 16,
4165 .input = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
4166 0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
4167 .ilen = 16,
4168 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
4169 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4170 .rlen = 16,
4171 }, {
4172 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4173 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4174 .klen = 16,
4175 .input = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
4176 0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
4177 0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
4178 0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
4179 .ilen = 32,
4180 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4181 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4182 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4183 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4184 .rlen = 32,
4185 }
4186 };
4187
4188 /*
4189 * XTEA test vectors
4190 */
4191 #define XTEA_ENC_TEST_VECTORS 4
4192 #define XTEA_DEC_TEST_VECTORS 4
4193
4194 static struct cipher_testvec xtea_enc_tv_template[] = {
4195 {
4196 .key = { [0 ... 15] = 0x00 },
4197 .klen = 16,
4198 .input = { [0 ... 8] = 0x00 },
4199 .ilen = 8,
4200 .result = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
4201 .rlen = 8,
4202 }, {
4203 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4204 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4205 .klen = 16,
4206 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4207 .ilen = 8,
4208 .result = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
4209 .rlen = 8,
4210 }, {
4211 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4212 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4213 .klen = 16,
4214 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
4215 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4216 .ilen = 16,
4217 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
4218 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
4219 .rlen = 16,
4220 }, {
4221 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4222 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4223 .klen = 16,
4224 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4225 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4226 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4227 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4228 .ilen = 32,
4229 .result = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
4230 0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
4231 0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
4232 0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
4233 .rlen = 32,
4234 }
4235 };
4236
4237 static struct cipher_testvec xtea_dec_tv_template[] = {
4238 {
4239 .key = { [0 ... 15] = 0x00 },
4240 .klen = 16,
4241 .input = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
4242 .ilen = 8,
4243 .result = { [0 ... 8] = 0x00 },
4244 .rlen = 8,
4245 }, {
4246 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4247 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4248 .klen = 16,
4249 .input = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
4250 .ilen = 8,
4251 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4252 .rlen = 8,
4253 }, {
4254 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4255 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4256 .klen = 16,
4257 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
4258 0x77, 0x4d, 0xd4, 0xb4, 0x87, 0x24, 0xe3, 0x9a },
4259 .ilen = 16,
4260 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
4261 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4262 .rlen = 16,
4263 }, {
4264 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4265 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4266 .klen = 16,
4267 .input = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
4268 0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
4269 0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
4270 0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
4271 .ilen = 32,
4272 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4273 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4274 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4275 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4276 .rlen = 32,
4277 }
4278 };
4279
4280 /*
4281 * KHAZAD test vectors.
4282 */
4283 #define KHAZAD_ENC_TEST_VECTORS 5
4284 #define KHAZAD_DEC_TEST_VECTORS 5
4285
4286 static struct cipher_testvec khazad_enc_tv_template[] = {
4287 {
4288 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4290 .klen = 16,
4291 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4292 .ilen = 8,
4293 .result = { 0x49, 0xa4, 0xce, 0x32, 0xac, 0x19, 0x0e, 0x3f },
4294 .rlen = 8,
4295 }, {
4296 .key = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
4297 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
4298 .klen = 16,
4299 .input = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
4300 .ilen = 8,
4301 .result = { 0x7e, 0x82, 0x12, 0xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
4302 .rlen = 8,
4303 }, {
4304 .key = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
4305 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
4306 .klen = 16,
4307 .input = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
4308 .ilen = 8,
4309 .result = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
4310 .rlen = 8,
4311 }, {
4312 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
4313 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4314 .klen = 16,
4315 .input = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4316 .ilen = 8,
4317 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
4318 .rlen = 8,
4319 }, {
4320 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
4321 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4322 .klen = 16,
4323 .input = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
4324 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4325 .ilen = 16,
4326 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
4327 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
4328 .rlen = 16,
4329 },
4330 };
4331
4332 static struct cipher_testvec khazad_dec_tv_template[] = {
4333 {
4334 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4336 .klen = 16,
4337 .input = { 0X49, 0Xa4, 0Xce, 0X32, 0Xac, 0X19, 0X0e, 0X3f },
4338 .ilen = 8,
4339 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4340 .rlen = 8,
4341 }, {
4342 .key = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
4343 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
4344 .klen = 16,
4345 .input = { 0X7e, 0X82, 0X12, 0Xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
4346 .ilen = 8,
4347 .result = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
4348 .rlen = 8,
4349 }, {
4350 .key = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
4351 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
4352 .klen = 16,
4353 .input = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
4354 .ilen = 8,
4355 .result = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
4356 .rlen = 8,
4357 }, {
4358 .key = { 0x2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
4359 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4360 .klen = 16,
4361 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
4362 .ilen = 8,
4363 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4364 .rlen = 8,
4365 }, {
4366 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
4367 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4368 .klen = 16,
4369 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
4370 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
4371 .ilen = 16,
4372 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
4373 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
4374 .rlen = 16,
4375 },
4376 };
4377
4378 /*
4379 * Anubis test vectors.
4380 */
4381
4382 #define ANUBIS_ENC_TEST_VECTORS 5
4383 #define ANUBIS_DEC_TEST_VECTORS 5
4384 #define ANUBIS_CBC_ENC_TEST_VECTORS 2
4385 #define ANUBIS_CBC_DEC_TEST_VECTORS 2
4386
4387 static struct cipher_testvec anubis_enc_tv_template[] = {
4388 {
4389 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4390 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4391 .klen = 16,
4392 .input = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4393 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4394 .ilen = 16,
4395 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
4396 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
4397 .rlen = 16,
4398 }, {
4399
4400 .key = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4401 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4402 0x03, 0x03, 0x03, 0x03 },
4403 .klen = 20,
4404 .input = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4405 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
4406 .ilen = 16,
4407 .result = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
4408 0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
4409 .rlen = 16,
4410 }, {
4411 .key = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4412 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4413 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4414 0x24, 0x24, 0x24, 0x24 },
4415 .klen = 28,
4416 .input = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4417 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
4418 .ilen = 16,
4419 .result = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
4420 0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
4421 .rlen = 16,
4422 }, {
4423 .key = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4424 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4425 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4426 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
4427 .klen = 32,
4428 .input = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4429 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
4430 .ilen = 16,
4431 .result = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
4432 0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
4433 .rlen = 16,
4434 }, {
4435 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4436 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4437 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4438 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4439 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4440 .klen = 40,
4441 .input = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4442 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4443 .ilen = 16,
4444 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
4445 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
4446 .rlen = 16,
4447 },
4448 };
4449
4450 static struct cipher_testvec anubis_dec_tv_template[] = {
4451 {
4452 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4453 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4454 .klen = 16,
4455 .input = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
4456 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
4457 .ilen = 16,
4458 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4459 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4460 .rlen = 16,
4461 }, {
4462
4463 .key = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4464 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4465 0x03, 0x03, 0x03, 0x03 },
4466 .klen = 20,
4467 .input = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
4468 0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
4469 .ilen = 16,
4470 .result = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
4471 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
4472 .rlen = 16,
4473 }, {
4474 .key = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4475 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4476 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4477 0x24, 0x24, 0x24, 0x24 },
4478 .klen = 28,
4479 .input = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
4480 0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
4481 .ilen = 16,
4482 .result = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
4483 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
4484 .rlen = 16,
4485 }, {
4486 .key = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4487 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4488 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4489 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
4490 .klen = 32,
4491 .input = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
4492 0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
4493 .ilen = 16,
4494 .result = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
4495 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
4496 .rlen = 16,
4497 }, {
4498 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4499 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4500 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4501 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4502 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4503 .input = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
4504 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
4505 .klen = 40,
4506 .ilen = 16,
4507 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4508 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4509 .rlen = 16,
4510 },
4511 };
4512
4513 static struct cipher_testvec anubis_cbc_enc_tv_template[] = {
4514 {
4515 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4516 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4517 .klen = 16,
4518 .input = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4519 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4520 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4521 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4522 .ilen = 32,
4523 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
4524 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
4525 0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
4526 0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
4527 .rlen = 32,
4528 }, {
4529 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4530 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4531 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4532 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4533 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4534 .klen = 40,
4535 .input = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4536 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4537 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4538 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4539 .ilen = 32,
4540 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
4541 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
4542 0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
4543 0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
4544 .rlen = 32,
4545 },
4546 };
4547
4548 static struct cipher_testvec anubis_cbc_dec_tv_template[] = {
4549 {
4550 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4551 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4552 .klen = 16,
4553 .input = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
4554 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
4555 0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
4556 0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
4557 .ilen = 32,
4558 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4559 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4560 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
4561 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
4562 .rlen = 32,
4563 }, {
4564 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4565 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4566 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4567 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4568 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4569 .klen = 40,
4570 .input = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
4571 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
4572 0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
4573 0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
4574 .ilen = 32,
4575 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4576 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4577 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
4578 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
4579 .rlen = 32,
4580 },
4581 };
4582
4583 /*
4584 * XETA test vectors
4585 */
4586 #define XETA_ENC_TEST_VECTORS 4
4587 #define XETA_DEC_TEST_VECTORS 4
4588
4589 static struct cipher_testvec xeta_enc_tv_template[] = {
4590 {
4591 .key = { [0 ... 15] = 0x00 },
4592 .klen = 16,
4593 .input = { [0 ... 8] = 0x00 },
4594 .ilen = 8,
4595 .result = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
4596 .rlen = 8,
4597 }, {
4598 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4599 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4600 .klen = 16,
4601 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4602 .ilen = 8,
4603 .result = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
4604 .rlen = 8,
4605 }, {
4606 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4607 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4608 .klen = 16,
4609 .input = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
4610 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4611 .ilen = 16,
4612 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
4613 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
4614 .rlen = 16,
4615 }, {
4616 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4617 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4618 .klen = 16,
4619 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4620 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4621 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4622 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4623 .ilen = 32,
4624 .result = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1,
4625 0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4,
4626 0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f,
4627 0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
4628 .rlen = 32,
4629 }
4630 };
4631
4632 static struct cipher_testvec xeta_dec_tv_template[] = {
4633 {
4634 .key = { [0 ... 15] = 0x00 },
4635 .klen = 16,
4636 .input = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
4637 .ilen = 8,
4638 .result = { [0 ... 8] = 0x00 },
4639 .rlen = 8,
4640 }, {
4641 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
4642 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
4643 .klen = 16,
4644 .input = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
4645 .ilen = 8,
4646 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
4647 .rlen = 8,
4648 }, {
4649 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
4650 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
4651 .klen = 16,
4652 .input = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
4653 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
4654 .ilen = 16,
4655 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
4656 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
4657 .rlen = 16,
4658 }, {
4659 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
4660 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
4661 .klen = 16,
4662 .input = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1,
4663 0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4,
4664 0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f,
4665 0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
4666 .ilen = 32,
4667 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
4668 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
4669 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
4670 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
4671 .rlen = 32,
4672 }
4673 };
4674
4675 /*
4676 * FCrypt test vectors
4677 */
4678 #define FCRYPT_ENC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_enc_tv_template)
4679 #define FCRYPT_DEC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_dec_tv_template)
4680
4681 static struct cipher_testvec fcrypt_pcbc_enc_tv_template[] = {
4682 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
4683 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4684 .klen = 8,
4685 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4686 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4687 .ilen = 8,
4688 .result = { 0x0E, 0x09, 0x00, 0xC7, 0x3E, 0xF7, 0xED, 0x41 },
4689 .rlen = 8,
4690 }, {
4691 .key = { 0x11, 0x44, 0x77, 0xAA, 0xDD, 0x00, 0x33, 0x66 },
4692 .klen = 8,
4693 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4694 .input = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0 },
4695 .ilen = 8,
4696 .result = { 0xD8, 0xED, 0x78, 0x74, 0x77, 0xEC, 0x06, 0x80 },
4697 .rlen = 8,
4698 }, { /* From Arla */
4699 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4700 .klen = 8,
4701 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4702 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
4703 .ilen = 48,
4704 .result = { 0x00, 0xf0, 0xe, 0x11, 0x75, 0xe6, 0x23, 0x82,
4705 0xee, 0xac, 0x98, 0x62, 0x44, 0x51, 0xe4, 0x84,
4706 0xc3, 0x59, 0xd8, 0xaa, 0x64, 0x60, 0xae, 0xf7,
4707 0xd2, 0xd9, 0x13, 0x79, 0x72, 0xa3, 0x45, 0x03,
4708 0x23, 0xb5, 0x62, 0xd7, 0x0c, 0xf5, 0x27, 0xd1,
4709 0xf8, 0x91, 0x3c, 0xac, 0x44, 0x22, 0x92, 0xef },
4710 .rlen = 48,
4711 }, {
4712 .key = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4713 .klen = 8,
4714 .iv = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4715 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
4716 .ilen = 48,
4717 .result = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
4718 0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
4719 0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
4720 0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
4721 0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
4722 0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
4723 .rlen = 48,
4724 }, { /* split-page version */
4725 .key = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4726 .klen = 8,
4727 .iv = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4728 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
4729 .ilen = 48,
4730 .result = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
4731 0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
4732 0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
4733 0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
4734 0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
4735 0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
4736 .rlen = 48,
4737 .np = 2,
4738 .tap = { 20, 28 },
4739 }
4740 };
4741
4742 static struct cipher_testvec fcrypt_pcbc_dec_tv_template[] = {
4743 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
4744 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4745 .klen = 8,
4746 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4747 .input = { 0x0E, 0x09, 0x00, 0xC7, 0x3E, 0xF7, 0xED, 0x41 },
4748 .ilen = 8,
4749 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4750 .rlen = 8,
4751 }, {
4752 .key = { 0x11, 0x44, 0x77, 0xAA, 0xDD, 0x00, 0x33, 0x66 },
4753 .klen = 8,
4754 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4755 .input = { 0xD8, 0xED, 0x78, 0x74, 0x77, 0xEC, 0x06, 0x80 },
4756 .ilen = 8,
4757 .result = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0 },
4758 .rlen = 8,
4759 }, { /* From Arla */
4760 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4761 .klen = 8,
4762 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4763 .input = { 0x00, 0xf0, 0xe, 0x11, 0x75, 0xe6, 0x23, 0x82,
4764 0xee, 0xac, 0x98, 0x62, 0x44, 0x51, 0xe4, 0x84,
4765 0xc3, 0x59, 0xd8, 0xaa, 0x64, 0x60, 0xae, 0xf7,
4766 0xd2, 0xd9, 0x13, 0x79, 0x72, 0xa3, 0x45, 0x03,
4767 0x23, 0xb5, 0x62, 0xd7, 0x0c, 0xf5, 0x27, 0xd1,
4768 0xf8, 0x91, 0x3c, 0xac, 0x44, 0x22, 0x92, 0xef },
4769 .ilen = 48,
4770 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
4771 .rlen = 48,
4772 }, {
4773 .key = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4774 .klen = 8,
4775 .iv = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4776 .input = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
4777 0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
4778 0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
4779 0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
4780 0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
4781 0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
4782 .ilen = 48,
4783 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
4784 .rlen = 48,
4785 }, { /* split-page version */
4786 .key = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4787 .klen = 8,
4788 .iv = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
4789 .input = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
4790 0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
4791 0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
4792 0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
4793 0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
4794 0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
4795 .ilen = 48,
4796 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
4797 .rlen = 48,
4798 .np = 2,
4799 .tap = { 20, 28 },
4800 }
4801 };
4802
4803 /*
4804 * CAMELLIA test vectors.
4805 */
4806 #define CAMELLIA_ENC_TEST_VECTORS 3
4807 #define CAMELLIA_DEC_TEST_VECTORS 3
4808 #define CAMELLIA_CBC_ENC_TEST_VECTORS 2
4809 #define CAMELLIA_CBC_DEC_TEST_VECTORS 2
4810
4811 static struct cipher_testvec camellia_enc_tv_template[] = {
4812 {
4813 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4814 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4815 .klen = 16,
4816 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4817 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4818 .ilen = 16,
4819 .result = { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73,
4820 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 },
4821 .rlen = 16,
4822 }, {
4823 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4824 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
4825 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
4826 .klen = 24,
4827 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4828 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4829 .ilen = 16,
4830 .result = { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8,
4831 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 },
4832 .rlen = 16,
4833 }, {
4834 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4835 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
4836 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
4837 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
4838 .klen = 32,
4839 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4840 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4841 .ilen = 16,
4842 .result = { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c,
4843 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 },
4844 .rlen = 16,
4845 },
4846 };
4847
4848 static struct cipher_testvec camellia_dec_tv_template[] = {
4849 {
4850 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4851 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4852 .klen = 16,
4853 .input = { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73,
4854 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 },
4855 .ilen = 16,
4856 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4857 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4858 .rlen = 16,
4859 }, {
4860 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4861 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
4862 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
4863 .klen = 24,
4864 .input = { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8,
4865 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 },
4866 .ilen = 16,
4867 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4868 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4869 .rlen = 16,
4870 }, {
4871 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4872 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
4873 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
4874 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
4875 .klen = 32,
4876 .input = { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c,
4877 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 },
4878 .ilen = 16,
4879 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
4880 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
4881 .rlen = 16,
4882 },
4883 };
4884
4885 static struct cipher_testvec camellia_cbc_enc_tv_template[] = {
4886 {
4887 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
4888 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
4889 .klen = 16,
4890 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
4891 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
4892 .input = { "Single block msg" },
4893 .ilen = 16,
4894 .result = { 0xea, 0x32, 0x12, 0x76, 0x3b, 0x50, 0x10, 0xe7,
4895 0x18, 0xf6, 0xfd, 0x5d, 0xf6, 0x8f, 0x13, 0x51 },
4896 .rlen = 16,
4897 }, {
4898 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
4899 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
4900 .klen = 16,
4901 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
4902 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
4903 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4904 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
4905 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4906 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
4907 .ilen = 32,
4908 .result = { 0xa5, 0xdf, 0x6e, 0x50, 0xda, 0x70, 0x6c, 0x01,
4909 0x4a, 0xab, 0xf3, 0xf2, 0xd6, 0xfc, 0x6c, 0xfd,
4910 0x19, 0xb4, 0x3e, 0x57, 0x1c, 0x02, 0x5e, 0xa0,
4911 0x15, 0x78, 0xe0, 0x5e, 0xf2, 0xcb, 0x87, 0x16 },
4912 .rlen = 32,
4913 },
4914 };
4915
4916 static struct cipher_testvec camellia_cbc_dec_tv_template[] = {
4917 {
4918 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
4919 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
4920 .klen = 16,
4921 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
4922 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
4923 .input = { 0xea, 0x32, 0x12, 0x76, 0x3b, 0x50, 0x10, 0xe7,
4924 0x18, 0xf6, 0xfd, 0x5d, 0xf6, 0x8f, 0x13, 0x51 },
4925 .ilen = 16,
4926 .result = { "Single block msg" },
4927 .rlen = 16,
4928 }, {
4929 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
4930 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
4931 .klen = 16,
4932 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
4933 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
4934 .input = { 0xa5, 0xdf, 0x6e, 0x50, 0xda, 0x70, 0x6c, 0x01,
4935 0x4a, 0xab, 0xf3, 0xf2, 0xd6, 0xfc, 0x6c, 0xfd,
4936 0x19, 0xb4, 0x3e, 0x57, 0x1c, 0x02, 0x5e, 0xa0,
4937 0x15, 0x78, 0xe0, 0x5e, 0xf2, 0xcb, 0x87, 0x16 },
4938 .ilen = 32,
4939 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4940 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
4941 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4942 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
4943 .rlen = 32,
4944 },
4945 };
4946
4947 /*
4948 * SEED test vectors
4949 */
4950 #define SEED_ENC_TEST_VECTORS 4
4951 #define SEED_DEC_TEST_VECTORS 4
4952
4953 static struct cipher_testvec seed_enc_tv_template[] = {
4954 {
4955 .key = { [0 ... 15] = 0x00 },
4956 .klen = 16,
4957 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4958 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
4959 .ilen = 16,
4960 .result = { 0x5e, 0xba, 0xc6, 0xe0, 0x05, 0x4e, 0x16, 0x68,
4961 0x19, 0xaf, 0xf1, 0xcc, 0x6d, 0x34, 0x6c, 0xdb },
4962 .rlen = 16,
4963 }, {
4964 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4965 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
4966 .klen = 16,
4967 .input = { [0 ... 15] = 0x00 },
4968 .ilen = 16,
4969 .result = { 0xc1, 0x1f, 0x22, 0xf2, 0x01, 0x40, 0x50, 0x50,
4970 0x84, 0x48, 0x35, 0x97, 0xe4, 0x37, 0x0f, 0x43 },
4971 .rlen = 16,
4972 }, {
4973 .key = { 0x47, 0x06, 0x48, 0x08, 0x51, 0xe6, 0x1b, 0xe8,
4974 0x5d, 0x74, 0xbf, 0xb3, 0xfd, 0x95, 0x61, 0x85 },
4975 .klen = 16,
4976 .input = { 0x83, 0xa2, 0xf8, 0xa2, 0x88, 0x64, 0x1f, 0xb9,
4977 0xa4, 0xe9, 0xa5, 0xcc, 0x2f, 0x13, 0x1c, 0x7d },
4978 .ilen = 16,
4979 .result = { 0xee, 0x54, 0xd1, 0x3e, 0xbc, 0xae, 0x70, 0x6d,
4980 0x22, 0x6b, 0xc3, 0x14, 0x2c, 0xd4, 0x0d, 0x4a },
4981 .rlen = 16,
4982 }, {
4983 .key = { 0x28, 0xdb, 0xc3, 0xbc, 0x49, 0xff, 0xd8, 0x7d,
4984 0xcf, 0xa5, 0x09, 0xb1, 0x1d, 0x42, 0x2b, 0xe7 },
4985 .klen = 16,
4986 .input = { 0xb4, 0x1e, 0x6b, 0xe2, 0xeb, 0xa8, 0x4a, 0x14,
4987 0x8e, 0x2e, 0xed, 0x84, 0x59, 0x3c, 0x5e, 0xc7 },
4988 .ilen = 16,
4989 .result = { 0x9b, 0x9b, 0x7b, 0xfc, 0xd1, 0x81, 0x3c, 0xb9,
4990 0x5d, 0x0b, 0x36, 0x18, 0xf4, 0x0f, 0x51, 0x22 },
4991 .rlen = 16,
4992 }
4993 };
4994
4995 static struct cipher_testvec seed_dec_tv_template[] = {
4996 {
4997 .key = { [0 ... 15] = 0x00 },
4998 .klen = 16,
4999 .input = { 0x5e, 0xba, 0xc6, 0xe0, 0x05, 0x4e, 0x16, 0x68,
5000 0x19, 0xaf, 0xf1, 0xcc, 0x6d, 0x34, 0x6c, 0xdb },
5001 .ilen = 16,
5002 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5003 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
5004 .rlen = 16,
5005 }, {
5006 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5007 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
5008 .klen = 16,
5009 .input = { 0xc1, 0x1f, 0x22, 0xf2, 0x01, 0x40, 0x50, 0x50,
5010 0x84, 0x48, 0x35, 0x97, 0xe4, 0x37, 0x0f, 0x43 },
5011 .ilen = 16,
5012 .result = { [0 ... 15] = 0x00 },
5013 .rlen = 16,
5014 }, {
5015 .key = { 0x47, 0x06, 0x48, 0x08, 0x51, 0xe6, 0x1b, 0xe8,
5016 0x5d, 0x74, 0xbf, 0xb3, 0xfd, 0x95, 0x61, 0x85 },
5017 .klen = 16,
5018 .input = { 0xee, 0x54, 0xd1, 0x3e, 0xbc, 0xae, 0x70, 0x6d,
5019 0x22, 0x6b, 0xc3, 0x14, 0x2c, 0xd4, 0x0d, 0x4a },
5020 .ilen = 16,
5021 .result = { 0x83, 0xa2, 0xf8, 0xa2, 0x88, 0x64, 0x1f, 0xb9,
5022 0xa4, 0xe9, 0xa5, 0xcc, 0x2f, 0x13, 0x1c, 0x7d },
5023 .rlen = 16,
5024 }, {
5025 .key = { 0x28, 0xdb, 0xc3, 0xbc, 0x49, 0xff, 0xd8, 0x7d,
5026 0xcf, 0xa5, 0x09, 0xb1, 0x1d, 0x42, 0x2b, 0xe7 },
5027 .klen = 16,
5028 .input = { 0x9b, 0x9b, 0x7b, 0xfc, 0xd1, 0x81, 0x3c, 0xb9,
5029 0x5d, 0x0b, 0x36, 0x18, 0xf4, 0x0f, 0x51, 0x22 },
5030 .ilen = 16,
5031 .result = { 0xb4, 0x1e, 0x6b, 0xe2, 0xeb, 0xa8, 0x4a, 0x14,
5032 0x8e, 0x2e, 0xed, 0x84, 0x59, 0x3c, 0x5e, 0xc7 },
5033 .rlen = 16,
5034 }
5035 };
5036
5037 #define SALSA20_STREAM_ENC_TEST_VECTORS 4
5038 static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
5039 /*
5040 * Testvectors from verified.test-vectors submitted to ECRYPT.
5041 * They are truncated to size 39, 64, 111, 129 to test a variety
5042 * of input length.
5043 */
5044 { /* Set 3, vector 0 */
5045 .key = {
5046 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5047 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
5048 },
5049 .klen = 16,
5050 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5051 .input = {
5052 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5053 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5054 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5055 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5056 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5057 },
5058 .ilen = 39,
5059 .result = {
5060 0x2D, 0xD5, 0xC3, 0xF7, 0xBA, 0x2B, 0x20, 0xF7,
5061 0x68, 0x02, 0x41, 0x0C, 0x68, 0x86, 0x88, 0x89,
5062 0x5A, 0xD8, 0xC1, 0xBD, 0x4E, 0xA6, 0xC9, 0xB1,
5063 0x40, 0xFB, 0x9B, 0x90, 0xE2, 0x10, 0x49, 0xBF,
5064 0x58, 0x3F, 0x52, 0x79, 0x70, 0xEB, 0xC1,
5065 },
5066 .rlen = 39,
5067 }, { /* Set 5, vector 0 */
5068 .key = {
5069 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
5071 },
5072 .klen = 16,
5073 .iv = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5074 .input = {
5075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5079 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5080 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5082 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5083 },
5084 .ilen = 64,
5085 .result = {
5086 0xB6, 0x6C, 0x1E, 0x44, 0x46, 0xDD, 0x95, 0x57,
5087 0xE5, 0x78, 0xE2, 0x23, 0xB0, 0xB7, 0x68, 0x01,
5088 0x7B, 0x23, 0xB2, 0x67, 0xBB, 0x02, 0x34, 0xAE,
5089 0x46, 0x26, 0xBF, 0x44, 0x3F, 0x21, 0x97, 0x76,
5090 0x43, 0x6F, 0xB1, 0x9F, 0xD0, 0xE8, 0x86, 0x6F,
5091 0xCD, 0x0D, 0xE9, 0xA9, 0x53, 0x8F, 0x4A, 0x09,
5092 0xCA, 0x9A, 0xC0, 0x73, 0x2E, 0x30, 0xBC, 0xF9,
5093 0x8E, 0x4F, 0x13, 0xE4, 0xB9, 0xE2, 0x01, 0xD9,
5094 },
5095 .rlen = 64,
5096 }, { /* Set 3, vector 27 */
5097 .key = {
5098 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
5099 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A,
5100 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,
5101 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A
5102 },
5103 .klen = 32,
5104 .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5105 .input = {
5106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5111 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5114
5115 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5121 },
5122 .ilen = 111,
5123 .result = {
5124 0xAE, 0x39, 0x50, 0x8E, 0xAC, 0x9A, 0xEC, 0xE7,
5125 0xBF, 0x97, 0xBB, 0x20, 0xB9, 0xDE, 0xE4, 0x1F,
5126 0x87, 0xD9, 0x47, 0xF8, 0x28, 0x91, 0x35, 0x98,
5127 0xDB, 0x72, 0xCC, 0x23, 0x29, 0x48, 0x56, 0x5E,
5128 0x83, 0x7E, 0x0B, 0xF3, 0x7D, 0x5D, 0x38, 0x7B,
5129 0x2D, 0x71, 0x02, 0xB4, 0x3B, 0xB5, 0xD8, 0x23,
5130 0xB0, 0x4A, 0xDF, 0x3C, 0xEC, 0xB6, 0xD9, 0x3B,
5131 0x9B, 0xA7, 0x52, 0xBE, 0xC5, 0xD4, 0x50, 0x59,
5132
5133 0x15, 0x14, 0xB4, 0x0E, 0x40, 0xE6, 0x53, 0xD1,
5134 0x83, 0x9C, 0x5B, 0xA0, 0x92, 0x29, 0x6B, 0x5E,
5135 0x96, 0x5B, 0x1E, 0x2F, 0xD3, 0xAC, 0xC1, 0x92,
5136 0xB1, 0x41, 0x3F, 0x19, 0x2F, 0xC4, 0x3B, 0xC6,
5137 0x95, 0x46, 0x45, 0x54, 0xE9, 0x75, 0x03, 0x08,
5138 0x44, 0xAF, 0xE5, 0x8A, 0x81, 0x12, 0x09,
5139 },
5140 .rlen = 111,
5141
5142 }, { /* Set 5, vector 27 */
5143 .key = {
5144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
5148 },
5149 .klen = 32,
5150 .iv = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00 },
5151 .input = {
5152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5160
5161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5169
5170 0x00,
5171 },
5172 .ilen = 129,
5173 .result = {
5174 0xD2, 0xDB, 0x1A, 0x5C, 0xF1, 0xC1, 0xAC, 0xDB,
5175 0xE8, 0x1A, 0x7A, 0x43, 0x40, 0xEF, 0x53, 0x43,
5176 0x5E, 0x7F, 0x4B, 0x1A, 0x50, 0x52, 0x3F, 0x8D,
5177 0x28, 0x3D, 0xCF, 0x85, 0x1D, 0x69, 0x6E, 0x60,
5178 0xF2, 0xDE, 0x74, 0x56, 0x18, 0x1B, 0x84, 0x10,
5179 0xD4, 0x62, 0xBA, 0x60, 0x50, 0xF0, 0x61, 0xF2,
5180 0x1C, 0x78, 0x7F, 0xC1, 0x24, 0x34, 0xAF, 0x58,
5181 0xBF, 0x2C, 0x59, 0xCA, 0x90, 0x77, 0xF3, 0xB0,
5182
5183 0x5B, 0x4A, 0xDF, 0x89, 0xCE, 0x2C, 0x2F, 0xFC,
5184 0x67, 0xF0, 0xE3, 0x45, 0xE8, 0xB3, 0xB3, 0x75,
5185 0xA0, 0x95, 0x71, 0xA1, 0x29, 0x39, 0x94, 0xCA,
5186 0x45, 0x2F, 0xBD, 0xCB, 0x10, 0xB6, 0xBE, 0x9F,
5187 0x8E, 0xF9, 0xB2, 0x01, 0x0A, 0x5A, 0x0A, 0xB7,
5188 0x6B, 0x9D, 0x70, 0x8E, 0x4B, 0xD6, 0x2F, 0xCD,
5189 0x2E, 0x40, 0x48, 0x75, 0xE9, 0xE2, 0x21, 0x45,
5190 0x0B, 0xC9, 0xB6, 0xB5, 0x66, 0xBC, 0x9A, 0x59,
5191
5192 0x5A,
5193 },
5194 .rlen = 129,
5195 }
5196 };
5197
5198 /*
5199 * Compression stuff.
5200 */
5201 #define COMP_BUF_SIZE 512
5202
5203 struct comp_testvec {
5204 int inlen, outlen;
5205 char input[COMP_BUF_SIZE];
5206 char output[COMP_BUF_SIZE];
5207 };
5208
5209 /*
5210 * Deflate test vectors (null-terminated strings).
5211 * Params: winbits=11, Z_DEFAULT_COMPRESSION, MAX_MEM_LEVEL.
5212 */
5213 #define DEFLATE_COMP_TEST_VECTORS 2
5214 #define DEFLATE_DECOMP_TEST_VECTORS 2
5215
5216 static struct comp_testvec deflate_comp_tv_template[] = {
5217 {
5218 .inlen = 70,
5219 .outlen = 38,
5220 .input = "Join us now and share the software "
5221 "Join us now and share the software ",
5222 .output = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
5223 0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
5224 0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
5225 0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
5226 0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
5227 }, {
5228 .inlen = 191,
5229 .outlen = 122,
5230 .input = "This document describes a compression method based on the DEFLATE"
5231 "compression algorithm. This document defines the application of "
5232 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
5233 .output = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
5234 0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
5235 0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
5236 0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
5237 0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
5238 0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
5239 0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
5240 0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
5241 0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
5242 0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
5243 0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
5244 0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
5245 0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
5246 0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
5247 0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
5248 0xfa, 0x02 },
5249 },
5250 };
5251
5252 static struct comp_testvec deflate_decomp_tv_template[] = {
5253 {
5254 .inlen = 122,
5255 .outlen = 191,
5256 .input = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
5257 0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
5258 0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
5259 0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
5260 0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
5261 0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
5262 0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
5263 0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
5264 0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
5265 0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
5266 0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
5267 0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
5268 0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
5269 0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
5270 0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
5271 0xfa, 0x02 },
5272 .output = "This document describes a compression method based on the DEFLATE"
5273 "compression algorithm. This document defines the application of "
5274 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
5275 }, {
5276 .inlen = 38,
5277 .outlen = 70,
5278 .input = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
5279 0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
5280 0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
5281 0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
5282 0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
5283 .output = "Join us now and share the software "
5284 "Join us now and share the software ",
5285 },
5286 };
5287
5288 /*
5289 * Michael MIC test vectors from IEEE 802.11i
5290 */
5291 #define MICHAEL_MIC_TEST_VECTORS 6
5292
5293 static struct hash_testvec michael_mic_tv_template[] = {
5294 {
5295 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5296 .ksize = 8,
5297 .plaintext = { },
5298 .psize = 0,
5299 .digest = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 }
5300 },
5301 {
5302 .key = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 },
5303 .ksize = 8,
5304 .plaintext = { 'M' },
5305 .psize = 1,
5306 .digest = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f }
5307 },
5308 {
5309 .key = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f },
5310 .ksize = 8,
5311 .plaintext = { 'M', 'i' },
5312 .psize = 2,
5313 .digest = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 }
5314 },
5315 {
5316 .key = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 },
5317 .ksize = 8,
5318 .plaintext = { 'M', 'i', 'c' },
5319 .psize = 3,
5320 .digest = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb }
5321 },
5322 {
5323 .key = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb },
5324 .ksize = 8,
5325 .plaintext = { 'M', 'i', 'c', 'h' },
5326 .psize = 4,
5327 .digest = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 }
5328 },
5329 {
5330 .key = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 },
5331 .ksize = 8,
5332 .plaintext = { 'M', 'i', 'c', 'h', 'a', 'e', 'l' },
5333 .psize = 7,
5334 .digest = { 0x0a, 0x94, 0x2b, 0x12, 0x4e, 0xca, 0xa5, 0x46 },
5335 }
5336 };
5337
5338 /*
5339 * CRC32C test vectors
5340 */
5341 #define CRC32C_TEST_VECTORS 14
5342
5343 static struct hash_testvec crc32c_tv_template[] = {
5344 {
5345 .psize = 0,
5346 .digest = { 0x00, 0x00, 0x00, 0x00 }
5347 },
5348 {
5349 .key = { 0x87, 0xa9, 0xcb, 0xed },
5350 .ksize = 4,
5351 .psize = 0,
5352 .digest = { 0x78, 0x56, 0x34, 0x12 },
5353 },
5354 {
5355 .key = { 0xff, 0xff, 0xff, 0xff },
5356 .ksize = 4,
5357 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
5358 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
5359 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
5360 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
5361 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 },
5362 .psize = 40,
5363 .digest = { 0x7f, 0x15, 0x2c, 0x0e }
5364 },
5365 {
5366 .key = { 0xff, 0xff, 0xff, 0xff },
5367 .ksize = 4,
5368 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
5369 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
5370 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
5371 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
5372 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
5373 .psize = 40,
5374 .digest = { 0xf6, 0xeb, 0x80, 0xe9 }
5375 },
5376 {
5377 .key = { 0xff, 0xff, 0xff, 0xff },
5378 .ksize = 4,
5379 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
5380 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
5381 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
5382 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
5383 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
5384 .psize = 40,
5385 .digest = { 0xed, 0xbd, 0x74, 0xde }
5386 },
5387 {
5388 .key = { 0xff, 0xff, 0xff, 0xff },
5389 .ksize = 4,
5390 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
5391 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
5392 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
5393 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
5394 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
5395 .psize = 40,
5396 .digest = { 0x62, 0xc8, 0x79, 0xd5 }
5397 },
5398 {
5399 .key = { 0xff, 0xff, 0xff, 0xff },
5400 .ksize = 4,
5401 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
5402 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
5403 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
5404 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
5405 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
5406 .psize = 40,
5407 .digest = { 0xd0, 0x9a, 0x97, 0xba }
5408 },
5409 {
5410 .key = { 0xff, 0xff, 0xff, 0xff },
5411 .ksize = 4,
5412 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
5413 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
5414 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
5415 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
5416 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
5417 .psize = 40,
5418 .digest = { 0x13, 0xd9, 0x29, 0x2b }
5419 },
5420 {
5421 .key = { 0x80, 0xea, 0xd3, 0xf1 },
5422 .ksize = 4,
5423 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
5424 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
5425 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
5426 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
5427 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
5428 .psize = 40,
5429 .digest = { 0x0c, 0xb5, 0xe2, 0xa2 }
5430 },
5431 {
5432 .key = { 0xf3, 0x4a, 0x1d, 0x5d },
5433 .ksize = 4,
5434 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
5435 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
5436 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
5437 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
5438 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
5439 .psize = 40,
5440 .digest = { 0xd1, 0x7f, 0xfb, 0xa6 }
5441 },
5442 {
5443 .key = { 0x2e, 0x80, 0x04, 0x59 },
5444 .ksize = 4,
5445 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
5446 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
5447 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
5448 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
5449 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
5450 .psize = 40,
5451 .digest = { 0x59, 0x33, 0xe6, 0x7a }
5452 },
5453 {
5454 .key = { 0xa6, 0xcc, 0x19, 0x85 },
5455 .ksize = 4,
5456 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
5457 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
5458 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
5459 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
5460 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
5461 .psize = 40,
5462 .digest = { 0xbe, 0x03, 0x01, 0xd2 }
5463 },
5464 {
5465 .key = { 0x41, 0xfc, 0xfe, 0x2d },
5466 .ksize = 4,
5467 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
5468 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
5469 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
5470 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
5471 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
5472 .psize = 40,
5473 .digest = { 0x75, 0xd3, 0xc5, 0x24 }
5474 },
5475 {
5476 .key = { 0xff, 0xff, 0xff, 0xff },
5477 .ksize = 4,
5478 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
5479 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
5480 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
5481 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
5482 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
5483 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
5484 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
5485 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
5486 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
5487 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
5488 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
5489 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
5490 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
5491 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
5492 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
5493 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
5494 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
5495 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
5496 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
5497 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0,
5498 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
5499 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
5500 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
5501 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
5502 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
5503 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
5504 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
5505 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
5506 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
5507 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
5508 .psize = 240,
5509 .digest = { 0x75, 0xd3, 0xc5, 0x24 },
5510 .np = 2,
5511 .tap = { 31, 209 }
5512 },
5513 };
5514
5515 /*
5516 * Cipher speed tests
5517 */
5518 static struct cipher_speed aes_speed_template[] = {
5519 { .klen = 16, .blen = 16, },
5520 { .klen = 16, .blen = 64, },
5521 { .klen = 16, .blen = 256, },
5522 { .klen = 16, .blen = 1024, },
5523 { .klen = 16, .blen = 8192, },
5524 { .klen = 24, .blen = 16, },
5525 { .klen = 24, .blen = 64, },
5526 { .klen = 24, .blen = 256, },
5527 { .klen = 24, .blen = 1024, },
5528 { .klen = 24, .blen = 8192, },
5529 { .klen = 32, .blen = 16, },
5530 { .klen = 32, .blen = 64, },
5531 { .klen = 32, .blen = 256, },
5532 { .klen = 32, .blen = 1024, },
5533 { .klen = 32, .blen = 8192, },
5534
5535 /* End marker */
5536 { .klen = 0, .blen = 0, }
5537 };
5538
5539 static struct cipher_speed aes_lrw_speed_template[] = {
5540 { .klen = 32, .blen = 16, },
5541 { .klen = 32, .blen = 64, },
5542 { .klen = 32, .blen = 256, },
5543 { .klen = 32, .blen = 1024, },
5544 { .klen = 32, .blen = 8192, },
5545 { .klen = 40, .blen = 16, },
5546 { .klen = 40, .blen = 64, },
5547 { .klen = 40, .blen = 256, },
5548 { .klen = 40, .blen = 1024, },
5549 { .klen = 40, .blen = 8192, },
5550 { .klen = 48, .blen = 16, },
5551 { .klen = 48, .blen = 64, },
5552 { .klen = 48, .blen = 256, },
5553 { .klen = 48, .blen = 1024, },
5554 { .klen = 48, .blen = 8192, },
5555
5556 /* End marker */
5557 { .klen = 0, .blen = 0, }
5558 };
5559
5560 static struct cipher_speed aes_xts_speed_template[] = {
5561 { .klen = 32, .blen = 16, },
5562 { .klen = 32, .blen = 64, },
5563 { .klen = 32, .blen = 256, },
5564 { .klen = 32, .blen = 1024, },
5565 { .klen = 32, .blen = 8192, },
5566 { .klen = 48, .blen = 16, },
5567 { .klen = 48, .blen = 64, },
5568 { .klen = 48, .blen = 256, },
5569 { .klen = 48, .blen = 1024, },
5570 { .klen = 48, .blen = 8192, },
5571 { .klen = 64, .blen = 16, },
5572 { .klen = 64, .blen = 64, },
5573 { .klen = 64, .blen = 256, },
5574 { .klen = 64, .blen = 1024, },
5575 { .klen = 64, .blen = 8192, },
5576
5577 /* End marker */
5578 { .klen = 0, .blen = 0, }
5579 };
5580
5581 static struct cipher_speed des3_ede_speed_template[] = {
5582 { .klen = 24, .blen = 16, },
5583 { .klen = 24, .blen = 64, },
5584 { .klen = 24, .blen = 256, },
5585 { .klen = 24, .blen = 1024, },
5586 { .klen = 24, .blen = 8192, },
5587
5588 /* End marker */
5589 { .klen = 0, .blen = 0, }
5590 };
5591
5592 static struct cipher_speed twofish_speed_template[] = {
5593 { .klen = 16, .blen = 16, },
5594 { .klen = 16, .blen = 64, },
5595 { .klen = 16, .blen = 256, },
5596 { .klen = 16, .blen = 1024, },
5597 { .klen = 16, .blen = 8192, },
5598 { .klen = 24, .blen = 16, },
5599 { .klen = 24, .blen = 64, },
5600 { .klen = 24, .blen = 256, },
5601 { .klen = 24, .blen = 1024, },
5602 { .klen = 24, .blen = 8192, },
5603 { .klen = 32, .blen = 16, },
5604 { .klen = 32, .blen = 64, },
5605 { .klen = 32, .blen = 256, },
5606 { .klen = 32, .blen = 1024, },
5607 { .klen = 32, .blen = 8192, },
5608
5609 /* End marker */
5610 { .klen = 0, .blen = 0, }
5611 };
5612
5613 static struct cipher_speed blowfish_speed_template[] = {
5614 /* Don't support blowfish keys > 256 bit in this test */
5615 { .klen = 8, .blen = 16, },
5616 { .klen = 8, .blen = 64, },
5617 { .klen = 8, .blen = 256, },
5618 { .klen = 8, .blen = 1024, },
5619 { .klen = 8, .blen = 8192, },
5620 { .klen = 32, .blen = 16, },
5621 { .klen = 32, .blen = 64, },
5622 { .klen = 32, .blen = 256, },
5623 { .klen = 32, .blen = 1024, },
5624 { .klen = 32, .blen = 8192, },
5625
5626 /* End marker */
5627 { .klen = 0, .blen = 0, }
5628 };
5629
5630 static struct cipher_speed des_speed_template[] = {
5631 { .klen = 8, .blen = 16, },
5632 { .klen = 8, .blen = 64, },
5633 { .klen = 8, .blen = 256, },
5634 { .klen = 8, .blen = 1024, },
5635 { .klen = 8, .blen = 8192, },
5636
5637 /* End marker */
5638 { .klen = 0, .blen = 0, }
5639 };
5640
5641 /*
5642 * Digest speed tests
5643 */
5644 static struct hash_speed generic_hash_speed_template[] = {
5645 { .blen = 16, .plen = 16, },
5646 { .blen = 64, .plen = 16, },
5647 { .blen = 64, .plen = 64, },
5648 { .blen = 256, .plen = 16, },
5649 { .blen = 256, .plen = 64, },
5650 { .blen = 256, .plen = 256, },
5651 { .blen = 1024, .plen = 16, },
5652 { .blen = 1024, .plen = 256, },
5653 { .blen = 1024, .plen = 1024, },
5654 { .blen = 2048, .plen = 16, },
5655 { .blen = 2048, .plen = 256, },
5656 { .blen = 2048, .plen = 1024, },
5657 { .blen = 2048, .plen = 2048, },
5658 { .blen = 4096, .plen = 16, },
5659 { .blen = 4096, .plen = 256, },
5660 { .blen = 4096, .plen = 1024, },
5661 { .blen = 4096, .plen = 4096, },
5662 { .blen = 8192, .plen = 16, },
5663 { .blen = 8192, .plen = 256, },
5664 { .blen = 8192, .plen = 1024, },
5665 { .blen = 8192, .plen = 4096, },
5666 { .blen = 8192, .plen = 8192, },
5667
5668 /* End marker */
5669 { .blen = 0, .plen = 0, }
5670 };
5671
5672 static struct cipher_speed camellia_speed_template[] = {
5673 { .klen = 16, .blen = 16, },
5674 { .klen = 16, .blen = 64, },
5675 { .klen = 16, .blen = 256, },
5676 { .klen = 16, .blen = 1024, },
5677 { .klen = 16, .blen = 8192, },
5678 { .klen = 24, .blen = 16, },
5679 { .klen = 24, .blen = 64, },
5680 { .klen = 24, .blen = 256, },
5681 { .klen = 24, .blen = 1024, },
5682 { .klen = 24, .blen = 8192, },
5683 { .klen = 32, .blen = 16, },
5684 { .klen = 32, .blen = 64, },
5685 { .klen = 32, .blen = 256, },
5686 { .klen = 32, .blen = 1024, },
5687 { .klen = 32, .blen = 8192, },
5688
5689 /* End marker */
5690 { .klen = 0, .blen = 0, }
5691 };
5692
5693 #endif /* _CRYPTO_TCRYPT_H */