blob: 1fac5602f633182f648e54f83fe0e60f50a0f56f [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
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
Herbert Xuef2736f2005-06-22 13:26:03 -070012 * Software Foundation; either version 2 of the License, or (at your option)
Linus Torvalds1da177e2005-04-16 15:20:36 -070013 * any later version.
14 *
Harald Welteebfd9bc2005-06-22 13:27:23 -070015 * 2004-08-09 Cipher speed tests by Reyk Floeter <reyk@vantronix.net>
16 * 2003-09-14 Changes by Kartikey Mahendra Bhatt
Linus Torvalds1da177e2005-04-16 15:20:36 -070017 *
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 {
Atsushi Nemoto06b42aa2006-03-13 21:39:23 +110029 /* only used with keyed hash algorithms */
30 char key[128] __attribute__ ((__aligned__(4)));
Linus Torvalds1da177e2005-04-16 15:20:36 -070031 char plaintext[128];
Linus Torvalds1da177e2005-04-16 15:20:36 -070032 char digest[MAX_DIGEST_SIZE];
Herbert Xuef2736f2005-06-22 13:26:03 -070033 unsigned char tap[MAX_TAP];
Atsushi Nemoto06b42aa2006-03-13 21:39:23 +110034 unsigned char psize;
35 unsigned char np;
Linus Torvalds1da177e2005-04-16 15:20:36 -070036 unsigned char ksize;
37};
38
Herbert Xuef2736f2005-06-22 13:26:03 -070039struct hmac_testvec {
Linus Torvalds1da177e2005-04-16 15:20:36 -070040 char key[128];
Linus Torvalds1da177e2005-04-16 15:20:36 -070041 char plaintext[128];
Linus Torvalds1da177e2005-04-16 15:20:36 -070042 char digest[MAX_DIGEST_SIZE];
Herbert Xuef2736f2005-06-22 13:26:03 -070043 unsigned char tap[MAX_TAP];
Atsushi Nemoto06b42aa2006-03-13 21:39:23 +110044 unsigned char ksize;
45 unsigned char psize;
46 unsigned char np;
Linus Torvalds1da177e2005-04-16 15:20:36 -070047};
48
49struct cipher_testvec {
Atsushi Nemoto06b42aa2006-03-13 21:39:23 +110050 char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
Linus Torvalds1da177e2005-04-16 15:20:36 -070051 char iv[MAX_IVLEN];
52 char input[48];
Linus Torvalds1da177e2005-04-16 15:20:36 -070053 char result[48];
Herbert Xuef2736f2005-06-22 13:26:03 -070054 unsigned char tap[MAX_TAP];
Atsushi Nemoto06b42aa2006-03-13 21:39:23 +110055 int np;
56 unsigned char fail;
57 unsigned char wk; /* weak key flag */
58 unsigned char klen;
59 unsigned char ilen;
60 unsigned char rlen;
Linus Torvalds1da177e2005-04-16 15:20:36 -070061};
62
Harald Welteebfd9bc2005-06-22 13:27:23 -070063struct cipher_speed {
64 unsigned char klen;
65 unsigned int blen;
66};
67
Michal Ludvige8057922006-05-30 22:04:19 +100068struct digest_speed {
69 unsigned int blen; /* buffer length */
70 unsigned int plen; /* per-update length */
71};
72
Linus Torvalds1da177e2005-04-16 15:20:36 -070073/*
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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700170 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700171 .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
Herbert Xuef2736f2005-06-22 13:26:03 -0700190static struct hash_testvec sha256_tv_template[] = {
191 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700192 .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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700216 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700217 .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"
Herbert Xuef2736f2005-06-22 13:26:03 -0700236 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
Linus Torvalds1da177e2005-04-16 15:20:36 -0700237 .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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700265 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700266 .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/*
Herbert Xuef2736f2005-06-22 13:26:03 -0700318 * WHIRLPOOL test vectors from Whirlpool package
Linus Torvalds1da177e2005-04-16 15:20:36 -0700319 * 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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700325 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700326 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700363 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700409 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700410 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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700423 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700424 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700455 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700460 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700493 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700494 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[] = {
Herbert Xuef2736f2005-06-22 13:26:03 -0700505 {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700506 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700531 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700534 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700561 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700562 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/*
Herbert Xuef2736f2005-06-22 13:26:03 -0700569 * TIGER test vectors from Tiger website
Linus Torvalds1da177e2005-04-16 15:20:36 -0700570 */
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[] =
Herbert Xuef2736f2005-06-22 13:26:03 -0700708{
Linus Torvalds1da177e2005-04-16 15:20:36 -0700709 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -0700771static struct hmac_testvec hmac_sha1_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700772 {
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 }, {
Herbert Xuef2736f2005-06-22 13:26:03 -0700781 .key = { 'J', 'e', 'f', 'e' },
Linus Torvalds1da177e2005-04-16 15:20:36 -0700782 .ksize = 4,
783 .plaintext = "what do ya want for nothing?",
784 .psize = 28,
Herbert Xuef2736f2005-06-22 13:26:03 -0700785 .digest = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700786 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700794 .digest = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700795 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 },
796 }, {
797 .key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
Herbert Xuef2736f2005-06-22 13:26:03 -0700798 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700799 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 },
800 .ksize = 25,
801 .plaintext = { [0 ... 49] = 0xcd },
802 .psize = 50,
Herbert Xuef2736f2005-06-22 13:26:03 -0700803 .digest = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700804 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700810 .digest = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700811 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700817 .digest = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700818 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,
Herbert Xuef2736f2005-06-22 13:26:03 -0700825 .digest = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700826 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001026 .tap = { 14, 10, 8 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001027 }, {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001039 .tap = { 2, 1, 3, 18 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001040 }, {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001050 .tap = { 2, 2, 2, 2, 8 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001051 }, {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001059 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07001060 },
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 */
Herbert Xuef2736f2005-06-22 13:26:03 -07001072 .key = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001073 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001107 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001111 .ilen = 24,
Herbert Xuef2736f2005-06-22 13:26:03 -07001112 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001115 .rlen = 24,
1116 }, { /* FIPS Pub 81 */
1117 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1118 .klen = 8,
Herbert Xuef2736f2005-06-22 13:26:03 -07001119 .iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001120 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001132 }, {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001133 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001140 }, { /* Copy of openssl vector for chunk testing */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001141 /* From OpenSSL */
1142 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1143 .klen = 8,
Herbert Xuef2736f2005-06-22 13:26:03 -07001144 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001148 .ilen = 24,
Herbert Xuef2736f2005-06-22 13:26:03 -07001149 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001152 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001170 .iv = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001171 .input = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1172 .ilen = 8,
Herbert Xuef2736f2005-06-22 13:26:03 -07001173 .result = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001174 .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 },
Herbert Xuef2736f2005-06-22 13:26:03 -07001179 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001180 .ilen = 8,
1181 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1182 .rlen = 8,
Herbert Xuef2736f2005-06-22 13:26:03 -07001183 }, { /* Copy of above, for chunk testing */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001184 .key = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1185 .klen = 8,
1186 .iv = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
Herbert Xuef2736f2005-06-22 13:26:03 -07001187 .input = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001188 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001291 }, { /* Vary the keylength... */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001292 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001312 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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001315 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001346 }, { /* Vary the keylength... */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001347 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001367 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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001370 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001384 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001385 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001403 .iv = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001404 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001505 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001506 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001543 0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001544 .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
Herbert Xuef2736f2005-06-22 13:26:03 -07001593static struct cipher_testvec serpent_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001594 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07001634static struct cipher_testvec tnepres_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001635 { /* 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001642 .result = { 0x49, 0xaf, 0xbf, 0xad, 0x9d, 0x5a, 0x34, 0x05,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001643 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001653 .result = { 0xe7, 0x8e, 0x54, 0x02, 0xc7, 0x19, 0x55, 0x68,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001654 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001665 .result = { 0xab, 0xed, 0x96, 0xe7, 0x66, 0xbf, 0x28, 0xcb,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001666 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001677 .result = { 0x5c, 0xe7, 0x1c, 0x70, 0xd2, 0x88, 0x2e, 0x5b,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001678 0xb8, 0x32, 0xe4, 0x33, 0xf8, 0x9f, 0x26, 0xde },
1679 .rlen = 16,
1680 },
1681};
1682
1683
Herbert Xuef2736f2005-06-22 13:26:03 -07001684static struct cipher_testvec serpent_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001685 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07001725static struct cipher_testvec tnepres_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001726 {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001737 .input = { 0xea, 0xf4, 0xd7, 0xfc, 0xd8, 0x01, 0x34, 0x47,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001738 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001749 .input = { 0x64, 0xa9, 0x1a, 0x37, 0xed, 0x9f, 0xe7, 0x49,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001750 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001758 .input = { 0x3d, 0xda, 0xbf, 0xc0, 0x06, 0xda, 0xab, 0x06,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001759 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
Herbert Xuef2736f2005-06-22 13:26:03 -07001771static struct cipher_testvec cast6_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001772 {
Herbert Xuef2736f2005-06-22 13:26:03 -07001773 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001774 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
1775 .klen = 16,
1776 .input = { [0 ... 15] = 0x00 },
1777 .ilen = 16,
Herbert Xuef2736f2005-06-22 13:26:03 -07001778 .result = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001779 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
1780 .rlen = 16,
1781 }, {
Herbert Xuef2736f2005-06-22 13:26:03 -07001782 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1783 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001784 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
1785 .klen = 24,
1786 .input = { [0 ... 15] = 0x00 },
1787 .ilen = 16,
Herbert Xuef2736f2005-06-22 13:26:03 -07001788 .result = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001789 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001795 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001796 .klen = 32,
1797 .input = { [0 ... 15] = 0x00 },
1798 .ilen = 16,
Herbert Xuef2736f2005-06-22 13:26:03 -07001799 .result = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001800 0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
1801 .rlen = 16,
1802 },
1803};
1804
Herbert Xuef2736f2005-06-22 13:26:03 -07001805static struct cipher_testvec cast6_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001806 {
Herbert Xuef2736f2005-06-22 13:26:03 -07001807 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001808 0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
1809 .klen = 16,
Herbert Xuef2736f2005-06-22 13:26:03 -07001810 .input = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001811 0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
1812 .ilen = 16,
1813 .result = { [0 ... 15] = 0x00 },
1814 .rlen = 16,
1815 }, {
Herbert Xuef2736f2005-06-22 13:26:03 -07001816 .key = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
1817 0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001818 0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
1819 .klen = 24,
Herbert Xuef2736f2005-06-22 13:26:03 -07001820 .input = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001821 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001829 0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001830 .klen = 32,
Herbert Xuef2736f2005-06-22 13:26:03 -07001831 .input = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001832 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
Jan Glauber05f29fc2006-01-06 00:19:19 -08001845#define AES_CBC_ENC_TEST_VECTORS 2
1846#define AES_CBC_DEC_TEST_VECTORS 2
Linus Torvalds1da177e2005-04-16 15:20:36 -07001847
Herbert Xuef2736f2005-06-22 13:26:03 -07001848static struct cipher_testvec aes_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001849 { /* From FIPS-197 */
Herbert Xuef2736f2005-06-22 13:26:03 -07001850 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001851 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001864 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001865 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001876 .input = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001877 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
Herbert Xuef2736f2005-06-22 13:26:03 -07001885static struct cipher_testvec aes_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001886 { /* From FIPS-197 */
Herbert Xuef2736f2005-06-22 13:26:03 -07001887 .key = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001888 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001904 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1905 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
Linus Torvalds1da177e2005-04-16 15:20:36 -07001906 .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,
Herbert Xuef2736f2005-06-22 13:26:03 -07001916 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
Linus Torvalds1da177e2005-04-16 15:20:36 -07001917 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1918 .rlen = 16,
1919 },
1920};
1921
Jan Glauber05f29fc2006-01-06 00:19:19 -08001922static 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
Linus Torvalds1da177e2005-04-16 15:20:36 -07001984/* Cast5 test vectors from RFC 2144 */
1985#define CAST5_ENC_TEST_VECTORS 3
1986#define CAST5_DEC_TEST_VECTORS 3
1987
Herbert Xuef2736f2005-06-22 13:26:03 -07001988static struct cipher_testvec cast5_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07001989 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07002015static struct cipher_testvec cast5_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002016 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07002042/*
2043 * ARC4 test vectors from OpenSSL
Linus Torvalds1da177e2005-04-16 15:20:36 -07002044 */
2045#define ARC4_ENC_TEST_VECTORS 7
2046#define ARC4_DEC_TEST_VECTORS 7
2047
Herbert Xuef2736f2005-06-22 13:26:03 -07002048static struct cipher_testvec arc4_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002049 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07002114static struct cipher_testvec arc4_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002115 {
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
Herbert Xuef2736f2005-06-22 13:26:03 -07002180/*
Linus Torvalds1da177e2005-04-16 15:20:36 -07002181 * TEA test vectors
2182 */
2183#define TEA_ENC_TEST_VECTORS 4
2184#define TEA_DEC_TEST_VECTORS 4
2185
Herbert Xuef2736f2005-06-22 13:26:03 -07002186static struct cipher_testvec tea_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002187 {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07002206 .input = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002207 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2208 .ilen = 16,
Herbert Xuef2736f2005-06-22 13:26:03 -07002209 .result = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002210 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07002216 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002219 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2220 .ilen = 32,
Herbert Xuef2736f2005-06-22 13:26:03 -07002221 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002224 0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
2225 .rlen = 32,
2226 }
2227};
2228
Herbert Xuef2736f2005-06-22 13:26:03 -07002229static struct cipher_testvec tea_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002230 {
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,
Herbert Xuef2736f2005-06-22 13:26:03 -07002250 0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
2251 .ilen = 16,
2252 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002253 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,
Herbert Xuef2736f2005-06-22 13:26:03 -07002260 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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002263 .ilen = 32,
Herbert Xuef2736f2005-06-22 13:26:03 -07002264 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002267 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2268 .rlen = 32,
2269 }
2270};
2271
Herbert Xuef2736f2005-06-22 13:26:03 -07002272/*
2273 * XTEA test vectors
Linus Torvalds1da177e2005-04-16 15:20:36 -07002274 */
2275#define XTEA_ENC_TEST_VECTORS 4
2276#define XTEA_DEC_TEST_VECTORS 4
2277
Herbert Xuef2736f2005-06-22 13:26:03 -07002278static struct cipher_testvec xtea_enc_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002279 {
2280 .key = { [0 ... 15] = 0x00 },
2281 .klen = 16,
2282 .input = { [0 ... 8] = 0x00 },
2283 .ilen = 8,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002284 .result = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002285 .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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002292 .result = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002293 .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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002298 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002299 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
2300 .ilen = 16,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002301 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002302 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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002308 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002311 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
2312 .ilen = 32,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002313 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002317 .rlen = 32,
2318 }
2319};
2320
Herbert Xuef2736f2005-06-22 13:26:03 -07002321static struct cipher_testvec xtea_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002322 {
2323 .key = { [0 ... 15] = 0x00 },
2324 .klen = 16,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002325 .input = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002326 .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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002333 .input = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002334 .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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002341 .input = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
2342 0x77, 0x4d, 0xd4, 0xb4, 0x87, 0x24, 0xe3, 0x9a },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002343 .ilen = 16,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002344 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002345 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,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002351 .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 },
Linus Torvalds1da177e2005-04-16 15:20:36 -07002355 .ilen = 32,
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002356 .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,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002359 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
Herbert Xuef2736f2005-06-22 13:26:03 -07002370static struct cipher_testvec khazad_enc_tv_template[] = {
2371 {
2372 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002373 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
Herbert Xuef2736f2005-06-22 13:26:03 -07002416static struct cipher_testvec khazad_dec_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002417 {
Herbert Xuef2736f2005-06-22 13:26:03 -07002418 .key = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Linus Torvalds1da177e2005-04-16 15:20:36 -07002419 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
Aaron Grothefb4f10e2005-09-01 17:42:46 -07002667/*
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
Linus Torvalds1da177e2005-04-16 15:20:36 -07002759/*
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
Herbert Xuef2736f2005-06-22 13:26:03 -07002854static struct hash_testvec michael_mic_tv_template[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002855 {
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
Harald Welteebfd9bc2005-06-22 13:27:23 -07002899/*
2900 * Cipher speed tests
2901 */
2902static struct cipher_speed aes_speed_template[] = {
2903 { .klen = 16, .blen = 16, },
2904 { .klen = 16, .blen = 64, },
2905 { .klen = 16, .blen = 256, },
2906 { .klen = 16, .blen = 1024, },
2907 { .klen = 16, .blen = 8192, },
2908 { .klen = 24, .blen = 16, },
2909 { .klen = 24, .blen = 64, },
2910 { .klen = 24, .blen = 256, },
2911 { .klen = 24, .blen = 1024, },
2912 { .klen = 24, .blen = 8192, },
2913 { .klen = 32, .blen = 16, },
2914 { .klen = 32, .blen = 64, },
2915 { .klen = 32, .blen = 256, },
2916 { .klen = 32, .blen = 1024, },
2917 { .klen = 32, .blen = 8192, },
2918
2919 /* End marker */
2920 { .klen = 0, .blen = 0, }
2921};
2922
2923static struct cipher_speed des3_ede_speed_template[] = {
2924 { .klen = 24, .blen = 16, },
2925 { .klen = 24, .blen = 64, },
2926 { .klen = 24, .blen = 256, },
2927 { .klen = 24, .blen = 1024, },
2928 { .klen = 24, .blen = 8192, },
2929
2930 /* End marker */
2931 { .klen = 0, .blen = 0, }
2932};
2933
2934static struct cipher_speed twofish_speed_template[] = {
2935 { .klen = 16, .blen = 16, },
2936 { .klen = 16, .blen = 64, },
2937 { .klen = 16, .blen = 256, },
2938 { .klen = 16, .blen = 1024, },
2939 { .klen = 16, .blen = 8192, },
2940 { .klen = 24, .blen = 16, },
2941 { .klen = 24, .blen = 64, },
2942 { .klen = 24, .blen = 256, },
2943 { .klen = 24, .blen = 1024, },
2944 { .klen = 24, .blen = 8192, },
2945 { .klen = 32, .blen = 16, },
2946 { .klen = 32, .blen = 64, },
2947 { .klen = 32, .blen = 256, },
2948 { .klen = 32, .blen = 1024, },
2949 { .klen = 32, .blen = 8192, },
2950
2951 /* End marker */
2952 { .klen = 0, .blen = 0, }
2953};
2954
2955static struct cipher_speed blowfish_speed_template[] = {
2956 /* Don't support blowfish keys > 256 bit in this test */
2957 { .klen = 8, .blen = 16, },
2958 { .klen = 8, .blen = 64, },
2959 { .klen = 8, .blen = 256, },
2960 { .klen = 8, .blen = 1024, },
2961 { .klen = 8, .blen = 8192, },
2962 { .klen = 32, .blen = 16, },
2963 { .klen = 32, .blen = 64, },
2964 { .klen = 32, .blen = 256, },
2965 { .klen = 32, .blen = 1024, },
2966 { .klen = 32, .blen = 8192, },
2967
2968 /* End marker */
2969 { .klen = 0, .blen = 0, }
2970};
2971
2972static struct cipher_speed des_speed_template[] = {
2973 { .klen = 8, .blen = 16, },
2974 { .klen = 8, .blen = 64, },
2975 { .klen = 8, .blen = 256, },
2976 { .klen = 8, .blen = 1024, },
2977 { .klen = 8, .blen = 8192, },
2978
2979 /* End marker */
2980 { .klen = 0, .blen = 0, }
2981};
2982
Michal Ludvige8057922006-05-30 22:04:19 +10002983/*
2984 * Digest speed tests
2985 */
2986static struct digest_speed generic_digest_speed_template[] = {
2987 { .blen = 16, .plen = 16, },
2988 { .blen = 64, .plen = 16, },
2989 { .blen = 64, .plen = 64, },
2990 { .blen = 256, .plen = 16, },
2991 { .blen = 256, .plen = 64, },
2992 { .blen = 256, .plen = 256, },
2993 { .blen = 1024, .plen = 16, },
2994 { .blen = 1024, .plen = 256, },
2995 { .blen = 1024, .plen = 1024, },
2996 { .blen = 2048, .plen = 16, },
2997 { .blen = 2048, .plen = 256, },
2998 { .blen = 2048, .plen = 1024, },
2999 { .blen = 2048, .plen = 2048, },
3000 { .blen = 4096, .plen = 16, },
3001 { .blen = 4096, .plen = 256, },
3002 { .blen = 4096, .plen = 1024, },
3003 { .blen = 4096, .plen = 4096, },
3004 { .blen = 8192, .plen = 16, },
3005 { .blen = 8192, .plen = 256, },
3006 { .blen = 8192, .plen = 1024, },
3007 { .blen = 8192, .plen = 4096, },
3008 { .blen = 8192, .plen = 8192, },
3009
3010 /* End marker */
3011 { .blen = 0, .plen = 0, }
3012};
3013
Linus Torvalds1da177e2005-04-16 15:20:36 -07003014#endif /* _CRYPTO_TCRYPT_H */