[CRYPTO] hmac: Add crypto template implementation
[linux-block.git] / crypto / tcrypt.h
CommitLineData
1da177e4
LT
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 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the Free
ef2736fc 12 * Software Foundation; either version 2 of the License, or (at your option)
1da177e4
LT
13 * any later version.
14 *
ebfd9bcf
HW
15 * 2004-08-09 Cipher speed tests by Reyk Floeter <reyk@vantronix.net>
16 * 2003-09-14 Changes by Kartikey Mahendra Bhatt
1da177e4
LT
17 *
18 */
19#ifndef _CRYPTO_TCRYPT_H
20#define _CRYPTO_TCRYPT_H
21
22#define MAX_DIGEST_SIZE 64
23#define MAX_TAP 8
24
25#define MAX_KEYLEN 56
26#define MAX_IVLEN 32
27
28struct hash_testvec {
06b42aa9
AN
29 /* only used with keyed hash algorithms */
30 char key[128] __attribute__ ((__aligned__(4)));
c907ee76 31 char plaintext[240];
1da177e4 32 char digest[MAX_DIGEST_SIZE];
ef2736fc 33 unsigned char tap[MAX_TAP];
06b42aa9
AN
34 unsigned char psize;
35 unsigned char np;
1da177e4
LT
36 unsigned char ksize;
37};
38
ef2736fc 39struct hmac_testvec {
1da177e4 40 char key[128];
1da177e4 41 char plaintext[128];
1da177e4 42 char digest[MAX_DIGEST_SIZE];
ef2736fc 43 unsigned char tap[MAX_TAP];
06b42aa9
AN
44 unsigned char ksize;
45 unsigned char psize;
46 unsigned char np;
1da177e4
LT
47};
48
49struct cipher_testvec {
06b42aa9
AN
50 char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
51 char iv[MAX_IVLEN];
52 char input[48];
53 char result[48];
54 unsigned char tap[MAX_TAP];
55 int np;
1da177e4
LT
56 unsigned char fail;
57 unsigned char wk; /* weak key flag */
1da177e4 58 unsigned char klen;
1da177e4 59 unsigned char ilen;
1da177e4 60 unsigned char rlen;
1da177e4
LT
61};
62
ebfd9bcf
HW
63struct cipher_speed {
64 unsigned char klen;
65 unsigned int blen;
66};
67
e8057928
ML
68struct digest_speed {
69 unsigned int blen; /* buffer length */
70 unsigned int plen; /* per-update length */
71};
72
1da177e4
LT
73/*
74 * MD4 test vectors from RFC1320
75 */
76#define MD4_TEST_VECTORS 7
77
78static struct hash_testvec md4_tv_template [] = {
79 {
80 .plaintext = "",
81 .digest = { 0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31,
82 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0 },
83 }, {
84 .plaintext = "a",
85 .psize = 1,
86 .digest = { 0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46,
87 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24 },
88 }, {
89 .plaintext = "abc",
90 .psize = 3,
91 .digest = { 0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52,
92 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d },
93 }, {
94 .plaintext = "message digest",
95 .psize = 14,
96 .digest = { 0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8,
97 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b },
98 }, {
99 .plaintext = "abcdefghijklmnopqrstuvwxyz",
100 .psize = 26,
101 .digest = { 0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd,
102 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9 },
103 .np = 2,
104 .tap = { 13, 13 },
105 }, {
106 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
107 .psize = 62,
108 .digest = { 0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35,
109 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4 },
110 }, {
111 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
112 "45678901234567890",
113 .psize = 80,
114 .digest = { 0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19,
115 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36 },
116 },
117};
118
119/*
120 * MD5 test vectors from RFC1321
121 */
122#define MD5_TEST_VECTORS 7
123
124static struct hash_testvec md5_tv_template[] = {
125 {
126 .digest = { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04,
127 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e },
128 }, {
129 .plaintext = "a",
130 .psize = 1,
131 .digest = { 0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8,
132 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 },
133 }, {
134 .plaintext = "abc",
135 .psize = 3,
136 .digest = { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0,
137 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 },
138 }, {
139 .plaintext = "message digest",
140 .psize = 14,
141 .digest = { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d,
142 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 },
143 }, {
144 .plaintext = "abcdefghijklmnopqrstuvwxyz",
145 .psize = 26,
146 .digest = { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00,
147 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b },
148 .np = 2,
149 .tap = {13, 13}
150 }, {
151 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
152 .psize = 62,
153 .digest = { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5,
154 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f },
155 }, {
156 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
157 "345678901234567890",
158 .psize = 80,
159 .digest = { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55,
160 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a },
161 }
162};
163
164/*
165 * SHA1 test vectors from from FIPS PUB 180-1
166 */
167#define SHA1_TEST_VECTORS 2
168
169static struct hash_testvec sha1_tv_template[] = {
ef2736fc 170 {
1da177e4
LT
171 .plaintext = "abc",
172 .psize = 3,
173 .digest = { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e,
174 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 0x9c, 0xd0, 0xd8, 0x9d },
175 }, {
176 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
177 .psize = 56,
178 .digest = { 0x84, 0x98, 0x3e, 0x44, 0x1c, 0x3b, 0xd2, 0x6e, 0xba, 0xae,
179 0x4a, 0xa1, 0xf9, 0x51, 0x29, 0xe5, 0xe5, 0x46, 0x70, 0xf1 },
180 .np = 2,
181 .tap = { 28, 28 }
182 }
183};
184
185/*
186 * SHA256 test vectors from from NIST
187 */
188#define SHA256_TEST_VECTORS 2
189
ef2736fc
HX
190static struct hash_testvec sha256_tv_template[] = {
191 {
1da177e4
LT
192 .plaintext = "abc",
193 .psize = 3,
194 .digest = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
195 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
196 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
197 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad },
198 }, {
199 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
200 .psize = 56,
201 .digest = { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
202 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
203 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
204 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 },
205 .np = 2,
206 .tap = { 28, 28 }
207 },
208};
209
210/*
211 * SHA384 test vectors from from NIST and kerneli
212 */
213#define SHA384_TEST_VECTORS 4
214
215static struct hash_testvec sha384_tv_template[] = {
ef2736fc 216 {
1da177e4
LT
217 .plaintext= "abc",
218 .psize = 3,
219 .digest = { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
220 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
221 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
222 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
223 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
224 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 },
225 }, {
226 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
227 .psize = 56,
228 .digest = { 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39,
229 0x37, 0x07, 0xa6, 0x5b, 0x1b, 0x47, 0x09, 0x39,
230 0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf, 0x05, 0xab,
231 0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6,
232 0xb0, 0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f,
233 0x5f, 0xe9, 0x5b, 0x1f, 0xe3, 0xc8, 0x45, 0x2b},
234 }, {
235 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
ef2736fc 236 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
1da177e4
LT
237 .psize = 112,
238 .digest = { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
239 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
240 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
241 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
242 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
243 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 },
244 }, {
245 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
246 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
247 .psize = 104,
248 .digest = { 0x3d, 0x20, 0x89, 0x73, 0xab, 0x35, 0x08, 0xdb,
249 0xbd, 0x7e, 0x2c, 0x28, 0x62, 0xba, 0x29, 0x0a,
250 0xd3, 0x01, 0x0e, 0x49, 0x78, 0xc1, 0x98, 0xdc,
251 0x4d, 0x8f, 0xd0, 0x14, 0xe5, 0x82, 0x82, 0x3a,
252 0x89, 0xe1, 0x6f, 0x9b, 0x2a, 0x7b, 0xbc, 0x1a,
253 0xc9, 0x38, 0xe2, 0xd1, 0x99, 0xe8, 0xbe, 0xa4 },
254 .np = 4,
255 .tap = { 26, 26, 26, 26 }
256 },
257};
258
259/*
260 * SHA512 test vectors from from NIST and kerneli
261 */
262#define SHA512_TEST_VECTORS 4
263
264static struct hash_testvec sha512_tv_template[] = {
ef2736fc 265 {
1da177e4
LT
266 .plaintext = "abc",
267 .psize = 3,
268 .digest = { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
269 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
270 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
271 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
272 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
273 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
274 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
275 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f },
276 }, {
277 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
278 .psize = 56,
279 .digest = { 0x20, 0x4a, 0x8f, 0xc6, 0xdd, 0xa8, 0x2f, 0x0a,
280 0x0c, 0xed, 0x7b, 0xeb, 0x8e, 0x08, 0xa4, 0x16,
281 0x57, 0xc1, 0x6e, 0xf4, 0x68, 0xb2, 0x28, 0xa8,
282 0x27, 0x9b, 0xe3, 0x31, 0xa7, 0x03, 0xc3, 0x35,
283 0x96, 0xfd, 0x15, 0xc1, 0x3b, 0x1b, 0x07, 0xf9,
284 0xaa, 0x1d, 0x3b, 0xea, 0x57, 0x78, 0x9c, 0xa0,
285 0x31, 0xad, 0x85, 0xc7, 0xa7, 0x1d, 0xd7, 0x03,
286 0x54, 0xec, 0x63, 0x12, 0x38, 0xca, 0x34, 0x45 },
287 }, {
288 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
289 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
290 .psize = 112,
291 .digest = { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
292 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
293 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
294 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
295 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
296 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
297 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
298 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 },
299 }, {
300 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
301 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
302 .psize = 104,
303 .digest = { 0x93, 0x0d, 0x0c, 0xef, 0xcb, 0x30, 0xff, 0x11,
304 0x33, 0xb6, 0x89, 0x81, 0x21, 0xf1, 0xcf, 0x3d,
305 0x27, 0x57, 0x8a, 0xfc, 0xaf, 0xe8, 0x67, 0x7c,
306 0x52, 0x57, 0xcf, 0x06, 0x99, 0x11, 0xf7, 0x5d,
307 0x8f, 0x58, 0x31, 0xb5, 0x6e, 0xbf, 0xda, 0x67,
308 0xb2, 0x78, 0xe6, 0x6d, 0xff, 0x8b, 0x84, 0xfe,
309 0x2b, 0x28, 0x70, 0xf7, 0x42, 0xa5, 0x80, 0xd8,
310 0xed, 0xb4, 0x19, 0x87, 0x23, 0x28, 0x50, 0xc9 },
311 .np = 4,
312 .tap = { 26, 26, 26, 26 }
313 },
314};
315
316
317/*
ef2736fc 318 * WHIRLPOOL test vectors from Whirlpool package
1da177e4
LT
319 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
320 * submission
321 */
322#define WP512_TEST_VECTORS 8
323
324static struct hash_testvec wp512_tv_template[] = {
ef2736fc 325 {
1da177e4
LT
326 .plaintext = "",
327 .psize = 0,
328 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
329 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
330 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
331 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
332 0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
333 0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57,
334 0xEA, 0x89, 0x64, 0xE5, 0x9B, 0x63, 0xD9, 0x37,
335 0x08, 0xB1, 0x38, 0xCC, 0x42, 0xA6, 0x6E, 0xB3 },
336
337
338 }, {
339 .plaintext = "a",
340 .psize = 1,
341 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
342 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
343 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
344 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
345 0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
346 0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59,
347 0x1A, 0x92, 0x20, 0x0D, 0x56, 0x01, 0x95, 0xE5,
348 0x3B, 0x47, 0x85, 0x84, 0xFD, 0xAE, 0x23, 0x1A },
349 }, {
350 .plaintext = "abc",
351 .psize = 3,
352 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
353 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
354 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
355 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
356 0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
357 0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6,
358 0xC7, 0x97, 0xFC, 0x9D, 0x95, 0xD8, 0xB5, 0x82,
359 0xD2, 0x25, 0x29, 0x20, 0x76, 0xD4, 0xEE, 0xF5 },
360 }, {
361 .plaintext = "message digest",
362 .psize = 14,
ef2736fc
HX
363 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
364 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
365 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
366 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
367 0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
368 0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6,
369 0x92, 0xED, 0x92, 0x00, 0x52, 0x83, 0x8F, 0x33,
1da177e4
LT
370 0x62, 0xE8, 0x6D, 0xBD, 0x37, 0xA8, 0x90, 0x3E },
371 }, {
372 .plaintext = "abcdefghijklmnopqrstuvwxyz",
373 .psize = 26,
374 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
375 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
376 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
377 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
378 0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
379 0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6,
380 0xF6, 0x8F, 0x67, 0x3E, 0x72, 0x07, 0x86, 0x5D,
381 0x5D, 0x98, 0x19, 0xA3, 0xDB, 0xA4, 0xEB, 0x3B },
382 }, {
383 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
384 "abcdefghijklmnopqrstuvwxyz0123456789",
385 .psize = 62,
386 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
387 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
388 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
389 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
390 0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
391 0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6,
392 0x55, 0x17, 0xCC, 0x87, 0x9D, 0x7B, 0x96, 0x21,
393 0x42, 0xC6, 0x5F, 0x5A, 0x7A, 0xF0, 0x14, 0x67 },
394 }, {
395 .plaintext = "1234567890123456789012345678901234567890"
396 "1234567890123456789012345678901234567890",
397 .psize = 80,
398 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
399 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
400 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
401 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
402 0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
403 0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A,
404 0x2C, 0x60, 0x48, 0x1E, 0x88, 0xC5, 0xA2, 0x0B,
405 0x2C, 0x2A, 0x80, 0xCF, 0x3A, 0x9A, 0x08, 0x3B },
406 }, {
407 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
408 .psize = 32,
ef2736fc 409 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
1da177e4
LT
410 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
411 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
412 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
413 0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
414 0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56,
415 0x93, 0x9B, 0xAA, 0xA0, 0xAD, 0xFF, 0x9A, 0xE6,
416 0x74, 0x5B, 0x7B, 0x18, 0x1C, 0x3B, 0xE3, 0xFD },
417 },
418};
419
420#define WP384_TEST_VECTORS 8
421
422static struct hash_testvec wp384_tv_template[] = {
ef2736fc 423 {
1da177e4
LT
424 .plaintext = "",
425 .psize = 0,
426 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
427 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
428 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
429 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
430 0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
431 0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57 },
432
433
434 }, {
435 .plaintext = "a",
436 .psize = 1,
437 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
438 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
439 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
440 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
441 0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
442 0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59 },
443 }, {
444 .plaintext = "abc",
445 .psize = 3,
446 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
447 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
448 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
449 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
450 0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
451 0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6 },
452 }, {
453 .plaintext = "message digest",
454 .psize = 14,
ef2736fc
HX
455 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
456 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
457 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
458 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
459 0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
1da177e4
LT
460 0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6 },
461 }, {
462 .plaintext = "abcdefghijklmnopqrstuvwxyz",
463 .psize = 26,
464 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
465 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
466 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
467 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
468 0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
469 0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6 },
470 }, {
471 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
472 "abcdefghijklmnopqrstuvwxyz0123456789",
473 .psize = 62,
474 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
475 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
476 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
477 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
478 0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
479 0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6 },
480 }, {
481 .plaintext = "1234567890123456789012345678901234567890"
482 "1234567890123456789012345678901234567890",
483 .psize = 80,
484 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
485 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
486 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
487 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
488 0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
489 0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A },
490 }, {
491 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
492 .psize = 32,
ef2736fc 493 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
1da177e4
LT
494 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
495 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
496 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
497 0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
498 0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56 },
499 },
500};
501
502#define WP256_TEST_VECTORS 8
503
504static struct hash_testvec wp256_tv_template[] = {
ef2736fc 505 {
1da177e4
LT
506 .plaintext = "",
507 .psize = 0,
508 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
509 0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
510 0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
511 0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7 },
512
513
514 }, {
515 .plaintext = "a",
516 .psize = 1,
517 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
518 0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
519 0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
520 0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42 },
521 }, {
522 .plaintext = "abc",
523 .psize = 3,
524 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
525 0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
526 0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
527 0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C },
528 }, {
529 .plaintext = "message digest",
530 .psize = 14,
ef2736fc
HX
531 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
532 0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
533 0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
1da177e4
LT
534 0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B },
535 }, {
536 .plaintext = "abcdefghijklmnopqrstuvwxyz",
537 .psize = 26,
538 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
539 0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
540 0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
541 0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B },
542 }, {
543 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
544 "abcdefghijklmnopqrstuvwxyz0123456789",
545 .psize = 62,
546 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
547 0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
548 0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
549 0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E },
550 }, {
551 .plaintext = "1234567890123456789012345678901234567890"
552 "1234567890123456789012345678901234567890",
553 .psize = 80,
554 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
555 0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
556 0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
557 0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29 },
558 }, {
559 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
560 .psize = 32,
ef2736fc 561 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
1da177e4
LT
562 0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
563 0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
564 0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69 },
565 },
566};
567
568/*
ef2736fc 569 * TIGER test vectors from Tiger website
1da177e4
LT
570 */
571#define TGR192_TEST_VECTORS 6
572
573static struct hash_testvec tgr192_tv_template[] = {
574 {
575 .plaintext = "",
576 .psize = 0,
577 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
578 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
579 0xf3, 0x73, 0xde, 0x2d, 0x49, 0x58, 0x4e, 0x7a },
580 }, {
581 .plaintext = "abc",
582 .psize = 3,
583 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
584 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
585 0x93, 0x5f, 0x7b, 0x95, 0x1c, 0x13, 0x29, 0x51 },
586 }, {
587 .plaintext = "Tiger",
588 .psize = 5,
589 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
590 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
591 0x37, 0x79, 0x0c, 0x11, 0x6f, 0x9d, 0x2b, 0xdf },
592 }, {
593 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
594 .psize = 64,
595 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
596 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
597 0xb5, 0x86, 0x44, 0x50, 0x34, 0xa5, 0xa3, 0x86 },
598 }, {
599 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
600 .psize = 64,
601 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
602 0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
603 0x57, 0x89, 0x65, 0x65, 0x97, 0x5f, 0x91, 0x97 },
604 }, {
605 .plaintext = "Tiger - A Fast New Hash Function, "
606 "by Ross Anderson and Eli Biham, "
607 "proceedings of Fast Software Encryption 3, "
608 "Cambridge, 1996.",
609 .psize = 125,
610 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
611 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
612 0xdd, 0x68, 0x15, 0x1d, 0x50, 0x39, 0x74, 0xfc },
613 },
614};
615
616#define TGR160_TEST_VECTORS 6
617
618static struct hash_testvec tgr160_tv_template[] = {
619 {
620 .plaintext = "",
621 .psize = 0,
622 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
623 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
624 0xf3, 0x73, 0xde, 0x2d },
625 }, {
626 .plaintext = "abc",
627 .psize = 3,
628 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
629 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
630 0x93, 0x5f, 0x7b, 0x95 },
631 }, {
632 .plaintext = "Tiger",
633 .psize = 5,
634 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
635 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
636 0x37, 0x79, 0x0c, 0x11 },
637 }, {
638 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
639 .psize = 64,
640 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
641 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
642 0xb5, 0x86, 0x44, 0x50 },
643 }, {
644 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
645 .psize = 64,
646 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
647 0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
648 0x57, 0x89, 0x65, 0x65 },
649 }, {
650 .plaintext = "Tiger - A Fast New Hash Function, "
651 "by Ross Anderson and Eli Biham, "
652 "proceedings of Fast Software Encryption 3, "
653 "Cambridge, 1996.",
654 .psize = 125,
655 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
656 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
657 0xdd, 0x68, 0x15, 0x1d },
658 },
659};
660
661#define TGR128_TEST_VECTORS 6
662
663static struct hash_testvec tgr128_tv_template[] = {
664 {
665 .plaintext = "",
666 .psize = 0,
667 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
668 0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f },
669 }, {
670 .plaintext = "abc",
671 .psize = 3,
672 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
673 0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf },
674 }, {
675 .plaintext = "Tiger",
676 .psize = 5,
677 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
678 0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec },
679 }, {
680 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
681 .psize = 64,
682 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
683 0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e },
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 }, {
690 .plaintext = "Tiger - A Fast New Hash Function, "
691 "by Ross Anderson and Eli Biham, "
692 "proceedings of Fast Software Encryption 3, "
693 "Cambridge, 1996.",
694 .psize = 125,
695 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
696 0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24 },
697 },
698};
699
700#ifdef CONFIG_CRYPTO_HMAC
701/*
702 * HMAC-MD5 test vectors from RFC2202
703 * (These need to be fixed to not use strlen).
704 */
705#define HMAC_MD5_TEST_VECTORS 7
706
707static struct hmac_testvec hmac_md5_tv_template[] =
ef2736fc 708{
1da177e4
LT
709 {
710 .key = { [0 ... 15] = 0x0b },
711 .ksize = 16,
712 .plaintext = "Hi There",
713 .psize = 8,
714 .digest = { 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c,
715 0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d },
716 }, {
717 .key = { 'J', 'e', 'f', 'e' },
718 .ksize = 4,
719 .plaintext = "what do ya want for nothing?",
720 .psize = 28,
721 .digest = { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03,
722 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 },
723 .np = 2,
724 .tap = {14, 14}
725 }, {
726 .key = { [0 ... 15] = 0xaa },
727 .ksize = 16,
728 .plaintext = { [0 ... 49] = 0xdd },
729 .psize = 50,
730 .digest = { 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88,
731 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 },
732 }, {
733 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
734 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
735 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, },
736 .ksize = 25,
737 .plaintext = { [0 ... 49] = 0xcd },
738 .psize = 50,
739 .digest = { 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea,
740 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 },
741 }, {
742 .key = { [0 ... 15] = 0x0c },
743 .ksize = 16,
744 .plaintext = "Test With Truncation",
745 .psize = 20,
746 .digest = { 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00,
747 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c },
748 }, {
749 .key = { [0 ... 79] = 0xaa },
750 .ksize = 80,
751 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
752 .psize = 54,
753 .digest = { 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,
754 0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd },
755 }, {
756 .key = { [0 ... 79] = 0xaa },
757 .ksize = 80,
758 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
759 "Block-Size Data",
760 .psize = 73,
761 .digest = { 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,
762 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e },
763 },
764};
765
766/*
767 * HMAC-SHA1 test vectors from RFC2202
768 */
769#define HMAC_SHA1_TEST_VECTORS 7
770
ef2736fc 771static struct hmac_testvec hmac_sha1_tv_template[] = {
1da177e4
LT
772 {
773 .key = { [0 ... 19] = 0x0b },
774 .ksize = 20,
775 .plaintext = "Hi There",
776 .psize = 8,
777 .digest = { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64,
778 0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1,
779 0x46, 0xbe },
780 }, {
ef2736fc 781 .key = { 'J', 'e', 'f', 'e' },
1da177e4
LT
782 .ksize = 4,
783 .plaintext = "what do ya want for nothing?",
784 .psize = 28,
ef2736fc 785 .digest = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
1da177e4
LT
786 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 },
787 .np = 2,
788 .tap = { 14, 14 }
789 }, {
790 .key = { [0 ... 19] = 0xaa },
791 .ksize = 20,
792 .plaintext = { [0 ... 49] = 0xdd },
793 .psize = 50,
ef2736fc 794 .digest = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
1da177e4
LT
795 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 },
796 }, {
797 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
ef2736fc 798 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1da177e4
LT
799 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 },
800 .ksize = 25,
801 .plaintext = { [0 ... 49] = 0xcd },
802 .psize = 50,
ef2736fc 803 .digest = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
1da177e4
LT
804 0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda },
805 }, {
806 .key = { [0 ... 19] = 0x0c },
807 .ksize = 20,
808 .plaintext = "Test With Truncation",
809 .psize = 20,
ef2736fc 810 .digest = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
1da177e4
LT
811 0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 },
812 }, {
813 .key = { [0 ... 79] = 0xaa },
814 .ksize = 80,
815 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
816 .psize = 54,
ef2736fc 817 .digest = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
1da177e4
LT
818 0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 },
819 }, {
820 .key = { [0 ... 79] = 0xaa },
821 .ksize = 80,
822 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
823 "Block-Size Data",
824 .psize = 73,
ef2736fc 825 .digest = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
1da177e4
LT
826 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 },
827 },
828};
829
830/*
831 * HMAC-SHA256 test vectors from
832 * draft-ietf-ipsec-ciph-sha-256-01.txt
833 */
834#define HMAC_SHA256_TEST_VECTORS 10
835
836static struct hmac_testvec hmac_sha256_tv_template[] = {
837 {
838 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
839 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
840 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
841 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20},
842 .ksize = 32,
843 .plaintext = "abc",
844 .psize = 3,
845 .digest = { 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a,
846 0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a,
847 0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66,
848 0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81 },
849 }, {
850 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
851 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
852 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
853 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
854 .ksize = 32,
855 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
856 .psize = 56,
857 .digest = { 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08,
858 0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae,
859 0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49,
860 0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30 },
861 }, {
862 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
863 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
864 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
865 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
866 .ksize = 32,
867 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
868 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
869 .psize = 112,
870 .digest = { 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34,
871 0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab,
872 0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5,
873 0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3 },
874 }, {
875 .key = { [0 ... 31] = 0x0b },
876 .ksize = 32,
877 .plaintext = "Hi There",
878 .psize = 8,
879 .digest = { 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
880 0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5,
881 0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c,
882 0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7 },
883 }, {
884 .key = "Jefe",
885 .ksize = 4,
886 .plaintext = "what do ya want for nothing?",
887 .psize = 28,
888 .digest = { 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
889 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
890 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
891 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 },
892 .np = 2,
893 .tap = { 14, 14 }
894 }, {
895 .key = { [0 ... 31] = 0xaa },
896 .ksize = 32,
897 .plaintext = { [0 ... 49] = 0xdd },
898 .psize = 50,
899 .digest = { 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
900 0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62,
901 0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc,
902 0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0 },
903 }, {
904 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
905 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
906 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
907 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
908 0x21, 0x22, 0x23, 0x24, 0x25 },
909 .ksize = 37,
910 .plaintext = { [0 ... 49] = 0xcd },
911 .psize = 50,
912 .digest = { 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74,
913 0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55,
914 0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85,
915 0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17 },
916 }, {
917 .key = { [0 ... 31] = 0x0c },
918 .ksize = 32,
919 .plaintext = "Test With Truncation",
920 .psize = 20,
921 .digest = { 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b,
922 0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17,
923 0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27,
924 0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42 },
925 }, {
926 .key = { [0 ... 79] = 0xaa },
927 .ksize = 80,
928 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
929 .psize = 54,
930 .digest = { 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09,
931 0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb,
932 0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e,
933 0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f },
934 }, {
935 .key = { [0 ... 79] = 0xaa },
936 .ksize = 80,
937 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
938 "One Block-Size Data",
939 .psize = 73,
940 .digest = { 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3,
941 0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8,
942 0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc,
943 0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6 },
944 },
945};
946
947#endif /* CONFIG_CRYPTO_HMAC */
948
949/*
950 * DES test vectors.
951 */
952#define DES_ENC_TEST_VECTORS 10
953#define DES_DEC_TEST_VECTORS 4
954#define DES_CBC_ENC_TEST_VECTORS 5
955#define DES_CBC_DEC_TEST_VECTORS 4
956#define DES3_EDE_ENC_TEST_VECTORS 3
957#define DES3_EDE_DEC_TEST_VECTORS 3
958
959static struct cipher_testvec des_enc_tv_template[] = {
960 { /* From Applied Cryptography */
961 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
962 .klen = 8,
963 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
964 .ilen = 8,
965 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
966 .rlen = 8,
967 }, { /* Same key, different plaintext block */
968 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
969 .klen = 8,
970 .input = { 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
971 .ilen = 8,
972 .result = { 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
973 .rlen = 8,
974 }, { /* Sbox test from NBS */
975 .key = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
976 .klen = 8,
977 .input = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
978 .ilen = 8,
979 .result = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
980 .rlen = 8,
981 }, { /* Three blocks */
982 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
983 .klen = 8,
984 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
985 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
986 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
987 .ilen = 24,
988 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
989 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
990 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
991 .rlen = 24,
992 }, { /* Weak key */
993 .fail = 1,
994 .wk = 1,
995 .key = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
996 .klen = 8,
997 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
998 .ilen = 8,
999 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1000 .rlen = 8,
1001 }, { /* Two blocks -- for testing encryption across pages */
1002 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1003 .klen = 8,
1004 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1005 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1006 .ilen = 16,
1007 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1008 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1009 .rlen = 16,
1010 .np = 2,
1011 .tap = { 8, 8 }
1012 }, { /* Four blocks -- for testing encryption with chunking */
1013 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1014 .klen = 8,
1015 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1016 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1017 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef,
1018 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1019 .ilen = 32,
1020 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1021 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1022 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90,
1023 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1024 .rlen = 32,
1025 .np = 3,
ef2736fc 1026 .tap = { 14, 10, 8 }
1da177e4
LT
1027 }, {
1028 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1029 .klen = 8,
1030 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1031 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1032 0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
1033 .ilen = 24,
1034 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1035 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1036 0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
1037 .rlen = 24,
1038 .np = 4,
ef2736fc 1039 .tap = { 2, 1, 3, 18 }
1da177e4
LT
1040 }, {
1041 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1042 .klen = 8,
1043 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1044 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1045 .ilen = 16,
1046 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1047 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1048 .rlen = 16,
1049 .np = 5,
ef2736fc 1050 .tap = { 2, 2, 2, 2, 8 }
1da177e4
LT
1051 }, {
1052 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1053 .klen = 8,
1054 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1055 .ilen = 8,
1056 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1057 .rlen = 8,
1058 .np = 8,
ef2736fc 1059 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
1da177e4
LT
1060 },
1061};
1062
1063static struct cipher_testvec des_dec_tv_template[] = {
1064 { /* From Applied Cryptography */
1065 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1066 .klen = 8,
1067 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1068 .ilen = 8,
1069 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1070 .rlen = 8,
1071 }, { /* Sbox test from NBS */
ef2736fc 1072 .key = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
1da177e4
LT
1073 .klen = 8,
1074 .input = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1075 .ilen = 8,
1076 .result = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
1077 .rlen = 8,
1078 }, { /* Two blocks, for chunking test */
1079 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1080 .klen = 8,
1081 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1082 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1083 .ilen = 16,
1084 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1085 0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1086 .rlen = 16,
1087 .np = 2,
1088 .tap = { 8, 8 }
1089 }, {
1090 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1091 .klen = 8,
1092 .input = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1093 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1094 .ilen = 16,
1095 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1096 0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1097 .rlen = 16,
1098 .np = 3,
1099 .tap = { 3, 12, 1 }
1100 },
1101};
1102
1103static struct cipher_testvec des_cbc_enc_tv_template[] = {
1104 { /* From OpenSSL */
1105 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1106 .klen = 8,
ef2736fc
HX
1107 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1108 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1109 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1110 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1da177e4 1111 .ilen = 24,
ef2736fc
HX
1112 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1113 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1114 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1da177e4
LT
1115 .rlen = 24,
1116 }, { /* FIPS Pub 81 */
1117 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1118 .klen = 8,
ef2736fc 1119 .iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1da177e4
LT
1120 .input = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1121 .ilen = 8,
1122 .result = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1123 .rlen = 8,
1124 }, {
1125 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1126 .klen = 8,
1127 .iv = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1128 .input = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1129 .ilen = 8,
1130 .result = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1131 .rlen = 8,
ef2736fc 1132 }, {
1da177e4
LT
1133 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1134 .klen = 8,
1135 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1136 .input = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1137 .ilen = 8,
1138 .result = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1139 .rlen = 8,
ef2736fc 1140 }, { /* Copy of openssl vector for chunk testing */
1da177e4
LT
1141 /* From OpenSSL */
1142 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1143 .klen = 8,
ef2736fc
HX
1144 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1145 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1146 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1147 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1da177e4 1148 .ilen = 24,
ef2736fc
HX
1149 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1150 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1151 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1da177e4
LT
1152 .rlen = 24,
1153 .np = 2,
1154 .tap = { 13, 11 }
1155 },
1156};
1157
1158static struct cipher_testvec des_cbc_dec_tv_template[] = {
1159 { /* FIPS Pub 81 */
1160 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1161 .klen = 8,
1162 .iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1163 .input = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1164 .ilen = 8,
1165 .result = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1166 .rlen = 8,
1167 }, {
1168 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1169 .klen = 8,
ef2736fc 1170 .iv = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1da177e4
LT
1171 .input = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1172 .ilen = 8,
ef2736fc 1173 .result = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1da177e4
LT
1174 .rlen = 8,
1175 }, {
1176 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1177 .klen = 8,
1178 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
ef2736fc 1179 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1da177e4
LT
1180 .ilen = 8,
1181 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1182 .rlen = 8,
ef2736fc 1183 }, { /* Copy of above, for chunk testing */
1da177e4
LT
1184 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1185 .klen = 8,
1186 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
ef2736fc 1187 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1da177e4
LT
1188 .ilen = 8,
1189 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1190 .rlen = 8,
1191 .np = 2,
1192 .tap = { 4, 4 }
1193 },
1194};
1195
1196/*
1197 * We really need some more test vectors, especially for DES3 CBC.
1198 */
1199static struct cipher_testvec des3_ede_enc_tv_template[] = {
1200 { /* These are from openssl */
1201 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1202 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1203 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1204 .klen = 24,
1205 .input = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1206 .ilen = 8,
1207 .result = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1208 .rlen = 8,
1209 }, {
1210 .key = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1211 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1212 0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1213 .klen = 24,
1214 .input = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1215 .ilen = 8,
1216 .result = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1217 .rlen = 8,
1218 }, {
1219 .key = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1220 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1221 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1222 .klen = 24,
1223 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1224 .ilen = 8,
1225 .result = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1226 .rlen = 8,
1227 },
1228};
1229
1230static struct cipher_testvec des3_ede_dec_tv_template[] = {
1231 { /* These are from openssl */
1232 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1233 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1234 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1235 .klen = 24,
1236 .input = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1237 .ilen = 8,
1238 .result = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1239 .rlen = 8,
1240 }, {
1241 .key = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1242 0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1243 0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1244 .klen = 24,
1245 .input = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1246 .ilen = 8,
1247 .result = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1248 .rlen = 8,
1249 }, {
1250 .key = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1251 0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1252 0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1253 .klen = 24,
1254 .input = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1255 .ilen = 8,
1256 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1257 .rlen = 8,
1258 },
1259};
1260
1261/*
1262 * Blowfish test vectors.
1263 */
1264#define BF_ENC_TEST_VECTORS 6
1265#define BF_DEC_TEST_VECTORS 6
1266#define BF_CBC_ENC_TEST_VECTORS 1
1267#define BF_CBC_DEC_TEST_VECTORS 1
1268
1269static struct cipher_testvec bf_enc_tv_template[] = {
1270 { /* DES test vectors from OpenSSL */
1271 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
1272 .klen = 8,
1273 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1274 .ilen = 8,
1275 .result = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1276 .rlen = 8,
1277 }, {
1278 .key = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1279 .klen = 8,
1280 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1281 .ilen = 8,
1282 .result = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1283 .rlen = 8,
1284 }, {
1285 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1286 .klen = 8,
1287 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1288 .ilen = 8,
1289 .result = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1290 .rlen = 8,
ef2736fc 1291 }, { /* Vary the keylength... */
1da177e4
LT
1292 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1293 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1294 .klen = 16,
1295 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1296 .ilen = 8,
1297 .result = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1298 .rlen = 8,
1299 }, {
1300 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1301 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1302 0x00, 0x11, 0x22, 0x33, 0x44 },
1303 .klen = 21,
1304 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1305 .ilen = 8,
1306 .result = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1307 .rlen = 8,
1308 }, { /* Generated with bf488 */
1309 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1310 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1311 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
ef2736fc
HX
1312 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1313 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1314 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1da177e4
LT
1315 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1316 .klen = 56,
1317 .input = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1318 .ilen = 8,
1319 .result = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1320 .rlen = 8,
1321 },
1322};
1323
1324static struct cipher_testvec bf_dec_tv_template[] = {
1325 { /* DES test vectors from OpenSSL */
1326 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1327 .klen = 8,
1328 .input = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1329 .ilen = 8,
1330 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1331 .rlen = 8,
1332 }, {
1333 .key = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1334 .klen = 8,
1335 .input = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1336 .ilen = 8,
1337 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1338 .rlen = 8,
1339 }, {
1340 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1341 .klen = 8,
1342 .input = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1343 .ilen = 8,
1344 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1345 .rlen = 8,
ef2736fc 1346 }, { /* Vary the keylength... */
1da177e4
LT
1347 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1348 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1349 .klen = 16,
1350 .input = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1351 .ilen = 8,
1352 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1353 .rlen = 8,
1354 }, {
1355 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1356 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1357 0x00, 0x11, 0x22, 0x33, 0x44 },
1358 .klen = 21,
1359 .input = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1360 .ilen = 8,
1361 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1362 .rlen = 8,
1363 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
1364 .key = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1365 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1366 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
ef2736fc
HX
1367 0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1368 0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1369 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1da177e4
LT
1370 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1371 .klen = 56,
1372 .input = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1373 .ilen = 8,
1374 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1375 .rlen = 8,
1376 },
1377};
1378
1379static struct cipher_testvec bf_cbc_enc_tv_template[] = {
1380 { /* From OpenSSL */
1381 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1382 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1383 .klen = 16,
ef2736fc 1384 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1da177e4
LT
1385 .input = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1386 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1387 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1388 0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1389 .ilen = 32,
1390 .result = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1391 0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1392 0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1393 0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1394 .rlen = 32,
1395 },
1396};
1397
1398static struct cipher_testvec bf_cbc_dec_tv_template[] = {
1399 { /* From OpenSSL */
1400 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1401 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1402 .klen = 16,
ef2736fc 1403 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1da177e4
LT
1404 .input = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1405 0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1406 0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1407 0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1408 .ilen = 32,
1409 .result = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1410 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1411 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1412 0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1413 .rlen = 32,
1414 },
1415};
1416
1417/*
1418 * Twofish test vectors.
1419 */
1420#define TF_ENC_TEST_VECTORS 3
1421#define TF_DEC_TEST_VECTORS 3
1422#define TF_CBC_ENC_TEST_VECTORS 4
1423#define TF_CBC_DEC_TEST_VECTORS 4
1424
1425static struct cipher_testvec tf_enc_tv_template[] = {
1426 {
1427 .key = { [0 ... 15] = 0x00 },
1428 .klen = 16,
1429 .input = { [0 ... 15] = 0x00 },
1430 .ilen = 16,
1431 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1432 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1433 .rlen = 16,
1434 }, {
1435 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1436 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1437 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1438 .klen = 24,
1439 .input = { [0 ... 15] = 0x00 },
1440 .ilen = 16,
1441 .result = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1442 0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1443 .rlen = 16,
1444 }, {
1445 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1446 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1447 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1448 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1449 .klen = 32,
1450 .input = { [0 ... 15] = 0x00 },
1451 .ilen = 16,
1452 .result = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1453 0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1454 .rlen = 16,
1455 },
1456};
1457
1458static struct cipher_testvec tf_dec_tv_template[] = {
1459 {
1460 .key = { [0 ... 15] = 0x00 },
1461 .klen = 16,
1462 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1463 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1464 .ilen = 16,
1465 .result = { [0 ... 15] = 0x00 },
1466 .rlen = 16,
1467 }, {
1468 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1469 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1470 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1471 .klen = 24,
1472 .input = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1473 0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1474 .ilen = 16,
1475 .result = { [0 ... 15] = 0x00 },
1476 .rlen = 16,
1477 }, {
1478 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1479 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1480 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1481 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1482 .klen = 32,
1483 .input = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1484 0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1485 .ilen = 16,
1486 .result = { [0 ... 15] = 0x00 },
1487 .rlen = 16,
1488 },
1489};
1490
1491static struct cipher_testvec tf_cbc_enc_tv_template[] = {
1492 { /* Generated with Nettle */
1493 .key = { [0 ... 15] = 0x00 },
1494 .klen = 16,
1495 .iv = { [0 ... 15] = 0x00 },
1496 .input = { [0 ... 15] = 0x00 },
1497 .ilen = 16,
1498 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1499 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1500 .rlen = 16,
1501 }, {
1502 .key = { [0 ... 15] = 0x00 },
1503 .klen = 16,
1504 .iv = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
ef2736fc 1505 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1da177e4
LT
1506 .input = { [0 ... 15] = 0x00 },
1507 .ilen = 16,
1508 .result = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1509 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1510 .rlen = 16,
1511 }, {
1512 .key = { [0 ... 15] = 0x00 },
1513 .klen = 16,
1514 .iv = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1515 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1516 .input = { [0 ... 15] = 0x00 },
1517 .ilen = 16,
1518 .result = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1519 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1520 .rlen = 16,
1521 }, {
1522 .key = { [0 ... 15] = 0x00 },
1523 .klen = 16,
1524 .iv = { [0 ... 15] = 0x00 },
1525 .input = { [0 ... 47] = 0x00 },
1526 .ilen = 48,
1527 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1528 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
1529 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1530 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
1531 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1532 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1533 .rlen = 48,
1534 },
1535};
1536
1537static struct cipher_testvec tf_cbc_dec_tv_template[] = {
1538 { /* Reverse of the first four above */
1539 .key = { [0 ... 15] = 0x00 },
1540 .klen = 16,
1541 .iv = { [0 ... 15] = 0x00 },
1542 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
ef2736fc 1543 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1da177e4
LT
1544 .ilen = 16,
1545 .result = { [0 ... 15] = 0x00 },
1546 .rlen = 16,
1547 }, {
1548 .key = { [0 ... 15] = 0x00 },
1549 .klen = 16,
1550 .iv = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1551 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1552 .input = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1553 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1554 .ilen = 16,
1555 .result = { [0 ... 15] = 0x00 },
1556 .rlen = 16,
1557 }, {
1558 .key = { [0 ... 15] = 0x00 },
1559 .klen = 16,
1560 .iv = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1561 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1562 .input = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1563 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1564 .ilen = 16,
1565 .result = { [0 ... 15] = 0x00 },
1566 .rlen = 16,
1567 }, {
1568 .key = { [0 ... 15] = 0x00 },
1569 .klen = 16,
1570 .iv = { [0 ... 15] = 0x00 },
1571 .input = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1572 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
1573 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1574 0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
1575 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1576 0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1577 .ilen = 48,
1578 .result = { [0 ... 47] = 0x00 },
1579 .rlen = 48,
1580 },
1581};
1582
1583/*
1584 * Serpent test vectors. These are backwards because Serpent writes
1585 * octet sequences in right-to-left mode.
1586 */
1587#define SERPENT_ENC_TEST_VECTORS 4
1588#define SERPENT_DEC_TEST_VECTORS 4
1589
1590#define TNEPRES_ENC_TEST_VECTORS 4
1591#define TNEPRES_DEC_TEST_VECTORS 4
1592
ef2736fc 1593static struct cipher_testvec serpent_enc_tv_template[] = {
1da177e4
LT
1594 {
1595 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1596 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1597 .ilen = 16,
1598 .result = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
1599 0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
1600 .rlen = 16,
1601 }, {
1602 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1603 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1604 .klen = 16,
1605 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1606 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1607 .ilen = 16,
1608 .result = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
1609 0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
1610 .rlen = 16,
1611 }, {
1612 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1613 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1614 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1615 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1616 .klen = 32,
1617 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1618 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1619 .ilen = 16,
1620 .result = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
1621 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
1622 .rlen = 16,
1623 }, {
1624 .key = { [15] = 0x80 },
1625 .klen = 16,
1626 .input = { [0 ... 15] = 0x00 },
1627 .ilen = 16,
1628 .result = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
1629 0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
1630 .rlen = 16,
1631 },
1632};
1633
ef2736fc 1634static struct cipher_testvec tnepres_enc_tv_template[] = {
1da177e4
LT
1635 { /* KeySize=128, PT=0, I=1 */
1636 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1637 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1638 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1639 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1640 .klen = 16,
1641 .ilen = 16,
ef2736fc 1642 .result = { 0x49, 0xaf, 0xbf, 0xad, 0x9d, 0x5a, 0x34, 0x05,
1da177e4
LT
1643 0x2c, 0xd8, 0xff, 0xa5, 0x98, 0x6b, 0xd2, 0xdd },
1644 .rlen = 16,
1645 }, { /* KeySize=192, PT=0, I=1 */
1646 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1648 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1649 .klen = 24,
1650 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1651 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1652 .ilen = 16,
ef2736fc 1653 .result = { 0xe7, 0x8e, 0x54, 0x02, 0xc7, 0x19, 0x55, 0x68,
1da177e4
LT
1654 0xac, 0x36, 0x78, 0xf7, 0xa3, 0xf6, 0x0c, 0x66 },
1655 .rlen = 16,
1656 }, { /* KeySize=256, PT=0, I=1 */
1657 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1658 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1660 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1661 .klen = 32,
1662 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1664 .ilen = 16,
ef2736fc 1665 .result = { 0xab, 0xed, 0x96, 0xe7, 0x66, 0xbf, 0x28, 0xcb,
1da177e4
LT
1666 0xc0, 0xeb, 0xd2, 0x1a, 0x82, 0xef, 0x08, 0x19 },
1667 .rlen = 16,
1668 }, { /* KeySize=256, I=257 */
1669 .key = { 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
1670 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
1671 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
1672 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
1673 .klen = 32,
1674 .input = { 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
1675 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
1676 .ilen = 16,
ef2736fc 1677 .result = { 0x5c, 0xe7, 0x1c, 0x70, 0xd2, 0x88, 0x2e, 0x5b,
1da177e4
LT
1678 0xb8, 0x32, 0xe4, 0x33, 0xf8, 0x9f, 0x26, 0xde },
1679 .rlen = 16,
1680 },
1681};
1682
1683
ef2736fc 1684static struct cipher_testvec serpent_dec_tv_template[] = {
1da177e4
LT
1685 {
1686 .input = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
1687 0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
1688 .ilen = 16,
1689 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1690 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1691 .rlen = 16,
1692 }, {
1693 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1694 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1695 .klen = 16,
1696 .input = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
1697 0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
1698 .ilen = 16,
1699 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1700 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1701 .rlen = 16,
1702 }, {
1703 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1704 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1705 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1706 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1707 .klen = 32,
1708 .input = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
1709 0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
1710 .ilen = 16,
1711 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1712 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1713 .rlen = 16,
1714 }, {
1715 .key = { [15] = 0x80 },
1716 .klen = 16,
1717 .input = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
1718 0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
1719 .ilen = 16,
1720 .result = { [0 ... 15] = 0x00 },
1721 .rlen = 16,
1722 },
1723};
1724
ef2736fc 1725static struct cipher_testvec tnepres_dec_tv_template[] = {
1da177e4
LT
1726 {
1727 .input = { 0x41, 0xcc, 0x6b, 0x31, 0x59, 0x31, 0x45, 0x97,
1728 0x6d, 0x6f, 0xbb, 0x38, 0x4b, 0x37, 0x21, 0x28 },
1729 .ilen = 16,
1730 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1731 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1732 .rlen = 16,
1733 }, {
1734 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1735 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1736 .klen = 16,
ef2736fc 1737 .input = { 0xea, 0xf4, 0xd7, 0xfc, 0xd8, 0x01, 0x34, 0x47,
1da177e4
LT
1738 0x81, 0x45, 0x0b, 0xfa, 0x0c, 0xd6, 0xad, 0x6e },
1739 .ilen = 16,
1740 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1741 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1742 .rlen = 16,
1743 }, {
1744 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1745 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1746 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1747 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1748 .klen = 32,
ef2736fc 1749 .input = { 0x64, 0xa9, 0x1a, 0x37, 0xed, 0x9f, 0xe7, 0x49,
1da177e4
LT
1750 0xa8, 0x4e, 0x76, 0xd6, 0xf5, 0x0d, 0x78, 0xee },
1751 .ilen = 16,
1752 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1753 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1754 .rlen = 16,
1755 }, { /* KeySize=128, I=121 */
1756 .key = { [15] = 0x80 },
1757 .klen = 16,
ef2736fc 1758 .input = { 0x3d, 0xda, 0xbf, 0xc0, 0x06, 0xda, 0xab, 0x06,
1da177e4
LT
1759 0x46, 0x2a, 0xf4, 0xef, 0x81, 0x54, 0x4e, 0x26 },
1760 .ilen = 16,
1761 .result = { [0 ... 15] = 0x00 },
1762 .rlen = 16,
1763 },
1764};
1765
1766
1767/* Cast6 test vectors from RFC 2612 */
1768#define CAST6_ENC_TEST_VECTORS 3
1769#define CAST6_DEC_TEST_VECTORS 3
1770
ef2736fc 1771static struct cipher_testvec cast6_enc_tv_template[] = {
1da177e4 1772 {
ef2736fc 1773 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1da177e4
LT
1774 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
1775 .klen = 16,
1776 .input = { [0 ... 15] = 0x00 },
1777 .ilen = 16,
ef2736fc 1778 .result = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
1da177e4
LT
1779 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
1780 .rlen = 16,
1781 }, {
ef2736fc
HX
1782 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1783 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
1da177e4
LT
1784 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
1785 .klen = 24,
1786 .input = { [0 ... 15] = 0x00 },
1787 .ilen = 16,
ef2736fc 1788 .result = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
1da177e4
LT
1789 0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
1790 .rlen = 16,
1791 }, {
1792 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1793 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
1794 0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
ef2736fc 1795 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
1da177e4
LT
1796 .klen = 32,
1797 .input = { [0 ... 15] = 0x00 },
1798 .ilen = 16,
ef2736fc 1799 .result = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
1da177e4
LT
1800 0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
1801 .rlen = 16,
1802 },
1803};
1804
ef2736fc 1805static struct cipher_testvec cast6_dec_tv_template[] = {
1da177e4 1806 {
ef2736fc 1807 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1da177e4
LT
1808 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
1809 .klen = 16,
ef2736fc 1810 .input = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
1da177e4
LT
1811 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
1812 .ilen = 16,
1813 .result = { [0 ... 15] = 0x00 },
1814 .rlen = 16,
1815 }, {
ef2736fc
HX
1816 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1817 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
1da177e4
LT
1818 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
1819 .klen = 24,
ef2736fc 1820 .input = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
1da177e4
LT
1821 0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
1822 .ilen = 16,
1823 .result = { [0 ... 15] = 0x00 },
1824 .rlen = 16,
1825 }, {
1826 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1827 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
1828 0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
ef2736fc 1829 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
1da177e4 1830 .klen = 32,
ef2736fc 1831 .input = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
1da177e4
LT
1832 0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
1833 .ilen = 16,
1834 .result = { [0 ... 15] = 0x00 },
1835 .rlen = 16,
1836 },
1837};
1838
1839
1840/*
1841 * AES test vectors.
1842 */
1843#define AES_ENC_TEST_VECTORS 3
1844#define AES_DEC_TEST_VECTORS 3
05f29fcd
JG
1845#define AES_CBC_ENC_TEST_VECTORS 2
1846#define AES_CBC_DEC_TEST_VECTORS 2
1da177e4 1847
ef2736fc 1848static struct cipher_testvec aes_enc_tv_template[] = {
1da177e4 1849 { /* From FIPS-197 */
ef2736fc 1850 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1da177e4
LT
1851 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1852 .klen = 16,
1853 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1854 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1855 .ilen = 16,
1856 .result = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
1857 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
1858 .rlen = 16,
1859 }, {
1860 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1861 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1862 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
1863 .klen = 24,
ef2736fc 1864 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1da177e4
LT
1865 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1866 .ilen = 16,
1867 .result = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
1868 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
1869 .rlen = 16,
1870 }, {
1871 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1872 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1873 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1874 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1875 .klen = 32,
ef2736fc 1876 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1da177e4
LT
1877 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1878 .ilen = 16,
1879 .result = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
1880 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
1881 .rlen = 16,
1882 },
1883};
1884
ef2736fc 1885static struct cipher_testvec aes_dec_tv_template[] = {
1da177e4 1886 { /* From FIPS-197 */
ef2736fc 1887 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1da177e4
LT
1888 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1889 .klen = 16,
1890 .input = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
1891 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
1892 .ilen = 16,
1893 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1894 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1895 .rlen = 16,
1896 }, {
1897 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1898 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1899 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
1900 .klen = 24,
1901 .input = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
1902 0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
1903 .ilen = 16,
ef2736fc
HX
1904 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1905 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1da177e4
LT
1906 .rlen = 16,
1907 }, {
1908 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1909 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1910 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1911 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1912 .klen = 32,
1913 .input = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
1914 0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
1915 .ilen = 16,
ef2736fc 1916 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1da177e4
LT
1917 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1918 .rlen = 16,
1919 },
1920};
1921
05f29fcd
JG
1922static struct cipher_testvec aes_cbc_enc_tv_template[] = {
1923 { /* From RFC 3602 */
1924 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
1925 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
1926 .klen = 16,
1927 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
1928 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
1929 .input = { "Single block msg" },
1930 .ilen = 16,
1931 .result = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
1932 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
1933 .rlen = 16,
1934 }, {
1935 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
1936 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
1937 .klen = 16,
1938 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
1939 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
1940 .input = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1941 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1942 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1943 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1944 .ilen = 32,
1945 .result = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
1946 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
1947 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
1948 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
1949 .rlen = 32,
1950 },
1951};
1952
1953static struct cipher_testvec aes_cbc_dec_tv_template[] = {
1954 { /* From RFC 3602 */
1955 .key = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
1956 0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
1957 .klen = 16,
1958 .iv = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
1959 0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
1960 .input = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
1961 0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
1962 .ilen = 16,
1963 .result = { "Single block msg" },
1964 .rlen = 16,
1965 }, {
1966 .key = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
1967 0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
1968 .klen = 16,
1969 .iv = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
1970 0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
1971 .input = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
1972 0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
1973 0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
1974 0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
1975 .ilen = 32,
1976 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1977 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1978 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1979 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1980 .rlen = 32,
1981 },
1982};
1983
1da177e4
LT
1984/* Cast5 test vectors from RFC 2144 */
1985#define CAST5_ENC_TEST_VECTORS 3
1986#define CAST5_DEC_TEST_VECTORS 3
1987
ef2736fc 1988static struct cipher_testvec cast5_enc_tv_template[] = {
1da177e4
LT
1989 {
1990 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
1991 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
1992 .klen = 16,
1993 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1994 .ilen = 8,
1995 .result = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
1996 .rlen = 8,
1997 }, {
1998 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
1999 0x23, 0x45 },
2000 .klen = 10,
2001 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2002 .ilen = 8,
2003 .result = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
2004 .rlen = 8,
2005 }, {
2006 .key = { 0x01, 0x23, 0x45, 0x67, 0x12 },
2007 .klen = 5,
2008 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2009 .ilen = 8,
2010 .result = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
2011 .rlen = 8,
2012 },
2013};
2014
ef2736fc 2015static struct cipher_testvec cast5_dec_tv_template[] = {
1da177e4
LT
2016 {
2017 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
2018 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
2019 .klen = 16,
2020 .input = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
2021 .ilen = 8,
2022 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2023 .rlen = 8,
2024 }, {
2025 .key = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
2026 0x23, 0x45 },
2027 .klen = 10,
2028 .input = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
2029 .ilen = 8,
2030 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2031 .rlen = 8,
2032 }, {
2033 .key = { 0x01, 0x23, 0x45, 0x67, 0x12 },
2034 .klen = 5,
2035 .input = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
2036 .ilen = 8,
2037 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2038 .rlen = 8,
2039 },
2040};
2041
ef2736fc
HX
2042/*
2043 * ARC4 test vectors from OpenSSL
1da177e4
LT
2044 */
2045#define ARC4_ENC_TEST_VECTORS 7
2046#define ARC4_DEC_TEST_VECTORS 7
2047
ef2736fc 2048static struct cipher_testvec arc4_enc_tv_template[] = {
1da177e4
LT
2049 {
2050 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2051 .klen = 8,
2052 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2053 .ilen = 8,
2054 .result = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
2055 .rlen = 8,
2056 }, {
2057 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2058 .klen = 8,
2059 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2060 .ilen = 8,
2061 .result = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
2062 .rlen = 8,
2063 }, {
2064 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2065 .klen = 8,
2066 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2067 .ilen = 8,
2068 .result = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
2069 .rlen = 8,
2070 }, {
2071 .key = { 0xef, 0x01, 0x23, 0x45},
2072 .klen = 4,
2073 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2074 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2075 0x00, 0x00, 0x00, 0x00 },
2076 .ilen = 20,
2077 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
2078 0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
2079 0x36, 0xb6, 0x78, 0x58 },
2080 .rlen = 20,
2081 }, {
2082 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2083 .klen = 8,
2084 .input = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2085 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2086 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2087 0x12, 0x34, 0x56, 0x78 },
2088 .ilen = 28,
2089 .result = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
2090 0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
2091 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
2092 0x40, 0x01, 0x1e, 0xcf },
2093 .rlen = 28,
2094 }, {
2095 .key = { 0xef, 0x01, 0x23, 0x45 },
2096 .klen = 4,
2097 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2098 0x00, 0x00 },
2099 .ilen = 10,
2100 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
2101 0xbd, 0x61 },
2102 .rlen = 10,
2103 }, {
2104 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
2105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2106 .klen = 16,
2107 .input = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
2108 .ilen = 8,
2109 .result = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
2110 .rlen = 8,
2111 },
2112};
2113
ef2736fc 2114static struct cipher_testvec arc4_dec_tv_template[] = {
1da177e4
LT
2115 {
2116 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2117 .klen = 8,
2118 .input = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
2119 .ilen = 8,
2120 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2121 .rlen = 8,
2122 }, {
2123 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2124 .klen = 8,
2125 .input = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
2126 .ilen = 8,
2127 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2128 .rlen = 8,
2129 }, {
2130 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2131 .klen = 8,
2132 .input = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
2133 .ilen = 8,
2134 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2135 .rlen = 8,
2136 }, {
2137 .key = { 0xef, 0x01, 0x23, 0x45},
2138 .klen = 4,
2139 .input = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
2140 0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
2141 0x36, 0xb6, 0x78, 0x58 },
2142 .ilen = 20,
2143 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2145 0x00, 0x00, 0x00, 0x00 },
2146 .rlen = 20,
2147 }, {
2148 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
2149 .klen = 8,
2150 .input = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
2151 0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
2152 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
2153 0x40, 0x01, 0x1e, 0xcf },
2154 .ilen = 28,
2155 .result = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2156 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2157 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
2158 0x12, 0x34, 0x56, 0x78 },
2159 .rlen = 28,
2160 }, {
2161 .key = { 0xef, 0x01, 0x23, 0x45 },
2162 .klen = 4,
2163 .input = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
2164 0xbd, 0x61 },
2165 .ilen = 10,
2166 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2167 0x00, 0x00 },
2168 .rlen = 10,
2169 }, {
2170 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
2171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2172 .klen = 16,
2173 .input = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
2174 .ilen = 8,
2175 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
2176 .rlen = 8,
2177 },
2178};
2179
ef2736fc 2180/*
1da177e4
LT
2181 * TEA test vectors
2182 */
2183#define TEA_ENC_TEST_VECTORS 4
2184#define TEA_DEC_TEST_VECTORS 4
2185
ef2736fc 2186static struct cipher_testvec tea_enc_tv_template[] = {
1da177e4
LT
2187 {
2188 .key = { [0 ... 15] = 0x00 },
2189 .klen = 16,
2190 .input = { [0 ... 8] = 0x00 },
2191 .ilen = 8,
2192 .result = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
2193 .rlen = 8,
2194 }, {
2195 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2196 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2197 .klen = 16,
2198 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2199 .ilen = 8,
2200 .result = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
2201 .rlen = 8,
2202 }, {
2203 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2204 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2205 .klen = 16,
ef2736fc 2206 .input = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
1da177e4
LT
2207 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2208 .ilen = 16,
ef2736fc 2209 .result = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
1da177e4
LT
2210 0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
2211 .rlen = 16,
2212 }, {
2213 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2214 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2215 .klen = 16,
ef2736fc
HX
2216 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2217 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2218 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
1da177e4
LT
2219 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2220 .ilen = 32,
ef2736fc
HX
2221 .result = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
2222 0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
2223 0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
1da177e4
LT
2224 0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
2225 .rlen = 32,
2226 }
2227};
2228
ef2736fc 2229static struct cipher_testvec tea_dec_tv_template[] = {
1da177e4
LT
2230 {
2231 .key = { [0 ... 15] = 0x00 },
2232 .klen = 16,
2233 .input = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
2234 .ilen = 8,
2235 .result = { [0 ... 8] = 0x00 },
2236 .rlen = 8,
2237 }, {
2238 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2239 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2240 .klen = 16,
2241 .input = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
2242 .ilen = 8,
2243 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2244 .rlen = 8,
2245 }, {
2246 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2247 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2248 .klen = 16,
2249 .input = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
ef2736fc
HX
2250 0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
2251 .ilen = 16,
2252 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
1da177e4
LT
2253 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2254 .rlen = 16,
2255 }, {
2256 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2257 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2258 .klen = 16,
2259 .input = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
ef2736fc
HX
2260 0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
2261 0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
2262 0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
1da177e4 2263 .ilen = 32,
ef2736fc
HX
2264 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2265 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2266 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
1da177e4
LT
2267 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2268 .rlen = 32,
2269 }
2270};
2271
ef2736fc
HX
2272/*
2273 * XTEA test vectors
1da177e4
LT
2274 */
2275#define XTEA_ENC_TEST_VECTORS 4
2276#define XTEA_DEC_TEST_VECTORS 4
2277
ef2736fc 2278static struct cipher_testvec xtea_enc_tv_template[] = {
1da177e4
LT
2279 {
2280 .key = { [0 ... 15] = 0x00 },
2281 .klen = 16,
2282 .input = { [0 ... 8] = 0x00 },
2283 .ilen = 8,
fb4f10ed 2284 .result = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
1da177e4
LT
2285 .rlen = 8,
2286 }, {
2287 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2288 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2289 .klen = 16,
2290 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2291 .ilen = 8,
fb4f10ed 2292 .result = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
1da177e4
LT
2293 .rlen = 8,
2294 }, {
2295 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2296 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2297 .klen = 16,
fb4f10ed 2298 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
1da177e4
LT
2299 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2300 .ilen = 16,
fb4f10ed 2301 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
1da177e4
LT
2302 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
2303 .rlen = 16,
2304 }, {
2305 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2306 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2307 .klen = 16,
fb4f10ed
AG
2308 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2309 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2310 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
1da177e4
LT
2311 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2312 .ilen = 32,
fb4f10ed
AG
2313 .result = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
2314 0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
2315 0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
2316 0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
1da177e4
LT
2317 .rlen = 32,
2318 }
2319};
2320
ef2736fc 2321static struct cipher_testvec xtea_dec_tv_template[] = {
1da177e4
LT
2322 {
2323 .key = { [0 ... 15] = 0x00 },
2324 .klen = 16,
fb4f10ed 2325 .input = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
1da177e4
LT
2326 .ilen = 8,
2327 .result = { [0 ... 8] = 0x00 },
2328 .rlen = 8,
2329 }, {
2330 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2331 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2332 .klen = 16,
fb4f10ed 2333 .input = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
1da177e4
LT
2334 .ilen = 8,
2335 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2336 .rlen = 8,
2337 }, {
2338 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2339 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2340 .klen = 16,
fb4f10ed
AG
2341 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
2342 0x77, 0x4d, 0xd4, 0xb4, 0x87, 0x24, 0xe3, 0x9a },
1da177e4 2343 .ilen = 16,
fb4f10ed 2344 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
1da177e4
LT
2345 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2346 .rlen = 16,
2347 }, {
2348 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2349 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2350 .klen = 16,
fb4f10ed
AG
2351 .input = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
2352 0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
2353 0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
2354 0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
1da177e4 2355 .ilen = 32,
fb4f10ed
AG
2356 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2357 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2358 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
1da177e4
LT
2359 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2360 .rlen = 32,
2361 }
2362};
2363
2364/*
2365 * KHAZAD test vectors.
2366 */
2367#define KHAZAD_ENC_TEST_VECTORS 5
2368#define KHAZAD_DEC_TEST_VECTORS 5
2369
ef2736fc
HX
2370static struct cipher_testvec khazad_enc_tv_template[] = {
2371 {
2372 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1da177e4
LT
2373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2374 .klen = 16,
2375 .input = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2376 .ilen = 8,
2377 .result = { 0x49, 0xa4, 0xce, 0x32, 0xac, 0x19, 0x0e, 0x3f },
2378 .rlen = 8,
2379 }, {
2380 .key = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
2381 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
2382 .klen = 16,
2383 .input = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
2384 .ilen = 8,
2385 .result = { 0x7e, 0x82, 0x12, 0xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
2386 .rlen = 8,
2387 }, {
2388 .key = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
2389 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
2390 .klen = 16,
2391 .input = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
2392 .ilen = 8,
2393 .result = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
2394 .rlen = 8,
2395 }, {
2396 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
2397 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2398 .klen = 16,
2399 .input = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2400 .ilen = 8,
2401 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
2402 .rlen = 8,
2403 }, {
2404 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
2405 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2406 .klen = 16,
2407 .input = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
2408 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2409 .ilen = 16,
2410 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
2411 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
2412 .rlen = 16,
2413 },
2414};
2415
ef2736fc 2416static struct cipher_testvec khazad_dec_tv_template[] = {
1da177e4 2417 {
ef2736fc 2418 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1da177e4
LT
2419 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2420 .klen = 16,
2421 .input = { 0X49, 0Xa4, 0Xce, 0X32, 0Xac, 0X19, 0X0e, 0X3f },
2422 .ilen = 8,
2423 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2424 .rlen = 8,
2425 }, {
2426 .key = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
2427 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
2428 .klen = 16,
2429 .input = { 0X7e, 0X82, 0X12, 0Xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
2430 .ilen = 8,
2431 .result = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
2432 .rlen = 8,
2433 }, {
2434 .key = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
2435 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
2436 .klen = 16,
2437 .input = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
2438 .ilen = 8,
2439 .result = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
2440 .rlen = 8,
2441 }, {
2442 .key = { 0x2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
2443 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2444 .klen = 16,
2445 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
2446 .ilen = 8,
2447 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2448 .rlen = 8,
2449 }, {
2450 .key = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
2451 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2452 .klen = 16,
2453 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
2454 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
2455 .ilen = 16,
2456 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
2457 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
2458 .rlen = 16,
2459 },
2460};
2461
2462/*
2463 * Anubis test vectors.
2464 */
2465
2466#define ANUBIS_ENC_TEST_VECTORS 5
2467#define ANUBIS_DEC_TEST_VECTORS 5
2468#define ANUBIS_CBC_ENC_TEST_VECTORS 2
2469#define ANUBIS_CBC_DEC_TEST_VECTORS 2
2470
2471static struct cipher_testvec anubis_enc_tv_template[] = {
2472 {
2473 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2474 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2475 .klen = 16,
2476 .input = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2477 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2478 .ilen = 16,
2479 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
2480 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
2481 .rlen = 16,
2482 }, {
2483
2484 .key = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2485 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2486 0x03, 0x03, 0x03, 0x03 },
2487 .klen = 20,
2488 .input = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2489 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
2490 .ilen = 16,
2491 .result = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
2492 0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
2493 .rlen = 16,
2494 }, {
2495 .key = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2496 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2497 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2498 0x24, 0x24, 0x24, 0x24 },
2499 .klen = 28,
2500 .input = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2501 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
2502 .ilen = 16,
2503 .result = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
2504 0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
2505 .rlen = 16,
2506 }, {
2507 .key = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2508 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2509 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2510 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
2511 .klen = 32,
2512 .input = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2513 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
2514 .ilen = 16,
2515 .result = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
2516 0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
2517 .rlen = 16,
2518 }, {
2519 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2520 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2521 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2522 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2523 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2524 .klen = 40,
2525 .input = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2526 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2527 .ilen = 16,
2528 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
2529 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
2530 .rlen = 16,
2531 },
2532};
2533
2534static struct cipher_testvec anubis_dec_tv_template[] = {
2535 {
2536 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2537 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2538 .klen = 16,
2539 .input = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
2540 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
2541 .ilen = 16,
2542 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2543 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2544 .rlen = 16,
2545 }, {
2546
2547 .key = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2548 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2549 0x03, 0x03, 0x03, 0x03 },
2550 .klen = 20,
2551 .input = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
2552 0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
2553 .ilen = 16,
2554 .result = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
2555 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
2556 .rlen = 16,
2557 }, {
2558 .key = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2559 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2560 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2561 0x24, 0x24, 0x24, 0x24 },
2562 .klen = 28,
2563 .input = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
2564 0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
2565 .ilen = 16,
2566 .result = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
2567 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
2568 .rlen = 16,
2569 }, {
2570 .key = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2571 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2572 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2573 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
2574 .klen = 32,
2575 .input = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
2576 0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
2577 .ilen = 16,
2578 .result = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
2579 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
2580 .rlen = 16,
2581 }, {
2582 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2583 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2584 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2585 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2586 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2587 .input = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
2588 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
2589 .klen = 40,
2590 .ilen = 16,
2591 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2592 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2593 .rlen = 16,
2594 },
2595};
2596
2597static struct cipher_testvec anubis_cbc_enc_tv_template[] = {
2598 {
2599 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2600 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2601 .klen = 16,
2602 .input = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2603 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2604 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2605 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2606 .ilen = 32,
2607 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
2608 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
2609 0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
2610 0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
2611 .rlen = 32,
2612 }, {
2613 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2614 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2615 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2616 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2617 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2618 .klen = 40,
2619 .input = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2620 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2621 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2622 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2623 .ilen = 32,
2624 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
2625 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
2626 0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
2627 0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
2628 .rlen = 32,
2629 },
2630};
2631
2632static struct cipher_testvec anubis_cbc_dec_tv_template[] = {
2633 {
2634 .key = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2635 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2636 .klen = 16,
2637 .input = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
2638 0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
2639 0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
2640 0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
2641 .ilen = 32,
2642 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2643 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2644 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2645 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
2646 .rlen = 32,
2647 }, {
2648 .key = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2649 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2650 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2651 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2652 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2653 .klen = 40,
2654 .input = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
2655 0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
2656 0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
2657 0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
2658 .ilen = 32,
2659 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2660 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2661 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
2662 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
2663 .rlen = 32,
2664 },
2665};
2666
fb4f10ed
AG
2667/*
2668 * XETA test vectors
2669 */
2670#define XETA_ENC_TEST_VECTORS 4
2671#define XETA_DEC_TEST_VECTORS 4
2672
2673static struct cipher_testvec xeta_enc_tv_template[] = {
2674 {
2675 .key = { [0 ... 15] = 0x00 },
2676 .klen = 16,
2677 .input = { [0 ... 8] = 0x00 },
2678 .ilen = 8,
2679 .result = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
2680 .rlen = 8,
2681 }, {
2682 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2683 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2684 .klen = 16,
2685 .input = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2686 .ilen = 8,
2687 .result = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
2688 .rlen = 8,
2689 }, {
2690 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2691 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2692 .klen = 16,
2693 .input = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
2694 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2695 .ilen = 16,
2696 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
2697 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
2698 .rlen = 16,
2699 }, {
2700 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2701 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2702 .klen = 16,
2703 .input = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2704 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2705 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
2706 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2707 .ilen = 32,
2708 .result = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1,
2709 0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4,
2710 0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f,
2711 0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
2712 .rlen = 32,
2713 }
2714};
2715
2716static struct cipher_testvec xeta_dec_tv_template[] = {
2717 {
2718 .key = { [0 ... 15] = 0x00 },
2719 .klen = 16,
2720 .input = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
2721 .ilen = 8,
2722 .result = { [0 ... 8] = 0x00 },
2723 .rlen = 8,
2724 }, {
2725 .key = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
2726 0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
2727 .klen = 16,
2728 .input = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
2729 .ilen = 8,
2730 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
2731 .rlen = 8,
2732 }, {
2733 .key = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
2734 0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
2735 .klen = 16,
2736 .input = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
2737 0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
2738 .ilen = 16,
2739 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
2740 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2741 .rlen = 16,
2742 }, {
2743 .key = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
2744 0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
2745 .klen = 16,
2746 .input = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1,
2747 0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4,
2748 0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f,
2749 0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
2750 .ilen = 32,
2751 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
2752 0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
2753 0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
2754 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2755 .rlen = 32,
2756 }
2757};
2758
1da177e4
LT
2759/*
2760 * Compression stuff.
2761 */
2762#define COMP_BUF_SIZE 512
2763
2764struct comp_testvec {
2765 int inlen, outlen;
2766 char input[COMP_BUF_SIZE];
2767 char output[COMP_BUF_SIZE];
2768};
2769
2770/*
2771 * Deflate test vectors (null-terminated strings).
2772 * Params: winbits=11, Z_DEFAULT_COMPRESSION, MAX_MEM_LEVEL.
2773 */
2774#define DEFLATE_COMP_TEST_VECTORS 2
2775#define DEFLATE_DECOMP_TEST_VECTORS 2
2776
2777static struct comp_testvec deflate_comp_tv_template[] = {
2778 {
2779 .inlen = 70,
2780 .outlen = 38,
2781 .input = "Join us now and share the software "
2782 "Join us now and share the software ",
2783 .output = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
2784 0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
2785 0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
2786 0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
2787 0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
2788 }, {
2789 .inlen = 191,
2790 .outlen = 122,
2791 .input = "This document describes a compression method based on the DEFLATE"
2792 "compression algorithm. This document defines the application of "
2793 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
2794 .output = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
2795 0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
2796 0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
2797 0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
2798 0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
2799 0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
2800 0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
2801 0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
2802 0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
2803 0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
2804 0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
2805 0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
2806 0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
2807 0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
2808 0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
2809 0xfa, 0x02 },
2810 },
2811};
2812
2813static struct comp_testvec deflate_decomp_tv_template[] = {
2814 {
2815 .inlen = 122,
2816 .outlen = 191,
2817 .input = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
2818 0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
2819 0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
2820 0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
2821 0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
2822 0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
2823 0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
2824 0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
2825 0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
2826 0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
2827 0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
2828 0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
2829 0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
2830 0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
2831 0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
2832 0xfa, 0x02 },
2833 .output = "This document describes a compression method based on the DEFLATE"
2834 "compression algorithm. This document defines the application of "
2835 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
2836 }, {
2837 .inlen = 38,
2838 .outlen = 70,
2839 .input = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
2840 0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
2841 0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
2842 0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
2843 0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
2844 .output = "Join us now and share the software "
2845 "Join us now and share the software ",
2846 },
2847};
2848
2849/*
2850 * Michael MIC test vectors from IEEE 802.11i
2851 */
2852#define MICHAEL_MIC_TEST_VECTORS 6
2853
ef2736fc 2854static struct hash_testvec michael_mic_tv_template[] = {
1da177e4
LT
2855 {
2856 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2857 .ksize = 8,
2858 .plaintext = { },
2859 .psize = 0,
2860 .digest = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 }
2861 },
2862 {
2863 .key = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 },
2864 .ksize = 8,
2865 .plaintext = { 'M' },
2866 .psize = 1,
2867 .digest = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f }
2868 },
2869 {
2870 .key = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f },
2871 .ksize = 8,
2872 .plaintext = { 'M', 'i' },
2873 .psize = 2,
2874 .digest = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 }
2875 },
2876 {
2877 .key = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 },
2878 .ksize = 8,
2879 .plaintext = { 'M', 'i', 'c' },
2880 .psize = 3,
2881 .digest = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb }
2882 },
2883 {
2884 .key = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb },
2885 .ksize = 8,
2886 .plaintext = { 'M', 'i', 'c', 'h' },
2887 .psize = 4,
2888 .digest = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 }
2889 },
2890 {
2891 .key = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 },
2892 .ksize = 8,
2893 .plaintext = { 'M', 'i', 'c', 'h', 'a', 'e', 'l' },
2894 .psize = 7,
2895 .digest = { 0x0a, 0x94, 0x2b, 0x12, 0x4e, 0xca, 0xa5, 0x46 },
2896 }
2897};
2898
c907ee76
HX
2899/*
2900 * CRC32C test vectors
2901 */
2902#define CRC32C_TEST_VECTORS 14
2903
2904static struct hash_testvec crc32c_tv_template[] = {
2905 {
2906 .psize = 0,
2907 .digest = { 0x00, 0x00, 0x00, 0x00 }
2908 },
2909 {
2910 .key = { 0x87, 0xa9, 0xcb, 0xed },
2911 .ksize = 4,
2912 .psize = 0,
2913 .digest = { 0x78, 0x56, 0x34, 0x12 },
2914 },
2915 {
2916 .key = { 0xff, 0xff, 0xff, 0xff },
2917 .ksize = 4,
2918 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
2919 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
2920 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
2921 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
2922 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 },
2923 .psize = 40,
2924 .digest = { 0x7f, 0x15, 0x2c, 0x0e }
2925 },
2926 {
2927 .key = { 0xff, 0xff, 0xff, 0xff },
2928 .ksize = 4,
2929 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
2930 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
2931 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
2932 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
2933 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
2934 .psize = 40,
2935 .digest = { 0xf6, 0xeb, 0x80, 0xe9 }
2936 },
2937 {
2938 .key = { 0xff, 0xff, 0xff, 0xff },
2939 .ksize = 4,
2940 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
2941 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
2942 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2943 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
2944 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
2945 .psize = 40,
2946 .digest = { 0xed, 0xbd, 0x74, 0xde }
2947 },
2948 {
2949 .key = { 0xff, 0xff, 0xff, 0xff },
2950 .ksize = 4,
2951 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
2952 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
2953 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
2954 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
2955 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
2956 .psize = 40,
2957 .digest = { 0x62, 0xc8, 0x79, 0xd5 }
2958 },
2959 {
2960 .key = { 0xff, 0xff, 0xff, 0xff },
2961 .ksize = 4,
2962 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
2963 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
2964 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
2965 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
2966 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
2967 .psize = 40,
2968 .digest = { 0xd0, 0x9a, 0x97, 0xba }
2969 },
2970 {
2971 .key = { 0xff, 0xff, 0xff, 0xff },
2972 .ksize = 4,
2973 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
2974 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
2975 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
2976 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
2977 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
2978 .psize = 40,
2979 .digest = { 0x13, 0xd9, 0x29, 0x2b }
2980 },
2981 {
2982 .key = { 0x80, 0xea, 0xd3, 0xf1 },
2983 .ksize = 4,
2984 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
2985 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
2986 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
2987 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
2988 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
2989 .psize = 40,
2990 .digest = { 0x0c, 0xb5, 0xe2, 0xa2 }
2991 },
2992 {
2993 .key = { 0xf3, 0x4a, 0x1d, 0x5d },
2994 .ksize = 4,
2995 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
2996 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
2997 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
2998 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
2999 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
3000 .psize = 40,
3001 .digest = { 0xd1, 0x7f, 0xfb, 0xa6 }
3002 },
3003 {
3004 .key = { 0x2e, 0x80, 0x04, 0x59 },
3005 .ksize = 4,
3006 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
3007 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
3008 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
3009 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
3010 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
3011 .psize = 40,
3012 .digest = { 0x59, 0x33, 0xe6, 0x7a }
3013 },
3014 {
3015 .key = { 0xa6, 0xcc, 0x19, 0x85 },
3016 .ksize = 4,
3017 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
3018 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
3019 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
3020 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
3021 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
3022 .psize = 40,
3023 .digest = { 0xbe, 0x03, 0x01, 0xd2 }
3024 },
3025 {
3026 .key = { 0x41, 0xfc, 0xfe, 0x2d },
3027 .ksize = 4,
3028 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
3029 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
3030 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
3031 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
3032 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
3033 .psize = 40,
3034 .digest = { 0x75, 0xd3, 0xc5, 0x24 }
3035 },
3036 {
3037 .key = { 0xff, 0xff, 0xff, 0xff },
3038 .ksize = 4,
3039 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3040 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
3041 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
3042 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
3043 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
3044 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
3045 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
3046 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
3047 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
3048 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
3049 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
3050 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
3051 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
3052 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
3053 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
3054 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
3055 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
3056 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
3057 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
3058 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0,
3059 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
3060 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
3061 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
3062 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
3063 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
3064 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
3065 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
3066 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
3067 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
3068 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
3069 .psize = 240,
3070 .digest = { 0x75, 0xd3, 0xc5, 0x24 },
3071 .np = 2,
3072 .tap = { 31, 209 }
3073 },
3074};
3075
ebfd9bcf
HW
3076/*
3077 * Cipher speed tests
3078 */
3079static struct cipher_speed aes_speed_template[] = {
3080 { .klen = 16, .blen = 16, },
3081 { .klen = 16, .blen = 64, },
3082 { .klen = 16, .blen = 256, },
3083 { .klen = 16, .blen = 1024, },
3084 { .klen = 16, .blen = 8192, },
3085 { .klen = 24, .blen = 16, },
3086 { .klen = 24, .blen = 64, },
3087 { .klen = 24, .blen = 256, },
3088 { .klen = 24, .blen = 1024, },
3089 { .klen = 24, .blen = 8192, },
3090 { .klen = 32, .blen = 16, },
3091 { .klen = 32, .blen = 64, },
3092 { .klen = 32, .blen = 256, },
3093 { .klen = 32, .blen = 1024, },
3094 { .klen = 32, .blen = 8192, },
3095
3096 /* End marker */
3097 { .klen = 0, .blen = 0, }
3098};
3099
3100static struct cipher_speed des3_ede_speed_template[] = {
3101 { .klen = 24, .blen = 16, },
3102 { .klen = 24, .blen = 64, },
3103 { .klen = 24, .blen = 256, },
3104 { .klen = 24, .blen = 1024, },
3105 { .klen = 24, .blen = 8192, },
3106
3107 /* End marker */
3108 { .klen = 0, .blen = 0, }
3109};
3110
3111static struct cipher_speed twofish_speed_template[] = {
3112 { .klen = 16, .blen = 16, },
3113 { .klen = 16, .blen = 64, },
3114 { .klen = 16, .blen = 256, },
3115 { .klen = 16, .blen = 1024, },
3116 { .klen = 16, .blen = 8192, },
3117 { .klen = 24, .blen = 16, },
3118 { .klen = 24, .blen = 64, },
3119 { .klen = 24, .blen = 256, },
3120 { .klen = 24, .blen = 1024, },
3121 { .klen = 24, .blen = 8192, },
3122 { .klen = 32, .blen = 16, },
3123 { .klen = 32, .blen = 64, },
3124 { .klen = 32, .blen = 256, },
3125 { .klen = 32, .blen = 1024, },
3126 { .klen = 32, .blen = 8192, },
3127
3128 /* End marker */
3129 { .klen = 0, .blen = 0, }
3130};
3131
3132static struct cipher_speed blowfish_speed_template[] = {
3133 /* Don't support blowfish keys > 256 bit in this test */
3134 { .klen = 8, .blen = 16, },
3135 { .klen = 8, .blen = 64, },
3136 { .klen = 8, .blen = 256, },
3137 { .klen = 8, .blen = 1024, },
3138 { .klen = 8, .blen = 8192, },
3139 { .klen = 32, .blen = 16, },
3140 { .klen = 32, .blen = 64, },
3141 { .klen = 32, .blen = 256, },
3142 { .klen = 32, .blen = 1024, },
3143 { .klen = 32, .blen = 8192, },
3144
3145 /* End marker */
3146 { .klen = 0, .blen = 0, }
3147};
3148
3149static struct cipher_speed des_speed_template[] = {
3150 { .klen = 8, .blen = 16, },
3151 { .klen = 8, .blen = 64, },
3152 { .klen = 8, .blen = 256, },
3153 { .klen = 8, .blen = 1024, },
3154 { .klen = 8, .blen = 8192, },
3155
3156 /* End marker */
3157 { .klen = 0, .blen = 0, }
3158};
3159
e8057928
ML
3160/*
3161 * Digest speed tests
3162 */
3163static struct digest_speed generic_digest_speed_template[] = {
3164 { .blen = 16, .plen = 16, },
3165 { .blen = 64, .plen = 16, },
3166 { .blen = 64, .plen = 64, },
3167 { .blen = 256, .plen = 16, },
3168 { .blen = 256, .plen = 64, },
3169 { .blen = 256, .plen = 256, },
3170 { .blen = 1024, .plen = 16, },
3171 { .blen = 1024, .plen = 256, },
3172 { .blen = 1024, .plen = 1024, },
3173 { .blen = 2048, .plen = 16, },
3174 { .blen = 2048, .plen = 256, },
3175 { .blen = 2048, .plen = 1024, },
3176 { .blen = 2048, .plen = 2048, },
3177 { .blen = 4096, .plen = 16, },
3178 { .blen = 4096, .plen = 256, },
3179 { .blen = 4096, .plen = 1024, },
3180 { .blen = 4096, .plen = 4096, },
3181 { .blen = 8192, .plen = 16, },
3182 { .blen = 8192, .plen = 256, },
3183 { .blen = 8192, .plen = 1024, },
3184 { .blen = 8192, .plen = 4096, },
3185 { .blen = 8192, .plen = 8192, },
3186
3187 /* End marker */
3188 { .blen = 0, .plen = 0, }
3189};
3190
1da177e4 3191#endif /* _CRYPTO_TCRYPT_H */