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