[CRYPTO] tcrypt: AES CTR large test vector
[linux-flexiantxendom0-natty.git] / crypto / tcrypt.h
1 /*
2  * Quick & dirty crypto testing module.
3  *
4  * This will only exist until we have a better testing mechanism
5  * (e.g. a char device).
6  *
7  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
8  * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
9  * Copyright (c) 2007 Nokia Siemens Networks
10  *
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU General Public License as published by the Free
13  * Software Foundation; either version 2 of the License, or (at your option)
14  * any later version.
15  *
16  * 2007-11-13 Added GCM tests
17  * 2007-11-13 Added AEAD support
18  * 2006-12-07 Added SHA384 HMAC and SHA512 HMAC tests
19  * 2004-08-09 Cipher speed tests by Reyk Floeter <reyk@vantronix.net>
20  * 2003-09-14 Changes by Kartikey Mahendra Bhatt
21  *
22  */
23 #ifndef _CRYPTO_TCRYPT_H
24 #define _CRYPTO_TCRYPT_H
25
26 #define MAX_DIGEST_SIZE         64
27 #define MAX_TAP                 8
28
29 #define MAX_KEYLEN              56
30 #define MAX_IVLEN               32
31
32 struct hash_testvec {
33         /* only used with keyed hash algorithms */
34         char key[132] __attribute__ ((__aligned__(4)));
35         char plaintext[240];
36         char digest[MAX_DIGEST_SIZE];
37         unsigned char tap[MAX_TAP];
38         unsigned char psize;
39         unsigned char np;
40         unsigned char ksize;
41 };
42
43 struct cipher_testvec {
44         char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
45         char iv[MAX_IVLEN];
46         char input[4100];
47         char result[4100];
48         unsigned char tap[MAX_TAP];
49         int np;
50         unsigned char fail;
51         unsigned char wk; /* weak key flag */
52         unsigned char klen;
53         unsigned short ilen;
54         unsigned short rlen;
55 };
56
57 struct aead_testvec {
58         char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
59         char iv[MAX_IVLEN];
60         char input[512];
61         char assoc[512];
62         char result[512];
63         char tag[128];
64         unsigned char tap[MAX_TAP];
65         unsigned char atap[MAX_TAP];
66         int np;
67         int anp;
68         unsigned char fail;
69         unsigned char wk; /* weak key flag */
70         unsigned char klen;
71         unsigned short ilen;
72         unsigned short alen;
73         unsigned short rlen;
74         unsigned short tlen;
75 };
76
77 struct cipher_speed {
78         unsigned char klen;
79         unsigned int blen;
80 };
81
82 struct hash_speed {
83         unsigned int blen;      /* buffer length */
84         unsigned int plen;      /* per-update length */
85 };
86
87 /*
88  * MD4 test vectors from RFC1320
89  */
90 #define MD4_TEST_VECTORS        7
91
92 static struct hash_testvec md4_tv_template [] = {
93         {
94                 .plaintext = "",
95                 .digest = { 0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31,
96                             0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0 },
97         }, {
98                 .plaintext = "a",
99                 .psize  = 1,
100                 .digest = { 0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46,
101                             0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24 },
102         }, {
103                 .plaintext = "abc",
104                 .psize  = 3,
105                 .digest = { 0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52,
106                             0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d },
107         }, {
108                 .plaintext = "message digest",
109                 .psize  = 14,
110                 .digest = { 0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8,
111                             0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b },
112         }, {
113                 .plaintext = "abcdefghijklmnopqrstuvwxyz",
114                 .psize  = 26,
115                 .digest = { 0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd,
116                             0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9 },
117                 .np     = 2,
118                 .tap    = { 13, 13 },
119         }, {
120                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
121                 .psize  = 62,
122                 .digest = { 0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35,
123                             0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4 },
124         }, {
125                 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
126                              "45678901234567890",
127                 .psize  = 80,
128                 .digest = { 0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19,
129                             0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36 },
130         },
131 };
132
133 /*
134  * MD5 test vectors from RFC1321
135  */
136 #define MD5_TEST_VECTORS        7
137
138 static struct hash_testvec md5_tv_template[] = {
139         {
140                 .digest = { 0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04,
141                             0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e },
142         }, {
143                 .plaintext = "a",
144                 .psize  = 1,
145                 .digest = { 0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8,
146                             0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 },
147         }, {
148                 .plaintext = "abc",
149                 .psize  = 3,
150                 .digest = { 0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0,
151                             0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 },
152         }, {
153                 .plaintext = "message digest",
154                 .psize  = 14,
155                 .digest = { 0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d,
156                             0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 },
157         }, {
158                 .plaintext = "abcdefghijklmnopqrstuvwxyz",
159                 .psize  = 26,
160                 .digest = { 0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00,
161                             0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b },
162                 .np     = 2,
163                 .tap    = {13, 13}
164         }, {
165                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
166                 .psize  = 62,
167                 .digest = { 0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5,
168                             0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f },
169         }, {
170                 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
171                              "345678901234567890",
172                 .psize  = 80,
173                 .digest = { 0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55,
174                             0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a },
175         }
176 };
177
178 /*
179  * SHA1 test vectors  from from FIPS PUB 180-1
180  */
181 #define SHA1_TEST_VECTORS       2
182
183 static struct hash_testvec sha1_tv_template[] = {
184         {
185                 .plaintext = "abc",
186                 .psize  = 3,
187                 .digest = { 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 0xba, 0x3e,
188                             0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 0x9c, 0xd0, 0xd8, 0x9d },
189         }, {
190                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
191                 .psize  = 56,
192                 .digest = { 0x84, 0x98, 0x3e, 0x44, 0x1c, 0x3b, 0xd2, 0x6e, 0xba, 0xae,
193                             0x4a, 0xa1, 0xf9, 0x51, 0x29, 0xe5, 0xe5, 0x46, 0x70, 0xf1 },
194                 .np     = 2,
195                 .tap    = { 28, 28 }
196         }
197 };
198
199
200 /*
201  * SHA224 test vectors from from FIPS PUB 180-2
202  */
203 #define SHA224_TEST_VECTORS     2
204
205 static struct hash_testvec sha224_tv_template[] = {
206         {
207                 .plaintext = "abc",
208                 .psize  = 3,
209                 .digest = { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22,
210                         0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3,
211                         0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7,
212                         0xE3, 0x6C, 0x9D, 0xA7},
213         }, {
214                 .plaintext =
215                 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
216                 .psize  = 56,
217                 .digest = { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC,
218                         0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50,
219                         0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19,
220                         0x52, 0x52, 0x25, 0x25 },
221                 .np     = 2,
222                 .tap    = { 28, 28 }
223         }
224 };
225
226 /*
227  * SHA256 test vectors from from NIST
228  */
229 #define SHA256_TEST_VECTORS     2
230
231 static struct hash_testvec sha256_tv_template[] = {
232         {
233                 .plaintext = "abc",
234                 .psize  = 3,
235                 .digest = { 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea,
236                             0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,
237                             0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c,
238                             0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad },
239         }, {
240                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
241                 .psize  = 56,
242                 .digest = { 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8,
243                             0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39,
244                             0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67,
245                             0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 },
246                 .np     = 2,
247                 .tap    = { 28, 28 }
248         },
249 };
250
251 /*
252  * SHA384 test vectors from from NIST and kerneli
253  */
254 #define SHA384_TEST_VECTORS     4
255
256 static struct hash_testvec sha384_tv_template[] = {
257         {
258                 .plaintext= "abc",
259                 .psize  = 3,
260                 .digest = { 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
261                             0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
262                             0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
263                             0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
264                             0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
265                             0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 },
266         }, {
267                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
268                 .psize  = 56,
269                 .digest = { 0x33, 0x91, 0xfd, 0xdd, 0xfc, 0x8d, 0xc7, 0x39,
270                             0x37, 0x07, 0xa6, 0x5b, 0x1b, 0x47, 0x09, 0x39,
271                             0x7c, 0xf8, 0xb1, 0xd1, 0x62, 0xaf, 0x05, 0xab,
272                             0xfe, 0x8f, 0x45, 0x0d, 0xe5, 0xf3, 0x6b, 0xc6,
273                             0xb0, 0x45, 0x5a, 0x85, 0x20, 0xbc, 0x4e, 0x6f,
274                             0x5f, 0xe9, 0x5b, 0x1f, 0xe3, 0xc8, 0x45, 0x2b},
275         }, {
276                 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
277                              "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
278                 .psize  = 112,
279                 .digest = { 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
280                             0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
281                             0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
282                             0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
283                             0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
284                             0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39  },
285         }, {
286                 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
287                              "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
288                 .psize  = 104,
289                 .digest = { 0x3d, 0x20, 0x89, 0x73, 0xab, 0x35, 0x08, 0xdb,
290                             0xbd, 0x7e, 0x2c, 0x28, 0x62, 0xba, 0x29, 0x0a,
291                             0xd3, 0x01, 0x0e, 0x49, 0x78, 0xc1, 0x98, 0xdc,
292                             0x4d, 0x8f, 0xd0, 0x14, 0xe5, 0x82, 0x82, 0x3a,
293                             0x89, 0xe1, 0x6f, 0x9b, 0x2a, 0x7b, 0xbc, 0x1a,
294                             0xc9, 0x38, 0xe2, 0xd1, 0x99, 0xe8, 0xbe, 0xa4 },
295                 .np     = 4,
296                 .tap    = { 26, 26, 26, 26 }
297         },
298 };
299
300 /*
301  * SHA512 test vectors from from NIST and kerneli
302  */
303 #define SHA512_TEST_VECTORS     4
304
305 static struct hash_testvec sha512_tv_template[] = {
306         {
307                 .plaintext = "abc",
308                 .psize  = 3,
309                 .digest = { 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
310                             0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
311                             0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
312                             0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
313                             0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
314                             0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
315                             0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
316                             0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f },
317         }, {
318                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
319                 .psize  = 56,
320                 .digest = { 0x20, 0x4a, 0x8f, 0xc6, 0xdd, 0xa8, 0x2f, 0x0a,
321                             0x0c, 0xed, 0x7b, 0xeb, 0x8e, 0x08, 0xa4, 0x16,
322                             0x57, 0xc1, 0x6e, 0xf4, 0x68, 0xb2, 0x28, 0xa8,
323                             0x27, 0x9b, 0xe3, 0x31, 0xa7, 0x03, 0xc3, 0x35,
324                             0x96, 0xfd, 0x15, 0xc1, 0x3b, 0x1b, 0x07, 0xf9,
325                             0xaa, 0x1d, 0x3b, 0xea, 0x57, 0x78, 0x9c, 0xa0,
326                             0x31, 0xad, 0x85, 0xc7, 0xa7, 0x1d, 0xd7, 0x03,
327                             0x54, 0xec, 0x63, 0x12, 0x38, 0xca, 0x34, 0x45 },
328         }, {
329                 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
330                              "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
331                 .psize  = 112,
332                 .digest = { 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
333                             0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
334                             0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
335                             0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
336                             0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
337                             0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
338                             0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
339                             0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 },
340         }, {
341                 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
342                              "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
343                 .psize  = 104,
344                 .digest = { 0x93, 0x0d, 0x0c, 0xef, 0xcb, 0x30, 0xff, 0x11,
345                             0x33, 0xb6, 0x89, 0x81, 0x21, 0xf1, 0xcf, 0x3d,
346                             0x27, 0x57, 0x8a, 0xfc, 0xaf, 0xe8, 0x67, 0x7c,
347                             0x52, 0x57, 0xcf, 0x06, 0x99, 0x11, 0xf7, 0x5d,
348                             0x8f, 0x58, 0x31, 0xb5, 0x6e, 0xbf, 0xda, 0x67,
349                             0xb2, 0x78, 0xe6, 0x6d, 0xff, 0x8b, 0x84, 0xfe,
350                             0x2b, 0x28, 0x70, 0xf7, 0x42, 0xa5, 0x80, 0xd8,
351                             0xed, 0xb4, 0x19, 0x87, 0x23, 0x28, 0x50, 0xc9 },
352                 .np     = 4,
353                 .tap    = { 26, 26, 26, 26 }
354         },
355 };
356
357
358 /*
359  * WHIRLPOOL test vectors from Whirlpool package
360  * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
361  * submission
362  */
363 #define WP512_TEST_VECTORS      8
364
365 static struct hash_testvec wp512_tv_template[] = {
366         {
367                 .plaintext = "",
368                 .psize  = 0,
369                 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
370                             0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
371                             0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
372                             0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
373                             0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
374                             0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57,
375                             0xEA, 0x89, 0x64, 0xE5, 0x9B, 0x63, 0xD9, 0x37,
376                             0x08, 0xB1, 0x38, 0xCC, 0x42, 0xA6, 0x6E, 0xB3 },
377
378
379         }, {
380                 .plaintext = "a",
381                 .psize  = 1,
382                 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
383                             0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
384                             0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
385                             0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
386                             0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
387                             0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59,
388                             0x1A, 0x92, 0x20, 0x0D, 0x56, 0x01, 0x95, 0xE5,
389                             0x3B, 0x47, 0x85, 0x84, 0xFD, 0xAE, 0x23, 0x1A },
390         }, {
391                 .plaintext = "abc",
392                 .psize  = 3,
393                 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
394                             0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
395                             0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
396                             0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
397                             0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
398                             0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6,
399                             0xC7, 0x97, 0xFC, 0x9D, 0x95, 0xD8, 0xB5, 0x82,
400                             0xD2, 0x25, 0x29, 0x20, 0x76, 0xD4, 0xEE, 0xF5 },
401         }, {
402                 .plaintext = "message digest",
403                 .psize  = 14,
404                 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
405                             0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
406                             0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
407                             0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
408                             0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
409                             0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6,
410                             0x92, 0xED, 0x92, 0x00, 0x52, 0x83, 0x8F, 0x33,
411                             0x62, 0xE8, 0x6D, 0xBD, 0x37, 0xA8, 0x90, 0x3E },
412         }, {
413                 .plaintext = "abcdefghijklmnopqrstuvwxyz",
414                 .psize  = 26,
415                 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
416                             0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
417                             0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
418                             0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
419                             0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
420                             0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6,
421                             0xF6, 0x8F, 0x67, 0x3E, 0x72, 0x07, 0x86, 0x5D,
422                             0x5D, 0x98, 0x19, 0xA3, 0xDB, 0xA4, 0xEB, 0x3B },
423         }, {
424                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
425                              "abcdefghijklmnopqrstuvwxyz0123456789",
426                 .psize  = 62,
427                 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
428                             0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
429                             0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
430                             0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
431                             0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
432                             0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6,
433                             0x55, 0x17, 0xCC, 0x87, 0x9D, 0x7B, 0x96, 0x21,
434                             0x42, 0xC6, 0x5F, 0x5A, 0x7A, 0xF0, 0x14, 0x67 },
435         }, {
436                 .plaintext = "1234567890123456789012345678901234567890"
437                              "1234567890123456789012345678901234567890",
438                 .psize  = 80,
439                 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
440                             0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
441                             0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
442                             0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
443                             0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
444                             0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A,
445                             0x2C, 0x60, 0x48, 0x1E, 0x88, 0xC5, 0xA2, 0x0B,
446                             0x2C, 0x2A, 0x80, 0xCF, 0x3A, 0x9A, 0x08, 0x3B },
447         }, {
448                 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
449                 .psize  = 32,
450                 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
451                             0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
452                             0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
453                             0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
454                             0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
455                             0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56,
456                             0x93, 0x9B, 0xAA, 0xA0, 0xAD, 0xFF, 0x9A, 0xE6,
457                             0x74, 0x5B, 0x7B, 0x18, 0x1C, 0x3B, 0xE3, 0xFD },
458         },
459 };
460
461 #define WP384_TEST_VECTORS      8
462
463 static struct hash_testvec wp384_tv_template[] = {
464         {
465                 .plaintext = "",
466                 .psize  = 0,
467                 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
468                             0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
469                             0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
470                             0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7,
471                             0x3E, 0x83, 0xBE, 0x69, 0x8B, 0x28, 0x8F, 0xEB,
472                             0xCF, 0x88, 0xE3, 0xE0, 0x3C, 0x4F, 0x07, 0x57 },
473
474
475         }, {
476                 .plaintext = "a",
477                 .psize  = 1,
478                 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
479                             0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
480                             0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
481                             0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42,
482                             0xD1, 0x1B, 0xC6, 0x45, 0x41, 0x3A, 0xEF, 0xF6,
483                             0x3A, 0x42, 0x39, 0x1A, 0x39, 0x14, 0x5A, 0x59 },
484         }, {
485                 .plaintext = "abc",
486                 .psize  = 3,
487                 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
488                             0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
489                             0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
490                             0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C,
491                             0x71, 0x81, 0xEE, 0xBD, 0xB6, 0xC5, 0x7E, 0x27,
492                             0x7D, 0x0E, 0x34, 0x95, 0x71, 0x14, 0xCB, 0xD6 },
493         }, {
494                 .plaintext = "message digest",
495                 .psize  = 14,
496                 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
497                             0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
498                             0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
499                             0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B,
500                             0x84, 0x21, 0x55, 0x76, 0x59, 0xEF, 0x55, 0xC1,
501                             0x06, 0xB4, 0xB5, 0x2A, 0xC5, 0xA4, 0xAA, 0xA6 },
502         }, {
503                 .plaintext = "abcdefghijklmnopqrstuvwxyz",
504                 .psize  = 26,
505                 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
506                             0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
507                             0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
508                             0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B,
509                             0x08, 0xBF, 0x2A, 0x92, 0x51, 0xC3, 0x0B, 0x6A,
510                             0x0B, 0x8A, 0xAE, 0x86, 0x17, 0x7A, 0xB4, 0xA6 },
511         }, {
512                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
513                              "abcdefghijklmnopqrstuvwxyz0123456789",
514                 .psize  = 62,
515                 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
516                             0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
517                             0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
518                             0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E,
519                             0x08, 0xEB, 0xA2, 0x66, 0x29, 0x12, 0x9D, 0x8F,
520                             0xB7, 0xCB, 0x57, 0x21, 0x1B, 0x92, 0x81, 0xA6 },
521         }, {
522                 .plaintext = "1234567890123456789012345678901234567890"
523                              "1234567890123456789012345678901234567890",
524                 .psize  = 80,
525                 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
526                             0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
527                             0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
528                             0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29,
529                             0x4D, 0x5B, 0xD8, 0xDF, 0x2A, 0x6C, 0x44, 0xE5,
530                             0x38, 0xCD, 0x04, 0x7B, 0x26, 0x81, 0xA5, 0x1A },
531         }, {
532                 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
533                 .psize  = 32,
534                 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
535                             0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
536                             0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
537                             0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69,
538                             0x16, 0xBD, 0xC8, 0x03, 0x1B, 0xC5, 0xBE, 0x1B,
539                             0x7B, 0x94, 0x76, 0x39, 0xFE, 0x05, 0x0B, 0x56 },
540         },
541 };
542
543 #define WP256_TEST_VECTORS      8
544
545 static struct hash_testvec wp256_tv_template[] = {
546         {
547                 .plaintext = "",
548                 .psize  = 0,
549                 .digest = { 0x19, 0xFA, 0x61, 0xD7, 0x55, 0x22, 0xA4, 0x66,
550                             0x9B, 0x44, 0xE3, 0x9C, 0x1D, 0x2E, 0x17, 0x26,
551                             0xC5, 0x30, 0x23, 0x21, 0x30, 0xD4, 0x07, 0xF8,
552                             0x9A, 0xFE, 0xE0, 0x96, 0x49, 0x97, 0xF7, 0xA7 },
553
554
555         }, {
556                 .plaintext = "a",
557                 .psize  = 1,
558                 .digest = { 0x8A, 0xCA, 0x26, 0x02, 0x79, 0x2A, 0xEC, 0x6F,
559                             0x11, 0xA6, 0x72, 0x06, 0x53, 0x1F, 0xB7, 0xD7,
560                             0xF0, 0xDF, 0xF5, 0x94, 0x13, 0x14, 0x5E, 0x69,
561                             0x73, 0xC4, 0x50, 0x01, 0xD0, 0x08, 0x7B, 0x42 },
562         }, {
563                 .plaintext = "abc",
564                 .psize  = 3,
565                 .digest = { 0x4E, 0x24, 0x48, 0xA4, 0xC6, 0xF4, 0x86, 0xBB,
566                             0x16, 0xB6, 0x56, 0x2C, 0x73, 0xB4, 0x02, 0x0B,
567                             0xF3, 0x04, 0x3E, 0x3A, 0x73, 0x1B, 0xCE, 0x72,
568                             0x1A, 0xE1, 0xB3, 0x03, 0xD9, 0x7E, 0x6D, 0x4C },
569         }, {
570                 .plaintext = "message digest",
571                 .psize  = 14,
572                 .digest = { 0x37, 0x8C, 0x84, 0xA4, 0x12, 0x6E, 0x2D, 0xC6,
573                             0xE5, 0x6D, 0xCC, 0x74, 0x58, 0x37, 0x7A, 0xAC,
574                             0x83, 0x8D, 0x00, 0x03, 0x22, 0x30, 0xF5, 0x3C,
575                             0xE1, 0xF5, 0x70, 0x0C, 0x0F, 0xFB, 0x4D, 0x3B },
576         }, {
577                 .plaintext = "abcdefghijklmnopqrstuvwxyz",
578                 .psize  = 26,
579                 .digest = { 0xF1, 0xD7, 0x54, 0x66, 0x26, 0x36, 0xFF, 0xE9,
580                             0x2C, 0x82, 0xEB, 0xB9, 0x21, 0x2A, 0x48, 0x4A,
581                             0x8D, 0x38, 0x63, 0x1E, 0xAD, 0x42, 0x38, 0xF5,
582                             0x44, 0x2E, 0xE1, 0x3B, 0x80, 0x54, 0xE4, 0x1B },
583         }, {
584                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
585                              "abcdefghijklmnopqrstuvwxyz0123456789",
586                 .psize  = 62,
587                 .digest = { 0xDC, 0x37, 0xE0, 0x08, 0xCF, 0x9E, 0xE6, 0x9B,
588                             0xF1, 0x1F, 0x00, 0xED, 0x9A, 0xBA, 0x26, 0x90,
589                             0x1D, 0xD7, 0xC2, 0x8C, 0xDE, 0xC0, 0x66, 0xCC,
590                             0x6A, 0xF4, 0x2E, 0x40, 0xF8, 0x2F, 0x3A, 0x1E },
591         }, {
592                 .plaintext = "1234567890123456789012345678901234567890"
593                              "1234567890123456789012345678901234567890",
594                 .psize  = 80,
595                 .digest = { 0x46, 0x6E, 0xF1, 0x8B, 0xAB, 0xB0, 0x15, 0x4D,
596                             0x25, 0xB9, 0xD3, 0x8A, 0x64, 0x14, 0xF5, 0xC0,
597                             0x87, 0x84, 0x37, 0x2B, 0xCC, 0xB2, 0x04, 0xD6,
598                             0x54, 0x9C, 0x4A, 0xFA, 0xDB, 0x60, 0x14, 0x29 },
599         }, {
600                 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
601                 .psize  = 32,
602                 .digest = { 0x2A, 0x98, 0x7E, 0xA4, 0x0F, 0x91, 0x70, 0x61,
603                             0xF5, 0xD6, 0xF0, 0xA0, 0xE4, 0x64, 0x4F, 0x48,
604                             0x8A, 0x7A, 0x5A, 0x52, 0xDE, 0xEE, 0x65, 0x62,
605                             0x07, 0xC5, 0x62, 0xF9, 0x88, 0xE9, 0x5C, 0x69 },
606         },
607 };
608
609 /*
610  * TIGER test vectors from Tiger website
611  */
612 #define TGR192_TEST_VECTORS     6
613
614 static struct hash_testvec tgr192_tv_template[] = {
615         {
616                 .plaintext = "",
617                 .psize  = 0,
618                 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
619                             0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
620                             0xf3, 0x73, 0xde, 0x2d, 0x49, 0x58, 0x4e, 0x7a },
621         }, {
622                 .plaintext = "abc",
623                 .psize  = 3,
624                 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
625                             0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
626                             0x93, 0x5f, 0x7b, 0x95, 0x1c, 0x13, 0x29, 0x51 },
627         }, {
628                 .plaintext = "Tiger",
629                 .psize  = 5,
630                 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
631                             0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
632                             0x37, 0x79, 0x0c, 0x11, 0x6f, 0x9d, 0x2b, 0xdf },
633         }, {
634                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
635                 .psize  = 64,
636                 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
637                             0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
638                             0xb5, 0x86, 0x44, 0x50, 0x34, 0xa5, 0xa3, 0x86 },
639         }, {
640                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
641                 .psize  = 64,
642                 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
643                             0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
644                             0x57, 0x89, 0x65, 0x65, 0x97, 0x5f, 0x91, 0x97 },
645         }, {
646                 .plaintext = "Tiger - A Fast New Hash Function, "
647                              "by Ross Anderson and Eli Biham, "
648                              "proceedings of Fast Software Encryption 3, "
649                              "Cambridge, 1996.",
650                 .psize  = 125,
651                 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
652                             0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
653                             0xdd, 0x68, 0x15, 0x1d, 0x50, 0x39, 0x74, 0xfc },
654         },
655 };
656
657 #define TGR160_TEST_VECTORS     6
658
659 static struct hash_testvec tgr160_tv_template[] = {
660         {
661                 .plaintext = "",
662                 .psize  = 0,
663                 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
664                             0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f,
665                             0xf3, 0x73, 0xde, 0x2d },
666         }, {
667                 .plaintext = "abc",
668                 .psize  = 3,
669                 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
670                             0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf,
671                             0x93, 0x5f, 0x7b, 0x95 },
672         }, {
673                 .plaintext = "Tiger",
674                 .psize  = 5,
675                 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
676                             0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec,
677                             0x37, 0x79, 0x0c, 0x11 },
678         }, {
679                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
680                 .psize  = 64,
681                 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
682                             0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e,
683                             0xb5, 0x86, 0x44, 0x50 },
684         }, {
685                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
686                 .psize  = 64,
687                 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
688                             0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9,
689                             0x57, 0x89, 0x65, 0x65 },
690         }, {
691                 .plaintext = "Tiger - A Fast New Hash Function, "
692                              "by Ross Anderson and Eli Biham, "
693                              "proceedings of Fast Software Encryption 3, "
694                              "Cambridge, 1996.",
695                 .psize  = 125,
696                 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
697                             0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24,
698                             0xdd, 0x68, 0x15, 0x1d },
699         },
700 };
701
702 #define TGR128_TEST_VECTORS     6
703
704 static struct hash_testvec tgr128_tv_template[] = {
705         {
706                 .plaintext = "",
707                 .psize  = 0,
708                 .digest = { 0x24, 0xf0, 0x13, 0x0c, 0x63, 0xac, 0x93, 0x32,
709                             0x16, 0x16, 0x6e, 0x76, 0xb1, 0xbb, 0x92, 0x5f },
710         }, {
711                 .plaintext = "abc",
712                 .psize  = 3,
713                 .digest = { 0xf2, 0x58, 0xc1, 0xe8, 0x84, 0x14, 0xab, 0x2a,
714                             0x52, 0x7a, 0xb5, 0x41, 0xff, 0xc5, 0xb8, 0xbf },
715         }, {
716                 .plaintext = "Tiger",
717                 .psize  = 5,
718                 .digest = { 0x9f, 0x00, 0xf5, 0x99, 0x07, 0x23, 0x00, 0xdd,
719                             0x27, 0x6a, 0xbb, 0x38, 0xc8, 0xeb, 0x6d, 0xec },
720         }, {
721                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
722                 .psize  = 64,
723                 .digest = { 0x87, 0xfb, 0x2a, 0x90, 0x83, 0x85, 0x1c, 0xf7,
724                             0x47, 0x0d, 0x2c, 0xf8, 0x10, 0xe6, 0xdf, 0x9e },
725         }, {
726                 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
727                 .psize  = 64,
728                 .digest = { 0x46, 0x7d, 0xb8, 0x08, 0x63, 0xeb, 0xce, 0x48,
729                             0x8d, 0xf1, 0xcd, 0x12, 0x61, 0x65, 0x5d, 0xe9 },
730         }, {
731                 .plaintext = "Tiger - A Fast New Hash Function, "
732                              "by Ross Anderson and Eli Biham, "
733                              "proceedings of Fast Software Encryption 3, "
734                              "Cambridge, 1996.",
735                 .psize  = 125,
736                 .digest = { 0x3d, 0x9a, 0xeb, 0x03, 0xd1, 0xbd, 0x1a, 0x63,
737                             0x57, 0xb2, 0x77, 0x4d, 0xfd, 0x6d, 0x5b, 0x24 },
738         },
739 };
740
741 /*
742  * HMAC-MD5 test vectors from RFC2202
743  * (These need to be fixed to not use strlen).
744  */
745 #define HMAC_MD5_TEST_VECTORS   7
746
747 static struct hash_testvec hmac_md5_tv_template[] =
748 {
749         {
750                 .key    = { [0 ... 15] =  0x0b },
751                 .ksize  = 16,
752                 .plaintext = "Hi There",
753                 .psize  = 8,
754                 .digest = { 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xbb, 0x1c,
755                             0x13, 0xf4, 0x8e, 0xf8, 0x15, 0x8b, 0xfc, 0x9d },
756         }, {
757                 .key    = { 'J', 'e', 'f', 'e' },
758                 .ksize  = 4,
759                 .plaintext = "what do ya want for nothing?",
760                 .psize  = 28,
761                 .digest = { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03,
762                             0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 },
763                 .np     = 2,
764                 .tap    = {14, 14}
765         }, {
766                 .key    = { [0 ... 15] = 0xaa },
767                 .ksize  = 16,
768                 .plaintext = { [0 ... 49] =  0xdd },
769                 .psize  = 50,
770                 .digest = { 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88,
771                             0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 },
772         }, {
773                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
774                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
775                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, },
776                 .ksize  = 25,
777                 .plaintext = { [0 ... 49] =  0xcd },
778                 .psize  = 50,
779                 .digest = { 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea,
780                             0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 },
781         }, {
782                 .key    = { [0 ... 15] = 0x0c },
783                 .ksize  = 16,
784                 .plaintext = "Test With Truncation",
785                 .psize  = 20,
786                 .digest = { 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00,
787                             0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c },
788         }, {
789                 .key    = { [0 ... 79] =  0xaa },
790                 .ksize  = 80,
791                 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
792                 .psize  = 54,
793                 .digest = { 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,
794                             0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd },
795         }, {
796                 .key    = { [0 ... 79] =  0xaa },
797                 .ksize  = 80,
798                 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
799                              "Block-Size Data",
800                 .psize  = 73,
801                 .digest = { 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,
802                             0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e },
803         },
804 };
805
806 /*
807  * HMAC-SHA1 test vectors from RFC2202
808  */
809 #define HMAC_SHA1_TEST_VECTORS  7
810
811 static struct hash_testvec hmac_sha1_tv_template[] = {
812         {
813                 .key    = { [0 ... 19] = 0x0b },
814                 .ksize  = 20,
815                 .plaintext = "Hi There",
816                 .psize  = 8,
817                 .digest = { 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64,
818                             0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e, 0xf1,
819                             0x46, 0xbe },
820         }, {
821                 .key    = { 'J', 'e', 'f', 'e' },
822                 .ksize  = 4,
823                 .plaintext = "what do ya want for nothing?",
824                 .psize  = 28,
825                 .digest = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2, 0xd2, 0x74,
826                             0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c, 0x25, 0x9a, 0x7c, 0x79 },
827                 .np     = 2,
828                 .tap    = { 14, 14 }
829         }, {
830                 .key    = { [0 ... 19] = 0xaa },
831                 .ksize  = 20,
832                 .plaintext = { [0 ... 49] = 0xdd },
833                 .psize  = 50,
834                 .digest = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd, 0x91, 0xa3,
835                             0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f, 0x63, 0xf1, 0x75, 0xd3 },
836         }, {
837                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
838                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
839                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 },
840                 .ksize  = 25,
841                 .plaintext = { [0 ... 49] = 0xcd },
842                 .psize  = 50,
843                 .digest = { 0x4c, 0x90, 0x07, 0xf4, 0x02, 0x62, 0x50, 0xc6, 0xbc, 0x84,
844                             0x14, 0xf9, 0xbf, 0x50, 0xc8, 0x6c, 0x2d, 0x72, 0x35, 0xda },
845         }, {
846                 .key    = { [0 ... 19] = 0x0c },
847                 .ksize  = 20,
848                 .plaintext = "Test With Truncation",
849                 .psize  = 20,
850                 .digest = { 0x4c, 0x1a, 0x03, 0x42, 0x4b, 0x55, 0xe0, 0x7f, 0xe7, 0xf2,
851                             0x7b, 0xe1, 0xd5, 0x8b, 0xb9, 0x32, 0x4a, 0x9a, 0x5a, 0x04 },
852         }, {
853                 .key    = { [0 ... 79] = 0xaa },
854                 .ksize  = 80,
855                 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
856                 .psize  = 54,
857                 .digest = { 0xaa, 0x4a, 0xe5, 0xe1, 0x52, 0x72, 0xd0, 0x0e, 0x95, 0x70,
858                             0x56, 0x37, 0xce, 0x8a, 0x3b, 0x55, 0xed, 0x40, 0x21, 0x12 },
859         }, {
860                 .key    = { [0 ... 79] = 0xaa },
861                 .ksize  = 80,
862                 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
863                              "Block-Size Data",
864                 .psize  = 73,
865                 .digest = { 0xe8, 0xe9, 0x9d, 0x0f, 0x45, 0x23, 0x7d, 0x78, 0x6d, 0x6b,
866                             0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91 },
867         },
868 };
869
870
871 /*
872  * SHA224 HMAC test vectors from RFC4231
873  */
874 #define HMAC_SHA224_TEST_VECTORS    4
875
876 static struct hash_testvec hmac_sha224_tv_template[] = {
877         {
878                 .key    = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
879                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
880                         0x0b, 0x0b, 0x0b, 0x0b },
881                 .ksize  = 20,
882                 /*  ("Hi There") */
883                 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 },
884                 .psize  = 8,
885                 .digest = { 0x89, 0x6f, 0xb1, 0x12, 0x8a, 0xbb, 0xdf, 0x19,
886                         0x68, 0x32, 0x10, 0x7c, 0xd4, 0x9d, 0xf3, 0x3f,
887                         0x47, 0xb4, 0xb1, 0x16, 0x99, 0x12, 0xba, 0x4f,
888                         0x53, 0x68, 0x4b, 0x22},
889         }, {
890                 .key    = { 0x4a, 0x65, 0x66, 0x65 }, /* ("Jefe") */
891                 .ksize  = 4,
892                 /* ("what do ya want for nothing?") */
893                 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
894                         0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20,
895                         0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
896                         0x69, 0x6e, 0x67, 0x3f },
897                 .psize  = 28,
898                 .digest = { 0xa3, 0x0e, 0x01, 0x09, 0x8b, 0xc6, 0xdb, 0xbf,
899                         0x45, 0x69, 0x0f, 0x3a, 0x7e, 0x9e, 0x6d, 0x0f,
900                         0x8b, 0xbe, 0xa2, 0xa3, 0x9e, 0x61, 0x48, 0x00,
901                         0x8f, 0xd0, 0x5e, 0x44 },
902                 .np = 4,
903                 .tap    = { 7, 7, 7, 7 }
904         }, {
905                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
906                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
907                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
908                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
909                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
910                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
911                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
912                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
913                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
914                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
915                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
916                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
917                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
918                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
919                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
920                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
921                         0xaa, 0xaa, 0xaa },
922                 .ksize  = 131,
923                 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
924                 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
925                         0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65,
926                         0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
927                         0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a,
928                         0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
929                         0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79,
930                         0x20, 0x46, 0x69, 0x72, 0x73, 0x74 },
931                 .psize  = 54,
932                 .digest = { 0x95, 0xe9, 0xa0, 0xdb, 0x96, 0x20, 0x95, 0xad,
933                         0xae, 0xbe, 0x9b, 0x2d, 0x6f, 0x0d, 0xbc, 0xe2,
934                         0xd4, 0x99, 0xf1, 0x12, 0xf2, 0xd2, 0xb7, 0x27,
935                         0x3f, 0xa6, 0x87, 0x0e },
936         }, {
937                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
938                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
939                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
940                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
941                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
942                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
943                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
944                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
945                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
946                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
947                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
948                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
949                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
950                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
951                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
952                         0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
953                         0xaa, 0xaa, 0xaa },
954                 .ksize  = 131,
955                 /* ("This is a test using a larger than block-size key and a")
956                 (" larger than block-size data. The key needs to be")
957                         (" hashed before being used by the HMAC algorithm.") */
958                 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
959                         0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75,
960                         0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
961                         0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68,
962                         0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
963                         0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65,
964                         0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
965                         0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74,
966                         0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
967                         0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64,
968                         0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
969                         0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65,
970                         0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
971                         0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20,
972                         0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
973                         0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65,
974                         0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
975                         0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c,
976                         0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e },
977                 .psize  = 152,
978                 .digest = { 0x3a, 0x85, 0x41, 0x66, 0xac, 0x5d, 0x9f, 0x02,
979                         0x3f, 0x54, 0xd5, 0x17, 0xd0, 0xb3, 0x9d, 0xbd,
980                         0x94, 0x67, 0x70, 0xdb, 0x9c, 0x2b, 0x95, 0xc9,
981                         0xf6, 0xf5, 0x65, 0xd1 },
982         },
983 };
984
985 /*
986  * HMAC-SHA256 test vectors from
987  * draft-ietf-ipsec-ciph-sha-256-01.txt
988  */
989 #define HMAC_SHA256_TEST_VECTORS        10
990
991 static struct hash_testvec hmac_sha256_tv_template[] = {
992         {
993                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
994                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
995                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
996                             0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20},
997                 .ksize  = 32,
998                 .plaintext = "abc",
999                 .psize  = 3,
1000                 .digest = { 0xa2, 0x1b, 0x1f, 0x5d, 0x4c, 0xf4, 0xf7, 0x3a,
1001                             0x4d, 0xd9, 0x39, 0x75, 0x0f, 0x7a, 0x06, 0x6a,
1002                             0x7f, 0x98, 0xcc, 0x13, 0x1c, 0xb1, 0x6a, 0x66,
1003                             0x92, 0x75, 0x90, 0x21, 0xcf, 0xab, 0x81, 0x81 },
1004         }, {
1005                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1006                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1007                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1008                             0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
1009                 .ksize  = 32,
1010                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1011                 .psize  = 56,
1012                 .digest = { 0x10, 0x4f, 0xdc, 0x12, 0x57, 0x32, 0x8f, 0x08,
1013                             0x18, 0x4b, 0xa7, 0x31, 0x31, 0xc5, 0x3c, 0xae,
1014                             0xe6, 0x98, 0xe3, 0x61, 0x19, 0x42, 0x11, 0x49,
1015                             0xea, 0x8c, 0x71, 0x24, 0x56, 0x69, 0x7d, 0x30 },
1016         }, {
1017                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1018                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1019                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1020                             0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20 },
1021                 .ksize  = 32,
1022                 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1023                              "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1024                 .psize  = 112,
1025                 .digest = { 0x47, 0x03, 0x05, 0xfc, 0x7e, 0x40, 0xfe, 0x34,
1026                             0xd3, 0xee, 0xb3, 0xe7, 0x73, 0xd9, 0x5a, 0xab,
1027                             0x73, 0xac, 0xf0, 0xfd, 0x06, 0x04, 0x47, 0xa5,
1028                             0xeb, 0x45, 0x95, 0xbf, 0x33, 0xa9, 0xd1, 0xa3 },
1029         }, {
1030                 .key    = { [0 ... 31] = 0x0b },
1031                 .ksize  = 32,
1032                 .plaintext = "Hi There",
1033                 .psize  = 8,
1034                 .digest = { 0x19, 0x8a, 0x60, 0x7e, 0xb4, 0x4b, 0xfb, 0xc6,
1035                             0x99, 0x03, 0xa0, 0xf1, 0xcf, 0x2b, 0xbd, 0xc5,
1036                             0xba, 0x0a, 0xa3, 0xf3, 0xd9, 0xae, 0x3c, 0x1c,
1037                             0x7a, 0x3b, 0x16, 0x96, 0xa0, 0xb6, 0x8c, 0xf7 },
1038         }, {
1039                 .key    = "Jefe",
1040                 .ksize  = 4,
1041                 .plaintext = "what do ya want for nothing?",
1042                 .psize  = 28,
1043                 .digest = { 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
1044                             0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
1045                             0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
1046                             0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43 },
1047                 .np     = 2,
1048                 .tap    = { 14, 14 }
1049         }, {
1050                 .key    = { [0 ... 31] = 0xaa },
1051                 .ksize  = 32,
1052                 .plaintext = { [0 ... 49] = 0xdd },
1053                 .psize  = 50,
1054                 .digest = { 0xcd, 0xcb, 0x12, 0x20, 0xd1, 0xec, 0xcc, 0xea,
1055                             0x91, 0xe5, 0x3a, 0xba, 0x30, 0x92, 0xf9, 0x62,
1056                             0xe5, 0x49, 0xfe, 0x6c, 0xe9, 0xed, 0x7f, 0xdc,
1057                             0x43, 0x19, 0x1f, 0xbd, 0xe4, 0x5c, 0x30, 0xb0 },
1058         }, {
1059                 .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
1060                             0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
1061                             0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1062                             0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
1063                             0x21, 0x22, 0x23, 0x24, 0x25 },
1064                 .ksize  = 37,
1065                 .plaintext = { [0 ... 49] = 0xcd },
1066                 .psize  = 50,
1067                 .digest = { 0xd4, 0x63, 0x3c, 0x17, 0xf6, 0xfb, 0x8d, 0x74,
1068                             0x4c, 0x66, 0xde, 0xe0, 0xf8, 0xf0, 0x74, 0x55,
1069                             0x6e, 0xc4, 0xaf, 0x55, 0xef, 0x07, 0x99, 0x85,
1070                             0x41, 0x46, 0x8e, 0xb4, 0x9b, 0xd2, 0xe9, 0x17 },
1071         }, {
1072                 .key    = { [0 ... 31] = 0x0c },
1073                 .ksize  = 32,
1074                 .plaintext = "Test With Truncation",
1075                 .psize  = 20,
1076                 .digest = { 0x75, 0x46, 0xaf, 0x01, 0x84, 0x1f, 0xc0, 0x9b,
1077                             0x1a, 0xb9, 0xc3, 0x74, 0x9a, 0x5f, 0x1c, 0x17,
1078                             0xd4, 0xf5, 0x89, 0x66, 0x8a, 0x58, 0x7b, 0x27,
1079                             0x00, 0xa9, 0xc9, 0x7c, 0x11, 0x93, 0xcf, 0x42 },
1080         }, {
1081                 .key    = { [0 ... 79] = 0xaa },
1082                 .ksize  = 80,
1083                 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1084                 .psize  = 54,
1085                 .digest = { 0x69, 0x53, 0x02, 0x5e, 0xd9, 0x6f, 0x0c, 0x09,
1086                             0xf8, 0x0a, 0x96, 0xf7, 0x8e, 0x65, 0x38, 0xdb,
1087                             0xe2, 0xe7, 0xb8, 0x20, 0xe3, 0xdd, 0x97, 0x0e,
1088                             0x7d, 0xdd, 0x39, 0x09, 0x1b, 0x32, 0x35, 0x2f },
1089         }, {
1090                 .key    = { [0 ... 79] = 0xaa },
1091                 .ksize  = 80,
1092                 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1093                              "One Block-Size Data",
1094                 .psize  = 73,
1095                 .digest = { 0x63, 0x55, 0xac, 0x22, 0xe8, 0x90, 0xd0, 0xa3,
1096                             0xc8, 0x48, 0x1a, 0x5c, 0xa4, 0x82, 0x5b, 0xc8,
1097                             0x84, 0xd3, 0xe7, 0xa1, 0xff, 0x98, 0xa2, 0xfc,
1098                             0x2a, 0xc7, 0xd8, 0xe0, 0x64, 0xc3, 0xb2, 0xe6 },
1099         },
1100 };
1101
1102 #define XCBC_AES_TEST_VECTORS 6
1103
1104 static struct hash_testvec aes_xcbc128_tv_template[] = {
1105         {
1106                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1107                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1108                 .plaintext = { [0 ... 15] = 0 },
1109                 .digest = { 0x75, 0xf0, 0x25, 0x1d, 0x52, 0x8a, 0xc0, 0x1c,
1110                             0x45, 0x73, 0xdf, 0xd5, 0x84, 0xd7, 0x9f, 0x29 },
1111                 .psize  = 0,
1112                 .ksize  = 16,
1113         }, {
1114                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1115                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1116                 .plaintext = { 0x00, 0x01, 0x02 },
1117                 .digest = { 0x5b, 0x37, 0x65, 0x80, 0xae, 0x2f, 0x19, 0xaf,
1118                             0xe7, 0x21, 0x9c, 0xee, 0xf1, 0x72, 0x75, 0x6f },
1119                 .psize  = 3,
1120                 .ksize  = 16,
1121         } , {
1122                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1123                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1124                 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1125                                0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1126                 .digest = { 0xd2, 0xa2, 0x46, 0xfa, 0x34, 0x9b, 0x68, 0xa7,
1127                             0x99, 0x98, 0xa4, 0x39, 0x4f, 0xf7, 0xa2, 0x63 },
1128                 .psize  = 16,
1129                 .ksize  = 16,
1130         }, {
1131                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1132                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1133                 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1134                                0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1135                                0x10, 0x11, 0x12, 0x13 },
1136                 .digest = { 0x47, 0xf5, 0x1b, 0x45, 0x64, 0x96, 0x62, 0x15,
1137                             0xb8, 0x98, 0x5c, 0x63, 0x05, 0x5e, 0xd3, 0x08 },
1138                 .tap    = { 10, 10 },
1139                 .psize  = 20,
1140                 .np     = 2,
1141                 .ksize  = 16,
1142         }, {
1143                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1144                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1145                 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1146                                0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1147                                0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1148                                0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
1149                 .digest = { 0xf5, 0x4f, 0x0e, 0xc8, 0xd2, 0xb9, 0xf3, 0xd3,
1150                             0x68, 0x07, 0x73, 0x4b, 0xd5, 0x28, 0x3f, 0xd4 },
1151                 .psize  = 32,
1152                 .ksize  = 16,
1153         }, {
1154                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1155                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
1156                 .plaintext = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1157                                0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1158                                0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1159                                0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1160                                0x20, 0x21 },
1161                 .digest = { 0xbe, 0xcb, 0xb3, 0xbc, 0xcd, 0xb5, 0x18, 0xa3,
1162                             0x06, 0x77, 0xd5, 0x48, 0x1f, 0xb6, 0xb4, 0xd8 },
1163                 .tap    = { 17, 17 },
1164                 .psize  = 34,
1165                 .np     = 2,
1166                 .ksize  = 16,
1167         }
1168 };
1169
1170 /*
1171  * SHA384 HMAC test vectors from RFC4231
1172  */
1173
1174 #define HMAC_SHA384_TEST_VECTORS        4
1175
1176 static struct hash_testvec hmac_sha384_tv_template[] = {
1177         {
1178                 .key    = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1179                             0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1180                             0x0b, 0x0b, 0x0b, 0x0b }, // (20 bytes)
1181                 .ksize  = 20,
1182                 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }, // ("Hi There")
1183                 .psize  = 8,
1184                 .digest = { 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62,
1185                             0x6b, 0x08, 0x25, 0xf4, 0xab, 0x46, 0x90, 0x7f,
1186                             0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6,
1187                             0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c,
1188                             0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f,
1189                             0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6 },
1190         }, {
1191                 .key    = { 0x4a, 0x65, 0x66, 0x65 }, // ("Jefe")
1192                 .ksize  = 4,
1193                 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
1194                                0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, // ("what do ya want ")
1195                                0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
1196                                0x69, 0x6e, 0x67, 0x3f }, // ("for nothing?")
1197                 .psize  = 28,
1198                 .digest = { 0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
1199                             0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
1200                             0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
1201                             0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
1202                             0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
1203                             0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49 },
1204                 .np     = 4,
1205                 .tap    = { 7, 7, 7, 7 }
1206         }, {
1207                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1208                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1209                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1210                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1211                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1212                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1213                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1214                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1215                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1216                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1217                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1218                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1219                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1220                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1221                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1222                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1223                             0xaa, 0xaa, 0xaa }, // (131 bytes)
1224                 .ksize  = 131,
1225                 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
1226                                0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, // ("Test Using Large")
1227                                0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
1228                                0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, // ("r Than Block-Siz")
1229                                0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
1230                                0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, // ("e Key - Hash Key")
1231                                0x20, 0x46, 0x69, 0x72, 0x73, 0x74 }, // (" First")
1232                 .psize  = 54,
1233                 .digest = { 0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
1234                             0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
1235                             0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
1236                             0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
1237                             0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
1238                             0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52 },
1239         }, {
1240                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1241                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1242                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1243                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1244                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1245                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1246                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1247                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1248                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1249                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1250                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1251                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1252                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1253                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1254                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1255                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1256                             0xaa, 0xaa, 0xaa }, // (131 bytes)
1257                 .ksize  = 131,
1258                 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
1259                                0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75, // ("This is a test u")
1260                                0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
1261                                0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, // ("sing a larger th")
1262                                0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
1263                                0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65, // ("an block-size ke")
1264                                0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
1265                                0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, // ("y and a larger t")
1266                                0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
1267                                0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, // ("han block-size d")
1268                                0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
1269                                0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, // ("ata. The key nee")
1270                                0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
1271                                0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20, // ("ds to be hashed ")
1272                                0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
1273                                0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, // ("before being use")
1274                                0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
1275                                0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c, // ("d by the HMAC al")
1276                                0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e }, // ("gorithm.")
1277                 .psize  = 152,
1278                 .digest = { 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
1279                             0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
1280                             0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
1281                             0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
1282                             0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
1283                             0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e },
1284         },
1285 };
1286
1287 /*
1288  * SHA512 HMAC test vectors from RFC4231
1289  */
1290
1291 #define HMAC_SHA512_TEST_VECTORS        4
1292
1293 static struct hash_testvec hmac_sha512_tv_template[] = {
1294         {
1295                 .key    = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1296                             0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
1297                             0x0b, 0x0b, 0x0b, 0x0b }, // (20 bytes)
1298                 .ksize  = 20,
1299                 .plaintext = { 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65 }, // ("Hi There")
1300                 .psize  = 8,
1301                 .digest = { 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d,
1302                             0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0,
1303                             0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78,
1304                             0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde,
1305                             0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02,
1306                             0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4,
1307                             0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70,
1308                             0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54 },
1309         }, {
1310                 .key    = { 0x4a, 0x65, 0x66, 0x65 }, // ("Jefe")
1311                 .ksize  = 4,
1312                 .plaintext = { 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
1313                                0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, // ("what do ya want ")
1314                                0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
1315                                0x69, 0x6e, 0x67, 0x3f }, // ("for nothing?")
1316                 .psize  = 28,
1317                 .digest = { 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
1318                             0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
1319                             0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
1320                             0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
1321                             0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
1322                             0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
1323                             0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
1324                             0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37 },
1325                 .np     = 4,
1326                 .tap    = { 7, 7, 7, 7 }
1327         }, {
1328                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1329                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1330                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1331                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1332                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1333                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1334                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1335                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1336                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1337                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1338                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1339                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1340                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1341                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1342                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1343                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1344                             0xaa, 0xaa, 0xaa }, // (131 bytes)
1345                 .ksize  = 131,
1346                 .plaintext = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
1347                                0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, // ("Test Using Large")
1348                                0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
1349                                0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a, // ("r Than Block-Siz")
1350                                0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
1351                                0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79, // ("e Key - Hash Key")
1352                                0x20, 0x46, 0x69, 0x72, 0x73, 0x74 }, // (" First")
1353                 .psize  = 54,
1354                 .digest = { 0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
1355                             0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
1356                             0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
1357                             0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
1358                             0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
1359                             0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
1360                             0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
1361                             0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98 },
1362         }, {
1363                 .key    = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1364                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1365                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1366                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1367                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1368                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1369                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1370                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1371                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1372                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1373                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1374                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1375                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1376                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1377                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1378                             0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
1379                             0xaa, 0xaa, 0xaa }, // (131 bytes)
1380                 .ksize  = 131,
1381                 .plaintext = { 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
1382                                0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75, // ("This is a test u")
1383                                0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
1384                                0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, // ("sing a larger th")
1385                                0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
1386                                0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65, // ("an block-size ke")
1387                                0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
1388                                0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, // ("y and a larger t")
1389                                0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
1390                                0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64, // ("han block-size d")
1391                                0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
1392                                0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65, // ("ata. The key nee")
1393                                0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
1394                                0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20, // ("ds to be hashed ")
1395                                0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
1396                                0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, // ("before being use")
1397                                0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
1398                                0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c, // ("d by the HMAC al")
1399                                0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e }, // ("gorithm.")
1400                 .psize  = 152,
1401                 .digest = { 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
1402                             0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
1403                             0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
1404                             0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
1405                             0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
1406                             0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
1407                             0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
1408                             0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58 },
1409         },
1410 };
1411
1412 /*
1413  * DES test vectors.
1414  */
1415 #define DES_ENC_TEST_VECTORS            10
1416 #define DES_DEC_TEST_VECTORS            4
1417 #define DES_CBC_ENC_TEST_VECTORS        5
1418 #define DES_CBC_DEC_TEST_VECTORS        4
1419 #define DES3_EDE_ENC_TEST_VECTORS       3
1420 #define DES3_EDE_DEC_TEST_VECTORS       3
1421
1422 static struct cipher_testvec des_enc_tv_template[] = {
1423         { /* From Applied Cryptography */
1424                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1425                 .klen   = 8,
1426                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1427                 .ilen   = 8,
1428                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1429                 .rlen   = 8,
1430         }, { /* Same key, different plaintext block */
1431                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1432                 .klen   = 8,
1433                 .input  = { 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1434                 .ilen   = 8,
1435                 .result = { 0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1436                 .rlen   = 8,
1437         }, { /* Sbox test from NBS */
1438                 .key    = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
1439                 .klen   = 8,
1440                 .input  = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
1441                 .ilen   = 8,
1442                 .result = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1443                 .rlen   = 8,
1444         }, { /* Three blocks */
1445                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1446                 .klen   = 8,
1447                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1448                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1449                             0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
1450                 .ilen   = 24,
1451                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1452                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1453                             0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
1454                 .rlen   = 24,
1455         }, { /* Weak key */
1456                 .fail   = 1,
1457                 .wk     = 1,
1458                 .key    = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
1459                 .klen   = 8,
1460                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1461                 .ilen   = 8,
1462                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1463                 .rlen   = 8,
1464         }, { /* Two blocks -- for testing encryption across pages */
1465                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1466                 .klen   = 8,
1467                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1468                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1469                 .ilen   = 16,
1470                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1471                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1472                 .rlen   = 16,
1473                 .np     = 2,
1474                 .tap    = { 8, 8 }
1475         }, { /* Four blocks -- for testing encryption with chunking */
1476                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1477                 .klen   = 8,
1478                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1479                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1480                             0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef,
1481                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1482                 .ilen   = 32,
1483                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1484                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1485                             0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90,
1486                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1487                 .rlen   = 32,
1488                 .np     = 3,
1489                 .tap    = { 14, 10, 8 }
1490         }, {
1491                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1492                 .klen   = 8,
1493                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1494                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
1495                             0xca, 0xfe, 0xba, 0xbe, 0xfe, 0xed, 0xbe, 0xef },
1496                 .ilen   = 24,
1497                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1498                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b,
1499                             0xb4, 0x99, 0x26, 0xf7, 0x1f, 0xe1, 0xd4, 0x90 },
1500                 .rlen   = 24,
1501                 .np     = 4,
1502                 .tap    = { 2, 1, 3, 18 }
1503         }, {
1504                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1505                 .klen   = 8,
1506                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1507                             0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99 },
1508                 .ilen   = 16,
1509                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1510                             0xf7, 0x9c, 0x89, 0x2a, 0x33, 0x8f, 0x4a, 0x8b },
1511                 .rlen   = 16,
1512                 .np     = 5,
1513                 .tap    = { 2, 2, 2, 2, 8 }
1514         }, {
1515                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1516                 .klen   = 8,
1517                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1518                 .ilen   = 8,
1519                 .result = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1520                 .rlen   = 8,
1521                 .np     = 8,
1522                 .tap    = { 1, 1, 1, 1, 1, 1, 1, 1 }
1523         },
1524 };
1525
1526 static struct cipher_testvec des_dec_tv_template[] = {
1527         { /* From Applied Cryptography */
1528                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1529                 .klen   = 8,
1530                 .input  = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d },
1531                 .ilen   = 8,
1532                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7 },
1533                 .rlen   = 8,
1534         }, { /* Sbox test from NBS */
1535                 .key    = { 0x7c, 0xa1, 0x10, 0x45, 0x4a, 0x1a, 0x6e, 0x57 },
1536                 .klen   = 8,
1537                 .input  = { 0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1538                 .ilen   = 8,
1539                 .result = { 0x01, 0xa1, 0xd6, 0xd0, 0x39, 0x77, 0x67, 0x42 },
1540                 .rlen   = 8,
1541         }, { /* Two blocks, for chunking test */
1542                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1543                 .klen   = 8,
1544                 .input  = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1545                             0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1546                 .ilen   = 16,
1547                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1548                             0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1549                 .rlen   = 16,
1550                 .np     = 2,
1551                 .tap    = { 8, 8 }
1552         }, {
1553                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1554                 .klen   = 8,
1555                 .input  = { 0xc9, 0x57, 0x44, 0x25, 0x6a, 0x5e, 0xd3, 0x1d,
1556                             0x69, 0x0f, 0x5b, 0x0d, 0x9a, 0x26, 0x93, 0x9b },
1557                 .ilen   = 16,
1558                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xe7,
1559                             0xa3, 0x99, 0x7b, 0xca, 0xaf, 0x69, 0xa0, 0xf5 },
1560                 .rlen   = 16,
1561                 .np     = 3,
1562                 .tap    = { 3, 12, 1 }
1563         },
1564 };
1565
1566 static struct cipher_testvec des_cbc_enc_tv_template[] = {
1567         { /* From OpenSSL */
1568                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1569                 .klen   = 8,
1570                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1571                 .input  = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1572                             0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1573                             0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1574                 .ilen   = 24,
1575                 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1576                             0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1577                             0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1578                 .rlen   = 24,
1579         }, { /* FIPS Pub 81 */
1580                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1581                 .klen   = 8,
1582                 .iv     = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1583                 .input  = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1584                 .ilen   = 8,
1585                 .result = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1586                 .rlen   = 8,
1587         }, {
1588                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1589                 .klen   = 8,
1590                 .iv     = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1591                 .input  = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1592                 .ilen   = 8,
1593                 .result = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1594                 .rlen   = 8,
1595         }, {
1596                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1597                 .klen   = 8,
1598                 .iv     = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1599                 .input  = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1600                 .ilen   = 8,
1601                 .result = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1602                 .rlen   = 8,
1603         }, { /* Copy of openssl vector for chunk testing */
1604              /* From OpenSSL */
1605                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
1606                 .klen   = 8,
1607                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1608                 .input  = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1609                             0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1610                             0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1611                 .ilen   = 24,
1612                 .result = { 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
1613                             0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
1614                             0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68 },
1615                 .rlen   = 24,
1616                 .np     = 2,
1617                 .tap    = { 13, 11 }
1618         },
1619 };
1620
1621 static struct cipher_testvec des_cbc_dec_tv_template[] = {
1622         { /* FIPS Pub 81 */
1623                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1624                 .klen   = 8,
1625                 .iv     = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef },
1626                 .input  = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1627                 .ilen   = 8,
1628                 .result = { 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 },
1629                 .rlen   = 8,
1630         }, {
1631                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1632                 .klen   = 8,
1633                 .iv     = { 0xe5, 0xc7, 0xcd, 0xde, 0x87, 0x2b, 0xf2, 0x7c },
1634                 .input  = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1635                 .ilen   = 8,
1636                 .result = { 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20 },
1637                 .rlen   = 8,
1638         }, {
1639                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1640                 .klen   = 8,
1641                 .iv     = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1642                 .input  = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1643                 .ilen   = 8,
1644                 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1645                 .rlen   = 8,
1646         }, { /* Copy of above, for chunk testing */
1647                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1648                 .klen   = 8,
1649                 .iv     = { 0x43, 0xe9, 0x34, 0x00, 0x8c, 0x38, 0x9c, 0x0f },
1650                 .input  = { 0x68, 0x37, 0x88, 0x49, 0x9a, 0x7c, 0x05, 0xf6 },
1651                 .ilen   = 8,
1652                 .result = { 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 },
1653                 .rlen   = 8,
1654                 .np     = 2,
1655                 .tap    = { 4, 4 }
1656         },
1657 };
1658
1659 /*
1660  * We really need some more test vectors, especially for DES3 CBC.
1661  */
1662 static struct cipher_testvec des3_ede_enc_tv_template[] = {
1663         { /* These are from openssl */
1664                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1665                             0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1666                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1667                 .klen   = 24,
1668                 .input  = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1669                 .ilen   = 8,
1670                 .result = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1671                 .rlen   = 8,
1672         }, {
1673                 .key    = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1674                             0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1675                             0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1676                 .klen   = 24,
1677                 .input  = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1678                 .ilen   = 8,
1679                 .result = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1680                 .rlen   = 8,
1681         }, {
1682                 .key    = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1683                             0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1684                             0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1685                 .klen   = 24,
1686                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1687                 .ilen   = 8,
1688                 .result = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1689                 .rlen   = 8,
1690         },
1691 };
1692
1693 static struct cipher_testvec des3_ede_dec_tv_template[] = {
1694         { /* These are from openssl */
1695                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1696                             0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
1697                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10},
1698                 .klen   = 24,
1699                 .input  = { 0x18, 0xd7, 0x48, 0xe5, 0x63, 0x62, 0x05, 0x72 },
1700                 .ilen   = 8,
1701                 .result = { 0x73, 0x6f, 0x6d, 0x65, 0x64, 0x61, 0x74, 0x61 },
1702                 .rlen   = 8,
1703         }, {
1704                 .key    = { 0x03, 0x52, 0x02, 0x07, 0x67, 0x20, 0x82, 0x17,
1705                             0x86, 0x02, 0x87, 0x66, 0x59, 0x08, 0x21, 0x98,
1706                             0x64, 0x05, 0x6a, 0xbd, 0xfe, 0xa9, 0x34, 0x57 },
1707                 .klen   = 24,
1708                 .input  = { 0xc0, 0x7d, 0x2a, 0x0f, 0xa5, 0x66, 0xfa, 0x30 },
1709                 .ilen   = 8,
1710                 .result = { 0x73, 0x71, 0x75, 0x69, 0x67, 0x67, 0x6c, 0x65 },
1711                 .rlen   = 8,
1712         }, {
1713                 .key    = { 0x10, 0x46, 0x10, 0x34, 0x89, 0x98, 0x80, 0x20,
1714                             0x91, 0x07, 0xd0, 0x15, 0x89, 0x19, 0x01, 0x01,
1715                             0x19, 0x07, 0x92, 0x10, 0x98, 0x1a, 0x01, 0x01 },
1716                 .klen   = 24,
1717                 .input  = { 0xe1, 0xef, 0x62, 0xc3, 0x32, 0xfe, 0x82, 0x5b },
1718                 .ilen   = 8,
1719                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1720                 .rlen   = 8,
1721         },
1722 };
1723
1724 /*
1725  * Blowfish test vectors.
1726  */
1727 #define BF_ENC_TEST_VECTORS     6
1728 #define BF_DEC_TEST_VECTORS     6
1729 #define BF_CBC_ENC_TEST_VECTORS 1
1730 #define BF_CBC_DEC_TEST_VECTORS 1
1731
1732 static struct cipher_testvec bf_enc_tv_template[] = {
1733         { /* DES test vectors from OpenSSL */
1734                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
1735                 .klen   = 8,
1736                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1737                 .ilen   = 8,
1738                 .result = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1739                 .rlen   = 8,
1740         }, {
1741                 .key    = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1742                 .klen   = 8,
1743                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1744                 .ilen   = 8,
1745                 .result = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1746                 .rlen   = 8,
1747         }, {
1748                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1749                 .klen   = 8,
1750                 .input  = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1751                 .ilen   = 8,
1752                 .result = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1753                 .rlen   = 8,
1754         }, { /* Vary the keylength... */
1755                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1756                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1757                 .klen   = 16,
1758                 .input  = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1759                 .ilen   = 8,
1760                 .result = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1761                 .rlen   = 8,
1762         }, {
1763                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1764                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1765                             0x00, 0x11, 0x22, 0x33, 0x44 },
1766                 .klen   = 21,
1767                 .input  = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1768                 .ilen   = 8,
1769                 .result = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1770                 .rlen   = 8,
1771         }, { /* Generated with bf488 */
1772                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1773                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1774                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1775                             0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1776                             0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1777                             0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1778                             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1779                 .klen   = 56,
1780                 .input  = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1781                 .ilen   = 8,
1782                 .result = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1783                 .rlen   = 8,
1784         },
1785 };
1786
1787 static struct cipher_testvec bf_dec_tv_template[] = {
1788         { /* DES test vectors from OpenSSL */
1789                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1790                 .klen   = 8,
1791                 .input  = { 0x4e, 0xf9, 0x97, 0x45, 0x61, 0x98, 0xdd, 0x78 },
1792                 .ilen   = 8,
1793                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1794                 .rlen   = 8,
1795         }, {
1796                 .key    = { 0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e },
1797                 .klen   = 8,
1798                 .input  = { 0xa7, 0x90, 0x79, 0x51, 0x08, 0xea, 0x3c, 0xae },
1799                 .ilen   = 8,
1800                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
1801                 .rlen   = 8,
1802         }, {
1803                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1804                 .klen   = 8,
1805                 .input  = { 0xe8, 0x7a, 0x24, 0x4e, 0x2c, 0xc8, 0x5e, 0x82 },
1806                 .ilen   = 8,
1807                 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1808                 .rlen   = 8,
1809         }, { /* Vary the keylength... */
1810                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1811                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f },
1812                 .klen   = 16,
1813                 .input  = { 0x93, 0x14, 0x28, 0x87, 0xee, 0x3b, 0xe1, 0x5c },
1814                 .ilen   = 8,
1815                 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1816                 .rlen   = 8,
1817         }, {
1818                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1819                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1820                             0x00, 0x11, 0x22, 0x33, 0x44 },
1821                 .klen   = 21,
1822                 .input  = { 0xe6, 0xf5, 0x1e, 0xd7, 0x9b, 0x9d, 0xb2, 0x1f },
1823                 .ilen   = 8,
1824                 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1825                 .rlen   = 8,
1826         }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
1827                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
1828                             0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
1829                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1830                             0x04, 0x68, 0x91, 0x04, 0xc2, 0xfd, 0x3b, 0x2f,
1831                             0x58, 0x40, 0x23, 0x64, 0x1a, 0xba, 0x61, 0x76,
1832                             0x1f, 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x0e, 0x0e,
1833                             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
1834                 .klen   = 56,
1835                 .input  = { 0xc0, 0x45, 0x04, 0x01, 0x2e, 0x4e, 0x1f, 0x53 },
1836                 .ilen   = 8,
1837                 .result = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1838                 .rlen   = 8,
1839         },
1840 };
1841
1842 static struct cipher_testvec bf_cbc_enc_tv_template[] = {
1843         { /* From OpenSSL */
1844                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1845                             0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1846                 .klen   = 16,
1847                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1848                 .input  = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1849                             0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1850                             0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1851                             0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1852                 .ilen   = 32,
1853                 .result = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1854                             0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1855                             0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1856                             0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1857                 .rlen   = 32,
1858         },
1859 };
1860
1861 static struct cipher_testvec bf_cbc_dec_tv_template[] = {
1862         { /* From OpenSSL */
1863                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1864                             0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
1865                 .klen   = 16,
1866                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
1867                 .input  = { 0x6b, 0x77, 0xb4, 0xd6, 0x30, 0x06, 0xde, 0xe6,
1868                             0x05, 0xb1, 0x56, 0xe2, 0x74, 0x03, 0x97, 0x93,
1869                             0x58, 0xde, 0xb9, 0xe7, 0x15, 0x46, 0x16, 0xd9,
1870                             0x59, 0xf1, 0x65, 0x2b, 0xd5, 0xff, 0x92, 0xcc },
1871                 .ilen   = 32,
1872                 .result = { 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
1873                             0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
1874                             0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
1875                             0x66, 0x6f, 0x72, 0x20, 0x00, 0x00, 0x00, 0x00 },
1876                 .rlen   = 32,
1877         },
1878 };
1879
1880 /*
1881  * Twofish test vectors.
1882  */
1883 #define TF_ENC_TEST_VECTORS             3
1884 #define TF_DEC_TEST_VECTORS             3
1885 #define TF_CBC_ENC_TEST_VECTORS         4
1886 #define TF_CBC_DEC_TEST_VECTORS         4
1887
1888 static struct cipher_testvec tf_enc_tv_template[] = {
1889         {
1890                 .key    = { [0 ... 15] = 0x00 },
1891                 .klen   = 16,
1892                 .input  = { [0 ... 15] = 0x00 },
1893                 .ilen   = 16,
1894                 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1895                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1896                 .rlen   = 16,
1897         }, {
1898                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1899                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1900                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1901                 .klen   = 24,
1902                 .input  = { [0 ... 15] = 0x00 },
1903                 .ilen   = 16,
1904                 .result = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1905                             0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1906                 .rlen   = 16,
1907         }, {
1908                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1909                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1910                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1911                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1912                 .klen   = 32,
1913                 .input  = { [0 ... 15] = 0x00 },
1914                 .ilen   = 16,
1915                 .result = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1916                             0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1917                 .rlen   = 16,
1918         },
1919 };
1920
1921 static struct cipher_testvec tf_dec_tv_template[] = {
1922         {
1923                 .key    = { [0 ... 15] = 0x00 },
1924                 .klen   = 16,
1925                 .input  = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1926                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1927                 .ilen   = 16,
1928                 .result = { [0 ... 15] = 0x00 },
1929                 .rlen   = 16,
1930         }, {
1931                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1932                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1933                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
1934                 .klen   = 24,
1935                 .input  = { 0xcf, 0xd1, 0xd2, 0xe5, 0xa9, 0xbe, 0x9c, 0xdf,
1936                             0x50, 0x1f, 0x13, 0xb8, 0x92, 0xbd, 0x22, 0x48 },
1937                 .ilen   = 16,
1938                 .result = { [0 ... 15] = 0x00 },
1939                 .rlen   = 16,
1940         }, {
1941                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
1942                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
1943                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
1944                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
1945                 .klen   = 32,
1946                 .input  = { 0x37, 0x52, 0x7b, 0xe0, 0x05, 0x23, 0x34, 0xb8,
1947                             0x9f, 0x0c, 0xfc, 0xca, 0xe8, 0x7c, 0xfa, 0x20 },
1948                 .ilen   = 16,
1949                 .result = { [0 ... 15] = 0x00 },
1950                 .rlen   = 16,
1951         },
1952 };
1953
1954 static struct cipher_testvec tf_cbc_enc_tv_template[] = {
1955         { /* Generated with Nettle */
1956                 .key    = { [0 ... 15] = 0x00 },
1957                 .klen   = 16,
1958                 .iv     = { [0 ... 15] = 0x00 },
1959                 .input  = { [0 ... 15] = 0x00 },
1960                 .ilen   = 16,
1961                 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1962                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1963                 .rlen   = 16,
1964         }, {
1965                 .key    = { [0 ... 15] = 0x00 },
1966                 .klen   = 16,
1967                 .iv     = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1968                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
1969                 .input  = { [0 ... 15] = 0x00 },
1970                 .ilen   = 16,
1971                 .result = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1972                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1973                 .rlen   = 16,
1974         }, {
1975                 .key    = { [0 ... 15] = 0x00 },
1976                 .klen   = 16,
1977                 .iv     = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1978                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
1979                 .input  = { [0 ... 15] = 0x00 },
1980                 .ilen   = 16,
1981                 .result = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1982                             0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1983                 .rlen   = 16,
1984         }, {
1985                 .key    = { [0 ... 15] = 0x00 },
1986                 .klen   = 16,
1987                 .iv     = { [0 ... 15] = 0x00 },
1988                 .input  = { [0 ... 47] = 0x00 },
1989                 .ilen   = 48,
1990                 .result = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
1991                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
1992                             0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
1993                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
1994                             0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
1995                             0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
1996                 .rlen   = 48,
1997         },
1998 };
1999
2000 static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2001         { /* Reverse of the first four above */
2002                 .key    = { [0 ... 15] = 0x00 },
2003                 .klen   = 16,
2004                 .iv     = { [0 ... 15] = 0x00 },
2005                 .input  = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2006                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
2007                 .ilen   = 16,
2008                 .result = { [0 ... 15] = 0x00 },
2009                 .rlen   = 16,
2010         }, {
2011                 .key    = { [0 ... 15] = 0x00 },
2012                 .klen   = 16,
2013                 .iv     = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2014                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a },
2015                 .input  = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2016                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
2017                 .ilen   = 16,
2018                 .result = { [0 ... 15] = 0x00 },
2019                 .rlen   = 16,
2020         }, {
2021                 .key    = { [0 ... 15] = 0x00 },
2022                 .klen   = 16,
2023                 .iv     = { 0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2024                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19 },
2025                 .input  = { 0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
2026                             0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
2027                 .ilen   = 16,
2028                 .result = { [0 ... 15] = 0x00 },
2029                 .rlen   = 16,
2030         }, {
2031                 .key    = { [0 ... 15] = 0x00 },
2032                 .klen   = 16,
2033                 .iv     = { [0 ... 15] = 0x00 },
2034                 .input  = { 0x9f, 0x58, 0x9f, 0x5c, 0xf6, 0x12, 0x2c, 0x32,
2035                             0xb6, 0xbf, 0xec, 0x2f, 0x2a, 0xe8, 0xc3, 0x5a,
2036                             0xd4, 0x91, 0xdb, 0x16, 0xe7, 0xb1, 0xc3, 0x9e,
2037                             0x86, 0xcb, 0x08, 0x6b, 0x78, 0x9f, 0x54, 0x19,
2038                             0x05, 0xef, 0x8c, 0x61, 0xa8, 0x11, 0x58, 0x26,
2039                             0x34, 0xba, 0x5c, 0xb7, 0x10, 0x6a, 0xa6, 0x41 },
2040                 .ilen   = 48,
2041                 .result = { [0 ... 47] = 0x00 },
2042                 .rlen   = 48,
2043         },
2044 };
2045
2046 /*
2047  * Serpent test vectors.  These are backwards because Serpent writes
2048  * octet sequences in right-to-left mode.
2049  */
2050 #define SERPENT_ENC_TEST_VECTORS        4
2051 #define SERPENT_DEC_TEST_VECTORS        4
2052
2053 #define TNEPRES_ENC_TEST_VECTORS        4
2054 #define TNEPRES_DEC_TEST_VECTORS        4
2055
2056 static struct cipher_testvec serpent_enc_tv_template[] = {
2057         {
2058                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2059                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2060                 .ilen   = 16,
2061                 .result = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
2062                             0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
2063                 .rlen   = 16,
2064         }, {
2065                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2066                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2067                 .klen   = 16,
2068                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2069                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2070                 .ilen   = 16,
2071                 .result = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
2072                             0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
2073                 .rlen   = 16,
2074         }, {
2075                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2076                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2077                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2078                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2079                 .klen   = 32,
2080                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2081                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2082                 .ilen   = 16,
2083                 .result = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
2084                             0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
2085                 .rlen   = 16,
2086         }, {
2087                 .key    = { [15] = 0x80 },
2088                 .klen   = 16,
2089                 .input  = { [0 ... 15] = 0x00 },
2090                 .ilen   = 16,
2091                 .result = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
2092                             0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
2093                 .rlen   = 16,
2094         },
2095 };
2096
2097 static struct cipher_testvec tnepres_enc_tv_template[] = {
2098         { /* KeySize=128, PT=0, I=1 */
2099                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2100                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2101                 .key    = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2102                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2103                 .klen   = 16,
2104                 .ilen   = 16,
2105                 .result = { 0x49, 0xaf, 0xbf, 0xad, 0x9d, 0x5a, 0x34, 0x05,
2106                             0x2c, 0xd8, 0xff, 0xa5, 0x98, 0x6b, 0xd2, 0xdd },
2107                 .rlen   = 16,
2108         }, { /* KeySize=192, PT=0, I=1 */
2109                 .key    = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2110                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2111                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2112                 .klen   = 24,
2113                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2114                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2115                 .ilen   = 16,
2116                 .result = { 0xe7, 0x8e, 0x54, 0x02, 0xc7, 0x19, 0x55, 0x68,
2117                             0xac, 0x36, 0x78, 0xf7, 0xa3, 0xf6, 0x0c, 0x66 },
2118                 .rlen   = 16,
2119         }, { /* KeySize=256, PT=0, I=1 */
2120                 .key    = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2121                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2122                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2123                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2124                 .klen   = 32,
2125                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2126                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2127                 .ilen   = 16,
2128                 .result = { 0xab, 0xed, 0x96, 0xe7, 0x66, 0xbf, 0x28, 0xcb,
2129                             0xc0, 0xeb, 0xd2, 0x1a, 0x82, 0xef, 0x08, 0x19 },
2130                 .rlen   = 16,
2131         }, { /* KeySize=256, I=257 */
2132                 .key    = { 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
2133                             0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
2134                             0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
2135                             0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
2136                 .klen   = 32,
2137                 .input  = { 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
2138                             0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 },
2139                 .ilen   = 16,
2140                 .result = { 0x5c, 0xe7, 0x1c, 0x70, 0xd2, 0x88, 0x2e, 0x5b,
2141                             0xb8, 0x32, 0xe4, 0x33, 0xf8, 0x9f, 0x26, 0xde },
2142                 .rlen   = 16,
2143         },
2144 };
2145
2146
2147 static struct cipher_testvec serpent_dec_tv_template[] = {
2148         {
2149                 .input  = { 0x12, 0x07, 0xfc, 0xce, 0x9b, 0xd0, 0xd6, 0x47,
2150                             0x6a, 0xe9, 0x8f, 0xbe, 0xd1, 0x43, 0xa0, 0xe2 },
2151                 .ilen   = 16,
2152                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2153                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2154                 .rlen   = 16,
2155         }, {
2156                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2157                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2158                 .klen   = 16,
2159                 .input  = { 0x4c, 0x7d, 0x8a, 0x32, 0x80, 0x72, 0xa2, 0x2c,
2160                             0x82, 0x3e, 0x4a, 0x1f, 0x3a, 0xcd, 0xa1, 0x6d },
2161                 .ilen   = 16,
2162                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2163                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2164                 .rlen   = 16,
2165         }, {
2166                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2167                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2168                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2169                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2170                 .klen   = 32,
2171                 .input  = { 0xde, 0x26, 0x9f, 0xf8, 0x33, 0xe4, 0x32, 0xb8,
2172                             0x5b, 0x2e, 0x88, 0xd2, 0x70, 0x1c, 0xe7, 0x5c },
2173                 .ilen   = 16,
2174                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2175                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2176                 .rlen   = 16,
2177         }, {
2178                 .key    = { [15] = 0x80 },
2179                 .klen   = 16,
2180                 .input  = { 0xdd, 0xd2, 0x6b, 0x98, 0xa5, 0xff, 0xd8, 0x2c,
2181                             0x05, 0x34, 0x5a, 0x9d, 0xad, 0xbf, 0xaf, 0x49},
2182                 .ilen   = 16,
2183                 .result = { [0 ... 15] = 0x00 },
2184                 .rlen   = 16,
2185         },
2186 };
2187
2188 static struct cipher_testvec tnepres_dec_tv_template[] = {
2189         {
2190                 .input  = { 0x41, 0xcc, 0x6b, 0x31, 0x59, 0x31, 0x45, 0x97,
2191                             0x6d, 0x6f, 0xbb, 0x38, 0x4b, 0x37, 0x21, 0x28 },
2192                 .ilen   = 16,
2193                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2194                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2195                 .rlen   = 16,
2196         }, {
2197                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2198                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2199                 .klen   = 16,
2200                 .input  = { 0xea, 0xf4, 0xd7, 0xfc, 0xd8, 0x01, 0x34, 0x47,
2201                             0x81, 0x45, 0x0b, 0xfa, 0x0c, 0xd6, 0xad, 0x6e },
2202                 .ilen   = 16,
2203                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2204                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2205                 .rlen   = 16,
2206         }, {
2207                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2208                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2209                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2210                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2211                 .klen   = 32,
2212                 .input  = { 0x64, 0xa9, 0x1a, 0x37, 0xed, 0x9f, 0xe7, 0x49,
2213                             0xa8, 0x4e, 0x76, 0xd6, 0xf5, 0x0d, 0x78, 0xee },
2214                 .ilen   = 16,
2215                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2216                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2217                 .rlen   = 16,
2218         }, { /* KeySize=128, I=121 */
2219                 .key    = { [15] = 0x80 },
2220                 .klen   = 16,
2221                 .input  = { 0x3d, 0xda, 0xbf, 0xc0, 0x06, 0xda, 0xab, 0x06,
2222                             0x46, 0x2a, 0xf4, 0xef, 0x81, 0x54, 0x4e, 0x26 },
2223                 .ilen   = 16,
2224                 .result = { [0 ... 15] = 0x00 },
2225                 .rlen   = 16,
2226         },
2227 };
2228
2229
2230 /* Cast6 test vectors from RFC 2612 */
2231 #define CAST6_ENC_TEST_VECTORS  3
2232 #define CAST6_DEC_TEST_VECTORS  3
2233
2234 static struct cipher_testvec cast6_enc_tv_template[] = {
2235         {
2236                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2237                             0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
2238                 .klen   = 16,
2239                 .input  = { [0 ... 15] = 0x00 },
2240                 .ilen   = 16,
2241                 .result = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
2242                             0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
2243                 .rlen   = 16,
2244         }, {
2245                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2246                             0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2247                             0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
2248                 .klen   = 24,
2249                 .input  = { [0 ... 15] = 0x00 },
2250                 .ilen   = 16,
2251                 .result = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
2252                             0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
2253                 .rlen   = 16,
2254         }, {
2255                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2256                             0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2257                             0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
2258                             0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
2259                 .klen   = 32,
2260                 .input  = { [0 ... 15] = 0x00 },
2261                 .ilen   = 16,
2262                 .result = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
2263                             0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
2264                 .rlen   = 16,
2265         },
2266 };
2267
2268 static struct cipher_testvec cast6_dec_tv_template[] = {
2269         {
2270                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2271                             0x0a, 0xf7, 0x56, 0x47, 0xf2, 0x9f, 0x61, 0x5d },
2272                 .klen   = 16,
2273                 .input  = { 0xc8, 0x42, 0xa0, 0x89, 0x72, 0xb4, 0x3d, 0x20,
2274                             0x83, 0x6c, 0x91, 0xd1, 0xb7, 0x53, 0x0f, 0x6b },
2275                 .ilen   = 16,
2276                 .result = { [0 ... 15] = 0x00 },
2277                 .rlen   = 16,
2278         }, {
2279                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2280                             0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2281                             0xba, 0xc7, 0x7a, 0x77, 0x17, 0x94, 0x28, 0x63 },
2282                 .klen   = 24,
2283                 .input  = { 0x1b, 0x38, 0x6c, 0x02, 0x10, 0xdc, 0xad, 0xcb,
2284                             0xdd, 0x0e, 0x41, 0xaa, 0x08, 0xa7, 0xa7, 0xe8 },
2285                 .ilen   = 16,
2286                 .result = { [0 ... 15] = 0x00 },
2287                 .rlen   = 16,
2288         }, {
2289                 .key    = { 0x23, 0x42, 0xbb, 0x9e, 0xfa, 0x38, 0x54, 0x2c,
2290                             0xbe, 0xd0, 0xac, 0x83, 0x94, 0x0a, 0xc2, 0x98,
2291                             0x8d, 0x7c, 0x47, 0xce, 0x26, 0x49, 0x08, 0x46,
2292                             0x1c, 0xc1, 0xb5, 0x13, 0x7a, 0xe6, 0xb6, 0x04 },
2293                 .klen   = 32,
2294                 .input  = { 0x4f, 0x6a, 0x20, 0x38, 0x28, 0x68, 0x97, 0xb9,
2295                             0xc9, 0x87, 0x01, 0x36, 0x55, 0x33, 0x17, 0xfa },
2296                 .ilen   = 16,
2297                 .result = { [0 ... 15] = 0x00 },
2298                 .rlen   = 16,
2299         },
2300 };
2301
2302
2303 /*
2304  * AES test vectors.
2305  */
2306 #define AES_ENC_TEST_VECTORS 3
2307 #define AES_DEC_TEST_VECTORS 3
2308 #define AES_CBC_ENC_TEST_VECTORS 2
2309 #define AES_CBC_DEC_TEST_VECTORS 2
2310 #define AES_LRW_ENC_TEST_VECTORS 8
2311 #define AES_LRW_DEC_TEST_VECTORS 8
2312 #define AES_XTS_ENC_TEST_VECTORS 4
2313 #define AES_XTS_DEC_TEST_VECTORS 4
2314 #define AES_CTR_ENC_TEST_VECTORS 7
2315 #define AES_CTR_DEC_TEST_VECTORS 6
2316 #define AES_GCM_ENC_TEST_VECTORS 9
2317 #define AES_GCM_DEC_TEST_VECTORS 8
2318
2319 static struct cipher_testvec aes_enc_tv_template[] = {
2320         { /* From FIPS-197 */
2321                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2322                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2323                 .klen   = 16,
2324                 .input  = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2325                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2326                 .ilen   = 16,
2327                 .result = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
2328                             0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
2329                 .rlen   = 16,
2330         }, {
2331                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2332                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2333                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
2334                 .klen   = 24,
2335                 .input  = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2336                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2337                 .ilen   = 16,
2338                 .result = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
2339                             0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
2340                 .rlen   = 16,
2341         }, {
2342                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2343                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2344                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2345                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2346                 .klen   = 32,
2347                 .input  = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2348                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2349                 .ilen   = 16,
2350                 .result = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
2351                             0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
2352                 .rlen   = 16,
2353         },
2354 };
2355
2356 static struct cipher_testvec aes_dec_tv_template[] = {
2357         { /* From FIPS-197 */
2358                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2359                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
2360                 .klen   = 16,
2361                 .input  = { 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30,
2362                             0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a },
2363                 .ilen   = 16,
2364                 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2365                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2366                 .rlen   = 16,
2367         }, {
2368                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2369                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2370                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 },
2371                 .klen   = 24,
2372                 .input  = { 0xdd, 0xa9, 0x7c, 0xa4, 0x86, 0x4c, 0xdf, 0xe0,
2373                             0x6e, 0xaf, 0x70, 0xa0, 0xec, 0x0d, 0x71, 0x91 },
2374                 .ilen   = 16,
2375                 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2376                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2377                 .rlen   = 16,
2378         }, {
2379                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2380                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2381                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2382                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2383                 .klen   = 32,
2384                 .input  = { 0x8e, 0xa2, 0xb7, 0xca, 0x51, 0x67, 0x45, 0xbf,
2385                             0xea, 0xfc, 0x49, 0x90, 0x4b, 0x49, 0x60, 0x89 },
2386                 .ilen   = 16,
2387                 .result = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
2388                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
2389                 .rlen   = 16,
2390         },
2391 };
2392
2393 static struct cipher_testvec aes_cbc_enc_tv_template[] = {
2394         { /* From RFC 3602 */
2395                 .key    = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
2396                             0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
2397                 .klen   = 16,
2398                 .iv     = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
2399                             0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
2400                 .input  = { "Single block msg" },
2401                 .ilen   = 16,
2402                 .result = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
2403                             0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
2404                 .rlen   = 16,
2405         }, {
2406                 .key    = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
2407                             0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
2408                 .klen   = 16,
2409                 .iv     = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
2410                             0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
2411                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2412                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2413                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2414                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2415                 .ilen   = 32,
2416                 .result = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
2417                             0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
2418                             0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
2419                             0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
2420                 .rlen   = 32,
2421         },
2422 };
2423
2424 static struct cipher_testvec aes_cbc_dec_tv_template[] = {
2425         { /* From RFC 3602 */
2426                 .key    = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
2427                             0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
2428                 .klen   = 16,
2429                 .iv     = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
2430                             0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
2431                 .input  = { 0xe3, 0x53, 0x77, 0x9c, 0x10, 0x79, 0xae, 0xb8,
2432                             0x27, 0x08, 0x94, 0x2d, 0xbe, 0x77, 0x18, 0x1a },
2433                 .ilen   = 16,
2434                 .result = { "Single block msg" },
2435                 .rlen   = 16,
2436         }, {
2437                 .key    = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
2438                             0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
2439                 .klen   = 16,
2440                 .iv     = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
2441                             0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
2442                 .input  = { 0xd2, 0x96, 0xcd, 0x94, 0xc2, 0xcc, 0xcf, 0x8a,
2443                             0x3a, 0x86, 0x30, 0x28, 0xb5, 0xe1, 0xdc, 0x0a,
2444                             0x75, 0x86, 0x60, 0x2d, 0x25, 0x3c, 0xff, 0xf9,
2445                             0x1b, 0x82, 0x66, 0xbe, 0xa6, 0xd6, 0x1a, 0xb1 },
2446                 .ilen   = 32,
2447                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2448                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2449                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
2450                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
2451                 .rlen   = 32,
2452         },
2453 };
2454
2455 static struct cipher_testvec aes_lrw_enc_tv_template[] = {
2456         /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
2457         { /* LRW-32-AES 1 */
2458                 .key    = { 0x45, 0x62, 0xac, 0x25, 0xf8, 0x28, 0x17, 0x6d,
2459                             0x4c, 0x26, 0x84, 0x14, 0xb5, 0x68, 0x01, 0x85,
2460                             0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03,
2461                             0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 },
2462                 .klen   = 32,
2463                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2464                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2465                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2466                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2467                 .ilen   = 16,
2468                 .result = { 0xf1, 0xb2, 0x73, 0xcd, 0x65, 0xa3, 0xdf, 0x5f,
2469                             0xe9, 0x5d, 0x48, 0x92, 0x54, 0x63, 0x4e, 0xb8 },
2470                 .rlen   = 16,
2471         }, { /* LRW-32-AES 2 */
2472                 .key    = { 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c,
2473                             0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44,
2474                             0x0d, 0x48, 0xf0, 0xb7, 0xb1, 0x5a, 0x53, 0xea,
2475                             0x1c, 0xaa, 0x6b, 0x29, 0xc2, 0xca, 0xfb, 0xaf
2476                 },
2477                 .klen   = 32,
2478                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2479                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
2480                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2481                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2482                 .ilen   = 16,
2483                 .result = { 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5,
2484                             0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 },
2485                 .rlen   = 16,
2486         }, { /* LRW-32-AES 3 */
2487                 .key    = { 0xd8, 0x2a, 0x91, 0x34, 0xb2, 0x6a, 0x56, 0x50,
2488                             0x30, 0xfe, 0x69, 0xe2, 0x37, 0x7f, 0x98, 0x47,
2489                             0xcd, 0xf9, 0x0b, 0x16, 0x0c, 0x64, 0x8f, 0xb6,
2490                             0xb0, 0x0d, 0x0d, 0x1b, 0xae, 0x85, 0x87, 0x1f },
2491                 .klen   = 32,
2492                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2493                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2494                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2495                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2496                 .ilen   = 16,
2497                 .result = { 0x76, 0x32, 0x21, 0x83, 0xed, 0x8f, 0xf1, 0x82,
2498                             0xf9, 0x59, 0x62, 0x03, 0x69, 0x0e, 0x5e, 0x01 },
2499                 .rlen   = 16,
2500         }, { /* LRW-32-AES 4 */
2501                 .key    = { 0x0f, 0x6a, 0xef, 0xf8, 0xd3, 0xd2, 0xbb, 0x15,
2502                             0x25, 0x83, 0xf7, 0x3c, 0x1f, 0x01, 0x28, 0x74,
2503                             0xca, 0xc6, 0xbc, 0x35, 0x4d, 0x4a, 0x65, 0x54,
2504                             0x90, 0xae, 0x61, 0xcf, 0x7b, 0xae, 0xbd, 0xcc,
2505                             0xad, 0xe4, 0x94, 0xc5, 0x4a, 0x29, 0xae, 0x70 },
2506                 .klen   = 40,
2507                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2508                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2509                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2510                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2511                 .ilen   = 16,
2512                 .result = { 0x9c, 0x0f, 0x15, 0x2f, 0x55, 0xa2, 0xd8, 0xf0,
2513                             0xd6, 0x7b, 0x8f, 0x9e, 0x28, 0x22, 0xbc, 0x41 },
2514                 .rlen   = 16,
2515         }, { /* LRW-32-AES 5 */
2516                 .key    = { 0x8a, 0xd4, 0xee, 0x10, 0x2f, 0xbd, 0x81, 0xff,
2517                             0xf8, 0x86, 0xce, 0xac, 0x93, 0xc5, 0xad, 0xc6,
2518                             0xa0, 0x19, 0x07, 0xc0, 0x9d, 0xf7, 0xbb, 0xdd,
2519                             0x52, 0x13, 0xb2, 0xb7, 0xf0, 0xff, 0x11, 0xd8,
2520                             0xd6, 0x08, 0xd0, 0xcd, 0x2e, 0xb1, 0x17, 0x6f },
2521                 .klen   = 40,
2522                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2523                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2524                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2525                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2526                 .ilen   = 16,
2527                 .result = { 0xd4, 0x27, 0x6a, 0x7f, 0x14, 0x91, 0x3d, 0x65,
2528                             0xc8, 0x60, 0x48, 0x02, 0x87, 0xe3, 0x34, 0x06 },
2529                 .rlen   = 16,
2530         }, { /* LRW-32-AES 6 */
2531                 .key    = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2532                             0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2533                             0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2534                             0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2535                             0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2536                             0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2537                 .klen   = 48,
2538                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2539                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2540                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2541                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2542                 .ilen   = 16,
2543                 .result = { 0xbd, 0x06, 0xb8, 0xe1, 0xdb, 0x98, 0x89, 0x9e,
2544                             0xc4, 0x98, 0xe4, 0x91, 0xcf, 0x1c, 0x70, 0x2b },
2545                 .rlen   = 16,
2546         }, { /* LRW-32-AES 7 */
2547                 .key    = { 0xfb, 0x76, 0x15, 0xb2, 0x3d, 0x80, 0x89, 0x1d,
2548                             0xd4, 0x70, 0x98, 0x0b, 0xc7, 0x95, 0x84, 0xc8,
2549                             0xb2, 0xfb, 0x64, 0xce, 0x60, 0x97, 0x87, 0x8d,
2550                             0x17, 0xfc, 0xe4, 0x5a, 0x49, 0xe8, 0x30, 0xb7,
2551                             0x6e, 0x78, 0x17, 0xe7, 0x2d, 0x5e, 0x12, 0xd4,
2552                             0x60, 0x64, 0x04, 0x7a, 0xf1, 0x2f, 0x9e, 0x0c },
2553                 .klen   = 48,
2554                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2555                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2556                 .input  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2557                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2558                 .ilen   = 16,
2559                 .result = { 0x5b, 0x90, 0x8e, 0xc1, 0xab, 0xdd, 0x67, 0x5f,
2560                             0x3d, 0x69, 0x8a, 0x95, 0x53, 0xc8, 0x9c, 0xe5 },
2561                 .rlen   = 16,
2562         }, {
2563 /* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
2564                 .key    = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2565                             0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2566                             0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2567                             0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2568                             0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2569                             0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2570                 .klen   = 48,
2571                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2572                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2573                 .input  = { 0x05, 0x11, 0xb7, 0x18, 0xab, 0xc6, 0x2d, 0xac,
2574                             0x70, 0x5d, 0xf6, 0x22, 0x94, 0xcd, 0xe5, 0x6c,
2575                             0x17, 0x6b, 0xf6, 0x1c, 0xf0, 0xf3, 0x6e, 0xf8,
2576                             0x50, 0x38, 0x1f, 0x71, 0x49, 0xb6, 0x57, 0xd6,
2577                             0x8f, 0xcb, 0x8d, 0x6b, 0xe3, 0xa6, 0x29, 0x90,
2578                             0xfe, 0x2a, 0x62, 0x82, 0xae, 0x6d, 0x8b, 0xf6,
2579                             0xad, 0x1e, 0x9e, 0x20, 0x5f, 0x38, 0xbe, 0x04,
2580                             0xda, 0x10, 0x8e, 0xed, 0xa2, 0xa4, 0x87, 0xab,
2581                             0xda, 0x6b, 0xb4, 0x0c, 0x75, 0xba, 0xd3, 0x7c,
2582                             0xc9, 0xac, 0x42, 0x31, 0x95, 0x7c, 0xc9, 0x04,
2583                             0xeb, 0xd5, 0x6e, 0x32, 0x69, 0x8a, 0xdb, 0xa6,
2584                             0x15, 0xd7, 0x3f, 0x4f, 0x2f, 0x66, 0x69, 0x03,
2585                             0x9c, 0x1f, 0x54, 0x0f, 0xde, 0x1f, 0xf3, 0x65,
2586                             0x4c, 0x96, 0x12, 0xed, 0x7c, 0x92, 0x03, 0x01,
2587                             0x6f, 0xbc, 0x35, 0x93, 0xac, 0xf1, 0x27, 0xf1,
2588                             0xb4, 0x96, 0x82, 0x5a, 0x5f, 0xb0, 0xa0, 0x50,
2589                             0x89, 0xa4, 0x8e, 0x66, 0x44, 0x85, 0xcc, 0xfd,
2590                             0x33, 0x14, 0x70, 0xe3, 0x96, 0xb2, 0xc3, 0xd3,
2591                             0xbb, 0x54, 0x5a, 0x1a, 0xf9, 0x74, 0xa2, 0xc5,
2592                             0x2d, 0x64, 0x75, 0xdd, 0xb4, 0x54, 0xe6, 0x74,
2593                             0x8c, 0xd3, 0x9d, 0x9e, 0x86, 0xab, 0x51, 0x53,
2594                             0xb7, 0x93, 0x3e, 0x6f, 0xd0, 0x4e, 0x2c, 0x40,
2595                             0xf6, 0xa8, 0x2e, 0x3e, 0x9d, 0xf4, 0x66, 0xa5,
2596                             0x76, 0x12, 0x73, 0x44, 0x1a, 0x56, 0xd7, 0x72,
2597                             0x88, 0xcd, 0x21, 0x8c, 0x4c, 0x0f, 0xfe, 0xda,
2598                             0x95, 0xe0, 0x3a, 0xa6, 0xa5, 0x84, 0x46, 0xcd,
2599                             0xd5, 0x3e, 0x9d, 0x3a, 0xe2, 0x67, 0xe6, 0x60,
2600                             0x1a, 0xe2, 0x70, 0x85, 0x58, 0xc2, 0x1b, 0x09,
2601                             0xe1, 0xd7, 0x2c, 0xca, 0xad, 0xa8, 0x8f, 0xf9,
2602                             0xac, 0xb3, 0x0e, 0xdb, 0xca, 0x2e, 0xe2, 0xb8,
2603                             0x51, 0x71, 0xd9, 0x3c, 0x6c, 0xf1, 0x56, 0xf8,
2604                             0xea, 0x9c, 0xf1, 0xfb, 0x0c, 0xe6, 0xb7, 0x10,
2605                             0x1c, 0xf8, 0xa9, 0x7c, 0xe8, 0x53, 0x35, 0xc1,
2606                             0x90, 0x3e, 0x76, 0x4a, 0x74, 0xa4, 0x21, 0x2c,
2607                             0xf6, 0x2c, 0x4e, 0x0f, 0x94, 0x3a, 0x88, 0x2e,
2608                             0x41, 0x09, 0x6a, 0x33, 0x7d, 0xf6, 0xdd, 0x3f,
2609                             0x8d, 0x23, 0x31, 0x74, 0x84, 0xeb, 0x88, 0x6e,
2610                             0xcc, 0xb9, 0xbc, 0x22, 0x83, 0x19, 0x07, 0x22,
2611                             0xa5, 0x2d, 0xdf, 0xa5, 0xf3, 0x80, 0x85, 0x78,
2612                             0x84, 0x39, 0x6a, 0x6d, 0x6a, 0x99, 0x4f, 0xa5,
2613                             0x15, 0xfe, 0x46, 0xb0, 0xe4, 0x6c, 0xa5, 0x41,
2614                             0x3c, 0xce, 0x8f, 0x42, 0x60, 0x71, 0xa7, 0x75,
2615                             0x08, 0x40, 0x65, 0x8a, 0x82, 0xbf, 0xf5, 0x43,
2616                             0x71, 0x96, 0xa9, 0x4d, 0x44, 0x8a, 0x20, 0xbe,
2617                             0xfa, 0x4d, 0xbb, 0xc0, 0x7d, 0x31, 0x96, 0x65,
2618                             0xe7, 0x75, 0xe5, 0x3e, 0xfd, 0x92, 0x3b, 0xc9,
2619                             0x55, 0xbb, 0x16, 0x7e, 0xf7, 0xc2, 0x8c, 0xa4,
2620                             0x40, 0x1d, 0xe5, 0xef, 0x0e, 0xdf, 0xe4, 0x9a,
2621                             0x62, 0x73, 0x65, 0xfd, 0x46, 0x63, 0x25, 0x3d,
2622                             0x2b, 0xaf, 0xe5, 0x64, 0xfe, 0xa5, 0x5c, 0xcf,
2623                             0x24, 0xf3, 0xb4, 0xac, 0x64, 0xba, 0xdf, 0x4b,
2624                             0xc6, 0x96, 0x7d, 0x81, 0x2d, 0x8d, 0x97, 0xf7,
2625                             0xc5, 0x68, 0x77, 0x84, 0x32, 0x2b, 0xcc, 0x85,
2626                             0x74, 0x96, 0xf0, 0x12, 0x77, 0x61, 0xb9, 0xeb,
2627                             0x71, 0xaa, 0x82, 0xcb, 0x1c, 0xdb, 0x89, 0xc8,
2628                             0xc6, 0xb5, 0xe3, 0x5c, 0x7d, 0x39, 0x07, 0x24,
2629                             0xda, 0x39, 0x87, 0x45, 0xc0, 0x2b, 0xbb, 0x01,
2630                             0xac, 0xbc, 0x2a, 0x5c, 0x7f, 0xfc, 0xe8, 0xce,
2631                             0x6d, 0x9c, 0x6f, 0xed, 0xd3, 0xc1, 0xa1, 0xd6,
2632                             0xc5, 0x55, 0xa9, 0x66, 0x2f, 0xe1, 0xc8, 0x32,
2633                             0xa6, 0x5d, 0xa4, 0x3a, 0x98, 0x73, 0xe8, 0x45,
2634                             0xa4, 0xc7, 0xa8, 0xb4, 0xf6, 0x13, 0x03, 0xf6,
2635                             0xe9, 0x2e, 0xc4, 0x29, 0x0f, 0x84, 0xdb, 0xc4,
2636                             0x21, 0xc4, 0xc2, 0x75, 0x67, 0x89, 0x37, 0x0a },
2637                 .ilen   = 512,
2638                 .result = { 0x1a, 0x1d, 0xa9, 0x30, 0xad, 0xf9, 0x2f, 0x9b,
2639                             0xb6, 0x1d, 0xae, 0xef, 0xf0, 0x2f, 0xf8, 0x5a,
2640                             0x39, 0x3c, 0xbf, 0x2a, 0xb2, 0x45, 0xb2, 0x23,
2641                             0x1b, 0x63, 0x3c, 0xcf, 0xaa, 0xbe, 0xcf, 0x4e,
2642                             0xfa, 0xe8, 0x29, 0xc2, 0x20, 0x68, 0x2b, 0x3c,
2643                             0x2e, 0x8b, 0xf7, 0x6e, 0x25, 0xbd, 0xe3, 0x3d,
2644                             0x66, 0x27, 0xd6, 0xaf, 0xd6, 0x64, 0x3e, 0xe3,
2645                             0xe8, 0x58, 0x46, 0x97, 0x39, 0x51, 0x07, 0xde,
2646                             0xcb, 0x37, 0xbc, 0xa9, 0xc0, 0x5f, 0x75, 0xc3,
2647                             0x0e, 0x84, 0x23, 0x1d, 0x16, 0xd4, 0x1c, 0x59,
2648                             0x9c, 0x1a, 0x02, 0x55, 0xab, 0x3a, 0x97, 0x1d,
2649                             0xdf, 0xdd, 0xc7, 0x06, 0x51, 0xd7, 0x70, 0xae,
2650                             0x23, 0xc6, 0x8c, 0xf5, 0x1e, 0xa0, 0xe5, 0x82,
2651                             0xb8, 0xb2, 0xbf, 0x04, 0xa0, 0x32, 0x8e, 0x68,
2652                             0xeb, 0xaf, 0x6e, 0x2d, 0x94, 0x22, 0x2f, 0xce,
2653                             0x4c, 0xb5, 0x59, 0xe2, 0xa2, 0x2f, 0xa0, 0x98,
2654                             0x1a, 0x97, 0xc6, 0xd4, 0xb5, 0x00, 0x59, 0xf2,
2655                             0x84, 0x14, 0x72, 0xb1, 0x9a, 0x6e, 0xa3, 0x7f,
2656                             0xea, 0x20, 0xe7, 0xcb, 0x65, 0x77, 0x3a, 0xdf,
2657                             0xc8, 0x97, 0x67, 0x15, 0xc2, 0x2a, 0x27, 0xcc,
2658                             0x18, 0x55, 0xa1, 0x24, 0x0b, 0x24, 0x24, 0xaf,
2659                             0x5b, 0xec, 0x68, 0xb8, 0xc8, 0xf5, 0xba, 0x63,
2660                             0xff, 0xed, 0x89, 0xce, 0xd5, 0x3d, 0x88, 0xf3,
2661                             0x25, 0xef, 0x05, 0x7c, 0x3a, 0xef, 0xeb, 0xd8,
2662                             0x7a, 0x32, 0x0d, 0xd1, 0x1e, 0x58, 0x59, 0x99,
2663                             0x90, 0x25, 0xb5, 0x26, 0xb0, 0xe3, 0x2b, 0x6c,
2664                             0x4c, 0xa9, 0x8b, 0x84, 0x4f, 0x5e, 0x01, 0x50,
2665                             0x41, 0x30, 0x58, 0xc5, 0x62, 0x74, 0x52, 0x1d,
2666                             0x45, 0x24, 0x6a, 0x42, 0x64, 0x4f, 0x97, 0x1c,
2667                             0xa8, 0x66, 0xb5, 0x6d, 0x79, 0xd4, 0x0d, 0x48,
2668                             0xc5, 0x5f, 0xf3, 0x90, 0x32, 0xdd, 0xdd, 0xe1,
2669                             0xe4, 0xa9, 0x9f, 0xfc, 0xc3, 0x52, 0x5a, 0x46,
2670                             0xe4, 0x81, 0x84, 0x95, 0x36, 0x59, 0x7a, 0x6b,
2671                             0xaa, 0xb3, 0x60, 0xad, 0xce, 0x9f, 0x9f, 0x28,
2672                             0xe0, 0x01, 0x75, 0x22, 0xc4, 0x4e, 0xa9, 0x62,
2673                             0x5c, 0x62, 0x0d, 0x00, 0xcb, 0x13, 0xe8, 0x43,
2674                             0x72, 0xd4, 0x2d, 0x53, 0x46, 0xb5, 0xd1, 0x16,
2675                             0x22, 0x18, 0xdf, 0x34, 0x33, 0xf5, 0xd6, 0x1c,
2676                             0xb8, 0x79, 0x78, 0x97, 0x94, 0xff, 0x72, 0x13,
2677                             0x4c, 0x27, 0xfc, 0xcb, 0xbf, 0x01, 0x53, 0xa6,
2678                             0xb4, 0x50, 0x6e, 0xde, 0xdf, 0xb5, 0x43, 0xa4,
2679                             0x59, 0xdf, 0x52, 0xf9, 0x7c, 0xe0, 0x11, 0x6f,
2680                             0x2d, 0x14, 0x8e, 0x24, 0x61, 0x2c, 0xe1, 0x17,
2681                             0xcc, 0xce, 0x51, 0x0c, 0x19, 0x8a, 0x82, 0x30,
2682                             0x94, 0xd5, 0x3d, 0x6a, 0x53, 0x06, 0x5e, 0xbd,
2683                             0xb7, 0xeb, 0xfa, 0xfd, 0x27, 0x51, 0xde, 0x85,
2684                             0x1e, 0x86, 0x53, 0x11, 0x53, 0x94, 0x00, 0xee,
2685                             0x2b, 0x8c, 0x08, 0x2a, 0xbf, 0xdd, 0xae, 0x11,
2686                             0xcb, 0x1e, 0xa2, 0x07, 0x9a, 0x80, 0xcf, 0x62,
2687                             0x9b, 0x09, 0xdc, 0x95, 0x3c, 0x96, 0x8e, 0xb1,
2688                             0x09, 0xbd, 0xe4, 0xeb, 0xdb, 0xca, 0x70, 0x7a,
2689                             0x9e, 0xfa, 0x31, 0x18, 0x45, 0x3c, 0x21, 0x33,
2690                             0xb0, 0xb3, 0x2b, 0xea, 0xf3, 0x71, 0x2d, 0xe1,
2691                             0x03, 0xad, 0x1b, 0x48, 0xd4, 0x67, 0x27, 0xf0,
2692                             0x62, 0xe4, 0x3d, 0xfb, 0x9b, 0x08, 0x76, 0xe7,
2693                             0xdd, 0x2b, 0x01, 0x39, 0x04, 0x5a, 0x58, 0x7a,
2694                             0xf7, 0x11, 0x90, 0xec, 0xbd, 0x51, 0x5c, 0x32,
2695                             0x6b, 0xd7, 0x35, 0x39, 0x02, 0x6b, 0xf2, 0xa6,
2696                             0xd0, 0x0d, 0x07, 0xe1, 0x06, 0xc4, 0x5b, 0x7d,
2697                             0xe4, 0x6a, 0xd7, 0xee, 0x15, 0x1f, 0x83, 0xb4,
2698                             0xa3, 0xa7, 0x5e, 0xc3, 0x90, 0xb7, 0xef, 0xd3,
2699                             0xb7, 0x4f, 0xf8, 0x92, 0x4c, 0xb7, 0x3c, 0x29,
2700                             0xcd, 0x7e, 0x2b, 0x5d, 0x43, 0xea, 0x42, 0xe7,
2701                             0x74, 0x3f, 0x7d, 0x58, 0x88, 0x75, 0xde, 0x3e },
2702                 .rlen   = 512,
2703         }
2704 };
2705
2706 static struct cipher_testvec aes_lrw_dec_tv_template[] = {
2707         /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
2708         /* same as enc vectors with input and result reversed */
2709         { /* LRW-32-AES 1 */
2710                 .key    = { 0x45, 0x62, 0xac, 0x25, 0xf8, 0x28, 0x17, 0x6d,
2711                             0x4c, 0x26, 0x84, 0x14, 0xb5, 0x68, 0x01, 0x85,
2712                             0x25, 0x8e, 0x2a, 0x05, 0xe7, 0x3e, 0x9d, 0x03,
2713                             0xee, 0x5a, 0x83, 0x0c, 0xcc, 0x09, 0x4c, 0x87 },
2714                 .klen   = 32,
2715                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2716                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2717                 .input  = { 0xf1, 0xb2, 0x73, 0xcd, 0x65, 0xa3, 0xdf, 0x5f,
2718                             0xe9, 0x5d, 0x48, 0x92, 0x54, 0x63, 0x4e, 0xb8 },
2719                 .ilen   = 16,
2720                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2721                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2722                 .rlen   = 16,
2723         }, { /* LRW-32-AES 2 */
2724                 .key    = { 0x59, 0x70, 0x47, 0x14, 0xf5, 0x57, 0x47, 0x8c,
2725                             0xd7, 0x79, 0xe8, 0x0f, 0x54, 0x88, 0x79, 0x44,
2726                             0x0d, 0x48, 0xf0, 0xb7, 0xb1, 0x5a, 0x53, 0xea,
2727                             0x1c, 0xaa, 0x6b, 0x29, 0xc2, 0xca, 0xfb, 0xaf
2728                 },
2729                 .klen   = 32,
2730                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2731                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 },
2732                 .input  = { 0x00, 0xc8, 0x2b, 0xae, 0x95, 0xbb, 0xcd, 0xe5,
2733                             0x27, 0x4f, 0x07, 0x69, 0xb2, 0x60, 0xe1, 0x36 },
2734                 .ilen   = 16,
2735                 .result  = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2736                              0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2737                 .rlen   = 16,
2738         }, { /* LRW-32-AES 3 */
2739                 .key    = { 0xd8, 0x2a, 0x91, 0x34, 0xb2, 0x6a, 0x56, 0x50,
2740                             0x30, 0xfe, 0x69, 0xe2, 0x37, 0x7f, 0x98, 0x47,
2741                             0xcd, 0xf9, 0x0b, 0x16, 0x0c, 0x64, 0x8f, 0xb6,
2742                             0xb0, 0x0d, 0x0d, 0x1b, 0xae, 0x85, 0x87, 0x1f },
2743                 .klen   = 32,
2744                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2745                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2746                 .input  = { 0x76, 0x32, 0x21, 0x83, 0xed, 0x8f, 0xf1, 0x82,
2747                             0xf9, 0x59, 0x62, 0x03, 0x69, 0x0e, 0x5e, 0x01 },
2748                 .ilen   = 16,
2749                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2750                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2751                 .rlen   = 16,
2752         }, { /* LRW-32-AES 4 */
2753                 .key    = { 0x0f, 0x6a, 0xef, 0xf8, 0xd3, 0xd2, 0xbb, 0x15,
2754                             0x25, 0x83, 0xf7, 0x3c, 0x1f, 0x01, 0x28, 0x74,
2755                             0xca, 0xc6, 0xbc, 0x35, 0x4d, 0x4a, 0x65, 0x54,
2756                             0x90, 0xae, 0x61, 0xcf, 0x7b, 0xae, 0xbd, 0xcc,
2757                             0xad, 0xe4, 0x94, 0xc5, 0x4a, 0x29, 0xae, 0x70 },
2758                 .klen   = 40,
2759                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2760                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2761                 .input  = { 0x9c, 0x0f, 0x15, 0x2f, 0x55, 0xa2, 0xd8, 0xf0,
2762                             0xd6, 0x7b, 0x8f, 0x9e, 0x28, 0x22, 0xbc, 0x41 },
2763                 .ilen   = 16,
2764                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2765                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2766                 .rlen   = 16,
2767         }, { /* LRW-32-AES 5 */
2768                 .key    = { 0x8a, 0xd4, 0xee, 0x10, 0x2f, 0xbd, 0x81, 0xff,
2769                             0xf8, 0x86, 0xce, 0xac, 0x93, 0xc5, 0xad, 0xc6,
2770                             0xa0, 0x19, 0x07, 0xc0, 0x9d, 0xf7, 0xbb, 0xdd,
2771                             0x52, 0x13, 0xb2, 0xb7, 0xf0, 0xff, 0x11, 0xd8,
2772                             0xd6, 0x08, 0xd0, 0xcd, 0x2e, 0xb1, 0x17, 0x6f },
2773                 .klen   = 40,
2774                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2775                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2776                 .input  = { 0xd4, 0x27, 0x6a, 0x7f, 0x14, 0x91, 0x3d, 0x65,
2777                             0xc8, 0x60, 0x48, 0x02, 0x87, 0xe3, 0x34, 0x06 },
2778                 .ilen   = 16,
2779                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2780                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2781                 .rlen   = 16,
2782         }, { /* LRW-32-AES 6 */
2783                 .key    = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2784                             0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2785                             0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2786                             0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2787                             0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2788                             0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2789                 .klen   = 48,
2790                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2791                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2792                 .input  = { 0xbd, 0x06, 0xb8, 0xe1, 0xdb, 0x98, 0x89, 0x9e,
2793                             0xc4, 0x98, 0xe4, 0x91, 0xcf, 0x1c, 0x70, 0x2b },
2794                 .ilen   = 16,
2795                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2796                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2797                 .rlen   = 16,
2798         }, { /* LRW-32-AES 7 */
2799                 .key    = { 0xfb, 0x76, 0x15, 0xb2, 0x3d, 0x80, 0x89, 0x1d,
2800                             0xd4, 0x70, 0x98, 0x0b, 0xc7, 0x95, 0x84, 0xc8,
2801                             0xb2, 0xfb, 0x64, 0xce, 0x60, 0x97, 0x87, 0x8d,
2802                             0x17, 0xfc, 0xe4, 0x5a, 0x49, 0xe8, 0x30, 0xb7,
2803                             0x6e, 0x78, 0x17, 0xe7, 0x2d, 0x5e, 0x12, 0xd4,
2804                             0x60, 0x64, 0x04, 0x7a, 0xf1, 0x2f, 0x9e, 0x0c },
2805                 .klen   = 48,
2806                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2807                             0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 },
2808                 .input  = { 0x5b, 0x90, 0x8e, 0xc1, 0xab, 0xdd, 0x67, 0x5f,
2809                             0x3d, 0x69, 0x8a, 0x95, 0x53, 0xc8, 0x9c, 0xe5 },
2810                 .ilen   = 16,
2811                 .result = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2812                             0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 },
2813                 .rlen   = 16,
2814         }, {
2815 /* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
2816                 .key    = { 0xf8, 0xd4, 0x76, 0xff, 0xd6, 0x46, 0xee, 0x6c,
2817                             0x23, 0x84, 0xcb, 0x1c, 0x77, 0xd6, 0x19, 0x5d,
2818                             0xfe, 0xf1, 0xa9, 0xf3, 0x7b, 0xbc, 0x8d, 0x21,
2819                             0xa7, 0x9c, 0x21, 0xf8, 0xcb, 0x90, 0x02, 0x89,
2820                             0xa8, 0x45, 0x34, 0x8e, 0xc8, 0xc5, 0xb5, 0xf1,
2821                             0x26, 0xf5, 0x0e, 0x76, 0xfe, 0xfd, 0x1b, 0x1e },
2822                 .klen   = 48,
2823                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2824                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
2825                 .input  = { 0x1a, 0x1d, 0xa9, 0x30, 0xad, 0xf9, 0x2f, 0x9b,
2826                             0xb6, 0x1d, 0xae, 0xef, 0xf0, 0x2f, 0xf8, 0x5a,
2827                             0x39, 0x3c, 0xbf, 0x2a, 0xb2, 0x45, 0xb2, 0x23,
2828                             0x1b, 0x63, 0x3c, 0xcf, 0xaa, 0xbe, 0xcf, 0x4e,
2829                             0xfa, 0xe8, 0x29, 0xc2, 0x20, 0x68, 0x2b, 0x3c,
2830                             0x2e, 0x8b, 0xf7, 0x6e, 0x25, 0xbd, 0xe3, 0x3d,
2831                             0x66, 0x27, 0xd6, 0xaf, 0xd6, 0x64, 0x3e, 0xe3,
2832                             0xe8, 0x58, 0x46, 0x97, 0x39, 0x51, 0x07, 0xde,
2833                             0xcb, 0x37, 0xbc, 0xa9, 0xc0, 0x5f, 0x75, 0xc3,
2834                             0x0e, 0x84, 0x23, 0x1d, 0x16, 0xd4, 0x1c, 0x59,
2835                             0x9c, 0x1a, 0x02, 0x55, 0xab, 0x3a, 0x97, 0x1d,
2836                             0xdf, 0xdd, 0xc7, 0x06, 0x51, 0xd7, 0x70, 0xae,
2837                             0x23, 0xc6, 0x8c, 0xf5, 0x1e, 0xa0, 0xe5, 0x82,
2838                             0xb8, 0xb2, 0xbf, 0x04, 0xa0, 0x32, 0x8e, 0x68,
2839                             0xeb, 0xaf, 0x6e, 0x2d, 0x94, 0x22, 0x2f, 0xce,
2840                             0x4c, 0xb5, 0x59, 0xe2, 0xa2, 0x2f, 0xa0, 0x98,
2841                             0x1a, 0x97, 0xc6, 0xd4, 0xb5, 0x00, 0x59, 0xf2,
2842                             0x84, 0x14, 0x72, 0xb1, 0x9a, 0x6e, 0xa3, 0x7f,
2843                             0xea, 0x20, 0xe7, 0xcb, 0x65, 0x77, 0x3a, 0xdf,
2844                             0xc8, 0x97, 0x67, 0x15, 0xc2, 0x2a, 0x27, 0xcc,
2845                             0x18, 0x55, 0xa1, 0x24, 0x0b, 0x24, 0x24, 0xaf,
2846                             0x5b, 0xec, 0x68, 0xb8, 0xc8, 0xf5, 0xba, 0x63,
2847                             0xff, 0xed, 0x89, 0xce, 0xd5, 0x3d, 0x88, 0xf3,
2848                             0x25, 0xef, 0x05, 0x7c, 0x3a, 0xef, 0xeb, 0xd8,
2849                             0x7a, 0x32, 0x0d, 0xd1, 0x1e, 0x58, 0x59, 0x99,
2850                             0x90, 0x25, 0xb5, 0x26, 0xb0, 0xe3, 0x2b, 0x6c,
2851                             0x4c, 0xa9, 0x8b, 0x84, 0x4f, 0x5e, 0x01, 0x50,
2852                             0x41, 0x30, 0x58, 0xc5, 0x62, 0x74, 0x52, 0x1d,
2853                             0x45, 0x24, 0x6a, 0x42, 0x64, 0x4f, 0x97, 0x1c,
2854                             0xa8, 0x66, 0xb5, 0x6d, 0x79, 0xd4, 0x0d, 0x48,
2855                             0xc5, 0x5f, 0xf3, 0x90, 0x32, 0xdd, 0xdd, 0xe1,
2856                             0xe4, 0xa9, 0x9f, 0xfc, 0xc3, 0x52, 0x5a, 0x46,
2857                             0xe4, 0x81, 0x84, 0x95, 0x36, 0x59, 0x7a, 0x6b,
2858                             0xaa, 0xb3, 0x60, 0xad, 0xce, 0x9f, 0x9f, 0x28,
2859                             0xe0, 0x01, 0x75, 0x22, 0xc4, 0x4e, 0xa9, 0x62,
2860                             0x5c, 0x62, 0x0d, 0x00, 0xcb, 0x13, 0xe8, 0x43,
2861                             0x72, 0xd4, 0x2d, 0x53, 0x46, 0xb5, 0xd1, 0x16,
2862                             0x22, 0x18, 0xdf, 0x34, 0x33, 0xf5, 0xd6, 0x1c,
2863                             0xb8, 0x79, 0x78, 0x97, 0x94, 0xff, 0x72, 0x13,
2864                             0x4c, 0x27, 0xfc, 0xcb, 0xbf, 0x01, 0x53, 0xa6,
2865                             0xb4, 0x50, 0x6e, 0xde, 0xdf, 0xb5, 0x43, 0xa4,
2866                             0x59, 0xdf, 0x52, 0xf9, 0x7c, 0xe0, 0x11, 0x6f,
2867                             0x2d, 0x14, 0x8e, 0x24, 0x61, 0x2c, 0xe1, 0x17,
2868                             0xcc, 0xce, 0x51, 0x0c, 0x19, 0x8a, 0x82, 0x30,
2869                             0x94, 0xd5, 0x3d, 0x6a, 0x53, 0x06, 0x5e, 0xbd,
2870                             0xb7, 0xeb, 0xfa, 0xfd, 0x27, 0x51, 0xde, 0x85,
2871                             0x1e, 0x86, 0x53, 0x11, 0x53, 0x94, 0x00, 0xee,
2872                             0x2b, 0x8c, 0x08, 0x2a, 0xbf, 0xdd, 0xae, 0x11,
2873                             0xcb, 0x1e, 0xa2, 0x07, 0x9a, 0x80, 0xcf, 0x62,
2874                             0x9b, 0x09, 0xdc, 0x95, 0x3c, 0x96, 0x8e, 0xb1,
2875                             0x09, 0xbd, 0xe4, 0xeb, 0xdb, 0xca, 0x70, 0x7a,
2876                             0x9e, 0xfa, 0x31, 0x18, 0x45, 0x3c, 0x21, 0x33,
2877                             0xb0, 0xb3, 0x2b, 0xea, 0xf3, 0x71, 0x2d, 0xe1,
2878                             0x03, 0xad, 0x1b, 0x48, 0xd4, 0x67, 0x27, 0xf0,
2879                             0x62, 0xe4, 0x3d, 0xfb, 0x9b, 0x08, 0x76, 0xe7,
2880                             0xdd, 0x2b, 0x01, 0x39, 0x04, 0x5a, 0x58, 0x7a,
2881                             0xf7, 0x11, 0x90, 0xec, 0xbd, 0x51, 0x5c, 0x32,
2882                             0x6b, 0xd7, 0x35, 0x39, 0x02, 0x6b, 0xf2, 0xa6,
2883                             0xd0, 0x0d, 0x07, 0xe1, 0x06, 0xc4, 0x5b, 0x7d,
2884                             0xe4, 0x6a, 0xd7, 0xee, 0x15, 0x1f, 0x83, 0xb4,
2885                             0xa3, 0xa7, 0x5e, 0xc3, 0x90, 0xb7, 0xef, 0xd3,
2886                             0xb7, 0x4f, 0xf8, 0x92, 0x4c, 0xb7, 0x3c, 0x29,
2887                             0xcd, 0x7e, 0x2b, 0x5d, 0x43, 0xea, 0x42, 0xe7,
2888                             0x74, 0x3f, 0x7d, 0x58, 0x88, 0x75, 0xde, 0x3e },
2889                 .ilen   = 512,
2890                 .result = { 0x05, 0x11, 0xb7, 0x18, 0xab, 0xc6, 0x2d, 0xac,
2891                             0x70, 0x5d, 0xf6, 0x22, 0x94, 0xcd, 0xe5, 0x6c,
2892                             0x17, 0x6b, 0xf6, 0x1c, 0xf0, 0xf3, 0x6e, 0xf8,
2893                             0x50, 0x38, 0x1f, 0x71, 0x49, 0xb6, 0x57, 0xd6,
2894                             0x8f, 0xcb, 0x8d, 0x6b, 0xe3, 0xa6, 0x29, 0x90,
2895                             0xfe, 0x2a, 0x62, 0x82, 0xae, 0x6d, 0x8b, 0xf6,
2896                             0xad, 0x1e, 0x9e, 0x20, 0x5f, 0x38, 0xbe, 0x04,
2897                             0xda, 0x10, 0x8e, 0xed, 0xa2, 0xa4, 0x87, 0xab,
2898                             0xda, 0x6b, 0xb4, 0x0c, 0x75, 0xba, 0xd3, 0x7c,
2899                             0xc9, 0xac, 0x42, 0x31, 0x95, 0x7c, 0xc9, 0x04,
2900                             0xeb, 0xd5, 0x6e, 0x32, 0x69, 0x8a, 0xdb, 0xa6,
2901                             0x15, 0xd7, 0x3f, 0x4f, 0x2f, 0x66, 0x69, 0x03,
2902                             0x9c, 0x1f, 0x54, 0x0f, 0xde, 0x1f, 0xf3, 0x65,
2903                             0x4c, 0x96, 0x12, 0xed, 0x7c, 0x92, 0x03, 0x01,
2904                             0x6f, 0xbc, 0x35, 0x93, 0xac, 0xf1, 0x27, 0xf1,
2905                             0xb4, 0x96, 0x82, 0x5a, 0x5f, 0xb0, 0xa0, 0x50,
2906                             0x89, 0xa4, 0x8e, 0x66, 0x44, 0x85, 0xcc, 0xfd,
2907                             0x33, 0x14, 0x70, 0xe3, 0x96, 0xb2, 0xc3, 0xd3,
2908                             0xbb, 0x54, 0x5a, 0x1a, 0xf9, 0x74, 0xa2, 0xc5,
2909                             0x2d, 0x64, 0x75, 0xdd, 0xb4, 0x54, 0xe6, 0x74,
2910                             0x8c, 0xd3, 0x9d, 0x9e, 0x86, 0xab, 0x51, 0x53,
2911                             0xb7, 0x93, 0x3e, 0x6f, 0xd0, 0x4e, 0x2c, 0x40,
2912                             0xf6, 0xa8, 0x2e, 0x3e, 0x9d, 0xf4, 0x66, 0xa5,
2913                             0x76, 0x12, 0x73, 0x44, 0x1a, 0x56, 0xd7, 0x72,
2914                             0x88, 0xcd, 0x21, 0x8c, 0x4c, 0x0f, 0xfe, 0xda,
2915                             0x95, 0xe0, 0x3a, 0xa6, 0xa5, 0x84, 0x46, 0xcd,
2916                             0xd5, 0x3e, 0x9d, 0x3a, 0xe2, 0x67, 0xe6, 0x60,
2917                             0x1a, 0xe2, 0x70, 0x85, 0x58, 0xc2, 0x1b, 0x09,
2918                             0xe1, 0xd7, 0x2c, 0xca, 0xad, 0xa8, 0x8f, 0xf9,
2919                             0xac, 0xb3, 0x0e, 0xdb, 0xca, 0x2e, 0xe2, 0xb8,
2920                             0x51, 0x71, 0xd9, 0x3c, 0x6c, 0xf1, 0x56, 0xf8,
2921                             0xea, 0x9c, 0xf1, 0xfb, 0x0c, 0xe6, 0xb7, 0x10,
2922                             0x1c, 0xf8, 0xa9, 0x7c, 0xe8, 0x53, 0x35, 0xc1,
2923                             0x90, 0x3e, 0x76, 0x4a, 0x74, 0xa4, 0x21, 0x2c,
2924                             0xf6, 0x2c, 0x4e, 0x0f, 0x94, 0x3a, 0x88, 0x2e,
2925                             0x41, 0x09, 0x6a, 0x33, 0x7d, 0xf6, 0xdd, 0x3f,
2926                             0x8d, 0x23, 0x31, 0x74, 0x84, 0xeb, 0x88, 0x6e,
2927                             0xcc, 0xb9, 0xbc, 0x22, 0x83, 0x19, 0x07, 0x22,
2928                             0xa5, 0x2d, 0xdf, 0xa5, 0xf3, 0x80, 0x85, 0x78,
2929                             0x84, 0x39, 0x6a, 0x6d, 0x6a, 0x99, 0x4f, 0xa5,
2930                             0x15, 0xfe, 0x46, 0xb0, 0xe4, 0x6c, 0xa5, 0x41,
2931                             0x3c, 0xce, 0x8f, 0x42, 0x60, 0x71, 0xa7, 0x75,
2932                             0x08, 0x40, 0x65, 0x8a, 0x82, 0xbf, 0xf5, 0x43,
2933                             0x71, 0x96, 0xa9, 0x4d, 0x44, 0x8a, 0x20, 0xbe,
2934                             0xfa, 0x4d, 0xbb, 0xc0, 0x7d, 0x31, 0x96, 0x65,
2935                             0xe7, 0x75, 0xe5, 0x3e, 0xfd, 0x92, 0x3b, 0xc9,
2936                             0x55, 0xbb, 0x16, 0x7e, 0xf7, 0xc2, 0x8c, 0xa4,
2937                             0x40, 0x1d, 0xe5, 0xef, 0x0e, 0xdf, 0xe4, 0x9a,
2938                             0x62, 0x73, 0x65, 0xfd, 0x46, 0x63, 0x25, 0x3d,
2939                             0x2b, 0xaf, 0xe5, 0x64, 0xfe, 0xa5, 0x5c, 0xcf,
2940                             0x24, 0xf3, 0xb4, 0xac, 0x64, 0xba, 0xdf, 0x4b,
2941                             0xc6, 0x96, 0x7d, 0x81, 0x2d, 0x8d, 0x97, 0xf7,
2942                             0xc5, 0x68, 0x77, 0x84, 0x32, 0x2b, 0xcc, 0x85,
2943                             0x74, 0x96, 0xf0, 0x12, 0x77, 0x61, 0xb9, 0xeb,
2944                             0x71, 0xaa, 0x82, 0xcb, 0x1c, 0xdb, 0x89, 0xc8,
2945                             0xc6, 0xb5, 0xe3, 0x5c, 0x7d, 0x39, 0x07, 0x24,
2946                             0xda, 0x39, 0x87, 0x45, 0xc0, 0x2b, 0xbb, 0x01,
2947                             0xac, 0xbc, 0x2a, 0x5c, 0x7f, 0xfc, 0xe8, 0xce,
2948                             0x6d, 0x9c, 0x6f, 0xed, 0xd3, 0xc1, 0xa1, 0xd6,
2949                             0xc5, 0x55, 0xa9, 0x66, 0x2f, 0xe1, 0xc8, 0x32,
2950                             0xa6, 0x5d, 0xa4, 0x3a, 0x98, 0x73, 0xe8, 0x45,
2951                             0xa4, 0xc7, 0xa8, 0xb4, 0xf6, 0x13, 0x03, 0xf6,
2952                             0xe9, 0x2e, 0xc4, 0x29, 0x0f, 0x84, 0xdb, 0xc4,
2953                             0x21, 0xc4, 0xc2, 0x75, 0x67, 0x89, 0x37, 0x0a },
2954                 .rlen   = 512,
2955         }
2956 };
2957
2958 static struct cipher_testvec aes_xts_enc_tv_template[] = {
2959         /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
2960         { /* XTS-AES 1 */
2961                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2962                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2963                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2964                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2965                 .klen   = 32,
2966                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2967                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2968                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2969                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2970                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2971                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2972                 .ilen   = 32,
2973                 .result = { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec,
2974                             0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92,
2975                             0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85,
2976                             0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e },
2977                 .rlen   = 32,
2978         }, { /* XTS-AES 2 */
2979                 .key    = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
2980                             0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
2981                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
2982                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
2983                 .klen   = 32,
2984                 .iv     = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
2985                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2986                 .input  = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2987                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2988                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
2989                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
2990                 .ilen   = 32,
2991                 .result = { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e,
2992                             0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b,
2993                             0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4,
2994                             0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0 },
2995                 .rlen   = 32,
2996         }, { /* XTS-AES 3 */
2997                 .key    = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
2998                             0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
2999                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3000                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3001                 .klen   = 32,
3002                 .iv     = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3003                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3004                 .input  = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3005                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3006                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3007                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3008                 .ilen   = 32,
3009                 .result = { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a,
3010                             0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2,
3011                             0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53,
3012                             0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89 },
3013                 .rlen   = 32,
3014         }, { /* XTS-AES 4 */
3015                 .key    = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
3016                             0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
3017                             0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
3018                             0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95 },
3019                 .klen   = 32,
3020                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3021                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3022                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3023                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3024                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3025                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3026                             0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3027                             0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3028                             0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3029                             0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3030                             0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3031                             0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3032                             0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3033                             0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3034                             0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3035                             0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3036                             0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3037                             0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3038                             0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3039                             0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3040                             0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3041                             0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3042                             0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3043                             0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3044                             0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3045                             0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3046                             0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3047                             0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3048                             0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3049                             0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3050                             0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3051                             0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3052                             0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3053                             0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3054                             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3055                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3056                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3057                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3058                             0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3059                             0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3060                             0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3061                             0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3062                             0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3063                             0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3064                             0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3065                             0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3066                             0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3067                             0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3068                             0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3069                             0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3070                             0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3071                             0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3072                             0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3073                             0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3074                             0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3075                             0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3076                             0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3077                             0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3078                             0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3079                             0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3080                             0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3081                             0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3082                             0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3083                             0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3084                             0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3085                             0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
3086                 .ilen   = 512,
3087                 .result = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
3088                             0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
3089                             0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
3090                             0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
3091                             0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
3092                             0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
3093                             0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
3094                             0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
3095                             0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
3096                             0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
3097                             0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
3098                             0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
3099                             0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
3100                             0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
3101                             0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
3102                             0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
3103                             0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
3104                             0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
3105                             0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
3106                             0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
3107                             0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
3108                             0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
3109                             0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
3110                             0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
3111                             0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
3112                             0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
3113                             0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
3114                             0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
3115                             0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
3116                             0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
3117                             0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
3118                             0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
3119                             0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
3120                             0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
3121                             0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
3122                             0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
3123                             0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
3124                             0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
3125                             0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
3126                             0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
3127                             0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
3128                             0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
3129                             0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
3130                             0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
3131                             0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
3132                             0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
3133                             0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
3134                             0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
3135                             0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
3136                             0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
3137                             0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
3138                             0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
3139                             0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
3140                             0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
3141                             0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
3142                             0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
3143                             0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
3144                             0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
3145                             0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
3146                             0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
3147                             0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
3148                             0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
3149                             0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
3150                             0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68 },
3151                 .rlen   = 512,
3152         }
3153 };
3154
3155 static struct cipher_testvec aes_xts_dec_tv_template[] = {
3156         /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3157         { /* XTS-AES 1 */
3158                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3159                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3160                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3161                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3162                 .klen   = 32,
3163                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3164                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3165                 .input = { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec,
3166                            0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92,
3167                            0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85,
3168                            0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e },
3169                 .ilen   = 32,
3170                 .result  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3171                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3172                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3173                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3174                 .rlen   = 32,
3175         }, { /* XTS-AES 2 */
3176                 .key    = { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
3177                             0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
3178                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3179                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3180                 .klen   = 32,
3181                 .iv     = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3182                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3183                 .input  = { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e,
3184                             0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b,
3185                             0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4,
3186                             0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0 },
3187                 .ilen   = 32,
3188                 .result = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3189                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3190                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3191                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3192                 .rlen   = 32,
3193         }, { /* XTS-AES 3 */
3194                 .key    = { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
3195                             0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
3196                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
3197                             0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
3198                 .klen   = 32,
3199                 .iv     = { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
3200                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3201                 .input = { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a,
3202                             0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2,
3203                             0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53,
3204                             0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89 },
3205                 .ilen   = 32,
3206                 .result  = { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3207                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3208                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
3209                             0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
3210                 .rlen   = 32,
3211         }, { /* XTS-AES 4 */
3212                 .key    = { 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
3213                             0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
3214                             0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
3215                             0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95 },
3216                 .klen   = 32,
3217                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3218                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3219                 .input  = { 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
3220                             0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
3221                             0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
3222                             0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
3223                             0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
3224                             0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
3225                             0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
3226                             0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
3227                             0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
3228                             0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
3229                             0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
3230                             0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
3231                             0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
3232                             0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
3233                             0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
3234                             0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
3235                             0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
3236                             0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
3237                             0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
3238                             0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
3239                             0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
3240                             0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
3241                             0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
3242                             0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
3243                             0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
3244                             0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
3245                             0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
3246                             0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
3247                             0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
3248                             0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
3249                             0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
3250                             0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
3251                             0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
3252                             0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
3253                             0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
3254                             0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
3255                             0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
3256                             0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
3257                             0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
3258                             0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
3259                             0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
3260                             0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
3261                             0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
3262                             0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
3263                             0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
3264                             0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
3265                             0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
3266                             0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
3267                             0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
3268                             0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
3269                             0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
3270                             0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
3271                             0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
3272                             0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
3273                             0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
3274                             0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
3275                             0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
3276                             0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
3277                             0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
3278                             0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
3279                             0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
3280                             0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
3281                             0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
3282                             0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68 },
3283                 .ilen   = 512,
3284                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3285                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3286                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3287                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3288                             0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3289                             0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3290                             0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3291                             0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3292                             0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3293                             0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3294                             0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3295                             0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3296                             0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3297                             0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3298                             0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3299                             0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3300                             0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3301                             0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3302                             0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3303                             0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3304                             0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3305                             0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3306                             0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3307                             0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3308                             0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3309                             0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3310                             0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3311                             0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3312                             0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3313                             0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3314                             0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3315                             0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3316                             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3317                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3318                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3319                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3320                             0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3321                             0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3322                             0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3323                             0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3324                             0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3325                             0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3326                             0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3327                             0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3328                             0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3329                             0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3330                             0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3331                             0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3332                             0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3333                             0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3334                             0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3335                             0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3336                             0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3337                             0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3338                             0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3339                             0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3340                             0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3341                             0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3342                             0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3343                             0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3344                             0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3345                             0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3346                             0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3347                             0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
3348                 .rlen   = 512,
3349         }
3350 };
3351
3352
3353 static struct cipher_testvec aes_ctr_enc_tv_template[] = {
3354         { /* From RFC 3686 */
3355                 .key    = { 0xae, 0x68, 0x52, 0xf8, 0x12, 0x10, 0x67, 0xcc,
3356                             0x4b, 0xf7, 0xa5, 0x76, 0x55, 0x77, 0xf3, 0x9e,
3357                             0x00, 0x00, 0x00, 0x30 },
3358                 .klen   = 20,
3359                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
3360                 .input  = { "Single block msg" },
3361                 .ilen   = 16,
3362                 .result = { 0xe4, 0x09, 0x5d, 0x4f, 0xb7, 0xa7, 0xb3, 0x79,
3363                             0x2d, 0x61, 0x75, 0xa3, 0x26, 0x13, 0x11, 0xb8 },
3364                 .rlen   = 16,
3365         }, {
3366                 .key    = { 0x7e, 0x24, 0x06, 0x78, 0x17, 0xfa, 0xe0, 0xd7,
3367                             0x43, 0xd6, 0xce, 0x1f, 0x32, 0x53, 0x91, 0x63,
3368                             0x00, 0x6c, 0xb6, 0xdb },
3369                 .klen   = 20,
3370                 .iv     = { 0xc0, 0x54, 0x3b, 0x59, 0xda, 0x48, 0xd9, 0x0b },
3371                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3372                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3373                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3374                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3375                 .ilen   = 32,
3376                 .result = { 0x51, 0x04, 0xa1, 0x06, 0x16, 0x8a, 0x72, 0xd9,
3377                             0x79, 0x0d, 0x41, 0xee, 0x8e, 0xda, 0xd3, 0x88,
3378                             0xeb, 0x2e, 0x1e, 0xfc, 0x46, 0xda, 0x57, 0xc8,
3379                             0xfc, 0xe6, 0x30, 0xdf, 0x91, 0x41, 0xbe, 0x28 },
3380                 .rlen   = 32,
3381         }, {
3382                 .key    = { 0x16, 0xaf, 0x5b, 0x14, 0x5f, 0xc9, 0xf5, 0x79,
3383                             0xc1, 0x75, 0xf9, 0x3e, 0x3b, 0xfb, 0x0e, 0xed,
3384                             0x86, 0x3d, 0x06, 0xcc, 0xfd, 0xb7, 0x85, 0x15,
3385                             0x00, 0x00, 0x00, 0x48 },
3386                 .klen   = 28,
3387                 .iv     = { 0x36, 0x73, 0x3c, 0x14, 0x7d, 0x6d, 0x93, 0xcb },
3388                 .input  = { "Single block msg" },
3389                 .ilen   = 16,
3390                 .result = { 0x4b, 0x55, 0x38, 0x4f, 0xe2, 0x59, 0xc9, 0xc8,
3391                             0x4e, 0x79, 0x35, 0xa0, 0x03, 0xcb, 0xe9, 0x28 },
3392                 .rlen   = 16,
3393         }, {
3394                 .key    = { 0x7c, 0x5c, 0xb2, 0x40, 0x1b, 0x3d, 0xc3, 0x3c,
3395                             0x19, 0xe7, 0x34, 0x08, 0x19, 0xe0, 0xf6, 0x9c,
3396                             0x67, 0x8c, 0x3d, 0xb8, 0xe6, 0xf6, 0xa9, 0x1a,
3397                             0x00, 0x96, 0xb0, 0x3b },
3398                 .klen   = 28,
3399                 .iv     = { 0x02, 0x0c, 0x6e, 0xad, 0xc2, 0xcb, 0x50, 0x0d },
3400                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3401                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3402                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3403                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3404                 .ilen   = 32,
3405                 .result = { 0x45, 0x32, 0x43, 0xfc, 0x60, 0x9b, 0x23, 0x32,
3406                             0x7e, 0xdf, 0xaa, 0xfa, 0x71, 0x31, 0xcd, 0x9f,
3407                             0x84, 0x90, 0x70, 0x1c, 0x5a, 0xd4, 0xa7, 0x9c,
3408                             0xfc, 0x1f, 0xe0, 0xff, 0x42, 0xf4, 0xfb, 0x00 },
3409                 .rlen   = 32,
3410         }, {
3411                 .key    = { 0x77, 0x6b, 0xef, 0xf2, 0x85, 0x1d, 0xb0, 0x6f,
3412                             0x4c, 0x8a, 0x05, 0x42, 0xc8, 0x69, 0x6f, 0x6c,
3413                             0x6a, 0x81, 0xaf, 0x1e, 0xec, 0x96, 0xb4, 0xd3,
3414                             0x7f, 0xc1, 0xd6, 0x89, 0xe6, 0xc1, 0xc1, 0x04,
3415                             0x00, 0x00, 0x00, 0x60 },
3416                 .klen   = 36,
3417                 .iv     = { 0xdb, 0x56, 0x72, 0xc9, 0x7a, 0xa8, 0xf0, 0xb2 },
3418                 .input  = { "Single block msg" },
3419                 .ilen   = 16,
3420                 .result = { 0x14, 0x5a, 0xd0, 0x1d, 0xbf, 0x82, 0x4e, 0xc7,
3421                             0x56, 0x08, 0x63, 0xdc, 0x71, 0xe3, 0xe0, 0xc0 },
3422                 .rlen   = 16,
3423         }, {
3424                 .key    = { 0xf6, 0xd6, 0x6d, 0x6b, 0xd5, 0x2d, 0x59, 0xbb,
3425                             0x07, 0x96, 0x36, 0x58, 0x79, 0xef, 0xf8, 0x86,
3426                             0xc6, 0x6d, 0xd5, 0x1a, 0x5b, 0x6a, 0x99, 0x74,
3427                             0x4b, 0x50, 0x59, 0x0c, 0x87, 0xa2, 0x38, 0x84,
3428                             0x00, 0xfa, 0xac, 0x24 },
3429                 .klen   = 36,
3430                 .iv     = { 0xc1, 0x58, 0x5e, 0xf1, 0x5a, 0x43, 0xd8, 0x75 },
3431                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3432                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3433                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3434                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
3435                 .ilen   = 32,
3436                 .result = { 0xf0, 0x5e, 0x23, 0x1b, 0x38, 0x94, 0x61, 0x2c,
3437                             0x49, 0xee, 0x00, 0x0b, 0x80, 0x4e, 0xb2, 0xa9,
3438                             0xb8, 0x30, 0x6b, 0x50, 0x8f, 0x83, 0x9d, 0x6a,
3439                             0x55, 0x30, 0x83, 0x1d, 0x93, 0x44, 0xaf, 0x1c },
3440                 .rlen   = 32,
3441         }, {
3442         // generated using Crypto++
3443                 .key = {
3444                         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3445                         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3446                         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3447                         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3448                         0x00, 0x00, 0x00, 0x00,
3449                 },
3450                 .klen = 32 + 4,
3451                 .iv = {
3452                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3453                 },
3454                 .input = {
3455                         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3456                         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
3457                         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3458                         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
3459                         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3460                         0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
3461                         0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3462                         0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3463                         0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3464                         0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
3465                         0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3466                         0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
3467                         0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3468                         0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
3469                         0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3470                         0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
3471                         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3472                         0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
3473                         0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3474                         0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
3475                         0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
3476                         0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
3477                         0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
3478                         0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
3479                         0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
3480                         0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
3481                         0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
3482                         0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
3483                         0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
3484                         0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
3485                         0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
3486                         0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
3487                         0x00, 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15,
3488                         0x18, 0x1b, 0x1e, 0x21, 0x24, 0x27, 0x2a, 0x2d,
3489                         0x30, 0x33, 0x36, 0x39, 0x3c, 0x3f, 0x42, 0x45,
3490                         0x48, 0x4b, 0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d,
3491                         0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x72, 0x75,
3492                         0x78, 0x7b, 0x7e, 0x81, 0x84, 0x87, 0x8a, 0x8d,
3493                         0x90, 0x93, 0x96, 0x99, 0x9c, 0x9f, 0xa2, 0xa5,
3494                         0xa8, 0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xba, 0xbd,
3495                         0xc0, 0xc3, 0xc6, 0xc9, 0xcc, 0xcf, 0xd2, 0xd5,
3496                         0xd8, 0xdb, 0xde, 0xe1, 0xe4, 0xe7, 0xea, 0xed,
3497                         0xf0, 0xf3, 0xf6, 0xf9, 0xfc, 0xff, 0x02, 0x05,
3498                         0x08, 0x0b, 0x0e, 0x11, 0x14, 0x17, 0x1a, 0x1d,
3499                         0x20, 0x23, 0x26, 0x29, 0x2c, 0x2f, 0x32, 0x35,
3500                         0x38, 0x3b, 0x3e, 0x41, 0x44, 0x47, 0x4a, 0x4d,
3501                         0x50, 0x53, 0x56, 0x59, 0x5c, 0x5f, 0x62, 0x65,
3502                         0x68, 0x6b, 0x6e, 0x71, 0x74, 0x77, 0x7a, 0x7d,
3503                         0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95,
3504                         0x98, 0x9b, 0x9e, 0xa1, 0xa4, 0xa7, 0xaa, 0xad,
3505                         0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc2, 0xc5,
3506                         0xc8, 0xcb, 0xce, 0xd1, 0xd4, 0xd7, 0xda, 0xdd,
3507                         0xe0, 0xe3, 0xe6, 0xe9, 0xec, 0xef, 0xf2, 0xf5,
3508                         0xf8, 0xfb, 0xfe, 0x01, 0x04, 0x07, 0x0a, 0x0d,
3509                         0x10, 0x13, 0x16, 0x19, 0x1c, 0x1f, 0x22, 0x25,
3510                         0x28, 0x2b, 0x2e, 0x31, 0x34, 0x37, 0x3a, 0x3d,
3511                         0x40, 0x43, 0x46, 0x49, 0x4c, 0x4f, 0x52, 0x55,
3512                         0x58, 0x5b, 0x5e, 0x61, 0x64, 0x67, 0x6a, 0x6d,
3513                         0x70, 0x73, 0x76, 0x79, 0x7c, 0x7f, 0x82, 0x85,
3514                         0x88, 0x8b, 0x8e, 0x91, 0x94, 0x97, 0x9a, 0x9d,
3515                         0xa0, 0xa3, 0xa6, 0xa9, 0xac, 0xaf, 0xb2, 0xb5,
3516                         0xb8, 0xbb, 0xbe, 0xc1, 0xc4, 0xc7, 0xca, 0xcd,
3517                         0xd0, 0xd3, 0xd6, 0xd9, 0xdc, 0xdf, 0xe2, 0xe5,
3518                         0xe8, 0xeb, 0xee, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd,
3519                         0x00, 0x05, 0x0a, 0x0f, 0x14, 0x19, 0x1e, 0x23,
3520                         0x28, 0x2d, 0x32, 0x37, 0x3c, 0x41, 0x46, 0x4b,
3521                         0x50, 0x55, 0x5a, 0x5f, 0x64, 0x69, 0x6e, 0x73,
3522                         0x78, 0x7d, 0x82, 0x87, 0x8c, 0x91, 0x96, 0x9b,
3523                         0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb9, 0xbe, 0xc3,
3524                         0xc8, 0xcd, 0xd2, 0xd7, 0xdc, 0xe1, 0xe6, 0xeb,
3525                         0xf0, 0xf5, 0xfa, 0xff, 0x04, 0x09, 0x0e, 0x13,
3526                         0x18, 0x1d, 0x22, 0x27, 0x2c, 0x31, 0x36, 0x3b,
3527                         0x40, 0x45, 0x4a, 0x4f, 0x54, 0x59, 0x5e, 0x63,
3528                         0x68, 0x6d, 0x72, 0x77, 0x7c, 0x81, 0x86, 0x8b,
3529                         0x90, 0x95, 0x9a, 0x9f, 0xa4, 0xa9, 0xae, 0xb3,
3530                         0xb8, 0xbd, 0xc2, 0xc7, 0xcc, 0xd1, 0xd6, 0xdb,
3531                         0xe0, 0xe5, 0xea, 0xef, 0xf4, 0xf9, 0xfe, 0x03,
3532                         0x08, 0x0d, 0x12, 0x17, 0x1c, 0x21, 0x26, 0x2b,
3533                         0x30, 0x35, 0x3a, 0x3f, 0x44, 0x49, 0x4e, 0x53,
3534                         0x58, 0x5d, 0x62, 0x67, 0x6c, 0x71, 0x76, 0x7b,
3535                         0x80, 0x85, 0x8a, 0x8f, 0x94, 0x99, 0x9e, 0xa3,
3536                         0xa8, 0xad, 0xb2, 0xb7, 0xbc, 0xc1, 0xc6, 0xcb,
3537                         0xd0, 0xd5, 0xda, 0xdf, 0xe4, 0xe9, 0xee, 0xf3,
3538                         0xf8, 0xfd, 0x02, 0x07, 0x0c, 0x11, 0x16, 0x1b,
3539                         0x20, 0x25, 0x2a, 0x2f, 0x34, 0x39, 0x3e, 0x43,
3540                         0x48, 0x4d, 0x52, 0x57, 0x5c, 0x61, 0x66, 0x6b,
3541                         0x70, 0x75, 0x7a, 0x7f, 0x84, 0x89, 0x8e, 0x93,
3542                         0x98, 0x9d, 0xa2, 0xa7, 0xac, 0xb1, 0xb6, 0xbb,
3543                         0xc0, 0xc5, 0xca, 0xcf, 0xd4, 0xd9, 0xde, 0xe3,
3544                         0xe8, 0xed, 0xf2, 0xf7, 0xfc, 0x01, 0x06, 0x0b,
3545                         0x10, 0x15, 0x1a, 0x1f, 0x24, 0x29, 0x2e, 0x33,
3546                         0x38, 0x3d, 0x42, 0x47, 0x4c, 0x51, 0x56, 0x5b,
3547                         0x60, 0x65, 0x6a, 0x6f, 0x74, 0x79, 0x7e, 0x83,
3548                         0x88, 0x8d, 0x92, 0x97, 0x9c, 0xa1, 0xa6, 0xab,
3549                         0xb0, 0xb5, 0xba, 0xbf, 0xc4, 0xc9, 0xce, 0xd3,
3550                         0xd8, 0xdd, 0xe2, 0xe7, 0xec, 0xf1, 0xf6, 0xfb,
3551                         0x00, 0x07, 0x0e, 0x15, 0x1c, 0x23, 0x2a, 0x31,
3552                         0x38, 0x3f, 0x46, 0x4d, 0x54, 0x5b, 0x62, 0x69,
3553                         0x70, 0x77, 0x7e, 0x85, 0x8c, 0x93, 0x9a, 0xa1,
3554                         0xa8, 0xaf, 0xb6, 0xbd, 0xc4, 0xcb, 0xd2, 0xd9,
3555                         0xe0, 0xe7, 0xee, 0xf5, 0xfc, 0x03, 0x0a, 0x11,
3556                         0x18, 0x1f, 0x26, 0x2d, 0x34, 0x3b, 0x42, 0x49,
3557                         0x50, 0x57, 0x5e, 0x65, 0x6c, 0x73, 0x7a, 0x81,
3558                         0x88, 0x8f, 0x96, 0x9d, 0xa4, 0xab, 0xb2, 0xb9,
3559                         0xc0, 0xc7, 0xce, 0xd5, 0xdc, 0xe3, 0xea, 0xf1,
3560                         0xf8, 0xff, 0x06, 0x0d, 0x14, 0x1b, 0x22, 0x29,
3561                         0x30, 0x37, 0x3e, 0x45, 0x4c, 0x53, 0x5a, 0x61,
3562                         0x68, 0x6f, 0x76, 0x7d, 0x84, 0x8b, 0x92, 0x99,
3563                         0xa0, 0xa7, 0xae, 0xb5, 0xbc, 0xc3, 0xca, 0xd1,
3564                         0xd8, 0xdf, 0xe6, 0xed, 0xf4, 0xfb, 0x02, 0x09,
3565                         0x10, 0x17, 0x1e, 0x25, 0x2c, 0x33, 0x3a, 0x41,
3566                         0x48, 0x4f, 0x56, 0x5d, 0x64, 0x6b, 0x72, 0x79,
3567                         0x80, 0x87, 0x8e, 0x95, 0x9c, 0xa3, 0xaa, 0xb1,
3568                         0xb8, 0xbf, 0xc6, 0xcd, 0xd4, 0xdb, 0xe2, 0xe9,
3569                         0xf0, 0xf7, 0xfe, 0x05, 0x0c, 0x13, 0x1a, 0x21,
3570                         0x28, 0x2f, 0x36, 0x3d, 0x44, 0x4b, 0x52, 0x59,
3571                         0x60, 0x67, 0x6e, 0x75, 0x7c, 0x83, 0x8a, 0x91,
3572                         0x98, 0x9f, 0xa6, 0xad, 0xb4, 0xbb, 0xc2, 0xc9,
3573                         0xd0, 0xd7, 0xde, 0xe5, 0xec, 0xf3, 0xfa, 0x01,
3574                         0x08, 0x0f, 0x16, 0x1d, 0x24, 0x2b, 0x32, 0x39,
3575                         0x40, 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71,
3576                         0x78, 0x7f, 0x86, 0x8d, 0x94, 0x9b, 0xa2, 0xa9,
3577                         0xb0, 0xb7, 0xbe, 0xc5, 0xcc, 0xd3, 0xda, 0xe1,
3578                         0xe8, 0xef, 0xf6, 0xfd, 0x04, 0x0b, 0x12, 0x19,
3579                         0x20, 0x27, 0x2e, 0x35, 0x3c, 0x43, 0x4a, 0x51,
3580                         0x58, 0x5f, 0x66, 0x6d, 0x74, 0x7b, 0x82, 0x89,
3581                         0x90, 0x97, 0x9e, 0xa5, 0xac, 0xb3, 0xba, 0xc1,
3582                         0xc8, 0xcf, 0xd6, 0xdd, 0xe4, 0xeb, 0xf2, 0xf9,
3583                         0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f,
3584                         0x48, 0x51, 0x5a, 0x63, 0x6c, 0x75, 0x7e, 0x87,
3585                         0x90, 0x99, 0xa2, 0xab, 0xb4, 0xbd, 0xc6, 0xcf,
3586                         0xd8, 0xe1, 0xea, 0xf3, 0xfc, 0x05, 0x0e, 0x17,
3587                         0x20, 0x29, 0x32, 0x3b, 0x44, 0x4d, 0x56, 0x5f,
3588                         0x68, 0x71, 0x7a, 0x83, 0x8c, 0x95, 0x9e, 0xa7,
3589                         0xb0, 0xb9, 0xc2, 0xcb, 0xd4, 0xdd, 0xe6, 0xef,
3590                         0xf8, 0x01, 0x0a, 0x13, 0x1c, 0x25, 0x2e, 0x37,
3591                         0x40, 0x49, 0x52, 0x5b, 0x64, 0x6d, 0x76, 0x7f,
3592                         0x88, 0x91, 0x9a, 0xa3, 0xac, 0xb5, 0xbe, 0xc7,
3593                         0xd0, 0xd9, 0xe2, 0xeb, 0xf4, 0xfd, 0x06, 0x0f,
3594                         0x18, 0x21, 0x2a, 0x33, 0x3c, 0x45, 0x4e, 0x57,
3595                         0x60, 0x69, 0x72, 0x7b, 0x84, 0x8d, 0x96, 0x9f,
3596                         0xa8, 0xb1, 0xba, 0xc3, 0xcc, 0xd5, 0xde, 0xe7,
3597                         0xf0, 0xf9, 0x02, 0x0b, 0x14, 0x1d, 0x26, 0x2f,
3598                         0x38, 0x41, 0x4a, 0x53, 0x5c, 0x65, 0x6e, 0x77,
3599                         0x80, 0x89, 0x92, 0x9b, 0xa4, 0xad, 0xb6, 0xbf,
3600                         0xc8, 0xd1, 0xda, 0xe3, 0xec, 0xf5, 0xfe, 0x07,
3601                         0x10, 0x19, 0x22, 0x2b, 0x34, 0x3d, 0x46, 0x4f,
3602                         0x58, 0x61, 0x6a, 0x73, 0x7c, 0x85, 0x8e, 0x97,
3603                         0xa0, 0xa9, 0xb2, 0xbb, 0xc4, 0xcd, 0xd6, 0xdf,
3604                         0xe8, 0xf1, 0xfa, 0x03, 0x0c, 0x15, 0x1e, 0x27,
3605                         0x30, 0x39, 0x42, 0x4b, 0x54, 0x5d, 0x66, 0x6f,
3606                         0x78, 0x81, 0x8a, 0x93, 0x9c, 0xa5, 0xae, 0xb7,
3607                         0xc0, 0xc9, 0xd2, 0xdb, 0xe4, 0xed, 0xf6, 0xff,
3608                         0x08, 0x11, 0x1a, 0x23, 0x2c, 0x35, 0x3e, 0x47,
3609                         0x50, 0x59, 0x62, 0x6b, 0x74, 0x7d, 0x86, 0x8f,
3610                         0x98, 0xa1, 0xaa, 0xb3, 0xbc, 0xc5, 0xce, 0xd7,
3611                         0xe0, 0xe9, 0xf2, 0xfb, 0x04, 0x0d, 0x16, 0x1f,
3612                         0x28, 0x31, 0x3a, 0x43, 0x4c, 0x55, 0x5e, 0x67,
3613                         0x70, 0x79, 0x82, 0x8b, 0x94, 0x9d, 0xa6, 0xaf,
3614                         0xb8, 0xc1, 0xca, 0xd3, 0xdc, 0xe5, 0xee, 0xf7,
3615                         0x00, 0x0b, 0x16, 0x21, 0x2c, 0x37, 0x42, 0x4d,
3616                         0x58, 0x63, 0x6e, 0x79, 0x84, 0x8f, 0x9a, 0xa5,
3617                         0xb0, 0xbb, 0xc6, 0xd1, 0xdc, 0xe7, 0xf2, 0xfd,
3618                         0x08, 0x13, 0x1e, 0x29, 0x34, 0x3f, 0x4a, 0x55,
3619                         0x60, 0x6b, 0x76, 0x81, 0x8c, 0x97, 0xa2, 0xad,
3620                         0xb8, 0xc3, 0xce, 0xd9, 0xe4, 0xef, 0xfa, 0x05,
3621                         0x10, 0x1b, 0x26, 0x31, 0x3c, 0x47, 0x52, 0x5d,
3622                         0x68, 0x73, 0x7e, 0x89, 0x94, 0x9f, 0xaa, 0xb5,
3623                         0xc0, 0xcb, 0xd6, 0xe1, 0xec, 0xf7, 0x02, 0x0d,
3624                         0x18, 0x23, 0x2e, 0x39, 0x44, 0x4f, 0x5a, 0x65,
3625                         0x70, 0x7b, 0x86, 0x91, 0x9c, 0xa7, 0xb2, 0xbd,
3626                         0xc8, 0xd3, 0xde, 0xe9, 0xf4, 0xff, 0x0a, 0x15,
3627                         0x20, 0x2b, 0x36, 0x41, 0x4c, 0x57, 0x62, 0x6d,
3628                         0x78, 0x83, 0x8e, 0x99, 0xa4, 0xaf, 0xba, 0xc5,
3629                         0xd0, 0xdb, 0xe6, 0xf1, 0xfc, 0x07, 0x12, 0x1d,
3630                         0x28, 0x33, 0x3e, 0x49, 0x54, 0x5f, 0x6a, 0x75,
3631                         0x80, 0x8b, 0x96, 0xa1, 0xac, 0xb7, 0xc2, 0xcd,
3632                         0xd8, 0xe3, 0xee, 0xf9, 0x04, 0x0f, 0x1a, 0x25,
3633                         0x30, 0x3b, 0x46, 0x51, 0x5c, 0x67, 0x72, 0x7d,
3634                         0x88, 0x93, 0x9e, 0xa9, 0xb4, 0xbf, 0xca, 0xd5,
3635                         0xe0, 0xeb, 0xf6, 0x01, 0x0c, 0x17, 0x22, 0x2d,
3636                         0x38, 0x43, 0x4e, 0x59, 0x64, 0x6f, 0x7a, 0x85,
3637                         0x90, 0x9b, 0xa6, 0xb1, 0xbc, 0xc7, 0xd2, 0xdd,
3638                         0xe8, 0xf3, 0xfe, 0x09, 0x14, 0x1f, 0x2a, 0x35,
3639                         0x40, 0x4b, 0x56, 0x61, 0x6c, 0x77, 0x82, 0x8d,
3640                         0x98, 0xa3, 0xae, 0xb9, 0xc4, 0xcf, 0xda, 0xe5,
3641                         0xf0, 0xfb, 0x06, 0x11, 0x1c, 0x27, 0x32, 0x3d,
3642                         0x48, 0x53, 0x5e, 0x69, 0x74, 0x7f, 0x8a, 0x95,
3643                         0xa0, 0xab, 0xb6, 0xc1, 0xcc, 0xd7, 0xe2, 0xed,
3644                         0xf8, 0x03, 0x0e, 0x19, 0x24, 0x2f, 0x3a, 0x45,
3645                         0x50, 0x5b, 0x66, 0x71, 0x7c, 0x87, 0x92, 0x9d,
3646                         0xa8, 0xb3, 0xbe, 0xc9, 0xd4, 0xdf, 0xea, 0xf5,
3647                         0x00, 0x0d, 0x1a, 0x27, 0x34, 0x41, 0x4e, 0x5b,
3648                         0x68, 0x75, 0x82, 0x8f, 0x9c, 0xa9, 0xb6, 0xc3,
3649                         0xd0, 0xdd, 0xea, 0xf7, 0x04, 0x11, 0x1e, 0x2b,
3650                         0x38, 0x45, 0x52, 0x5f, 0x6c, 0x79, 0x86, 0x93,
3651                         0xa0, 0xad, 0xba, 0xc7, 0xd4, 0xe1, 0xee, 0xfb,
3652                         0x08, 0x15, 0x22, 0x2f, 0x3c, 0x49, 0x56, 0x63,
3653                         0x70, 0x7d, 0x8a, 0x97, 0xa4, 0xb1, 0xbe, 0xcb,
3654                         0xd8, 0xe5, 0xf2, 0xff, 0x0c, 0x19, 0x26, 0x33,
3655                         0x40, 0x4d, 0x5a, 0x67, 0x74, 0x81, 0x8e, 0x9b,
3656                         0xa8, 0xb5, 0xc2, 0xcf, 0xdc, 0xe9, 0xf6, 0x03,
3657                         0x10, 0x1d, 0x2a, 0x37, 0x44, 0x51, 0x5e, 0x6b,
3658                         0x78, 0x85, 0x92, 0x9f, 0xac, 0xb9, 0xc6, 0xd3,
3659                         0xe0, 0xed, 0xfa, 0x07, 0x14, 0x21, 0x2e, 0x3b,
3660                         0x48, 0x55, 0x62, 0x6f, 0x7c, 0x89, 0x96, 0xa3,
3661                         0xb0, 0xbd, 0xca, 0xd7, 0xe4, 0xf1, 0xfe, 0x0b,
3662                         0x18, 0x25, 0x32, 0x3f, 0x4c, 0x59, 0x66, 0x73,
3663                         0x80, 0x8d, 0x9a, 0xa7, 0xb4, 0xc1, 0xce, 0xdb,
3664                         0xe8, 0xf5, 0x02, 0x0f, 0x1c, 0x29, 0x36, 0x43,
3665                         0x50, 0x5d, 0x6a, 0x77, 0x84, 0x91, 0x9e, 0xab,
3666                         0xb8, 0xc5, 0xd2, 0xdf, 0xec, 0xf9, 0x06, 0x13,
3667                         0x20, 0x2d, 0x3a, 0x47, 0x54, 0x61, 0x6e, 0x7b,
3668                         0x88, 0x95, 0xa2, 0xaf, 0xbc, 0xc9, 0xd6, 0xe3,
3669                         0xf0, 0xfd, 0x0a, 0x17, 0x24, 0x31, 0x3e, 0x4b,
3670                         0x58, 0x65, 0x72, 0x7f, 0x8c, 0x99, 0xa6, 0xb3,
3671                         0xc0, 0xcd, 0xda, 0xe7, 0xf4, 0x01, 0x0e, 0x1b,
3672                         0x28, 0x35, 0x42, 0x4f, 0x5c, 0x69, 0x76, 0x83,
3673                         0x90, 0x9d, 0xaa, 0xb7, 0xc4, 0xd1, 0xde, 0xeb,
3674                         0xf8, 0x05, 0x12, 0x1f, 0x2c, 0x39, 0x46, 0x53,
3675                         0x60, 0x6d, 0x7a, 0x87, 0x94, 0xa1, 0xae, 0xbb,
3676                         0xc8, 0xd5, 0xe2, 0xef, 0xfc, 0x09, 0x16, 0x23,
3677                         0x30, 0x3d, 0x4a, 0x57, 0x64, 0x71, 0x7e, 0x8b,
3678                         0x98, 0xa5, 0xb2, 0xbf, 0xcc, 0xd9, 0xe6, 0xf3,
3679                         0x00, 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69,
3680                         0x78, 0x87, 0x96, 0xa5, 0xb4, 0xc3, 0xd2, 0xe1,
3681                         0xf0, 0xff, 0x0e, 0x1d, 0x2c, 0x3b, 0x4a, 0x59,
3682                         0x68, 0x77, 0x86, 0x95, 0xa4, 0xb3, 0xc2, 0xd1,
3683                         0xe0, 0xef, 0xfe, 0x0d, 0x1c, 0x2b, 0x3a, 0x49,
3684                         0x58, 0x67, 0x76, 0x85, 0x94, 0xa3, 0xb2, 0xc1,
3685                         0xd0, 0xdf, 0xee, 0xfd, 0x0c, 0x1b, 0x2a, 0x39,
3686                         0x48, 0x57, 0x66, 0x75, 0x84, 0x93, 0xa2, 0xb1,
3687                         0xc0, 0xcf, 0xde, 0xed, 0xfc, 0x0b, 0x1a, 0x29,
3688                         0x38, 0x47, 0x56, 0x65, 0x74, 0x83, 0x92, 0xa1,
3689                         0xb0, 0xbf, 0xce, 0xdd, 0xec, 0xfb, 0x0a, 0x19,
3690                         0x28, 0x37, 0x46, 0x55, 0x64, 0x73, 0x82, 0x91,
3691                         0xa0, 0xaf, 0xbe, 0xcd, 0xdc, 0xeb, 0xfa, 0x09,
3692                         0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x81,
3693                         0x90, 0x9f, 0xae, 0xbd, 0xcc, 0xdb, 0xea, 0xf9,
3694                         0x08, 0x17, 0x26, 0x35, 0x44, 0x53, 0x62, 0x71,
3695                         0x80, 0x8f, 0x9e, 0xad, 0xbc, 0xcb, 0xda, 0xe9,
3696                         0xf8, 0x07, 0x16, 0x25, 0x34, 0x43, 0x52, 0x61,
3697                         0x70, 0x7f, 0x8e, 0x9d, 0xac, 0xbb, 0xca, 0xd9,
3698                         0xe8, 0xf7, 0x06, 0x15, 0x24, 0x33, 0x42, 0x51,
3699                         0x60, 0x6f, 0x7e, 0x8d, 0x9c, 0xab, 0xba, 0xc9,
3700                         0xd8, 0xe7, 0xf6, 0x05, 0x14, 0x23, 0x32, 0x41,
3701                         0x50, 0x5f, 0x6e, 0x7d, 0x8c, 0x9b, 0xaa, 0xb9,
3702                         0xc8, 0xd7, 0xe6, 0xf5, 0x04, 0x13, 0x22, 0x31,
3703                         0x40, 0x4f, 0x5e, 0x6d, 0x7c, 0x8b, 0x9a, 0xa9,
3704                         0xb8, 0xc7, 0xd6, 0xe5, 0xf4, 0x03, 0x12, 0x21,
3705                         0x30, 0x3f, 0x4e, 0x5d, 0x6c, 0x7b, 0x8a, 0x99,
3706                         0xa8, 0xb7, 0xc6, 0xd5, 0xe4, 0xf3, 0x02, 0x11,
3707                         0x20, 0x2f, 0x3e, 0x4d, 0x5c, 0x6b, 0x7a, 0x89,
3708                         0x98, 0xa7, 0xb6, 0xc5, 0xd4, 0xe3, 0xf2, 0x01,
3709                         0x10, 0x1f, 0x2e, 0x3d, 0x4c, 0x5b, 0x6a, 0x79,
3710                         0x88, 0x97, 0xa6, 0xb5, 0xc4, 0xd3, 0xe2, 0xf1,
3711                         0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
3712                         0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
3713                         0x10, 0x21, 0x32, 0x43, 0x54, 0x65, 0x76, 0x87,
3714                         0x98, 0xa9, 0xba, 0xcb, 0xdc, 0xed, 0xfe, 0x0f,
3715                         0x20, 0x31, 0x42, 0x53, 0x64, 0x75, 0x86, 0x97,
3716                         0xa8, 0xb9, 0xca, 0xdb, 0xec, 0xfd, 0x0e, 0x1f,
3717                         0x30, 0x41, 0x52, 0x63, 0x74, 0x85, 0x96, 0xa7,
3718                         0xb8, 0xc9, 0xda, 0xeb, 0xfc, 0x0d, 0x1e, 0x2f,
3719                         0x40, 0x51, 0x62, 0x73, 0x84, 0x95, 0xa6, 0xb7,
3720                         0xc8, 0xd9, 0xea, 0xfb, 0x0c, 0x1d, 0x2e, 0x3f,
3721                         0x50, 0x61, 0x72, 0x83, 0x94, 0xa5, 0xb6, 0xc7,
3722                         0xd8, 0xe9, 0xfa, 0x0b, 0x1c, 0x2d, 0x3e, 0x4f,
3723                         0x60, 0x71, 0x82, 0x93, 0xa4, 0xb5, 0xc6, 0xd7,
3724                         0xe8, 0xf9, 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f,
3725                         0x70, 0x81, 0x92, 0xa3, 0xb4, 0xc5, 0xd6, 0xe7,
3726                         0xf8, 0x09, 0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f,
3727                         0x80, 0x91, 0xa2, 0xb3, 0xc4, 0xd5, 0xe6, 0xf7,
3728                         0x08, 0x19, 0x2a, 0x3b, 0x4c, 0x5d, 0x6e, 0x7f,
3729                         0x90, 0xa1, 0xb2, 0xc3, 0xd4, 0xe5, 0xf6, 0x07,
3730                         0x18, 0x29, 0x3a, 0x4b, 0x5c, 0x6d, 0x7e, 0x8f,
3731                         0xa0, 0xb1, 0xc2, 0xd3, 0xe4, 0xf5, 0x06, 0x17,
3732                         0x28, 0x39, 0x4a, 0x5b, 0x6c, 0x7d, 0x8e, 0x9f,
3733                         0xb0, 0xc1, 0xd2, 0xe3, 0xf4, 0x05, 0x16, 0x27,
3734                         0x38, 0x49, 0x5a, 0x6b, 0x7c, 0x8d, 0x9e, 0xaf,
3735                         0xc0, 0xd1, 0xe2, 0xf3, 0x04, 0x15, 0x26, 0x37,
3736                         0x48, 0x59, 0x6a, 0x7b, 0x8c, 0x9d, 0xae, 0xbf,
3737                         0xd0, 0xe1, 0xf2, 0x03, 0x14, 0x25, 0x36, 0x47,
3738                         0x58, 0x69, 0x7a, 0x8b, 0x9c, 0xad, 0xbe, 0xcf,
3739                         0xe0, 0xf1, 0x02, 0x13, 0x24, 0x35, 0x46, 0x57,
3740                         0x68, 0x79, 0x8a, 0x9b, 0xac, 0xbd, 0xce, 0xdf,
3741                         0xf0, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67,
3742                         0x78, 0x89, 0x9a, 0xab, 0xbc, 0xcd, 0xde, 0xef,
3743                         0x00, 0x13, 0x26, 0x39, 0x4c, 0x5f, 0x72, 0x85,
3744                         0x98, 0xab, 0xbe, 0xd1, 0xe4, 0xf7, 0x0a, 0x1d,
3745                         0x30, 0x43, 0x56, 0x69, 0x7c, 0x8f, 0xa2, 0xb5,
3746                         0xc8, 0xdb, 0xee, 0x01, 0x14, 0x27, 0x3a, 0x4d,
3747                         0x60, 0x73, 0x86, 0x99, 0xac, 0xbf, 0xd2, 0xe5,
3748                         0xf8, 0x0b, 0x1e, 0x31, 0x44, 0x57, 0x6a, 0x7d,
3749                         0x90, 0xa3, 0xb6, 0xc9, 0xdc, 0xef, 0x02, 0x15,
3750                         0x28, 0x3b, 0x4e, 0x61, 0x74, 0x87, 0x9a, 0xad,
3751                         0xc0, 0xd3, 0xe6, 0xf9, 0x0c, 0x1f, 0x32, 0x45,
3752                         0x58, 0x6b, 0x7e, 0x91, 0xa4, 0xb7, 0xca, 0xdd,
3753                         0xf0, 0x03, 0x16, 0x29, 0x3c, 0x4f, 0x62, 0x75,
3754                         0x88, 0x9b, 0xae, 0xc1, 0xd4, 0xe7, 0xfa, 0x0d,
3755                         0x20, 0x33, 0x46, 0x59, 0x6c, 0x7f, 0x92, 0xa5,
3756                         0xb8, 0xcb, 0xde, 0xf1, 0x04, 0x17, 0x2a, 0x3d,
3757                         0x50, 0x63, 0x76, 0x89, 0x9c, 0xaf, 0xc2, 0xd5,
3758                         0xe8, 0xfb, 0x0e, 0x21, 0x34, 0x47, 0x5a, 0x6d,
3759                         0x80, 0x93, 0xa6, 0xb9, 0xcc, 0xdf, 0xf2, 0x05,
3760                         0x18, 0x2b, 0x3e, 0x51, 0x64, 0x77, 0x8a, 0x9d,
3761                         0xb0, 0xc3, 0xd6, 0xe9, 0xfc, 0x0f, 0x22, 0x35,
3762                         0x48, 0x5b, 0x6e, 0x81, 0x94, 0xa7, 0xba, 0xcd,
3763                         0xe0, 0xf3, 0x06, 0x19, 0x2c, 0x3f, 0x52, 0x65,
3764                         0x78, 0x8b, 0x9e, 0xb1, 0xc4, 0xd7, 0xea, 0xfd,
3765                         0x10, 0x23, 0x36, 0x49, 0x5c, 0x6f, 0x82, 0x95,
3766                         0xa8, 0xbb, 0xce, 0xe1, 0xf4, 0x07, 0x1a, 0x2d,
3767                         0x40, 0x53, 0x66, 0x79, 0x8c, 0x9f, 0xb2, 0xc5,
3768                         0xd8, 0xeb, 0xfe, 0x11, 0x24, 0x37, 0x4a, 0x5d,
3769                         0x70, 0x83, 0x96, 0xa9, 0xbc, 0xcf, 0xe2, 0xf5,
3770                         0x08, 0x1b, 0x2e, 0x41, 0x54, 0x67, 0x7a, 0x8d,
3771                         0xa0, 0xb3, 0xc6, 0xd9, 0xec, 0xff, 0x12, 0x25,
3772                         0x38, 0x4b, 0x5e, 0x71, 0x84, 0x97, 0xaa, 0xbd,
3773                         0xd0, 0xe3, 0xf6, 0x09, 0x1c, 0x2f, 0x42, 0x55,
3774                         0x68, 0x7b, 0x8e, 0xa1, 0xb4, 0xc7, 0xda, 0xed,
3775                         0x00, 0x15, 0x2a, 0x3f, 0x54, 0x69, 0x7e, 0x93,
3776                         0xa8, 0xbd, 0xd2, 0xe7, 0xfc, 0x11, 0x26, 0x3b,
3777                         0x50, 0x65, 0x7a, 0x8f, 0xa4, 0xb9, 0xce, 0xe3,
3778                         0xf8, 0x0d, 0x22, 0x37, 0x4c, 0x61, 0x76, 0x8b,
3779                         0xa0, 0xb5, 0xca, 0xdf, 0xf4, 0x09, 0x1e, 0x33,
3780                         0x48, 0x5d, 0x72, 0x87, 0x9c, 0xb1, 0xc6, 0xdb,
3781                         0xf0, 0x05, 0x1a, 0x2f, 0x44, 0x59, 0x6e, 0x83,
3782                         0x98, 0xad, 0xc2, 0xd7, 0xec, 0x01, 0x16, 0x2b,
3783                         0x40, 0x55, 0x6a, 0x7f, 0x94, 0xa9, 0xbe, 0xd3,
3784                         0xe8, 0xfd, 0x12, 0x27, 0x3c, 0x51, 0x66, 0x7b,
3785                         0x90, 0xa5, 0xba, 0xcf, 0xe4, 0xf9, 0x0e, 0x23,
3786                         0x38, 0x4d, 0x62, 0x77, 0x8c, 0xa1, 0xb6, 0xcb,
3787                         0xe0, 0xf5, 0x0a, 0x1f, 0x34, 0x49, 0x5e, 0x73,
3788                         0x88, 0x9d, 0xb2, 0xc7, 0xdc, 0xf1, 0x06, 0x1b,
3789                         0x30, 0x45, 0x5a, 0x6f, 0x84, 0x99, 0xae, 0xc3,
3790                         0xd8, 0xed, 0x02, 0x17, 0x2c, 0x41, 0x56, 0x6b,
3791                         0x80, 0x95, 0xaa, 0xbf, 0xd4, 0xe9, 0xfe, 0x13,
3792                         0x28, 0x3d, 0x52, 0x67, 0x7c, 0x91, 0xa6, 0xbb,
3793                         0xd0, 0xe5, 0xfa, 0x0f, 0x24, 0x39, 0x4e, 0x63,
3794                         0x78, 0x8d, 0xa2, 0xb7, 0xcc, 0xe1, 0xf6, 0x0b,
3795                         0x20, 0x35, 0x4a, 0x5f, 0x74, 0x89, 0x9e, 0xb3,
3796                         0xc8, 0xdd, 0xf2, 0x07, 0x1c, 0x31, 0x46, 0x5b,
3797                         0x70, 0x85, 0x9a, 0xaf, 0xc4, 0xd9, 0xee, 0x03,
3798                         0x18, 0x2d, 0x42, 0x57, 0x6c, 0x81, 0x96, 0xab,
3799                         0xc0, 0xd5, 0xea, 0xff, 0x14, 0x29, 0x3e, 0x53,
3800                         0x68, 0x7d, 0x92, 0xa7, 0xbc, 0xd1, 0xe6, 0xfb,
3801                         0x10, 0x25, 0x3a, 0x4f, 0x64, 0x79, 0x8e, 0xa3,
3802                         0xb8, 0xcd, 0xe2, 0xf7, 0x0c, 0x21, 0x36, 0x4b,
3803                         0x60, 0x75, 0x8a, 0x9f, 0xb4, 0xc9, 0xde, 0xf3,
3804                         0x08, 0x1d, 0x32, 0x47, 0x5c, 0x71, 0x86, 0x9b,
3805                         0xb0, 0xc5, 0xda, 0xef, 0x04, 0x19, 0x2e, 0x43,
3806                         0x58, 0x6d, 0x82, 0x97, 0xac, 0xc1, 0xd6, 0xeb,
3807                         0x00, 0x17, 0x2e, 0x45, 0x5c, 0x73, 0x8a, 0xa1,
3808                         0xb8, 0xcf, 0xe6, 0xfd, 0x14, 0x2b, 0x42, 0x59,
3809                         0x70, 0x87, 0x9e, 0xb5, 0xcc, 0xe3, 0xfa, 0x11,
3810                         0x28, 0x3f, 0x56, 0x6d, 0x84, 0x9b, 0xb2, 0xc9,
3811                         0xe0, 0xf7, 0x0e, 0x25, 0x3c, 0x53, 0x6a, 0x81,
3812                         0x98, 0xaf, 0xc6, 0xdd, 0xf4, 0x0b, 0x22, 0x39,
3813                         0x50, 0x67, 0x7e, 0x95, 0xac, 0xc3, 0xda, 0xf1,
3814                         0x08, 0x1f, 0x36, 0x4d, 0x64, 0x7b, 0x92, 0xa9,
3815                         0xc0, 0xd7, 0xee, 0x05, 0x1c, 0x33, 0x4a, 0x61,
3816                         0x78, 0x8f, 0xa6, 0xbd, 0xd4, 0xeb, 0x02, 0x19,
3817                         0x30, 0x47, 0x5e, 0x75, 0x8c, 0xa3, 0xba, 0xd1,
3818                         0xe8, 0xff, 0x16, 0x2d, 0x44, 0x5b, 0x72, 0x89,
3819                         0xa0, 0xb7, 0xce, 0xe5, 0xfc, 0x13, 0x2a, 0x41,
3820                         0x58, 0x6f, 0x86, 0x9d, 0xb4, 0xcb, 0xe2, 0xf9,
3821                         0x10, 0x27, 0x3e, 0x55, 0x6c, 0x83, 0x9a, 0xb1,
3822                         0xc8, 0xdf, 0xf6, 0x0d, 0x24, 0x3b, 0x52, 0x69,
3823                         0x80, 0x97, 0xae, 0xc5, 0xdc, 0xf3, 0x0a, 0x21,
3824                         0x38, 0x4f, 0x66, 0x7d, 0x94, 0xab, 0xc2, 0xd9,
3825                         0xf0, 0x07, 0x1e, 0x35, 0x4c, 0x63, 0x7a, 0x91,
3826                         0xa8, 0xbf, 0xd6, 0xed, 0x04, 0x1b, 0x32, 0x49,
3827                         0x60, 0x77, 0x8e, 0xa5, 0xbc, 0xd3, 0xea, 0x01,
3828                         0x18, 0x2f, 0x46, 0x5d, 0x74, 0x8b, 0xa2, 0xb9,
3829                         0xd0, 0xe7, 0xfe, 0x15, 0x2c, 0x43, 0x5a, 0x71,
3830                         0x88, 0x9f, 0xb6, 0xcd, 0xe4, 0xfb, 0x12, 0x29,
3831                         0x40, 0x57, 0x6e, 0x85, 0x9c, 0xb3, 0xca, 0xe1,
3832                         0xf8, 0x0f, 0x26, 0x3d, 0x54, 0x6b, 0x82, 0x99,
3833                         0xb0, 0xc7, 0xde, 0xf5, 0x0c, 0x23, 0x3a, 0x51,
3834                         0x68, 0x7f, 0x96, 0xad, 0xc4, 0xdb, 0xf2, 0x09,
3835                         0x20, 0x37, 0x4e, 0x65, 0x7c, 0x93, 0xaa, 0xc1,
3836                         0xd8, 0xef, 0x06, 0x1d, 0x34, 0x4b, 0x62, 0x79,
3837                         0x90, 0xa7, 0xbe, 0xd5, 0xec, 0x03, 0x1a, 0x31,
3838                         0x48, 0x5f, 0x76, 0x8d, 0xa4, 0xbb, 0xd2, 0xe9,
3839                         0x00, 0x19, 0x32, 0x4b, 0x64, 0x7d, 0x96, 0xaf,
3840                         0xc8, 0xe1, 0xfa, 0x13, 0x2c, 0x45, 0x5e, 0x77,
3841                         0x90, 0xa9, 0xc2, 0xdb, 0xf4, 0x0d, 0x26, 0x3f,
3842                         0x58, 0x71, 0x8a, 0xa3, 0xbc, 0xd5, 0xee, 0x07,
3843                         0x20, 0x39, 0x52, 0x6b, 0x84, 0x9d, 0xb6, 0xcf,
3844                         0xe8, 0x01, 0x1a, 0x33, 0x4c, 0x65, 0x7e, 0x97,
3845                         0xb0, 0xc9, 0xe2, 0xfb, 0x14, 0x2d, 0x46, 0x5f,
3846                         0x78, 0x91, 0xaa, 0xc3, 0xdc, 0xf5, 0x0e, 0x27,
3847                         0x40, 0x59, 0x72, 0x8b, 0xa4, 0xbd, 0xd6, 0xef,
3848                         0x08, 0x21, 0x3a, 0x53, 0x6c, 0x85, 0x9e, 0xb7,
3849                         0xd0, 0xe9, 0x02, 0x1b, 0x34, 0x4d, 0x66, 0x7f,
3850                         0x98, 0xb1, 0xca, 0xe3, 0xfc, 0x15, 0x2e, 0x47,
3851                         0x60, 0x79, 0x92, 0xab, 0xc4, 0xdd, 0xf6, 0x0f,
3852                         0x28, 0x41, 0x5a, 0x73, 0x8c, 0xa5, 0xbe, 0xd7,
3853                         0xf0, 0x09, 0x22, 0x3b, 0x54, 0x6d, 0x86, 0x9f,
3854                         0xb8, 0xd1, 0xea, 0x03, 0x1c, 0x35, 0x4e, 0x67,
3855                         0x80, 0x99, 0xb2, 0xcb, 0xe4, 0xfd, 0x16, 0x2f,
3856                         0x48, 0x61, 0x7a, 0x93, 0xac, 0xc5, 0xde, 0xf7,
3857                         0x10, 0x29, 0x42, 0x5b, 0x74, 0x8d, 0xa6, 0xbf,
3858                         0xd8, 0xf1, 0x0a, 0x23, 0x3c, 0x55, 0x6e, 0x87,
3859                         0xa0, 0xb9, 0xd2, 0xeb, 0x04, 0x1d, 0x36, 0x4f,
3860                         0x68, 0x81, 0x9a, 0xb3, 0xcc, 0xe5, 0xfe, 0x17,
3861                         0x30, 0x49, 0x62, 0x7b, 0x94, 0xad, 0xc6, 0xdf,
3862                         0xf8, 0x11, 0x2a, 0x43, 0x5c, 0x75, 0x8e, 0xa7,
3863                         0xc0, 0xd9, 0xf2, 0x0b, 0x24, 0x3d, 0x56, 0x6f,
3864                         0x88, 0xa1, 0xba, 0xd3, 0xec, 0x05, 0x1e, 0x37,
3865                         0x50, 0x69, 0x82, 0x9b, 0xb4, 0xcd, 0xe6, 0xff,
3866                         0x18, 0x31, 0x4a, 0x63, 0x7c, 0x95, 0xae, 0xc7,
3867                         0xe0, 0xf9, 0x12, 0x2b, 0x44, 0x5d, 0x76, 0x8f,
3868                         0xa8, 0xc1, 0xda, 0xf3, 0x0c, 0x25, 0x3e, 0x57,
3869                         0x70, 0x89, 0xa2, 0xbb, 0xd4, 0xed, 0x06, 0x1f,
3870                         0x38, 0x51, 0x6a, 0x83, 0x9c, 0xb5, 0xce, 0xe7,
3871                         0x00, 0x1b, 0x36, 0x51, 0x6c, 0x87, 0xa2, 0xbd,
3872                         0xd8, 0xf3, 0x0e, 0x29, 0x44, 0x5f, 0x7a, 0x95,
3873                         0xb0, 0xcb, 0xe6, 0x01, 0x1c, 0x37, 0x52, 0x6d,
3874                         0x88, 0xa3, 0xbe, 0xd9, 0xf4, 0x0f, 0x2a, 0x45,
3875                         0x60, 0x7b, 0x96, 0xb1, 0xcc, 0xe7, 0x02, 0x1d,
3876                         0x38, 0x53, 0x6e, 0x89, 0xa4, 0xbf, 0xda, 0xf5,
3877                         0x10, 0x2b, 0x46, 0x61, 0x7c, 0x97, 0xb2, 0xcd,
3878                         0xe8, 0x03, 0x1e, 0x39, 0x54, 0x6f, 0x8a, 0xa5,
3879                         0xc0, 0xdb, 0xf6, 0x11, 0x2c, 0x47, 0x62, 0x7d,
3880                         0x98, 0xb3, 0xce, 0xe9, 0x04, 0x1f, 0x3a, 0x55,
3881                         0x70, 0x8b, 0xa6, 0xc1, 0xdc, 0xf7, 0x12, 0x2d,
3882                         0x48, 0x63, 0x7e, 0x99, 0xb4, 0xcf, 0xea, 0x05,
3883                         0x20, 0x3b, 0x56, 0x71, 0x8c, 0xa7, 0xc2, 0xdd,
3884                         0xf8, 0x13, 0x2e, 0x49, 0x64, 0x7f, 0x9a, 0xb5,
3885                         0xd0, 0xeb, 0x06, 0x21, 0x3c, 0x57, 0x72, 0x8d,
3886                         0xa8, 0xc3, 0xde, 0xf9, 0x14, 0x2f, 0x4a, 0x65,
3887                         0x80, 0x9b, 0xb6, 0xd1, 0xec, 0x07, 0x22, 0x3d,
3888                         0x58, 0x73, 0x8e, 0xa9, 0xc4, 0xdf, 0xfa, 0x15,
3889                         0x30, 0x4b, 0x66, 0x81, 0x9c, 0xb7, 0xd2, 0xed,
3890                         0x08, 0x23, 0x3e, 0x59, 0x74, 0x8f, 0xaa, 0xc5,
3891                         0xe0, 0xfb, 0x16, 0x31, 0x4c, 0x67, 0x82, 0x9d,
3892                         0xb8, 0xd3, 0xee, 0x09, 0x24, 0x3f, 0x5a, 0x75,
3893                         0x90, 0xab, 0xc6, 0xe1, 0xfc, 0x17, 0x32, 0x4d,
3894                         0x68, 0x83, 0x9e, 0xb9, 0xd4, 0xef, 0x0a, 0x25,
3895                         0x40, 0x5b, 0x76, 0x91, 0xac, 0xc7, 0xe2, 0xfd,
3896                         0x18, 0x33, 0x4e, 0x69, 0x84, 0x9f, 0xba, 0xd5,
3897                         0xf0, 0x0b, 0x26, 0x41, 0x5c, 0x77, 0x92, 0xad,
3898                         0xc8, 0xe3, 0xfe, 0x19, 0x34, 0x4f, 0x6a, 0x85,
3899                         0xa0, 0xbb, 0xd6, 0xf1, 0x0c, 0x27, 0x42, 0x5d,
3900                         0x78, 0x93, 0xae, 0xc9, 0xe4, 0xff, 0x1a, 0x35,
3901                         0x50, 0x6b, 0x86, 0xa1, 0xbc, 0xd7, 0xf2, 0x0d,
3902                         0x28, 0x43, 0x5e, 0x79, 0x94, 0xaf, 0xca, 0xe5,
3903                         0x00, 0x1d, 0x3a, 0x57, 0x74, 0x91, 0xae, 0xcb,
3904                         0xe8, 0x05, 0x22, 0x3f, 0x5c, 0x79, 0x96, 0xb3,
3905                         0xd0, 0xed, 0x0a, 0x27, 0x44, 0x61, 0x7e, 0x9b,
3906                         0xb8, 0xd5, 0xf2, 0x0f, 0x2c, 0x49, 0x66, 0x83,
3907                         0xa0, 0xbd, 0xda, 0xf7, 0x14, 0x31, 0x4e, 0x6b,
3908                         0x88, 0xa5, 0xc2, 0xdf, 0xfc, 0x19, 0x36, 0x53,
3909                         0x70, 0x8d, 0xaa, 0xc7, 0xe4, 0x01, 0x1e, 0x3b,
3910                         0x58, 0x75, 0x92, 0xaf, 0xcc, 0xe9, 0x06, 0x23,
3911                         0x40, 0x5d, 0x7a, 0x97, 0xb4, 0xd1, 0xee, 0x0b,
3912                         0x28, 0x45, 0x62, 0x7f, 0x9c, 0xb9, 0xd6, 0xf3,
3913                         0x10, 0x2d, 0x4a, 0x67, 0x84, 0xa1, 0xbe, 0xdb,
3914                         0xf8, 0x15, 0x32, 0x4f, 0x6c, 0x89, 0xa6, 0xc3,
3915                         0xe0, 0xfd, 0x1a, 0x37, 0x54, 0x71, 0x8e, 0xab,
3916                         0xc8, 0xe5, 0x02, 0x1f, 0x3c, 0x59, 0x76, 0x93,
3917                         0xb0, 0xcd, 0xea, 0x07, 0x24, 0x41, 0x5e, 0x7b,
3918                         0x98, 0xb5, 0xd2, 0xef, 0x0c, 0x29, 0x46, 0x63,
3919                         0x80, 0x9d, 0xba, 0xd7, 0xf4, 0x11, 0x2e, 0x4b,
3920                         0x68, 0x85, 0xa2, 0xbf, 0xdc, 0xf9, 0x16, 0x33,
3921                         0x50, 0x6d, 0x8a, 0xa7, 0xc4, 0xe1, 0xfe, 0x1b,
3922                         0x38, 0x55, 0x72, 0x8f, 0xac, 0xc9, 0xe6, 0x03,
3923                         0x20, 0x3d, 0x5a, 0x77, 0x94, 0xb1, 0xce, 0xeb,
3924                         0x08, 0x25, 0x42, 0x5f, 0x7c, 0x99, 0xb6, 0xd3,
3925                         0xf0, 0x0d, 0x2a, 0x47, 0x64, 0x81, 0x9e, 0xbb,
3926                         0xd8, 0xf5, 0x12, 0x2f, 0x4c, 0x69, 0x86, 0xa3,
3927                         0xc0, 0xdd, 0xfa, 0x17, 0x34, 0x51, 0x6e, 0x8b,
3928                         0xa8, 0xc5, 0xe2, 0xff, 0x1c, 0x39, 0x56, 0x73,
3929                         0x90, 0xad, 0xca, 0xe7, 0x04, 0x21, 0x3e, 0x5b,
3930                         0x78, 0x95, 0xb2, 0xcf, 0xec, 0x09, 0x26, 0x43,
3931                         0x60, 0x7d, 0x9a, 0xb7, 0xd4, 0xf1, 0x0e, 0x2b,
3932                         0x48, 0x65, 0x82, 0x9f, 0xbc, 0xd9, 0xf6, 0x13,
3933                         0x30, 0x4d, 0x6a, 0x87, 0xa4, 0xc1, 0xde, 0xfb,
3934                         0x18, 0x35, 0x52, 0x6f, 0x8c, 0xa9, 0xc6, 0xe3,
3935                         0x00, 0x1f, 0x3e, 0x5d, 0x7c, 0x9b, 0xba, 0xd9,
3936                         0xf8, 0x17, 0x36, 0x55, 0x74, 0x93, 0xb2, 0xd1,
3937                         0xf0, 0x0f, 0x2e, 0x4d, 0x6c, 0x8b, 0xaa, 0xc9,
3938                         0xe8, 0x07, 0x26, 0x45, 0x64, 0x83, 0xa2, 0xc1,
3939                         0xe0, 0xff, 0x1e, 0x3d, 0x5c, 0x7b, 0x9a, 0xb9,
3940                         0xd8, 0xf7, 0x16, 0x35, 0x54, 0x73, 0x92, 0xb1,
3941                         0xd0, 0xef, 0x0e, 0x2d, 0x4c, 0x6b, 0x8a, 0xa9,
3942                         0xc8, 0xe7, 0x06, 0x25, 0x44, 0x63, 0x82, 0xa1,
3943                         0xc0, 0xdf, 0xfe, 0x1d, 0x3c, 0x5b, 0x7a, 0x99,
3944                         0xb8, 0xd7, 0xf6, 0x15, 0x34, 0x53, 0x72, 0x91,
3945                         0xb0, 0xcf, 0xee, 0x0d, 0x2c, 0x4b, 0x6a, 0x89,
3946                         0xa8, 0xc7, 0xe6, 0x05, 0x24, 0x43, 0x62, 0x81,
3947                         0xa0, 0xbf, 0xde, 0xfd, 0x1c, 0x3b, 0x5a, 0x79,
3948                         0x98, 0xb7, 0xd6, 0xf5, 0x14, 0x33, 0x52, 0x71,
3949                         0x90, 0xaf, 0xce, 0xed, 0x0c, 0x2b, 0x4a, 0x69,
3950                         0x88, 0xa7, 0xc6, 0xe5, 0x04, 0x23, 0x42, 0x61,
3951                         0x80, 0x9f, 0xbe, 0xdd, 0xfc, 0x1b, 0x3a, 0x59,
3952                         0x78, 0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51,
3953                         0x70, 0x8f, 0xae, 0xcd, 0xec, 0x0b, 0x2a, 0x49,
3954                         0x68, 0x87, 0xa6, 0xc5, 0xe4, 0x03, 0x22, 0x41,
3955                         0x60, 0x7f, 0x9e, 0xbd, 0xdc, 0xfb, 0x1a, 0x39,
3956                         0x58, 0x77, 0x96, 0xb5, 0xd4, 0xf3, 0x12, 0x31,
3957                         0x50, 0x6f, 0x8e, 0xad, 0xcc, 0xeb, 0x0a, 0x29,
3958                         0x48, 0x67, 0x86, 0xa5, 0xc4, 0xe3, 0x02, 0x21,
3959                         0x40, 0x5f, 0x7e, 0x9d, 0xbc, 0xdb, 0xfa, 0x19,
3960                         0x38, 0x57, 0x76, 0x95, 0xb4, 0xd3, 0xf2, 0x11,
3961                         0x30, 0x4f, 0x6e, 0x8d, 0xac, 0xcb, 0xea, 0x09,
3962                         0x28, 0x47, 0x66, 0x85, 0xa4, 0xc3, 0xe2, 0x01,
3963                         0x20, 0x3f, 0x5e, 0x7d, 0x9c, 0xbb, 0xda, 0xf9,
3964                         0x18, 0x37, 0x56, 0x75, 0x94, 0xb3, 0xd2, 0xf1,
3965                         0x10, 0x2f, 0x4e, 0x6d, 0x8c, 0xab, 0xca, 0xe9,
3966                         0x08, 0x27, 0x46, 0x65, 0x84, 0xa3, 0xc2, 0xe1,
3967                         0x00, 0x21, 0x42, 0x63,
3968                 },
3969                 .ilen = 4100,
3970                 .result = {
3971                         0xf0, 0x5c, 0x74, 0xad, 0x4e, 0xbc, 0x99, 0xe2,
3972                         0xae, 0xff, 0x91, 0x3a, 0x44, 0xcf, 0x38, 0x32,
3973                         0x1e, 0xad, 0xa7, 0xcd, 0xa1, 0x39, 0x95, 0xaa,
3974                         0x10, 0xb1, 0xb3, 0x2e, 0x04, 0x31, 0x8f, 0x86,
3975                         0xf2, 0x62, 0x74, 0x70, 0x0c, 0xa4, 0x46, 0x08,
3976                         0xa8, 0xb7, 0x99, 0xa8, 0xe9, 0xd2, 0x73, 0x79,
3977                         0x7e, 0x6e, 0xd4, 0x8f, 0x1e, 0xc7, 0x8e, 0x31,
3978                         0x0b, 0xfa, 0x4b, 0xce, 0xfd, 0xf3, 0x57, 0x71,
3979                         0xe9, 0x46, 0x03, 0xa5, 0x3d, 0x34, 0x00, 0xe2,
3980                         0x18, 0xff, 0x75, 0x6d, 0x06, 0x2d, 0x00, 0xab,
3981                         0xb9, 0x3e, 0x6c, 0x59, 0xc5, 0x84, 0x06, 0xb5,
3982                         0x8b, 0xd0, 0x89, 0x9c, 0x4a, 0x79, 0x16, 0xc6,
3983                         0x3d, 0x74, 0x54, 0xfa, 0x44, 0xcd, 0x23, 0x26,
3984                         0x5c, 0xcf, 0x7e, 0x28, 0x92, 0x32, 0xbf, 0xdf,
3985                         0xa7, 0x20, 0x3c, 0x74, 0x58, 0x2a, 0x9a, 0xde,
3986                         0x61, 0x00, 0x1c, 0x4f, 0xff, 0x59, 0xc4, 0x22,
3987                         0xac, 0x3c, 0xd0, 0xe8, 0x6c, 0xf9, 0x97, 0x1b,
3988                         0x58, 0x9b, 0xad, 0x71, 0xe8, 0xa9, 0xb5, 0x0d,
3989                         0xee, 0x2f, 0x04, 0x1f, 0x7f, 0xbc, 0x99, 0xee,
3990                         0x84, 0xff, 0x42, 0x60, 0xdc, 0x3a, 0x18, 0xa5,
3991                         0x81, 0xf9, 0xef, 0xdc, 0x7a, 0x0f, 0x65, 0x41,
3992                         0x2f, 0xa3, 0xd3, 0xf9, 0xc2, 0xcb, 0xc0, 0x4d,
3993                         0x8f, 0xd3, 0x76, 0x96, 0xad, 0x49, 0x6d, 0x38,
3994                         0x3d, 0x39, 0x0b, 0x6c, 0x80, 0xb7, 0x54, 0x69,
3995                         0xf0, 0x2c, 0x90, 0x02, 0x29, 0x0d, 0x1c, 0x12,
3996                         0xad, 0x55, 0xc3, 0x8b, 0x68, 0xd9, 0xcc, 0xb3,
3997                         0xb2, 0x64, 0x33, 0x90, 0x5e, 0xca, 0x4b, 0xe2,
3998                         0xfb, 0x75, 0xdc, 0x63, 0xf7, 0x9f, 0x82, 0x74,
3999                         0xf0, 0xc9, 0xaa, 0x7f, 0xe9, 0x2a, 0x9b, 0x33,
4000                         0xbc, 0x88, 0x00, 0x7f, 0xca, 0xb2, 0x1f, 0x14,
4001                         0xdb, 0xc5, 0x8e, 0x7b, 0x11, 0x3c, 0x3e, 0x08,
4002                         0xf3, 0x83, 0xe8, 0xe0, 0x94, 0x86, 0x2e, 0x92,
4003                         0x78, 0x6b, 0x01, 0xc9, 0xc7, 0x83, 0xba, 0x21,
4004                         0x6a, 0x25, 0x15, 0x33, 0x4e, 0x45, 0x08, 0xec,
4005                         0x35, 0xdb, 0xe0, 0x6e, 0x31, 0x51, 0x79, 0xa9,
4006                         0x42, 0x44, 0x65, 0xc1, 0xa0, 0xf1, 0xf9, 0x2a,
4007                         0x70, 0xd5, 0xb6, 0xc6, 0xc1, 0x8c, 0x39, 0xfc,
4008                         0x25, 0xa6, 0x55, 0xd9, 0xdd, 0x2d, 0x4c, 0xec,
4009                         0x49, 0xc6, 0xeb, 0x0e, 0xa8, 0x25, 0x2a, 0x16,
4010                         0x1b, 0x66, 0x84, 0xda, 0xe2, 0x92, 0xe5, 0xc0,
4011                         0xc8, 0x53, 0x07, 0xaf, 0x80, 0x84, 0xec, 0xfd,
4012                         0xcd, 0xd1, 0x6e, 0xcd, 0x6f, 0x6a, 0xf5, 0x36,
4013                         0xc5, 0x15, 0xe5, 0x25, 0x7d, 0x77, 0xd1, 0x1a,
4014                         0x93, 0x36, 0xa9, 0xcf, 0x7c, 0xa4, 0x54, 0x4a,
4015                         0x06, 0x51, 0x48, 0x4e, 0xf6, 0x59, 0x87, 0xd2,
4016                         0x04, 0x02, 0xef, 0xd3, 0x44, 0xde, 0x76, 0x31,
4017                         0xb3, 0x34, 0x17, 0x1b, 0x9d, 0x66, 0x11, 0x9f,
4018                         0x1e, 0xcc, 0x17, 0xe9, 0xc7, 0x3c, 0x1b, 0xe7,
4019                         0xcb, 0x50, 0x08, 0xfc, 0xdc, 0x2b, 0x24, 0xdb,
4020                         0x65, 0x83, 0xd0, 0x3b, 0xe3, 0x30, 0xea, 0x94,
4021                         0x6c, 0xe7, 0xe8, 0x35, 0x32, 0xc7, 0xdb, 0x64,
4022                         0xb4, 0x01, 0xab, 0x36, 0x2c, 0x77, 0x13, 0xaf,
4023                         0xf8, 0x2b, 0x88, 0x3f, 0x54, 0x39, 0xc4, 0x44,
4024                         0xfe, 0xef, 0x6f, 0x68, 0x34, 0xbe, 0x0f, 0x05,
4025                         0x16, 0x6d, 0xf6, 0x0a, 0x30, 0xe7, 0xe3, 0xed,
4026                         0xc4, 0xde, 0x3c, 0x1b, 0x13, 0xd8, 0xdb, 0xfe,
4027                         0x41, 0x62, 0xe5, 0x28, 0xd4, 0x8d, 0xa3, 0xc7,
4028                         0x93, 0x97, 0xc6, 0x48, 0x45, 0x1d, 0x9f, 0x83,
4029                         0xdf, 0x4b, 0x40, 0x3e, 0x42, 0x25, 0x87, 0x80,
4030                         0x4c, 0x7d, 0xa8, 0xd4, 0x98, 0x23, 0x95, 0x75,
4031                         0x41, 0x8c, 0xda, 0x41, 0x9b, 0xd4, 0xa7, 0x06,
4032                         0xb5, 0xf1, 0x71, 0x09, 0x53, 0xbe, 0xca, 0xbf,
4033                         0x32, 0x03, 0xed, 0xf0, 0x50, 0x1c, 0x56, 0x39,
4034                         0x5b, 0xa4, 0x75, 0x18, 0xf7, 0x9b, 0x58, 0xef,
4035                         0x53, 0xfc, 0x2a, 0x38, 0x23, 0x15, 0x75, 0xcd,
4036                         0x45, 0xe5, 0x5a, 0x82, 0x55, 0xba, 0x21, 0xfa,
4037                         0xd4, 0xbd, 0xc6, 0x94, 0x7c, 0xc5, 0x80, 0x12,
4038                         0xf7, 0x4b, 0x32, 0xc4, 0x9a, 0x82, 0xd8, 0x28,
4039                         0x8f, 0xd9, 0xc2, 0x0f, 0x60, 0x03, 0xbe, 0x5e,
4040                         0x21, 0xd6, 0x5f, 0x58, 0xbf, 0x5c, 0xb1, 0x32,
4041                         0x82, 0x8d, 0xa9, 0xe5, 0xf2, 0x66, 0x1a, 0xc0,
4042                         0xa0, 0xbc, 0x58, 0x2f, 0x71, 0xf5, 0x2f, 0xed,
4043                         0xd1, 0x26, 0xb9, 0xd8, 0x49, 0x5a, 0x07, 0x19,
4044                         0x01, 0x7c, 0x59, 0xb0, 0xf8, 0xa4, 0xb7, 0xd3,
4045                         0x7b, 0x1a, 0x8c, 0x38, 0xf4, 0x50, 0xa4, 0x59,
4046                         0xb0, 0xcc, 0x41, 0x0b, 0x88, 0x7f, 0xe5, 0x31,
4047                         0xb3, 0x42, 0xba, 0xa2, 0x7e, 0xd4, 0x32, 0x71,
4048                         0x45, 0x87, 0x48, 0xa9, 0xc2, 0xf2, 0x89, 0xb3,
4049                         0xe4, 0xa7, 0x7e, 0x52, 0x15, 0x61, 0xfa, 0xfe,
4050                         0xc9, 0xdd, 0x81, 0xeb, 0x13, 0xab, 0xab, 0xc3,
4051                         0x98, 0x59, 0xd8, 0x16, 0x3d, 0x14, 0x7a, 0x1c,
4052                         0x3c, 0x41, 0x9a, 0x16, 0x16, 0x9b, 0xd2, 0xd2,
4053                         0x69, 0x3a, 0x29, 0x23, 0xac, 0x86, 0x32, 0xa5,
4054                         0x48, 0x9c, 0x9e, 0xf3, 0x47, 0x77, 0x81, 0x70,
4055                         0x24, 0xe8, 0x85, 0xd2, 0xf5, 0xb5, 0xfa, 0xff,
4056                         0x59, 0x6a, 0xd3, 0x50, 0x59, 0x43, 0x59, 0xde,
4057                         0xd9, 0xf1, 0x55, 0xa5, 0x0c, 0xc3, 0x1a, 0x1a,
4058                         0x18, 0x34, 0x0d, 0x1a, 0x63, 0x33, 0xed, 0x10,
4059                         0xe0, 0x1d, 0x2a, 0x18, 0xd2, 0xc0, 0x54, 0xa8,
4060                         0xca, 0xb5, 0x9a, 0xd3, 0xdd, 0xca, 0x45, 0x84,
4061                         0x50, 0xe7, 0x0f, 0xfe, 0xa4, 0x99, 0x5a, 0xbe,
4062                         0x43, 0x2d, 0x9a, 0xcb, 0x92, 0x3f, 0x5a, 0x1d,
4063                         0x85, 0xd8, 0xc9, 0xdf, 0x68, 0xc9, 0x12, 0x80,
4064                         0x56, 0x0c, 0xdc, 0x00, 0xdc, 0x3a, 0x7d, 0x9d,
4065                         0xa3, 0xa2, 0xe8, 0x4d, 0xbf, 0xf9, 0x70, 0xa0,
4066                         0xa4, 0x13, 0x4f, 0x6b, 0xaf, 0x0a, 0x89, 0x7f,
4067                         0xda, 0xf0, 0xbf, 0x9b, 0xc8, 0x1d, 0xe5, 0xf8,
4068                         0x2e, 0x8b, 0x07, 0xb5, 0x73, 0x1b, 0xcc, 0xa2,
4069                         0xa6, 0xad, 0x30, 0xbc, 0x78, 0x3c, 0x5b, 0x10,
4070                         0xfa, 0x5e, 0x62, 0x2d, 0x9e, 0x64, 0xb3, 0x33,
4071                         0xce, 0xf9, 0x1f, 0x86, 0xe7, 0x8b, 0xa2, 0xb8,
4072                         0xe8, 0x99, 0x57, 0x8c, 0x11, 0xed, 0x66, 0xd9,
4073                         0x3c, 0x72, 0xb9, 0xc3, 0xe6, 0x4e, 0x17, 0x3a,
4074                         0x6a, 0xcb, 0x42, 0x24, 0x06, 0xed, 0x3e, 0x4e,
4075                         0xa3, 0xe8, 0x6a, 0x94, 0xda, 0x0d, 0x4e, 0xd5,
4076                         0x14, 0x19, 0xcf, 0xb6, 0x26, 0xd8, 0x2e, 0xcc,
4077                         0x64, 0x76, 0x38, 0x49, 0x4d, 0xfe, 0x30, 0x6d,
4078                         0xe4, 0xc8, 0x8c, 0x7b, 0xc4, 0xe0, 0x35, 0xba,
4079                         0x22, 0x6e, 0x76, 0xe1, 0x1a, 0xf2, 0x53, 0xc3,
4080                         0x28, 0xa2, 0x82, 0x1f, 0x61, 0x69, 0xad, 0xc1,
4081                         0x7b, 0x28, 0x4b, 0x1e, 0x6c, 0x85, 0x95, 0x9b,
4082                         0x51, 0xb5, 0x17, 0x7f, 0x12, 0x69, 0x8c, 0x24,
4083                         0xd5, 0xc7, 0x5a, 0x5a, 0x11, 0x54, 0xff, 0x5a,
4084                         0xf7, 0x16, 0xc3, 0x91, 0xa6, 0xf0, 0xdc, 0x0a,
4085                         0xb6, 0xa7, 0x4a, 0x0d, 0x7a, 0x58, 0xfe, 0xa5,
4086                         0xf5, 0xcb, 0x8f, 0x7b, 0x0e, 0xea, 0x57, 0xe7,
4087                         0xbd, 0x79, 0xd6, 0x1c, 0x88, 0x23, 0x6c, 0xf2,
4088                         0x4d, 0x29, 0x77, 0x53, 0x35, 0x6a, 0x00, 0x8d,
4089                         0xcd, 0xa3, 0x58, 0xbe, 0x77, 0x99, 0x18, 0xf8,
4090                         0xe6, 0xe1, 0x8f, 0xe9, 0x37, 0x8f, 0xe3, 0xe2,
4091                         0x5a, 0x8a, 0x93, 0x25, 0xaf, 0xf3, 0x78, 0x80,
4092                         0xbe, 0xa6, 0x1b, 0xc6, 0xac, 0x8b, 0x1c, 0x91,
4093                         0x58, 0xe1, 0x9f, 0x89, 0x35, 0x9d, 0x1d, 0x21,
4094                         0x29, 0x9f, 0xf4, 0x99, 0x02, 0x27, 0x0f, 0xa8,
4095                         0x4f, 0x79, 0x94, 0x2b, 0x33, 0x2c, 0xda, 0xa2,
4096                         0x26, 0x39, 0x83, 0x94, 0xef, 0x27, 0xd8, 0x53,
4097                         0x8f, 0x66, 0x0d, 0xe4, 0x41, 0x7d, 0x34, 0xcd,
4098                         0x43, 0x7c, 0x95, 0x0a, 0x53, 0xef, 0x66, 0xda,
4099                         0x7e, 0x9b, 0xf3, 0x93, 0xaf, 0xd0, 0x73, 0x71,
4100                         0xba, 0x40, 0x9b, 0x74, 0xf8, 0xd7, 0xd7, 0x41,
4101                         0x6d, 0xaf, 0x72, 0x9c, 0x8d, 0x21, 0x87, 0x3c,
4102                         0xfd, 0x0a, 0x90, 0xa9, 0x47, 0x96, 0x9e, 0xd3,
4103                         0x88, 0xee, 0x73, 0xcf, 0x66, 0x2f, 0x52, 0x56,
4104                         0x6d, 0xa9, 0x80, 0x4c, 0xe2, 0x6f, 0x62, 0x88,
4105                         0x3f, 0x0e, 0x54, 0x17, 0x48, 0x80, 0x5d, 0xd3,
4106                         0xc3, 0xda, 0x25, 0x3d, 0xa1, 0xc8, 0xcb, 0x9f,
4107                         0x9b, 0x70, 0xb3, 0xa1, 0xeb, 0x04, 0x52, 0xa1,
4108                         0xf2, 0x22, 0x0f, 0xfc, 0xc8, 0x18, 0xfa, 0xf9,
4109                         0x85, 0x9c, 0xf1, 0xac, 0xeb, 0x0c, 0x02, 0x46,
4110                         0x75, 0xd2, 0xf5, 0x2c, 0xe3, 0xd2, 0x59, 0x94,
4111                         0x12, 0xf3, 0x3c, 0xfc, 0xd7, 0x92, 0xfa, 0x36,
4112                         0xba, 0x61, 0x34, 0x38, 0x7c, 0xda, 0x48, 0x3e,
4113                         0x08, 0xc9, 0x39, 0x23, 0x5e, 0x02, 0x2c, 0x1a,
4114                         0x18, 0x7e, 0xb4, 0xd9, 0xfd, 0x9e, 0x40, 0x02,
4115                         0xb1, 0x33, 0x37, 0x32, 0xe7, 0xde, 0xd6, 0xd0,
4116                         0x7c, 0x58, 0x65, 0x4b, 0xf8, 0x34, 0x27, 0x9c,
4117                         0x44, 0xb4, 0xbd, 0xe9, 0xe9, 0x4c, 0x78, 0x7d,
4118                         0x4b, 0x9f, 0xce, 0xb1, 0xcd, 0x47, 0xa5, 0x37,
4119                         0xe5, 0x6d, 0xbd, 0xb9, 0x43, 0x94, 0x0a, 0xd4,
4120                         0xd6, 0xf9, 0x04, 0x5f, 0xb5, 0x66, 0x6c, 0x1a,
4121                         0x35, 0x12, 0xe3, 0x36, 0x28, 0x27, 0x36, 0x58,
4122                         0x01, 0x2b, 0x79, 0xe4, 0xba, 0x6d, 0x10, 0x7d,
4123                         0x65, 0xdf, 0x84, 0x95, 0xf4, 0xd5, 0xb6, 0x8f,
4124                         0x2b, 0x9f, 0x96, 0x00, 0x86, 0x60, 0xf0, 0x21,
4125                         0x76, 0xa8, 0x6a, 0x8c, 0x28, 0x1c, 0xb3, 0x6b,
4126                         0x97, 0xd7, 0xb6, 0x53, 0x2a, 0xcc, 0xab, 0x40,
4127                         0x9d, 0x62, 0x79, 0x58, 0x52, 0xe6, 0x65, 0xb7,
4128                         0xab, 0x55, 0x67, 0x9c, 0x89, 0x7c, 0x03, 0xb0,
4129                         0x73, 0x59, 0xc5, 0x81, 0xf5, 0x18, 0x17, 0x5c,
4130                         0x89, 0xf3, 0x78, 0x35, 0x44, 0x62, 0x78, 0x72,
4131                         0xd0, 0x96, 0xeb, 0x31, 0xe7, 0x87, 0x77, 0x14,
4132                         0x99, 0x51, 0xf2, 0x59, 0x26, 0x9e, 0xb5, 0xa6,
4133                         0x45, 0xfe, 0x6e, 0xbd, 0x07, 0x4c, 0x94, 0x5a,
4134                         0xa5, 0x7d, 0xfc, 0xf1, 0x2b, 0x77, 0xe2, 0xfe,
4135                         0x17, 0xd4, 0x84, 0xa0, 0xac, 0xb5, 0xc7, 0xda,
4136                         0xa9, 0x1a, 0xb6, 0xf3, 0x74, 0x11, 0xb4, 0x9d,
4137                         0xfb, 0x79, 0x2e, 0x04, 0x2d, 0x50, 0x28, 0x83,
4138                         0xbf, 0xc6, 0x52, 0xd3, 0x34, 0xd6, 0xe8, 0x7a,
4139                         0xb6, 0xea, 0xe7, 0xa8, 0x6c, 0x15, 0x1e, 0x2c,
4140                         0x57, 0xbc, 0x48, 0x4e, 0x5f, 0x5c, 0xb6, 0x92,
4141                         0xd2, 0x49, 0x77, 0x81, 0x6d, 0x90, 0x70, 0xae,
4142                         0x98, 0xa1, 0x03, 0x0d, 0x6b, 0xb9, 0x77, 0x14,
4143                         0xf1, 0x4e, 0x23, 0xd3, 0xf8, 0x68, 0xbd, 0xc2,
4144                         0xfe, 0x04, 0xb7, 0x5c, 0xc5, 0x17, 0x60, 0x8f,
4145                         0x65, 0x54, 0xa4, 0x7a, 0x42, 0xdc, 0x18, 0x0d,
4146                         0xb5, 0xcf, 0x0f, 0xd3, 0xc7, 0x91, 0x66, 0x1b,
4147                         0x45, 0x42, 0x27, 0x75, 0x50, 0xe5, 0xee, 0xb8,
4148                         0x7f, 0x33, 0x2c, 0xba, 0x4a, 0x92, 0x4d, 0x2c,
4149                         0x3c, 0xe3, 0x0d, 0x80, 0x01, 0xba, 0x0d, 0x29,
4150                         0xd8, 0x3c, 0xe9, 0x13, 0x16, 0x57, 0xe6, 0xea,
4151                         0x94, 0x52, 0xe7, 0x00, 0x4d, 0x30, 0xb0, 0x0f,
4152                         0x35, 0xb8, 0xb8, 0xa7, 0xb1, 0xb5, 0x3b, 0x44,
4153                         0xe1, 0x2f, 0xfd, 0x88, 0xed, 0x43, 0xe7, 0x52,
4154                         0x10, 0x93, 0xb3, 0x8a, 0x30, 0x6b, 0x0a, 0xf7,
4155                         0x23, 0xc6, 0x50, 0x9d, 0x4a, 0xb0, 0xde, 0xc3,
4156                         0xdc, 0x9b, 0x2f, 0x01, 0x56, 0x36, 0x09, 0xc5,
4157                         0x2f, 0x6b, 0xfe, 0xf1, 0xd8, 0x27, 0x45, 0x03,
4158                         0x30, 0x5e, 0x5c, 0x5b, 0xb4, 0x62, 0x0e, 0x1a,
4159                         0xa9, 0x21, 0x2b, 0x92, 0x94, 0x87, 0x62, 0x57,
4160                         0x4c, 0x10, 0x74, 0x1a, 0xf1, 0x0a, 0xc5, 0x84,
4161                         0x3b, 0x9e, 0x72, 0x02, 0xd7, 0xcc, 0x09, 0x56,
4162                         0xbd, 0x54, 0xc1, 0xf0, 0xc3, 0xe3, 0xb3, 0xf8,
4163                         0xd2, 0x0d, 0x61, 0xcb, 0xef, 0xce, 0x0d, 0x05,
4164                         0xb0, 0x98, 0xd9, 0x8e, 0x4f, 0xf9, 0xbc, 0x93,
4165                         0xa6, 0xea, 0xc8, 0xcf, 0x10, 0x53, 0x4b, 0xf1,
4166                         0xec, 0xfc, 0x89, 0xf9, 0x64, 0xb0, 0x22, 0xbf,
4167                         0x9e, 0x55, 0x46, 0x9f, 0x7c, 0x50, 0x8e, 0x84,
4168                         0x54, 0x20, 0x98, 0xd7, 0x6c, 0x40, 0x1e, 0xdb,
4169                         0x69, 0x34, 0x78, 0x61, 0x24, 0x21, 0x9c, 0x8a,
4170                         0xb3, 0x62, 0x31, 0x8b, 0x6e, 0xf5, 0x2a, 0x35,
4171                         0x86, 0x13, 0xb1, 0x6c, 0x64, 0x2e, 0x41, 0xa5,
4172                         0x05, 0xf2, 0x42, 0xba, 0xd2, 0x3a, 0x0d, 0x8e,
4173                         0x8a, 0x59, 0x94, 0x3c, 0xcf, 0x36, 0x27, 0x82,
4174                         0xc2, 0x45, 0xee, 0x58, 0xcd, 0x88, 0xb4, 0xec,
4175                         0xde, 0xb2, 0x96, 0x0a, 0xaf, 0x38, 0x6f, 0x88,
4176                         0xd7, 0xd8, 0xe1, 0xdf, 0xb9, 0x96, 0xa9, 0x0a,
4177                         0xb1, 0x95, 0x28, 0x86, 0x20, 0xe9, 0x17, 0x49,
4178                         0xa2, 0x29, 0x38, 0xaa, 0xa5, 0xe9, 0x6e, 0xf1,
4179                         0x19, 0x27, 0xc0, 0xd5, 0x2a, 0x22, 0xc3, 0x0b,
4180                         0xdb, 0x7c, 0x73, 0x10, 0xb9, 0xba, 0x89, 0x76,
4181                         0x54, 0xae, 0x7d, 0x71, 0xb3, 0x93, 0xf6, 0x32,
4182                         0xe6, 0x47, 0x43, 0x55, 0xac, 0xa0, 0x0d, 0xc2,
4183                         0x93, 0x27, 0x4a, 0x8e, 0x0e, 0x74, 0x15, 0xc7,
4184                         0x0b, 0x85, 0xd9, 0x0c, 0xa9, 0x30, 0x7a, 0x3e,
4185                         0xea, 0x8f, 0x85, 0x6d, 0x3a, 0x12, 0x4f, 0x72,
4186                         0x69, 0x58, 0x7a, 0x80, 0xbb, 0xb5, 0x97, 0xf3,
4187                         0xcf, 0x70, 0xd2, 0x5d, 0xdd, 0x4d, 0x21, 0x79,
4188                         0x54, 0x4d, 0xe4, 0x05, 0xe8, 0xbd, 0xc2, 0x62,
4189                         0xb1, 0x3b, 0x77, 0x1c, 0xd6, 0x5c, 0xf3, 0xa0,
4190                         0x79, 0x00, 0xa8, 0x6c, 0x29, 0xd9, 0x18, 0x24,
4191                         0x36, 0xa2, 0x46, 0xc0, 0x96, 0x65, 0x7f, 0xbd,
4192                         0x2a, 0xed, 0x36, 0x16, 0x0c, 0xaa, 0x9f, 0xf4,
4193                         0xc5, 0xb4, 0xe2, 0x12, 0xed, 0x69, 0xed, 0x4f,
4194                         0x26, 0x2c, 0x39, 0x52, 0x89, 0x98, 0xe7, 0x2c,
4195                         0x99, 0xa4, 0x9e, 0xa3, 0x9b, 0x99, 0x46, 0x7a,
4196                         0x3a, 0xdc, 0xa8, 0x59, 0xa3, 0xdb, 0xc3, 0x3b,
4197                         0x95, 0x0d, 0x3b, 0x09, 0x6e, 0xee, 0x83, 0x5d,
4198                         0x32, 0x4d, 0xed, 0xab, 0xfa, 0x98, 0x14, 0x4e,
4199                         0xc3, 0x15, 0x45, 0x53, 0x61, 0xc4, 0x93, 0xbd,
4200                         0x90, 0xf4, 0x99, 0x95, 0x4c, 0xe6, 0x76, 0x92,
4201                         0x29, 0x90, 0x46, 0x30, 0x92, 0x69, 0x7d, 0x13,
4202                         0xf2, 0xa5, 0xcd, 0x69, 0x49, 0x44, 0xb2, 0x0f,
4203                         0x63, 0x40, 0x36, 0x5f, 0x09, 0xe2, 0x78, 0xf8,
4204                         0x91, 0xe3, 0xe2, 0xfa, 0x10, 0xf7, 0xc8, 0x24,
4205                         0xa8, 0x89, 0x32, 0x5c, 0x37, 0x25, 0x1d, 0xb2,
4206                         0xea, 0x17, 0x8a, 0x0a, 0xa9, 0x64, 0xc3, 0x7c,
4207                         0x3c, 0x7c, 0xbd, 0xc6, 0x79, 0x34, 0xe7, 0xe2,
4208                         0x85, 0x8e, 0xbf, 0xf8, 0xde, 0x92, 0xa0, 0xae,
4209                         0x20, 0xc4, 0xf6, 0xbb, 0x1f, 0x38, 0x19, 0x0e,
4210                         0xe8, 0x79, 0x9c, 0xa1, 0x23, 0xe9, 0x54, 0x7e,
4211                         0x37, 0x2f, 0xe2, 0x94, 0x32, 0xaf, 0xa0, 0x23,
4212                         0x49, 0xe4, 0xc0, 0xb3, 0xac, 0x00, 0x8f, 0x36,
4213                         0x05, 0xc4, 0xa6, 0x96, 0xec, 0x05, 0x98, 0x4f,
4214                         0x96, 0x67, 0x57, 0x1f, 0x20, 0x86, 0x1b, 0x2d,
4215                         0x69, 0xe4, 0x29, 0x93, 0x66, 0x5f, 0xaf, 0x6b,
4216                         0x88, 0x26, 0x2c, 0x67, 0x02, 0x4b, 0x52, 0xd0,
4217                         0x83, 0x7a, 0x43, 0x1f, 0xc0, 0x71, 0x15, 0x25,
4218                         0x77, 0x65, 0x08, 0x60, 0x11, 0x76, 0x4c, 0x8d,
4219                         0xed, 0xa9, 0x27, 0xc6, 0xb1, 0x2a, 0x2c, 0x6a,
4220                         0x4a, 0x97, 0xf5, 0xc6, 0xb7, 0x70, 0x42, 0xd3,
4221                         0x03, 0xd1, 0x24, 0x95, 0xec, 0x6d, 0xab, 0x38,
4222                         0x72, 0xce, 0xe2, 0x8b, 0x33, 0xd7, 0x51, 0x09,
4223                         0xdc, 0x45, 0xe0, 0x09, 0x96, 0x32, 0xf3, 0xc4,
4224                         0x84, 0xdc, 0x73, 0x73, 0x2d, 0x1b, 0x11, 0x98,
4225                         0xc5, 0x0e, 0x69, 0x28, 0x94, 0xc7, 0xb5, 0x4d,
4226                         0xc8, 0x8a, 0xd0, 0xaa, 0x13, 0x2e, 0x18, 0x74,
4227                         0xdd, 0xd1, 0x1e, 0xf3, 0x90, 0xe8, 0xfc, 0x9a,
4228                         0x72, 0x4a, 0x0e, 0xd1, 0xe4, 0xfb, 0x0d, 0x96,
4229                         0xd1, 0x0c, 0x79, 0x85, 0x1b, 0x1c, 0xfe, 0xe1,
4230                         0x62, 0x8f, 0x7a, 0x73, 0x32, 0xab, 0xc8, 0x18,
4231                         0x69, 0xe3, 0x34, 0x30, 0xdf, 0x13, 0xa6, 0xe5,
4232                         0xe8, 0x0e, 0x67, 0x7f, 0x81, 0x11, 0xb4, 0x60,
4233                         0xc7, 0xbd, 0x79, 0x65, 0x50, 0xdc, 0xc4, 0x5b,
4234                         0xde, 0x39, 0xa4, 0x01, 0x72, 0x63, 0xf3, 0xd1,
4235                         0x64, 0x4e, 0xdf, 0xfc, 0x27, 0x92, 0x37, 0x0d,
4236                         0x57, 0xcd, 0x11, 0x4f, 0x11, 0x04, 0x8e, 0x1d,
4237                         0x16, 0xf7, 0xcd, 0x92, 0x9a, 0x99, 0x30, 0x14,
4238                         0xf1, 0x7c, 0x67, 0x1b, 0x1f, 0x41, 0x0b, 0xe8,
4239                         0x32, 0xe8, 0xb8, 0xc1, 0x4f, 0x54, 0x86, 0x4f,
4240                         0xe5, 0x79, 0x81, 0x73, 0xcd, 0x43, 0x59, 0x68,
4241                         0x73, 0x02, 0x3b, 0x78, 0x21, 0x72, 0x43, 0x00,
4242                         0x49, 0x17, 0xf7, 0x00, 0xaf, 0x68, 0x24, 0x53,
4243                         0x05, 0x0a, 0xc3, 0x33, 0xe0, 0x33, 0x3f, 0x69,
4244                         0xd2, 0x84, 0x2f, 0x0b, 0xed, 0xde, 0x04, 0xf4,
4245                         0x11, 0x94, 0x13, 0x69, 0x51, 0x09, 0x28, 0xde,
4246                         0x57, 0x5c, 0xef, 0xdc, 0x9a, 0x49, 0x1c, 0x17,
4247                         0x97, 0xf3, 0x96, 0xc1, 0x7f, 0x5d, 0x2e, 0x7d,
4248                         0x55, 0xb8, 0xb3, 0x02, 0x09, 0xb3, 0x1f, 0xe7,
4249                         0xc9, 0x8d, 0xa3, 0x36, 0x34, 0x8a, 0x77, 0x13,
4250                         0x30, 0x63, 0x4c, 0xa5, 0xcd, 0xc3, 0xe0, 0x7e,
4251                         0x05, 0xa1, 0x7b, 0x0c, 0xcb, 0x74, 0x47, 0x31,
4252                         0x62, 0x03, 0x43, 0xf1, 0x87, 0xb4, 0xb0, 0x85,
4253                         0x87, 0x8e, 0x4b, 0x25, 0xc7, 0xcf, 0xae, 0x4b,
4254                         0x36, 0x46, 0x3e, 0x62, 0xbc, 0x6f, 0xeb, 0x5f,
4255                         0x73, 0xac, 0xe6, 0x07, 0xee, 0xc1, 0xa1, 0xd6,
4256                         0xc4, 0xab, 0xc9, 0xd6, 0x89, 0x45, 0xe1, 0xf1,
4257                         0x04, 0x4e, 0x1a, 0x6f, 0xbb, 0x4f, 0x3a, 0xa3,
4258                         0xa0, 0xcb, 0xa3, 0x0a, 0xd8, 0x71, 0x35, 0x55,
4259                         0xe4, 0xbc, 0x2e, 0x04, 0x06, 0xe6, 0xff, 0x5b,
4260                         0x1c, 0xc0, 0x11, 0x7c, 0xc5, 0x17, 0xf3, 0x38,
4261                         0xcf, 0xe9, 0xba, 0x0f, 0x0e, 0xef, 0x02, 0xc2,
4262                         0x8d, 0xc6, 0xbc, 0x4b, 0x67, 0x20, 0x95, 0xd7,
4263                         0x2c, 0x45, 0x5b, 0x86, 0x44, 0x8c, 0x6f, 0x2e,
4264                         0x7e, 0x9f, 0x1c, 0x77, 0xba, 0x6b, 0x0e, 0xa3,
4265                         0x69, 0xdc, 0xab, 0x24, 0x57, 0x60, 0x47, 0xc1,
4266                         0xd1, 0xa5, 0x9d, 0x23, 0xe6, 0xb1, 0x37, 0xfe,
4267                         0x93, 0xd2, 0x4c, 0x46, 0xf9, 0x0c, 0xc6, 0xfb,
4268                         0xd6, 0x9d, 0x99, 0x69, 0xab, 0x7a, 0x07, 0x0c,
4269                         0x65, 0xe7, 0xc4, 0x08, 0x96, 0xe2, 0xa5, 0x01,
4270                         0x3f, 0x46, 0x07, 0x05, 0x7e, 0xe8, 0x9a, 0x90,
4271                         0x50, 0xdc, 0xe9, 0x7a, 0xea, 0xa1, 0x39, 0x6e,
4272                         0x66, 0xe4, 0x6f, 0xa5, 0x5f, 0xb2, 0xd9, 0x5b,
4273                         0xf5, 0xdb, 0x2a, 0x32, 0xf0, 0x11, 0x6f, 0x7c,
4274                         0x26, 0x10, 0x8f, 0x3d, 0x80, 0xe9, 0x58, 0xf7,
4275                         0xe0, 0xa8, 0x57, 0xf8, 0xdb, 0x0e, 0xce, 0x99,
4276                         0x63, 0x19, 0x3d, 0xd5, 0xec, 0x1b, 0x77, 0x69,
4277                         0x98, 0xf6, 0xe4, 0x5f, 0x67, 0x17, 0x4b, 0x09,
4278                         0x85, 0x62, 0x82, 0x70, 0x18, 0xe2, 0x9a, 0x78,
4279                         0xe2, 0x62, 0xbd, 0xb4, 0xf1, 0x42, 0xc6, 0xfb,
4280                         0x08, 0xd0, 0xbd, 0xeb, 0x4e, 0x09, 0xf2, 0xc8,
4281                         0x1e, 0xdc, 0x3d, 0x32, 0x21, 0x56, 0x9c, 0x4f,
4282                         0x35, 0xf3, 0x61, 0x06, 0x72, 0x84, 0xc4, 0x32,
4283                         0xf2, 0xf1, 0xfa, 0x0b, 0x2f, 0xc3, 0xdb, 0x02,
4284                         0x04, 0xc2, 0xde, 0x57, 0x64, 0x60, 0x8d, 0xcf,
4285                         0xcb, 0x86, 0x5d, 0x97, 0x3e, 0xb1, 0x9c, 0x01,
4286                         0xd6, 0x28, 0x8f, 0x99, 0xbc, 0x46, 0xeb, 0x05,
4287                         0xaf, 0x7e, 0xb8, 0x21, 0x2a, 0x56, 0x85, 0x1c,
4288                         0xb3, 0x71, 0xa0, 0xde, 0xca, 0x96, 0xf1, 0x78,
4289                         0x49, 0xa2, 0x99, 0x81, 0x80, 0x5c, 0x01, 0xf5,
4290                         0xa0, 0xa2, 0x56, 0x63, 0xe2, 0x70, 0x07, 0xa5,
4291                         0x95, 0xd6, 0x85, 0xeb, 0x36, 0x9e, 0xa9, 0x51,
4292                         0x66, 0x56, 0x5f, 0x1d, 0x02, 0x19, 0xe2, 0xf6,
4293                         0x4f, 0x73, 0x38, 0x09, 0x75, 0x64, 0x48, 0xe0,
4294                         0xf1, 0x7e, 0x0e, 0xe8, 0x9d, 0xf9, 0xed, 0x94,
4295                         0xfe, 0x16, 0x26, 0x62, 0x49, 0x74, 0xf4, 0xb0,
4296                         0xd4, 0xa9, 0x6c, 0xb0, 0xfd, 0x53, 0xe9, 0x81,
4297                         0xe0, 0x7a, 0xbf, 0xcf, 0xb5, 0xc4, 0x01, 0x81,
4298                         0x79, 0x99, 0x77, 0x01, 0x3b, 0xe9, 0xa2, 0xb6,
4299                         0xe6, 0x6a, 0x8a, 0x9e, 0x56, 0x1c, 0x8d, 0x1e,
4300                         0x8f, 0x06, 0x55, 0x2c, 0x6c, 0xdc, 0x92, 0x87,
4301                         0x64, 0x3b, 0x4b, 0x19, 0xa1, 0x13, 0x64, 0x1d,
4302                         0x4a, 0xe9, 0xc0, 0x00, 0xb8, 0x95, 0xef, 0x6b,
4303                         0x1a, 0x86, 0x6d, 0x37, 0x52, 0x02, 0xc2, 0xe0,
4304                         0xc8, 0xbb, 0x42, 0x0c, 0x02, 0x21, 0x4a, 0xc9,
4305                         0xef, 0xa0, 0x54, 0xe4, 0x5e, 0x16, 0x53, 0x81,
4306                         0x70, 0x62, 0x10, 0xaf, 0xde, 0xb8, 0xb5, 0xd3,
4307                         0xe8, 0x5e, 0x6c, 0xc3, 0x8a, 0x3e, 0x18, 0x07,
4308                         0xf2, 0x2f, 0x7d, 0xa7, 0xe1, 0x3d, 0x4e, 0xb4,
4309                         0x26, 0xa7, 0xa3, 0x93, 0x86, 0xb2, 0x04, 0x1e,
4310                         0x53, 0x5d, 0x86, 0xd6, 0xde, 0x65, 0xca, 0xe3,
4311                         0x4e, 0xc1, 0xcf, 0xef, 0xc8, 0x70, 0x1b, 0x83,
4312                         0x13, 0xdd, 0x18, 0x8b, 0x0d, 0x76, 0xd2, 0xf6,
4313                         0x37, 0x7a, 0x93, 0x7a, 0x50, 0x11, 0x9f, 0x96,
4314                         0x86, 0x25, 0xfd, 0xac, 0xdc, 0xbe, 0x18, 0x93,
4315                         0x19, 0x6b, 0xec, 0x58, 0x4f, 0xb9, 0x75, 0xa7,
4316                         0xdd, 0x3f, 0x2f, 0xec, 0xc8, 0x5a, 0x84, 0xab,
4317                         0xd5, 0xe4, 0x8a, 0x07, 0xf6, 0x4d, 0x23, 0xd6,
4318                         0x03, 0xfb, 0x03, 0x6a, 0xea, 0x66, 0xbf, 0xd4,
4319                         0xb1, 0x34, 0xfb, 0x78, 0xe9, 0x55, 0xdc, 0x7c,
4320                         0x3d, 0x9c, 0xe5, 0x9a, 0xac, 0xc3, 0x7a, 0x80,
4321                         0x24, 0x6d, 0xa0, 0xef, 0x25, 0x7c, 0xb7, 0xea,
4322                         0xce, 0x4d, 0x5f, 0x18, 0x60, 0xce, 0x87, 0x22,
4323                         0x66, 0x2f, 0xd5, 0xdd, 0xdd, 0x02, 0x21, 0x75,
4324                         0x82, 0xa0, 0x1f, 0x58, 0xc6, 0xd3, 0x62, 0xf7,
4325                         0x32, 0xd8, 0xaf, 0x1e, 0x07, 0x77, 0x51, 0x96,
4326                         0xd5, 0x6b, 0x1e, 0x7e, 0x80, 0x02, 0xe8, 0x67,
4327                         0xea, 0x17, 0x0b, 0x10, 0xd2, 0x3f, 0x28, 0x25,
4328                         0x4f, 0x05, 0x77, 0x02, 0x14, 0x69, 0xf0, 0x2c,
4329                         0xbe, 0x0c, 0xf1, 0x74, 0x30, 0xd1, 0xb9, 0x9b,
4330                         0xfc, 0x8c, 0xbb, 0x04, 0x16, 0xd9, 0xba, 0xc3,
4331                         0xbc, 0x91, 0x8a, 0xc4, 0x30, 0xa4, 0xb0, 0x12,
4332                         0x4c, 0x21, 0x87, 0xcb, 0xc9, 0x1d, 0x16, 0x96,
4333                         0x07, 0x6f, 0x23, 0x54, 0xb9, 0x6f, 0x79, 0xe5,
4334                         0x64, 0xc0, 0x64, 0xda, 0xb1, 0xae, 0xdd, 0x60,
4335                         0x6c, 0x1a, 0x9d, 0xd3, 0x04, 0x8e, 0x45, 0xb0,
4336                         0x92, 0x61, 0xd0, 0x48, 0x81, 0xed, 0x5e, 0x1d,
4337                         0xa0, 0xc9, 0xa4, 0x33, 0xc7, 0x13, 0x51, 0x5d,
4338                         0x7f, 0x83, 0x73, 0xb6, 0x70, 0x18, 0x65, 0x3e,
4339                         0x2f, 0x0e, 0x7a, 0x12, 0x39, 0x98, 0xab, 0xd8,
4340                         0x7e, 0x6f, 0xa3, 0xd1, 0xba, 0x56, 0xad, 0xbd,
4341                         0xf0, 0x03, 0x01, 0x1c, 0x85, 0x35, 0x9f, 0xeb,
4342                         0x19, 0x63, 0xa1, 0xaf, 0xfe, 0x2d, 0x35, 0x50,
4343                         0x39, 0xa0, 0x65, 0x7c, 0x95, 0x7e, 0x6b, 0xfe,
4344                         0xc1, 0xac, 0x07, 0x7c, 0x98, 0x4f, 0xbe, 0x57,
4345                         0xa7, 0x22, 0xec, 0xe2, 0x7e, 0x29, 0x09, 0x53,
4346                         0xe8, 0xbf, 0xb4, 0x7e, 0x3f, 0x8f, 0xfc, 0x14,
4347                         0xce, 0x54, 0xf9, 0x18, 0x58, 0xb5, 0xff, 0x44,
4348                         0x05, 0x9d, 0xce, 0x1b, 0xb6, 0x82, 0x23, 0xc8,
4349                         0x2e, 0xbc, 0x69, 0xbb, 0x4a, 0x29, 0x0f, 0x65,
4350                         0x94, 0xf0, 0x63, 0x06, 0x0e, 0xef, 0x8c, 0xbd,
4351                         0xff, 0xfd, 0xb0, 0x21, 0x6e, 0x57, 0x05, 0x75,
4352                         0xda, 0xd5, 0xc4, 0xeb, 0x8d, 0x32, 0xf7, 0x50,
4353                         0xd3, 0x6f, 0x22, 0xed, 0x5f, 0x8e, 0xa2, 0x5b,
4354                         0x80, 0x8c, 0xc8, 0x78, 0x40, 0x24, 0x4b, 0x89,
4355                         0x30, 0xce, 0x7a, 0x97, 0x0e, 0xc4, 0xaf, 0xef,
4356                         0x9b, 0xb4, 0xcd, 0x66, 0x74, 0x14, 0x04, 0x2b,
4357                         0xf7, 0xce, 0x0b, 0x1c, 0x6e, 0xc2, 0x78, 0x8c,
4358                         0xca, 0xc5, 0xd0, 0x1c, 0x95, 0x4a, 0x91, 0x2d,
4359                         0xa7, 0x20, 0xeb, 0x86, 0x52, 0xb7, 0x67, 0xd8,
4360                         0x0c, 0xd6, 0x04, 0x14, 0xde, 0x51, 0x74, 0x75,
4361                         0xe7, 0x11, 0xb4, 0x87, 0xa3, 0x3d, 0x2d, 0xad,
4362                         0x4f, 0xef, 0xa0, 0x0f, 0x70, 0x00, 0x6d, 0x13,
4363                         0x19, 0x1d, 0x41, 0x50, 0xe9, 0xd8, 0xf0, 0x32,
4364                         0x71, 0xbc, 0xd3, 0x11, 0xf2, 0xac, 0xbe, 0xaf,
4365                         0x75, 0x46, 0x65, 0x4e, 0x07, 0x34, 0x37, 0xa3,
4366                         0x89, 0xfe, 0x75, 0xd4, 0x70, 0x4c, 0xc6, 0x3f,
4367                         0x69, 0x24, 0x0e, 0x38, 0x67, 0x43, 0x8c, 0xde,
4368                         0x06, 0xb5, 0xb8, 0xe7, 0xc4, 0xf0, 0x41, 0x8f,
4369                         0xf0, 0xbd, 0x2f, 0x0b, 0xb9, 0x18, 0xf8, 0xde,
4370                         0x64, 0xb1, 0xdb, 0xee, 0x00, 0x50, 0x77, 0xe1,
4371                         0xc7, 0xff, 0xa6, 0xfa, 0xdd, 0x70, 0xf4, 0xe3,
4372                         0x93, 0xe9, 0x77, 0x35, 0x3d, 0x4b, 0x2f, 0x2b,
4373                         0x6d, 0x55, 0xf0, 0xfc, 0x88, 0x54, 0x4e, 0x89,
4374                         0xc1, 0x8a, 0x23, 0x31, 0x2d, 0x14, 0x2a, 0xb8,
4375                         0x1b, 0x15, 0xdd, 0x9e, 0x6e, 0x7b, 0xda, 0x05,
4376                         0x91, 0x7d, 0x62, 0x64, 0x96, 0x72, 0xde, 0xfc,
4377                         0xc1, 0xec, 0xf0, 0x23, 0x51, 0x6f, 0xdb, 0x5b,
4378                         0x1d, 0x08, 0x57, 0xce, 0x09, 0xb8, 0xf6, 0xcd,
4379                         0x8d, 0x95, 0xf2, 0x20, 0xbf, 0x0f, 0x20, 0x57,
4380                         0x98, 0x81, 0x84, 0x4f, 0x15, 0x5c, 0x76, 0xe7,
4381                         0x3e, 0x0a, 0x3a, 0x6c, 0xc4, 0x8a, 0xbe, 0x78,
4382                         0x74, 0x77, 0xc3, 0x09, 0x4b, 0x5d, 0x48, 0xe4,
4383                         0xc8, 0xcb, 0x0b, 0xea, 0x17, 0x28, 0xcf, 0xcf,
4384                         0x31, 0x32, 0x44, 0xa4, 0xe5, 0x0e, 0x1a, 0x98,
4385                         0x94, 0xc4, 0xf0, 0xff, 0xae, 0x3e, 0x44, 0xe8,
4386                         0xa5, 0xb3, 0xb5, 0x37, 0x2f, 0xe8, 0xaf, 0x6f,
4387                         0x28, 0xc1, 0x37, 0x5f, 0x31, 0xd2, 0xb9, 0x33,
4388                         0xb1, 0xb2, 0x52, 0x94, 0x75, 0x2c, 0x29, 0x59,
4389                         0x06, 0xc2, 0x25, 0xe8, 0x71, 0x65, 0x4e, 0xed,
4390                         0xc0, 0x9c, 0xb1, 0xbb, 0x25, 0xdc, 0x6c, 0xe7,
4391                         0x4b, 0xa5, 0x7a, 0x54, 0x7a, 0x60, 0xff, 0x7a,
4392                         0xe0, 0x50, 0x40, 0x96, 0x35, 0x63, 0xe4, 0x0b,
4393                         0x76, 0xbd, 0xa4, 0x65, 0x00, 0x1b, 0x57, 0x88,
4394                         0xae, 0xed, 0x39, 0x88, 0x42, 0x11, 0x3c, 0xed,
4395                         0x85, 0x67, 0x7d, 0xb9, 0x68, 0x82, 0xe9, 0x43,
4396                         0x3c, 0x47, 0x53, 0xfa, 0xe8, 0xf8, 0x9f, 0x1f,
4397                         0x9f, 0xef, 0x0f, 0xf7, 0x30, 0xd9, 0x30, 0x0e,
4398                         0xb9, 0x9f, 0x69, 0x18, 0x2f, 0x7e, 0xf8, 0xf8,
4399                         0xf8, 0x8c, 0x0f, 0xd4, 0x02, 0x4d, 0xea, 0xcd,
4400                         0x0a, 0x9c, 0x6f, 0x71, 0x6d, 0x5a, 0x4c, 0x60,
4401                         0xce, 0x20, 0x56, 0x32, 0xc6, 0xc5, 0x99, 0x1f,
4402                         0x09, 0xe6, 0x4e, 0x18, 0x1a, 0x15, 0x13, 0xa8,
4403                         0x7d, 0xb1, 0x6b, 0xc0, 0xb2, 0x6d, 0xf8, 0x26,
4404                         0x66, 0xf8, 0x3d, 0x18, 0x74, 0x70, 0x66, 0x7a,
4405                         0x34, 0x17, 0xde, 0xba, 0x47, 0xf1, 0x06, 0x18,
4406                         0xcb, 0xaf, 0xeb, 0x4a, 0x1e, 0x8f, 0xa7, 0x77,
4407                         0xe0, 0x3b, 0x78, 0x62, 0x66, 0xc9, 0x10, 0xea,
4408                         0x1f, 0xb7, 0x29, 0x0a, 0x45, 0xa1, 0x1d, 0x1e,
4409                         0x1d, 0xe2, 0x65, 0x61, 0x50, 0x9c, 0xd7, 0x05,
4410                         0xf2, 0x0b, 0x5b, 0x12, 0x61, 0x02, 0xc8, 0xe5,
4411                         0x63, 0x4f, 0x20, 0x0c, 0x07, 0x17, 0x33, 0x5e,
4412                         0x03, 0x9a, 0x53, 0x0f, 0x2e, 0x55, 0xfe, 0x50,
4413                         0x43, 0x7d, 0xd0, 0xb6, 0x7e, 0x5a, 0xda, 0xae,
4414                         0x58, 0xef, 0x15, 0xa9, 0x83, 0xd9, 0x46, 0xb1,
4415                         0x42, 0xaa, 0xf5, 0x02, 0x6c, 0xce, 0x92, 0x06,
4416                         0x1b, 0xdb, 0x66, 0x45, 0x91, 0x79, 0xc2, 0x2d,
4417                         0xe6, 0x53, 0xd3, 0x14, 0xfd, 0xbb, 0x44, 0x63,
4418                         0xc6, 0xd7, 0x3d, 0x7a, 0x0c, 0x75, 0x78, 0x9d,
4419                         0x5c, 0xa6, 0x39, 0xb3, 0xe5, 0x63, 0xca, 0x8b,
4420                         0xfe, 0xd3, 0xef, 0x60, 0x83, 0xf6, 0x8e, 0x70,
4421                         0xb6, 0x67, 0xc7, 0x77, 0xed, 0x23, 0xef, 0x4c,
4422                         0xf0, 0xed, 0x2d, 0x07, 0x59, 0x6f, 0xc1, 0x01,
4423                         0x34, 0x37, 0x08, 0xab, 0xd9, 0x1f, 0x09, 0xb1,
4424                         0xce, 0x5b, 0x17, 0xff, 0x74, 0xf8, 0x9c, 0xd5,
4425                         0x2c, 0x56, 0x39, 0x79, 0x0f, 0x69, 0x44, 0x75,
4426                         0x58, 0x27, 0x01, 0xc4, 0xbf, 0xa7, 0xa1, 0x1d,
4427                         0x90, 0x17, 0x77, 0x86, 0x5a, 0x3f, 0xd9, 0xd1,
4428                         0x0e, 0xa0, 0x10, 0xf8, 0xec, 0x1e, 0xa5, 0x7f,
4429                         0x5e, 0x36, 0xd1, 0xe3, 0x04, 0x2c, 0x70, 0xf7,
4430                         0x8e, 0xc0, 0x98, 0x2f, 0x6c, 0x94, 0x2b, 0x41,
4431                         0xb7, 0x60, 0x00, 0xb7, 0x2e, 0xb8, 0x02, 0x8d,
4432                         0xb8, 0xb0, 0xd3, 0x86, 0xba, 0x1d, 0xd7, 0x90,
4433                         0xd6, 0xb6, 0xe1, 0xfc, 0xd7, 0xd8, 0x28, 0x06,
4434                         0x63, 0x9b, 0xce, 0x61, 0x24, 0x79, 0xc0, 0x70,
4435                         0x52, 0xd0, 0xb6, 0xd4, 0x28, 0x95, 0x24, 0x87,
4436                         0x03, 0x1f, 0xb7, 0x9a, 0xda, 0xa3, 0xfb, 0x52,
4437                         0x5b, 0x68, 0xe7, 0x4c, 0x8c, 0x24, 0xe1, 0x42,
4438                         0xf7, 0xd5, 0xfd, 0xad, 0x06, 0x32, 0x9f, 0xba,
4439                         0xc1, 0xfc, 0xdd, 0xc6, 0xfc, 0xfc, 0xb3, 0x38,
4440                         0x74, 0x56, 0x58, 0x40, 0x02, 0x37, 0x52, 0x2c,
4441                         0x55, 0xcc, 0xb3, 0x9e, 0x7a, 0xe9, 0xd4, 0x38,
4442                         0x41, 0x5e, 0x0c, 0x35, 0xe2, 0x11, 0xd1, 0x13,
4443                         0xf8, 0xb7, 0x8d, 0x72, 0x6b, 0x22, 0x2a, 0xb0,
4444                         0xdb, 0x08, 0xba, 0x35, 0xb9, 0x3f, 0xc8, 0xd3,
4445                         0x24, 0x90, 0xec, 0x58, 0xd2, 0x09, 0xc7, 0x2d,
4446                         0xed, 0x38, 0x80, 0x36, 0x72, 0x43, 0x27, 0x49,
4447                         0x4a, 0x80, 0x8a, 0xa2, 0xe8, 0xd3, 0xda, 0x30,
4448                         0x7d, 0xb6, 0x82, 0x37, 0x86, 0x92, 0x86, 0x3e,
4449                         0x08, 0xb2, 0x28, 0x5a, 0x55, 0x44, 0x24, 0x7d,
4450                         0x40, 0x48, 0x8a, 0xb6, 0x89, 0x58, 0x08, 0xa0,
4451                         0xd6, 0x6d, 0x3a, 0x17, 0xbf, 0xf6, 0x54, 0xa2,
4452                         0xf5, 0xd3, 0x8c, 0x0f, 0x78, 0x12, 0x57, 0x8b,
4453                         0xd5, 0xc2, 0xfd, 0x58, 0x5b, 0x7f, 0x38, 0xe3,
4454                         0xcc, 0xb7, 0x7c, 0x48, 0xb3, 0x20, 0xe8, 0x81,
4455                         0x14, 0x32, 0x45, 0x05, 0xe0, 0xdb, 0x9f, 0x75,
4456                         0x85, 0xb4, 0x6a, 0xfc, 0x95, 0xe3, 0x54, 0x22,
4457                         0x12, 0xee, 0x30, 0xfe, 0xd8, 0x30, 0xef, 0x34,
4458                         0x50, 0xab, 0x46, 0x30, 0x98, 0x2f, 0xb7, 0xc0,
4459                         0x15, 0xa2, 0x83, 0xb6, 0xf2, 0x06, 0x21, 0xa2,
4460                         0xc3, 0x26, 0x37, 0x14, 0xd1, 0x4d, 0xb5, 0x10,
4461                         0x52, 0x76, 0x4d, 0x6a, 0xee, 0xb5, 0x2b, 0x15,
4462                         0xb7, 0xf9, 0x51, 0xe8, 0x2a, 0xaf, 0xc7, 0xfa,
4463                         0x77, 0xaf, 0xb0, 0x05, 0x4d, 0xd1, 0x68, 0x8e,
4464                         0x74, 0x05, 0x9f, 0x9d, 0x93, 0xa5, 0x3e, 0x7f,
4465                         0x4e, 0x5f, 0x9d, 0xcb, 0x09, 0xc7, 0x83, 0xe3,
4466                         0x02, 0x9d, 0x27, 0x1f, 0xef, 0x85, 0x05, 0x8d,
4467                         0xec, 0x55, 0x88, 0x0f, 0x0d, 0x7c, 0x4c, 0xe8,
4468                         0xa1, 0x75, 0xa0, 0xd8, 0x06, 0x47, 0x14, 0xef,
4469                         0xaa, 0x61, 0xcf, 0x26, 0x15, 0xad, 0xd8, 0xa3,
4470                         0xaa, 0x75, 0xf2, 0x78, 0x4a, 0x5a, 0x61, 0xdf,
4471                         0x8b, 0xc7, 0x04, 0xbc, 0xb2, 0x32, 0xd2, 0x7e,
4472                         0x42, 0xee, 0xb4, 0x2f, 0x51, 0xff, 0x7b, 0x2e,
4473                         0xd3, 0x02, 0xe8, 0xdc, 0x5d, 0x0d, 0x50, 0xdc,
4474                         0xae, 0xb7, 0x46, 0xf9, 0xa8, 0xe6, 0xd0, 0x16,
4475                         0xcc, 0xe6, 0x2c, 0x81, 0xc7, 0xad, 0xe9, 0xf0,
4476                         0x05, 0x72, 0x6d, 0x3d, 0x0a, 0x7a, 0xa9, 0x02,
4477                         0xac, 0x82, 0x93, 0x6e, 0xb6, 0x1c, 0x28, 0xfc,
4478                         0x44, 0x12, 0xfb, 0x73, 0x77, 0xd4, 0x13, 0x39,
4479                         0x29, 0x88, 0x8a, 0xf3, 0x5c, 0xa6, 0x36, 0xa0,
4480                         0x2a, 0xed, 0x7e, 0xb1, 0x1d, 0xd6, 0x4c, 0x6b,
4481                         0x41, 0x01, 0x18, 0x5d, 0x5d, 0x07, 0x97, 0xa6,
4482                         0x4b, 0xef, 0x31, 0x18, 0xea, 0xac, 0xb1, 0x84,
4483                         0x21, 0xed, 0xda, 0x86,
4484                 },
4485                 .rlen = 4100,
4486         },
4487 };
4488
4489 static struct cipher_testvec aes_ctr_dec_tv_template[] = {
4490         { /* From RFC 3686 */
4491                 .key    = { 0xae, 0x68, 0x52, 0xf8, 0x12, 0x10, 0x67, 0xcc,
4492                             0x4b, 0xf7, 0xa5, 0x76, 0x55, 0x77, 0xf3, 0x9e,
4493                             0x00, 0x00, 0x00, 0x30 },
4494                 .klen   = 20,
4495                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
4496                 .input  = { 0xe4, 0x09, 0x5d, 0x4f, 0xb7, 0xa7, 0xb3, 0x79,
4497                             0x2d, 0x61, 0x75, 0xa3, 0x26, 0x13, 0x11, 0xb8 },
4498                 .ilen   = 16,
4499                 .result = { "Single block msg" },
4500                 .rlen   = 16,
4501         }, {
4502                 .key    = { 0x7e, 0x24, 0x06, 0x78, 0x17, 0xfa, 0xe0, 0xd7,
4503                             0x43, 0xd6, 0xce, 0x1f, 0x32, 0x53, 0x91, 0x63,
4504                             0x00, 0x6c, 0xb6, 0xdb },
4505                 .klen   = 20,
4506                 .iv     = { 0xc0, 0x54, 0x3b, 0x59, 0xda, 0x48, 0xd9, 0x0b },
4507                 .input  = { 0x51, 0x04, 0xa1, 0x06, 0x16, 0x8a, 0x72, 0xd9,
4508                             0x79, 0x0d, 0x41, 0xee, 0x8e, 0xda, 0xd3, 0x88,
4509                             0xeb, 0x2e, 0x1e, 0xfc, 0x46, 0xda, 0x57, 0xc8,
4510                             0xfc, 0xe6, 0x30, 0xdf, 0x91, 0x41, 0xbe, 0x28 },
4511                 .ilen   = 32,
4512                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4513                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
4514                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4515                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
4516                 .rlen   = 32,
4517         }, {
4518                 .key    = { 0x16, 0xaf, 0x5b, 0x14, 0x5f, 0xc9, 0xf5, 0x79,
4519                             0xc1, 0x75, 0xf9, 0x3e, 0x3b, 0xfb, 0x0e, 0xed,
4520                             0x86, 0x3d, 0x06, 0xcc, 0xfd, 0xb7, 0x85, 0x15,
4521                             0x00, 0x00, 0x00, 0x48 },
4522                 .klen   = 28,
4523                 .iv     = { 0x36, 0x73, 0x3c, 0x14, 0x7d, 0x6d, 0x93, 0xcb },
4524                 .input  = { 0x4b, 0x55, 0x38, 0x4f, 0xe2, 0x59, 0xc9, 0xc8,
4525                             0x4e, 0x79, 0x35, 0xa0, 0x03, 0xcb, 0xe9, 0x28 },
4526                 .ilen   = 16,
4527                 .result = { "Single block msg" },
4528                 .rlen   = 16,
4529         }, {
4530                 .key    = { 0x7c, 0x5c, 0xb2, 0x40, 0x1b, 0x3d, 0xc3, 0x3c,
4531                             0x19, 0xe7, 0x34, 0x08, 0x19, 0xe0, 0xf6, 0x9c,
4532                             0x67, 0x8c, 0x3d, 0xb8, 0xe6, 0xf6, 0xa9, 0x1a,
4533                             0x00, 0x96, 0xb0, 0x3b },
4534                 .klen   = 28,
4535                 .iv     = { 0x02, 0x0c, 0x6e, 0xad, 0xc2, 0xcb, 0x50, 0x0d },
4536                 .input  = { 0x45, 0x32, 0x43, 0xfc, 0x60, 0x9b, 0x23, 0x32,
4537                             0x7e, 0xdf, 0xaa, 0xfa, 0x71, 0x31, 0xcd, 0x9f,
4538                             0x84, 0x90, 0x70, 0x1c, 0x5a, 0xd4, 0xa7, 0x9c,
4539                             0xfc, 0x1f, 0xe0, 0xff, 0x42, 0xf4, 0xfb, 0x00 },
4540                 .ilen   = 32,
4541                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4542                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
4543                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4544                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
4545                 .rlen   = 32,
4546         }, { 
4547                 .key    = { 0x77, 0x6b, 0xef, 0xf2, 0x85, 0x1d, 0xb0, 0x6f,
4548                             0x4c, 0x8a, 0x05, 0x42, 0xc8, 0x69, 0x6f, 0x6c,
4549                             0x6a, 0x81, 0xaf, 0x1e, 0xec, 0x96, 0xb4, 0xd3,
4550                             0x7f, 0xc1, 0xd6, 0x89, 0xe6, 0xc1, 0xc1, 0x04,
4551                             0x00, 0x00, 0x00, 0x60 },
4552                 .klen   = 36,
4553                 .iv     = { 0xdb, 0x56, 0x72, 0xc9, 0x7a, 0xa8, 0xf0, 0xb2 },
4554                 .input  = { 0x14, 0x5a, 0xd0, 0x1d, 0xbf, 0x82, 0x4e, 0xc7,
4555                             0x56, 0x08, 0x63, 0xdc, 0x71, 0xe3, 0xe0, 0xc0 },
4556                 .ilen   = 16,
4557                 .result = { "Single block msg" },
4558                 .rlen   = 16,
4559         }, {
4560                 .key    = { 0xf6, 0xd6, 0x6d, 0x6b, 0xd5, 0x2d, 0x59, 0xbb,
4561                             0x07, 0x96, 0x36, 0x58, 0x79, 0xef, 0xf8, 0x86,
4562                             0xc6, 0x6d, 0xd5, 0x1a, 0x5b, 0x6a, 0x99, 0x74,
4563                             0x4b, 0x50, 0x59, 0x0c, 0x87, 0xa2, 0x38, 0x84,
4564                             0x00, 0xfa, 0xac, 0x24 },
4565                 .klen   = 36,
4566                 .iv     = { 0xc1, 0x58, 0x5e, 0xf1, 0x5a, 0x43, 0xd8, 0x75 },
4567                 .input  = { 0xf0, 0x5e, 0x23, 0x1b, 0x38, 0x94, 0x61, 0x2c,
4568                             0x49, 0xee, 0x00, 0x0b, 0x80, 0x4e, 0xb2, 0xa9,
4569                             0xb8, 0x30, 0x6b, 0x50, 0x8f, 0x83, 0x9d, 0x6a,
4570                             0x55, 0x30, 0x83, 0x1d, 0x93, 0x44, 0xaf, 0x1c },
4571                 .ilen   = 32,
4572                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4573                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
4574                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4575                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
4576                 .rlen   = 32,
4577         },
4578 };
4579
4580 static struct aead_testvec aes_gcm_enc_tv_template[] = {
4581         { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
4582                 .klen   = 16,
4583                 .tag    = { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
4584                             0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a },
4585                 .tlen   = 16
4586         }, {
4587                 .klen   = 16,
4588                 .ilen   = 16,
4589                 .result = { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
4590                             0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 },
4591                 .rlen   = 16,
4592                 .tag    = { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
4593                             0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf },
4594                 .tlen   = 16
4595         }, {
4596                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4597                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4598                 .klen   = 16,
4599                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4600                             0xde, 0xca, 0xf8, 0x88 },
4601                 .input  = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4602                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4603                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4604                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4605                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4606                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4607                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4608                             0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
4609                 .ilen   = 64,
4610                 .result = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
4611                             0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
4612                             0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
4613                             0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
4614                             0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
4615                             0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
4616                             0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
4617                             0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 },
4618                 .rlen   = 64,
4619                 .tag    = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
4620                             0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
4621                 .tlen   = 16
4622         }, {
4623                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4624                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4625                 .klen   = 16,
4626                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4627                             0xde, 0xca, 0xf8, 0x88 },
4628                 .input  = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4629                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4630                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4631                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4632                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4633                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4634                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4635                             0xba, 0x63, 0x7b, 0x39 },
4636                 .ilen   = 60,
4637                 .assoc  = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4638                             0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4639                             0xab, 0xad, 0xda, 0xd2 },
4640                 .alen   = 20,
4641                 .result = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
4642                             0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
4643                             0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
4644                             0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
4645                             0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
4646                             0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
4647                             0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
4648                             0x3d, 0x58, 0xe0, 0x91 },
4649                 .rlen   = 60,
4650                 .tag    = { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
4651                             0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 },
4652                 .tlen   = 16
4653         }, {
4654                 .klen   = 24,
4655                 .tag    = { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b,
4656                             0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 },
4657                 .tlen   = 16
4658         }, {
4659                 .klen   = 24,
4660                 .ilen   = 16,
4661                 .result = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
4662                             0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 },
4663                 .rlen   = 16,
4664                 .tag    = { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
4665                             0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb },
4666                 .tlen   = 16
4667         }, {
4668                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4669                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4670                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
4671                 .klen   = 24,
4672                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4673                             0xde, 0xca, 0xf8, 0x88 },
4674                 .input  = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4675                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4676                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4677                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4678                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4679                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4680                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4681                             0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
4682                 .ilen   = 64,
4683                 .result = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
4684                             0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
4685                             0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
4686                             0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
4687                             0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
4688                             0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
4689                             0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
4690                             0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 },
4691                 .rlen   = 64,
4692                 .tag    = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
4693                             0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 },
4694                 .tlen   = 16
4695         }, {
4696                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4697                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4698                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
4699                 .klen   = 24,
4700                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4701                             0xde, 0xca, 0xf8, 0x88 },
4702                 .input  = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4703                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4704                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4705                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4706                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4707                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4708                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4709                             0xba, 0x63, 0x7b, 0x39 },
4710                 .ilen   = 60,
4711                 .assoc  = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4712                             0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4713                             0xab, 0xad, 0xda, 0xd2 },
4714                 .alen   = 20,
4715                 .result = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
4716                             0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
4717                             0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
4718                             0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
4719                             0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
4720                             0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
4721                             0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
4722                             0xcc, 0xda, 0x27, 0x10 },
4723                 .rlen   = 60,
4724                 .tag    = { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
4725                             0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c },
4726                 .tlen   = 16,
4727                 .np     = 2,
4728                 .tap    = { 32, 28 },
4729                 .anp    = 2,
4730                 .atap   = { 8, 12 }
4731         }, {
4732                 .klen   = 32,
4733                 .tag    = { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9,
4734                             0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b },
4735                 .tlen   = 16
4736         }
4737 };
4738
4739 static struct aead_testvec aes_gcm_dec_tv_template[] = {
4740         { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
4741                 .klen   = 32,
4742                 .input  = { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e,
4743                             0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 },
4744                 .ilen   = 16,
4745                 .rlen   = 16,
4746                 .tag    = { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0,
4747                             0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 },
4748                 .tlen   = 16
4749         }, {
4750                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4751                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4752                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4753                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4754                 .klen   = 32,
4755                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4756                             0xde, 0xca, 0xf8, 0x88 },
4757                 .input  = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
4758                             0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
4759                             0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
4760                             0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
4761                             0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
4762                             0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
4763                             0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
4764                             0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad },
4765                 .ilen   = 64,
4766                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4767                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4768                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4769                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4770                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4771                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4772                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4773                             0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
4774                 .rlen   = 64,
4775                 .tag    = { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd,
4776                             0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c },
4777                 .tlen   = 16
4778         }, {
4779                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4780                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4781                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4782                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4783                 .klen   = 32,
4784                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4785                             0xde, 0xca, 0xf8, 0x88 },
4786                 .input  = { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07,
4787                             0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d,
4788                             0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9,
4789                             0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa,
4790                             0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d,
4791                             0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38,
4792                             0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a,
4793                             0xbc, 0xc9, 0xf6, 0x62 },
4794                 .ilen   = 60,
4795                 .assoc  = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4796                             0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4797                             0xab, 0xad, 0xda, 0xd2 },
4798                 .alen   = 20,
4799                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4800                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4801                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4802                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4803                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4804                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4805                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4806                             0xba, 0x63, 0x7b, 0x39 },
4807                 .rlen   = 60,
4808                 .tag    = { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68,
4809                             0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b },
4810                 .tlen   = 16,
4811                 .np     = 2,
4812                 .tap    = { 48, 12 },
4813                 .anp    = 3,
4814                 .atap   = { 8, 8, 4 }
4815         }, {
4816                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4817                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4818                 .klen   = 16,
4819                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4820                             0xde, 0xca, 0xf8, 0x88 },
4821                 .input  = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
4822                             0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
4823                             0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
4824                             0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
4825                             0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
4826                             0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
4827                             0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
4828                             0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 },
4829                 .ilen   = 64,
4830                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4831                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4832                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4833                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4834                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4835                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4836                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4837                             0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
4838                 .rlen   = 64,
4839                 .tag    = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
4840                             0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
4841                 .tlen   = 16
4842         }, {
4843                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4844                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
4845                 .klen   = 16,
4846                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4847                             0xde, 0xca, 0xf8, 0x88 },
4848                 .input  = { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
4849                             0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
4850                             0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
4851                             0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
4852                             0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
4853                             0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
4854                             0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
4855                             0x3d, 0x58, 0xe0, 0x91 },
4856                 .ilen   = 60,
4857                 .assoc  = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4858                             0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4859                             0xab, 0xad, 0xda, 0xd2 },
4860                 .alen   = 20,
4861                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4862                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4863                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4864                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4865                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4866                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4867                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4868                             0xba, 0x63, 0x7b, 0x39 },
4869                 .rlen   = 60,
4870                 .tag    = { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb,
4871                             0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 },
4872                 .tlen   = 16
4873         }, {
4874                 .klen   = 24,
4875                 .input  = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41,
4876                             0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 },
4877                 .ilen   = 16,
4878                 .rlen   = 16,
4879                 .tag    = { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab,
4880                             0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb },
4881                 .tlen   = 16
4882         }, {
4883                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4884                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4885                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
4886                 .klen   = 24,
4887                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4888                             0xde, 0xca, 0xf8, 0x88 },
4889                 .input  = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
4890                             0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
4891                             0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
4892                             0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
4893                             0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
4894                             0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
4895                             0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
4896                             0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 },
4897                 .ilen   = 64,
4898                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4899                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4900                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4901                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4902                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4903                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4904                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4905                             0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
4906                 .rlen   = 64,
4907                 .tag    = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf,
4908                             0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 },
4909                 .tlen   = 16
4910         }, {
4911                 .key    = { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
4912                             0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
4913                             0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c },
4914                 .klen   = 24,
4915                 .iv     = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
4916                             0xde, 0xca, 0xf8, 0x88 },
4917                 .input  = { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41,
4918                             0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57,
4919                             0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84,
4920                             0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c,
4921                             0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25,
4922                             0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47,
4923                             0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9,
4924                             0xcc, 0xda, 0x27, 0x10 },
4925                 .ilen   = 60,
4926                 .assoc  = { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4927                             0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
4928                             0xab, 0xad, 0xda, 0xd2 },
4929                 .alen   = 20,
4930                 .result = { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
4931                             0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
4932                             0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
4933                             0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
4934                             0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
4935                             0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
4936                             0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
4937                             0xba, 0x63, 0x7b, 0x39 },
4938                 .rlen   = 60,
4939                 .tag    = { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f,
4940                             0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c },
4941                 .tlen   = 16
4942         }
4943 };
4944
4945 /* Cast5 test vectors from RFC 2144 */
4946 #define CAST5_ENC_TEST_VECTORS  3
4947 #define CAST5_DEC_TEST_VECTORS  3
4948
4949 static struct cipher_testvec cast5_enc_tv_template[] = {
4950         {
4951                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
4952                             0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
4953                 .klen   = 16,
4954                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4955                 .ilen   = 8,
4956                 .result = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
4957                 .rlen   = 8,
4958         }, {
4959                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
4960                             0x23, 0x45 },
4961                 .klen   = 10,
4962                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4963                 .ilen   = 8,
4964                 .result = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
4965                 .rlen   = 8,
4966         }, {
4967                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12 },
4968                 .klen   = 5,
4969                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4970                 .ilen   = 8,
4971                 .result = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
4972                 .rlen   = 8,
4973         },
4974 };
4975
4976 static struct cipher_testvec cast5_dec_tv_template[] = {
4977         {
4978                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
4979                             0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9a },
4980                 .klen   = 16,
4981                 .input  = { 0x23, 0x8b, 0x4f, 0xe5, 0x84, 0x7e, 0x44, 0xb2 },
4982                 .ilen   = 8,
4983                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4984                 .rlen   = 8,
4985         }, {
4986                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
4987                             0x23, 0x45 },
4988                 .klen   = 10,
4989                 .input  = { 0xeb, 0x6a, 0x71, 0x1a, 0x2c, 0x02, 0x27, 0x1b },
4990                 .ilen   = 8,
4991                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4992                 .rlen   = 8,
4993         }, {
4994                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x12 },
4995                 .klen   = 5,
4996                 .input  = { 0x7a, 0xc8, 0x16, 0xd1, 0x6e, 0x9b, 0x30, 0x2e },
4997                 .ilen   = 8,
4998                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
4999                 .rlen   = 8,
5000         },
5001 };
5002
5003 /*
5004  * ARC4 test vectors from OpenSSL
5005  */
5006 #define ARC4_ENC_TEST_VECTORS   7
5007 #define ARC4_DEC_TEST_VECTORS   7
5008
5009 static struct cipher_testvec arc4_enc_tv_template[] = {
5010         {
5011                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5012                 .klen   = 8,
5013                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5014                 .ilen   = 8,
5015                 .result = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
5016                 .rlen   = 8,
5017         }, {
5018                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5019                 .klen   = 8,
5020                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5021                 .ilen   = 8,
5022                 .result = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
5023                 .rlen   = 8,
5024         }, {
5025                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5026                 .klen   = 8,
5027                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5028                 .ilen   = 8,
5029                 .result = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
5030                 .rlen   = 8,
5031         }, {
5032                 .key    = { 0xef, 0x01, 0x23, 0x45},
5033                 .klen   = 4,
5034                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5035                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5036                             0x00, 0x00, 0x00, 0x00 },
5037                 .ilen   = 20,
5038                 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
5039                             0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
5040                             0x36, 0xb6, 0x78, 0x58 },
5041                 .rlen   = 20,
5042         }, {
5043                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5044                 .klen   = 8,
5045                 .input  = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5046                             0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5047                             0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5048                             0x12, 0x34, 0x56, 0x78 },
5049                 .ilen   = 28,
5050                 .result = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
5051                             0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
5052                             0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
5053                             0x40, 0x01, 0x1e, 0xcf },
5054                 .rlen   = 28,
5055         }, {
5056                 .key    = { 0xef, 0x01, 0x23, 0x45 },
5057                 .klen   = 4,
5058                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5059                             0x00, 0x00 },
5060                 .ilen   = 10,
5061                 .result = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
5062                             0xbd, 0x61 },
5063                 .rlen   = 10,
5064         }, {
5065                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
5066                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5067                 .klen   = 16,
5068                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
5069                 .ilen   = 8,
5070                 .result = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
5071                 .rlen   = 8,
5072         },
5073 };
5074
5075 static struct cipher_testvec arc4_dec_tv_template[] = {
5076         {
5077                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5078                 .klen   = 8,
5079                 .input  = { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 },
5080                 .ilen   = 8,
5081                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5082                 .rlen   = 8,
5083         }, {
5084                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5085                 .klen   = 8,
5086                 .input  = { 0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79 },
5087                 .ilen   = 8,
5088                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5089                 .rlen   = 8,
5090         }, {
5091                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5092                 .klen   = 8,
5093                 .input  = { 0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a },
5094                 .ilen   = 8,
5095                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5096                 .rlen   = 8,
5097         }, {
5098                 .key    = { 0xef, 0x01, 0x23, 0x45},
5099                 .klen   = 4,
5100                 .input  = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
5101                             0xbd, 0x61, 0x5a, 0x11, 0x62, 0xe1, 0xc7, 0xba,
5102                             0x36, 0xb6, 0x78, 0x58 },
5103                 .ilen   = 20,
5104                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5105                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5106                             0x00, 0x00, 0x00, 0x00 },
5107                 .rlen   = 20,
5108         }, {
5109                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef },
5110                 .klen   = 8,
5111                 .input  = { 0x66, 0xa0, 0x94, 0x9f, 0x8a, 0xf7, 0xd6, 0x89,
5112                             0x1f, 0x7f, 0x83, 0x2b, 0xa8, 0x33, 0xc0, 0x0c,
5113                             0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87,
5114                             0x40, 0x01, 0x1e, 0xcf },
5115                 .ilen   = 28,
5116                 .result = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5117                             0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5118                             0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0,
5119                             0x12, 0x34, 0x56, 0x78 },
5120                 .rlen   = 28,
5121         }, {
5122                 .key    = { 0xef, 0x01, 0x23, 0x45 },
5123                 .klen   = 4,
5124                 .input  = { 0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf,
5125                             0xbd, 0x61 },
5126                 .ilen   = 10,
5127                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5128                             0x00, 0x00 },
5129                 .rlen   = 10,
5130         }, {
5131                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
5132                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5133                 .klen   = 16,
5134                 .input  = { 0x69, 0x72, 0x36, 0x59, 0x1B, 0x52, 0x42, 0xB1 },
5135                 .ilen   = 8,
5136                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
5137                 .rlen   = 8,
5138         },
5139 };
5140
5141 /*
5142  * TEA test vectors
5143  */
5144 #define TEA_ENC_TEST_VECTORS    4
5145 #define TEA_DEC_TEST_VECTORS    4
5146
5147 static struct cipher_testvec tea_enc_tv_template[] = {
5148         {
5149                 .key    = { [0 ... 15] = 0x00 },
5150                 .klen   = 16,
5151                 .input  = { [0 ... 8] = 0x00 },
5152                 .ilen   = 8,
5153                 .result = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
5154                 .rlen   = 8,
5155         }, {
5156                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5157                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5158                 .klen   = 16,
5159                 .input  = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5160                 .ilen   = 8,
5161                 .result = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
5162                 .rlen   = 8,
5163         }, {
5164                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5165                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5166                 .klen   = 16,
5167                 .input  = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
5168                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5169                 .ilen   = 16,
5170                 .result = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
5171                             0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
5172                 .rlen   = 16,
5173         }, {
5174                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5175                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5176                 .klen   = 16,
5177                 .input  = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
5178                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
5179                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
5180                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5181                 .ilen   = 32,
5182                 .result = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
5183                             0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
5184                             0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
5185                             0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
5186                 .rlen   = 32,
5187         }
5188 };
5189
5190 static struct cipher_testvec tea_dec_tv_template[] = {
5191         {
5192                 .key    = { [0 ... 15] = 0x00 },
5193                 .klen   = 16,
5194                 .input  = { 0x0a, 0x3a, 0xea, 0x41, 0x40, 0xa9, 0xba, 0x94 },
5195                 .ilen   = 8,
5196                 .result = { [0 ... 8] = 0x00 },
5197                 .rlen   = 8,
5198         }, {
5199                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5200                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5201                 .klen   = 16,
5202                 .input  = { 0x77, 0x5d, 0x2a, 0x6a, 0xf6, 0xce, 0x92, 0x09 },
5203                 .ilen   = 8,
5204                 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5205                 .rlen   = 8,
5206         }, {
5207                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5208                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5209                 .klen   = 16,
5210                 .input  = { 0xbe, 0x7a, 0xbb, 0x81, 0x95, 0x2d, 0x1f, 0x1e,
5211                             0xdd, 0x89, 0xa1, 0x25, 0x04, 0x21, 0xdf, 0x95 },
5212                 .ilen   = 16,
5213                 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74,
5214                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5215                 .rlen   = 16,
5216         }, {
5217                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5218                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5219                 .klen   = 16,
5220                 .input  = { 0xe0, 0x4d, 0x5d, 0x3c, 0xb7, 0x8c, 0x36, 0x47,
5221                             0x94, 0x18, 0x95, 0x91, 0xa9, 0xfc, 0x49, 0xf8,
5222                             0x44, 0xd1, 0x2d, 0xc2, 0x99, 0xb8, 0x08, 0x2a,
5223                             0x07, 0x89, 0x73, 0xc2, 0x45, 0x92, 0xc6, 0x90 },
5224                 .ilen   = 32,
5225                 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67,
5226                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
5227                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72,
5228                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5229                 .rlen   = 32,
5230         }
5231 };
5232
5233 /*
5234  * XTEA test vectors
5235  */
5236 #define XTEA_ENC_TEST_VECTORS   4
5237 #define XTEA_DEC_TEST_VECTORS   4
5238
5239 static struct cipher_testvec xtea_enc_tv_template[] = {
5240         {
5241                 .key    = { [0 ... 15] = 0x00 },
5242                 .klen   = 16,
5243                 .input  = { [0 ... 8] = 0x00 },
5244                 .ilen   = 8,
5245                 .result = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
5246                 .rlen   = 8,
5247         }, {
5248                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5249                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5250                 .klen   = 16,
5251                 .input  = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5252                 .ilen   = 8,
5253                 .result = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
5254                 .rlen   = 8,
5255         }, {
5256                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5257                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5258                 .klen   = 16,
5259                 .input  = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
5260                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5261                 .ilen   = 16,
5262                 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea, 
5263                             0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
5264                 .rlen   = 16,
5265         }, {
5266                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5267                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5268                 .klen   = 16,
5269                 .input  = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67, 
5270                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 
5271                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72, 
5272                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5273                 .ilen   = 32,
5274                 .result = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
5275                             0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
5276                             0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
5277                             0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
5278                 .rlen   = 32,
5279         }
5280 };
5281
5282 static struct cipher_testvec xtea_dec_tv_template[] = {
5283         {
5284                 .key    = { [0 ... 15] = 0x00 },
5285                 .klen   = 16,
5286                 .input  = { 0xd8, 0xd4, 0xe9, 0xde, 0xd9, 0x1e, 0x13, 0xf7 },
5287                 .ilen   = 8,
5288                 .result = { [0 ... 8] = 0x00 },
5289                 .rlen   = 8,
5290         }, {
5291                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5292                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5293                 .klen   = 16,
5294                 .input  = { 0x94, 0xeb, 0xc8, 0x96, 0x84, 0x6a, 0x49, 0xa8 },
5295                 .ilen   = 8,
5296                 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5297                 .rlen   = 8,
5298         }, {
5299                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5300                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5301                 .klen   = 16,
5302                 .input  = { 0x3e, 0xce, 0xae, 0x22, 0x60, 0x56, 0xa8, 0x9d,
5303                             0x77, 0x4d, 0xd4, 0xb4, 0x87, 0x24, 0xe3, 0x9a },
5304                 .ilen   = 16,
5305                 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74, 
5306                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5307                 .rlen   = 16,
5308         }, {
5309                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5310                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5311                 .klen   = 16,
5312                 .input  = { 0x99, 0x81, 0x9f, 0x5d, 0x6f, 0x4b, 0x31, 0x3a,
5313                             0x86, 0xff, 0x6f, 0xd0, 0xe3, 0x87, 0x70, 0x07,
5314                             0x4d, 0xb8, 0xcf, 0xf3, 0x99, 0x50, 0xb3, 0xd4,
5315                             0x73, 0xa2, 0xfa, 0xc9, 0x16, 0x59, 0x5d, 0x81 },
5316                 .ilen   = 32,
5317                 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67, 
5318                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 
5319                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72, 
5320                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5321                 .rlen   = 32,
5322         }
5323 };
5324
5325 /*
5326  * KHAZAD test vectors.
5327  */
5328 #define KHAZAD_ENC_TEST_VECTORS 5
5329 #define KHAZAD_DEC_TEST_VECTORS 5
5330
5331 static struct cipher_testvec khazad_enc_tv_template[] = {
5332         {
5333                 .key    = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5334                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5335                 .klen   = 16,
5336                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5337                 .ilen   = 8,
5338                 .result = { 0x49, 0xa4, 0xce, 0x32, 0xac, 0x19, 0x0e, 0x3f },
5339                 .rlen   = 8,
5340         }, {
5341                 .key    = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
5342                             0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
5343                 .klen   = 16,
5344                 .input  = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
5345                 .ilen   = 8,
5346                 .result = { 0x7e, 0x82, 0x12, 0xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
5347                 .rlen   = 8,
5348         }, {
5349                 .key    = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
5350                             0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
5351                 .klen   = 16,
5352                 .input  = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
5353                 .ilen   = 8,
5354                 .result = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
5355                 .rlen   = 8,
5356         }, {
5357                 .key    = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
5358                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5359                 .klen   = 16,
5360                 .input  = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5361                 .ilen   = 8,
5362                 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
5363                 .rlen   = 8,
5364         }, {
5365                 .key    = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
5366                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5367                 .klen   = 16,
5368                 .input  = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
5369                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5370                 .ilen   = 16,
5371                 .result = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
5372                             0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
5373                 .rlen   = 16,
5374         },
5375 };
5376
5377 static struct cipher_testvec khazad_dec_tv_template[] = {
5378         {
5379                 .key    = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5380                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5381                 .klen   = 16,
5382                 .input  = { 0X49, 0Xa4, 0Xce, 0X32, 0Xac, 0X19, 0X0e, 0X3f },
5383                 .ilen   = 8,
5384                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5385                 .rlen   = 8,
5386         }, {
5387                 .key    = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
5388                             0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
5389                 .klen   = 16,
5390                 .input  = { 0X7e, 0X82, 0X12, 0Xa1, 0Xd9, 0X5b, 0Xe4, 0Xf9 },
5391                 .ilen   = 8,
5392                 .result = { 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 },
5393                 .rlen   = 8,
5394         }, {
5395                 .key    = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2,
5396                             0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
5397                 .klen   = 16,
5398                 .input  = { 0Xaa, 0Xbe, 0Xc1, 0X95, 0Xc5, 0X94, 0X1a, 0X9c },
5399                 .ilen   = 8,
5400                 .result = { 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2, 0Xa2 },
5401                 .rlen   = 8,
5402         }, {
5403                 .key    = { 0x2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
5404                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5405                 .klen   = 16,
5406                 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
5407                 .ilen   = 8,
5408                 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5409                 .rlen   = 8,
5410         }, {
5411                 .key    = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f,
5412                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5413                 .klen   = 16,
5414                 .input = { 0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 ,
5415                             0X04, 0X74, 0Xf5, 0X70, 0X50, 0X16, 0Xd3, 0Xb8 },
5416                 .ilen   = 16,
5417                 .result = { 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f ,
5418                             0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f, 0X2f },
5419                 .rlen   = 16,
5420         },
5421 };
5422
5423 /*
5424  * Anubis test vectors.
5425  */
5426
5427 #define ANUBIS_ENC_TEST_VECTORS                 5
5428 #define ANUBIS_DEC_TEST_VECTORS                 5
5429 #define ANUBIS_CBC_ENC_TEST_VECTORS             2
5430 #define ANUBIS_CBC_DEC_TEST_VECTORS             2
5431
5432 static struct cipher_testvec anubis_enc_tv_template[] = {
5433         {
5434                 .key    = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5435                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5436                 .klen   = 16,
5437                 .input  = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5438                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5439                 .ilen   = 16,
5440                 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
5441                             0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
5442                 .rlen   = 16,
5443         }, {
5444
5445                 .key    = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5446                             0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5447                             0x03, 0x03, 0x03, 0x03 },
5448                 .klen   = 20,
5449                 .input  = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5450                             0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
5451                 .ilen   = 16,
5452                 .result = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
5453                             0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
5454                 .rlen   = 16,
5455         }, {
5456                 .key    = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5457                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5458                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5459                             0x24, 0x24, 0x24, 0x24 },
5460                 .klen   = 28,
5461                 .input  = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5462                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
5463                 .ilen   = 16,
5464                 .result = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
5465                             0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
5466                 .rlen   = 16,
5467         }, {
5468                 .key    = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5469                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5470                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5471                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
5472                 .klen   = 32,
5473                 .input  = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5474                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
5475                 .ilen   = 16,
5476                 .result = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
5477                             0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
5478                 .rlen   = 16,
5479         }, {
5480                 .key    = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5481                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5482                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5483                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5484                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5485                 .klen   = 40,
5486                 .input  = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5487                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5488                 .ilen   = 16,
5489                 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
5490                             0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
5491                 .rlen   = 16,
5492         },
5493 };
5494
5495 static struct cipher_testvec anubis_dec_tv_template[] = {
5496         {
5497                 .key    = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5498                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5499                 .klen   = 16,
5500                 .input  = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
5501                             0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90 },
5502                 .ilen   = 16,
5503                 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5504                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5505                 .rlen   = 16,
5506         }, {
5507
5508                 .key    = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5509                             0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5510                             0x03, 0x03, 0x03, 0x03 },
5511                 .klen   = 20,
5512                 .input  = { 0xdb, 0xf1, 0x42, 0xf4, 0xd1, 0x8a, 0xc7, 0x49,
5513                             0x87, 0x41, 0x6f, 0x82, 0x0a, 0x98, 0x64, 0xae },
5514                 .ilen   = 16,
5515                 .result = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
5516                             0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
5517                 .rlen   = 16,
5518         }, {
5519                 .key    = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5520                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5521                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5522                             0x24, 0x24, 0x24, 0x24 },
5523                 .klen   = 28,
5524                 .input  = { 0xfd, 0x1b, 0x4a, 0xe3, 0xbf, 0xf0, 0xad, 0x3d,
5525                             0x06, 0xd3, 0x61, 0x27, 0xfd, 0x13, 0x9e, 0xde },
5526                 .ilen   = 16,
5527                 .result = { 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
5528                             0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24 },
5529                 .rlen   = 16,
5530         }, {
5531                 .key    = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5532                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5533                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5534                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
5535                 .klen   = 32,
5536                 .input  = { 0x1a, 0x91, 0xfb, 0x2b, 0xb7, 0x78, 0x6b, 0xc4,
5537                             0x17, 0xd9, 0xff, 0x40, 0x3b, 0x0e, 0xe5, 0xfe },
5538                 .ilen   = 16,
5539                 .result = { 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25,
5540                             0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25 },
5541                 .rlen   = 16,
5542         }, {
5543                 .key    = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5544                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5545                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5546                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5547                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5548                 .input = {  0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
5549                             0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee },
5550                 .klen   = 40,
5551                 .ilen   = 16,
5552                 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5553                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5554                 .rlen   = 16,
5555         },
5556 };
5557
5558 static struct cipher_testvec anubis_cbc_enc_tv_template[] = {
5559         {
5560                 .key    = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5561                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5562                 .klen   = 16,
5563                 .input  = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5564                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5565                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5566                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5567                 .ilen   = 32,
5568                 .result = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
5569                             0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
5570                             0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
5571                             0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
5572                 .rlen   = 32,
5573         }, {
5574                 .key    = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5575                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5576                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5577                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5578                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5579                 .klen   = 40,
5580                 .input  = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5581                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5582                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5583                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5584                 .ilen   = 32,
5585                 .result = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
5586                             0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
5587                             0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
5588                             0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
5589                 .rlen   = 32,
5590         },
5591 };
5592
5593 static struct cipher_testvec anubis_cbc_dec_tv_template[] = {
5594         {
5595                 .key    = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5596                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5597                 .klen   = 16,
5598                 .input  = { 0x6d, 0xc5, 0xda, 0xa2, 0x26, 0x7d, 0x62, 0x6f,
5599                             0x08, 0xb7, 0x52, 0x8e, 0x6e, 0x6e, 0x86, 0x90,
5600                             0x86, 0xd8, 0xb5, 0x6f, 0x98, 0x5e, 0x8a, 0x66,
5601                             0x4f, 0x1f, 0x78, 0xa1, 0xbb, 0x37, 0xf1, 0xbe },
5602                 .ilen   = 32,
5603                 .result = { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5604                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5605                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
5606                             0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe },
5607                 .rlen   = 32,
5608         }, {
5609                 .key    = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5610                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5611                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5612                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5613                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5614                 .klen   = 40,
5615                 .input = { 0xa5, 0x2c, 0x85, 0x6f, 0x9c, 0xba, 0xa0, 0x97,
5616                             0x9e, 0xc6, 0x84, 0x0f, 0x17, 0x21, 0x07, 0xee,
5617                             0xa2, 0xbc, 0x06, 0x98, 0xc6, 0x4b, 0xda, 0x75,
5618                             0x2e, 0xaa, 0xbe, 0x58, 0xce, 0x01, 0x5b, 0xc7 },
5619                 .ilen   = 32,
5620                 .result = { 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5621                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5622                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35,
5623                             0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35 },
5624                 .rlen   = 32,
5625         },
5626 };
5627
5628 /* 
5629  * XETA test vectors 
5630  */
5631 #define XETA_ENC_TEST_VECTORS   4
5632 #define XETA_DEC_TEST_VECTORS   4
5633
5634 static struct cipher_testvec xeta_enc_tv_template[] = {
5635         {
5636                 .key    = { [0 ... 15] = 0x00 },
5637                 .klen   = 16,
5638                 .input  = { [0 ... 8] = 0x00 },
5639                 .ilen   = 8,
5640                 .result = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
5641                 .rlen   = 8,
5642         }, {
5643                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5644                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5645                 .klen   = 16,
5646                 .input  = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5647                 .ilen   = 8,
5648                 .result = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
5649                 .rlen   = 8,
5650         }, {
5651                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5652                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5653                 .klen   = 16,
5654                 .input  = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74, 
5655                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5656                 .ilen   = 16,
5657                 .result = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea, 
5658                             0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
5659                 .rlen   = 16,
5660         }, {
5661                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5662                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5663                 .klen   = 16,
5664                 .input  = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67, 
5665                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 
5666                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72, 
5667                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5668                 .ilen   = 32,
5669                 .result = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1, 
5670                             0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4, 
5671                             0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f, 
5672                             0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
5673                 .rlen   = 32,
5674         }
5675 };
5676
5677 static struct cipher_testvec xeta_dec_tv_template[] = {
5678         {
5679                 .key    = { [0 ... 15] = 0x00 },
5680                 .klen   = 16,
5681                 .input  = { 0xaa, 0x22, 0x96, 0xe5, 0x6c, 0x61, 0xf3, 0x45 },
5682                 .ilen   = 8,
5683                 .result = { [0 ... 8] = 0x00 },
5684                 .rlen   = 8,
5685         }, {
5686                 .key    = { 0x2b, 0x02, 0x05, 0x68, 0x06, 0x14, 0x49, 0x76,
5687                             0x77, 0x5d, 0x0e, 0x26, 0x6c, 0x28, 0x78, 0x43 },
5688                 .klen   = 16,
5689                 .input  = { 0x82, 0x3e, 0xeb, 0x35, 0xdc, 0xdd, 0xd9, 0xc3 },
5690                 .ilen   = 8,
5691                 .result = { 0x74, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x2e },
5692                 .rlen   = 8,
5693         }, {
5694                 .key    = { 0x09, 0x65, 0x43, 0x11, 0x66, 0x44, 0x39, 0x25,
5695                             0x51, 0x3a, 0x16, 0x10, 0x0a, 0x08, 0x12, 0x6e },
5696                 .klen   = 16,
5697                 .input  = { 0xe2, 0x04, 0xdb, 0xf2, 0x89, 0x85, 0x9e, 0xea, 
5698                             0x61, 0x35, 0xaa, 0xed, 0xb5, 0xcb, 0x71, 0x2c },
5699                 .ilen   = 16,
5700                 .result = { 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x5f, 0x74, 
5701                             0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x63, 0x74 },
5702                 .rlen   = 16,
5703         }, {
5704                 .key    = { 0x4d, 0x76, 0x32, 0x17, 0x05, 0x3f, 0x75, 0x2c,
5705                             0x5d, 0x04, 0x16, 0x36, 0x15, 0x72, 0x63, 0x2f },
5706                 .klen   = 16,
5707                 .input  = { 0x0b, 0x03, 0xcd, 0x8a, 0xbe, 0x95, 0xfd, 0xb1, 
5708                             0xc1, 0x44, 0x91, 0x0b, 0xa5, 0xc9, 0x1b, 0xb4, 
5709                             0xa9, 0xda, 0x1e, 0x9e, 0xb1, 0x3e, 0x2a, 0x8f, 
5710                             0xea, 0xa5, 0x6a, 0x85, 0xd1, 0xf4, 0xa8, 0xa5 },
5711                 .ilen   = 32,
5712                 .result = { 0x54, 0x65, 0x61, 0x20, 0x69, 0x73, 0x20, 0x67, 
5713                             0x6f, 0x6f, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 
5714                             0x79, 0x6f, 0x75, 0x21, 0x21, 0x21, 0x20, 0x72, 
5715                             0x65, 0x61, 0x6c, 0x6c, 0x79, 0x21, 0x21, 0x21 },
5716                 .rlen   = 32,
5717         }
5718 };
5719
5720 /* 
5721  * FCrypt test vectors 
5722  */
5723 #define FCRYPT_ENC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_enc_tv_template)
5724 #define FCRYPT_DEC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_dec_tv_template)
5725
5726 static struct cipher_testvec fcrypt_pcbc_enc_tv_template[] = {
5727         { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
5728                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5729                 .klen   = 8,
5730                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5731                 .input  = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5732                 .ilen   = 8,
5733                 .result = { 0x0E, 0x09, 0x00, 0xC7, 0x3E, 0xF7, 0xED, 0x41 },
5734                 .rlen   = 8,
5735         }, {
5736                 .key    = { 0x11, 0x44, 0x77, 0xAA, 0xDD, 0x00, 0x33, 0x66 },
5737                 .klen   = 8,
5738                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5739                 .input  = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0 },
5740                 .ilen   = 8,
5741                 .result = { 0xD8, 0xED, 0x78, 0x74, 0x77, 0xEC, 0x06, 0x80 },
5742                 .rlen   = 8,
5743         }, { /* From Arla */
5744                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5745                 .klen   = 8,
5746                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5747                 .input  = "The quick brown fox jumps over the lazy dogs.\0\0",
5748                 .ilen   = 48,
5749                 .result = { 0x00, 0xf0, 0xe,  0x11, 0x75, 0xe6, 0x23, 0x82,
5750                             0xee, 0xac, 0x98, 0x62, 0x44, 0x51, 0xe4, 0x84,
5751                             0xc3, 0x59, 0xd8, 0xaa, 0x64, 0x60, 0xae, 0xf7,
5752                             0xd2, 0xd9, 0x13, 0x79, 0x72, 0xa3, 0x45, 0x03,
5753                             0x23, 0xb5, 0x62, 0xd7, 0x0c, 0xf5, 0x27, 0xd1,
5754                             0xf8, 0x91, 0x3c, 0xac, 0x44, 0x22, 0x92, 0xef },
5755                 .rlen   = 48,
5756         }, {
5757                 .key    = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5758                 .klen   = 8,
5759                 .iv     = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5760                 .input  = "The quick brown fox jumps over the lazy dogs.\0\0",
5761                 .ilen   = 48,
5762                 .result = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
5763                             0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
5764                             0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
5765                             0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
5766                             0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
5767                             0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
5768                 .rlen   = 48,
5769         }, { /* split-page version */
5770                 .key    = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5771                 .klen   = 8,
5772                 .iv     = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5773                 .input  = "The quick brown fox jumps over the lazy dogs.\0\0",
5774                 .ilen   = 48,
5775                 .result = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
5776                             0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
5777                             0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
5778                             0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
5779                             0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
5780                             0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
5781                 .rlen   = 48,
5782                 .np     = 2,
5783                 .tap    = { 20, 28 },
5784         }
5785 };
5786
5787 static struct cipher_testvec fcrypt_pcbc_dec_tv_template[] = {
5788         { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
5789                 .key    = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5790                 .klen   = 8,
5791                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5792                 .input  = { 0x0E, 0x09, 0x00, 0xC7, 0x3E, 0xF7, 0xED, 0x41 },
5793                 .ilen   = 8,
5794                 .result = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5795                 .rlen   = 8,
5796         }, {
5797                 .key    = { 0x11, 0x44, 0x77, 0xAA, 0xDD, 0x00, 0x33, 0x66 },
5798                 .klen   = 8,
5799                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
5800                 .input  = { 0xD8, 0xED, 0x78, 0x74, 0x77, 0xEC, 0x06, 0x80 },
5801                 .ilen   = 8,
5802                 .result = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0 },
5803                 .rlen   = 8,
5804         }, { /* From Arla */
5805                 .key    = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5806                 .klen   = 8,
5807                 .iv     = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5808                 .input  = { 0x00, 0xf0, 0xe,  0x11, 0x75, 0xe6, 0x23, 0x82,
5809                             0xee, 0xac, 0x98, 0x62, 0x44, 0x51, 0xe4, 0x84,
5810                             0xc3, 0x59, 0xd8, 0xaa, 0x64, 0x60, 0xae, 0xf7,
5811                             0xd2, 0xd9, 0x13, 0x79, 0x72, 0xa3, 0x45, 0x03,
5812                             0x23, 0xb5, 0x62, 0xd7, 0x0c, 0xf5, 0x27, 0xd1,
5813                             0xf8, 0x91, 0x3c, 0xac, 0x44, 0x22, 0x92, 0xef },
5814                 .ilen   = 48,
5815                 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
5816                 .rlen   = 48,
5817         }, {
5818                 .key    = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5819                 .klen   = 8,
5820                 .iv     = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5821                 .input  = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
5822                             0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
5823                             0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
5824                             0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
5825                             0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
5826                             0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
5827                 .ilen   = 48,
5828                 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
5829                 .rlen   = 48,
5830         }, { /* split-page version */
5831                 .key    = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5832                 .klen   = 8,
5833                 .iv     = { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
5834                 .input  = { 0xca, 0x90, 0xf5, 0x9d, 0xcb, 0xd4, 0xd2, 0x3c,
5835                             0x01, 0x88, 0x7f, 0x3e, 0x31, 0x6e, 0x62, 0x9d,
5836                             0xd8, 0xe0, 0x57, 0xa3, 0x06, 0x3a, 0x42, 0x58,
5837                             0x2a, 0x28, 0xfe, 0x72, 0x52, 0x2f, 0xdd, 0xe0,
5838                             0x19, 0x89, 0x09, 0x1c, 0x2a, 0x8e, 0x8c, 0x94,
5839                             0xfc, 0xc7, 0x68, 0xe4, 0x88, 0xaa, 0xde, 0x0f },
5840                 .ilen   = 48,
5841                 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
5842                 .rlen   = 48,
5843                 .np     = 2,
5844                 .tap    = { 20, 28 },
5845         }
5846 };
5847
5848 /*
5849  * CAMELLIA test vectors.
5850  */
5851 #define CAMELLIA_ENC_TEST_VECTORS 3
5852 #define CAMELLIA_DEC_TEST_VECTORS 3
5853 #define CAMELLIA_CBC_ENC_TEST_VECTORS 2
5854 #define CAMELLIA_CBC_DEC_TEST_VECTORS 2
5855
5856 static struct cipher_testvec camellia_enc_tv_template[] = {
5857         {
5858                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5859                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5860                 .klen   = 16,
5861                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5862                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5863                 .ilen   = 16,
5864                 .result = { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73,
5865                             0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 },
5866                 .rlen   = 16,
5867         }, {
5868                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5869                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
5870                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
5871                 .klen   = 24,
5872                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5873                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5874                 .ilen   = 16,
5875                 .result = { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8,
5876                             0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 },
5877                 .rlen   = 16,
5878         }, {
5879                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5880                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
5881                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
5882                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
5883                 .klen   = 32,
5884                 .input  = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5885                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5886                 .ilen   = 16,
5887                 .result = { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c,
5888                             0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 },
5889                 .rlen   = 16,
5890         },
5891 };
5892
5893 static struct cipher_testvec camellia_dec_tv_template[] = {
5894         {
5895                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5896                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5897                 .klen   = 16,
5898                 .input  = { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73,
5899                             0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 },
5900                 .ilen   = 16,
5901                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5902                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5903                 .rlen   = 16,
5904         }, {
5905                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5906                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
5907                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 },
5908                 .klen   = 24,
5909                 .input  = { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8,
5910                             0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 },
5911                 .ilen   = 16,
5912                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5913                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5914                 .rlen   = 16,
5915         }, {
5916                 .key    = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5917                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
5918                             0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
5919                             0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff },
5920                 .klen   = 32,
5921                 .input  = { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c,
5922                             0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 },
5923                 .ilen   = 16,
5924                 .result = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
5925                             0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 },
5926                 .rlen   = 16,
5927         },
5928 };
5929
5930 static struct cipher_testvec camellia_cbc_enc_tv_template[] = {
5931         {
5932                 .key    = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
5933                             0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
5934                 .klen   = 16,
5935                 .iv     = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
5936                             0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
5937                 .input  = { "Single block msg" },
5938                 .ilen   = 16,
5939                 .result = { 0xea, 0x32, 0x12, 0x76, 0x3b, 0x50, 0x10, 0xe7,
5940                             0x18, 0xf6, 0xfd, 0x5d, 0xf6, 0x8f, 0x13, 0x51 },
5941                 .rlen   = 16,
5942         }, {
5943                 .key    = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
5944                             0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
5945                 .klen   = 16,
5946                 .iv     = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
5947                             0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
5948                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5949                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
5950                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
5951                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
5952                 .ilen   = 32,
5953                 .result = { 0xa5, 0xdf, 0x6e, 0x50, 0xda, 0x70, 0x6c, 0x01,
5954                             0x4a, 0xab, 0xf3, 0xf2, 0xd6, 0xfc, 0x6c, 0xfd,
5955                             0x19, 0xb4, 0x3e, 0x57, 0x1c, 0x02, 0x5e, 0xa0,
5956                             0x15, 0x78, 0xe0, 0x5e, 0xf2, 0xcb, 0x87, 0x16 },
5957                 .rlen   = 32,
5958         },
5959 };
5960
5961 static struct cipher_testvec camellia_cbc_dec_tv_template[] = {
5962         {
5963                 .key    = { 0x06, 0xa9, 0x21, 0x40, 0x36, 0xb8, 0xa1, 0x5b,
5964                             0x51, 0x2e, 0x03, 0xd5, 0x34, 0x12, 0x00, 0x06 },
5965                 .klen   = 16,
5966                 .iv     = { 0x3d, 0xaf, 0xba, 0x42, 0x9d, 0x9e, 0xb4, 0x30,
5967                             0xb4, 0x22, 0xda, 0x80, 0x2c, 0x9f, 0xac, 0x41 },
5968                 .input  = { 0xea, 0x32, 0x12, 0x76, 0x3b, 0x50, 0x10, 0xe7,
5969                             0x18, 0xf6, 0xfd, 0x5d, 0xf6, 0x8f, 0x13, 0x51 },
5970                 .ilen   = 16,
5971                 .result = { "Single block msg" },
5972                 .rlen   = 16,
5973         }, {
5974                 .key    = { 0xc2, 0x86, 0x69, 0x6d, 0x88, 0x7c, 0x9a, 0xa0,
5975                             0x61, 0x1b, 0xbb, 0x3e, 0x20, 0x25, 0xa4, 0x5a },
5976                 .klen   = 16,
5977                 .iv     = { 0x56, 0x2e, 0x17, 0x99, 0x6d, 0x09, 0x3d, 0x28,
5978                             0xdd, 0xb3, 0xba, 0x69, 0x5a, 0x2e, 0x6f, 0x58 },
5979                 .input = { 0xa5, 0xdf, 0x6e, 0x50, 0xda, 0x70, 0x6c, 0x01,
5980                             0x4a, 0xab, 0xf3, 0xf2, 0xd6, 0xfc, 0x6c, 0xfd,
5981                             0x19, 0xb4, 0x3e, 0x57, 0x1c, 0x02, 0x5e, 0xa0,
5982                             0x15, 0x78, 0xe0, 0x5e, 0xf2, 0xcb, 0x87, 0x16 },
5983                 .ilen   = 32,
5984                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
5985                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
5986                             0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
5987                             0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f },
5988                 .rlen   = 32,
5989         },
5990 };
5991
5992 /*
5993  * SEED test vectors
5994  */
5995 #define SEED_ENC_TEST_VECTORS   4
5996 #define SEED_DEC_TEST_VECTORS   4
5997
5998 static struct cipher_testvec seed_enc_tv_template[] = {
5999         {
6000                 .key    = { [0 ... 15] = 0x00 },
6001                 .klen   = 16,
6002                 .input  = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6003                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
6004                 .ilen   = 16,
6005                 .result = { 0x5e, 0xba, 0xc6, 0xe0, 0x05, 0x4e, 0x16, 0x68,
6006                             0x19, 0xaf, 0xf1, 0xcc, 0x6d, 0x34, 0x6c, 0xdb },
6007                 .rlen   = 16,
6008         }, {
6009                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6010                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
6011                 .klen   = 16,
6012                 .input  = { [0 ... 15] = 0x00 },
6013                 .ilen   = 16,
6014                 .result = { 0xc1, 0x1f, 0x22, 0xf2, 0x01, 0x40, 0x50, 0x50,
6015                             0x84, 0x48, 0x35, 0x97, 0xe4, 0x37, 0x0f, 0x43 },
6016                 .rlen   = 16,
6017         }, {
6018                 .key    = { 0x47, 0x06, 0x48, 0x08, 0x51, 0xe6, 0x1b, 0xe8,
6019                             0x5d, 0x74, 0xbf, 0xb3, 0xfd, 0x95, 0x61, 0x85 },
6020                 .klen   = 16,
6021                 .input  = { 0x83, 0xa2, 0xf8, 0xa2, 0x88, 0x64, 0x1f, 0xb9,
6022                             0xa4, 0xe9, 0xa5, 0xcc, 0x2f, 0x13, 0x1c, 0x7d },
6023                 .ilen   = 16,
6024                 .result = { 0xee, 0x54, 0xd1, 0x3e, 0xbc, 0xae, 0x70, 0x6d,
6025                             0x22, 0x6b, 0xc3, 0x14, 0x2c, 0xd4, 0x0d, 0x4a },
6026                 .rlen   = 16,
6027         }, {
6028                 .key    = { 0x28, 0xdb, 0xc3, 0xbc, 0x49, 0xff, 0xd8, 0x7d,
6029                             0xcf, 0xa5, 0x09, 0xb1, 0x1d, 0x42, 0x2b, 0xe7 },
6030                 .klen   = 16,
6031                 .input  = { 0xb4, 0x1e, 0x6b, 0xe2, 0xeb, 0xa8, 0x4a, 0x14,
6032                             0x8e, 0x2e, 0xed, 0x84, 0x59, 0x3c, 0x5e, 0xc7 },
6033                 .ilen   = 16,
6034                 .result = { 0x9b, 0x9b, 0x7b, 0xfc, 0xd1, 0x81, 0x3c, 0xb9,
6035                             0x5d, 0x0b, 0x36, 0x18, 0xf4, 0x0f, 0x51, 0x22 },
6036                 .rlen   = 16,
6037         }
6038 };
6039
6040 static struct cipher_testvec seed_dec_tv_template[] = {
6041         {
6042                 .key    = { [0 ... 15] = 0x00 },
6043                 .klen   = 16,
6044                 .input  = { 0x5e, 0xba, 0xc6, 0xe0, 0x05, 0x4e, 0x16, 0x68,
6045                             0x19, 0xaf, 0xf1, 0xcc, 0x6d, 0x34, 0x6c, 0xdb },
6046                 .ilen   = 16,
6047                 .result = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6048                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
6049                 .rlen   = 16,
6050         }, {
6051                 .key    = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6052                             0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
6053                 .klen   = 16,
6054                 .input  = { 0xc1, 0x1f, 0x22, 0xf2, 0x01, 0x40, 0x50, 0x50,
6055                             0x84, 0x48, 0x35, 0x97, 0xe4, 0x37, 0x0f, 0x43 },
6056                 .ilen   = 16,
6057                 .result = { [0 ... 15] = 0x00 },
6058                 .rlen   = 16,
6059         }, {
6060                 .key    = { 0x47, 0x06, 0x48, 0x08, 0x51, 0xe6, 0x1b, 0xe8,
6061                             0x5d, 0x74, 0xbf, 0xb3, 0xfd, 0x95, 0x61, 0x85 },
6062                 .klen   = 16,
6063                 .input  = { 0xee, 0x54, 0xd1, 0x3e, 0xbc, 0xae, 0x70, 0x6d,
6064                             0x22, 0x6b, 0xc3, 0x14, 0x2c, 0xd4, 0x0d, 0x4a },
6065                 .ilen   = 16,
6066                 .result = { 0x83, 0xa2, 0xf8, 0xa2, 0x88, 0x64, 0x1f, 0xb9,
6067                             0xa4, 0xe9, 0xa5, 0xcc, 0x2f, 0x13, 0x1c, 0x7d },
6068                 .rlen   = 16,
6069         }, {
6070                 .key    = { 0x28, 0xdb, 0xc3, 0xbc, 0x49, 0xff, 0xd8, 0x7d,
6071                             0xcf, 0xa5, 0x09, 0xb1, 0x1d, 0x42, 0x2b, 0xe7 },
6072                 .klen   = 16,
6073                 .input  = { 0x9b, 0x9b, 0x7b, 0xfc, 0xd1, 0x81, 0x3c, 0xb9,
6074                             0x5d, 0x0b, 0x36, 0x18, 0xf4, 0x0f, 0x51, 0x22 },
6075                 .ilen   = 16,
6076                 .result = { 0xb4, 0x1e, 0x6b, 0xe2, 0xeb, 0xa8, 0x4a, 0x14,
6077                             0x8e, 0x2e, 0xed, 0x84, 0x59, 0x3c, 0x5e, 0xc7 },
6078                 .rlen   = 16,
6079         }
6080 };
6081
6082 #define SALSA20_STREAM_ENC_TEST_VECTORS 4
6083 static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
6084         /*
6085         * Testvectors from verified.test-vectors submitted to ECRYPT.
6086         * They are truncated to size 39, 64, 111, 129 to test a variety
6087         * of input length.
6088         */
6089         { /* Set 3, vector 0 */
6090                 .key    = {
6091                             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6092                             0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
6093                           },
6094                 .klen   = 16,
6095                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
6096                 .input  = {
6097                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6098                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6099                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6100                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6101                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6102                           },
6103                 .ilen   = 39,
6104                 .result = {
6105                             0x2D, 0xD5, 0xC3, 0xF7, 0xBA, 0x2B, 0x20, 0xF7,
6106                             0x68, 0x02, 0x41, 0x0C, 0x68, 0x86, 0x88, 0x89,
6107                             0x5A, 0xD8, 0xC1, 0xBD, 0x4E, 0xA6, 0xC9, 0xB1,
6108                             0x40, 0xFB, 0x9B, 0x90, 0xE2, 0x10, 0x49, 0xBF,
6109                             0x58, 0x3F, 0x52, 0x79, 0x70, 0xEB, 0xC1,
6110                         },
6111                 .rlen   = 39,
6112         }, { /* Set 5, vector 0 */
6113                 .key    = {
6114                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6115                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
6116                           },
6117                 .klen   = 16,
6118                 .iv     = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
6119                 .input  = {
6120                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6121                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6122                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6123                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6124                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6125                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6126                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6127                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6128                           },
6129                 .ilen   = 64,
6130                 .result = {
6131                             0xB6, 0x6C, 0x1E, 0x44, 0x46, 0xDD, 0x95, 0x57,
6132                             0xE5, 0x78, 0xE2, 0x23, 0xB0, 0xB7, 0x68, 0x01,
6133                             0x7B, 0x23, 0xB2, 0x67, 0xBB, 0x02, 0x34, 0xAE,
6134                             0x46, 0x26, 0xBF, 0x44, 0x3F, 0x21, 0x97, 0x76,
6135                             0x43, 0x6F, 0xB1, 0x9F, 0xD0, 0xE8, 0x86, 0x6F,
6136                             0xCD, 0x0D, 0xE9, 0xA9, 0x53, 0x8F, 0x4A, 0x09,
6137                             0xCA, 0x9A, 0xC0, 0x73, 0x2E, 0x30, 0xBC, 0xF9,
6138                             0x8E, 0x4F, 0x13, 0xE4, 0xB9, 0xE2, 0x01, 0xD9,
6139                           },
6140                 .rlen   = 64,
6141         }, { /* Set 3, vector 27 */
6142                 .key    = {
6143                             0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
6144                             0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A,
6145                             0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,
6146                             0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A
6147                           },
6148                 .klen   = 32,
6149                 .iv     = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
6150                 .input  = {
6151                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6152                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6153                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6154                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6155                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6156                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6157                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6158                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6159
6160                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6161                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6162                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6163                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6164                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6165                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6166                           },
6167                 .ilen   = 111,
6168                 .result = {
6169                             0xAE, 0x39, 0x50, 0x8E, 0xAC, 0x9A, 0xEC, 0xE7,
6170                             0xBF, 0x97, 0xBB, 0x20, 0xB9, 0xDE, 0xE4, 0x1F,
6171                             0x87, 0xD9, 0x47, 0xF8, 0x28, 0x91, 0x35, 0x98,
6172                             0xDB, 0x72, 0xCC, 0x23, 0x29, 0x48, 0x56, 0x5E,
6173                             0x83, 0x7E, 0x0B, 0xF3, 0x7D, 0x5D, 0x38, 0x7B,
6174                             0x2D, 0x71, 0x02, 0xB4, 0x3B, 0xB5, 0xD8, 0x23,
6175                             0xB0, 0x4A, 0xDF, 0x3C, 0xEC, 0xB6, 0xD9, 0x3B,
6176                             0x9B, 0xA7, 0x52, 0xBE, 0xC5, 0xD4, 0x50, 0x59,
6177
6178                             0x15, 0x14, 0xB4, 0x0E, 0x40, 0xE6, 0x53, 0xD1,
6179                             0x83, 0x9C, 0x5B, 0xA0, 0x92, 0x29, 0x6B, 0x5E,
6180                             0x96, 0x5B, 0x1E, 0x2F, 0xD3, 0xAC, 0xC1, 0x92,
6181                             0xB1, 0x41, 0x3F, 0x19, 0x2F, 0xC4, 0x3B, 0xC6,
6182                             0x95, 0x46, 0x45, 0x54, 0xE9, 0x75, 0x03, 0x08,
6183                             0x44, 0xAF, 0xE5, 0x8A, 0x81, 0x12, 0x09,
6184                           },
6185                 .rlen   = 111,
6186
6187         }, { /* Set 5, vector 27 */
6188                 .key    = {
6189                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6190                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6191                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6192                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
6193                           },
6194                 .klen   = 32,
6195                 .iv     = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00 },
6196                 .input  = {
6197                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6198                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6199                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6200                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6201                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6202                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6203                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6204                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6205
6206                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6207                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6208                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6209                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6210                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6211                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6212                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6213                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6214
6215                             0x00,
6216                           },
6217                 .ilen   = 129,
6218                 .result = {
6219                             0xD2, 0xDB, 0x1A, 0x5C, 0xF1, 0xC1, 0xAC, 0xDB,
6220                             0xE8, 0x1A, 0x7A, 0x43, 0x40, 0xEF, 0x53, 0x43,
6221                             0x5E, 0x7F, 0x4B, 0x1A, 0x50, 0x52, 0x3F, 0x8D,
6222                             0x28, 0x3D, 0xCF, 0x85, 0x1D, 0x69, 0x6E, 0x60,
6223                             0xF2, 0xDE, 0x74, 0x56, 0x18, 0x1B, 0x84, 0x10,
6224                             0xD4, 0x62, 0xBA, 0x60, 0x50, 0xF0, 0x61, 0xF2,
6225                             0x1C, 0x78, 0x7F, 0xC1, 0x24, 0x34, 0xAF, 0x58,
6226                             0xBF, 0x2C, 0x59, 0xCA, 0x90, 0x77, 0xF3, 0xB0,
6227
6228                             0x5B, 0x4A, 0xDF, 0x89, 0xCE, 0x2C, 0x2F, 0xFC,
6229                             0x67, 0xF0, 0xE3, 0x45, 0xE8, 0xB3, 0xB3, 0x75,
6230                             0xA0, 0x95, 0x71, 0xA1, 0x29, 0x39, 0x94, 0xCA,
6231                             0x45, 0x2F, 0xBD, 0xCB, 0x10, 0xB6, 0xBE, 0x9F,
6232                             0x8E, 0xF9, 0xB2, 0x01, 0x0A, 0x5A, 0x0A, 0xB7,
6233                             0x6B, 0x9D, 0x70, 0x8E, 0x4B, 0xD6, 0x2F, 0xCD,
6234                             0x2E, 0x40, 0x48, 0x75, 0xE9, 0xE2, 0x21, 0x45,
6235                             0x0B, 0xC9, 0xB6, 0xB5, 0x66, 0xBC, 0x9A, 0x59,
6236
6237                             0x5A,
6238                           },
6239                 .rlen   = 129,
6240         }
6241 };
6242
6243 /*
6244  * Compression stuff.
6245  */
6246 #define COMP_BUF_SIZE           512
6247
6248 struct comp_testvec {
6249         int inlen, outlen;
6250         char input[COMP_BUF_SIZE];
6251         char output[COMP_BUF_SIZE];
6252 };
6253
6254 /*
6255  * Deflate test vectors (null-terminated strings).
6256  * Params: winbits=11, Z_DEFAULT_COMPRESSION, MAX_MEM_LEVEL.
6257  */
6258 #define DEFLATE_COMP_TEST_VECTORS 2
6259 #define DEFLATE_DECOMP_TEST_VECTORS 2
6260
6261 static struct comp_testvec deflate_comp_tv_template[] = {
6262         {
6263                 .inlen  = 70,
6264                 .outlen = 38,
6265                 .input  = "Join us now and share the software "
6266                           "Join us now and share the software ",
6267                 .output = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
6268                             0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
6269                             0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
6270                             0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
6271                             0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
6272         }, {
6273                 .inlen  = 191,
6274                 .outlen = 122,
6275                 .input  = "This document describes a compression method based on the DEFLATE"
6276                           "compression algorithm.  This document defines the application of "
6277                           "the DEFLATE algorithm to the IP Payload Compression Protocol.",
6278                 .output = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
6279                             0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
6280                             0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
6281                             0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
6282                             0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
6283                             0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
6284                             0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
6285                             0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
6286                             0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
6287                             0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
6288                             0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
6289                             0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
6290                             0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
6291                             0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
6292                             0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
6293                             0xfa, 0x02 },
6294         },
6295 };
6296
6297 static struct comp_testvec deflate_decomp_tv_template[] = {
6298         {
6299                 .inlen  = 122,
6300                 .outlen = 191,
6301                 .input  = { 0x5d, 0x8d, 0x31, 0x0e, 0xc2, 0x30, 0x10, 0x04,
6302                             0xbf, 0xb2, 0x2f, 0xc8, 0x1f, 0x10, 0x04, 0x09,
6303                             0x89, 0xc2, 0x85, 0x3f, 0x70, 0xb1, 0x2f, 0xf8,
6304                             0x24, 0xdb, 0x67, 0xd9, 0x47, 0xc1, 0xef, 0x49,
6305                             0x68, 0x12, 0x51, 0xae, 0x76, 0x67, 0xd6, 0x27,
6306                             0x19, 0x88, 0x1a, 0xde, 0x85, 0xab, 0x21, 0xf2,
6307                             0x08, 0x5d, 0x16, 0x1e, 0x20, 0x04, 0x2d, 0xad,
6308                             0xf3, 0x18, 0xa2, 0x15, 0x85, 0x2d, 0x69, 0xc4,
6309                             0x42, 0x83, 0x23, 0xb6, 0x6c, 0x89, 0x71, 0x9b,
6310                             0xef, 0xcf, 0x8b, 0x9f, 0xcf, 0x33, 0xca, 0x2f,
6311                             0xed, 0x62, 0xa9, 0x4c, 0x80, 0xff, 0x13, 0xaf,
6312                             0x52, 0x37, 0xed, 0x0e, 0x52, 0x6b, 0x59, 0x02,
6313                             0xd9, 0x4e, 0xe8, 0x7a, 0x76, 0x1d, 0x02, 0x98,
6314                             0xfe, 0x8a, 0x87, 0x83, 0xa3, 0x4f, 0x56, 0x8a,
6315                             0xb8, 0x9e, 0x8e, 0x5c, 0x57, 0xd3, 0xa0, 0x79,
6316                             0xfa, 0x02 },
6317                 .output = "This document describes a compression method based on the DEFLATE"
6318                           "compression algorithm.  This document defines the application of "
6319                           "the DEFLATE algorithm to the IP Payload Compression Protocol.",
6320         }, {
6321                 .inlen  = 38,
6322                 .outlen = 70,
6323                 .input  = { 0xf3, 0xca, 0xcf, 0xcc, 0x53, 0x28, 0x2d, 0x56,
6324                             0xc8, 0xcb, 0x2f, 0x57, 0x48, 0xcc, 0x4b, 0x51,
6325                             0x28, 0xce, 0x48, 0x2c, 0x4a, 0x55, 0x28, 0xc9,
6326                             0x48, 0x55, 0x28, 0xce, 0x4f, 0x2b, 0x29, 0x07,
6327                             0x71, 0xbc, 0x08, 0x2b, 0x01, 0x00 },
6328                 .output = "Join us now and share the software "
6329                           "Join us now and share the software ",
6330         },
6331 };
6332
6333 /*
6334  * Michael MIC test vectors from IEEE 802.11i
6335  */
6336 #define MICHAEL_MIC_TEST_VECTORS 6
6337
6338 static struct hash_testvec michael_mic_tv_template[] = {
6339         {
6340                 .key = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
6341                 .ksize = 8,
6342                 .plaintext = { },
6343                 .psize = 0,
6344                 .digest = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 }
6345         },
6346         {
6347                 .key = { 0x82, 0x92, 0x5c, 0x1c, 0xa1, 0xd1, 0x30, 0xb8 },
6348                 .ksize = 8,
6349                 .plaintext = { 'M' },
6350                 .psize = 1,
6351                 .digest = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f }
6352         },
6353         {
6354                 .key = { 0x43, 0x47, 0x21, 0xca, 0x40, 0x63, 0x9b, 0x3f },
6355                 .ksize = 8,
6356                 .plaintext = { 'M', 'i' },
6357                 .psize = 2,
6358                 .digest = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 }
6359         },
6360         {
6361                 .key = { 0xe8, 0xf9, 0xbe, 0xca, 0xe9, 0x7e, 0x5d, 0x29 },
6362                 .ksize = 8,
6363                 .plaintext = { 'M', 'i', 'c' },
6364                 .psize = 3,
6365                 .digest = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb }
6366         },
6367         {
6368                 .key = { 0x90, 0x03, 0x8f, 0xc6, 0xcf, 0x13, 0xc1, 0xdb },
6369                 .ksize = 8,
6370                 .plaintext = { 'M', 'i', 'c', 'h' },
6371                 .psize = 4,
6372                 .digest = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 }
6373         },
6374         {
6375                 .key = { 0xd5, 0x5e, 0x10, 0x05, 0x10, 0x12, 0x89, 0x86 },
6376                 .ksize = 8,
6377                 .plaintext = { 'M', 'i', 'c', 'h', 'a', 'e', 'l' },
6378                 .psize = 7,
6379                 .digest = { 0x0a, 0x94, 0x2b, 0x12, 0x4e, 0xca, 0xa5, 0x46 },
6380         }
6381 };
6382
6383 /*
6384  * CRC32C test vectors
6385  */
6386 #define CRC32C_TEST_VECTORS 14
6387
6388 static struct hash_testvec crc32c_tv_template[] = {
6389         {
6390                 .psize = 0,
6391                 .digest = { 0x00, 0x00, 0x00, 0x00 }
6392         },
6393         {
6394                 .key = { 0x87, 0xa9, 0xcb, 0xed },
6395                 .ksize = 4,
6396                 .psize = 0,
6397                 .digest = { 0x78, 0x56, 0x34, 0x12 },
6398         },
6399         {
6400                 .key = { 0xff, 0xff, 0xff, 0xff },
6401                 .ksize = 4,
6402                 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
6403                                0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
6404                                0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
6405                                0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
6406                                0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 },
6407                 .psize = 40,
6408                 .digest = { 0x7f, 0x15, 0x2c, 0x0e }
6409         },
6410         {
6411                 .key = { 0xff, 0xff, 0xff, 0xff },
6412                 .ksize = 4,
6413                 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
6414                                0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
6415                                0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
6416                                0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
6417                                0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
6418                 .psize = 40,
6419                 .digest = { 0xf6, 0xeb, 0x80, 0xe9 }
6420         },
6421         {
6422                 .key = { 0xff, 0xff, 0xff, 0xff },
6423                 .ksize = 4,
6424                 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
6425                                0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
6426                                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
6427                                0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
6428                                0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
6429                 .psize = 40,
6430                 .digest = { 0xed, 0xbd, 0x74, 0xde }
6431         },
6432         {
6433                 .key = { 0xff, 0xff, 0xff, 0xff },
6434                 .ksize = 4,
6435                 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
6436                                0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
6437                                0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
6438                                0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
6439                                0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
6440                 .psize = 40,
6441                 .digest = { 0x62, 0xc8, 0x79, 0xd5 }
6442         },
6443         {
6444                 .key = { 0xff, 0xff, 0xff, 0xff },
6445                 .ksize = 4,
6446                 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
6447                                0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
6448                                0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
6449                                0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
6450                                0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
6451                 .psize = 40,
6452                 .digest = { 0xd0, 0x9a, 0x97, 0xba }
6453         },
6454         {
6455                 .key = { 0xff, 0xff, 0xff, 0xff },
6456                 .ksize = 4,
6457                 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
6458                                0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
6459                                0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
6460                                0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
6461                                0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
6462                 .psize = 40,
6463                 .digest = { 0x13, 0xd9, 0x29, 0x2b }
6464         },
6465         {
6466                 .key = { 0x80, 0xea, 0xd3, 0xf1 },
6467                 .ksize = 4,
6468                 .plaintext = { 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
6469                                0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
6470                                0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
6471                                0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
6472                                0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50 },
6473                 .psize = 40,
6474                 .digest = { 0x0c, 0xb5, 0xe2, 0xa2 }
6475         },
6476         {
6477                 .key = { 0xf3, 0x4a, 0x1d, 0x5d },
6478                 .ksize = 4,
6479                 .plaintext = { 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
6480                                0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
6481                                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
6482                                0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
6483                                0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78 },
6484                 .psize = 40,
6485                 .digest = { 0xd1, 0x7f, 0xfb, 0xa6 }
6486         },
6487         {
6488                 .key = { 0x2e, 0x80, 0x04, 0x59 },
6489                 .ksize = 4,
6490                 .plaintext = { 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
6491                                0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
6492                                0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
6493                                0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
6494                                0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0 },
6495                 .psize = 40,
6496                 .digest = { 0x59, 0x33, 0xe6, 0x7a }
6497         },
6498         {
6499                 .key = { 0xa6, 0xcc, 0x19, 0x85 },
6500                 .ksize = 4,
6501                 .plaintext = { 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
6502                                0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
6503                                0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
6504                                0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
6505                                0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8 },
6506                 .psize = 40,
6507                 .digest = { 0xbe, 0x03, 0x01, 0xd2 }
6508         },
6509         {
6510                 .key = { 0x41, 0xfc, 0xfe, 0x2d },
6511                 .ksize = 4,
6512                 .plaintext = { 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
6513                                0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
6514                                0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
6515                                0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
6516                                0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
6517                 .psize = 40,
6518                 .digest = { 0x75, 0xd3, 0xc5, 0x24 }
6519         },
6520         {
6521                 .key = { 0xff, 0xff, 0xff, 0xff },
6522                 .ksize = 4,
6523                 .plaintext = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
6524                                0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
6525                                0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
6526                                0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
6527                                0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
6528                                0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
6529                                0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
6530                                0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
6531                                0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
6532                                0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
6533                                0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
6534                                0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
6535                                0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
6536                                0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
6537                                0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
6538                                0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80,
6539                                0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
6540                                0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90,
6541                                0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
6542                                0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0,
6543                                0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
6544                                0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
6545                                0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
6546                                0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
6547                                0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
6548                                0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
6549                                0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
6550                                0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0,
6551                                0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
6552                                0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0 },
6553                 .psize = 240,
6554                 .digest = { 0x75, 0xd3, 0xc5, 0x24 },
6555                 .np = 2,
6556                 .tap = { 31, 209 }
6557         },
6558 };
6559
6560 /*
6561  * Cipher speed tests
6562  */
6563 static struct cipher_speed aes_speed_template[] = {
6564         { .klen = 16, .blen = 16, },
6565         { .klen = 16, .blen = 64, },
6566         { .klen = 16, .blen = 256, },
6567         { .klen = 16, .blen = 1024, },
6568         { .klen = 16, .blen = 8192, },
6569         { .klen = 24, .blen = 16, },
6570         { .klen = 24, .blen = 64, },
6571         { .klen = 24, .blen = 256, },
6572         { .klen = 24, .blen = 1024, },
6573         { .klen = 24, .blen = 8192, },
6574         { .klen = 32, .blen = 16, },
6575         { .klen = 32, .blen = 64, },
6576         { .klen = 32, .blen = 256, },
6577         { .klen = 32, .blen = 1024, },
6578         { .klen = 32, .blen = 8192, },
6579
6580         /* End marker */
6581         {  .klen = 0, .blen = 0, }
6582 };
6583
6584 static struct cipher_speed aes_lrw_speed_template[] = {
6585         { .klen = 32, .blen = 16, },
6586         { .klen = 32, .blen = 64, },
6587         { .klen = 32, .blen = 256, },
6588         { .klen = 32, .blen = 1024, },
6589         { .klen = 32, .blen = 8192, },
6590         { .klen = 40, .blen = 16, },
6591         { .klen = 40, .blen = 64, },
6592         { .klen = 40, .blen = 256, },
6593         { .klen = 40, .blen = 1024, },
6594         { .klen = 40, .blen = 8192, },
6595         { .klen = 48, .blen = 16, },
6596         { .klen = 48, .blen = 64, },
6597         { .klen = 48, .blen = 256, },
6598         { .klen = 48, .blen = 1024, },
6599         { .klen = 48, .blen = 8192, },
6600
6601         /* End marker */
6602         {  .klen = 0, .blen = 0, }
6603 };
6604
6605 static struct cipher_speed aes_xts_speed_template[] = {
6606         { .klen = 32, .blen = 16, },
6607         { .klen = 32, .blen = 64, },
6608         { .klen = 32, .blen = 256, },
6609         { .klen = 32, .blen = 1024, },
6610         { .klen = 32, .blen = 8192, },
6611         { .klen = 48, .blen = 16, },
6612         { .klen = 48, .blen = 64, },
6613         { .klen = 48, .blen = 256, },
6614         { .klen = 48, .blen = 1024, },
6615         { .klen = 48, .blen = 8192, },
6616         { .klen = 64, .blen = 16, },
6617         { .klen = 64, .blen = 64, },
6618         { .klen = 64, .blen = 256, },
6619         { .klen = 64, .blen = 1024, },
6620         { .klen = 64, .blen = 8192, },
6621
6622         /* End marker */
6623         {  .klen = 0, .blen = 0, }
6624 };
6625
6626 static struct cipher_speed des3_ede_speed_template[] = {
6627         { .klen = 24, .blen = 16, },
6628         { .klen = 24, .blen = 64, },
6629         { .klen = 24, .blen = 256, },
6630         { .klen = 24, .blen = 1024, },
6631         { .klen = 24, .blen = 8192, },
6632
6633         /* End marker */
6634         {  .klen = 0, .blen = 0, }
6635 };
6636
6637 static struct cipher_speed twofish_speed_template[] = {
6638         { .klen = 16, .blen = 16, },
6639         { .klen = 16, .blen = 64, },
6640         { .klen = 16, .blen = 256, },
6641         { .klen = 16, .blen = 1024, },
6642         { .klen = 16, .blen = 8192, },
6643         { .klen = 24, .blen = 16, },
6644         { .klen = 24, .blen = 64, },
6645         { .klen = 24, .blen = 256, },
6646         { .klen = 24, .blen = 1024, },
6647         { .klen = 24, .blen = 8192, },
6648         { .klen = 32, .blen = 16, },
6649         { .klen = 32, .blen = 64, },
6650         { .klen = 32, .blen = 256, },
6651         { .klen = 32, .blen = 1024, },
6652         { .klen = 32, .blen = 8192, },
6653
6654         /* End marker */
6655         {  .klen = 0, .blen = 0, }
6656 };
6657
6658 static struct cipher_speed blowfish_speed_template[] = {
6659         /* Don't support blowfish keys > 256 bit in this test */
6660         { .klen = 8, .blen = 16, },
6661         { .klen = 8, .blen = 64, },
6662         { .klen = 8, .blen = 256, },
6663         { .klen = 8, .blen = 1024, },
6664         { .klen = 8, .blen = 8192, },
6665         { .klen = 32, .blen = 16, },
6666         { .klen = 32, .blen = 64, },
6667         { .klen = 32, .blen = 256, },
6668         { .klen = 32, .blen = 1024, },
6669         { .klen = 32, .blen = 8192, },
6670
6671         /* End marker */
6672         {  .klen = 0, .blen = 0, }
6673 };
6674
6675 static struct cipher_speed des_speed_template[] = {
6676         { .klen = 8, .blen = 16, },
6677         { .klen = 8, .blen = 64, },
6678         { .klen = 8, .blen = 256, },
6679         { .klen = 8, .blen = 1024, },
6680         { .klen = 8, .blen = 8192, },
6681
6682         /* End marker */
6683         {  .klen = 0, .blen = 0, }
6684 };
6685
6686 /*
6687  * Digest speed tests
6688  */
6689 static struct hash_speed generic_hash_speed_template[] = {
6690         { .blen = 16,   .plen = 16, },
6691         { .blen = 64,   .plen = 16, },
6692         { .blen = 64,   .plen = 64, },
6693         { .blen = 256,  .plen = 16, },
6694         { .blen = 256,  .plen = 64, },
6695         { .blen = 256,  .plen = 256, },
6696         { .blen = 1024, .plen = 16, },
6697         { .blen = 1024, .plen = 256, },
6698         { .blen = 1024, .plen = 1024, },
6699         { .blen = 2048, .plen = 16, },
6700         { .blen = 2048, .plen = 256, },
6701         { .blen = 2048, .plen = 1024, },
6702         { .blen = 2048, .plen = 2048, },
6703         { .blen = 4096, .plen = 16, },
6704         { .blen = 4096, .plen = 256, },
6705         { .blen = 4096, .plen = 1024, },
6706         { .blen = 4096, .plen = 4096, },
6707         { .blen = 8192, .plen = 16, },
6708         { .blen = 8192, .plen = 256, },
6709         { .blen = 8192, .plen = 1024, },
6710         { .blen = 8192, .plen = 4096, },
6711         { .blen = 8192, .plen = 8192, },
6712
6713         /* End marker */
6714         {  .blen = 0,   .plen = 0, }
6715 };
6716
6717 static struct cipher_speed camellia_speed_template[] = {
6718       { .klen = 16, .blen = 16, },
6719       { .klen = 16, .blen = 64, },
6720       { .klen = 16, .blen = 256, },
6721       { .klen = 16, .blen = 1024, },
6722       { .klen = 16, .blen = 8192, },
6723       { .klen = 24, .blen = 16, },
6724       { .klen = 24, .blen = 64, },
6725       { .klen = 24, .blen = 256, },
6726       { .klen = 24, .blen = 1024, },
6727       { .klen = 24, .blen = 8192, },
6728       { .klen = 32, .blen = 16, },
6729       { .klen = 32, .blen = 64, },
6730       { .klen = 32, .blen = 256, },
6731       { .klen = 32, .blen = 1024, },
6732       { .klen = 32, .blen = 8192, },
6733
6734       /* End marker */
6735       {  .klen = 0, .blen = 0, }
6736 };
6737
6738 #endif  /* _CRYPTO_TCRYPT_H */