aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/crypto/Makefile2
-rw-r--r--arch/x86/crypto/crc32c-intel.c197
-rw-r--r--crypto/Kconfig127
-rw-r--r--crypto/Makefile12
-rw-r--r--crypto/algapi.c147
-rw-r--r--crypto/algboss.c (renamed from crypto/cryptomgr.c)92
-rw-r--r--crypto/ansi_cprng.c417
-rw-r--r--crypto/api.c81
-rw-r--r--crypto/blkcipher.c29
-rw-r--r--crypto/chainiv.c44
-rw-r--r--crypto/eseqiv.c35
-rw-r--r--crypto/fips.c27
-rw-r--r--crypto/internal.h18
-rw-r--r--crypto/krng.c66
-rw-r--r--crypto/proc.c57
-rw-r--r--crypto/rng.c126
-rw-r--r--crypto/seqiv.c27
-rw-r--r--crypto/tcrypt.c1347
-rw-r--r--crypto/tcrypt.h8709
-rw-r--r--crypto/testmgr.c1868
-rw-r--r--crypto/testmgr.h8738
-rw-r--r--include/crypto/internal/rng.h26
-rw-r--r--include/crypto/internal/skcipher.h6
-rw-r--r--include/crypto/rng.h75
-rw-r--r--include/linux/crypto.h35
25 files changed, 12249 insertions, 10059 deletions
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 3874c2de5403..903de4aa5094 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -10,6 +10,8 @@ obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o
10obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o 10obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o
11obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o 11obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o
12 12
13obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o
14
13aes-i586-y := aes-i586-asm_32.o aes_glue.o 15aes-i586-y := aes-i586-asm_32.o aes_glue.o
14twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o 16twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o
15salsa20-i586-y := salsa20-i586-asm_32.o salsa20_glue.o 17salsa20-i586-y := salsa20-i586-asm_32.o salsa20_glue.o
diff --git a/arch/x86/crypto/crc32c-intel.c b/arch/x86/crypto/crc32c-intel.c
new file mode 100644
index 000000000000..070afc5b6c94
--- /dev/null
+++ b/arch/x86/crypto/crc32c-intel.c
@@ -0,0 +1,197 @@
1/*
2 * Using hardware provided CRC32 instruction to accelerate the CRC32 disposal.
3 * CRC32C polynomial:0x1EDC6F41(BE)/0x82F63B78(LE)
4 * CRC32 is a new instruction in Intel SSE4.2, the reference can be found at:
5 * http://www.intel.com/products/processor/manuals/
6 * Intel(R) 64 and IA-32 Architectures Software Developer's Manual
7 * Volume 2A: Instruction Set Reference, A-M
8 *
9 * Copyright (c) 2008 Austin Zhang <austin_zhang@linux.intel.com>
10 * Copyright (c) 2008 Kent Liu <kent.liu@intel.com>
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 *
17 */
18#include <linux/init.h>
19#include <linux/module.h>
20#include <linux/string.h>
21#include <linux/kernel.h>
22#include <crypto/internal/hash.h>
23
24#include <asm/cpufeature.h>
25
26#define CHKSUM_BLOCK_SIZE 1
27#define CHKSUM_DIGEST_SIZE 4
28
29#define SCALE_F sizeof(unsigned long)
30
31#ifdef CONFIG_X86_64
32#define REX_PRE "0x48, "
33#else
34#define REX_PRE
35#endif
36
37static u32 crc32c_intel_le_hw_byte(u32 crc, unsigned char const *data, size_t length)
38{
39 while (length--) {
40 __asm__ __volatile__(
41 ".byte 0xf2, 0xf, 0x38, 0xf0, 0xf1"
42 :"=S"(crc)
43 :"0"(crc), "c"(*data)
44 );
45 data++;
46 }
47
48 return crc;
49}
50
51static u32 __pure crc32c_intel_le_hw(u32 crc, unsigned char const *p, size_t len)
52{
53 unsigned int iquotient = len / SCALE_F;
54 unsigned int iremainder = len % SCALE_F;
55 unsigned long *ptmp = (unsigned long *)p;
56
57 while (iquotient--) {
58 __asm__ __volatile__(
59 ".byte 0xf2, " REX_PRE "0xf, 0x38, 0xf1, 0xf1;"
60 :"=S"(crc)
61 :"0"(crc), "c"(*ptmp)
62 );
63 ptmp++;
64 }
65
66 if (iremainder)
67 crc = crc32c_intel_le_hw_byte(crc, (unsigned char *)ptmp,
68 iremainder);
69
70 return crc;
71}
72
73/*
74 * Setting the seed allows arbitrary accumulators and flexible XOR policy
75 * If your algorithm starts with ~0, then XOR with ~0 before you set
76 * the seed.
77 */
78static int crc32c_intel_setkey(struct crypto_ahash *hash, const u8 *key,
79 unsigned int keylen)
80{
81 u32 *mctx = crypto_ahash_ctx(hash);
82
83 if (keylen != sizeof(u32)) {
84 crypto_ahash_set_flags(hash, CRYPTO_TFM_RES_BAD_KEY_LEN);
85 return -EINVAL;
86 }
87 *mctx = le32_to_cpup((__le32 *)key);
88 return 0;
89}
90
91static int crc32c_intel_init(struct ahash_request *req)
92{
93 u32 *mctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req));
94 u32 *crcp = ahash_request_ctx(req);
95
96 *crcp = *mctx;
97
98 return 0;
99}
100
101static int crc32c_intel_update(struct ahash_request *req)
102{
103 struct crypto_hash_walk walk;
104 u32 *crcp = ahash_request_ctx(req);
105 u32 crc = *crcp;
106 int nbytes;
107
108 for (nbytes = crypto_hash_walk_first(req, &walk); nbytes;
109 nbytes = crypto_hash_walk_done(&walk, 0))
110 crc = crc32c_intel_le_hw(crc, walk.data, nbytes);
111
112 *crcp = crc;
113 return 0;
114}
115
116static int crc32c_intel_final(struct ahash_request *req)
117{
118 u32 *crcp = ahash_request_ctx(req);
119
120 *(__le32 *)req->result = ~cpu_to_le32p(crcp);
121 return 0;
122}
123
124static int crc32c_intel_digest(struct ahash_request *req)
125{
126 struct crypto_hash_walk walk;
127 u32 *mctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req));
128 u32 crc = *mctx;
129 int nbytes;
130
131 for (nbytes = crypto_hash_walk_first(req, &walk); nbytes;
132 nbytes = crypto_hash_walk_done(&walk, 0))
133 crc = crc32c_intel_le_hw(crc, walk.data, nbytes);
134
135 *(__le32 *)req->result = ~cpu_to_le32(crc);
136 return 0;
137}
138
139static int crc32c_intel_cra_init(struct crypto_tfm *tfm)
140{
141 u32 *key = crypto_tfm_ctx(tfm);
142
143 *key = ~0;
144
145 tfm->crt_ahash.reqsize = sizeof(u32);
146
147 return 0;
148}
149
150static struct crypto_alg alg = {
151 .cra_name = "crc32c",
152 .cra_driver_name = "crc32c-intel",
153 .cra_priority = 200,
154 .cra_flags = CRYPTO_ALG_TYPE_AHASH,
155 .cra_blocksize = CHKSUM_BLOCK_SIZE,
156 .cra_alignmask = 3,
157 .cra_ctxsize = sizeof(u32),
158 .cra_module = THIS_MODULE,
159 .cra_list = LIST_HEAD_INIT(alg.cra_list),
160 .cra_init = crc32c_intel_cra_init,
161 .cra_type = &crypto_ahash_type,
162 .cra_u = {
163 .ahash = {
164 .digestsize = CHKSUM_DIGEST_SIZE,
165 .setkey = crc32c_intel_setkey,
166 .init = crc32c_intel_init,
167 .update = crc32c_intel_update,
168 .final = crc32c_intel_final,
169 .digest = crc32c_intel_digest,
170 }
171 }
172};
173
174
175static int __init crc32c_intel_mod_init(void)
176{
177 if (cpu_has_xmm4_2)
178 return crypto_register_alg(&alg);
179 else
180 return -ENODEV;
181}
182
183static void __exit crc32c_intel_mod_fini(void)
184{
185 crypto_unregister_alg(&alg);
186}
187
188module_init(crc32c_intel_mod_init);
189module_exit(crc32c_intel_mod_fini);
190
191MODULE_AUTHOR("Austin Zhang <austin.zhang@intel.com>, Kent Liu <kent.liu@intel.com>");
192MODULE_DESCRIPTION("CRC32c (Castagnoli) optimization using Intel Hardware.");
193MODULE_LICENSE("GPL");
194
195MODULE_ALIAS("crc32c");
196MODULE_ALIAS("crc32c-intel");
197
diff --git a/crypto/Kconfig b/crypto/Kconfig
index d83185915eee..39dbd8e4dde1 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -21,6 +21,14 @@ if CRYPTO
21 21
22comment "Crypto core or helper" 22comment "Crypto core or helper"
23 23
24config CRYPTO_FIPS
25 bool "FIPS 200 compliance"
26 help
27 This options enables the fips boot option which is
28 required if you want to system to operate in a FIPS 200
29 certification. You should say no unless you know what
30 this is.
31
24config CRYPTO_ALGAPI 32config CRYPTO_ALGAPI
25 tristate 33 tristate
26 help 34 help
@@ -33,14 +41,21 @@ config CRYPTO_AEAD
33config CRYPTO_BLKCIPHER 41config CRYPTO_BLKCIPHER
34 tristate 42 tristate
35 select CRYPTO_ALGAPI 43 select CRYPTO_ALGAPI
44 select CRYPTO_RNG
36 45
37config CRYPTO_HASH 46config CRYPTO_HASH
38 tristate 47 tristate
39 select CRYPTO_ALGAPI 48 select CRYPTO_ALGAPI
40 49
50config CRYPTO_RNG
51 tristate
52 select CRYPTO_ALGAPI
53
41config CRYPTO_MANAGER 54config CRYPTO_MANAGER
42 tristate "Cryptographic algorithm manager" 55 tristate "Cryptographic algorithm manager"
43 select CRYPTO_ALGAPI 56 select CRYPTO_AEAD
57 select CRYPTO_HASH
58 select CRYPTO_BLKCIPHER
44 help 59 help
45 Create default cryptographic template instantiations such as 60 Create default cryptographic template instantiations such as
46 cbc(aes). 61 cbc(aes).
@@ -85,9 +100,7 @@ config CRYPTO_AUTHENC
85config CRYPTO_TEST 100config CRYPTO_TEST
86 tristate "Testing module" 101 tristate "Testing module"
87 depends on m 102 depends on m
88 select CRYPTO_ALGAPI 103 select CRYPTO_MANAGER
89 select CRYPTO_AEAD
90 select CRYPTO_BLKCIPHER
91 help 104 help
92 Quick & dirty crypto test module. 105 Quick & dirty crypto test module.
93 106
@@ -113,6 +126,7 @@ config CRYPTO_SEQIV
113 tristate "Sequence Number IV Generator" 126 tristate "Sequence Number IV Generator"
114 select CRYPTO_AEAD 127 select CRYPTO_AEAD
115 select CRYPTO_BLKCIPHER 128 select CRYPTO_BLKCIPHER
129 select CRYPTO_RNG
116 help 130 help
117 This IV generator generates an IV based on a sequence number by 131 This IV generator generates an IV based on a sequence number by
118 xoring it with a salt. This algorithm is mainly useful for CTR 132 xoring it with a salt. This algorithm is mainly useful for CTR
@@ -219,7 +233,19 @@ config CRYPTO_CRC32C
219 Castagnoli, et al Cyclic Redundancy-Check Algorithm. Used 233 Castagnoli, et al Cyclic Redundancy-Check Algorithm. Used
220 by iSCSI for header and data digests and by others. 234 by iSCSI for header and data digests and by others.
221 See Castagnoli93. This implementation uses lib/libcrc32c. 235 See Castagnoli93. This implementation uses lib/libcrc32c.
222 Module will be crc32c. 236 Module will be crc32c.
237
238config CRYPTO_CRC32C_INTEL
239 tristate "CRC32c INTEL hardware acceleration"
240 depends on X86
241 select CRYPTO_HASH
242 help
243 In Intel processor with SSE4.2 supported, the processor will
244 support CRC32C implementation using hardware accelerated CRC32
245 instruction. This option will create 'crc32c-intel' module,
246 which will enable any routine to use the CRC32 instruction to
247 gain performance compared with software implementation.
248 Module will be crc32c-intel.
223 249
224config CRYPTO_MD4 250config CRYPTO_MD4
225 tristate "MD4 digest algorithm" 251 tristate "MD4 digest algorithm"
@@ -243,55 +269,58 @@ config CRYPTO_MICHAEL_MIC
243 of the algorithm. 269 of the algorithm.
244 270
245config CRYPTO_RMD128 271config CRYPTO_RMD128
246 tristate "RIPEMD-128 digest algorithm" 272 tristate "RIPEMD-128 digest algorithm"
247 select CRYPTO_ALGAPI 273 select CRYPTO_ALGAPI
248 help 274 help
249 RIPEMD-128 (ISO/IEC 10118-3:2004). 275 RIPEMD-128 (ISO/IEC 10118-3:2004).
250 276
251 RIPEMD-128 is a 128-bit cryptographic hash function. It should only 277 RIPEMD-128 is a 128-bit cryptographic hash function. It should only
252 to be used as a secure replacement for RIPEMD. For other use cases 278 to be used as a secure replacement for RIPEMD. For other use cases
253 RIPEMD-160 should be used. 279 RIPEMD-160 should be used.
254 280
255 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel. 281 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel.
256 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html> 282 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html>
257 283
258config CRYPTO_RMD160 284config CRYPTO_RMD160
259 tristate "RIPEMD-160 digest algorithm" 285 tristate "RIPEMD-160 digest algorithm"
260 select CRYPTO_ALGAPI 286 select CRYPTO_ALGAPI
261 help 287 help
262 RIPEMD-160 (ISO/IEC 10118-3:2004). 288 RIPEMD-160 (ISO/IEC 10118-3:2004).
263 289
264 RIPEMD-160 is a 160-bit cryptographic hash function. It is intended 290 RIPEMD-160 is a 160-bit cryptographic hash function. It is intended
265 to be used as a secure replacement for the 128-bit hash functions 291 to be used as a secure replacement for the 128-bit hash functions
266 MD4, MD5 and it's predecessor RIPEMD (not to be confused with RIPEMD-128). 292 MD4, MD5 and it's predecessor RIPEMD
293 (not to be confused with RIPEMD-128).
267 294
268 It's speed is comparable to SHA1 and there are no known attacks against 295 It's speed is comparable to SHA1 and there are no known attacks
269 RIPEMD-160. 296 against RIPEMD-160.
270 297
271 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel. 298 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel.
272 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html> 299 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html>
273 300
274config CRYPTO_RMD256 301config CRYPTO_RMD256
275 tristate "RIPEMD-256 digest algorithm" 302 tristate "RIPEMD-256 digest algorithm"
276 select CRYPTO_ALGAPI 303 select CRYPTO_ALGAPI
277 help 304 help
278 RIPEMD-256 is an optional extension of RIPEMD-128 with a 256 bit hash. 305 RIPEMD-256 is an optional extension of RIPEMD-128 with a
279 It is intended for applications that require longer hash-results, without 306 256 bit hash. It is intended for applications that require
280 needing a larger security level (than RIPEMD-128). 307 longer hash-results, without needing a larger security level
308 (than RIPEMD-128).
281 309
282 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel. 310 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel.
283 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html> 311 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html>
284 312
285config CRYPTO_RMD320 313config CRYPTO_RMD320
286 tristate "RIPEMD-320 digest algorithm" 314 tristate "RIPEMD-320 digest algorithm"
287 select CRYPTO_ALGAPI 315 select CRYPTO_ALGAPI
288 help 316 help
289 RIPEMD-320 is an optional extension of RIPEMD-160 with a 320 bit hash. 317 RIPEMD-320 is an optional extension of RIPEMD-160 with a
290 It is intended for applications that require longer hash-results, without 318 320 bit hash. It is intended for applications that require
291 needing a larger security level (than RIPEMD-160). 319 longer hash-results, without needing a larger security level
320 (than RIPEMD-160).
292 321
293 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel. 322 Developed by Hans Dobbertin, Antoon Bosselaers and Bart Preneel.
294 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html> 323 See <http://home.esat.kuleuven.be/~bosselae/ripemd160.html>
295 324
296config CRYPTO_SHA1 325config CRYPTO_SHA1
297 tristate "SHA1 digest algorithm" 326 tristate "SHA1 digest algorithm"
@@ -308,8 +337,8 @@ config CRYPTO_SHA256
308 This version of SHA implements a 256 bit hash with 128 bits of 337 This version of SHA implements a 256 bit hash with 128 bits of
309 security against collision attacks. 338 security against collision attacks.
310 339
311 This code also includes SHA-224, a 224 bit hash with 112 bits 340 This code also includes SHA-224, a 224 bit hash with 112 bits
312 of security against collision attacks. 341 of security against collision attacks.
313 342
314config CRYPTO_SHA512 343config CRYPTO_SHA512
315 tristate "SHA384 and SHA512 digest algorithms" 344 tristate "SHA384 and SHA512 digest algorithms"
@@ -666,6 +695,18 @@ config CRYPTO_LZO
666 help 695 help
667 This is the LZO algorithm. 696 This is the LZO algorithm.
668 697
698comment "Random Number Generation"
699
700config CRYPTO_ANSI_CPRNG
701 tristate "Pseudo Random Number Generation for Cryptographic modules"
702 select CRYPTO_AES
703 select CRYPTO_RNG
704 select CRYPTO_FIPS
705 help
706 This option enables the generic pseudo random number generator
707 for cryptographic modules. Uses the Algorithm specified in
708 ANSI X9.31 A.2.4
709
669source "drivers/crypto/Kconfig" 710source "drivers/crypto/Kconfig"
670 711
671endif # if CRYPTO 712endif # if CRYPTO
diff --git a/crypto/Makefile b/crypto/Makefile
index d4f3ed857df0..5862b807334e 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -5,6 +5,8 @@
5obj-$(CONFIG_CRYPTO) += crypto.o 5obj-$(CONFIG_CRYPTO) += crypto.o
6crypto-objs := api.o cipher.o digest.o compress.o 6crypto-objs := api.o cipher.o digest.o compress.o
7 7
8obj-$(CONFIG_CRYPTO_FIPS) += fips.o
9
8crypto_algapi-$(CONFIG_PROC_FS) += proc.o 10crypto_algapi-$(CONFIG_PROC_FS) += proc.o
9crypto_algapi-objs := algapi.o scatterwalk.o $(crypto_algapi-y) 11crypto_algapi-objs := algapi.o scatterwalk.o $(crypto_algapi-y)
10obj-$(CONFIG_CRYPTO_ALGAPI) += crypto_algapi.o 12obj-$(CONFIG_CRYPTO_ALGAPI) += crypto_algapi.o
@@ -13,15 +15,17 @@ obj-$(CONFIG_CRYPTO_AEAD) += aead.o
13 15
14crypto_blkcipher-objs := ablkcipher.o 16crypto_blkcipher-objs := ablkcipher.o
15crypto_blkcipher-objs += blkcipher.o 17crypto_blkcipher-objs += blkcipher.o
16crypto_blkcipher-objs += chainiv.o
17crypto_blkcipher-objs += eseqiv.o
18obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o 18obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o
19obj-$(CONFIG_CRYPTO_BLKCIPHER) += chainiv.o
20obj-$(CONFIG_CRYPTO_BLKCIPHER) += eseqiv.o
19obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o 21obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o
20 22
21crypto_hash-objs := hash.o 23crypto_hash-objs := hash.o
22crypto_hash-objs += ahash.o 24crypto_hash-objs += ahash.o
23obj-$(CONFIG_CRYPTO_HASH) += crypto_hash.o 25obj-$(CONFIG_CRYPTO_HASH) += crypto_hash.o
24 26
27cryptomgr-objs := algboss.o testmgr.o
28
25obj-$(CONFIG_CRYPTO_MANAGER) += cryptomgr.o 29obj-$(CONFIG_CRYPTO_MANAGER) += cryptomgr.o
26obj-$(CONFIG_CRYPTO_HMAC) += hmac.o 30obj-$(CONFIG_CRYPTO_HMAC) += hmac.o
27obj-$(CONFIG_CRYPTO_XCBC) += xcbc.o 31obj-$(CONFIG_CRYPTO_XCBC) += xcbc.o
@@ -69,7 +73,9 @@ obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o
69obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o 73obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o
70obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o 74obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o
71obj-$(CONFIG_CRYPTO_LZO) += lzo.o 75obj-$(CONFIG_CRYPTO_LZO) += lzo.o
72 76obj-$(CONFIG_CRYPTO_RNG) += rng.o
77obj-$(CONFIG_CRYPTO_RNG) += krng.o
78obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
73obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o 79obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
74 80
75# 81#
diff --git a/crypto/algapi.c b/crypto/algapi.c
index e65cb50cf4af..7c41e7405c41 100644
--- a/crypto/algapi.c
+++ b/crypto/algapi.c
@@ -21,15 +21,15 @@
21 21
22#include "internal.h" 22#include "internal.h"
23 23
24static void crypto_remove_final(struct list_head *list);
25
24static LIST_HEAD(crypto_template_list); 26static LIST_HEAD(crypto_template_list);
25 27
26void crypto_larval_error(const char *name, u32 type, u32 mask) 28void crypto_larval_error(const char *name, u32 type, u32 mask)
27{ 29{
28 struct crypto_alg *alg; 30 struct crypto_alg *alg;
29 31
30 down_read(&crypto_alg_sem); 32 alg = crypto_alg_lookup(name, type, mask);
31 alg = __crypto_alg_lookup(name, type, mask);
32 up_read(&crypto_alg_sem);
33 33
34 if (alg) { 34 if (alg) {
35 if (crypto_is_larval(alg)) { 35 if (crypto_is_larval(alg)) {
@@ -128,23 +128,97 @@ static void crypto_remove_spawns(struct list_head *spawns,
128 } 128 }
129} 129}
130 130
131static int __crypto_register_alg(struct crypto_alg *alg, 131static struct crypto_larval *__crypto_register_alg(struct crypto_alg *alg)
132 struct list_head *list)
133{ 132{
134 struct crypto_alg *q; 133 struct crypto_alg *q;
134 struct crypto_larval *larval;
135 int ret = -EAGAIN; 135 int ret = -EAGAIN;
136 136
137 if (crypto_is_dead(alg)) 137 if (crypto_is_dead(alg))
138 goto out; 138 goto err;
139 139
140 INIT_LIST_HEAD(&alg->cra_users); 140 INIT_LIST_HEAD(&alg->cra_users);
141 141
142 /* No cheating! */
143 alg->cra_flags &= ~CRYPTO_ALG_TESTED;
144
142 ret = -EEXIST; 145 ret = -EEXIST;
143 146
144 atomic_set(&alg->cra_refcnt, 1); 147 atomic_set(&alg->cra_refcnt, 1);
145 list_for_each_entry(q, &crypto_alg_list, cra_list) { 148 list_for_each_entry(q, &crypto_alg_list, cra_list) {
146 if (q == alg) 149 if (q == alg)
147 goto out; 150 goto err;
151
152 if (crypto_is_larval(q)) {
153 if (!strcmp(alg->cra_driver_name, q->cra_driver_name))
154 goto err;
155 continue;
156 }
157
158 if (!strcmp(q->cra_driver_name, alg->cra_name) ||
159 !strcmp(q->cra_name, alg->cra_driver_name))
160 goto err;
161 }
162
163 larval = crypto_larval_alloc(alg->cra_name,
164 alg->cra_flags | CRYPTO_ALG_TESTED, 0);
165 if (IS_ERR(larval))
166 goto out;
167
168 ret = -ENOENT;
169 larval->adult = crypto_mod_get(alg);
170 if (!larval->adult)
171 goto free_larval;
172
173 atomic_set(&larval->alg.cra_refcnt, 1);
174 memcpy(larval->alg.cra_driver_name, alg->cra_driver_name,
175 CRYPTO_MAX_ALG_NAME);
176 larval->alg.cra_priority = alg->cra_priority;
177
178 list_add(&alg->cra_list, &crypto_alg_list);
179 list_add(&larval->alg.cra_list, &crypto_alg_list);
180
181out:
182 return larval;
183
184free_larval:
185 kfree(larval);
186err:
187 larval = ERR_PTR(ret);
188 goto out;
189}
190
191void crypto_alg_tested(const char *name, int err)
192{
193 struct crypto_larval *test;
194 struct crypto_alg *alg;
195 struct crypto_alg *q;
196 LIST_HEAD(list);
197
198 down_write(&crypto_alg_sem);
199 list_for_each_entry(q, &crypto_alg_list, cra_list) {
200 if (!crypto_is_larval(q))
201 continue;
202
203 test = (struct crypto_larval *)q;
204
205 if (!strcmp(q->cra_driver_name, name))
206 goto found;
207 }
208
209 printk(KERN_ERR "alg: Unexpected test result for %s: %d\n", name, err);
210 goto unlock;
211
212found:
213 alg = test->adult;
214 if (err || list_empty(&alg->cra_list))
215 goto complete;
216
217 alg->cra_flags |= CRYPTO_ALG_TESTED;
218
219 list_for_each_entry(q, &crypto_alg_list, cra_list) {
220 if (q == alg)
221 continue;
148 222
149 if (crypto_is_moribund(q)) 223 if (crypto_is_moribund(q))
150 continue; 224 continue;
@@ -180,17 +254,18 @@ static int __crypto_register_alg(struct crypto_alg *alg,
180 q->cra_priority > alg->cra_priority) 254 q->cra_priority > alg->cra_priority)
181 continue; 255 continue;
182 256
183 crypto_remove_spawns(&q->cra_users, list, alg->cra_flags); 257 crypto_remove_spawns(&q->cra_users, &list, alg->cra_flags);
184 } 258 }
185
186 list_add(&alg->cra_list, &crypto_alg_list);
187 259
188 crypto_notify(CRYPTO_MSG_ALG_REGISTER, alg); 260complete:
189 ret = 0; 261 complete_all(&test->completion);
190 262
191out: 263unlock:
192 return ret; 264 up_write(&crypto_alg_sem);
265
266 crypto_remove_final(&list);
193} 267}
268EXPORT_SYMBOL_GPL(crypto_alg_tested);
194 269
195static void crypto_remove_final(struct list_head *list) 270static void crypto_remove_final(struct list_head *list)
196{ 271{
@@ -203,9 +278,27 @@ static void crypto_remove_final(struct list_head *list)
203 } 278 }
204} 279}
205 280
281static void crypto_wait_for_test(struct crypto_larval *larval)
282{
283 int err;
284
285 err = crypto_probing_notify(CRYPTO_MSG_ALG_REGISTER, larval->adult);
286 if (err != NOTIFY_STOP) {
287 if (WARN_ON(err != NOTIFY_DONE))
288 goto out;
289 crypto_alg_tested(larval->alg.cra_driver_name, 0);
290 }
291
292 err = wait_for_completion_interruptible(&larval->completion);
293 WARN_ON(err);
294
295out:
296 crypto_larval_kill(&larval->alg);
297}
298
206int crypto_register_alg(struct crypto_alg *alg) 299int crypto_register_alg(struct crypto_alg *alg)
207{ 300{
208 LIST_HEAD(list); 301 struct crypto_larval *larval;
209 int err; 302 int err;
210 303
211 err = crypto_check_alg(alg); 304 err = crypto_check_alg(alg);
@@ -213,11 +306,14 @@ int crypto_register_alg(struct crypto_alg *alg)
213 return err; 306 return err;
214 307
215 down_write(&crypto_alg_sem); 308 down_write(&crypto_alg_sem);
216 err = __crypto_register_alg(alg, &list); 309 larval = __crypto_register_alg(alg);
217 up_write(&crypto_alg_sem); 310 up_write(&crypto_alg_sem);
218 311
219 crypto_remove_final(&list); 312 if (IS_ERR(larval))
220 return err; 313 return PTR_ERR(larval);
314
315 crypto_wait_for_test(larval);
316 return 0;
221} 317}
222EXPORT_SYMBOL_GPL(crypto_register_alg); 318EXPORT_SYMBOL_GPL(crypto_register_alg);
223 319
@@ -335,8 +431,8 @@ EXPORT_SYMBOL_GPL(crypto_lookup_template);
335int crypto_register_instance(struct crypto_template *tmpl, 431int crypto_register_instance(struct crypto_template *tmpl,
336 struct crypto_instance *inst) 432 struct crypto_instance *inst)
337{ 433{
338 LIST_HEAD(list); 434 struct crypto_larval *larval;
339 int err = -EINVAL; 435 int err;
340 436
341 err = crypto_check_alg(&inst->alg); 437 err = crypto_check_alg(&inst->alg);
342 if (err) 438 if (err)
@@ -346,8 +442,8 @@ int crypto_register_instance(struct crypto_template *tmpl,
346 442
347 down_write(&crypto_alg_sem); 443 down_write(&crypto_alg_sem);
348 444
349 err = __crypto_register_alg(&inst->alg, &list); 445 larval = __crypto_register_alg(&inst->alg);
350 if (err) 446 if (IS_ERR(larval))
351 goto unlock; 447 goto unlock;
352 448
353 hlist_add_head(&inst->list, &tmpl->instances); 449 hlist_add_head(&inst->list, &tmpl->instances);
@@ -356,7 +452,12 @@ int crypto_register_instance(struct crypto_template *tmpl,
356unlock: 452unlock:
357 up_write(&crypto_alg_sem); 453 up_write(&crypto_alg_sem);
358 454
359 crypto_remove_final(&list); 455 err = PTR_ERR(larval);
456 if (IS_ERR(larval))
457 goto err;
458
459 crypto_wait_for_test(larval);
460 err = 0;
360 461
361err: 462err:
362 return err; 463 return err;
diff --git a/crypto/cryptomgr.c b/crypto/algboss.c
index e5e3cf848d42..4601e4267c88 100644
--- a/crypto/cryptomgr.c
+++ b/crypto/algboss.c
@@ -45,6 +45,15 @@ struct cryptomgr_param {
45 45
46 char larval[CRYPTO_MAX_ALG_NAME]; 46 char larval[CRYPTO_MAX_ALG_NAME];
47 char template[CRYPTO_MAX_ALG_NAME]; 47 char template[CRYPTO_MAX_ALG_NAME];
48
49 u32 otype;
50 u32 omask;
51};
52
53struct crypto_test_param {
54 char driver[CRYPTO_MAX_ALG_NAME];
55 char alg[CRYPTO_MAX_ALG_NAME];
56 u32 type;
48}; 57};
49 58
50static int cryptomgr_probe(void *data) 59static int cryptomgr_probe(void *data)
@@ -76,8 +85,7 @@ out:
76 module_put_and_exit(0); 85 module_put_and_exit(0);
77 86
78err: 87err:
79 crypto_larval_error(param->larval, param->type.data.type, 88 crypto_larval_error(param->larval, param->otype, param->omask);
80 param->type.data.mask);
81 goto out; 89 goto out;
82} 90}
83 91
@@ -169,13 +177,65 @@ static int cryptomgr_schedule_probe(struct crypto_larval *larval)
169 177
170 param->type.attr.rta_len = sizeof(param->type); 178 param->type.attr.rta_len = sizeof(param->type);
171 param->type.attr.rta_type = CRYPTOA_TYPE; 179 param->type.attr.rta_type = CRYPTOA_TYPE;
172 param->type.data.type = larval->alg.cra_flags; 180 param->type.data.type = larval->alg.cra_flags & ~CRYPTO_ALG_TESTED;
173 param->type.data.mask = larval->mask; 181 param->type.data.mask = larval->mask & ~CRYPTO_ALG_TESTED;
174 param->tb[0] = &param->type.attr; 182 param->tb[0] = &param->type.attr;
175 183
184 param->otype = larval->alg.cra_flags;
185 param->omask = larval->mask;
186
176 memcpy(param->larval, larval->alg.cra_name, CRYPTO_MAX_ALG_NAME); 187 memcpy(param->larval, larval->alg.cra_name, CRYPTO_MAX_ALG_NAME);
177 188
178 thread = kthread_run(cryptomgr_probe, param, "cryptomgr"); 189 thread = kthread_run(cryptomgr_probe, param, "cryptomgr_probe");
190 if (IS_ERR(thread))
191 goto err_free_param;
192
193 return NOTIFY_STOP;
194
195err_free_param:
196 kfree(param);
197err_put_module:
198 module_put(THIS_MODULE);
199err:
200 return NOTIFY_OK;
201}
202
203static int cryptomgr_test(void *data)
204{
205 struct crypto_test_param *param = data;
206 u32 type = param->type;
207 int err = 0;
208
209 if (!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) &
210 CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV))
211 goto skiptest;
212
213 err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED);
214
215skiptest:
216 crypto_alg_tested(param->driver, err);
217
218 kfree(param);
219 module_put_and_exit(0);
220}
221
222static int cryptomgr_schedule_test(struct crypto_alg *alg)
223{
224 struct task_struct *thread;
225 struct crypto_test_param *param;
226
227 if (!try_module_get(THIS_MODULE))
228 goto err;
229
230 param = kzalloc(sizeof(*param), GFP_KERNEL);
231 if (!param)
232 goto err_put_module;
233
234 memcpy(param->driver, alg->cra_driver_name, sizeof(param->driver));
235 memcpy(param->alg, alg->cra_name, sizeof(param->alg));
236 param->type = alg->cra_flags;
237
238 thread = kthread_run(cryptomgr_test, param, "cryptomgr_test");
179 if (IS_ERR(thread)) 239 if (IS_ERR(thread))
180 goto err_free_param; 240 goto err_free_param;
181 241
@@ -195,6 +255,8 @@ static int cryptomgr_notify(struct notifier_block *this, unsigned long msg,
195 switch (msg) { 255 switch (msg) {
196 case CRYPTO_MSG_ALG_REQUEST: 256 case CRYPTO_MSG_ALG_REQUEST:
197 return cryptomgr_schedule_probe(data); 257 return cryptomgr_schedule_probe(data);
258 case CRYPTO_MSG_ALG_REGISTER:
259 return cryptomgr_schedule_test(data);
198 } 260 }
199 261
200 return NOTIFY_DONE; 262 return NOTIFY_DONE;
@@ -206,16 +268,32 @@ static struct notifier_block cryptomgr_notifier = {
206 268
207static int __init cryptomgr_init(void) 269static int __init cryptomgr_init(void)
208{ 270{
209 return crypto_register_notifier(&cryptomgr_notifier); 271 int err;
272
273 err = testmgr_init();
274 if (err)
275 return err;
276
277 err = crypto_register_notifier(&cryptomgr_notifier);
278 if (err)
279 goto free_testmgr;
280
281 return 0;
282
283free_testmgr:
284 testmgr_exit();
285 return err;
210} 286}
211 287
212static void __exit cryptomgr_exit(void) 288static void __exit cryptomgr_exit(void)
213{ 289{
214 int err = crypto_unregister_notifier(&cryptomgr_notifier); 290 int err = crypto_unregister_notifier(&cryptomgr_notifier);
215 BUG_ON(err); 291 BUG_ON(err);
292
293 testmgr_exit();
216} 294}
217 295
218module_init(cryptomgr_init); 296subsys_initcall(cryptomgr_init);
219module_exit(cryptomgr_exit); 297module_exit(cryptomgr_exit);
220 298
221MODULE_LICENSE("GPL"); 299MODULE_LICENSE("GPL");
diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
new file mode 100644
index 000000000000..72db0fd763cc
--- /dev/null
+++ b/crypto/ansi_cprng.c
@@ -0,0 +1,417 @@
1/*
2 * PRNG: Pseudo Random Number Generator
3 * Based on NIST Recommended PRNG From ANSI X9.31 Appendix A.2.4 using
4 * AES 128 cipher
5 *
6 * (C) Neil Horman <nhorman@tuxdriver.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * any later version.
12 *
13 *
14 */
15
16#include <crypto/internal/rng.h>
17#include <linux/err.h>
18#include <linux/init.h>
19#include <linux/module.h>
20#include <linux/moduleparam.h>
21#include <linux/string.h>
22
23#include "internal.h"
24
25#define DEFAULT_PRNG_KEY "0123456789abcdef"
26#define DEFAULT_PRNG_KSZ 16
27#define DEFAULT_BLK_SZ 16
28#define DEFAULT_V_SEED "zaybxcwdveuftgsh"
29
30/*
31 * Flags for the prng_context flags field
32 */
33
34#define PRNG_FIXED_SIZE 0x1
35#define PRNG_NEED_RESET 0x2
36
37/*
38 * Note: DT is our counter value
39 * I is our intermediate value
40 * V is our seed vector
41 * See http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
42 * for implementation details
43 */
44
45
46struct prng_context {
47 spinlock_t prng_lock;
48 unsigned char rand_data[DEFAULT_BLK_SZ];
49 unsigned char last_rand_data[DEFAULT_BLK_SZ];
50 unsigned char DT[DEFAULT_BLK_SZ];
51 unsigned char I[DEFAULT_BLK_SZ];
52 unsigned char V[DEFAULT_BLK_SZ];
53 u32 rand_data_valid;
54 struct crypto_cipher *tfm;
55 u32 flags;
56};
57
58static int dbg;
59
60static void hexdump(char *note, unsigned char *buf, unsigned int len)
61{
62 if (dbg) {
63 printk(KERN_CRIT "%s", note);
64 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET,
65 16, 1,
66 buf, len, false);
67 }
68}
69
70#define dbgprint(format, args...) do {\
71if (dbg)\
72 printk(format, ##args);\
73} while (0)
74
75static void xor_vectors(unsigned char *in1, unsigned char *in2,
76 unsigned char *out, unsigned int size)
77{
78 int i;
79
80 for (i = 0; i < size; i++)
81 out[i] = in1[i] ^ in2[i];
82
83}
84/*
85 * Returns DEFAULT_BLK_SZ bytes of random data per call
86 * returns 0 if generation succeded, <0 if something went wrong
87 */
88static int _get_more_prng_bytes(struct prng_context *ctx)
89{
90 int i;
91 unsigned char tmp[DEFAULT_BLK_SZ];
92 unsigned char *output = NULL;
93
94
95 dbgprint(KERN_CRIT "Calling _get_more_prng_bytes for context %p\n",
96 ctx);
97
98 hexdump("Input DT: ", ctx->DT, DEFAULT_BLK_SZ);
99 hexdump("Input I: ", ctx->I, DEFAULT_BLK_SZ);
100 hexdump("Input V: ", ctx->V, DEFAULT_BLK_SZ);
101
102 /*
103 * This algorithm is a 3 stage state machine
104 */
105 for (i = 0; i < 3; i++) {
106
107 switch (i) {
108 case 0:
109 /*
110 * Start by encrypting the counter value
111 * This gives us an intermediate value I
112 */
113 memcpy(tmp, ctx->DT, DEFAULT_BLK_SZ);
114 output = ctx->I;
115 hexdump("tmp stage 0: ", tmp, DEFAULT_BLK_SZ);
116 break;
117 case 1:
118
119 /*
120 * Next xor I with our secret vector V
121 * encrypt that result to obtain our
122 * pseudo random data which we output
123 */
124 xor_vectors(ctx->I, ctx->V, tmp, DEFAULT_BLK_SZ);
125 hexdump("tmp stage 1: ", tmp, DEFAULT_BLK_SZ);
126 output = ctx->rand_data;
127 break;
128 case 2:
129 /*
130 * First check that we didn't produce the same
131 * random data that we did last time around through this
132 */
133 if (!memcmp(ctx->rand_data, ctx->last_rand_data,
134 DEFAULT_BLK_SZ)) {
135 printk(KERN_ERR
136 "ctx %p Failed repetition check!\n",
137 ctx);
138 ctx->flags |= PRNG_NEED_RESET;
139 return -EINVAL;
140 }
141 memcpy(ctx->last_rand_data, ctx->rand_data,
142 DEFAULT_BLK_SZ);
143
144 /*
145 * Lastly xor the random data with I
146 * and encrypt that to obtain a new secret vector V
147 */
148 xor_vectors(ctx->rand_data, ctx->I, tmp,
149 DEFAULT_BLK_SZ);
150 output = ctx->V;
151 hexdump("tmp stage 2: ", tmp, DEFAULT_BLK_SZ);
152 break;
153 }
154
155
156 /* do the encryption */
157 crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
158
159 }
160
161 /*
162 * Now update our DT value
163 */
164 for (i = 0; i < DEFAULT_BLK_SZ; i++) {
165 ctx->DT[i] += 1;
166 if (ctx->DT[i] != 0)
167 break;
168 }
169
170 dbgprint("Returning new block for context %p\n", ctx);
171 ctx->rand_data_valid = 0;
172
173 hexdump("Output DT: ", ctx->DT, DEFAULT_BLK_SZ);
174 hexdump("Output I: ", ctx->I, DEFAULT_BLK_SZ);
175 hexdump("Output V: ", ctx->V, DEFAULT_BLK_SZ);
176 hexdump("New Random Data: ", ctx->rand_data, DEFAULT_BLK_SZ);
177
178 return 0;
179}
180
181/* Our exported functions */
182static int get_prng_bytes(char *buf, size_t nbytes, struct prng_context *ctx)
183{
184 unsigned long flags;
185 unsigned char *ptr = buf;
186 unsigned int byte_count = (unsigned int)nbytes;
187 int err;
188
189
190 if (nbytes < 0)
191 return -EINVAL;
192
193 spin_lock_irqsave(&ctx->prng_lock, flags);
194
195 err = -EINVAL;
196 if (ctx->flags & PRNG_NEED_RESET)
197 goto done;
198
199 /*
200 * If the FIXED_SIZE flag is on, only return whole blocks of
201 * pseudo random data
202 */
203 err = -EINVAL;
204 if (ctx->flags & PRNG_FIXED_SIZE) {
205 if (nbytes < DEFAULT_BLK_SZ)
206 goto done;
207 byte_count = DEFAULT_BLK_SZ;
208 }
209
210 err = byte_count;
211
212 dbgprint(KERN_CRIT "getting %d random bytes for context %p\n",
213 byte_count, ctx);
214
215
216remainder:
217 if (ctx->rand_data_valid == DEFAULT_BLK_SZ) {
218 if (_get_more_prng_bytes(ctx) < 0) {
219 memset(buf, 0, nbytes);
220 err = -EINVAL;
221 goto done;
222 }
223 }
224
225 /*
226 * Copy up to the next whole block size
227 */
228 if (byte_count < DEFAULT_BLK_SZ) {
229 for (; ctx->rand_data_valid < DEFAULT_BLK_SZ;
230 ctx->rand_data_valid++) {
231 *ptr = ctx->rand_data[ctx->rand_data_valid];
232 ptr++;
233 byte_count--;
234 if (byte_count == 0)
235 goto done;
236 }
237 }
238
239 /*
240 * Now copy whole blocks
241 */
242 for (; byte_count >= DEFAULT_BLK_SZ; byte_count -= DEFAULT_BLK_SZ) {
243 if (_get_more_prng_bytes(ctx) < 0) {
244 memset(buf, 0, nbytes);
245 err = -EINVAL;
246 goto done;
247 }
248 memcpy(ptr, ctx->rand_data, DEFAULT_BLK_SZ);
249 ctx->rand_data_valid += DEFAULT_BLK_SZ;
250 ptr += DEFAULT_BLK_SZ;
251 }
252
253 /*
254 * Now copy any extra partial data
255 */
256 if (byte_count)
257 goto remainder;
258
259done:
260 spin_unlock_irqrestore(&ctx->prng_lock, flags);
261 dbgprint(KERN_CRIT "returning %d from get_prng_bytes in context %p\n",
262 err, ctx);
263 return err;
264}
265
266static void free_prng_context(struct prng_context *ctx)
267{
268 crypto_free_cipher(ctx->tfm);
269}
270
271static int reset_prng_context(struct prng_context *ctx,
272 unsigned char *key, size_t klen,
273 unsigned char *V, unsigned char *DT)
274{
275 int ret;
276 int rc = -EINVAL;
277 unsigned char *prng_key;
278
279 spin_lock(&ctx->prng_lock);
280 ctx->flags |= PRNG_NEED_RESET;
281
282 prng_key = (key != NULL) ? key : (unsigned char *)DEFAULT_PRNG_KEY;
283
284 if (!key)
285 klen = DEFAULT_PRNG_KSZ;
286
287 if (V)
288 memcpy(ctx->V, V, DEFAULT_BLK_SZ);
289 else
290 memcpy(ctx->V, DEFAULT_V_SEED, DEFAULT_BLK_SZ);
291
292 if (DT)
293 memcpy(ctx->DT, DT, DEFAULT_BLK_SZ);
294 else
295 memset(ctx->DT, 0, DEFAULT_BLK_SZ);
296
297 memset(ctx->rand_data, 0, DEFAULT_BLK_SZ);
298 memset(ctx->last_rand_data, 0, DEFAULT_BLK_SZ);
299
300 if (ctx->tfm)
301 crypto_free_cipher(ctx->tfm);
302
303 ctx->tfm = crypto_alloc_cipher("aes", 0, 0);
304 if (IS_ERR(ctx->tfm)) {
305 dbgprint(KERN_CRIT "Failed to alloc tfm for context %p\n",
306 ctx);
307 ctx->tfm = NULL;
308 goto out;
309 }
310
311 ctx->rand_data_valid = DEFAULT_BLK_SZ;
312
313 ret = crypto_cipher_setkey(ctx->tfm, prng_key, klen);
314 if (ret) {
315 dbgprint(KERN_CRIT "PRNG: setkey() failed flags=%x\n",
316 crypto_cipher_get_flags(ctx->tfm));
317 crypto_free_cipher(ctx->tfm);
318 goto out;
319 }
320
321 rc = 0;
322 ctx->flags &= ~PRNG_NEED_RESET;
323out:
324 spin_unlock(&ctx->prng_lock);
325
326 return rc;
327
328}
329
330static int cprng_init(struct crypto_tfm *tfm)
331{
332 struct prng_context *ctx = crypto_tfm_ctx(tfm);
333
334 spin_lock_init(&ctx->prng_lock);
335
336 return reset_prng_context(ctx, NULL, DEFAULT_PRNG_KSZ, NULL, NULL);
337}
338
339static void cprng_exit(struct crypto_tfm *tfm)
340{
341 free_prng_context(crypto_tfm_ctx(tfm));
342}
343
344static int cprng_get_random(struct crypto_rng *tfm, u8 *rdata,
345 unsigned int dlen)
346{
347 struct prng_context *prng = crypto_rng_ctx(tfm);
348
349 return get_prng_bytes(rdata, dlen, prng);
350}
351
352static int cprng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
353{
354 struct prng_context *prng = crypto_rng_ctx(tfm);
355 u8 *key = seed + DEFAULT_PRNG_KSZ;
356
357 if (slen < DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ)
358 return -EINVAL;
359
360 reset_prng_context(prng, key, DEFAULT_PRNG_KSZ, seed, NULL);
361
362 if (prng->flags & PRNG_NEED_RESET)
363 return -EINVAL;
364 return 0;
365}
366
367static struct crypto_alg rng_alg = {
368 .cra_name = "stdrng",
369 .cra_driver_name = "ansi_cprng",
370 .cra_priority = 100,
371 .cra_flags = CRYPTO_ALG_TYPE_RNG,
372 .cra_ctxsize = sizeof(struct prng_context),
373 .cra_type = &crypto_rng_type,
374 .cra_module = THIS_MODULE,
375 .cra_list = LIST_HEAD_INIT(rng_alg.cra_list),
376 .cra_init = cprng_init,
377 .cra_exit = cprng_exit,
378 .cra_u = {
379 .rng = {
380 .rng_make_random = cprng_get_random,
381 .rng_reset = cprng_reset,
382 .seedsize = DEFAULT_PRNG_KSZ + DEFAULT_BLK_SZ,
383 }
384 }
385};
386
387
388/* Module initalization */
389static int __init prng_mod_init(void)
390{
391 int ret = 0;
392
393 if (fips_enabled)
394 rng_alg.cra_priority += 200;
395
396 ret = crypto_register_alg(&rng_alg);
397
398 if (ret)
399 goto out;
400out:
401 return 0;
402}
403
404static void __exit prng_mod_fini(void)
405{
406 crypto_unregister_alg(&rng_alg);
407 return;
408}
409
410MODULE_LICENSE("GPL");
411MODULE_DESCRIPTION("Software Pseudo Random Number Generator");
412MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>");
413module_param(dbg, int, 0);
414MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)");
415module_init(prng_mod_init);
416module_exit(prng_mod_fini);
417MODULE_ALIAS("stdrng");
diff --git a/crypto/api.c b/crypto/api.c
index d06e33270abe..0444d242e985 100644
--- a/crypto/api.c
+++ b/crypto/api.c
@@ -55,7 +55,13 @@ void crypto_mod_put(struct crypto_alg *alg)
55} 55}
56EXPORT_SYMBOL_GPL(crypto_mod_put); 56EXPORT_SYMBOL_GPL(crypto_mod_put);
57 57
58struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask) 58static inline int crypto_is_test_larval(struct crypto_larval *larval)
59{
60 return larval->alg.cra_driver_name[0];
61}
62
63static struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type,
64 u32 mask)
59{ 65{
60 struct crypto_alg *q, *alg = NULL; 66 struct crypto_alg *q, *alg = NULL;
61 int best = -2; 67 int best = -2;
@@ -70,6 +76,7 @@ struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask)
70 continue; 76 continue;
71 77
72 if (crypto_is_larval(q) && 78 if (crypto_is_larval(q) &&
79 !crypto_is_test_larval((struct crypto_larval *)q) &&
73 ((struct crypto_larval *)q)->mask != mask) 80 ((struct crypto_larval *)q)->mask != mask)
74 continue; 81 continue;
75 82
@@ -92,7 +99,6 @@ struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask)
92 99
93 return alg; 100 return alg;
94} 101}
95EXPORT_SYMBOL_GPL(__crypto_alg_lookup);
96 102
97static void crypto_larval_destroy(struct crypto_alg *alg) 103static void crypto_larval_destroy(struct crypto_alg *alg)
98{ 104{
@@ -104,10 +110,8 @@ static void crypto_larval_destroy(struct crypto_alg *alg)
104 kfree(larval); 110 kfree(larval);
105} 111}
106 112
107static struct crypto_alg *crypto_larval_alloc(const char *name, u32 type, 113struct crypto_larval *crypto_larval_alloc(const char *name, u32 type, u32 mask)
108 u32 mask)
109{ 114{
110 struct crypto_alg *alg;
111 struct crypto_larval *larval; 115 struct crypto_larval *larval;
112 116
113 larval = kzalloc(sizeof(*larval), GFP_KERNEL); 117 larval = kzalloc(sizeof(*larval), GFP_KERNEL);
@@ -119,10 +123,25 @@ static struct crypto_alg *crypto_larval_alloc(const char *name, u32 type,
119 larval->alg.cra_priority = -1; 123 larval->alg.cra_priority = -1;
120 larval->alg.cra_destroy = crypto_larval_destroy; 124 larval->alg.cra_destroy = crypto_larval_destroy;
121 125
122 atomic_set(&larval->alg.cra_refcnt, 2);
123 strlcpy(larval->alg.cra_name, name, CRYPTO_MAX_ALG_NAME); 126 strlcpy(larval->alg.cra_name, name, CRYPTO_MAX_ALG_NAME);
124 init_completion(&larval->completion); 127 init_completion(&larval->completion);
125 128
129 return larval;
130}
131EXPORT_SYMBOL_GPL(crypto_larval_alloc);
132
133static struct crypto_alg *crypto_larval_add(const char *name, u32 type,
134 u32 mask)
135{
136 struct crypto_alg *alg;
137 struct crypto_larval *larval;
138
139 larval = crypto_larval_alloc(name, type, mask);
140 if (IS_ERR(larval))
141 return ERR_CAST(larval);
142
143 atomic_set(&larval->alg.cra_refcnt, 2);
144
126 down_write(&crypto_alg_sem); 145 down_write(&crypto_alg_sem);
127 alg = __crypto_alg_lookup(name, type, mask); 146 alg = __crypto_alg_lookup(name, type, mask);
128 if (!alg) { 147 if (!alg) {
@@ -152,21 +171,29 @@ EXPORT_SYMBOL_GPL(crypto_larval_kill);
152static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg) 171static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg)
153{ 172{
154 struct crypto_larval *larval = (void *)alg; 173 struct crypto_larval *larval = (void *)alg;
174 long timeout;
175
176 timeout = wait_for_completion_interruptible_timeout(
177 &larval->completion, 60 * HZ);
155 178
156 wait_for_completion_interruptible_timeout(&larval->completion, 60 * HZ);
157 alg = larval->adult; 179 alg = larval->adult;
158 if (alg) { 180 if (timeout < 0)
159 if (!crypto_mod_get(alg)) 181 alg = ERR_PTR(-EINTR);
160 alg = ERR_PTR(-EAGAIN); 182 else if (!timeout)
161 } else 183 alg = ERR_PTR(-ETIMEDOUT);
184 else if (!alg)
162 alg = ERR_PTR(-ENOENT); 185 alg = ERR_PTR(-ENOENT);
186 else if (crypto_is_test_larval(larval) &&
187 !(alg->cra_flags & CRYPTO_ALG_TESTED))
188 alg = ERR_PTR(-EAGAIN);
189 else if (!crypto_mod_get(alg))
190 alg = ERR_PTR(-EAGAIN);
163 crypto_mod_put(&larval->alg); 191 crypto_mod_put(&larval->alg);
164 192
165 return alg; 193 return alg;
166} 194}
167 195
168static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, 196struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, u32 mask)
169 u32 mask)
170{ 197{
171 struct crypto_alg *alg; 198 struct crypto_alg *alg;
172 199
@@ -176,6 +203,7 @@ static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type,
176 203
177 return alg; 204 return alg;
178} 205}
206EXPORT_SYMBOL_GPL(crypto_alg_lookup);
179 207
180struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask) 208struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
181{ 209{
@@ -192,25 +220,40 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
192 if (alg) 220 if (alg)
193 return crypto_is_larval(alg) ? crypto_larval_wait(alg) : alg; 221 return crypto_is_larval(alg) ? crypto_larval_wait(alg) : alg;
194 222
195 return crypto_larval_alloc(name, type, mask); 223 return crypto_larval_add(name, type, mask);
196} 224}
197EXPORT_SYMBOL_GPL(crypto_larval_lookup); 225EXPORT_SYMBOL_GPL(crypto_larval_lookup);
198 226
227int crypto_probing_notify(unsigned long val, void *v)
228{
229 int ok;
230
231 ok = blocking_notifier_call_chain(&crypto_chain, val, v);
232 if (ok == NOTIFY_DONE) {
233 request_module("cryptomgr");
234 ok = blocking_notifier_call_chain(&crypto_chain, val, v);
235 }
236
237 return ok;
238}
239EXPORT_SYMBOL_GPL(crypto_probing_notify);
240
199struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask) 241struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask)
200{ 242{
201 struct crypto_alg *alg; 243 struct crypto_alg *alg;
202 struct crypto_alg *larval; 244 struct crypto_alg *larval;
203 int ok; 245 int ok;
204 246
247 if (!(mask & CRYPTO_ALG_TESTED)) {
248 type |= CRYPTO_ALG_TESTED;
249 mask |= CRYPTO_ALG_TESTED;
250 }
251
205 larval = crypto_larval_lookup(name, type, mask); 252 larval = crypto_larval_lookup(name, type, mask);
206 if (IS_ERR(larval) || !crypto_is_larval(larval)) 253 if (IS_ERR(larval) || !crypto_is_larval(larval))
207 return larval; 254 return larval;
208 255
209 ok = crypto_notify(CRYPTO_MSG_ALG_REQUEST, larval); 256 ok = crypto_probing_notify(CRYPTO_MSG_ALG_REQUEST, larval);
210 if (ok == NOTIFY_DONE) {
211 request_module("cryptomgr");
212 ok = crypto_notify(CRYPTO_MSG_ALG_REQUEST, larval);
213 }
214 257
215 if (ok == NOTIFY_STOP) 258 if (ok == NOTIFY_STOP)
216 alg = crypto_larval_wait(larval); 259 alg = crypto_larval_wait(larval);
diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
index 185f955fb0d7..4a7e65c4df4d 100644
--- a/crypto/blkcipher.c
+++ b/crypto/blkcipher.c
@@ -696,34 +696,5 @@ void skcipher_geniv_exit(struct crypto_tfm *tfm)
696} 696}
697EXPORT_SYMBOL_GPL(skcipher_geniv_exit); 697EXPORT_SYMBOL_GPL(skcipher_geniv_exit);
698 698
699static int __init blkcipher_module_init(void)
700{
701 int err;
702
703 err = chainiv_module_init();
704 if (err)
705 goto out;
706
707 err = eseqiv_module_init();
708 if (err)
709 goto eseqiv_err;
710
711out:
712 return err;
713
714eseqiv_err:
715 chainiv_module_exit();
716 goto out;
717}
718
719static void __exit blkcipher_module_exit(void)
720{
721 eseqiv_module_exit();
722 chainiv_module_exit();
723}
724
725module_init(blkcipher_module_init);
726module_exit(blkcipher_module_exit);
727
728MODULE_LICENSE("GPL"); 699MODULE_LICENSE("GPL");
729MODULE_DESCRIPTION("Generic block chaining cipher type"); 700MODULE_DESCRIPTION("Generic block chaining cipher type");
diff --git a/crypto/chainiv.c b/crypto/chainiv.c
index 9affadee3287..7c37a497b860 100644
--- a/crypto/chainiv.c
+++ b/crypto/chainiv.c
@@ -14,11 +14,11 @@
14 */ 14 */
15 15
16#include <crypto/internal/skcipher.h> 16#include <crypto/internal/skcipher.h>
17#include <crypto/rng.h>
17#include <linux/err.h> 18#include <linux/err.h>
18#include <linux/init.h> 19#include <linux/init.h>
19#include <linux/kernel.h> 20#include <linux/kernel.h>
20#include <linux/module.h> 21#include <linux/module.h>
21#include <linux/random.h>
22#include <linux/spinlock.h> 22#include <linux/spinlock.h>
23#include <linux/string.h> 23#include <linux/string.h>
24#include <linux/workqueue.h> 24#include <linux/workqueue.h>
@@ -83,6 +83,7 @@ static int chainiv_givencrypt_first(struct skcipher_givcrypt_request *req)
83{ 83{
84 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req); 84 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req);
85 struct chainiv_ctx *ctx = crypto_ablkcipher_ctx(geniv); 85 struct chainiv_ctx *ctx = crypto_ablkcipher_ctx(geniv);
86 int err = 0;
86 87
87 spin_lock_bh(&ctx->lock); 88 spin_lock_bh(&ctx->lock);
88 if (crypto_ablkcipher_crt(geniv)->givencrypt != 89 if (crypto_ablkcipher_crt(geniv)->givencrypt !=
@@ -90,11 +91,15 @@ static int chainiv_givencrypt_first(struct skcipher_givcrypt_request *req)
90 goto unlock; 91 goto unlock;
91 92
92 crypto_ablkcipher_crt(geniv)->givencrypt = chainiv_givencrypt; 93 crypto_ablkcipher_crt(geniv)->givencrypt = chainiv_givencrypt;
93 get_random_bytes(ctx->iv, crypto_ablkcipher_ivsize(geniv)); 94 err = crypto_rng_get_bytes(crypto_default_rng, ctx->iv,
95 crypto_ablkcipher_ivsize(geniv));
94 96
95unlock: 97unlock:
96 spin_unlock_bh(&ctx->lock); 98 spin_unlock_bh(&ctx->lock);
97 99
100 if (err)
101 return err;
102
98 return chainiv_givencrypt(req); 103 return chainiv_givencrypt(req);
99} 104}
100 105
@@ -203,6 +208,7 @@ static int async_chainiv_givencrypt_first(struct skcipher_givcrypt_request *req)
203{ 208{
204 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req); 209 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req);
205 struct async_chainiv_ctx *ctx = crypto_ablkcipher_ctx(geniv); 210 struct async_chainiv_ctx *ctx = crypto_ablkcipher_ctx(geniv);
211 int err = 0;
206 212
207 if (test_and_set_bit(CHAINIV_STATE_INUSE, &ctx->state)) 213 if (test_and_set_bit(CHAINIV_STATE_INUSE, &ctx->state))
208 goto out; 214 goto out;
@@ -212,11 +218,15 @@ static int async_chainiv_givencrypt_first(struct skcipher_givcrypt_request *req)
212 goto unlock; 218 goto unlock;
213 219
214 crypto_ablkcipher_crt(geniv)->givencrypt = async_chainiv_givencrypt; 220 crypto_ablkcipher_crt(geniv)->givencrypt = async_chainiv_givencrypt;
215 get_random_bytes(ctx->iv, crypto_ablkcipher_ivsize(geniv)); 221 err = crypto_rng_get_bytes(crypto_default_rng, ctx->iv,
222 crypto_ablkcipher_ivsize(geniv));
216 223
217unlock: 224unlock:
218 clear_bit(CHAINIV_STATE_INUSE, &ctx->state); 225 clear_bit(CHAINIV_STATE_INUSE, &ctx->state);
219 226
227 if (err)
228 return err;
229
220out: 230out:
221 return async_chainiv_givencrypt(req); 231 return async_chainiv_givencrypt(req);
222} 232}
@@ -284,9 +294,13 @@ static struct crypto_instance *chainiv_alloc(struct rtattr **tb)
284 if (IS_ERR(algt)) 294 if (IS_ERR(algt))
285 return ERR_PTR(err); 295 return ERR_PTR(err);
286 296
297 err = crypto_get_default_rng();
298 if (err)
299 return ERR_PTR(err);
300
287 inst = skcipher_geniv_alloc(&chainiv_tmpl, tb, 0, 0); 301 inst = skcipher_geniv_alloc(&chainiv_tmpl, tb, 0, 0);
288 if (IS_ERR(inst)) 302 if (IS_ERR(inst))
289 goto out; 303 goto put_rng;
290 304
291 inst->alg.cra_ablkcipher.givencrypt = chainiv_givencrypt_first; 305 inst->alg.cra_ablkcipher.givencrypt = chainiv_givencrypt_first;
292 306
@@ -311,21 +325,37 @@ static struct crypto_instance *chainiv_alloc(struct rtattr **tb)
311 325
312out: 326out:
313 return inst; 327 return inst;
328
329put_rng:
330 crypto_put_default_rng();
331 goto out;
332}
333
334static void chainiv_free(struct crypto_instance *inst)
335{
336 skcipher_geniv_free(inst);
337 crypto_put_default_rng();
314} 338}
315 339
316static struct crypto_template chainiv_tmpl = { 340static struct crypto_template chainiv_tmpl = {
317 .name = "chainiv", 341 .name = "chainiv",
318 .alloc = chainiv_alloc, 342 .alloc = chainiv_alloc,
319 .free = skcipher_geniv_free, 343 .free = chainiv_free,
320 .module = THIS_MODULE, 344 .module = THIS_MODULE,
321}; 345};
322 346
323int __init chainiv_module_init(void) 347static int __init chainiv_module_init(void)
324{ 348{
325 return crypto_register_template(&chainiv_tmpl); 349 return crypto_register_template(&chainiv_tmpl);
326} 350}
327 351
328void chainiv_module_exit(void) 352static void chainiv_module_exit(void)
329{ 353{
330 crypto_unregister_template(&chainiv_tmpl); 354 crypto_unregister_template(&chainiv_tmpl);
331} 355}
356
357module_init(chainiv_module_init);
358module_exit(chainiv_module_exit);
359
360MODULE_LICENSE("GPL");
361MODULE_DESCRIPTION("Chain IV Generator");
diff --git a/crypto/eseqiv.c b/crypto/eseqiv.c
index 881d30910434..2a342c8e52b3 100644
--- a/crypto/eseqiv.c
+++ b/crypto/eseqiv.c
@@ -16,13 +16,13 @@
16 */ 16 */
17 17
18#include <crypto/internal/skcipher.h> 18#include <crypto/internal/skcipher.h>
19#include <crypto/rng.h>
19#include <crypto/scatterwalk.h> 20#include <crypto/scatterwalk.h>
20#include <linux/err.h> 21#include <linux/err.h>
21#include <linux/init.h> 22#include <linux/init.h>
22#include <linux/kernel.h> 23#include <linux/kernel.h>
23#include <linux/mm.h> 24#include <linux/mm.h>
24#include <linux/module.h> 25#include <linux/module.h>
25#include <linux/random.h>
26#include <linux/scatterlist.h> 26#include <linux/scatterlist.h>
27#include <linux/spinlock.h> 27#include <linux/spinlock.h>
28#include <linux/string.h> 28#include <linux/string.h>
@@ -163,17 +163,22 @@ static int eseqiv_givencrypt_first(struct skcipher_givcrypt_request *req)
163{ 163{
164 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req); 164 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req);
165 struct eseqiv_ctx *ctx = crypto_ablkcipher_ctx(geniv); 165 struct eseqiv_ctx *ctx = crypto_ablkcipher_ctx(geniv);
166 int err = 0;
166 167
167 spin_lock_bh(&ctx->lock); 168 spin_lock_bh(&ctx->lock);
168 if (crypto_ablkcipher_crt(geniv)->givencrypt != eseqiv_givencrypt_first) 169 if (crypto_ablkcipher_crt(geniv)->givencrypt != eseqiv_givencrypt_first)
169 goto unlock; 170 goto unlock;
170 171
171 crypto_ablkcipher_crt(geniv)->givencrypt = eseqiv_givencrypt; 172 crypto_ablkcipher_crt(geniv)->givencrypt = eseqiv_givencrypt;
172 get_random_bytes(ctx->salt, crypto_ablkcipher_ivsize(geniv)); 173 err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt,
174 crypto_ablkcipher_ivsize(geniv));
173 175
174unlock: 176unlock:
175 spin_unlock_bh(&ctx->lock); 177 spin_unlock_bh(&ctx->lock);
176 178
179 if (err)
180 return err;
181
177 return eseqiv_givencrypt(req); 182 return eseqiv_givencrypt(req);
178} 183}
179 184
@@ -216,9 +221,13 @@ static struct crypto_instance *eseqiv_alloc(struct rtattr **tb)
216 struct crypto_instance *inst; 221 struct crypto_instance *inst;
217 int err; 222 int err;
218 223
224 err = crypto_get_default_rng();
225 if (err)
226 return ERR_PTR(err);
227
219 inst = skcipher_geniv_alloc(&eseqiv_tmpl, tb, 0, 0); 228 inst = skcipher_geniv_alloc(&eseqiv_tmpl, tb, 0, 0);
220 if (IS_ERR(inst)) 229 if (IS_ERR(inst))
221 goto out; 230 goto put_rng;
222 231
223 err = -EINVAL; 232 err = -EINVAL;
224 if (inst->alg.cra_ablkcipher.ivsize != inst->alg.cra_blocksize) 233 if (inst->alg.cra_ablkcipher.ivsize != inst->alg.cra_blocksize)
@@ -238,22 +247,36 @@ out:
238free_inst: 247free_inst:
239 skcipher_geniv_free(inst); 248 skcipher_geniv_free(inst);
240 inst = ERR_PTR(err); 249 inst = ERR_PTR(err);
250put_rng:
251 crypto_put_default_rng();
241 goto out; 252 goto out;
242} 253}
243 254
255static void eseqiv_free(struct crypto_instance *inst)
256{
257 skcipher_geniv_free(inst);
258 crypto_put_default_rng();
259}
260
244static struct crypto_template eseqiv_tmpl = { 261static struct crypto_template eseqiv_tmpl = {
245 .name = "eseqiv", 262 .name = "eseqiv",
246 .alloc = eseqiv_alloc, 263 .alloc = eseqiv_alloc,
247 .free = skcipher_geniv_free, 264 .free = eseqiv_free,
248 .module = THIS_MODULE, 265 .module = THIS_MODULE,
249}; 266};
250 267
251int __init eseqiv_module_init(void) 268static int __init eseqiv_module_init(void)
252{ 269{
253 return crypto_register_template(&eseqiv_tmpl); 270 return crypto_register_template(&eseqiv_tmpl);
254} 271}
255 272
256void __exit eseqiv_module_exit(void) 273static void __exit eseqiv_module_exit(void)
257{ 274{
258 crypto_unregister_template(&eseqiv_tmpl); 275 crypto_unregister_template(&eseqiv_tmpl);
259} 276}
277
278module_init(eseqiv_module_init);
279module_exit(eseqiv_module_exit);
280
281MODULE_LICENSE("GPL");
282MODULE_DESCRIPTION("Encrypted Sequence Number IV Generator");
diff --git a/crypto/fips.c b/crypto/fips.c
new file mode 100644
index 000000000000..553970081c62
--- /dev/null
+++ b/crypto/fips.c
@@ -0,0 +1,27 @@
1/*
2 * FIPS 200 support.
3 *
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 */
12
13#include "internal.h"
14
15int fips_enabled;
16EXPORT_SYMBOL_GPL(fips_enabled);
17
18/* Process kernel command-line parameter at boot time. fips=0 or fips=1 */
19static int fips_enable(char *str)
20{
21 fips_enabled = !!simple_strtol(str, NULL, 0);
22 printk(KERN_INFO "fips mode: %s\n",
23 fips_enabled ? "enabled" : "disabled");
24 return 1;
25}
26
27__setup("fips=", fips_enable);
diff --git a/crypto/internal.h b/crypto/internal.h
index 683fcb2d91f4..8ef72d76092e 100644
--- a/crypto/internal.h
+++ b/crypto/internal.h
@@ -26,6 +26,12 @@
26#include <linux/rwsem.h> 26#include <linux/rwsem.h>
27#include <linux/slab.h> 27#include <linux/slab.h>
28 28
29#ifdef CONFIG_CRYPTO_FIPS
30extern int fips_enabled;
31#else
32#define fips_enabled 0
33#endif
34
29/* Crypto notification events. */ 35/* Crypto notification events. */
30enum { 36enum {
31 CRYPTO_MSG_ALG_REQUEST, 37 CRYPTO_MSG_ALG_REQUEST,
@@ -82,7 +88,7 @@ static inline unsigned int crypto_compress_ctxsize(struct crypto_alg *alg)
82} 88}
83 89
84struct crypto_alg *crypto_mod_get(struct crypto_alg *alg); 90struct crypto_alg *crypto_mod_get(struct crypto_alg *alg);
85struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask); 91struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, u32 mask);
86struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask); 92struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask);
87 93
88int crypto_init_digest_ops(struct crypto_tfm *tfm); 94int crypto_init_digest_ops(struct crypto_tfm *tfm);
@@ -94,9 +100,11 @@ void crypto_exit_digest_ops(struct crypto_tfm *tfm);
94void crypto_exit_cipher_ops(struct crypto_tfm *tfm); 100void crypto_exit_cipher_ops(struct crypto_tfm *tfm);
95void crypto_exit_compress_ops(struct crypto_tfm *tfm); 101void crypto_exit_compress_ops(struct crypto_tfm *tfm);
96 102
103struct crypto_larval *crypto_larval_alloc(const char *name, u32 type, u32 mask);
97void crypto_larval_kill(struct crypto_alg *alg); 104void crypto_larval_kill(struct crypto_alg *alg);
98struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask); 105struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask);
99void crypto_larval_error(const char *name, u32 type, u32 mask); 106void crypto_larval_error(const char *name, u32 type, u32 mask);
107void crypto_alg_tested(const char *name, int err);
100 108
101void crypto_shoot_alg(struct crypto_alg *alg); 109void crypto_shoot_alg(struct crypto_alg *alg);
102struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type, 110struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type,
@@ -107,6 +115,10 @@ int crypto_register_instance(struct crypto_template *tmpl,
107 115
108int crypto_register_notifier(struct notifier_block *nb); 116int crypto_register_notifier(struct notifier_block *nb);
109int crypto_unregister_notifier(struct notifier_block *nb); 117int crypto_unregister_notifier(struct notifier_block *nb);
118int crypto_probing_notify(unsigned long val, void *v);
119
120int __init testmgr_init(void);
121void testmgr_exit(void);
110 122
111static inline void crypto_alg_put(struct crypto_alg *alg) 123static inline void crypto_alg_put(struct crypto_alg *alg)
112{ 124{
@@ -139,9 +151,9 @@ static inline int crypto_is_moribund(struct crypto_alg *alg)
139 return alg->cra_flags & (CRYPTO_ALG_DEAD | CRYPTO_ALG_DYING); 151 return alg->cra_flags & (CRYPTO_ALG_DEAD | CRYPTO_ALG_DYING);
140} 152}
141 153
142static inline int crypto_notify(unsigned long val, void *v) 154static inline void crypto_notify(unsigned long val, void *v)
143{ 155{
144 return blocking_notifier_call_chain(&crypto_chain, val, v); 156 blocking_notifier_call_chain(&crypto_chain, val, v);
145} 157}
146 158
147#endif /* _CRYPTO_INTERNAL_H */ 159#endif /* _CRYPTO_INTERNAL_H */
diff --git a/crypto/krng.c b/crypto/krng.c
new file mode 100644
index 000000000000..4328bb3430ed
--- /dev/null
+++ b/crypto/krng.c
@@ -0,0 +1,66 @@
1/*
2 * RNG implementation using standard kernel RNG.
3 *
4 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * any later version.
10 *
11 */
12
13#include <crypto/internal/rng.h>
14#include <linux/err.h>
15#include <linux/init.h>
16#include <linux/module.h>
17#include <linux/random.h>
18
19static int krng_get_random(struct crypto_rng *tfm, u8 *rdata, unsigned int dlen)
20{
21 get_random_bytes(rdata, dlen);
22 return 0;
23}
24
25static int krng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
26{
27 return 0;
28}
29
30static struct crypto_alg krng_alg = {
31 .cra_name = "stdrng",
32 .cra_driver_name = "krng",
33 .cra_priority = 200,
34 .cra_flags = CRYPTO_ALG_TYPE_RNG,
35 .cra_ctxsize = 0,
36 .cra_type = &crypto_rng_type,
37 .cra_module = THIS_MODULE,
38 .cra_list = LIST_HEAD_INIT(krng_alg.cra_list),
39 .cra_u = {
40 .rng = {
41 .rng_make_random = krng_get_random,
42 .rng_reset = krng_reset,
43 .seedsize = 0,
44 }
45 }
46};
47
48
49/* Module initalization */
50static int __init krng_mod_init(void)
51{
52 return crypto_register_alg(&krng_alg);
53}
54
55static void __exit krng_mod_fini(void)
56{
57 crypto_unregister_alg(&krng_alg);
58 return;
59}
60
61module_init(krng_mod_init);
62module_exit(krng_mod_fini);
63
64MODULE_LICENSE("GPL");
65MODULE_DESCRIPTION("Kernel Random Number Generator");
66MODULE_ALIAS("stdrng");
diff --git a/crypto/proc.c b/crypto/proc.c
index 02ff5670c158..37a13d05636d 100644
--- a/crypto/proc.c
+++ b/crypto/proc.c
@@ -19,8 +19,53 @@
19#include <linux/rwsem.h> 19#include <linux/rwsem.h>
20#include <linux/proc_fs.h> 20#include <linux/proc_fs.h>
21#include <linux/seq_file.h> 21#include <linux/seq_file.h>
22#include <linux/sysctl.h>
22#include "internal.h" 23#include "internal.h"
23 24
25#ifdef CONFIG_CRYPTO_FIPS
26static struct ctl_table crypto_sysctl_table[] = {
27 {
28 .ctl_name = CTL_UNNUMBERED,
29 .procname = "fips_enabled",
30 .data = &fips_enabled,
31 .maxlen = sizeof(int),
32 .mode = 0444,
33 .proc_handler = &proc_dointvec
34 },
35 {
36 .ctl_name = 0,
37 },
38};
39
40static struct ctl_table crypto_dir_table[] = {
41 {
42 .ctl_name = CTL_UNNUMBERED,
43 .procname = "crypto",
44 .mode = 0555,
45 .child = crypto_sysctl_table
46 },
47 {
48 .ctl_name = 0,
49 },
50};
51
52static struct ctl_table_header *crypto_sysctls;
53
54static void crypto_proc_fips_init(void)
55{
56 crypto_sysctls = register_sysctl_table(crypto_dir_table);
57}
58
59static void crypto_proc_fips_exit(void)
60{
61 if (crypto_sysctls)
62 unregister_sysctl_table(crypto_sysctls);
63}
64#else
65#define crypto_proc_fips_init()
66#define crypto_proc_fips_exit()
67#endif
68
24static void *c_start(struct seq_file *m, loff_t *pos) 69static void *c_start(struct seq_file *m, loff_t *pos)
25{ 70{
26 down_read(&crypto_alg_sem); 71 down_read(&crypto_alg_sem);
@@ -46,8 +91,11 @@ static int c_show(struct seq_file *m, void *p)
46 seq_printf(m, "module : %s\n", module_name(alg->cra_module)); 91 seq_printf(m, "module : %s\n", module_name(alg->cra_module));
47 seq_printf(m, "priority : %d\n", alg->cra_priority); 92 seq_printf(m, "priority : %d\n", alg->cra_priority);
48 seq_printf(m, "refcnt : %d\n", atomic_read(&alg->cra_refcnt)); 93 seq_printf(m, "refcnt : %d\n", atomic_read(&alg->cra_refcnt));
94 seq_printf(m, "selftest : %s\n",
95 (alg->cra_flags & CRYPTO_ALG_TESTED) ?
96 "passed" : "unknown");
49 97
50 switch (alg->cra_flags & CRYPTO_ALG_TYPE_MASK) { 98 switch (alg->cra_flags & (CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_LARVAL)) {
51 case CRYPTO_ALG_TYPE_CIPHER: 99 case CRYPTO_ALG_TYPE_CIPHER:
52 seq_printf(m, "type : cipher\n"); 100 seq_printf(m, "type : cipher\n");
53 seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); 101 seq_printf(m, "blocksize : %u\n", alg->cra_blocksize);
@@ -67,7 +115,10 @@ static int c_show(struct seq_file *m, void *p)
67 seq_printf(m, "type : compression\n"); 115 seq_printf(m, "type : compression\n");
68 break; 116 break;
69 default: 117 default:
70 if (alg->cra_type && alg->cra_type->show) 118 if (alg->cra_flags & CRYPTO_ALG_LARVAL) {
119 seq_printf(m, "type : larval\n");
120 seq_printf(m, "flags : 0x%x\n", alg->cra_flags);
121 } else if (alg->cra_type && alg->cra_type->show)
71 alg->cra_type->show(m, alg); 122 alg->cra_type->show(m, alg);
72 else 123 else
73 seq_printf(m, "type : unknown\n"); 124 seq_printf(m, "type : unknown\n");
@@ -100,9 +151,11 @@ static const struct file_operations proc_crypto_ops = {
100void __init crypto_init_proc(void) 151void __init crypto_init_proc(void)
101{ 152{
102 proc_create("crypto", 0, NULL, &proc_crypto_ops); 153 proc_create("crypto", 0, NULL, &proc_crypto_ops);
154 crypto_proc_fips_init();
103} 155}
104 156
105void __exit crypto_exit_proc(void) 157void __exit crypto_exit_proc(void)
106{ 158{
159 crypto_proc_fips_exit();
107 remove_proc_entry("crypto", NULL); 160 remove_proc_entry("crypto", NULL);
108} 161}
diff --git a/crypto/rng.c b/crypto/rng.c
new file mode 100644
index 000000000000..6e94bc735578
--- /dev/null
+++ b/crypto/rng.c
@@ -0,0 +1,126 @@
1/*
2 * Cryptographic API.
3 *
4 * RNG operations.
5 *
6 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the Free
10 * Software Foundation; either version 2 of the License, or (at your option)
11 * any later version.
12 *
13 */
14
15#include <asm/atomic.h>
16#include <crypto/internal/rng.h>
17#include <linux/err.h>
18#include <linux/module.h>
19#include <linux/mutex.h>
20#include <linux/random.h>
21#include <linux/seq_file.h>
22#include <linux/string.h>
23
24static DEFINE_MUTEX(crypto_default_rng_lock);
25struct crypto_rng *crypto_default_rng;
26EXPORT_SYMBOL_GPL(crypto_default_rng);
27static int crypto_default_rng_refcnt;
28
29static int rngapi_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen)
30{
31 u8 *buf = NULL;
32 int err;
33
34 if (!seed && slen) {
35 buf = kmalloc(slen, GFP_KERNEL);
36 if (!buf)
37 return -ENOMEM;
38
39 get_random_bytes(buf, slen);
40 seed = buf;
41 }
42
43 err = crypto_rng_alg(tfm)->rng_reset(tfm, seed, slen);
44
45 kfree(buf);
46 return err;
47}
48
49static int crypto_init_rng_ops(struct crypto_tfm *tfm, u32 type, u32 mask)
50{
51 struct rng_alg *alg = &tfm->__crt_alg->cra_rng;
52 struct rng_tfm *ops = &tfm->crt_rng;
53
54 ops->rng_gen_random = alg->rng_make_random;
55 ops->rng_reset = rngapi_reset;
56
57 return 0;
58}
59
60static void crypto_rng_show(struct seq_file *m, struct crypto_alg *alg)
61 __attribute__ ((unused));
62static void crypto_rng_show(struct seq_file *m, struct crypto_alg *alg)
63{
64 seq_printf(m, "type : rng\n");
65 seq_printf(m, "seedsize : %u\n", alg->cra_rng.seedsize);
66}
67
68static unsigned int crypto_rng_ctxsize(struct crypto_alg *alg, u32 type,
69 u32 mask)
70{
71 return alg->cra_ctxsize;
72}
73
74const struct crypto_type crypto_rng_type = {
75 .ctxsize = crypto_rng_ctxsize,
76 .init = crypto_init_rng_ops,
77#ifdef CONFIG_PROC_FS
78 .show = crypto_rng_show,
79#endif
80};
81EXPORT_SYMBOL_GPL(crypto_rng_type);
82
83int crypto_get_default_rng(void)
84{
85 struct crypto_rng *rng;
86 int err;
87
88 mutex_lock(&crypto_default_rng_lock);
89 if (!crypto_default_rng) {
90 rng = crypto_alloc_rng("stdrng", 0, 0);
91 err = PTR_ERR(rng);
92 if (IS_ERR(rng))
93 goto unlock;
94
95 err = crypto_rng_reset(rng, NULL, crypto_rng_seedsize(rng));
96 if (err) {
97 crypto_free_rng(rng);
98 goto unlock;
99 }
100
101 crypto_default_rng = rng;
102 }
103
104 crypto_default_rng_refcnt++;
105 err = 0;
106
107unlock:
108 mutex_unlock(&crypto_default_rng_lock);
109
110 return err;
111}
112EXPORT_SYMBOL_GPL(crypto_get_default_rng);
113
114void crypto_put_default_rng(void)
115{
116 mutex_lock(&crypto_default_rng_lock);
117 if (!--crypto_default_rng_refcnt) {
118 crypto_free_rng(crypto_default_rng);
119 crypto_default_rng = NULL;
120 }
121 mutex_unlock(&crypto_default_rng_lock);
122}
123EXPORT_SYMBOL_GPL(crypto_put_default_rng);
124
125MODULE_LICENSE("GPL");
126MODULE_DESCRIPTION("Random Number Genertor");
diff --git a/crypto/seqiv.c b/crypto/seqiv.c
index b903aab31577..5a013a8bf87a 100644
--- a/crypto/seqiv.c
+++ b/crypto/seqiv.c
@@ -15,11 +15,11 @@
15 15
16#include <crypto/internal/aead.h> 16#include <crypto/internal/aead.h>
17#include <crypto/internal/skcipher.h> 17#include <crypto/internal/skcipher.h>
18#include <crypto/rng.h>
18#include <linux/err.h> 19#include <linux/err.h>
19#include <linux/init.h> 20#include <linux/init.h>
20#include <linux/kernel.h> 21#include <linux/kernel.h>
21#include <linux/module.h> 22#include <linux/module.h>
22#include <linux/random.h>
23#include <linux/spinlock.h> 23#include <linux/spinlock.h>
24#include <linux/string.h> 24#include <linux/string.h>
25 25
@@ -189,17 +189,22 @@ static int seqiv_givencrypt_first(struct skcipher_givcrypt_request *req)
189{ 189{
190 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req); 190 struct crypto_ablkcipher *geniv = skcipher_givcrypt_reqtfm(req);
191 struct seqiv_ctx *ctx = crypto_ablkcipher_ctx(geniv); 191 struct seqiv_ctx *ctx = crypto_ablkcipher_ctx(geniv);
192 int err = 0;
192 193
193 spin_lock_bh(&ctx->lock); 194 spin_lock_bh(&ctx->lock);
194 if (crypto_ablkcipher_crt(geniv)->givencrypt != seqiv_givencrypt_first) 195 if (crypto_ablkcipher_crt(geniv)->givencrypt != seqiv_givencrypt_first)
195 goto unlock; 196 goto unlock;
196 197
197 crypto_ablkcipher_crt(geniv)->givencrypt = seqiv_givencrypt; 198 crypto_ablkcipher_crt(geniv)->givencrypt = seqiv_givencrypt;
198 get_random_bytes(ctx->salt, crypto_ablkcipher_ivsize(geniv)); 199 err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt,
200 crypto_ablkcipher_ivsize(geniv));
199 201
200unlock: 202unlock:
201 spin_unlock_bh(&ctx->lock); 203 spin_unlock_bh(&ctx->lock);
202 204
205 if (err)
206 return err;
207
203 return seqiv_givencrypt(req); 208 return seqiv_givencrypt(req);
204} 209}
205 210
@@ -207,17 +212,22 @@ static int seqiv_aead_givencrypt_first(struct aead_givcrypt_request *req)
207{ 212{
208 struct crypto_aead *geniv = aead_givcrypt_reqtfm(req); 213 struct crypto_aead *geniv = aead_givcrypt_reqtfm(req);
209 struct seqiv_ctx *ctx = crypto_aead_ctx(geniv); 214 struct seqiv_ctx *ctx = crypto_aead_ctx(geniv);
215 int err = 0;
210 216
211 spin_lock_bh(&ctx->lock); 217 spin_lock_bh(&ctx->lock);
212 if (crypto_aead_crt(geniv)->givencrypt != seqiv_aead_givencrypt_first) 218 if (crypto_aead_crt(geniv)->givencrypt != seqiv_aead_givencrypt_first)
213 goto unlock; 219 goto unlock;
214 220
215 crypto_aead_crt(geniv)->givencrypt = seqiv_aead_givencrypt; 221 crypto_aead_crt(geniv)->givencrypt = seqiv_aead_givencrypt;
216 get_random_bytes(ctx->salt, crypto_aead_ivsize(geniv)); 222 err = crypto_rng_get_bytes(crypto_default_rng, ctx->salt,
223 crypto_aead_ivsize(geniv));
217 224
218unlock: 225unlock:
219 spin_unlock_bh(&ctx->lock); 226 spin_unlock_bh(&ctx->lock);
220 227
228 if (err)
229 return err;
230
221 return seqiv_aead_givencrypt(req); 231 return seqiv_aead_givencrypt(req);
222} 232}
223 233
@@ -298,19 +308,27 @@ static struct crypto_instance *seqiv_alloc(struct rtattr **tb)
298 if (IS_ERR(algt)) 308 if (IS_ERR(algt))
299 return ERR_PTR(err); 309 return ERR_PTR(err);
300 310
311 err = crypto_get_default_rng();
312 if (err)
313 return ERR_PTR(err);
314
301 if ((algt->type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) 315 if ((algt->type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK)
302 inst = seqiv_ablkcipher_alloc(tb); 316 inst = seqiv_ablkcipher_alloc(tb);
303 else 317 else
304 inst = seqiv_aead_alloc(tb); 318 inst = seqiv_aead_alloc(tb);
305 319
306 if (IS_ERR(inst)) 320 if (IS_ERR(inst))
307 goto out; 321 goto put_rng;
308 322
309 inst->alg.cra_alignmask |= __alignof__(u32) - 1; 323 inst->alg.cra_alignmask |= __alignof__(u32) - 1;
310 inst->alg.cra_ctxsize += sizeof(struct seqiv_ctx); 324 inst->alg.cra_ctxsize += sizeof(struct seqiv_ctx);
311 325
312out: 326out:
313 return inst; 327 return inst;
328
329put_rng:
330 crypto_put_default_rng();
331 goto out;
314} 332}
315 333
316static void seqiv_free(struct crypto_instance *inst) 334static void seqiv_free(struct crypto_instance *inst)
@@ -319,6 +337,7 @@ static void seqiv_free(struct crypto_instance *inst)
319 skcipher_geniv_free(inst); 337 skcipher_geniv_free(inst);
320 else 338 else
321 aead_geniv_free(inst); 339 aead_geniv_free(inst);
340 crypto_put_default_rng();
322} 341}
323 342
324static struct crypto_template seqiv_tmpl = { 343static struct crypto_template seqiv_tmpl = {
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
index 66368022e0bf..28a45a1e6f42 100644
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -19,11 +19,9 @@
19#include <linux/err.h> 19#include <linux/err.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/mm.h>
23#include <linux/slab.h> 22#include <linux/slab.h>
24#include <linux/scatterlist.h> 23#include <linux/scatterlist.h>
25#include <linux/string.h> 24#include <linux/string.h>
26#include <linux/crypto.h>
27#include <linux/moduleparam.h> 25#include <linux/moduleparam.h>
28#include <linux/jiffies.h> 26#include <linux/jiffies.h>
29#include <linux/timex.h> 27#include <linux/timex.h>
@@ -31,45 +29,23 @@
31#include "tcrypt.h" 29#include "tcrypt.h"
32 30
33/* 31/*
34 * Need to kmalloc() memory for testing. 32 * Need slab memory for testing (size in number of pages).
35 */ 33 */
36#define TVMEMSIZE 16384 34#define TVMEMSIZE 4
37#define XBUFSIZE 32768
38 35
39/* 36/*
40 * Indexes into the xbuf to simulate cross-page access. 37* Used by test_cipher_speed()
41 */
42#define IDX1 32
43#define IDX2 32400
44#define IDX3 1
45#define IDX4 8193
46#define IDX5 22222
47#define IDX6 17101
48#define IDX7 27333
49#define IDX8 3000
50
51/*
52* Used by test_cipher()
53*/ 38*/
54#define ENCRYPT 1 39#define ENCRYPT 1
55#define DECRYPT 0 40#define DECRYPT 0
56 41
57struct tcrypt_result {
58 struct completion completion;
59 int err;
60};
61
62static unsigned int IDX[8] = { IDX1, IDX2, IDX3, IDX4, IDX5, IDX6, IDX7, IDX8 };
63
64/* 42/*
65 * Used by test_cipher_speed() 43 * Used by test_cipher_speed()
66 */ 44 */
67static unsigned int sec; 45static unsigned int sec;
68 46
69static int mode; 47static int mode;
70static char *xbuf; 48static char *tvmem[TVMEMSIZE];
71static char *axbuf;
72static char *tvmem;
73 49
74static char *check[] = { 50static char *check[] = {
75 "des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256", 51 "des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256",
@@ -80,655 +56,13 @@ static char *check[] = {
80 "lzo", "cts", NULL 56 "lzo", "cts", NULL
81}; 57};
82 58
83static void hexdump(unsigned char *buf, unsigned int len) 59static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc,
84{ 60 struct scatterlist *sg, int blen, int sec)
85 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET,
86 16, 1,
87 buf, len, false);
88}
89
90static void tcrypt_complete(struct crypto_async_request *req, int err)
91{
92 struct tcrypt_result *res = req->data;
93
94 if (err == -EINPROGRESS)
95 return;
96
97 res->err = err;
98 complete(&res->completion);
99}
100
101static void test_hash(char *algo, struct hash_testvec *template,
102 unsigned int tcount)
103{
104 unsigned int i, j, k, temp;
105 struct scatterlist sg[8];
106 char result[64];
107 struct crypto_ahash *tfm;
108 struct ahash_request *req;
109 struct tcrypt_result tresult;
110 int ret;
111 void *hash_buff;
112
113 printk("\ntesting %s\n", algo);
114
115 init_completion(&tresult.completion);
116
117 tfm = crypto_alloc_ahash(algo, 0, 0);
118 if (IS_ERR(tfm)) {
119 printk("failed to load transform for %s: %ld\n", algo,
120 PTR_ERR(tfm));
121 return;
122 }
123
124 req = ahash_request_alloc(tfm, GFP_KERNEL);
125 if (!req) {
126 printk(KERN_ERR "failed to allocate request for %s\n", algo);
127 goto out_noreq;
128 }
129 ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
130 tcrypt_complete, &tresult);
131
132 for (i = 0; i < tcount; i++) {
133 printk("test %u:\n", i + 1);
134 memset(result, 0, 64);
135
136 hash_buff = kzalloc(template[i].psize, GFP_KERNEL);
137 if (!hash_buff)
138 continue;
139
140 memcpy(hash_buff, template[i].plaintext, template[i].psize);
141 sg_init_one(&sg[0], hash_buff, template[i].psize);
142
143 if (template[i].ksize) {
144 crypto_ahash_clear_flags(tfm, ~0);
145 ret = crypto_ahash_setkey(tfm, template[i].key,
146 template[i].ksize);
147 if (ret) {
148 printk("setkey() failed ret=%d\n", ret);
149 kfree(hash_buff);
150 goto out;
151 }
152 }
153
154 ahash_request_set_crypt(req, sg, result, template[i].psize);
155 ret = crypto_ahash_digest(req);
156 switch (ret) {
157 case 0:
158 break;
159 case -EINPROGRESS:
160 case -EBUSY:
161 ret = wait_for_completion_interruptible(
162 &tresult.completion);
163 if (!ret && !(ret = tresult.err)) {
164 INIT_COMPLETION(tresult.completion);
165 break;
166 }
167 /* fall through */
168 default:
169 printk("digest () failed ret=%d\n", ret);
170 kfree(hash_buff);
171 goto out;
172 }
173
174 hexdump(result, crypto_ahash_digestsize(tfm));
175 printk("%s\n",
176 memcmp(result, template[i].digest,
177 crypto_ahash_digestsize(tfm)) ?
178 "fail" : "pass");
179 kfree(hash_buff);
180 }
181
182 printk("testing %s across pages\n", algo);
183
184 /* setup the dummy buffer first */
185 memset(xbuf, 0, XBUFSIZE);
186
187 j = 0;
188 for (i = 0; i < tcount; i++) {
189 if (template[i].np) {
190 j++;
191 printk("test %u:\n", j);
192 memset(result, 0, 64);
193
194 temp = 0;
195 sg_init_table(sg, template[i].np);
196 for (k = 0; k < template[i].np; k++) {
197 memcpy(&xbuf[IDX[k]],
198 template[i].plaintext + temp,
199 template[i].tap[k]);
200 temp += template[i].tap[k];
201 sg_set_buf(&sg[k], &xbuf[IDX[k]],
202 template[i].tap[k]);
203 }
204
205 if (template[i].ksize) {
206 crypto_ahash_clear_flags(tfm, ~0);
207 ret = crypto_ahash_setkey(tfm, template[i].key,
208 template[i].ksize);
209
210 if (ret) {
211 printk("setkey() failed ret=%d\n", ret);
212 goto out;
213 }
214 }
215
216 ahash_request_set_crypt(req, sg, result,
217 template[i].psize);
218 ret = crypto_ahash_digest(req);
219 switch (ret) {
220 case 0:
221 break;
222 case -EINPROGRESS:
223 case -EBUSY:
224 ret = wait_for_completion_interruptible(
225 &tresult.completion);
226 if (!ret && !(ret = tresult.err)) {
227 INIT_COMPLETION(tresult.completion);
228 break;
229 }
230 /* fall through */
231 default:
232 printk("digest () failed ret=%d\n", ret);
233 goto out;
234 }
235
236 hexdump(result, crypto_ahash_digestsize(tfm));
237 printk("%s\n",
238 memcmp(result, template[i].digest,
239 crypto_ahash_digestsize(tfm)) ?
240 "fail" : "pass");
241 }
242 }
243
244out:
245 ahash_request_free(req);
246out_noreq:
247 crypto_free_ahash(tfm);
248}
249
250static void test_aead(char *algo, int enc, struct aead_testvec *template,
251 unsigned int tcount)
252{
253 unsigned int ret, i, j, k, n, temp;
254 char *q;
255 struct crypto_aead *tfm;
256 char *key;
257 struct aead_request *req;
258 struct scatterlist sg[8];
259 struct scatterlist asg[8];
260 const char *e;
261 struct tcrypt_result result;
262 unsigned int authsize;
263 void *input;
264 void *assoc;
265 char iv[MAX_IVLEN];
266
267 if (enc == ENCRYPT)
268 e = "encryption";
269 else
270 e = "decryption";
271
272 printk(KERN_INFO "\ntesting %s %s\n", algo, e);
273
274 init_completion(&result.completion);
275
276 tfm = crypto_alloc_aead(algo, 0, 0);
277
278 if (IS_ERR(tfm)) {
279 printk(KERN_INFO "failed to load transform for %s: %ld\n",
280 algo, PTR_ERR(tfm));
281 return;
282 }
283
284 req = aead_request_alloc(tfm, GFP_KERNEL);
285 if (!req) {
286 printk(KERN_INFO "failed to allocate request for %s\n", algo);
287 goto out;
288 }
289
290 aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
291 tcrypt_complete, &result);
292
293 for (i = 0, j = 0; i < tcount; i++) {
294 if (!template[i].np) {
295 printk(KERN_INFO "test %u (%d bit key):\n",
296 ++j, template[i].klen * 8);
297
298 /* some tepmplates have no input data but they will
299 * touch input
300 */
301 input = kzalloc(template[i].ilen + template[i].rlen, GFP_KERNEL);
302 if (!input)
303 continue;
304
305 assoc = kzalloc(template[i].alen, GFP_KERNEL);
306 if (!assoc) {
307 kfree(input);
308 continue;
309 }
310
311 memcpy(input, template[i].input, template[i].ilen);
312 memcpy(assoc, template[i].assoc, template[i].alen);
313 if (template[i].iv)
314 memcpy(iv, template[i].iv, MAX_IVLEN);
315 else
316 memset(iv, 0, MAX_IVLEN);
317
318 crypto_aead_clear_flags(tfm, ~0);
319 if (template[i].wk)
320 crypto_aead_set_flags(
321 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
322
323 if (template[i].key)
324 key = template[i].key;
325 else
326 key = kzalloc(template[i].klen, GFP_KERNEL);
327
328 ret = crypto_aead_setkey(tfm, key,
329 template[i].klen);
330 if (ret) {
331 printk(KERN_INFO "setkey() failed flags=%x\n",
332 crypto_aead_get_flags(tfm));
333
334 if (!template[i].fail)
335 goto next_one;
336 }
337
338 authsize = abs(template[i].rlen - template[i].ilen);
339 ret = crypto_aead_setauthsize(tfm, authsize);
340 if (ret) {
341 printk(KERN_INFO
342 "failed to set authsize = %u\n",
343 authsize);
344 goto next_one;
345 }
346
347 sg_init_one(&sg[0], input,
348 template[i].ilen + (enc ? authsize : 0));
349
350 sg_init_one(&asg[0], assoc, template[i].alen);
351
352 aead_request_set_crypt(req, sg, sg,
353 template[i].ilen, iv);
354
355 aead_request_set_assoc(req, asg, template[i].alen);
356
357 ret = enc ?
358 crypto_aead_encrypt(req) :
359 crypto_aead_decrypt(req);
360
361 switch (ret) {
362 case 0:
363 break;
364 case -EINPROGRESS:
365 case -EBUSY:
366 ret = wait_for_completion_interruptible(
367 &result.completion);
368 if (!ret && !(ret = result.err)) {
369 INIT_COMPLETION(result.completion);
370 break;
371 }
372 /* fall through */
373 default:
374 printk(KERN_INFO "%s () failed err=%d\n",
375 e, -ret);
376 goto next_one;
377 }
378
379 q = input;
380 hexdump(q, template[i].rlen);
381
382 printk(KERN_INFO "enc/dec: %s\n",
383 memcmp(q, template[i].result,
384 template[i].rlen) ? "fail" : "pass");
385next_one:
386 if (!template[i].key)
387 kfree(key);
388 kfree(assoc);
389 kfree(input);
390 }
391 }
392
393 printk(KERN_INFO "\ntesting %s %s across pages (chunking)\n", algo, e);
394 memset(axbuf, 0, XBUFSIZE);
395
396 for (i = 0, j = 0; i < tcount; i++) {
397 if (template[i].np) {
398 printk(KERN_INFO "test %u (%d bit key):\n",
399 ++j, template[i].klen * 8);
400
401 if (template[i].iv)
402 memcpy(iv, template[i].iv, MAX_IVLEN);
403 else
404 memset(iv, 0, MAX_IVLEN);
405
406 crypto_aead_clear_flags(tfm, ~0);
407 if (template[i].wk)
408 crypto_aead_set_flags(
409 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
410 key = template[i].key;
411
412 ret = crypto_aead_setkey(tfm, key, template[i].klen);
413 if (ret) {
414 printk(KERN_INFO "setkey() failed flags=%x\n",
415 crypto_aead_get_flags(tfm));
416
417 if (!template[i].fail)
418 goto out;
419 }
420
421 memset(xbuf, 0, XBUFSIZE);
422 sg_init_table(sg, template[i].np);
423 for (k = 0, temp = 0; k < template[i].np; k++) {
424 memcpy(&xbuf[IDX[k]],
425 template[i].input + temp,
426 template[i].tap[k]);
427 temp += template[i].tap[k];
428 sg_set_buf(&sg[k], &xbuf[IDX[k]],
429 template[i].tap[k]);
430 }
431
432 authsize = abs(template[i].rlen - template[i].ilen);
433 ret = crypto_aead_setauthsize(tfm, authsize);
434 if (ret) {
435 printk(KERN_INFO
436 "failed to set authsize = %u\n",
437 authsize);
438 goto out;
439 }
440
441 if (enc)
442 sg[k - 1].length += authsize;
443
444 sg_init_table(asg, template[i].anp);
445 for (k = 0, temp = 0; k < template[i].anp; k++) {
446 memcpy(&axbuf[IDX[k]],
447 template[i].assoc + temp,
448 template[i].atap[k]);
449 temp += template[i].atap[k];
450 sg_set_buf(&asg[k], &axbuf[IDX[k]],
451 template[i].atap[k]);
452 }
453
454 aead_request_set_crypt(req, sg, sg,
455 template[i].ilen,
456 iv);
457
458 aead_request_set_assoc(req, asg, template[i].alen);
459
460 ret = enc ?
461 crypto_aead_encrypt(req) :
462 crypto_aead_decrypt(req);
463
464 switch (ret) {
465 case 0:
466 break;
467 case -EINPROGRESS:
468 case -EBUSY:
469 ret = wait_for_completion_interruptible(
470 &result.completion);
471 if (!ret && !(ret = result.err)) {
472 INIT_COMPLETION(result.completion);
473 break;
474 }
475 /* fall through */
476 default:
477 printk(KERN_INFO "%s () failed err=%d\n",
478 e, -ret);
479 goto out;
480 }
481
482 for (k = 0, temp = 0; k < template[i].np; k++) {
483 printk(KERN_INFO "page %u\n", k);
484 q = &xbuf[IDX[k]];
485
486 n = template[i].tap[k];
487 if (k == template[i].np - 1)
488 n += enc ? authsize : -authsize;
489 hexdump(q, n);
490 printk(KERN_INFO "%s\n",
491 memcmp(q, template[i].result + temp, n) ?
492 "fail" : "pass");
493
494 q += n;
495 if (k == template[i].np - 1 && !enc) {
496 if (memcmp(q, template[i].input +
497 temp + n, authsize))
498 n = authsize;
499 else
500 n = 0;
501 } else {
502 for (n = 0; q[n]; n++)
503 ;
504 }
505 if (n) {
506 printk("Result buffer corruption %u "
507 "bytes:\n", n);
508 hexdump(q, n);
509 }
510
511 temp += template[i].tap[k];
512 }
513 }
514 }
515
516out:
517 crypto_free_aead(tfm);
518 aead_request_free(req);
519}
520
521static void test_cipher(char *algo, int enc,
522 struct cipher_testvec *template, unsigned int tcount)
523{ 61{
524 unsigned int ret, i, j, k, n, temp;
525 char *q;
526 struct crypto_ablkcipher *tfm;
527 struct ablkcipher_request *req;
528 struct scatterlist sg[8];
529 const char *e;
530 struct tcrypt_result result;
531 void *data;
532 char iv[MAX_IVLEN];
533
534 if (enc == ENCRYPT)
535 e = "encryption";
536 else
537 e = "decryption";
538
539 printk("\ntesting %s %s\n", algo, e);
540
541 init_completion(&result.completion);
542 tfm = crypto_alloc_ablkcipher(algo, 0, 0);
543
544 if (IS_ERR(tfm)) {
545 printk("failed to load transform for %s: %ld\n", algo,
546 PTR_ERR(tfm));
547 return;
548 }
549
550 req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
551 if (!req) {
552 printk("failed to allocate request for %s\n", algo);
553 goto out;
554 }
555
556 ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
557 tcrypt_complete, &result);
558
559 j = 0;
560 for (i = 0; i < tcount; i++) {
561
562 data = kzalloc(template[i].ilen, GFP_KERNEL);
563 if (!data)
564 continue;
565
566 memcpy(data, template[i].input, template[i].ilen);
567 if (template[i].iv)
568 memcpy(iv, template[i].iv, MAX_IVLEN);
569 else
570 memset(iv, 0, MAX_IVLEN);
571
572 if (!(template[i].np)) {
573 j++;
574 printk("test %u (%d bit key):\n",
575 j, template[i].klen * 8);
576
577 crypto_ablkcipher_clear_flags(tfm, ~0);
578 if (template[i].wk)
579 crypto_ablkcipher_set_flags(
580 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
581
582 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
583 template[i].klen);
584 if (ret) {
585 printk("setkey() failed flags=%x\n",
586 crypto_ablkcipher_get_flags(tfm));
587
588 if (!template[i].fail) {
589 kfree(data);
590 goto out;
591 }
592 }
593
594 sg_init_one(&sg[0], data, template[i].ilen);
595
596 ablkcipher_request_set_crypt(req, sg, sg,
597 template[i].ilen, iv);
598 ret = enc ?
599 crypto_ablkcipher_encrypt(req) :
600 crypto_ablkcipher_decrypt(req);
601
602 switch (ret) {
603 case 0:
604 break;
605 case -EINPROGRESS:
606 case -EBUSY:
607 ret = wait_for_completion_interruptible(
608 &result.completion);
609 if (!ret && !((ret = result.err))) {
610 INIT_COMPLETION(result.completion);
611 break;
612 }
613 /* fall through */
614 default:
615 printk("%s () failed err=%d\n", e, -ret);
616 kfree(data);
617 goto out;
618 }
619
620 q = data;
621 hexdump(q, template[i].rlen);
622
623 printk("%s\n",
624 memcmp(q, template[i].result,
625 template[i].rlen) ? "fail" : "pass");
626 }
627 kfree(data);
628 }
629
630 printk("\ntesting %s %s across pages (chunking)\n", algo, e);
631
632 j = 0;
633 for (i = 0; i < tcount; i++) {
634
635 if (template[i].iv)
636 memcpy(iv, template[i].iv, MAX_IVLEN);
637 else
638 memset(iv, 0, MAX_IVLEN);
639
640 if (template[i].np) {
641 j++;
642 printk("test %u (%d bit key):\n",
643 j, template[i].klen * 8);
644
645 memset(xbuf, 0, XBUFSIZE);
646 crypto_ablkcipher_clear_flags(tfm, ~0);
647 if (template[i].wk)
648 crypto_ablkcipher_set_flags(
649 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
650
651 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
652 template[i].klen);
653 if (ret) {
654 printk("setkey() failed flags=%x\n",
655 crypto_ablkcipher_get_flags(tfm));
656
657 if (!template[i].fail)
658 goto out;
659 }
660
661 temp = 0;
662 sg_init_table(sg, template[i].np);
663 for (k = 0; k < template[i].np; k++) {
664 memcpy(&xbuf[IDX[k]],
665 template[i].input + temp,
666 template[i].tap[k]);
667 temp += template[i].tap[k];
668 sg_set_buf(&sg[k], &xbuf[IDX[k]],
669 template[i].tap[k]);
670 }
671
672 ablkcipher_request_set_crypt(req, sg, sg,
673 template[i].ilen, iv);
674
675 ret = enc ?
676 crypto_ablkcipher_encrypt(req) :
677 crypto_ablkcipher_decrypt(req);
678
679 switch (ret) {
680 case 0:
681 break;
682 case -EINPROGRESS:
683 case -EBUSY:
684 ret = wait_for_completion_interruptible(
685 &result.completion);
686 if (!ret && !((ret = result.err))) {
687 INIT_COMPLETION(result.completion);
688 break;
689 }
690 /* fall through */
691 default:
692 printk("%s () failed err=%d\n", e, -ret);
693 goto out;
694 }
695
696 temp = 0;
697 for (k = 0; k < template[i].np; k++) {
698 printk("page %u\n", k);
699 q = &xbuf[IDX[k]];
700 hexdump(q, template[i].tap[k]);
701 printk("%s\n",
702 memcmp(q, template[i].result + temp,
703 template[i].tap[k]) ? "fail" :
704 "pass");
705
706 for (n = 0; q[template[i].tap[k] + n]; n++)
707 ;
708 if (n) {
709 printk("Result buffer corruption %u "
710 "bytes:\n", n);
711 hexdump(&q[template[i].tap[k]], n);
712 }
713 temp += template[i].tap[k];
714 }
715 }
716 }
717out:
718 crypto_free_ablkcipher(tfm);
719 ablkcipher_request_free(req);
720}
721
722static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc, char *p,
723 int blen, int sec)
724{
725 struct scatterlist sg[1];
726 unsigned long start, end; 62 unsigned long start, end;
727 int bcount; 63 int bcount;
728 int ret; 64 int ret;
729 65
730 sg_init_one(sg, p, blen);
731
732 for (start = jiffies, end = start + sec * HZ, bcount = 0; 66 for (start = jiffies, end = start + sec * HZ, bcount = 0;
733 time_before(jiffies, end); bcount++) { 67 time_before(jiffies, end); bcount++) {
734 if (enc) 68 if (enc)
@@ -745,16 +79,13 @@ static int test_cipher_jiffies(struct blkcipher_desc *desc, int enc, char *p,
745 return 0; 79 return 0;
746} 80}
747 81
748static int test_cipher_cycles(struct blkcipher_desc *desc, int enc, char *p, 82static int test_cipher_cycles(struct blkcipher_desc *desc, int enc,
749 int blen) 83 struct scatterlist *sg, int blen)
750{ 84{
751 struct scatterlist sg[1];
752 unsigned long cycles = 0; 85 unsigned long cycles = 0;
753 int ret = 0; 86 int ret = 0;
754 int i; 87 int i;
755 88
756 sg_init_one(sg, p, blen);
757
758 local_bh_disable(); 89 local_bh_disable();
759 local_irq_disable(); 90 local_irq_disable();
760 91
@@ -799,12 +130,12 @@ out:
799 130
800static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 }; 131static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 };
801 132
802static void test_cipher_speed(char *algo, int enc, unsigned int sec, 133static void test_cipher_speed(const char *algo, int enc, unsigned int sec,
803 struct cipher_testvec *template, 134 struct cipher_speed_template *template,
804 unsigned int tcount, u8 *keysize) 135 unsigned int tcount, u8 *keysize)
805{ 136{
806 unsigned int ret, i, j, iv_len; 137 unsigned int ret, i, j, iv_len;
807 unsigned char *key, *p, iv[128]; 138 const char *key, iv[128];
808 struct crypto_blkcipher *tfm; 139 struct crypto_blkcipher *tfm;
809 struct blkcipher_desc desc; 140 struct blkcipher_desc desc;
810 const char *e; 141 const char *e;
@@ -832,27 +163,28 @@ static void test_cipher_speed(char *algo, int enc, unsigned int sec,
832 163
833 b_size = block_sizes; 164 b_size = block_sizes;
834 do { 165 do {
166 struct scatterlist sg[TVMEMSIZE];
835 167
836 if ((*keysize + *b_size) > TVMEMSIZE) { 168 if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
837 printk("template (%u) too big for tvmem (%u)\n", 169 printk("template (%u) too big for "
838 *keysize + *b_size, TVMEMSIZE); 170 "tvmem (%lu)\n", *keysize + *b_size,
171 TVMEMSIZE * PAGE_SIZE);
839 goto out; 172 goto out;
840 } 173 }
841 174
842 printk("test %u (%d bit key, %d byte blocks): ", i, 175 printk("test %u (%d bit key, %d byte blocks): ", i,
843 *keysize * 8, *b_size); 176 *keysize * 8, *b_size);
844 177
845 memset(tvmem, 0xff, *keysize + *b_size); 178 memset(tvmem[0], 0xff, PAGE_SIZE);
846 179
847 /* set key, plain text and IV */ 180 /* set key, plain text and IV */
848 key = (unsigned char *)tvmem; 181 key = tvmem[0];
849 for (j = 0; j < tcount; j++) { 182 for (j = 0; j < tcount; j++) {
850 if (template[j].klen == *keysize) { 183 if (template[j].klen == *keysize) {
851 key = template[j].key; 184 key = template[j].key;
852 break; 185 break;
853 } 186 }
854 } 187 }
855 p = (unsigned char *)tvmem + *keysize;
856 188
857 ret = crypto_blkcipher_setkey(tfm, key, *keysize); 189 ret = crypto_blkcipher_setkey(tfm, key, *keysize);
858 if (ret) { 190 if (ret) {
@@ -861,6 +193,14 @@ static void test_cipher_speed(char *algo, int enc, unsigned int sec,
861 goto out; 193 goto out;
862 } 194 }
863 195
196 sg_init_table(sg, TVMEMSIZE);
197 sg_set_buf(sg, tvmem[0] + *keysize,
198 PAGE_SIZE - *keysize);
199 for (j = 1; j < TVMEMSIZE; j++) {
200 sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
201 memset (tvmem[j], 0xff, PAGE_SIZE);
202 }
203
864 iv_len = crypto_blkcipher_ivsize(tfm); 204 iv_len = crypto_blkcipher_ivsize(tfm);
865 if (iv_len) { 205 if (iv_len) {
866 memset(&iv, 0xff, iv_len); 206 memset(&iv, 0xff, iv_len);
@@ -868,9 +208,11 @@ static void test_cipher_speed(char *algo, int enc, unsigned int sec,
868 } 208 }
869 209
870 if (sec) 210 if (sec)
871 ret = test_cipher_jiffies(&desc, enc, p, *b_size, sec); 211 ret = test_cipher_jiffies(&desc, enc, sg,
212 *b_size, sec);
872 else 213 else
873 ret = test_cipher_cycles(&desc, enc, p, *b_size); 214 ret = test_cipher_cycles(&desc, enc, sg,
215 *b_size);
874 216
875 if (ret) { 217 if (ret) {
876 printk("%s() failed flags=%x\n", e, desc.flags); 218 printk("%s() failed flags=%x\n", e, desc.flags);
@@ -886,19 +228,16 @@ out:
886 crypto_free_blkcipher(tfm); 228 crypto_free_blkcipher(tfm);
887} 229}
888 230
889static int test_hash_jiffies_digest(struct hash_desc *desc, char *p, int blen, 231static int test_hash_jiffies_digest(struct hash_desc *desc,
232 struct scatterlist *sg, int blen,
890 char *out, int sec) 233 char *out, int sec)
891{ 234{
892 struct scatterlist sg[1];
893 unsigned long start, end; 235 unsigned long start, end;
894 int bcount; 236 int bcount;
895 int ret; 237 int ret;
896 238
897 sg_init_table(sg, 1);
898
899 for (start = jiffies, end = start + sec * HZ, bcount = 0; 239 for (start = jiffies, end = start + sec * HZ, bcount = 0;
900 time_before(jiffies, end); bcount++) { 240 time_before(jiffies, end); bcount++) {
901 sg_set_buf(sg, p, blen);
902 ret = crypto_hash_digest(desc, sg, blen, out); 241 ret = crypto_hash_digest(desc, sg, blen, out);
903 if (ret) 242 if (ret)
904 return ret; 243 return ret;
@@ -910,18 +249,15 @@ static int test_hash_jiffies_digest(struct hash_desc *desc, char *p, int blen,
910 return 0; 249 return 0;
911} 250}
912 251
913static int test_hash_jiffies(struct hash_desc *desc, char *p, int blen, 252static int test_hash_jiffies(struct hash_desc *desc, struct scatterlist *sg,
914 int plen, char *out, int sec) 253 int blen, int plen, char *out, int sec)
915{ 254{
916 struct scatterlist sg[1];
917 unsigned long start, end; 255 unsigned long start, end;
918 int bcount, pcount; 256 int bcount, pcount;
919 int ret; 257 int ret;
920 258
921 if (plen == blen) 259 if (plen == blen)
922 return test_hash_jiffies_digest(desc, p, blen, out, sec); 260 return test_hash_jiffies_digest(desc, sg, blen, out, sec);
923
924 sg_init_table(sg, 1);
925 261
926 for (start = jiffies, end = start + sec * HZ, bcount = 0; 262 for (start = jiffies, end = start + sec * HZ, bcount = 0;
927 time_before(jiffies, end); bcount++) { 263 time_before(jiffies, end); bcount++) {
@@ -929,7 +265,6 @@ static int test_hash_jiffies(struct hash_desc *desc, char *p, int blen,
929 if (ret) 265 if (ret)
930 return ret; 266 return ret;
931 for (pcount = 0; pcount < blen; pcount += plen) { 267 for (pcount = 0; pcount < blen; pcount += plen) {
932 sg_set_buf(sg, p + pcount, plen);
933 ret = crypto_hash_update(desc, sg, plen); 268 ret = crypto_hash_update(desc, sg, plen);
934 if (ret) 269 if (ret)
935 return ret; 270 return ret;
@@ -946,22 +281,18 @@ static int test_hash_jiffies(struct hash_desc *desc, char *p, int blen,
946 return 0; 281 return 0;
947} 282}
948 283
949static int test_hash_cycles_digest(struct hash_desc *desc, char *p, int blen, 284static int test_hash_cycles_digest(struct hash_desc *desc,
950 char *out) 285 struct scatterlist *sg, int blen, char *out)
951{ 286{
952 struct scatterlist sg[1];
953 unsigned long cycles = 0; 287 unsigned long cycles = 0;
954 int i; 288 int i;
955 int ret; 289 int ret;
956 290
957 sg_init_table(sg, 1);
958
959 local_bh_disable(); 291 local_bh_disable();
960 local_irq_disable(); 292 local_irq_disable();
961 293
962 /* Warm-up run. */ 294 /* Warm-up run. */
963 for (i = 0; i < 4; i++) { 295 for (i = 0; i < 4; i++) {
964 sg_set_buf(sg, p, blen);
965 ret = crypto_hash_digest(desc, sg, blen, out); 296 ret = crypto_hash_digest(desc, sg, blen, out);
966 if (ret) 297 if (ret)
967 goto out; 298 goto out;
@@ -973,7 +304,6 @@ static int test_hash_cycles_digest(struct hash_desc *desc, char *p, int blen,
973 304
974 start = get_cycles(); 305 start = get_cycles();
975 306
976 sg_set_buf(sg, p, blen);
977 ret = crypto_hash_digest(desc, sg, blen, out); 307 ret = crypto_hash_digest(desc, sg, blen, out);
978 if (ret) 308 if (ret)
979 goto out; 309 goto out;
@@ -996,18 +326,15 @@ out:
996 return 0; 326 return 0;
997} 327}
998 328
999static int test_hash_cycles(struct hash_desc *desc, char *p, int blen, 329static int test_hash_cycles(struct hash_desc *desc, struct scatterlist *sg,
1000 int plen, char *out) 330 int blen, int plen, char *out)
1001{ 331{
1002 struct scatterlist sg[1];
1003 unsigned long cycles = 0; 332 unsigned long cycles = 0;
1004 int i, pcount; 333 int i, pcount;
1005 int ret; 334 int ret;
1006 335
1007 if (plen == blen) 336 if (plen == blen)
1008 return test_hash_cycles_digest(desc, p, blen, out); 337 return test_hash_cycles_digest(desc, sg, blen, out);
1009
1010 sg_init_table(sg, 1);
1011 338
1012 local_bh_disable(); 339 local_bh_disable();
1013 local_irq_disable(); 340 local_irq_disable();
@@ -1018,7 +345,6 @@ static int test_hash_cycles(struct hash_desc *desc, char *p, int blen,
1018 if (ret) 345 if (ret)
1019 goto out; 346 goto out;
1020 for (pcount = 0; pcount < blen; pcount += plen) { 347 for (pcount = 0; pcount < blen; pcount += plen) {
1021 sg_set_buf(sg, p + pcount, plen);
1022 ret = crypto_hash_update(desc, sg, plen); 348 ret = crypto_hash_update(desc, sg, plen);
1023 if (ret) 349 if (ret)
1024 goto out; 350 goto out;
@@ -1038,7 +364,6 @@ static int test_hash_cycles(struct hash_desc *desc, char *p, int blen,
1038 if (ret) 364 if (ret)
1039 goto out; 365 goto out;
1040 for (pcount = 0; pcount < blen; pcount += plen) { 366 for (pcount = 0; pcount < blen; pcount += plen) {
1041 sg_set_buf(sg, p + pcount, plen);
1042 ret = crypto_hash_update(desc, sg, plen); 367 ret = crypto_hash_update(desc, sg, plen);
1043 if (ret) 368 if (ret)
1044 goto out; 369 goto out;
@@ -1065,9 +390,10 @@ out:
1065 return 0; 390 return 0;
1066} 391}
1067 392
1068static void test_hash_speed(char *algo, unsigned int sec, 393static void test_hash_speed(const char *algo, unsigned int sec,
1069 struct hash_speed *speed) 394 struct hash_speed *speed)
1070{ 395{
396 struct scatterlist sg[TVMEMSIZE];
1071 struct crypto_hash *tfm; 397 struct crypto_hash *tfm;
1072 struct hash_desc desc; 398 struct hash_desc desc;
1073 char output[1024]; 399 char output[1024];
@@ -1093,23 +419,27 @@ static void test_hash_speed(char *algo, unsigned int sec,
1093 goto out; 419 goto out;
1094 } 420 }
1095 421
422 sg_init_table(sg, TVMEMSIZE);
423 for (i = 0; i < TVMEMSIZE; i++) {
424 sg_set_buf(sg + i, tvmem[i], PAGE_SIZE);
425 memset(tvmem[i], 0xff, PAGE_SIZE);
426 }
427
1096 for (i = 0; speed[i].blen != 0; i++) { 428 for (i = 0; speed[i].blen != 0; i++) {
1097 if (speed[i].blen > TVMEMSIZE) { 429 if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
1098 printk("template (%u) too big for tvmem (%u)\n", 430 printk("template (%u) too big for tvmem (%lu)\n",
1099 speed[i].blen, TVMEMSIZE); 431 speed[i].blen, TVMEMSIZE * PAGE_SIZE);
1100 goto out; 432 goto out;
1101 } 433 }
1102 434
1103 printk("test%3u (%5u byte blocks,%5u bytes per update,%4u updates): ", 435 printk("test%3u (%5u byte blocks,%5u bytes per update,%4u updates): ",
1104 i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen); 436 i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
1105 437
1106 memset(tvmem, 0xff, speed[i].blen);
1107
1108 if (sec) 438 if (sec)
1109 ret = test_hash_jiffies(&desc, tvmem, speed[i].blen, 439 ret = test_hash_jiffies(&desc, sg, speed[i].blen,
1110 speed[i].plen, output, sec); 440 speed[i].plen, output, sec);
1111 else 441 else
1112 ret = test_hash_cycles(&desc, tvmem, speed[i].blen, 442 ret = test_hash_cycles(&desc, sg, speed[i].blen,
1113 speed[i].plen, output); 443 speed[i].plen, output);
1114 444
1115 if (ret) { 445 if (ret) {
@@ -1122,73 +452,6 @@ out:
1122 crypto_free_hash(tfm); 452 crypto_free_hash(tfm);
1123} 453}
1124 454
1125static void test_comp(char *algo, struct comp_testvec *ctemplate,
1126 struct comp_testvec *dtemplate, int ctcount, int dtcount)
1127{
1128 unsigned int i;
1129 char result[COMP_BUF_SIZE];
1130 struct crypto_comp *tfm;
1131 unsigned int tsize;
1132
1133 printk("\ntesting %s compression\n", algo);
1134
1135 tfm = crypto_alloc_comp(algo, 0, CRYPTO_ALG_ASYNC);
1136 if (IS_ERR(tfm)) {
1137 printk("failed to load transform for %s\n", algo);
1138 return;
1139 }
1140
1141 for (i = 0; i < ctcount; i++) {
1142 int ilen, ret, dlen = COMP_BUF_SIZE;
1143
1144 printk("test %u:\n", i + 1);
1145 memset(result, 0, sizeof (result));
1146
1147 ilen = ctemplate[i].inlen;
1148 ret = crypto_comp_compress(tfm, ctemplate[i].input,
1149 ilen, result, &dlen);
1150 if (ret) {
1151 printk("fail: ret=%d\n", ret);
1152 continue;
1153 }
1154 hexdump(result, dlen);
1155 printk("%s (ratio %d:%d)\n",
1156 memcmp(result, ctemplate[i].output, dlen) ? "fail" : "pass",
1157 ilen, dlen);
1158 }
1159
1160 printk("\ntesting %s decompression\n", algo);
1161
1162 tsize = sizeof(struct comp_testvec);
1163 tsize *= dtcount;
1164 if (tsize > TVMEMSIZE) {
1165 printk("template (%u) too big for tvmem (%u)\n", tsize,
1166 TVMEMSIZE);
1167 goto out;
1168 }
1169
1170 for (i = 0; i < dtcount; i++) {
1171 int ilen, ret, dlen = COMP_BUF_SIZE;
1172
1173 printk("test %u:\n", i + 1);
1174 memset(result, 0, sizeof (result));
1175
1176 ilen = dtemplate[i].inlen;
1177 ret = crypto_comp_decompress(tfm, dtemplate[i].input,
1178 ilen, result, &dlen);
1179 if (ret) {
1180 printk("fail: ret=%d\n", ret);
1181 continue;
1182 }
1183 hexdump(result, dlen);
1184 printk("%s (ratio %d:%d)\n",
1185 memcmp(result, dtemplate[i].output, dlen) ? "fail" : "pass",
1186 ilen, dlen);
1187 }
1188out:
1189 crypto_free_comp(tfm);
1190}
1191
1192static void test_available(void) 455static void test_available(void)
1193{ 456{
1194 char **name = check; 457 char **name = check;
@@ -1201,549 +464,237 @@ static void test_available(void)
1201 } 464 }
1202} 465}
1203 466
1204static void do_test(void) 467static inline int tcrypt_test(const char *alg)
1205{ 468{
1206 switch (mode) { 469 return alg_test(alg, alg, 0, 0);
470}
471
472static void do_test(int m)
473{
474 int i;
1207 475
476 switch (m) {
1208 case 0: 477 case 0:
1209 test_hash("md5", md5_tv_template, MD5_TEST_VECTORS); 478 for (i = 1; i < 200; i++)
1210 479 do_test(i);
1211 test_hash("sha1", sha1_tv_template, SHA1_TEST_VECTORS);
1212
1213 //DES
1214 test_cipher("ecb(des)", ENCRYPT, des_enc_tv_template,
1215 DES_ENC_TEST_VECTORS);
1216 test_cipher("ecb(des)", DECRYPT, des_dec_tv_template,
1217 DES_DEC_TEST_VECTORS);
1218 test_cipher("cbc(des)", ENCRYPT, des_cbc_enc_tv_template,
1219 DES_CBC_ENC_TEST_VECTORS);
1220 test_cipher("cbc(des)", DECRYPT, des_cbc_dec_tv_template,
1221 DES_CBC_DEC_TEST_VECTORS);
1222
1223 //DES3_EDE
1224 test_cipher("ecb(des3_ede)", ENCRYPT, des3_ede_enc_tv_template,
1225 DES3_EDE_ENC_TEST_VECTORS);
1226 test_cipher("ecb(des3_ede)", DECRYPT, des3_ede_dec_tv_template,
1227 DES3_EDE_DEC_TEST_VECTORS);
1228
1229 test_cipher("cbc(des3_ede)", ENCRYPT,
1230 des3_ede_cbc_enc_tv_template,
1231 DES3_EDE_CBC_ENC_TEST_VECTORS);
1232
1233 test_cipher("cbc(des3_ede)", DECRYPT,
1234 des3_ede_cbc_dec_tv_template,
1235 DES3_EDE_CBC_DEC_TEST_VECTORS);
1236
1237 test_hash("md4", md4_tv_template, MD4_TEST_VECTORS);
1238
1239 test_hash("sha224", sha224_tv_template, SHA224_TEST_VECTORS);
1240
1241 test_hash("sha256", sha256_tv_template, SHA256_TEST_VECTORS);
1242
1243 //BLOWFISH
1244 test_cipher("ecb(blowfish)", ENCRYPT, bf_enc_tv_template,
1245 BF_ENC_TEST_VECTORS);
1246 test_cipher("ecb(blowfish)", DECRYPT, bf_dec_tv_template,
1247 BF_DEC_TEST_VECTORS);
1248 test_cipher("cbc(blowfish)", ENCRYPT, bf_cbc_enc_tv_template,
1249 BF_CBC_ENC_TEST_VECTORS);
1250 test_cipher("cbc(blowfish)", DECRYPT, bf_cbc_dec_tv_template,
1251 BF_CBC_DEC_TEST_VECTORS);
1252
1253 //TWOFISH
1254 test_cipher("ecb(twofish)", ENCRYPT, tf_enc_tv_template,
1255 TF_ENC_TEST_VECTORS);
1256 test_cipher("ecb(twofish)", DECRYPT, tf_dec_tv_template,
1257 TF_DEC_TEST_VECTORS);
1258 test_cipher("cbc(twofish)", ENCRYPT, tf_cbc_enc_tv_template,
1259 TF_CBC_ENC_TEST_VECTORS);
1260 test_cipher("cbc(twofish)", DECRYPT, tf_cbc_dec_tv_template,
1261 TF_CBC_DEC_TEST_VECTORS);
1262
1263 //SERPENT
1264 test_cipher("ecb(serpent)", ENCRYPT, serpent_enc_tv_template,
1265 SERPENT_ENC_TEST_VECTORS);
1266 test_cipher("ecb(serpent)", DECRYPT, serpent_dec_tv_template,
1267 SERPENT_DEC_TEST_VECTORS);
1268
1269 //TNEPRES
1270 test_cipher("ecb(tnepres)", ENCRYPT, tnepres_enc_tv_template,
1271 TNEPRES_ENC_TEST_VECTORS);
1272 test_cipher("ecb(tnepres)", DECRYPT, tnepres_dec_tv_template,
1273 TNEPRES_DEC_TEST_VECTORS);
1274
1275 //AES
1276 test_cipher("ecb(aes)", ENCRYPT, aes_enc_tv_template,
1277 AES_ENC_TEST_VECTORS);
1278 test_cipher("ecb(aes)", DECRYPT, aes_dec_tv_template,
1279 AES_DEC_TEST_VECTORS);
1280 test_cipher("cbc(aes)", ENCRYPT, aes_cbc_enc_tv_template,
1281 AES_CBC_ENC_TEST_VECTORS);
1282 test_cipher("cbc(aes)", DECRYPT, aes_cbc_dec_tv_template,
1283 AES_CBC_DEC_TEST_VECTORS);
1284 test_cipher("lrw(aes)", ENCRYPT, aes_lrw_enc_tv_template,
1285 AES_LRW_ENC_TEST_VECTORS);
1286 test_cipher("lrw(aes)", DECRYPT, aes_lrw_dec_tv_template,
1287 AES_LRW_DEC_TEST_VECTORS);
1288 test_cipher("xts(aes)", ENCRYPT, aes_xts_enc_tv_template,
1289 AES_XTS_ENC_TEST_VECTORS);
1290 test_cipher("xts(aes)", DECRYPT, aes_xts_dec_tv_template,
1291 AES_XTS_DEC_TEST_VECTORS);
1292 test_cipher("rfc3686(ctr(aes))", ENCRYPT, aes_ctr_enc_tv_template,
1293 AES_CTR_ENC_TEST_VECTORS);
1294 test_cipher("rfc3686(ctr(aes))", DECRYPT, aes_ctr_dec_tv_template,
1295 AES_CTR_DEC_TEST_VECTORS);
1296 test_aead("gcm(aes)", ENCRYPT, aes_gcm_enc_tv_template,
1297 AES_GCM_ENC_TEST_VECTORS);
1298 test_aead("gcm(aes)", DECRYPT, aes_gcm_dec_tv_template,
1299 AES_GCM_DEC_TEST_VECTORS);
1300 test_aead("ccm(aes)", ENCRYPT, aes_ccm_enc_tv_template,
1301 AES_CCM_ENC_TEST_VECTORS);
1302 test_aead("ccm(aes)", DECRYPT, aes_ccm_dec_tv_template,
1303 AES_CCM_DEC_TEST_VECTORS);
1304
1305 //CAST5
1306 test_cipher("ecb(cast5)", ENCRYPT, cast5_enc_tv_template,
1307 CAST5_ENC_TEST_VECTORS);
1308 test_cipher("ecb(cast5)", DECRYPT, cast5_dec_tv_template,
1309 CAST5_DEC_TEST_VECTORS);
1310
1311 //CAST6
1312 test_cipher("ecb(cast6)", ENCRYPT, cast6_enc_tv_template,
1313 CAST6_ENC_TEST_VECTORS);
1314 test_cipher("ecb(cast6)", DECRYPT, cast6_dec_tv_template,
1315 CAST6_DEC_TEST_VECTORS);
1316
1317 //ARC4
1318 test_cipher("ecb(arc4)", ENCRYPT, arc4_enc_tv_template,
1319 ARC4_ENC_TEST_VECTORS);
1320 test_cipher("ecb(arc4)", DECRYPT, arc4_dec_tv_template,
1321 ARC4_DEC_TEST_VECTORS);
1322
1323 //TEA
1324 test_cipher("ecb(tea)", ENCRYPT, tea_enc_tv_template,
1325 TEA_ENC_TEST_VECTORS);
1326 test_cipher("ecb(tea)", DECRYPT, tea_dec_tv_template,
1327 TEA_DEC_TEST_VECTORS);
1328
1329
1330 //XTEA
1331 test_cipher("ecb(xtea)", ENCRYPT, xtea_enc_tv_template,
1332 XTEA_ENC_TEST_VECTORS);
1333 test_cipher("ecb(xtea)", DECRYPT, xtea_dec_tv_template,
1334 XTEA_DEC_TEST_VECTORS);
1335
1336 //KHAZAD
1337 test_cipher("ecb(khazad)", ENCRYPT, khazad_enc_tv_template,
1338 KHAZAD_ENC_TEST_VECTORS);
1339 test_cipher("ecb(khazad)", DECRYPT, khazad_dec_tv_template,
1340 KHAZAD_DEC_TEST_VECTORS);
1341
1342 //ANUBIS
1343 test_cipher("ecb(anubis)", ENCRYPT, anubis_enc_tv_template,
1344 ANUBIS_ENC_TEST_VECTORS);
1345 test_cipher("ecb(anubis)", DECRYPT, anubis_dec_tv_template,
1346 ANUBIS_DEC_TEST_VECTORS);
1347 test_cipher("cbc(anubis)", ENCRYPT, anubis_cbc_enc_tv_template,
1348 ANUBIS_CBC_ENC_TEST_VECTORS);
1349 test_cipher("cbc(anubis)", DECRYPT, anubis_cbc_dec_tv_template,
1350 ANUBIS_CBC_ENC_TEST_VECTORS);
1351
1352 //XETA
1353 test_cipher("ecb(xeta)", ENCRYPT, xeta_enc_tv_template,
1354 XETA_ENC_TEST_VECTORS);
1355 test_cipher("ecb(xeta)", DECRYPT, xeta_dec_tv_template,
1356 XETA_DEC_TEST_VECTORS);
1357
1358 //FCrypt
1359 test_cipher("pcbc(fcrypt)", ENCRYPT, fcrypt_pcbc_enc_tv_template,
1360 FCRYPT_ENC_TEST_VECTORS);
1361 test_cipher("pcbc(fcrypt)", DECRYPT, fcrypt_pcbc_dec_tv_template,
1362 FCRYPT_DEC_TEST_VECTORS);
1363
1364 //CAMELLIA
1365 test_cipher("ecb(camellia)", ENCRYPT,
1366 camellia_enc_tv_template,
1367 CAMELLIA_ENC_TEST_VECTORS);
1368 test_cipher("ecb(camellia)", DECRYPT,
1369 camellia_dec_tv_template,
1370 CAMELLIA_DEC_TEST_VECTORS);
1371 test_cipher("cbc(camellia)", ENCRYPT,
1372 camellia_cbc_enc_tv_template,
1373 CAMELLIA_CBC_ENC_TEST_VECTORS);
1374 test_cipher("cbc(camellia)", DECRYPT,
1375 camellia_cbc_dec_tv_template,
1376 CAMELLIA_CBC_DEC_TEST_VECTORS);
1377
1378 //SEED
1379 test_cipher("ecb(seed)", ENCRYPT, seed_enc_tv_template,
1380 SEED_ENC_TEST_VECTORS);
1381 test_cipher("ecb(seed)", DECRYPT, seed_dec_tv_template,
1382 SEED_DEC_TEST_VECTORS);
1383
1384 //CTS
1385 test_cipher("cts(cbc(aes))", ENCRYPT, cts_mode_enc_tv_template,
1386 CTS_MODE_ENC_TEST_VECTORS);
1387 test_cipher("cts(cbc(aes))", DECRYPT, cts_mode_dec_tv_template,
1388 CTS_MODE_DEC_TEST_VECTORS);
1389
1390 test_hash("sha384", sha384_tv_template, SHA384_TEST_VECTORS);
1391 test_hash("sha512", sha512_tv_template, SHA512_TEST_VECTORS);
1392 test_hash("wp512", wp512_tv_template, WP512_TEST_VECTORS);
1393 test_hash("wp384", wp384_tv_template, WP384_TEST_VECTORS);
1394 test_hash("wp256", wp256_tv_template, WP256_TEST_VECTORS);
1395 test_hash("tgr192", tgr192_tv_template, TGR192_TEST_VECTORS);
1396 test_hash("tgr160", tgr160_tv_template, TGR160_TEST_VECTORS);
1397 test_hash("tgr128", tgr128_tv_template, TGR128_TEST_VECTORS);
1398 test_comp("deflate", deflate_comp_tv_template,
1399 deflate_decomp_tv_template, DEFLATE_COMP_TEST_VECTORS,
1400 DEFLATE_DECOMP_TEST_VECTORS);
1401 test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template,
1402 LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS);
1403 test_hash("crc32c", crc32c_tv_template, CRC32C_TEST_VECTORS);
1404 test_hash("hmac(md5)", hmac_md5_tv_template,
1405 HMAC_MD5_TEST_VECTORS);
1406 test_hash("hmac(sha1)", hmac_sha1_tv_template,
1407 HMAC_SHA1_TEST_VECTORS);
1408 test_hash("hmac(sha224)", hmac_sha224_tv_template,
1409 HMAC_SHA224_TEST_VECTORS);
1410 test_hash("hmac(sha256)", hmac_sha256_tv_template,
1411 HMAC_SHA256_TEST_VECTORS);
1412 test_hash("hmac(sha384)", hmac_sha384_tv_template,
1413 HMAC_SHA384_TEST_VECTORS);
1414 test_hash("hmac(sha512)", hmac_sha512_tv_template,
1415 HMAC_SHA512_TEST_VECTORS);
1416
1417 test_hash("xcbc(aes)", aes_xcbc128_tv_template,
1418 XCBC_AES_TEST_VECTORS);
1419
1420 test_hash("michael_mic", michael_mic_tv_template, MICHAEL_MIC_TEST_VECTORS);
1421 break; 480 break;
1422 481
1423 case 1: 482 case 1:
1424 test_hash("md5", md5_tv_template, MD5_TEST_VECTORS); 483 tcrypt_test("md5");
1425 break; 484 break;
1426 485
1427 case 2: 486 case 2:
1428 test_hash("sha1", sha1_tv_template, SHA1_TEST_VECTORS); 487 tcrypt_test("sha1");
1429 break; 488 break;
1430 489
1431 case 3: 490 case 3:
1432 test_cipher("ecb(des)", ENCRYPT, des_enc_tv_template, 491 tcrypt_test("ecb(des)");
1433 DES_ENC_TEST_VECTORS); 492 tcrypt_test("cbc(des)");
1434 test_cipher("ecb(des)", DECRYPT, des_dec_tv_template,
1435 DES_DEC_TEST_VECTORS);
1436 test_cipher("cbc(des)", ENCRYPT, des_cbc_enc_tv_template,
1437 DES_CBC_ENC_TEST_VECTORS);
1438 test_cipher("cbc(des)", DECRYPT, des_cbc_dec_tv_template,
1439 DES_CBC_DEC_TEST_VECTORS);
1440 break; 493 break;
1441 494
1442 case 4: 495 case 4:
1443 test_cipher("ecb(des3_ede)", ENCRYPT, des3_ede_enc_tv_template, 496 tcrypt_test("ecb(des3_ede)");
1444 DES3_EDE_ENC_TEST_VECTORS); 497 tcrypt_test("cbc(des3_ede)");
1445 test_cipher("ecb(des3_ede)", DECRYPT, des3_ede_dec_tv_template,
1446 DES3_EDE_DEC_TEST_VECTORS);
1447
1448 test_cipher("cbc(des3_ede)", ENCRYPT,
1449 des3_ede_cbc_enc_tv_template,
1450 DES3_EDE_CBC_ENC_TEST_VECTORS);
1451
1452 test_cipher("cbc(des3_ede)", DECRYPT,
1453 des3_ede_cbc_dec_tv_template,
1454 DES3_EDE_CBC_DEC_TEST_VECTORS);
1455 break; 498 break;
1456 499
1457 case 5: 500 case 5:
1458 test_hash("md4", md4_tv_template, MD4_TEST_VECTORS); 501 tcrypt_test("md4");
1459 break; 502 break;
1460 503
1461 case 6: 504 case 6:
1462 test_hash("sha256", sha256_tv_template, SHA256_TEST_VECTORS); 505 tcrypt_test("sha256");
1463 break; 506 break;
1464 507
1465 case 7: 508 case 7:
1466 test_cipher("ecb(blowfish)", ENCRYPT, bf_enc_tv_template, 509 tcrypt_test("ecb(blowfish)");
1467 BF_ENC_TEST_VECTORS); 510 tcrypt_test("cbc(blowfish)");
1468 test_cipher("ecb(blowfish)", DECRYPT, bf_dec_tv_template,
1469 BF_DEC_TEST_VECTORS);
1470 test_cipher("cbc(blowfish)", ENCRYPT, bf_cbc_enc_tv_template,
1471 BF_CBC_ENC_TEST_VECTORS);
1472 test_cipher("cbc(blowfish)", DECRYPT, bf_cbc_dec_tv_template,
1473 BF_CBC_DEC_TEST_VECTORS);
1474 break; 511 break;
1475 512
1476 case 8: 513 case 8:
1477 test_cipher("ecb(twofish)", ENCRYPT, tf_enc_tv_template, 514 tcrypt_test("ecb(twofish)");
1478 TF_ENC_TEST_VECTORS); 515 tcrypt_test("cbc(twofish)");
1479 test_cipher("ecb(twofish)", DECRYPT, tf_dec_tv_template,
1480 TF_DEC_TEST_VECTORS);
1481 test_cipher("cbc(twofish)", ENCRYPT, tf_cbc_enc_tv_template,
1482 TF_CBC_ENC_TEST_VECTORS);
1483 test_cipher("cbc(twofish)", DECRYPT, tf_cbc_dec_tv_template,
1484 TF_CBC_DEC_TEST_VECTORS);
1485 break; 516 break;
1486 517
1487 case 9: 518 case 9:
1488 test_cipher("ecb(serpent)", ENCRYPT, serpent_enc_tv_template, 519 tcrypt_test("ecb(serpent)");
1489 SERPENT_ENC_TEST_VECTORS);
1490 test_cipher("ecb(serpent)", DECRYPT, serpent_dec_tv_template,
1491 SERPENT_DEC_TEST_VECTORS);
1492 break; 520 break;
1493 521
1494 case 10: 522 case 10:
1495 test_cipher("ecb(aes)", ENCRYPT, aes_enc_tv_template, 523 tcrypt_test("ecb(aes)");
1496 AES_ENC_TEST_VECTORS); 524 tcrypt_test("cbc(aes)");
1497 test_cipher("ecb(aes)", DECRYPT, aes_dec_tv_template, 525 tcrypt_test("lrw(aes)");
1498 AES_DEC_TEST_VECTORS); 526 tcrypt_test("xts(aes)");
1499 test_cipher("cbc(aes)", ENCRYPT, aes_cbc_enc_tv_template, 527 tcrypt_test("rfc3686(ctr(aes))");
1500 AES_CBC_ENC_TEST_VECTORS);
1501 test_cipher("cbc(aes)", DECRYPT, aes_cbc_dec_tv_template,
1502 AES_CBC_DEC_TEST_VECTORS);
1503 test_cipher("lrw(aes)", ENCRYPT, aes_lrw_enc_tv_template,
1504 AES_LRW_ENC_TEST_VECTORS);
1505 test_cipher("lrw(aes)", DECRYPT, aes_lrw_dec_tv_template,
1506 AES_LRW_DEC_TEST_VECTORS);
1507 test_cipher("xts(aes)", ENCRYPT, aes_xts_enc_tv_template,
1508 AES_XTS_ENC_TEST_VECTORS);
1509 test_cipher("xts(aes)", DECRYPT, aes_xts_dec_tv_template,
1510 AES_XTS_DEC_TEST_VECTORS);
1511 test_cipher("rfc3686(ctr(aes))", ENCRYPT, aes_ctr_enc_tv_template,
1512 AES_CTR_ENC_TEST_VECTORS);
1513 test_cipher("rfc3686(ctr(aes))", DECRYPT, aes_ctr_dec_tv_template,
1514 AES_CTR_DEC_TEST_VECTORS);
1515 break; 528 break;
1516 529
1517 case 11: 530 case 11:
1518 test_hash("sha384", sha384_tv_template, SHA384_TEST_VECTORS); 531 tcrypt_test("sha384");
1519 break; 532 break;
1520 533
1521 case 12: 534 case 12:
1522 test_hash("sha512", sha512_tv_template, SHA512_TEST_VECTORS); 535 tcrypt_test("sha512");
1523 break; 536 break;
1524 537
1525 case 13: 538 case 13:
1526 test_comp("deflate", deflate_comp_tv_template, 539 tcrypt_test("deflate");
1527 deflate_decomp_tv_template, DEFLATE_COMP_TEST_VECTORS,
1528 DEFLATE_DECOMP_TEST_VECTORS);
1529 break; 540 break;
1530 541
1531 case 14: 542 case 14:
1532 test_cipher("ecb(cast5)", ENCRYPT, cast5_enc_tv_template, 543 tcrypt_test("ecb(cast5)");
1533 CAST5_ENC_TEST_VECTORS);
1534 test_cipher("ecb(cast5)", DECRYPT, cast5_dec_tv_template,
1535 CAST5_DEC_TEST_VECTORS);
1536 break; 544 break;
1537 545
1538 case 15: 546 case 15:
1539 test_cipher("ecb(cast6)", ENCRYPT, cast6_enc_tv_template, 547 tcrypt_test("ecb(cast6)");
1540 CAST6_ENC_TEST_VECTORS);
1541 test_cipher("ecb(cast6)", DECRYPT, cast6_dec_tv_template,
1542 CAST6_DEC_TEST_VECTORS);
1543 break; 548 break;
1544 549
1545 case 16: 550 case 16:
1546 test_cipher("ecb(arc4)", ENCRYPT, arc4_enc_tv_template, 551 tcrypt_test("ecb(arc4)");
1547 ARC4_ENC_TEST_VECTORS);
1548 test_cipher("ecb(arc4)", DECRYPT, arc4_dec_tv_template,
1549 ARC4_DEC_TEST_VECTORS);
1550 break; 552 break;
1551 553
1552 case 17: 554 case 17:
1553 test_hash("michael_mic", michael_mic_tv_template, MICHAEL_MIC_TEST_VECTORS); 555 tcrypt_test("michael_mic");
1554 break; 556 break;
1555 557
1556 case 18: 558 case 18:
1557 test_hash("crc32c", crc32c_tv_template, CRC32C_TEST_VECTORS); 559 tcrypt_test("crc32c");
1558 break; 560 break;
1559 561
1560 case 19: 562 case 19:
1561 test_cipher("ecb(tea)", ENCRYPT, tea_enc_tv_template, 563 tcrypt_test("ecb(tea)");
1562 TEA_ENC_TEST_VECTORS);
1563 test_cipher("ecb(tea)", DECRYPT, tea_dec_tv_template,
1564 TEA_DEC_TEST_VECTORS);
1565 break; 564 break;
1566 565
1567 case 20: 566 case 20:
1568 test_cipher("ecb(xtea)", ENCRYPT, xtea_enc_tv_template, 567 tcrypt_test("ecb(xtea)");
1569 XTEA_ENC_TEST_VECTORS);
1570 test_cipher("ecb(xtea)", DECRYPT, xtea_dec_tv_template,
1571 XTEA_DEC_TEST_VECTORS);
1572 break; 568 break;
1573 569
1574 case 21: 570 case 21:
1575 test_cipher("ecb(khazad)", ENCRYPT, khazad_enc_tv_template, 571 tcrypt_test("ecb(khazad)");
1576 KHAZAD_ENC_TEST_VECTORS);
1577 test_cipher("ecb(khazad)", DECRYPT, khazad_dec_tv_template,
1578 KHAZAD_DEC_TEST_VECTORS);
1579 break; 572 break;
1580 573
1581 case 22: 574 case 22:
1582 test_hash("wp512", wp512_tv_template, WP512_TEST_VECTORS); 575 tcrypt_test("wp512");
1583 break; 576 break;
1584 577
1585 case 23: 578 case 23:
1586 test_hash("wp384", wp384_tv_template, WP384_TEST_VECTORS); 579 tcrypt_test("wp384");
1587 break; 580 break;
1588 581
1589 case 24: 582 case 24:
1590 test_hash("wp256", wp256_tv_template, WP256_TEST_VECTORS); 583 tcrypt_test("wp256");
1591 break; 584 break;
1592 585
1593 case 25: 586 case 25:
1594 test_cipher("ecb(tnepres)", ENCRYPT, tnepres_enc_tv_template, 587 tcrypt_test("ecb(tnepres)");
1595 TNEPRES_ENC_TEST_VECTORS);
1596 test_cipher("ecb(tnepres)", DECRYPT, tnepres_dec_tv_template,
1597 TNEPRES_DEC_TEST_VECTORS);
1598 break; 588 break;
1599 589
1600 case 26: 590 case 26:
1601 test_cipher("ecb(anubis)", ENCRYPT, anubis_enc_tv_template, 591 tcrypt_test("ecb(anubis)");
1602 ANUBIS_ENC_TEST_VECTORS); 592 tcrypt_test("cbc(anubis)");
1603 test_cipher("ecb(anubis)", DECRYPT, anubis_dec_tv_template,
1604 ANUBIS_DEC_TEST_VECTORS);
1605 test_cipher("cbc(anubis)", ENCRYPT, anubis_cbc_enc_tv_template,
1606 ANUBIS_CBC_ENC_TEST_VECTORS);
1607 test_cipher("cbc(anubis)", DECRYPT, anubis_cbc_dec_tv_template,
1608 ANUBIS_CBC_ENC_TEST_VECTORS);
1609 break; 593 break;
1610 594
1611 case 27: 595 case 27:
1612 test_hash("tgr192", tgr192_tv_template, TGR192_TEST_VECTORS); 596 tcrypt_test("tgr192");
1613 break; 597 break;
1614 598
1615 case 28: 599 case 28:
1616 600
1617 test_hash("tgr160", tgr160_tv_template, TGR160_TEST_VECTORS); 601 tcrypt_test("tgr160");
1618 break; 602 break;
1619 603
1620 case 29: 604 case 29:
1621 test_hash("tgr128", tgr128_tv_template, TGR128_TEST_VECTORS); 605 tcrypt_test("tgr128");
1622 break; 606 break;
1623 607
1624 case 30: 608 case 30:
1625 test_cipher("ecb(xeta)", ENCRYPT, xeta_enc_tv_template, 609 tcrypt_test("ecb(xeta)");
1626 XETA_ENC_TEST_VECTORS);
1627 test_cipher("ecb(xeta)", DECRYPT, xeta_dec_tv_template,
1628 XETA_DEC_TEST_VECTORS);
1629 break; 610 break;
1630 611
1631 case 31: 612 case 31:
1632 test_cipher("pcbc(fcrypt)", ENCRYPT, fcrypt_pcbc_enc_tv_template, 613 tcrypt_test("pcbc(fcrypt)");
1633 FCRYPT_ENC_TEST_VECTORS);
1634 test_cipher("pcbc(fcrypt)", DECRYPT, fcrypt_pcbc_dec_tv_template,
1635 FCRYPT_DEC_TEST_VECTORS);
1636 break; 614 break;
1637 615
1638 case 32: 616 case 32:
1639 test_cipher("ecb(camellia)", ENCRYPT, 617 tcrypt_test("ecb(camellia)");
1640 camellia_enc_tv_template, 618 tcrypt_test("cbc(camellia)");
1641 CAMELLIA_ENC_TEST_VECTORS);
1642 test_cipher("ecb(camellia)", DECRYPT,
1643 camellia_dec_tv_template,
1644 CAMELLIA_DEC_TEST_VECTORS);
1645 test_cipher("cbc(camellia)", ENCRYPT,
1646 camellia_cbc_enc_tv_template,
1647 CAMELLIA_CBC_ENC_TEST_VECTORS);
1648 test_cipher("cbc(camellia)", DECRYPT,
1649 camellia_cbc_dec_tv_template,
1650 CAMELLIA_CBC_DEC_TEST_VECTORS);
1651 break; 619 break;
1652 case 33: 620 case 33:
1653 test_hash("sha224", sha224_tv_template, SHA224_TEST_VECTORS); 621 tcrypt_test("sha224");
1654 break; 622 break;
1655 623
1656 case 34: 624 case 34:
1657 test_cipher("salsa20", ENCRYPT, 625 tcrypt_test("salsa20");
1658 salsa20_stream_enc_tv_template,
1659 SALSA20_STREAM_ENC_TEST_VECTORS);
1660 break; 626 break;
1661 627
1662 case 35: 628 case 35:
1663 test_aead("gcm(aes)", ENCRYPT, aes_gcm_enc_tv_template, 629 tcrypt_test("gcm(aes)");
1664 AES_GCM_ENC_TEST_VECTORS);
1665 test_aead("gcm(aes)", DECRYPT, aes_gcm_dec_tv_template,
1666 AES_GCM_DEC_TEST_VECTORS);
1667 break; 630 break;
1668 631
1669 case 36: 632 case 36:
1670 test_comp("lzo", lzo_comp_tv_template, lzo_decomp_tv_template, 633 tcrypt_test("lzo");
1671 LZO_COMP_TEST_VECTORS, LZO_DECOMP_TEST_VECTORS);
1672 break; 634 break;
1673 635
1674 case 37: 636 case 37:
1675 test_aead("ccm(aes)", ENCRYPT, aes_ccm_enc_tv_template, 637 tcrypt_test("ccm(aes)");
1676 AES_CCM_ENC_TEST_VECTORS);
1677 test_aead("ccm(aes)", DECRYPT, aes_ccm_dec_tv_template,
1678 AES_CCM_DEC_TEST_VECTORS);
1679 break; 638 break;
1680 639
1681 case 38: 640 case 38:
1682 test_cipher("cts(cbc(aes))", ENCRYPT, cts_mode_enc_tv_template, 641 tcrypt_test("cts(cbc(aes))");
1683 CTS_MODE_ENC_TEST_VECTORS);
1684 test_cipher("cts(cbc(aes))", DECRYPT, cts_mode_dec_tv_template,
1685 CTS_MODE_DEC_TEST_VECTORS);
1686 break; 642 break;
1687 643
1688 case 39: 644 case 39:
1689 test_hash("rmd128", rmd128_tv_template, RMD128_TEST_VECTORS); 645 tcrypt_test("rmd128");
1690 break; 646 break;
1691 647
1692 case 40: 648 case 40:
1693 test_hash("rmd160", rmd160_tv_template, RMD160_TEST_VECTORS); 649 tcrypt_test("rmd160");
1694 break; 650 break;
1695 651
1696 case 41: 652 case 41:
1697 test_hash("rmd256", rmd256_tv_template, RMD256_TEST_VECTORS); 653 tcrypt_test("rmd256");
1698 break; 654 break;
1699 655
1700 case 42: 656 case 42:
1701 test_hash("rmd320", rmd320_tv_template, RMD320_TEST_VECTORS); 657 tcrypt_test("rmd320");
658 break;
659
660 case 43:
661 tcrypt_test("ecb(seed)");
1702 break; 662 break;
1703 663
1704 case 100: 664 case 100:
1705 test_hash("hmac(md5)", hmac_md5_tv_template, 665 tcrypt_test("hmac(md5)");
1706 HMAC_MD5_TEST_VECTORS);
1707 break; 666 break;
1708 667
1709 case 101: 668 case 101:
1710 test_hash("hmac(sha1)", hmac_sha1_tv_template, 669 tcrypt_test("hmac(sha1)");
1711 HMAC_SHA1_TEST_VECTORS);
1712 break; 670 break;
1713 671
1714 case 102: 672 case 102:
1715 test_hash("hmac(sha256)", hmac_sha256_tv_template, 673 tcrypt_test("hmac(sha256)");
1716 HMAC_SHA256_TEST_VECTORS);
1717 break; 674 break;
1718 675
1719 case 103: 676 case 103:
1720 test_hash("hmac(sha384)", hmac_sha384_tv_template, 677 tcrypt_test("hmac(sha384)");
1721 HMAC_SHA384_TEST_VECTORS);
1722 break; 678 break;
1723 679
1724 case 104: 680 case 104:
1725 test_hash("hmac(sha512)", hmac_sha512_tv_template, 681 tcrypt_test("hmac(sha512)");
1726 HMAC_SHA512_TEST_VECTORS);
1727 break; 682 break;
1728 683
1729 case 105: 684 case 105:
1730 test_hash("hmac(sha224)", hmac_sha224_tv_template, 685 tcrypt_test("hmac(sha224)");
1731 HMAC_SHA224_TEST_VECTORS);
1732 break; 686 break;
1733 687
1734 case 106: 688 case 106:
1735 test_hash("xcbc(aes)", aes_xcbc128_tv_template, 689 tcrypt_test("xcbc(aes)");
1736 XCBC_AES_TEST_VECTORS);
1737 break; 690 break;
1738 691
1739 case 107: 692 case 107:
1740 test_hash("hmac(rmd128)", hmac_rmd128_tv_template, 693 tcrypt_test("hmac(rmd128)");
1741 HMAC_RMD128_TEST_VECTORS);
1742 break; 694 break;
1743 695
1744 case 108: 696 case 108:
1745 test_hash("hmac(rmd160)", hmac_rmd160_tv_template, 697 tcrypt_test("hmac(rmd160)");
1746 HMAC_RMD160_TEST_VECTORS);
1747 break; 698 break;
1748 699
1749 case 200: 700 case 200:
@@ -1767,16 +718,16 @@ static void do_test(void)
1767 718
1768 case 201: 719 case 201:
1769 test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec, 720 test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
1770 des3_ede_enc_tv_template, DES3_EDE_ENC_TEST_VECTORS, 721 des3_speed_template, DES3_SPEED_VECTORS,
1771 speed_template_24); 722 speed_template_24);
1772 test_cipher_speed("ecb(des3_ede)", DECRYPT, sec, 723 test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
1773 des3_ede_enc_tv_template, DES3_EDE_ENC_TEST_VECTORS, 724 des3_speed_template, DES3_SPEED_VECTORS,
1774 speed_template_24); 725 speed_template_24);
1775 test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec, 726 test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
1776 des3_ede_enc_tv_template, DES3_EDE_ENC_TEST_VECTORS, 727 des3_speed_template, DES3_SPEED_VECTORS,
1777 speed_template_24); 728 speed_template_24);
1778 test_cipher_speed("cbc(des3_ede)", DECRYPT, sec, 729 test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
1779 des3_ede_enc_tv_template, DES3_EDE_ENC_TEST_VECTORS, 730 des3_speed_template, DES3_SPEED_VECTORS,
1780 speed_template_24); 731 speed_template_24);
1781 break; 732 break;
1782 733
@@ -1906,31 +857,21 @@ static void do_test(void)
1906 case 1000: 857 case 1000:
1907 test_available(); 858 test_available();
1908 break; 859 break;
1909
1910 default:
1911 /* useful for debugging */
1912 printk("not testing anything\n");
1913 break;
1914 } 860 }
1915} 861}
1916 862
1917static int __init tcrypt_mod_init(void) 863static int __init tcrypt_mod_init(void)
1918{ 864{
1919 int err = -ENOMEM; 865 int err = -ENOMEM;
866 int i;
1920 867
1921 tvmem = kmalloc(TVMEMSIZE, GFP_KERNEL); 868 for (i = 0; i < TVMEMSIZE; i++) {
1922 if (tvmem == NULL) 869 tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
1923 return err; 870 if (!tvmem[i])
1924 871 goto err_free_tv;
1925 xbuf = kmalloc(XBUFSIZE, GFP_KERNEL); 872 }
1926 if (xbuf == NULL)
1927 goto err_free_tv;
1928
1929 axbuf = kmalloc(XBUFSIZE, GFP_KERNEL);
1930 if (axbuf == NULL)
1931 goto err_free_xbuf;
1932 873
1933 do_test(); 874 do_test(mode);
1934 875
1935 /* We intentionaly return -EAGAIN to prevent keeping 876 /* We intentionaly return -EAGAIN to prevent keeping
1936 * the module. It does all its work from init() 877 * the module. It does all its work from init()
@@ -1940,11 +881,9 @@ static int __init tcrypt_mod_init(void)
1940 */ 881 */
1941 err = -EAGAIN; 882 err = -EAGAIN;
1942 883
1943 kfree(axbuf); 884err_free_tv:
1944 err_free_xbuf: 885 for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
1945 kfree(xbuf); 886 free_page((unsigned long)tvmem[i]);
1946 err_free_tv:
1947 kfree(tvmem);
1948 887
1949 return err; 888 return err;
1950} 889}
diff --git a/crypto/tcrypt.h b/crypto/tcrypt.h
index 801e0c288862..966bbfaf95b1 100644
--- a/crypto/tcrypt.h
+++ b/crypto/tcrypt.h
@@ -17,53 +17,9 @@
17#ifndef _CRYPTO_TCRYPT_H 17#ifndef _CRYPTO_TCRYPT_H
18#define _CRYPTO_TCRYPT_H 18#define _CRYPTO_TCRYPT_H
19 19
20#define MAX_DIGEST_SIZE 64 20struct cipher_speed_template {
21#define MAX_TAP 8 21 const char *key;
22 22 unsigned int klen;
23#define MAX_KEYLEN 56
24#define MAX_IVLEN 32
25
26struct hash_testvec {
27 /* only used with keyed hash algorithms */
28 char *key;
29 char *plaintext;
30 char *digest;
31 unsigned char tap[MAX_TAP];
32 unsigned char psize;
33 unsigned char np;
34 unsigned char ksize;
35};
36
37struct cipher_testvec {
38 char *key;
39 char *iv;
40 char *input;
41 char *result;
42 unsigned char tap[MAX_TAP];
43 int np;
44 unsigned char fail;
45 unsigned char wk; /* weak key flag */
46 unsigned char klen;
47 unsigned short ilen;
48 unsigned short rlen;
49};
50
51struct aead_testvec {
52 char *key;
53 char *iv;
54 char *input;
55 char *assoc;
56 char *result;
57 unsigned char tap[MAX_TAP];
58 unsigned char atap[MAX_TAP];
59 int np;
60 int anp;
61 unsigned char fail;
62 unsigned char wk; /* weak key flag */
63 unsigned char klen;
64 unsigned short ilen;
65 unsigned short alen;
66 unsigned short rlen;
67}; 23};
68 24
69struct hash_speed { 25struct hash_speed {
@@ -71,8673 +27,20 @@ struct hash_speed {
71 unsigned int plen; /* per-update length */ 27 unsigned int plen; /* per-update length */
72}; 28};
73 29
74static char zeroed_string[48];
75
76/*
77 * MD4 test vectors from RFC1320
78 */
79#define MD4_TEST_VECTORS 7
80
81static struct hash_testvec md4_tv_template [] = {
82 {
83 .plaintext = "",
84 .digest = "\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31"
85 "\xb7\x3c\x59\xd7\xe0\xc0\x89\xc0",
86 }, {
87 .plaintext = "a",
88 .psize = 1,
89 .digest = "\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46"
90 "\x24\x5e\x05\xfb\xdb\xd6\xfb\x24",
91 }, {
92 .plaintext = "abc",
93 .psize = 3,
94 .digest = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52"
95 "\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d",
96 }, {
97 .plaintext = "message digest",
98 .psize = 14,
99 .digest = "\xd9\x13\x0a\x81\x64\x54\x9f\xe8"
100 "\x18\x87\x48\x06\xe1\xc7\x01\x4b",
101 }, {
102 .plaintext = "abcdefghijklmnopqrstuvwxyz",
103 .psize = 26,
104 .digest = "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd"
105 "\xee\xa8\xed\x63\xdf\x41\x2d\xa9",
106 .np = 2,
107 .tap = { 13, 13 },
108 }, {
109 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
110 .psize = 62,
111 .digest = "\x04\x3f\x85\x82\xf2\x41\xdb\x35"
112 "\x1c\xe6\x27\xe1\x53\xe7\xf0\xe4",
113 }, {
114 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
115 "45678901234567890",
116 .psize = 80,
117 .digest = "\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19"
118 "\x9c\x3e\x7b\x16\x4f\xcc\x05\x36",
119 },
120};
121
122/*
123 * MD5 test vectors from RFC1321
124 */
125#define MD5_TEST_VECTORS 7
126
127static struct hash_testvec md5_tv_template[] = {
128 {
129 .digest = "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04"
130 "\xe9\x80\x09\x98\xec\xf8\x42\x7e",
131 }, {
132 .plaintext = "a",
133 .psize = 1,
134 .digest = "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8"
135 "\x31\xc3\x99\xe2\x69\x77\x26\x61",
136 }, {
137 .plaintext = "abc",
138 .psize = 3,
139 .digest = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0"
140 "\xd6\x96\x3f\x7d\x28\xe1\x7f\x72",
141 }, {
142 .plaintext = "message digest",
143 .psize = 14,
144 .digest = "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d"
145 "\x52\x5a\x2f\x31\xaa\xf1\x61\xd0",
146 }, {
147 .plaintext = "abcdefghijklmnopqrstuvwxyz",
148 .psize = 26,
149 .digest = "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00"
150 "\x7d\xfb\x49\x6c\xca\x67\xe1\x3b",
151 .np = 2,
152 .tap = {13, 13}
153 }, {
154 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
155 .psize = 62,
156 .digest = "\xd1\x74\xab\x98\xd2\x77\xd9\xf5"
157 "\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f",
158 }, {
159 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
160 "345678901234567890",
161 .psize = 80,
162 .digest = "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55"
163 "\xac\x49\xda\x2e\x21\x07\xb6\x7a",
164 }
165
166};
167
168/*
169 * RIPEMD-128 test vectors from ISO/IEC 10118-3:2004(E)
170 */
171#define RMD128_TEST_VECTORS 10
172
173static struct hash_testvec rmd128_tv_template[] = {
174 {
175 .digest = "\xcd\xf2\x62\x13\xa1\x50\xdc\x3e"
176 "\xcb\x61\x0f\x18\xf6\xb3\x8b\x46",
177 }, {
178 .plaintext = "a",
179 .psize = 1,
180 .digest = "\x86\xbe\x7a\xfa\x33\x9d\x0f\xc7"
181 "\xcf\xc7\x85\xe7\x2f\x57\x8d\x33",
182 }, {
183 .plaintext = "abc",
184 .psize = 3,
185 .digest = "\xc1\x4a\x12\x19\x9c\x66\xe4\xba"
186 "\x84\x63\x6b\x0f\x69\x14\x4c\x77",
187 }, {
188 .plaintext = "message digest",
189 .psize = 14,
190 .digest = "\x9e\x32\x7b\x3d\x6e\x52\x30\x62"
191 "\xaf\xc1\x13\x2d\x7d\xf9\xd1\xb8",
192 }, {
193 .plaintext = "abcdefghijklmnopqrstuvwxyz",
194 .psize = 26,
195 .digest = "\xfd\x2a\xa6\x07\xf7\x1d\xc8\xf5"
196 "\x10\x71\x49\x22\xb3\x71\x83\x4e",
197 }, {
198 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
199 "fghijklmnopqrstuvwxyz0123456789",
200 .psize = 62,
201 .digest = "\xd1\xe9\x59\xeb\x17\x9c\x91\x1f"
202 "\xae\xa4\x62\x4c\x60\xc5\xc7\x02",
203 }, {
204 .plaintext = "1234567890123456789012345678901234567890"
205 "1234567890123456789012345678901234567890",
206 .psize = 80,
207 .digest = "\x3f\x45\xef\x19\x47\x32\xc2\xdb"
208 "\xb2\xc4\xa2\xc7\x69\x79\x5f\xa3",
209 }, {
210 .plaintext = "abcdbcdecdefdefgefghfghighij"
211 "hijkijkljklmklmnlmnomnopnopq",
212 .psize = 56,
213 .digest = "\xa1\xaa\x06\x89\xd0\xfa\xfa\x2d"
214 "\xdc\x22\xe8\x8b\x49\x13\x3a\x06",
215 .np = 2,
216 .tap = { 28, 28 },
217 }, {
218 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
219 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
220 "lmnopqrsmnopqrstnopqrstu",
221 .psize = 112,
222 .digest = "\xd4\xec\xc9\x13\xe1\xdf\x77\x6b"
223 "\xf4\x8d\xe9\xd5\x5b\x1f\x25\x46",
224 }, {
225 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
226 .psize = 32,
227 .digest = "\x13\xfc\x13\xe8\xef\xff\x34\x7d"
228 "\xe1\x93\xff\x46\xdb\xac\xcf\xd4",
229 }
230};
231
232/*
233 * RIPEMD-160 test vectors from ISO/IEC 10118-3:2004(E)
234 */
235#define RMD160_TEST_VECTORS 10
236
237static struct hash_testvec rmd160_tv_template[] = {
238 {
239 .digest = "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28"
240 "\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31",
241 }, {
242 .plaintext = "a",
243 .psize = 1,
244 .digest = "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae"
245 "\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe",
246 }, {
247 .plaintext = "abc",
248 .psize = 3,
249 .digest = "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04"
250 "\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc",
251 }, {
252 .plaintext = "message digest",
253 .psize = 14,
254 .digest = "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8"
255 "\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36",
256 }, {
257 .plaintext = "abcdefghijklmnopqrstuvwxyz",
258 .psize = 26,
259 .digest = "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb"
260 "\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc",
261 }, {
262 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
263 "fghijklmnopqrstuvwxyz0123456789",
264 .psize = 62,
265 .digest = "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed"
266 "\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89",
267 }, {
268 .plaintext = "1234567890123456789012345678901234567890"
269 "1234567890123456789012345678901234567890",
270 .psize = 80,
271 .digest = "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb"
272 "\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb",
273 }, {
274 .plaintext = "abcdbcdecdefdefgefghfghighij"
275 "hijkijkljklmklmnlmnomnopnopq",
276 .psize = 56,
277 .digest = "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05"
278 "\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b",
279 .np = 2,
280 .tap = { 28, 28 },
281 }, {
282 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
283 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
284 "lmnopqrsmnopqrstnopqrstu",
285 .psize = 112,
286 .digest = "\x6f\x3f\xa3\x9b\x6b\x50\x3c\x38\x4f\x91"
287 "\x9a\x49\xa7\xaa\x5c\x2c\x08\xbd\xfb\x45",
288 }, {
289 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
290 .psize = 32,
291 .digest = "\x94\xc2\x64\x11\x54\x04\xe6\x33\x79\x0d"
292 "\xfc\xc8\x7b\x58\x7d\x36\x77\x06\x7d\x9f",
293 }
294};
295
296/*
297 * RIPEMD-256 test vectors
298 */
299#define RMD256_TEST_VECTORS 8
300
301static struct hash_testvec rmd256_tv_template[] = {
302 {
303 .digest = "\x02\xba\x4c\x4e\x5f\x8e\xcd\x18"
304 "\x77\xfc\x52\xd6\x4d\x30\xe3\x7a"
305 "\x2d\x97\x74\xfb\x1e\x5d\x02\x63"
306 "\x80\xae\x01\x68\xe3\xc5\x52\x2d",
307 }, {
308 .plaintext = "a",
309 .psize = 1,
310 .digest = "\xf9\x33\x3e\x45\xd8\x57\xf5\xd9"
311 "\x0a\x91\xba\xb7\x0a\x1e\xba\x0c"
312 "\xfb\x1b\xe4\xb0\x78\x3c\x9a\xcf"
313 "\xcd\x88\x3a\x91\x34\x69\x29\x25",
314 }, {
315 .plaintext = "abc",
316 .psize = 3,
317 .digest = "\xaf\xbd\x6e\x22\x8b\x9d\x8c\xbb"
318 "\xce\xf5\xca\x2d\x03\xe6\xdb\xa1"
319 "\x0a\xc0\xbc\x7d\xcb\xe4\x68\x0e"
320 "\x1e\x42\xd2\xe9\x75\x45\x9b\x65",
321 }, {
322 .plaintext = "message digest",
323 .psize = 14,
324 .digest = "\x87\xe9\x71\x75\x9a\x1c\xe4\x7a"
325 "\x51\x4d\x5c\x91\x4c\x39\x2c\x90"
326 "\x18\xc7\xc4\x6b\xc1\x44\x65\x55"
327 "\x4a\xfc\xdf\x54\xa5\x07\x0c\x0e",
328 }, {
329 .plaintext = "abcdefghijklmnopqrstuvwxyz",
330 .psize = 26,
331 .digest = "\x64\x9d\x30\x34\x75\x1e\xa2\x16"
332 "\x77\x6b\xf9\xa1\x8a\xcc\x81\xbc"
333 "\x78\x96\x11\x8a\x51\x97\x96\x87"
334 "\x82\xdd\x1f\xd9\x7d\x8d\x51\x33",
335 }, {
336 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
337 "fghijklmnopqrstuvwxyz0123456789",
338 .psize = 62,
339 .digest = "\x57\x40\xa4\x08\xac\x16\xb7\x20"
340 "\xb8\x44\x24\xae\x93\x1c\xbb\x1f"
341 "\xe3\x63\xd1\xd0\xbf\x40\x17\xf1"
342 "\xa8\x9f\x7e\xa6\xde\x77\xa0\xb8",
343 }, {
344 .plaintext = "1234567890123456789012345678901234567890"
345 "1234567890123456789012345678901234567890",
346 .psize = 80,
347 .digest = "\x06\xfd\xcc\x7a\x40\x95\x48\xaa"
348 "\xf9\x13\x68\xc0\x6a\x62\x75\xb5"
349 "\x53\xe3\xf0\x99\xbf\x0e\xa4\xed"
350 "\xfd\x67\x78\xdf\x89\xa8\x90\xdd",
351 }, {
352 .plaintext = "abcdbcdecdefdefgefghfghighij"
353 "hijkijkljklmklmnlmnomnopnopq",
354 .psize = 56,
355 .digest = "\x38\x43\x04\x55\x83\xaa\xc6\xc8"
356 "\xc8\xd9\x12\x85\x73\xe7\xa9\x80"
357 "\x9a\xfb\x2a\x0f\x34\xcc\xc3\x6e"
358 "\xa9\xe7\x2f\x16\xf6\x36\x8e\x3f",
359 .np = 2,
360 .tap = { 28, 28 },
361 }
362};
363
364/*
365 * RIPEMD-320 test vectors
366 */
367#define RMD320_TEST_VECTORS 8
368
369static struct hash_testvec rmd320_tv_template[] = {
370 {
371 .digest = "\x22\xd6\x5d\x56\x61\x53\x6c\xdc\x75\xc1"
372 "\xfd\xf5\xc6\xde\x7b\x41\xb9\xf2\x73\x25"
373 "\xeb\xc6\x1e\x85\x57\x17\x7d\x70\x5a\x0e"
374 "\xc8\x80\x15\x1c\x3a\x32\xa0\x08\x99\xb8",
375 }, {
376 .plaintext = "a",
377 .psize = 1,
378 .digest = "\xce\x78\x85\x06\x38\xf9\x26\x58\xa5\xa5"
379 "\x85\x09\x75\x79\x92\x6d\xda\x66\x7a\x57"
380 "\x16\x56\x2c\xfc\xf6\xfb\xe7\x7f\x63\x54"
381 "\x2f\x99\xb0\x47\x05\xd6\x97\x0d\xff\x5d",
382 }, {
383 .plaintext = "abc",
384 .psize = 3,
385 .digest = "\xde\x4c\x01\xb3\x05\x4f\x89\x30\xa7\x9d"
386 "\x09\xae\x73\x8e\x92\x30\x1e\x5a\x17\x08"
387 "\x5b\xef\xfd\xc1\xb8\xd1\x16\x71\x3e\x74"
388 "\xf8\x2f\xa9\x42\xd6\x4c\xdb\xc4\x68\x2d",
389 }, {
390 .plaintext = "message digest",
391 .psize = 14,
392 .digest = "\x3a\x8e\x28\x50\x2e\xd4\x5d\x42\x2f\x68"
393 "\x84\x4f\x9d\xd3\x16\xe7\xb9\x85\x33\xfa"
394 "\x3f\x2a\x91\xd2\x9f\x84\xd4\x25\xc8\x8d"
395 "\x6b\x4e\xff\x72\x7d\xf6\x6a\x7c\x01\x97",
396 }, {
397 .plaintext = "abcdefghijklmnopqrstuvwxyz",
398 .psize = 26,
399 .digest = "\xca\xbd\xb1\x81\x0b\x92\x47\x0a\x20\x93"
400 "\xaa\x6b\xce\x05\x95\x2c\x28\x34\x8c\xf4"
401 "\x3f\xf6\x08\x41\x97\x51\x66\xbb\x40\xed"
402 "\x23\x40\x04\xb8\x82\x44\x63\xe6\xb0\x09",
403 }, {
404 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
405 "fghijklmnopqrstuvwxyz0123456789",
406 .psize = 62,
407 .digest = "\xed\x54\x49\x40\xc8\x6d\x67\xf2\x50\xd2"
408 "\x32\xc3\x0b\x7b\x3e\x57\x70\xe0\xc6\x0c"
409 "\x8c\xb9\xa4\xca\xfe\x3b\x11\x38\x8a\xf9"
410 "\x92\x0e\x1b\x99\x23\x0b\x84\x3c\x86\xa4",
411 }, {
412 .plaintext = "1234567890123456789012345678901234567890"
413 "1234567890123456789012345678901234567890",
414 .psize = 80,
415 .digest = "\x55\x78\x88\xaf\x5f\x6d\x8e\xd6\x2a\xb6"
416 "\x69\x45\xc6\xd2\xa0\xa4\x7e\xcd\x53\x41"
417 "\xe9\x15\xeb\x8f\xea\x1d\x05\x24\x95\x5f"
418 "\x82\x5d\xc7\x17\xe4\xa0\x08\xab\x2d\x42",
419 }, {
420 .plaintext = "abcdbcdecdefdefgefghfghighij"
421 "hijkijkljklmklmnlmnomnopnopq",
422 .psize = 56,
423 .digest = "\xd0\x34\xa7\x95\x0c\xf7\x22\x02\x1b\xa4"
424 "\xb8\x4d\xf7\x69\xa5\xde\x20\x60\xe2\x59"
425 "\xdf\x4c\x9b\xb4\xa4\x26\x8c\x0e\x93\x5b"
426 "\xbc\x74\x70\xa9\x69\xc9\xd0\x72\xa1\xac",
427 .np = 2,
428 .tap = { 28, 28 },
429 }
430};
431
432/*
433 * SHA1 test vectors from from FIPS PUB 180-1
434 */
435#define SHA1_TEST_VECTORS 2
436
437static struct hash_testvec sha1_tv_template[] = {
438 {
439 .plaintext = "abc",
440 .psize = 3,
441 .digest = "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
442 "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d",
443 }, {
444 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
445 .psize = 56,
446 .digest = "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
447 "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1",
448 .np = 2,
449 .tap = { 28, 28 }
450 }
451};
452
453
454/*
455 * SHA224 test vectors from from FIPS PUB 180-2
456 */
457#define SHA224_TEST_VECTORS 2
458
459static struct hash_testvec sha224_tv_template[] = {
460 {
461 .plaintext = "abc",
462 .psize = 3,
463 .digest = "\x23\x09\x7D\x22\x34\x05\xD8\x22"
464 "\x86\x42\xA4\x77\xBD\xA2\x55\xB3"
465 "\x2A\xAD\xBC\xE4\xBD\xA0\xB3\xF7"
466 "\xE3\x6C\x9D\xA7",
467 }, {
468 .plaintext =
469 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
470 .psize = 56,
471 .digest = "\x75\x38\x8B\x16\x51\x27\x76\xCC"
472 "\x5D\xBA\x5D\xA1\xFD\x89\x01\x50"
473 "\xB0\xC6\x45\x5C\xB4\xF5\x8B\x19"
474 "\x52\x52\x25\x25",
475 .np = 2,
476 .tap = { 28, 28 }
477 }
478};
479
480/*
481 * SHA256 test vectors from from NIST
482 */
483#define SHA256_TEST_VECTORS 2
484
485static struct hash_testvec sha256_tv_template[] = {
486 {
487 .plaintext = "abc",
488 .psize = 3,
489 .digest = "\xba\x78\x16\xbf\x8f\x01\xcf\xea"
490 "\x41\x41\x40\xde\x5d\xae\x22\x23"
491 "\xb0\x03\x61\xa3\x96\x17\x7a\x9c"
492 "\xb4\x10\xff\x61\xf2\x00\x15\xad",
493 }, {
494 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
495 .psize = 56,
496 .digest = "\x24\x8d\x6a\x61\xd2\x06\x38\xb8"
497 "\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
498 "\xa3\x3c\xe4\x59\x64\xff\x21\x67"
499 "\xf6\xec\xed\xd4\x19\xdb\x06\xc1",
500 .np = 2,
501 .tap = { 28, 28 }
502 },
503};
504
505/*
506 * SHA384 test vectors from from NIST and kerneli
507 */
508#define SHA384_TEST_VECTORS 4
509
510static struct hash_testvec sha384_tv_template[] = {
511 {
512 .plaintext= "abc",
513 .psize = 3,
514 .digest = "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b"
515 "\xb5\xa0\x3d\x69\x9a\xc6\x50\x07"
516 "\x27\x2c\x32\xab\x0e\xde\xd1\x63"
517 "\x1a\x8b\x60\x5a\x43\xff\x5b\xed"
518 "\x80\x86\x07\x2b\xa1\xe7\xcc\x23"
519 "\x58\xba\xec\xa1\x34\xc8\x25\xa7",
520 }, {
521 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
522 .psize = 56,
523 .digest = "\x33\x91\xfd\xdd\xfc\x8d\xc7\x39"
524 "\x37\x07\xa6\x5b\x1b\x47\x09\x39"
525 "\x7c\xf8\xb1\xd1\x62\xaf\x05\xab"
526 "\xfe\x8f\x45\x0d\xe5\xf3\x6b\xc6"
527 "\xb0\x45\x5a\x85\x20\xbc\x4e\x6f"
528 "\x5f\xe9\x5b\x1f\xe3\xc8\x45\x2b",
529 }, {
530 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
531 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
532 .psize = 112,
533 .digest = "\x09\x33\x0c\x33\xf7\x11\x47\xe8"
534 "\x3d\x19\x2f\xc7\x82\xcd\x1b\x47"
535 "\x53\x11\x1b\x17\x3b\x3b\x05\xd2"
536 "\x2f\xa0\x80\x86\xe3\xb0\xf7\x12"
537 "\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9"
538 "\x66\xc3\xe9\xfa\x91\x74\x60\x39",
539 }, {
540 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
541 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
542 .psize = 104,
543 .digest = "\x3d\x20\x89\x73\xab\x35\x08\xdb"
544 "\xbd\x7e\x2c\x28\x62\xba\x29\x0a"
545 "\xd3\x01\x0e\x49\x78\xc1\x98\xdc"
546 "\x4d\x8f\xd0\x14\xe5\x82\x82\x3a"
547 "\x89\xe1\x6f\x9b\x2a\x7b\xbc\x1a"
548 "\xc9\x38\xe2\xd1\x99\xe8\xbe\xa4",
549 .np = 4,
550 .tap = { 26, 26, 26, 26 }
551 },
552};
553
554/*
555 * SHA512 test vectors from from NIST and kerneli
556 */
557#define SHA512_TEST_VECTORS 4
558
559static struct hash_testvec sha512_tv_template[] = {
560 {
561 .plaintext = "abc",
562 .psize = 3,
563 .digest = "\xdd\xaf\x35\xa1\x93\x61\x7a\xba"
564 "\xcc\x41\x73\x49\xae\x20\x41\x31"
565 "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2"
566 "\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a"
567 "\x21\x92\x99\x2a\x27\x4f\xc1\xa8"
568 "\x36\xba\x3c\x23\xa3\xfe\xeb\xbd"
569 "\x45\x4d\x44\x23\x64\x3c\xe8\x0e"
570 "\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f",
571 }, {
572 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
573 .psize = 56,
574 .digest = "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a"
575 "\x0c\xed\x7b\xeb\x8e\x08\xa4\x16"
576 "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8"
577 "\x27\x9b\xe3\x31\xa7\x03\xc3\x35"
578 "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9"
579 "\xaa\x1d\x3b\xea\x57\x78\x9c\xa0"
580 "\x31\xad\x85\xc7\xa7\x1d\xd7\x03"
581 "\x54\xec\x63\x12\x38\xca\x34\x45",
582 }, {
583 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
584 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
585 .psize = 112,
586 .digest = "\x8e\x95\x9b\x75\xda\xe3\x13\xda"
587 "\x8c\xf4\xf7\x28\x14\xfc\x14\x3f"
588 "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1"
589 "\x72\x99\xae\xad\xb6\x88\x90\x18"
590 "\x50\x1d\x28\x9e\x49\x00\xf7\xe4"
591 "\x33\x1b\x99\xde\xc4\xb5\x43\x3a"
592 "\xc7\xd3\x29\xee\xb6\xdd\x26\x54"
593 "\x5e\x96\xe5\x5b\x87\x4b\xe9\x09",
594 }, {
595 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
596 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
597 .psize = 104,
598 .digest = "\x93\x0d\x0c\xef\xcb\x30\xff\x11"
599 "\x33\xb6\x89\x81\x21\xf1\xcf\x3d"
600 "\x27\x57\x8a\xfc\xaf\xe8\x67\x7c"
601 "\x52\x57\xcf\x06\x99\x11\xf7\x5d"
602 "\x8f\x58\x31\xb5\x6e\xbf\xda\x67"
603 "\xb2\x78\xe6\x6d\xff\x8b\x84\xfe"
604 "\x2b\x28\x70\xf7\x42\xa5\x80\xd8"
605 "\xed\xb4\x19\x87\x23\x28\x50\xc9",
606 .np = 4,
607 .tap = { 26, 26, 26, 26 }
608 },
609};
610
611
612/*
613 * WHIRLPOOL test vectors from Whirlpool package
614 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
615 * submission
616 */
617#define WP512_TEST_VECTORS 8
618
619static struct hash_testvec wp512_tv_template[] = {
620 {
621 .plaintext = "",
622 .psize = 0,
623 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
624 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
625 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
626 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
627 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
628 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57"
629 "\xEA\x89\x64\xE5\x9B\x63\xD9\x37"
630 "\x08\xB1\x38\xCC\x42\xA6\x6E\xB3",
631
632
633 }, {
634 .plaintext = "a",
635 .psize = 1,
636 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
637 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
638 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
639 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
640 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
641 "\x3A\x42\x39\x1A\x39\x14\x5A\x59"
642 "\x1A\x92\x20\x0D\x56\x01\x95\xE5"
643 "\x3B\x47\x85\x84\xFD\xAE\x23\x1A",
644 }, {
645 .plaintext = "abc",
646 .psize = 3,
647 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
648 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
649 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
650 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
651 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
652 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6"
653 "\xC7\x97\xFC\x9D\x95\xD8\xB5\x82"
654 "\xD2\x25\x29\x20\x76\xD4\xEE\xF5",
655 }, {
656 .plaintext = "message digest",
657 .psize = 14,
658 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
659 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
660 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
661 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
662 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
663 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6"
664 "\x92\xED\x92\x00\x52\x83\x8F\x33"
665 "\x62\xE8\x6D\xBD\x37\xA8\x90\x3E",
666 }, {
667 .plaintext = "abcdefghijklmnopqrstuvwxyz",
668 .psize = 26,
669 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
670 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
671 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
672 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
673 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
674 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6"
675 "\xF6\x8F\x67\x3E\x72\x07\x86\x5D"
676 "\x5D\x98\x19\xA3\xDB\xA4\xEB\x3B",
677 }, {
678 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
679 "abcdefghijklmnopqrstuvwxyz0123456789",
680 .psize = 62,
681 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
682 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
683 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
684 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
685 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
686 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6"
687 "\x55\x17\xCC\x87\x9D\x7B\x96\x21"
688 "\x42\xC6\x5F\x5A\x7A\xF0\x14\x67",
689 }, {
690 .plaintext = "1234567890123456789012345678901234567890"
691 "1234567890123456789012345678901234567890",
692 .psize = 80,
693 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
694 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
695 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
696 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
697 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
698 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A"
699 "\x2C\x60\x48\x1E\x88\xC5\xA2\x0B"
700 "\x2C\x2A\x80\xCF\x3A\x9A\x08\x3B",
701 }, {
702 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
703 .psize = 32,
704 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
705 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
706 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
707 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
708 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
709 "\x7B\x94\x76\x39\xFE\x05\x0B\x56"
710 "\x93\x9B\xAA\xA0\xAD\xFF\x9A\xE6"
711 "\x74\x5B\x7B\x18\x1C\x3B\xE3\xFD",
712 },
713};
714
715#define WP384_TEST_VECTORS 8
716
717static struct hash_testvec wp384_tv_template[] = {
718 {
719 .plaintext = "",
720 .psize = 0,
721 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
722 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
723 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
724 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
725 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
726 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57",
727
728
729 }, {
730 .plaintext = "a",
731 .psize = 1,
732 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
733 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
734 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
735 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
736 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
737 "\x3A\x42\x39\x1A\x39\x14\x5A\x59",
738 }, {
739 .plaintext = "abc",
740 .psize = 3,
741 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
742 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
743 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
744 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
745 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
746 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6",
747 }, {
748 .plaintext = "message digest",
749 .psize = 14,
750 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
751 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
752 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
753 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
754 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
755 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6",
756 }, {
757 .plaintext = "abcdefghijklmnopqrstuvwxyz",
758 .psize = 26,
759 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
760 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
761 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
762 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
763 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
764 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6",
765 }, {
766 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
767 "abcdefghijklmnopqrstuvwxyz0123456789",
768 .psize = 62,
769 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
770 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
771 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
772 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
773 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
774 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6",
775 }, {
776 .plaintext = "1234567890123456789012345678901234567890"
777 "1234567890123456789012345678901234567890",
778 .psize = 80,
779 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
780 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
781 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
782 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
783 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
784 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A",
785 }, {
786 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
787 .psize = 32,
788 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
789 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
790 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
791 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
792 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
793 "\x7B\x94\x76\x39\xFE\x05\x0B\x56",
794 },
795};
796
797#define WP256_TEST_VECTORS 8
798
799static struct hash_testvec wp256_tv_template[] = {
800 {
801 .plaintext = "",
802 .psize = 0,
803 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
804 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
805 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
806 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7",
807
808
809 }, {
810 .plaintext = "a",
811 .psize = 1,
812 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
813 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
814 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
815 "\x73\xC4\x50\x01\xD0\x08\x7B\x42",
816 }, {
817 .plaintext = "abc",
818 .psize = 3,
819 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
820 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
821 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
822 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C",
823 }, {
824 .plaintext = "message digest",
825 .psize = 14,
826 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
827 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
828 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
829 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B",
830 }, {
831 .plaintext = "abcdefghijklmnopqrstuvwxyz",
832 .psize = 26,
833 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
834 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
835 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
836 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B",
837 }, {
838 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
839 "abcdefghijklmnopqrstuvwxyz0123456789",
840 .psize = 62,
841 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
842 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
843 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
844 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E",
845 }, {
846 .plaintext = "1234567890123456789012345678901234567890"
847 "1234567890123456789012345678901234567890",
848 .psize = 80,
849 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
850 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
851 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
852 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29",
853 }, {
854 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
855 .psize = 32,
856 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
857 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
858 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
859 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69",
860 },
861};
862
863/*
864 * TIGER test vectors from Tiger website
865 */
866#define TGR192_TEST_VECTORS 6
867
868static struct hash_testvec tgr192_tv_template[] = {
869 {
870 .plaintext = "",
871 .psize = 0,
872 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
873 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
874 "\xf3\x73\xde\x2d\x49\x58\x4e\x7a",
875 }, {
876 .plaintext = "abc",
877 .psize = 3,
878 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
879 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
880 "\x93\x5f\x7b\x95\x1c\x13\x29\x51",
881 }, {
882 .plaintext = "Tiger",
883 .psize = 5,
884 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
885 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
886 "\x37\x79\x0c\x11\x6f\x9d\x2b\xdf",
887 }, {
888 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
889 .psize = 64,
890 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
891 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
892 "\xb5\x86\x44\x50\x34\xa5\xa3\x86",
893 }, {
894 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
895 .psize = 64,
896 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
897 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
898 "\x57\x89\x65\x65\x97\x5f\x91\x97",
899 }, {
900 .plaintext = "Tiger - A Fast New Hash Function, "
901 "by Ross Anderson and Eli Biham, "
902 "proceedings of Fast Software Encryption 3, "
903 "Cambridge, 1996.",
904 .psize = 125,
905 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
906 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
907 "\xdd\x68\x15\x1d\x50\x39\x74\xfc",
908 },
909};
910
911#define TGR160_TEST_VECTORS 6
912
913static struct hash_testvec tgr160_tv_template[] = {
914 {
915 .plaintext = "",
916 .psize = 0,
917 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
918 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
919 "\xf3\x73\xde\x2d",
920 }, {
921 .plaintext = "abc",
922 .psize = 3,
923 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
924 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
925 "\x93\x5f\x7b\x95",
926 }, {
927 .plaintext = "Tiger",
928 .psize = 5,
929 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
930 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
931 "\x37\x79\x0c\x11",
932 }, {
933 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
934 .psize = 64,
935 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
936 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
937 "\xb5\x86\x44\x50",
938 }, {
939 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
940 .psize = 64,
941 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
942 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
943 "\x57\x89\x65\x65",
944 }, {
945 .plaintext = "Tiger - A Fast New Hash Function, "
946 "by Ross Anderson and Eli Biham, "
947 "proceedings of Fast Software Encryption 3, "
948 "Cambridge, 1996.",
949 .psize = 125,
950 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
951 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
952 "\xdd\x68\x15\x1d",
953 },
954};
955
956#define TGR128_TEST_VECTORS 6
957
958static struct hash_testvec tgr128_tv_template[] = {
959 {
960 .plaintext = "",
961 .psize = 0,
962 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
963 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f",
964 }, {
965 .plaintext = "abc",
966 .psize = 3,
967 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
968 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf",
969 }, {
970 .plaintext = "Tiger",
971 .psize = 5,
972 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
973 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec",
974 }, {
975 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
976 .psize = 64,
977 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
978 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e",
979 }, {
980 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
981 .psize = 64,
982 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
983 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9",
984 }, {
985 .plaintext = "Tiger - A Fast New Hash Function, "
986 "by Ross Anderson and Eli Biham, "
987 "proceedings of Fast Software Encryption 3, "
988 "Cambridge, 1996.",
989 .psize = 125,
990 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
991 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24",
992 },
993};
994
995/*
996 * HMAC-MD5 test vectors from RFC2202
997 * (These need to be fixed to not use strlen).
998 */
999#define HMAC_MD5_TEST_VECTORS 7
1000
1001static struct hash_testvec hmac_md5_tv_template[] =
1002{
1003 {
1004 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1005 .ksize = 16,
1006 .plaintext = "Hi There",
1007 .psize = 8,
1008 .digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c"
1009 "\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
1010 }, {
1011 .key = "Jefe",
1012 .ksize = 4,
1013 .plaintext = "what do ya want for nothing?",
1014 .psize = 28,
1015 .digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03"
1016 "\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
1017 .np = 2,
1018 .tap = {14, 14}
1019 }, {
1020 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1021 .ksize = 16,
1022 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1023 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1024 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1025 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1026 .psize = 50,
1027 .digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88"
1028 "\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
1029 }, {
1030 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1031 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1032 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1033 .ksize = 25,
1034 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1035 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1036 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1037 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1038 .psize = 50,
1039 .digest = "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea"
1040 "\x3a\x75\x16\x47\x46\xff\xaa\x79",
1041 }, {
1042 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1043 .ksize = 16,
1044 .plaintext = "Test With Truncation",
1045 .psize = 20,
1046 .digest = "\x56\x46\x1e\xf2\x34\x2e\xdc\x00"
1047 "\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
1048 }, {
1049 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1050 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1051 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1052 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1053 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1054 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1055 "\xaa\xaa",
1056 .ksize = 80,
1057 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1058 .psize = 54,
1059 .digest = "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f"
1060 "\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
1061 }, {
1062 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1063 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1064 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1065 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1066 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1067 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1068 "\xaa\xaa",
1069 .ksize = 80,
1070 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1071 "Block-Size Data",
1072 .psize = 73,
1073 .digest = "\x6f\x63\x0f\xad\x67\xcd\xa0\xee"
1074 "\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
1075 },
1076};
1077
1078/*
1079 * HMAC-RIPEMD128 test vectors from RFC2286
1080 */
1081#define HMAC_RMD128_TEST_VECTORS 7
1082
1083static struct hash_testvec hmac_rmd128_tv_template[] = {
1084 {
1085 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1086 .ksize = 16,
1087 .plaintext = "Hi There",
1088 .psize = 8,
1089 .digest = "\xfb\xf6\x1f\x94\x92\xaa\x4b\xbf"
1090 "\x81\xc1\x72\xe8\x4e\x07\x34\xdb",
1091 }, {
1092 .key = "Jefe",
1093 .ksize = 4,
1094 .plaintext = "what do ya want for nothing?",
1095 .psize = 28,
1096 .digest = "\x87\x5f\x82\x88\x62\xb6\xb3\x34"
1097 "\xb4\x27\xc5\x5f\x9f\x7f\xf0\x9b",
1098 .np = 2,
1099 .tap = { 14, 14 },
1100 }, {
1101 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1102 .ksize = 16,
1103 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1104 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1105 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1106 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1107 .psize = 50,
1108 .digest = "\x09\xf0\xb2\x84\x6d\x2f\x54\x3d"
1109 "\xa3\x63\xcb\xec\x8d\x62\xa3\x8d",
1110 }, {
1111 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1112 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1113 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1114 .ksize = 25,
1115 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1116 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1117 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1118 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1119 .psize = 50,
1120 .digest = "\xbd\xbb\xd7\xcf\x03\xe4\x4b\x5a"
1121 "\xa6\x0a\xf8\x15\xbe\x4d\x22\x94",
1122 }, {
1123 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1124 .ksize = 16,
1125 .plaintext = "Test With Truncation",
1126 .psize = 20,
1127 .digest = "\xe7\x98\x08\xf2\x4b\x25\xfd\x03"
1128 "\x1c\x15\x5f\x0d\x55\x1d\x9a\x3a",
1129 }, {
1130 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1131 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1132 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1133 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1134 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1135 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1136 "\xaa\xaa",
1137 .ksize = 80,
1138 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1139 .psize = 54,
1140 .digest = "\xdc\x73\x29\x28\xde\x98\x10\x4a"
1141 "\x1f\x59\xd3\x73\xc1\x50\xac\xbb",
1142 }, {
1143 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1144 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1145 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1146 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1147 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1148 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1149 "\xaa\xaa",
1150 .ksize = 80,
1151 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1152 "Block-Size Data",
1153 .psize = 73,
1154 .digest = "\x5c\x6b\xec\x96\x79\x3e\x16\xd4"
1155 "\x06\x90\xc2\x37\x63\x5f\x30\xc5",
1156 },
1157};
1158
1159/*
1160 * HMAC-RIPEMD160 test vectors from RFC2286
1161 */
1162#define HMAC_RMD160_TEST_VECTORS 7
1163
1164static struct hash_testvec hmac_rmd160_tv_template[] = {
1165 {
1166 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1167 .ksize = 20,
1168 .plaintext = "Hi There",
1169 .psize = 8,
1170 .digest = "\x24\xcb\x4b\xd6\x7d\x20\xfc\x1a\x5d\x2e"
1171 "\xd7\x73\x2d\xcc\x39\x37\x7f\x0a\x56\x68",
1172 }, {
1173 .key = "Jefe",
1174 .ksize = 4,
1175 .plaintext = "what do ya want for nothing?",
1176 .psize = 28,
1177 .digest = "\xdd\xa6\xc0\x21\x3a\x48\x5a\x9e\x24\xf4"
1178 "\x74\x20\x64\xa7\xf0\x33\xb4\x3c\x40\x69",
1179 .np = 2,
1180 .tap = { 14, 14 },
1181 }, {
1182 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1183 .ksize = 20,
1184 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1185 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1186 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1187 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1188 .psize = 50,
1189 .digest = "\xb0\xb1\x05\x36\x0d\xe7\x59\x96\x0a\xb4"
1190 "\xf3\x52\x98\xe1\x16\xe2\x95\xd8\xe7\xc1",
1191 }, {
1192 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1193 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1194 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1195 .ksize = 25,
1196 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1197 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1198 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1199 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1200 .psize = 50,
1201 .digest = "\xd5\xca\x86\x2f\x4d\x21\xd5\xe6\x10\xe1"
1202 "\x8b\x4c\xf1\xbe\xb9\x7a\x43\x65\xec\xf4",
1203 }, {
1204 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1205 .ksize = 20,
1206 .plaintext = "Test With Truncation",
1207 .psize = 20,
1208 .digest = "\x76\x19\x69\x39\x78\xf9\x1d\x90\x53\x9a"
1209 "\xe7\x86\x50\x0f\xf3\xd8\xe0\x51\x8e\x39",
1210 }, {
1211 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1212 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1213 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1214 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1215 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1216 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1217 "\xaa\xaa",
1218 .ksize = 80,
1219 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1220 .psize = 54,
1221 .digest = "\x64\x66\xca\x07\xac\x5e\xac\x29\xe1\xbd"
1222 "\x52\x3e\x5a\xda\x76\x05\xb7\x91\xfd\x8b",
1223 }, {
1224 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1225 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1226 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1227 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1228 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1229 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1230 "\xaa\xaa",
1231 .ksize = 80,
1232 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1233 "Block-Size Data",
1234 .psize = 73,
1235 .digest = "\x69\xea\x60\x79\x8d\x71\x61\x6c\xce\x5f"
1236 "\xd0\x87\x1e\x23\x75\x4c\xd7\x5d\x5a\x0a",
1237 },
1238};
1239
1240/*
1241 * HMAC-SHA1 test vectors from RFC2202
1242 */
1243#define HMAC_SHA1_TEST_VECTORS 7
1244
1245static struct hash_testvec hmac_sha1_tv_template[] = {
1246 {
1247 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1248 .ksize = 20,
1249 .plaintext = "Hi There",
1250 .psize = 8,
1251 .digest = "\xb6\x17\x31\x86\x55\x05\x72\x64"
1252 "\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1"
1253 "\x46\xbe",
1254 }, {
1255 .key = "Jefe",
1256 .ksize = 4,
1257 .plaintext = "what do ya want for nothing?",
1258 .psize = 28,
1259 .digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74"
1260 "\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
1261 .np = 2,
1262 .tap = { 14, 14 }
1263 }, {
1264 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1265 .ksize = 20,
1266 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1267 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1268 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1269 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1270 .psize = 50,
1271 .digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3"
1272 "\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
1273 }, {
1274 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1275 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1276 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1277 .ksize = 25,
1278 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1279 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1280 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1281 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1282 .psize = 50,
1283 .digest = "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84"
1284 "\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
1285 }, {
1286 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1287 .ksize = 20,
1288 .plaintext = "Test With Truncation",
1289 .psize = 20,
1290 .digest = "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2"
1291 "\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
1292 }, {
1293 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1294 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1295 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1296 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1297 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1298 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1299 "\xaa\xaa",
1300 .ksize = 80,
1301 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1302 .psize = 54,
1303 .digest = "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70"
1304 "\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
1305 }, {
1306 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1307 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1308 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1309 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1310 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1311 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1312 "\xaa\xaa",
1313 .ksize = 80,
1314 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1315 "Block-Size Data",
1316 .psize = 73,
1317 .digest = "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b"
1318 "\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
1319 },
1320};
1321
1322
1323/*
1324 * SHA224 HMAC test vectors from RFC4231
1325 */
1326#define HMAC_SHA224_TEST_VECTORS 4
1327
1328static struct hash_testvec hmac_sha224_tv_template[] = {
1329 {
1330 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1331 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1332 "\x0b\x0b\x0b\x0b",
1333 .ksize = 20,
1334 /* ("Hi There") */
1335 .plaintext = "\x48\x69\x20\x54\x68\x65\x72\x65",
1336 .psize = 8,
1337 .digest = "\x89\x6f\xb1\x12\x8a\xbb\xdf\x19"
1338 "\x68\x32\x10\x7c\xd4\x9d\xf3\x3f"
1339 "\x47\xb4\xb1\x16\x99\x12\xba\x4f"
1340 "\x53\x68\x4b\x22",
1341 }, {
1342 .key = "Jefe",
1343 .ksize = 4,
1344 /* ("what do ya want for nothing?") */
1345 .plaintext = "\x77\x68\x61\x74\x20\x64\x6f\x20"
1346 "\x79\x61\x20\x77\x61\x6e\x74\x20"
1347 "\x66\x6f\x72\x20\x6e\x6f\x74\x68"
1348 "\x69\x6e\x67\x3f",
1349 .psize = 28,
1350 .digest = "\xa3\x0e\x01\x09\x8b\xc6\xdb\xbf"
1351 "\x45\x69\x0f\x3a\x7e\x9e\x6d\x0f"
1352 "\x8b\xbe\xa2\xa3\x9e\x61\x48\x00"
1353 "\x8f\xd0\x5e\x44",
1354 .np = 4,
1355 .tap = { 7, 7, 7, 7 }
1356 }, {
1357 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1358 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1359 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1360 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1361 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1362 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1363 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1364 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1365 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1366 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1367 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1368 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1369 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1370 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1371 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1372 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1373 "\xaa\xaa\xaa",
1374 .ksize = 131,
1375 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
1376 .plaintext = "\x54\x65\x73\x74\x20\x55\x73\x69"
1377 "\x6e\x67\x20\x4c\x61\x72\x67\x65"
1378 "\x72\x20\x54\x68\x61\x6e\x20\x42"
1379 "\x6c\x6f\x63\x6b\x2d\x53\x69\x7a"
1380 "\x65\x20\x4b\x65\x79\x20\x2d\x20"
1381 "\x48\x61\x73\x68\x20\x4b\x65\x79"
1382 "\x20\x46\x69\x72\x73\x74",
1383 .psize = 54,
1384 .digest = "\x95\xe9\xa0\xdb\x96\x20\x95\xad"
1385 "\xae\xbe\x9b\x2d\x6f\x0d\xbc\xe2"
1386 "\xd4\x99\xf1\x12\xf2\xd2\xb7\x27"
1387 "\x3f\xa6\x87\x0e",
1388 }, {
1389 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1390 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1391 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1392 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1393 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1394 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1395 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1396 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1397 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1398 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1399 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1400 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1401 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1402 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1403 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1404 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1405 "\xaa\xaa\xaa",
1406 .ksize = 131,
1407 /* ("This is a test using a larger than block-size key and a")
1408 (" larger than block-size data. The key needs to be")
1409 (" hashed before being used by the HMAC algorithm.") */
1410 .plaintext = "\x54\x68\x69\x73\x20\x69\x73\x20"
1411 "\x61\x20\x74\x65\x73\x74\x20\x75"
1412 "\x73\x69\x6e\x67\x20\x61\x20\x6c"
1413 "\x61\x72\x67\x65\x72\x20\x74\x68"
1414 "\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1415 "\x2d\x73\x69\x7a\x65\x20\x6b\x65"
1416 "\x79\x20\x61\x6e\x64\x20\x61\x20"
1417 "\x6c\x61\x72\x67\x65\x72\x20\x74"
1418 "\x68\x61\x6e\x20\x62\x6c\x6f\x63"
1419 "\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1420 "\x61\x74\x61\x2e\x20\x54\x68\x65"
1421 "\x20\x6b\x65\x79\x20\x6e\x65\x65"
1422 "\x64\x73\x20\x74\x6f\x20\x62\x65"
1423 "\x20\x68\x61\x73\x68\x65\x64\x20"
1424 "\x62\x65\x66\x6f\x72\x65\x20\x62"
1425 "\x65\x69\x6e\x67\x20\x75\x73\x65"
1426 "\x64\x20\x62\x79\x20\x74\x68\x65"
1427 "\x20\x48\x4d\x41\x43\x20\x61\x6c"
1428 "\x67\x6f\x72\x69\x74\x68\x6d\x2e",
1429 .psize = 152,
1430 .digest = "\x3a\x85\x41\x66\xac\x5d\x9f\x02"
1431 "\x3f\x54\xd5\x17\xd0\xb3\x9d\xbd"
1432 "\x94\x67\x70\xdb\x9c\x2b\x95\xc9"
1433 "\xf6\xf5\x65\xd1",
1434 },
1435};
1436
1437/*
1438 * HMAC-SHA256 test vectors from
1439 * draft-ietf-ipsec-ciph-sha-256-01.txt
1440 */
1441#define HMAC_SHA256_TEST_VECTORS 10
1442
1443static struct hash_testvec hmac_sha256_tv_template[] = {
1444 {
1445 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1446 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1447 "\x11\x12\x13\x14\x15\x16\x17\x18"
1448 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1449 .ksize = 32,
1450 .plaintext = "abc",
1451 .psize = 3,
1452 .digest = "\xa2\x1b\x1f\x5d\x4c\xf4\xf7\x3a"
1453 "\x4d\xd9\x39\x75\x0f\x7a\x06\x6a"
1454 "\x7f\x98\xcc\x13\x1c\xb1\x6a\x66"
1455 "\x92\x75\x90\x21\xcf\xab\x81\x81",
1456 }, {
1457 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1458 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1459 "\x11\x12\x13\x14\x15\x16\x17\x18"
1460 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1461 .ksize = 32,
1462 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1463 .psize = 56,
1464 .digest = "\x10\x4f\xdc\x12\x57\x32\x8f\x08"
1465 "\x18\x4b\xa7\x31\x31\xc5\x3c\xae"
1466 "\xe6\x98\xe3\x61\x19\x42\x11\x49"
1467 "\xea\x8c\x71\x24\x56\x69\x7d\x30",
1468 }, {
1469 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1470 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1471 "\x11\x12\x13\x14\x15\x16\x17\x18"
1472 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1473 .ksize = 32,
1474 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1475 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1476 .psize = 112,
1477 .digest = "\x47\x03\x05\xfc\x7e\x40\xfe\x34"
1478 "\xd3\xee\xb3\xe7\x73\xd9\x5a\xab"
1479 "\x73\xac\xf0\xfd\x06\x04\x47\xa5"
1480 "\xeb\x45\x95\xbf\x33\xa9\xd1\xa3",
1481 }, {
1482 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1483 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1484 "\x0b\x0b\x0b\x0b\x0b\x0b",
1485 .ksize = 32,
1486 .plaintext = "Hi There",
1487 .psize = 8,
1488 .digest = "\x19\x8a\x60\x7e\xb4\x4b\xfb\xc6"
1489 "\x99\x03\xa0\xf1\xcf\x2b\xbd\xc5"
1490 "\xba\x0a\xa3\xf3\xd9\xae\x3c\x1c"
1491 "\x7a\x3b\x16\x96\xa0\xb6\x8c\xf7",
1492 }, {
1493 .key = "Jefe",
1494 .ksize = 4,
1495 .plaintext = "what do ya want for nothing?",
1496 .psize = 28,
1497 .digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e"
1498 "\x6a\x04\x24\x26\x08\x95\x75\xc7"
1499 "\x5a\x00\x3f\x08\x9d\x27\x39\x83"
1500 "\x9d\xec\x58\xb9\x64\xec\x38\x43",
1501 .np = 2,
1502 .tap = { 14, 14 }
1503 }, {
1504 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1505 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1506 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1507 .ksize = 32,
1508 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1509 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1510 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1511 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1512 .psize = 50,
1513 .digest = "\xcd\xcb\x12\x20\xd1\xec\xcc\xea"
1514 "\x91\xe5\x3a\xba\x30\x92\xf9\x62"
1515 "\xe5\x49\xfe\x6c\xe9\xed\x7f\xdc"
1516 "\x43\x19\x1f\xbd\xe4\x5c\x30\xb0",
1517 }, {
1518 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1519 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1520 "\x11\x12\x13\x14\x15\x16\x17\x18"
1521 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
1522 "\x21\x22\x23\x24\x25",
1523 .ksize = 37,
1524 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1525 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1526 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1527 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1528 .psize = 50,
1529 .digest = "\xd4\x63\x3c\x17\xf6\xfb\x8d\x74"
1530 "\x4c\x66\xde\xe0\xf8\xf0\x74\x55"
1531 "\x6e\xc4\xaf\x55\xef\x07\x99\x85"
1532 "\x41\x46\x8e\xb4\x9b\xd2\xe9\x17",
1533 }, {
1534 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1535 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1536 "\x0c\x0c\x0c\x0c\x0c\x0c",
1537 .ksize = 32,
1538 .plaintext = "Test With Truncation",
1539 .psize = 20,
1540 .digest = "\x75\x46\xaf\x01\x84\x1f\xc0\x9b"
1541 "\x1a\xb9\xc3\x74\x9a\x5f\x1c\x17"
1542 "\xd4\xf5\x89\x66\x8a\x58\x7b\x27"
1543 "\x00\xa9\xc9\x7c\x11\x93\xcf\x42",
1544 }, {
1545 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1546 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1547 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1548 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1549 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1550 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1551 "\xaa\xaa",
1552 .ksize = 80,
1553 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1554 .psize = 54,
1555 .digest = "\x69\x53\x02\x5e\xd9\x6f\x0c\x09"
1556 "\xf8\x0a\x96\xf7\x8e\x65\x38\xdb"
1557 "\xe2\xe7\xb8\x20\xe3\xdd\x97\x0e"
1558 "\x7d\xdd\x39\x09\x1b\x32\x35\x2f",
1559 }, {
1560 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1561 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1562 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1563 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1564 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1565 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1566 "\xaa\xaa",
1567 .ksize = 80,
1568 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1569 "One Block-Size Data",
1570 .psize = 73,
1571 .digest = "\x63\x55\xac\x22\xe8\x90\xd0\xa3"
1572 "\xc8\x48\x1a\x5c\xa4\x82\x5b\xc8"
1573 "\x84\xd3\xe7\xa1\xff\x98\xa2\xfc"
1574 "\x2a\xc7\xd8\xe0\x64\xc3\xb2\xe6",
1575 },
1576};
1577
1578#define XCBC_AES_TEST_VECTORS 6
1579
1580static struct hash_testvec aes_xcbc128_tv_template[] = {
1581 {
1582 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1583 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1584 .plaintext = zeroed_string,
1585 .digest = "\x75\xf0\x25\x1d\x52\x8a\xc0\x1c"
1586 "\x45\x73\xdf\xd5\x84\xd7\x9f\x29",
1587 .psize = 0,
1588 .ksize = 16,
1589 }, {
1590 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1591 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1592 .plaintext = "\x00\x01\x02",
1593 .digest = "\x5b\x37\x65\x80\xae\x2f\x19\xaf"
1594 "\xe7\x21\x9c\xee\xf1\x72\x75\x6f",
1595 .psize = 3,
1596 .ksize = 16,
1597 } , {
1598 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1599 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1600 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1601 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1602 .digest = "\xd2\xa2\x46\xfa\x34\x9b\x68\xa7"
1603 "\x99\x98\xa4\x39\x4f\xf7\xa2\x63",
1604 .psize = 16,
1605 .ksize = 16,
1606 }, {
1607 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1608 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1609 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1610 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1611 "\x10\x11\x12\x13",
1612 .digest = "\x47\xf5\x1b\x45\x64\x96\x62\x15"
1613 "\xb8\x98\x5c\x63\x05\x5e\xd3\x08",
1614 .tap = { 10, 10 },
1615 .psize = 20,
1616 .np = 2,
1617 .ksize = 16,
1618 }, {
1619 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1620 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1621 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1622 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1623 "\x10\x11\x12\x13\x14\x15\x16\x17"
1624 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
1625 .digest = "\xf5\x4f\x0e\xc8\xd2\xb9\xf3\xd3"
1626 "\x68\x07\x73\x4b\xd5\x28\x3f\xd4",
1627 .psize = 32,
1628 .ksize = 16,
1629 }, {
1630 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1631 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1632 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1633 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1634 "\x10\x11\x12\x13\x14\x15\x16\x17"
1635 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
1636 "\x20\x21",
1637 .digest = "\xbe\xcb\xb3\xbc\xcd\xb5\x18\xa3"
1638 "\x06\x77\xd5\x48\x1f\xb6\xb4\xd8",
1639 .tap = { 17, 17 },
1640 .psize = 34,
1641 .np = 2,
1642 .ksize = 16,
1643 }
1644};
1645
1646/*
1647 * SHA384 HMAC test vectors from RFC4231
1648 */
1649
1650#define HMAC_SHA384_TEST_VECTORS 4
1651
1652static struct hash_testvec hmac_sha384_tv_template[] = {
1653 {
1654 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1655 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1656 "\x0b\x0b\x0b\x0b",
1657 .ksize = 20,
1658 .plaintext = "Hi There",
1659 .psize = 8,
1660 .digest = "\xaf\xd0\x39\x44\xd8\x48\x95\x62"
1661 "\x6b\x08\x25\xf4\xab\x46\x90\x7f"
1662 "\x15\xf9\xda\xdb\xe4\x10\x1e\xc6"
1663 "\x82\xaa\x03\x4c\x7c\xeb\xc5\x9c"
1664 "\xfa\xea\x9e\xa9\x07\x6e\xde\x7f"
1665 "\x4a\xf1\x52\xe8\xb2\xfa\x9c\xb6",
1666 }, {
1667 .key = "Jefe",
1668 .ksize = 4,
1669 .plaintext = "what do ya want for nothing?",
1670 .psize = 28,
1671 .digest = "\xaf\x45\xd2\xe3\x76\x48\x40\x31"
1672 "\x61\x7f\x78\xd2\xb5\x8a\x6b\x1b"
1673 "\x9c\x7e\xf4\x64\xf5\xa0\x1b\x47"
1674 "\xe4\x2e\xc3\x73\x63\x22\x44\x5e"
1675 "\x8e\x22\x40\xca\x5e\x69\xe2\xc7"
1676 "\x8b\x32\x39\xec\xfa\xb2\x16\x49",
1677 .np = 4,
1678 .tap = { 7, 7, 7, 7 }
1679 }, {
1680 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1681 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1682 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1683 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1684 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1685 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1686 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1687 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1688 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1689 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1690 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1691 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1692 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1693 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1694 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1695 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1696 "\xaa\xaa\xaa",
1697 .ksize = 131,
1698 .plaintext = "Test Using Larger Than Block-Siz"
1699 "e Key - Hash Key First",
1700 .psize = 54,
1701 .digest = "\x4e\xce\x08\x44\x85\x81\x3e\x90"
1702 "\x88\xd2\xc6\x3a\x04\x1b\xc5\xb4"
1703 "\x4f\x9e\xf1\x01\x2a\x2b\x58\x8f"
1704 "\x3c\xd1\x1f\x05\x03\x3a\xc4\xc6"
1705 "\x0c\x2e\xf6\xab\x40\x30\xfe\x82"
1706 "\x96\x24\x8d\xf1\x63\xf4\x49\x52",
1707 }, {
1708 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1709 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1710 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1711 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1712 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1713 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1714 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1715 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1716 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1717 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1718 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1719 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1720 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1721 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1722 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1723 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1724 "\xaa\xaa\xaa",
1725 .ksize = 131,
1726 .plaintext = "This is a test u"
1727 "sing a larger th"
1728 "an block-size ke"
1729 "y and a larger t"
1730 "han block-size d"
1731 "ata. The key nee"
1732 "ds to be hashed "
1733 "before being use"
1734 "d by the HMAC al"
1735 "gorithm.",
1736 .psize = 152,
1737 .digest = "\x66\x17\x17\x8e\x94\x1f\x02\x0d"
1738 "\x35\x1e\x2f\x25\x4e\x8f\xd3\x2c"
1739 "\x60\x24\x20\xfe\xb0\xb8\xfb\x9a"
1740 "\xdc\xce\xbb\x82\x46\x1e\x99\xc5"
1741 "\xa6\x78\xcc\x31\xe7\x99\x17\x6d"
1742 "\x38\x60\xe6\x11\x0c\x46\x52\x3e",
1743 },
1744};
1745
1746/*
1747 * SHA512 HMAC test vectors from RFC4231
1748 */
1749
1750#define HMAC_SHA512_TEST_VECTORS 4
1751
1752static struct hash_testvec hmac_sha512_tv_template[] = {
1753 {
1754 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1755 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1756 "\x0b\x0b\x0b\x0b",
1757 .ksize = 20,
1758 .plaintext = "Hi There",
1759 .psize = 8,
1760 .digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d"
1761 "\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0"
1762 "\x23\x79\xf4\xe2\xce\x4e\xc2\x78"
1763 "\x7a\xd0\xb3\x05\x45\xe1\x7c\xde"
1764 "\xda\xa8\x33\xb7\xd6\xb8\xa7\x02"
1765 "\x03\x8b\x27\x4e\xae\xa3\xf4\xe4"
1766 "\xbe\x9d\x91\x4e\xeb\x61\xf1\x70"
1767 "\x2e\x69\x6c\x20\x3a\x12\x68\x54",
1768 }, {
1769 .key = "Jefe",
1770 .ksize = 4,
1771 .plaintext = "what do ya want for nothing?",
1772 .psize = 28,
1773 .digest = "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2"
1774 "\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3"
1775 "\x87\xbd\x64\x22\x2e\x83\x1f\xd6"
1776 "\x10\x27\x0c\xd7\xea\x25\x05\x54"
1777 "\x97\x58\xbf\x75\xc0\x5a\x99\x4a"
1778 "\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd"
1779 "\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b"
1780 "\x63\x6e\x07\x0a\x38\xbc\xe7\x37",
1781 .np = 4,
1782 .tap = { 7, 7, 7, 7 }
1783 }, {
1784 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1785 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1786 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1787 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1788 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1789 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1790 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1791 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1792 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1793 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1794 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1795 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1796 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1797 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1798 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1799 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1800 "\xaa\xaa\xaa",
1801 .ksize = 131,
1802 .plaintext = "Test Using Large"
1803 "r Than Block-Siz"
1804 "e Key - Hash Key"
1805 " First",
1806 .psize = 54,
1807 .digest = "\x80\xb2\x42\x63\xc7\xc1\xa3\xeb"
1808 "\xb7\x14\x93\xc1\xdd\x7b\xe8\xb4"
1809 "\x9b\x46\xd1\xf4\x1b\x4a\xee\xc1"
1810 "\x12\x1b\x01\x37\x83\xf8\xf3\x52"
1811 "\x6b\x56\xd0\x37\xe0\x5f\x25\x98"
1812 "\xbd\x0f\xd2\x21\x5d\x6a\x1e\x52"
1813 "\x95\xe6\x4f\x73\xf6\x3f\x0a\xec"
1814 "\x8b\x91\x5a\x98\x5d\x78\x65\x98",
1815 }, {
1816 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1817 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1818 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1819 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1820 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1821 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1822 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1823 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1824 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1825 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1826 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1827 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1828 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1829 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1830 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1831 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1832 "\xaa\xaa\xaa",
1833 .ksize = 131,
1834 .plaintext =
1835 "This is a test u"
1836 "sing a larger th"
1837 "an block-size ke"
1838 "y and a larger t"
1839 "han block-size d"
1840 "ata. The key nee"
1841 "ds to be hashed "
1842 "before being use"
1843 "d by the HMAC al"
1844 "gorithm.",
1845 .psize = 152,
1846 .digest = "\xe3\x7b\x6a\x77\x5d\xc8\x7d\xba"
1847 "\xa4\xdf\xa9\xf9\x6e\x5e\x3f\xfd"
1848 "\xde\xbd\x71\xf8\x86\x72\x89\x86"
1849 "\x5d\xf5\xa3\x2d\x20\xcd\xc9\x44"
1850 "\xb6\x02\x2c\xac\x3c\x49\x82\xb1"
1851 "\x0d\x5e\xeb\x55\xc3\xe4\xde\x15"
1852 "\x13\x46\x76\xfb\x6d\xe0\x44\x60"
1853 "\x65\xc9\x74\x40\xfa\x8c\x6a\x58",
1854 },
1855};
1856
1857/* 30/*
1858 * DES test vectors. 31 * DES test vectors.
1859 */ 32 */
1860#define DES_ENC_TEST_VECTORS 10 33#define DES3_SPEED_VECTORS 1
1861#define DES_DEC_TEST_VECTORS 4
1862#define DES_CBC_ENC_TEST_VECTORS 5
1863#define DES_CBC_DEC_TEST_VECTORS 4
1864#define DES3_EDE_ENC_TEST_VECTORS 3
1865#define DES3_EDE_DEC_TEST_VECTORS 3
1866#define DES3_EDE_CBC_ENC_TEST_VECTORS 1
1867#define DES3_EDE_CBC_DEC_TEST_VECTORS 1
1868
1869static struct cipher_testvec des_enc_tv_template[] = {
1870 { /* From Applied Cryptography */
1871 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1872 .klen = 8,
1873 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1874 .ilen = 8,
1875 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1876 .rlen = 8,
1877 }, { /* Same key, different plaintext block */
1878 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1879 .klen = 8,
1880 .input = "\x22\x33\x44\x55\x66\x77\x88\x99",
1881 .ilen = 8,
1882 .result = "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1883 .rlen = 8,
1884 }, { /* Sbox test from NBS */
1885 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1886 .klen = 8,
1887 .input = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1888 .ilen = 8,
1889 .result = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1890 .rlen = 8,
1891 }, { /* Three blocks */
1892 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1893 .klen = 8,
1894 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1895 "\x22\x33\x44\x55\x66\x77\x88\x99"
1896 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1897 .ilen = 24,
1898 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1899 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1900 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1901 .rlen = 24,
1902 }, { /* Weak key */
1903 .fail = 1,
1904 .wk = 1,
1905 .key = "\x01\x01\x01\x01\x01\x01\x01\x01",
1906 .klen = 8,
1907 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1908 .ilen = 8,
1909 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1910 .rlen = 8,
1911 }, { /* Two blocks -- for testing encryption across pages */
1912 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1913 .klen = 8,
1914 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1915 "\x22\x33\x44\x55\x66\x77\x88\x99",
1916 .ilen = 16,
1917 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1918 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1919 .rlen = 16,
1920 .np = 2,
1921 .tap = { 8, 8 }
1922 }, { /* Four blocks -- for testing encryption with chunking */
1923 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1924 .klen = 8,
1925 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1926 "\x22\x33\x44\x55\x66\x77\x88\x99"
1927 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef"
1928 "\x22\x33\x44\x55\x66\x77\x88\x99",
1929 .ilen = 32,
1930 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1931 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1932 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90"
1933 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1934 .rlen = 32,
1935 .np = 3,
1936 .tap = { 14, 10, 8 }
1937 }, {
1938 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1939 .klen = 8,
1940 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1941 "\x22\x33\x44\x55\x66\x77\x88\x99"
1942 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1943 .ilen = 24,
1944 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1945 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1946 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1947 .rlen = 24,
1948 .np = 4,
1949 .tap = { 2, 1, 3, 18 }
1950 }, {
1951 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1952 .klen = 8,
1953 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1954 "\x22\x33\x44\x55\x66\x77\x88\x99",
1955 .ilen = 16,
1956 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1957 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1958 .rlen = 16,
1959 .np = 5,
1960 .tap = { 2, 2, 2, 2, 8 }
1961 }, {
1962 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1963 .klen = 8,
1964 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1965 .ilen = 8,
1966 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1967 .rlen = 8,
1968 .np = 8,
1969 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
1970 },
1971};
1972
1973static struct cipher_testvec des_dec_tv_template[] = {
1974 { /* From Applied Cryptography */
1975 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1976 .klen = 8,
1977 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1978 .ilen = 8,
1979 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1980 .rlen = 8,
1981 }, { /* Sbox test from NBS */
1982 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1983 .klen = 8,
1984 .input = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1985 .ilen = 8,
1986 .result = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1987 .rlen = 8,
1988 }, { /* Two blocks, for chunking test */
1989 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1990 .klen = 8,
1991 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1992 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1993 .ilen = 16,
1994 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1995 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
1996 .rlen = 16,
1997 .np = 2,
1998 .tap = { 8, 8 }
1999 }, {
2000 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2001 .klen = 8,
2002 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
2003 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
2004 .ilen = 16,
2005 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
2006 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2007 .rlen = 16,
2008 .np = 3,
2009 .tap = { 3, 12, 1 }
2010 },
2011};
2012
2013static struct cipher_testvec des_cbc_enc_tv_template[] = {
2014 { /* From OpenSSL */
2015 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2016 .klen = 8,
2017 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2018 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2019 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2020 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2021 .ilen = 24,
2022 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2023 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2024 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2025 .rlen = 24,
2026 }, { /* FIPS Pub 81 */
2027 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2028 .klen = 8,
2029 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2030 .input = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2031 .ilen = 8,
2032 .result = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2033 .rlen = 8,
2034 }, {
2035 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2036 .klen = 8,
2037 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2038 .input = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2039 .ilen = 8,
2040 .result = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2041 .rlen = 8,
2042 }, {
2043 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2044 .klen = 8,
2045 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2046 .input = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2047 .ilen = 8,
2048 .result = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2049 .rlen = 8,
2050 }, { /* Copy of openssl vector for chunk testing */
2051 /* From OpenSSL */
2052 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2053 .klen = 8,
2054 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2055 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2056 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2057 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2058 .ilen = 24,
2059 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2060 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2061 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2062 .rlen = 24,
2063 .np = 2,
2064 .tap = { 13, 11 }
2065 },
2066};
2067
2068static struct cipher_testvec des_cbc_dec_tv_template[] = {
2069 { /* FIPS Pub 81 */
2070 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2071 .klen = 8,
2072 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2073 .input = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2074 .ilen = 8,
2075 .result = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2076 .rlen = 8,
2077 }, {
2078 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2079 .klen = 8,
2080 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2081 .input = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2082 .ilen = 8,
2083 .result = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2084 .rlen = 8,
2085 }, {
2086 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2087 .klen = 8,
2088 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2089 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2090 .ilen = 8,
2091 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2092 .rlen = 8,
2093 }, { /* Copy of above, for chunk testing */
2094 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2095 .klen = 8,
2096 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2097 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2098 .ilen = 8,
2099 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2100 .rlen = 8,
2101 .np = 2,
2102 .tap = { 4, 4 }
2103 },
2104};
2105
2106static struct cipher_testvec des3_ede_enc_tv_template[] = {
2107 { /* These are from openssl */
2108 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2109 "\x55\x55\x55\x55\x55\x55\x55\x55"
2110 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2111 .klen = 24,
2112 .input = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2113 .ilen = 8,
2114 .result = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2115 .rlen = 8,
2116 }, {
2117 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2118 "\x86\x02\x87\x66\x59\x08\x21\x98"
2119 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2120 .klen = 24,
2121 .input = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2122 .ilen = 8,
2123 .result = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2124 .rlen = 8,
2125 }, {
2126 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2127 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2128 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2129 .klen = 24,
2130 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2131 .ilen = 8,
2132 .result = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2133 .rlen = 8,
2134 },
2135};
2136
2137static struct cipher_testvec des3_ede_dec_tv_template[] = {
2138 { /* These are from openssl */
2139 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2140 "\x55\x55\x55\x55\x55\x55\x55\x55"
2141 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2142 .klen = 24,
2143 .input = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2144 .ilen = 8,
2145 .result = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2146 .rlen = 8,
2147 }, {
2148 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2149 "\x86\x02\x87\x66\x59\x08\x21\x98"
2150 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2151 .klen = 24,
2152 .input = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2153 .ilen = 8,
2154 .result = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2155 .rlen = 8,
2156 }, {
2157 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2158 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2159 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2160 .klen = 24,
2161 .input = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2162 .ilen = 8,
2163 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2164 .rlen = 8,
2165 },
2166};
2167
2168static struct cipher_testvec des3_ede_cbc_enc_tv_template[] = {
2169 { /* Generated from openssl */
2170 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2171 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2172 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2173 .klen = 24,
2174 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2175 .input = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2176 "\x53\x20\x63\x65\x65\x72\x73\x74"
2177 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2178 "\x20\x79\x65\x53\x72\x63\x74\x65"
2179 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2180 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2181 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2182 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2183 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2184 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2185 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2186 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2187 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2188 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2189 "\x63\x65\x65\x72\x73\x74\x54\x20"
2190 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2191 .ilen = 128,
2192 .result = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2193 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2194 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2195 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2196 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2197 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2198 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2199 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2200 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2201 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2202 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2203 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2204 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2205 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2206 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2207 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2208 .rlen = 128,
2209 },
2210};
2211
2212static struct cipher_testvec des3_ede_cbc_dec_tv_template[] = {
2213 { /* Generated from openssl */
2214 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2215 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2216 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2217 .klen = 24,
2218 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2219 .input = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2220 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2221 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2222 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2223 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2224 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2225 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2226 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2227 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2228 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2229 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2230 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2231 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2232 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2233 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2234 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2235 .ilen = 128,
2236 .result = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2237 "\x53\x20\x63\x65\x65\x72\x73\x74"
2238 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2239 "\x20\x79\x65\x53\x72\x63\x74\x65"
2240 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2241 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2242 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2243 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2244 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2245 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2246 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2247 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2248 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2249 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2250 "\x63\x65\x65\x72\x73\x74\x54\x20"
2251 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2252 .rlen = 128,
2253 },
2254};
2255
2256/*
2257 * Blowfish test vectors.
2258 */
2259#define BF_ENC_TEST_VECTORS 6
2260#define BF_DEC_TEST_VECTORS 6
2261#define BF_CBC_ENC_TEST_VECTORS 1
2262#define BF_CBC_DEC_TEST_VECTORS 1
2263
2264static struct cipher_testvec bf_enc_tv_template[] = {
2265 { /* DES test vectors from OpenSSL */
2266 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2267 .klen = 8,
2268 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2269 .ilen = 8,
2270 .result = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2271 .rlen = 8,
2272 }, {
2273 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2274 .klen = 8,
2275 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2276 .ilen = 8,
2277 .result = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2278 .rlen = 8,
2279 }, {
2280 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2281 .klen = 8,
2282 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2283 .ilen = 8,
2284 .result = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2285 .rlen = 8,
2286 }, { /* Vary the keylength... */
2287 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2288 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2289 .klen = 16,
2290 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2291 .ilen = 8,
2292 .result = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2293 .rlen = 8,
2294 }, {
2295 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2296 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2297 "\x00\x11\x22\x33\x44",
2298 .klen = 21,
2299 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2300 .ilen = 8,
2301 .result = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2302 .rlen = 8,
2303 }, { /* Generated with bf488 */
2304 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2305 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2306 "\x00\x11\x22\x33\x44\x55\x66\x77"
2307 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2308 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2309 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2310 "\xff\xff\xff\xff\xff\xff\xff\xff",
2311 .klen = 56,
2312 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2313 .ilen = 8,
2314 .result = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2315 .rlen = 8,
2316 },
2317};
2318
2319static struct cipher_testvec bf_dec_tv_template[] = {
2320 { /* DES test vectors from OpenSSL */
2321 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2322 .klen = 8,
2323 .input = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2324 .ilen = 8,
2325 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2326 .rlen = 8,
2327 }, {
2328 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2329 .klen = 8,
2330 .input = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2331 .ilen = 8,
2332 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2333 .rlen = 8,
2334 }, {
2335 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2336 .klen = 8,
2337 .input = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2338 .ilen = 8,
2339 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2340 .rlen = 8,
2341 }, { /* Vary the keylength... */
2342 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2343 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2344 .klen = 16,
2345 .input = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2346 .ilen = 8,
2347 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2348 .rlen = 8,
2349 }, {
2350 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2351 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2352 "\x00\x11\x22\x33\x44",
2353 .klen = 21,
2354 .input = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2355 .ilen = 8,
2356 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2357 .rlen = 8,
2358 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
2359 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2360 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2361 "\x00\x11\x22\x33\x44\x55\x66\x77"
2362 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2363 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2364 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2365 "\xff\xff\xff\xff\xff\xff\xff\xff",
2366 .klen = 56,
2367 .input = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2368 .ilen = 8,
2369 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2370 .rlen = 8,
2371 },
2372};
2373
2374static struct cipher_testvec bf_cbc_enc_tv_template[] = {
2375 { /* From OpenSSL */
2376 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2377 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2378 .klen = 16,
2379 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2380 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2381 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2382 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2383 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2384 .ilen = 32,
2385 .result = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2386 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2387 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2388 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2389 .rlen = 32,
2390 },
2391};
2392
2393static struct cipher_testvec bf_cbc_dec_tv_template[] = {
2394 { /* From OpenSSL */
2395 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2396 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2397 .klen = 16,
2398 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2399 .input = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2400 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2401 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2402 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2403 .ilen = 32,
2404 .result = "\x37\x36\x35\x34\x33\x32\x31\x20"
2405 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2406 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2407 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2408 .rlen = 32,
2409 },
2410};
2411
2412/*
2413 * Twofish test vectors.
2414 */
2415#define TF_ENC_TEST_VECTORS 3
2416#define TF_DEC_TEST_VECTORS 3
2417#define TF_CBC_ENC_TEST_VECTORS 4
2418#define TF_CBC_DEC_TEST_VECTORS 4
2419
2420static struct cipher_testvec tf_enc_tv_template[] = {
2421 {
2422 .key = zeroed_string,
2423 .klen = 16,
2424 .input = zeroed_string,
2425 .ilen = 16,
2426 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2427 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2428 .rlen = 16,
2429 }, {
2430 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2431 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2432 "\x00\x11\x22\x33\x44\x55\x66\x77",
2433 .klen = 24,
2434 .input = zeroed_string,
2435 .ilen = 16,
2436 .result = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2437 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2438 .rlen = 16,
2439 }, {
2440 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2441 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2442 "\x00\x11\x22\x33\x44\x55\x66\x77"
2443 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2444 .klen = 32,
2445 .input = zeroed_string,
2446 .ilen = 16,
2447 .result = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2448 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2449 .rlen = 16,
2450 },
2451};
2452 34
2453static struct cipher_testvec tf_dec_tv_template[] = { 35static struct cipher_speed_template des3_speed_template[] = {
2454 { 36 {
2455 .key = zeroed_string,
2456 .klen = 16,
2457 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2458 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2459 .ilen = 16,
2460 .result = zeroed_string,
2461 .rlen = 16,
2462 }, {
2463 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef" 37 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2464 "\xfe\xdc\xba\x98\x76\x54\x32\x10" 38 "\x55\x55\x55\x55\x55\x55\x55\x55"
2465 "\x00\x11\x22\x33\x44\x55\x66\x77",
2466 .klen = 24,
2467 .input = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2468 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2469 .ilen = 16,
2470 .result = zeroed_string,
2471 .rlen = 16,
2472 }, {
2473 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2474 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2475 "\x00\x11\x22\x33\x44\x55\x66\x77"
2476 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2477 .klen = 32,
2478 .input = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2479 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2480 .ilen = 16,
2481 .result = zeroed_string,
2482 .rlen = 16,
2483 },
2484};
2485
2486static struct cipher_testvec tf_cbc_enc_tv_template[] = {
2487 { /* Generated with Nettle */
2488 .key = zeroed_string,
2489 .klen = 16,
2490 .iv = zeroed_string,
2491 .input = zeroed_string,
2492 .ilen = 16,
2493 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2494 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2495 .rlen = 16,
2496 }, {
2497 .key = zeroed_string,
2498 .klen = 16,
2499 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2500 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2501 .input = zeroed_string,
2502 .ilen = 16,
2503 .result = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2504 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2505 .rlen = 16,
2506 }, {
2507 .key = zeroed_string,
2508 .klen = 16,
2509 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2510 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2511 .input = zeroed_string,
2512 .ilen = 16,
2513 .result = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2514 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2515 .rlen = 16,
2516 }, {
2517 .key = zeroed_string,
2518 .klen = 16,
2519 .iv = zeroed_string,
2520 .input = zeroed_string,
2521 .ilen = 48,
2522 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2523 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2524 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2525 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2526 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2527 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2528 .rlen = 48,
2529 },
2530};
2531
2532static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2533 { /* Reverse of the first four above */
2534 .key = zeroed_string,
2535 .klen = 16,
2536 .iv = zeroed_string,
2537 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2538 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2539 .ilen = 16,
2540 .result = zeroed_string,
2541 .rlen = 16,
2542 }, {
2543 .key = zeroed_string,
2544 .klen = 16,
2545 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2546 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2547 .input = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2548 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2549 .ilen = 16,
2550 .result = zeroed_string,
2551 .rlen = 16,
2552 }, {
2553 .key = zeroed_string,
2554 .klen = 16,
2555 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2556 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2557 .input = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2558 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2559 .ilen = 16,
2560 .result = zeroed_string,
2561 .rlen = 16,
2562 }, {
2563 .key = zeroed_string,
2564 .klen = 16,
2565 .iv = zeroed_string,
2566 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2567 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2568 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2569 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2570 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2571 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2572 .ilen = 48,
2573 .result = zeroed_string,
2574 .rlen = 48,
2575 },
2576};
2577
2578/*
2579 * Serpent test vectors. These are backwards because Serpent writes
2580 * octet sequences in right-to-left mode.
2581 */
2582#define SERPENT_ENC_TEST_VECTORS 4
2583#define SERPENT_DEC_TEST_VECTORS 4
2584
2585#define TNEPRES_ENC_TEST_VECTORS 4
2586#define TNEPRES_DEC_TEST_VECTORS 4
2587
2588static struct cipher_testvec serpent_enc_tv_template[] = {
2589 {
2590 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2591 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2592 .ilen = 16,
2593 .result = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2594 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2595 .rlen = 16,
2596 }, {
2597 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2598 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2599 .klen = 16,
2600 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2601 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2602 .ilen = 16,
2603 .result = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2604 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2605 .rlen = 16,
2606 }, {
2607 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2608 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2609 "\x10\x11\x12\x13\x14\x15\x16\x17"
2610 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2611 .klen = 32,
2612 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2613 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2614 .ilen = 16,
2615 .result = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2616 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2617 .rlen = 16,
2618 }, {
2619 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2620 .klen = 16,
2621 .input = zeroed_string,
2622 .ilen = 16,
2623 .result = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2624 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2625 .rlen = 16,
2626 },
2627};
2628
2629static struct cipher_testvec tnepres_enc_tv_template[] = {
2630 { /* KeySize=128, PT=0, I=1 */
2631 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2632 "\x00\x00\x00\x00\x00\x00\x00\x00",
2633 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2634 "\x00\x00\x00\x00\x00\x00\x00\x00",
2635 .klen = 16,
2636 .ilen = 16,
2637 .result = "\x49\xaf\xbf\xad\x9d\x5a\x34\x05"
2638 "\x2c\xd8\xff\xa5\x98\x6b\xd2\xdd",
2639 .rlen = 16,
2640 }, { /* KeySize=192, PT=0, I=1 */
2641 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2642 "\x00\x00\x00\x00\x00\x00\x00\x00"
2643 "\x00\x00\x00\x00\x00\x00\x00\x00",
2644 .klen = 24,
2645 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2646 "\x00\x00\x00\x00\x00\x00\x00\x00",
2647 .ilen = 16,
2648 .result = "\xe7\x8e\x54\x02\xc7\x19\x55\x68"
2649 "\xac\x36\x78\xf7\xa3\xf6\x0c\x66",
2650 .rlen = 16,
2651 }, { /* KeySize=256, PT=0, I=1 */
2652 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2653 "\x00\x00\x00\x00\x00\x00\x00\x00"
2654 "\x00\x00\x00\x00\x00\x00\x00\x00"
2655 "\x00\x00\x00\x00\x00\x00\x00\x00",
2656 .klen = 32,
2657 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2658 "\x00\x00\x00\x00\x00\x00\x00\x00",
2659 .ilen = 16,
2660 .result = "\xab\xed\x96\xe7\x66\xbf\x28\xcb"
2661 "\xc0\xeb\xd2\x1a\x82\xef\x08\x19",
2662 .rlen = 16,
2663 }, { /* KeySize=256, I=257 */
2664 .key = "\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18"
2665 "\x17\x16\x15\x14\x13\x12\x11\x10"
2666 "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2667 "\x07\x06\x05\x04\x03\x02\x01\x00",
2668 .klen = 32,
2669 .input = "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2670 "\x07\x06\x05\x04\x03\x02\x01\x00",
2671 .ilen = 16,
2672 .result = "\x5c\xe7\x1c\x70\xd2\x88\x2e\x5b"
2673 "\xb8\x32\xe4\x33\xf8\x9f\x26\xde",
2674 .rlen = 16,
2675 },
2676};
2677
2678
2679static struct cipher_testvec serpent_dec_tv_template[] = {
2680 {
2681 .input = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2682 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2683 .ilen = 16,
2684 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2685 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2686 .rlen = 16,
2687 }, {
2688 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2689 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2690 .klen = 16,
2691 .input = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2692 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2693 .ilen = 16,
2694 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2695 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2696 .rlen = 16,
2697 }, {
2698 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2699 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2700 "\x10\x11\x12\x13\x14\x15\x16\x17"
2701 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2702 .klen = 32,
2703 .input = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2704 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2705 .ilen = 16,
2706 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2707 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2708 .rlen = 16,
2709 }, {
2710 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2711 .klen = 16,
2712 .input = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2713 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2714 .ilen = 16,
2715 .result = zeroed_string,
2716 .rlen = 16,
2717 },
2718};
2719
2720static struct cipher_testvec tnepres_dec_tv_template[] = {
2721 {
2722 .input = "\x41\xcc\x6b\x31\x59\x31\x45\x97"
2723 "\x6d\x6f\xbb\x38\x4b\x37\x21\x28",
2724 .ilen = 16,
2725 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2726 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2727 .rlen = 16,
2728 }, {
2729 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2730 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2731 .klen = 16,
2732 .input = "\xea\xf4\xd7\xfc\xd8\x01\x34\x47"
2733 "\x81\x45\x0b\xfa\x0c\xd6\xad\x6e",
2734 .ilen = 16,
2735 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2736 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2737 .rlen = 16,
2738 }, {
2739 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2740 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2741 "\x10\x11\x12\x13\x14\x15\x16\x17"
2742 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2743 .klen = 32,
2744 .input = "\x64\xa9\x1a\x37\xed\x9f\xe7\x49"
2745 "\xa8\x4e\x76\xd6\xf5\x0d\x78\xee",
2746 .ilen = 16,
2747 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2748 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2749 .rlen = 16,
2750 }, { /* KeySize=128, I=121 */
2751 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2752 .klen = 16,
2753 .input = "\x3d\xda\xbf\xc0\x06\xda\xab\x06"
2754 "\x46\x2a\xf4\xef\x81\x54\x4e\x26",
2755 .ilen = 16,
2756 .result = zeroed_string,
2757 .rlen = 16,
2758 },
2759};
2760
2761
2762/* Cast6 test vectors from RFC 2612 */
2763#define CAST6_ENC_TEST_VECTORS 3
2764#define CAST6_DEC_TEST_VECTORS 3
2765
2766static struct cipher_testvec cast6_enc_tv_template[] = {
2767 {
2768 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2769 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2770 .klen = 16,
2771 .input = zeroed_string,
2772 .ilen = 16,
2773 .result = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2774 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2775 .rlen = 16,
2776 }, {
2777 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2778 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2779 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2780 .klen = 24,
2781 .input = zeroed_string,
2782 .ilen = 16,
2783 .result = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2784 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2785 .rlen = 16,
2786 }, {
2787 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2788 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2789 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2790 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2791 .klen = 32,
2792 .input = zeroed_string,
2793 .ilen = 16,
2794 .result = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2795 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2796 .rlen = 16,
2797 },
2798};
2799
2800static struct cipher_testvec cast6_dec_tv_template[] = {
2801 {
2802 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2803 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2804 .klen = 16,
2805 .input = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2806 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2807 .ilen = 16,
2808 .result = zeroed_string,
2809 .rlen = 16,
2810 }, {
2811 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2812 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2813 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2814 .klen = 24,
2815 .input = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2816 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2817 .ilen = 16,
2818 .result = zeroed_string,
2819 .rlen = 16,
2820 }, {
2821 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2822 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2823 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2824 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2825 .klen = 32,
2826 .input = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2827 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2828 .ilen = 16,
2829 .result = zeroed_string,
2830 .rlen = 16,
2831 },
2832};
2833
2834
2835/*
2836 * AES test vectors.
2837 */
2838#define AES_ENC_TEST_VECTORS 3
2839#define AES_DEC_TEST_VECTORS 3
2840#define AES_CBC_ENC_TEST_VECTORS 4
2841#define AES_CBC_DEC_TEST_VECTORS 4
2842#define AES_LRW_ENC_TEST_VECTORS 8
2843#define AES_LRW_DEC_TEST_VECTORS 8
2844#define AES_XTS_ENC_TEST_VECTORS 4
2845#define AES_XTS_DEC_TEST_VECTORS 4
2846#define AES_CTR_ENC_TEST_VECTORS 7
2847#define AES_CTR_DEC_TEST_VECTORS 6
2848#define AES_GCM_ENC_TEST_VECTORS 9
2849#define AES_GCM_DEC_TEST_VECTORS 8
2850#define AES_CCM_ENC_TEST_VECTORS 7
2851#define AES_CCM_DEC_TEST_VECTORS 7
2852
2853static struct cipher_testvec aes_enc_tv_template[] = {
2854 { /* From FIPS-197 */
2855 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2856 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2857 .klen = 16,
2858 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2859 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2860 .ilen = 16,
2861 .result = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2862 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2863 .rlen = 16,
2864 }, {
2865 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2866 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2867 "\x10\x11\x12\x13\x14\x15\x16\x17",
2868 .klen = 24,
2869 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2870 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2871 .ilen = 16,
2872 .result = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2873 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2874 .rlen = 16,
2875 }, {
2876 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2877 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2878 "\x10\x11\x12\x13\x14\x15\x16\x17"
2879 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2880 .klen = 32,
2881 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2882 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2883 .ilen = 16,
2884 .result = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2885 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2886 .rlen = 16,
2887 },
2888};
2889
2890static struct cipher_testvec aes_dec_tv_template[] = {
2891 { /* From FIPS-197 */
2892 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2893 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2894 .klen = 16,
2895 .input = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2896 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2897 .ilen = 16,
2898 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2899 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2900 .rlen = 16,
2901 }, {
2902 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2903 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2904 "\x10\x11\x12\x13\x14\x15\x16\x17",
2905 .klen = 24,
2906 .input = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2907 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2908 .ilen = 16,
2909 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2910 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2911 .rlen = 16,
2912 }, {
2913 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2914 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2915 "\x10\x11\x12\x13\x14\x15\x16\x17"
2916 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2917 .klen = 32,
2918 .input = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2919 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2920 .ilen = 16,
2921 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2922 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2923 .rlen = 16,
2924 },
2925};
2926
2927static struct cipher_testvec aes_cbc_enc_tv_template[] = {
2928 { /* From RFC 3602 */
2929 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
2930 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
2931 .klen = 16,
2932 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
2933 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
2934 .input = "Single block msg",
2935 .ilen = 16,
2936 .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
2937 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
2938 .rlen = 16,
2939 }, {
2940 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
2941 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
2942 .klen = 16,
2943 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
2944 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
2945 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2946 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2947 "\x10\x11\x12\x13\x14\x15\x16\x17"
2948 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2949 .ilen = 32,
2950 .result = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
2951 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
2952 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
2953 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
2954 .rlen = 32,
2955 }, { /* From NIST SP800-38A */
2956 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
2957 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
2958 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
2959 .klen = 24,
2960 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
2961 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2962 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
2963 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
2964 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
2965 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
2966 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
2967 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
2968 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
2969 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
2970 .ilen = 64,
2971 .result = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
2972 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
2973 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
2974 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
2975 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
2976 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
2977 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
2978 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
2979 .rlen = 64,
2980 }, {
2981 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
2982 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
2983 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
2984 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
2985 .klen = 32,
2986 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
2987 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2988 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
2989 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
2990 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
2991 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
2992 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
2993 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
2994 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
2995 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
2996 .ilen = 64,
2997 .result = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
2998 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
2999 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
3000 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
3001 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
3002 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
3003 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
3004 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
3005 .rlen = 64,
3006 },
3007};
3008
3009static struct cipher_testvec aes_cbc_dec_tv_template[] = {
3010 { /* From RFC 3602 */
3011 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
3012 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
3013 .klen = 16,
3014 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
3015 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
3016 .input = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
3017 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
3018 .ilen = 16,
3019 .result = "Single block msg",
3020 .rlen = 16,
3021 }, {
3022 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
3023 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
3024 .klen = 16,
3025 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
3026 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
3027 .input = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
3028 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
3029 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
3030 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
3031 .ilen = 32,
3032 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
3033 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3034 "\x10\x11\x12\x13\x14\x15\x16\x17"
3035 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
3036 .rlen = 32,
3037 }, { /* From NIST SP800-38A */
3038 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
3039 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
3040 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
3041 .klen = 24,
3042 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3043 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3044 .input = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
3045 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
3046 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
3047 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
3048 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
3049 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
3050 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
3051 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
3052 .ilen = 64,
3053 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3054 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3055 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3056 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3057 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3058 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3059 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3060 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3061 .rlen = 64,
3062 }, {
3063 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
3064 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
3065 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
3066 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
3067 .klen = 32,
3068 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3069 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3070 .input = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
3071 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
3072 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
3073 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
3074 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
3075 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
3076 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
3077 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
3078 .ilen = 64,
3079 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3080 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3081 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3082 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3083 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3084 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3085 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3086 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3087 .rlen = 64,
3088 },
3089};
3090
3091static struct cipher_testvec aes_lrw_enc_tv_template[] = {
3092 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
3093 { /* LRW-32-AES 1 */
3094 .key = "\x45\x62\xac\x25\xf8\x28\x17\x6d"
3095 "\x4c\x26\x84\x14\xb5\x68\x01\x85"
3096 "\x25\x8e\x2a\x05\xe7\x3e\x9d\x03"
3097 "\xee\x5a\x83\x0c\xcc\x09\x4c\x87",
3098 .klen = 32,
3099 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3100 "\x00\x00\x00\x00\x00\x00\x00\x01",
3101 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3102 "\x38\x39\x41\x42\x43\x44\x45\x46",
3103 .ilen = 16,
3104 .result = "\xf1\xb2\x73\xcd\x65\xa3\xdf\x5f"
3105 "\xe9\x5d\x48\x92\x54\x63\x4e\xb8",
3106 .rlen = 16,
3107 }, { /* LRW-32-AES 2 */
3108 .key = "\x59\x70\x47\x14\xf5\x57\x47\x8c"
3109 "\xd7\x79\xe8\x0f\x54\x88\x79\x44"
3110 "\x0d\x48\xf0\xb7\xb1\x5a\x53\xea"
3111 "\x1c\xaa\x6b\x29\xc2\xca\xfb\xaf",
3112 .klen = 32,
3113 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3114 "\x00\x00\x00\x00\x00\x00\x00\x02",
3115 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3116 "\x38\x39\x41\x42\x43\x44\x45\x46",
3117 .ilen = 16,
3118 .result = "\x00\xc8\x2b\xae\x95\xbb\xcd\xe5"
3119 "\x27\x4f\x07\x69\xb2\x60\xe1\x36",
3120 .rlen = 16,
3121 }, { /* LRW-32-AES 3 */
3122 .key = "\xd8\x2a\x91\x34\xb2\x6a\x56\x50"
3123 "\x30\xfe\x69\xe2\x37\x7f\x98\x47"
3124 "\xcd\xf9\x0b\x16\x0c\x64\x8f\xb6"
3125 "\xb0\x0d\x0d\x1b\xae\x85\x87\x1f",
3126 .klen = 32,
3127 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3128 "\x00\x00\x00\x02\x00\x00\x00\x00",
3129 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3130 "\x38\x39\x41\x42\x43\x44\x45\x46",
3131 .ilen = 16,
3132 .result = "\x76\x32\x21\x83\xed\x8f\xf1\x82"
3133 "\xf9\x59\x62\x03\x69\x0e\x5e\x01",
3134 .rlen = 16,
3135 }, { /* LRW-32-AES 4 */
3136 .key = "\x0f\x6a\xef\xf8\xd3\xd2\xbb\x15"
3137 "\x25\x83\xf7\x3c\x1f\x01\x28\x74"
3138 "\xca\xc6\xbc\x35\x4d\x4a\x65\x54"
3139 "\x90\xae\x61\xcf\x7b\xae\xbd\xcc"
3140 "\xad\xe4\x94\xc5\x4a\x29\xae\x70",
3141 .klen = 40,
3142 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3143 "\x00\x00\x00\x00\x00\x00\x00\x01",
3144 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3145 "\x38\x39\x41\x42\x43\x44\x45\x46",
3146 .ilen = 16,
3147 .result = "\x9c\x0f\x15\x2f\x55\xa2\xd8\xf0"
3148 "\xd6\x7b\x8f\x9e\x28\x22\xbc\x41",
3149 .rlen = 16,
3150 }, { /* LRW-32-AES 5 */
3151 .key = "\x8a\xd4\xee\x10\x2f\xbd\x81\xff"
3152 "\xf8\x86\xce\xac\x93\xc5\xad\xc6"
3153 "\xa0\x19\x07\xc0\x9d\xf7\xbb\xdd"
3154 "\x52\x13\xb2\xb7\xf0\xff\x11\xd8"
3155 "\xd6\x08\xd0\xcd\x2e\xb1\x17\x6f",
3156 .klen = 40,
3157 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3158 "\x00\x00\x00\x02\x00\x00\x00\x00",
3159 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3160 "\x38\x39\x41\x42\x43\x44\x45\x46",
3161 .ilen = 16,
3162 .result = "\xd4\x27\x6a\x7f\x14\x91\x3d\x65"
3163 "\xc8\x60\x48\x02\x87\xe3\x34\x06",
3164 .rlen = 16,
3165 }, { /* LRW-32-AES 6 */
3166 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3167 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3168 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3169 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3170 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3171 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3172 .klen = 48,
3173 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3174 "\x00\x00\x00\x00\x00\x00\x00\x01",
3175 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3176 "\x38\x39\x41\x42\x43\x44\x45\x46",
3177 .ilen = 16,
3178 .result = "\xbd\x06\xb8\xe1\xdb\x98\x89\x9e"
3179 "\xc4\x98\xe4\x91\xcf\x1c\x70\x2b",
3180 .rlen = 16,
3181 }, { /* LRW-32-AES 7 */
3182 .key = "\xfb\x76\x15\xb2\x3d\x80\x89\x1d"
3183 "\xd4\x70\x98\x0b\xc7\x95\x84\xc8"
3184 "\xb2\xfb\x64\xce\x60\x97\x87\x8d"
3185 "\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"
3186 "\x6e\x78\x17\xe7\x2d\x5e\x12\xd4"
3187 "\x60\x64\x04\x7a\xf1\x2f\x9e\x0c",
3188 .klen = 48,
3189 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3190 "\x00\x00\x00\x02\x00\x00\x00\x00",
3191 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3192 "\x38\x39\x41\x42\x43\x44\x45\x46",
3193 .ilen = 16,
3194 .result = "\x5b\x90\x8e\xc1\xab\xdd\x67\x5f"
3195 "\x3d\x69\x8a\x95\x53\xc8\x9c\xe5",
3196 .rlen = 16,
3197 }, {
3198/* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
3199 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3200 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3201 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3202 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3203 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3204 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3205 .klen = 48,
3206 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3207 "\x00\x00\x00\x00\x00\x00\x00\x01",
3208 .input = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
3209 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
3210 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
3211 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
3212 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
3213 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
3214 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
3215 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
3216 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
3217 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
3218 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
3219 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
3220 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
3221 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
3222 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
3223 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
3224 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
3225 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
3226 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
3227 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
3228 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
3229 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
3230 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
3231 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
3232 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
3233 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
3234 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
3235 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
3236 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
3237 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
3238 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
3239 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
3240 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
3241 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
3242 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
3243 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
3244 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
3245 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
3246 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
3247 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
3248 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
3249 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
3250 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
3251 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
3252 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
3253 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
3254 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
3255 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
3256 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
3257 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
3258 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
3259 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
3260 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
3261 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
3262 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
3263 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
3264 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
3265 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
3266 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
3267 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
3268 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
3269 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
3270 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
3271 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
3272 .ilen = 512,
3273 .result = "\x1a\x1d\xa9\x30\xad\xf9\x2f\x9b"
3274 "\xb6\x1d\xae\xef\xf0\x2f\xf8\x5a"
3275 "\x39\x3c\xbf\x2a\xb2\x45\xb2\x23"
3276 "\x1b\x63\x3c\xcf\xaa\xbe\xcf\x4e"
3277 "\xfa\xe8\x29\xc2\x20\x68\x2b\x3c"
3278 "\x2e\x8b\xf7\x6e\x25\xbd\xe3\x3d"
3279 "\x66\x27\xd6\xaf\xd6\x64\x3e\xe3"
3280 "\xe8\x58\x46\x97\x39\x51\x07\xde"
3281 "\xcb\x37\xbc\xa9\xc0\x5f\x75\xc3"
3282 "\x0e\x84\x23\x1d\x16\xd4\x1c\x59"
3283 "\x9c\x1a\x02\x55\xab\x3a\x97\x1d"
3284 "\xdf\xdd\xc7\x06\x51\xd7\x70\xae"
3285 "\x23\xc6\x8c\xf5\x1e\xa0\xe5\x82"
3286 "\xb8\xb2\xbf\x04\xa0\x32\x8e\x68"
3287 "\xeb\xaf\x6e\x2d\x94\x22\x2f\xce"
3288 "\x4c\xb5\x59\xe2\xa2\x2f\xa0\x98"
3289 "\x1a\x97\xc6\xd4\xb5\x00\x59\xf2"
3290 "\x84\x14\x72\xb1\x9a\x6e\xa3\x7f"
3291 "\xea\x20\xe7\xcb\x65\x77\x3a\xdf"
3292 "\xc8\x97\x67\x15\xc2\x2a\x27\xcc"
3293 "\x18\x55\xa1\x24\x0b\x24\x24\xaf"
3294 "\x5b\xec\x68\xb8\xc8\xf5\xba\x63"
3295 "\xff\xed\x89\xce\xd5\x3d\x88\xf3"
3296 "\x25\xef\x05\x7c\x3a\xef\xeb\xd8"
3297 "\x7a\x32\x0d\xd1\x1e\x58\x59\x99"
3298 "\x90\x25\xb5\x26\xb0\xe3\x2b\x6c"
3299 "\x4c\xa9\x8b\x84\x4f\x5e\x01\x50"
3300 "\x41\x30\x58\xc5\x62\x74\x52\x1d"
3301 "\x45\x24\x6a\x42\x64\x4f\x97\x1c"
3302 "\xa8\x66\xb5\x6d\x79\xd4\x0d\x48"
3303 "\xc5\x5f\xf3\x90\x32\xdd\xdd\xe1"
3304 "\xe4\xa9\x9f\xfc\xc3\x52\x5a\x46"
3305 "\xe4\x81\x84\x95\x36\x59\x7a\x6b"
3306 "\xaa\xb3\x60\xad\xce\x9f\x9f\x28"
3307 "\xe0\x01\x75\x22\xc4\x4e\xa9\x62"
3308 "\x5c\x62\x0d\x00\xcb\x13\xe8\x43"
3309 "\x72\xd4\x2d\x53\x46\xb5\xd1\x16"
3310 "\x22\x18\xdf\x34\x33\xf5\xd6\x1c"
3311 "\xb8\x79\x78\x97\x94\xff\x72\x13"
3312 "\x4c\x27\xfc\xcb\xbf\x01\x53\xa6"
3313 "\xb4\x50\x6e\xde\xdf\xb5\x43\xa4"
3314 "\x59\xdf\x52\xf9\x7c\xe0\x11\x6f"
3315 "\x2d\x14\x8e\x24\x61\x2c\xe1\x17"
3316 "\xcc\xce\x51\x0c\x19\x8a\x82\x30"
3317 "\x94\xd5\x3d\x6a\x53\x06\x5e\xbd"
3318 "\xb7\xeb\xfa\xfd\x27\x51\xde\x85"
3319 "\x1e\x86\x53\x11\x53\x94\x00\xee"
3320 "\x2b\x8c\x08\x2a\xbf\xdd\xae\x11"
3321 "\xcb\x1e\xa2\x07\x9a\x80\xcf\x62"
3322 "\x9b\x09\xdc\x95\x3c\x96\x8e\xb1"
3323 "\x09\xbd\xe4\xeb\xdb\xca\x70\x7a"
3324 "\x9e\xfa\x31\x18\x45\x3c\x21\x33"
3325 "\xb0\xb3\x2b\xea\xf3\x71\x2d\xe1"
3326 "\x03\xad\x1b\x48\xd4\x67\x27\xf0"
3327 "\x62\xe4\x3d\xfb\x9b\x08\x76\xe7"
3328 "\xdd\x2b\x01\x39\x04\x5a\x58\x7a"
3329 "\xf7\x11\x90\xec\xbd\x51\x5c\x32"
3330 "\x6b\xd7\x35\x39\x02\x6b\xf2\xa6"
3331 "\xd0\x0d\x07\xe1\x06\xc4\x5b\x7d"
3332 "\xe4\x6a\xd7\xee\x15\x1f\x83\xb4"
3333 "\xa3\xa7\x5e\xc3\x90\xb7\xef\xd3"
3334 "\xb7\x4f\xf8\x92\x4c\xb7\x3c\x29"
3335 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7"
3336 "\x74\x3f\x7d\x58\x88\x75\xde\x3e",
3337 .rlen = 512,
3338 }
3339};
3340
3341static struct cipher_testvec aes_lrw_dec_tv_template[] = {
3342 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
3343 /* same as enc vectors with input and result reversed */
3344 { /* LRW-32-AES 1 */
3345 .key = "\x45\x62\xac\x25\xf8\x28\x17\x6d"
3346 "\x4c\x26\x84\x14\xb5\x68\x01\x85"
3347 "\x25\x8e\x2a\x05\xe7\x3e\x9d\x03"
3348 "\xee\x5a\x83\x0c\xcc\x09\x4c\x87",
3349 .klen = 32,
3350 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3351 "\x00\x00\x00\x00\x00\x00\x00\x01",
3352 .input = "\xf1\xb2\x73\xcd\x65\xa3\xdf\x5f"
3353 "\xe9\x5d\x48\x92\x54\x63\x4e\xb8",
3354 .ilen = 16,
3355 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3356 "\x38\x39\x41\x42\x43\x44\x45\x46",
3357 .rlen = 16,
3358 }, { /* LRW-32-AES 2 */
3359 .key = "\x59\x70\x47\x14\xf5\x57\x47\x8c"
3360 "\xd7\x79\xe8\x0f\x54\x88\x79\x44"
3361 "\x0d\x48\xf0\xb7\xb1\x5a\x53\xea"
3362 "\x1c\xaa\x6b\x29\xc2\xca\xfb\xaf",
3363 .klen = 32,
3364 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3365 "\x00\x00\x00\x00\x00\x00\x00\x02",
3366 .input = "\x00\xc8\x2b\xae\x95\xbb\xcd\xe5"
3367 "\x27\x4f\x07\x69\xb2\x60\xe1\x36",
3368 .ilen = 16,
3369 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3370 "\x38\x39\x41\x42\x43\x44\x45\x46",
3371 .rlen = 16,
3372 }, { /* LRW-32-AES 3 */
3373 .key = "\xd8\x2a\x91\x34\xb2\x6a\x56\x50"
3374 "\x30\xfe\x69\xe2\x37\x7f\x98\x47"
3375 "\xcd\xf9\x0b\x16\x0c\x64\x8f\xb6"
3376 "\xb0\x0d\x0d\x1b\xae\x85\x87\x1f",
3377 .klen = 32,
3378 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3379 "\x00\x00\x00\x02\x00\x00\x00\x00",
3380 .input = "\x76\x32\x21\x83\xed\x8f\xf1\x82"
3381 "\xf9\x59\x62\x03\x69\x0e\x5e\x01",
3382 .ilen = 16,
3383 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3384 "\x38\x39\x41\x42\x43\x44\x45\x46",
3385 .rlen = 16,
3386 }, { /* LRW-32-AES 4 */
3387 .key = "\x0f\x6a\xef\xf8\xd3\xd2\xbb\x15"
3388 "\x25\x83\xf7\x3c\x1f\x01\x28\x74"
3389 "\xca\xc6\xbc\x35\x4d\x4a\x65\x54"
3390 "\x90\xae\x61\xcf\x7b\xae\xbd\xcc"
3391 "\xad\xe4\x94\xc5\x4a\x29\xae\x70",
3392 .klen = 40,
3393 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3394 "\x00\x00\x00\x00\x00\x00\x00\x01",
3395 .input = "\x9c\x0f\x15\x2f\x55\xa2\xd8\xf0"
3396 "\xd6\x7b\x8f\x9e\x28\x22\xbc\x41",
3397 .ilen = 16,
3398 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3399 "\x38\x39\x41\x42\x43\x44\x45\x46",
3400 .rlen = 16,
3401 }, { /* LRW-32-AES 5 */
3402 .key = "\x8a\xd4\xee\x10\x2f\xbd\x81\xff"
3403 "\xf8\x86\xce\xac\x93\xc5\xad\xc6"
3404 "\xa0\x19\x07\xc0\x9d\xf7\xbb\xdd"
3405 "\x52\x13\xb2\xb7\xf0\xff\x11\xd8"
3406 "\xd6\x08\xd0\xcd\x2e\xb1\x17\x6f",
3407 .klen = 40,
3408 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3409 "\x00\x00\x00\x02\x00\x00\x00\x00",
3410 .input = "\xd4\x27\x6a\x7f\x14\x91\x3d\x65"
3411 "\xc8\x60\x48\x02\x87\xe3\x34\x06",
3412 .ilen = 16,
3413 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3414 "\x38\x39\x41\x42\x43\x44\x45\x46",
3415 .rlen = 16,
3416 }, { /* LRW-32-AES 6 */
3417 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3418 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3419 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3420 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3421 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3422 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3423 .klen = 48,
3424 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3425 "\x00\x00\x00\x00\x00\x00\x00\x01",
3426 .input = "\xbd\x06\xb8\xe1\xdb\x98\x89\x9e"
3427 "\xc4\x98\xe4\x91\xcf\x1c\x70\x2b",
3428 .ilen = 16,
3429 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3430 "\x38\x39\x41\x42\x43\x44\x45\x46",
3431 .rlen = 16,
3432 }, { /* LRW-32-AES 7 */
3433 .key = "\xfb\x76\x15\xb2\x3d\x80\x89\x1d"
3434 "\xd4\x70\x98\x0b\xc7\x95\x84\xc8"
3435 "\xb2\xfb\x64\xce\x60\x97\x87\x8d"
3436 "\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"
3437 "\x6e\x78\x17\xe7\x2d\x5e\x12\xd4"
3438 "\x60\x64\x04\x7a\xf1\x2f\x9e\x0c",
3439 .klen = 48,
3440 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3441 "\x00\x00\x00\x02\x00\x00\x00\x00",
3442 .input = "\x5b\x90\x8e\xc1\xab\xdd\x67\x5f"
3443 "\x3d\x69\x8a\x95\x53\xc8\x9c\xe5",
3444 .ilen = 16,
3445 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3446 "\x38\x39\x41\x42\x43\x44\x45\x46",
3447 .rlen = 16,
3448 }, {
3449/* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
3450 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3451 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3452 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3453 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3454 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3455 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3456 .klen = 48,
3457 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3458 "\x00\x00\x00\x00\x00\x00\x00\x01",
3459 .input = "\x1a\x1d\xa9\x30\xad\xf9\x2f\x9b"
3460 "\xb6\x1d\xae\xef\xf0\x2f\xf8\x5a"
3461 "\x39\x3c\xbf\x2a\xb2\x45\xb2\x23"
3462 "\x1b\x63\x3c\xcf\xaa\xbe\xcf\x4e"
3463 "\xfa\xe8\x29\xc2\x20\x68\x2b\x3c"
3464 "\x2e\x8b\xf7\x6e\x25\xbd\xe3\x3d"
3465 "\x66\x27\xd6\xaf\xd6\x64\x3e\xe3"
3466 "\xe8\x58\x46\x97\x39\x51\x07\xde"
3467 "\xcb\x37\xbc\xa9\xc0\x5f\x75\xc3"
3468 "\x0e\x84\x23\x1d\x16\xd4\x1c\x59"
3469 "\x9c\x1a\x02\x55\xab\x3a\x97\x1d"
3470 "\xdf\xdd\xc7\x06\x51\xd7\x70\xae"
3471 "\x23\xc6\x8c\xf5\x1e\xa0\xe5\x82"
3472 "\xb8\xb2\xbf\x04\xa0\x32\x8e\x68"
3473 "\xeb\xaf\x6e\x2d\x94\x22\x2f\xce"
3474 "\x4c\xb5\x59\xe2\xa2\x2f\xa0\x98"
3475 "\x1a\x97\xc6\xd4\xb5\x00\x59\xf2"
3476 "\x84\x14\x72\xb1\x9a\x6e\xa3\x7f"
3477 "\xea\x20\xe7\xcb\x65\x77\x3a\xdf"
3478 "\xc8\x97\x67\x15\xc2\x2a\x27\xcc"
3479 "\x18\x55\xa1\x24\x0b\x24\x24\xaf"
3480 "\x5b\xec\x68\xb8\xc8\xf5\xba\x63"
3481 "\xff\xed\x89\xce\xd5\x3d\x88\xf3"
3482 "\x25\xef\x05\x7c\x3a\xef\xeb\xd8"
3483 "\x7a\x32\x0d\xd1\x1e\x58\x59\x99"
3484 "\x90\x25\xb5\x26\xb0\xe3\x2b\x6c"
3485 "\x4c\xa9\x8b\x84\x4f\x5e\x01\x50"
3486 "\x41\x30\x58\xc5\x62\x74\x52\x1d"
3487 "\x45\x24\x6a\x42\x64\x4f\x97\x1c"
3488 "\xa8\x66\xb5\x6d\x79\xd4\x0d\x48"
3489 "\xc5\x5f\xf3\x90\x32\xdd\xdd\xe1"
3490 "\xe4\xa9\x9f\xfc\xc3\x52\x5a\x46"
3491 "\xe4\x81\x84\x95\x36\x59\x7a\x6b"
3492 "\xaa\xb3\x60\xad\xce\x9f\x9f\x28"
3493 "\xe0\x01\x75\x22\xc4\x4e\xa9\x62"
3494 "\x5c\x62\x0d\x00\xcb\x13\xe8\x43"
3495 "\x72\xd4\x2d\x53\x46\xb5\xd1\x16"
3496 "\x22\x18\xdf\x34\x33\xf5\xd6\x1c"
3497 "\xb8\x79\x78\x97\x94\xff\x72\x13"
3498 "\x4c\x27\xfc\xcb\xbf\x01\x53\xa6"
3499 "\xb4\x50\x6e\xde\xdf\xb5\x43\xa4"
3500 "\x59\xdf\x52\xf9\x7c\xe0\x11\x6f"
3501 "\x2d\x14\x8e\x24\x61\x2c\xe1\x17"
3502 "\xcc\xce\x51\x0c\x19\x8a\x82\x30"
3503 "\x94\xd5\x3d\x6a\x53\x06\x5e\xbd"
3504 "\xb7\xeb\xfa\xfd\x27\x51\xde\x85"
3505 "\x1e\x86\x53\x11\x53\x94\x00\xee"
3506 "\x2b\x8c\x08\x2a\xbf\xdd\xae\x11"
3507 "\xcb\x1e\xa2\x07\x9a\x80\xcf\x62"
3508 "\x9b\x09\xdc\x95\x3c\x96\x8e\xb1"
3509 "\x09\xbd\xe4\xeb\xdb\xca\x70\x7a"
3510 "\x9e\xfa\x31\x18\x45\x3c\x21\x33"
3511 "\xb0\xb3\x2b\xea\xf3\x71\x2d\xe1"
3512 "\x03\xad\x1b\x48\xd4\x67\x27\xf0"
3513 "\x62\xe4\x3d\xfb\x9b\x08\x76\xe7"
3514 "\xdd\x2b\x01\x39\x04\x5a\x58\x7a"
3515 "\xf7\x11\x90\xec\xbd\x51\x5c\x32"
3516 "\x6b\xd7\x35\x39\x02\x6b\xf2\xa6"
3517 "\xd0\x0d\x07\xe1\x06\xc4\x5b\x7d"
3518 "\xe4\x6a\xd7\xee\x15\x1f\x83\xb4"
3519 "\xa3\xa7\x5e\xc3\x90\xb7\xef\xd3"
3520 "\xb7\x4f\xf8\x92\x4c\xb7\x3c\x29"
3521 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7"
3522 "\x74\x3f\x7d\x58\x88\x75\xde\x3e",
3523 .ilen = 512,
3524 .result = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
3525 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
3526 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
3527 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
3528 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
3529 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
3530 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
3531 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
3532 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
3533 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
3534 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
3535 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
3536 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
3537 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
3538 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
3539 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
3540 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
3541 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
3542 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
3543 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
3544 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
3545 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
3546 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
3547 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
3548 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
3549 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
3550 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
3551 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
3552 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
3553 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
3554 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
3555 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
3556 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
3557 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
3558 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
3559 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
3560 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
3561 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
3562 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
3563 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
3564 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
3565 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
3566 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
3567 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
3568 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
3569 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
3570 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
3571 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
3572 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
3573 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
3574 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
3575 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
3576 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
3577 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
3578 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
3579 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
3580 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
3581 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
3582 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
3583 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
3584 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
3585 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
3586 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
3587 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
3588 .rlen = 512,
3589 }
3590};
3591
3592static struct cipher_testvec aes_xts_enc_tv_template[] = {
3593 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3594 { /* XTS-AES 1 */
3595 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
3596 "\x00\x00\x00\x00\x00\x00\x00\x00"
3597 "\x00\x00\x00\x00\x00\x00\x00\x00"
3598 "\x00\x00\x00\x00\x00\x00\x00\x00",
3599 .klen = 32,
3600 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3601 "\x00\x00\x00\x00\x00\x00\x00\x00",
3602 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
3603 "\x00\x00\x00\x00\x00\x00\x00\x00"
3604 "\x00\x00\x00\x00\x00\x00\x00\x00"
3605 "\x00\x00\x00\x00\x00\x00\x00\x00",
3606 .ilen = 32,
3607 .result = "\x91\x7c\xf6\x9e\xbd\x68\xb2\xec"
3608 "\x9b\x9f\xe9\xa3\xea\xdd\xa6\x92"
3609 "\xcd\x43\xd2\xf5\x95\x98\xed\x85"
3610 "\x8c\x02\xc2\x65\x2f\xbf\x92\x2e",
3611 .rlen = 32,
3612 }, { /* XTS-AES 2 */
3613 .key = "\x11\x11\x11\x11\x11\x11\x11\x11"
3614 "\x11\x11\x11\x11\x11\x11\x11\x11"
3615 "\x22\x22\x22\x22\x22\x22\x22\x22"
3616 "\x22\x22\x22\x22\x22\x22\x22\x22",
3617 .klen = 32,
3618 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3619 "\x00\x00\x00\x00\x00\x00\x00\x00",
3620 .input = "\x44\x44\x44\x44\x44\x44\x44\x44"
3621 "\x44\x44\x44\x44\x44\x44\x44\x44"
3622 "\x44\x44\x44\x44\x44\x44\x44\x44"
3623 "\x44\x44\x44\x44\x44\x44\x44\x44",
3624 .ilen = 32,
3625 .result = "\xc4\x54\x18\x5e\x6a\x16\x93\x6e"
3626 "\x39\x33\x40\x38\xac\xef\x83\x8b"
3627 "\xfb\x18\x6f\xff\x74\x80\xad\xc4"
3628 "\x28\x93\x82\xec\xd6\xd3\x94\xf0",
3629 .rlen = 32,
3630 }, { /* XTS-AES 3 */
3631 .key = "\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8"
3632 "\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0"
3633 "\x22\x22\x22\x22\x22\x22\x22\x22"
3634 "\x22\x22\x22\x22\x22\x22\x22\x22",
3635 .klen = 32,
3636 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3637 "\x00\x00\x00\x00\x00\x00\x00\x00",
3638 .input = "\x44\x44\x44\x44\x44\x44\x44\x44"
3639 "\x44\x44\x44\x44\x44\x44\x44\x44"
3640 "\x44\x44\x44\x44\x44\x44\x44\x44"
3641 "\x44\x44\x44\x44\x44\x44\x44\x44",
3642 .ilen = 32,
3643 .result = "\xaf\x85\x33\x6b\x59\x7a\xfc\x1a"
3644 "\x90\x0b\x2e\xb2\x1e\xc9\x49\xd2"
3645 "\x92\xdf\x4c\x04\x7e\x0b\x21\x53"
3646 "\x21\x86\xa5\x97\x1a\x22\x7a\x89",
3647 .rlen = 32,
3648 }, { /* XTS-AES 4 */
3649 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
3650 "\x23\x53\x60\x28\x74\x71\x35\x26"
3651 "\x31\x41\x59\x26\x53\x58\x97\x93"
3652 "\x23\x84\x62\x64\x33\x83\x27\x95",
3653 .klen = 32,
3654 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3655 "\x00\x00\x00\x00\x00\x00\x00\x00",
3656 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
3657 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3658 "\x10\x11\x12\x13\x14\x15\x16\x17"
3659 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3660 "\x20\x21\x22\x23\x24\x25\x26\x27"
3661 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3662 "\x30\x31\x32\x33\x34\x35\x36\x37"
3663 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3664 "\x40\x41\x42\x43\x44\x45\x46\x47"
3665 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3666 "\x50\x51\x52\x53\x54\x55\x56\x57"
3667 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3668 "\x60\x61\x62\x63\x64\x65\x66\x67"
3669 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3670 "\x70\x71\x72\x73\x74\x75\x76\x77"
3671 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3672 "\x80\x81\x82\x83\x84\x85\x86\x87"
3673 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3674 "\x90\x91\x92\x93\x94\x95\x96\x97"
3675 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3676 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3677 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3678 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3679 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3680 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3681 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3682 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3683 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3684 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3685 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3686 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3687 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
3688 "\x00\x01\x02\x03\x04\x05\x06\x07"
3689 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3690 "\x10\x11\x12\x13\x14\x15\x16\x17"
3691 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3692 "\x20\x21\x22\x23\x24\x25\x26\x27"
3693 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3694 "\x30\x31\x32\x33\x34\x35\x36\x37"
3695 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3696 "\x40\x41\x42\x43\x44\x45\x46\x47"
3697 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3698 "\x50\x51\x52\x53\x54\x55\x56\x57"
3699 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3700 "\x60\x61\x62\x63\x64\x65\x66\x67"
3701 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3702 "\x70\x71\x72\x73\x74\x75\x76\x77"
3703 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3704 "\x80\x81\x82\x83\x84\x85\x86\x87"
3705 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3706 "\x90\x91\x92\x93\x94\x95\x96\x97"
3707 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3708 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3709 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3710 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3711 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3712 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3713 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3714 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3715 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3716 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3717 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3718 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3719 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
3720 .ilen = 512,
3721 .result = "\x27\xa7\x47\x9b\xef\xa1\xd4\x76"
3722 "\x48\x9f\x30\x8c\xd4\xcf\xa6\xe2"
3723 "\xa9\x6e\x4b\xbe\x32\x08\xff\x25"
3724 "\x28\x7d\xd3\x81\x96\x16\xe8\x9c"
3725 "\xc7\x8c\xf7\xf5\xe5\x43\x44\x5f"
3726 "\x83\x33\xd8\xfa\x7f\x56\x00\x00"
3727 "\x05\x27\x9f\xa5\xd8\xb5\xe4\xad"
3728 "\x40\xe7\x36\xdd\xb4\xd3\x54\x12"
3729 "\x32\x80\x63\xfd\x2a\xab\x53\xe5"
3730 "\xea\x1e\x0a\x9f\x33\x25\x00\xa5"
3731 "\xdf\x94\x87\xd0\x7a\x5c\x92\xcc"
3732 "\x51\x2c\x88\x66\xc7\xe8\x60\xce"
3733 "\x93\xfd\xf1\x66\xa2\x49\x12\xb4"
3734 "\x22\x97\x61\x46\xae\x20\xce\x84"
3735 "\x6b\xb7\xdc\x9b\xa9\x4a\x76\x7a"
3736 "\xae\xf2\x0c\x0d\x61\xad\x02\x65"
3737 "\x5e\xa9\x2d\xc4\xc4\xe4\x1a\x89"
3738 "\x52\xc6\x51\xd3\x31\x74\xbe\x51"
3739 "\xa1\x0c\x42\x11\x10\xe6\xd8\x15"
3740 "\x88\xed\xe8\x21\x03\xa2\x52\xd8"
3741 "\xa7\x50\xe8\x76\x8d\xef\xff\xed"
3742 "\x91\x22\x81\x0a\xae\xb9\x9f\x91"
3743 "\x72\xaf\x82\xb6\x04\xdc\x4b\x8e"
3744 "\x51\xbc\xb0\x82\x35\xa6\xf4\x34"
3745 "\x13\x32\xe4\xca\x60\x48\x2a\x4b"
3746 "\xa1\xa0\x3b\x3e\x65\x00\x8f\xc5"
3747 "\xda\x76\xb7\x0b\xf1\x69\x0d\xb4"
3748 "\xea\xe2\x9c\x5f\x1b\xad\xd0\x3c"
3749 "\x5c\xcf\x2a\x55\xd7\x05\xdd\xcd"
3750 "\x86\xd4\x49\x51\x1c\xeb\x7e\xc3"
3751 "\x0b\xf1\x2b\x1f\xa3\x5b\x91\x3f"
3752 "\x9f\x74\x7a\x8a\xfd\x1b\x13\x0e"
3753 "\x94\xbf\xf9\x4e\xff\xd0\x1a\x91"
3754 "\x73\x5c\xa1\x72\x6a\xcd\x0b\x19"
3755 "\x7c\x4e\x5b\x03\x39\x36\x97\xe1"
3756 "\x26\x82\x6f\xb6\xbb\xde\x8e\xcc"
3757 "\x1e\x08\x29\x85\x16\xe2\xc9\xed"
3758 "\x03\xff\x3c\x1b\x78\x60\xf6\xde"
3759 "\x76\xd4\xce\xcd\x94\xc8\x11\x98"
3760 "\x55\xef\x52\x97\xca\x67\xe9\xf3"
3761 "\xe7\xff\x72\xb1\xe9\x97\x85\xca"
3762 "\x0a\x7e\x77\x20\xc5\xb3\x6d\xc6"
3763 "\xd7\x2c\xac\x95\x74\xc8\xcb\xbc"
3764 "\x2f\x80\x1e\x23\xe5\x6f\xd3\x44"
3765 "\xb0\x7f\x22\x15\x4b\xeb\xa0\xf0"
3766 "\x8c\xe8\x89\x1e\x64\x3e\xd9\x95"
3767 "\xc9\x4d\x9a\x69\xc9\xf1\xb5\xf4"
3768 "\x99\x02\x7a\x78\x57\x2a\xee\xbd"
3769 "\x74\xd2\x0c\xc3\x98\x81\xc2\x13"
3770 "\xee\x77\x0b\x10\x10\xe4\xbe\xa7"
3771 "\x18\x84\x69\x77\xae\x11\x9f\x7a"
3772 "\x02\x3a\xb5\x8c\xca\x0a\xd7\x52"
3773 "\xaf\xe6\x56\xbb\x3c\x17\x25\x6a"
3774 "\x9f\x6e\x9b\xf1\x9f\xdd\x5a\x38"
3775 "\xfc\x82\xbb\xe8\x72\xc5\x53\x9e"
3776 "\xdb\x60\x9e\xf4\xf7\x9c\x20\x3e"
3777 "\xbb\x14\x0f\x2e\x58\x3c\xb2\xad"
3778 "\x15\xb4\xaa\x5b\x65\x50\x16\xa8"
3779 "\x44\x92\x77\xdb\xd4\x77\xef\x2c"
3780 "\x8d\x6c\x01\x7d\xb7\x38\xb1\x8d"
3781 "\xeb\x4a\x42\x7d\x19\x23\xce\x3f"
3782 "\xf2\x62\x73\x57\x79\xa4\x18\xf2"
3783 "\x0a\x28\x2d\xf9\x20\x14\x7b\xea"
3784 "\xbe\x42\x1e\xe5\x31\x9d\x05\x68",
3785 .rlen = 512,
3786 }
3787};
3788
3789static struct cipher_testvec aes_xts_dec_tv_template[] = {
3790 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3791 { /* XTS-AES 1 */
3792 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
3793 "\x00\x00\x00\x00\x00\x00\x00\x00"
3794 "\x00\x00\x00\x00\x00\x00\x00\x00"
3795 "\x00\x00\x00\x00\x00\x00\x00\x00",
3796 .klen = 32,
3797 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3798 "\x00\x00\x00\x00\x00\x00\x00\x00",
3799 .input = "\x91\x7c\xf6\x9e\xbd\x68\xb2\xec"
3800 "\x9b\x9f\xe9\xa3\xea\xdd\xa6\x92"
3801 "\xcd\x43\xd2\xf5\x95\x98\xed\x85"
3802 "\x8c\x02\xc2\x65\x2f\xbf\x92\x2e",
3803 .ilen = 32,
3804 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
3805 "\x00\x00\x00\x00\x00\x00\x00\x00"
3806 "\x00\x00\x00\x00\x00\x00\x00\x00"
3807 "\x00\x00\x00\x00\x00\x00\x00\x00",
3808 .rlen = 32,
3809 }, { /* XTS-AES 2 */
3810 .key = "\x11\x11\x11\x11\x11\x11\x11\x11"
3811 "\x11\x11\x11\x11\x11\x11\x11\x11"
3812 "\x22\x22\x22\x22\x22\x22\x22\x22"
3813 "\x22\x22\x22\x22\x22\x22\x22\x22",
3814 .klen = 32,
3815 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3816 "\x00\x00\x00\x00\x00\x00\x00\x00",
3817 .input = "\xc4\x54\x18\x5e\x6a\x16\x93\x6e"
3818 "\x39\x33\x40\x38\xac\xef\x83\x8b"
3819 "\xfb\x18\x6f\xff\x74\x80\xad\xc4"
3820 "\x28\x93\x82\xec\xd6\xd3\x94\xf0",
3821 .ilen = 32,
3822 .result = "\x44\x44\x44\x44\x44\x44\x44\x44"
3823 "\x44\x44\x44\x44\x44\x44\x44\x44"
3824 "\x44\x44\x44\x44\x44\x44\x44\x44"
3825 "\x44\x44\x44\x44\x44\x44\x44\x44",
3826 .rlen = 32,
3827 }, { /* XTS-AES 3 */
3828 .key = "\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8"
3829 "\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0"
3830 "\x22\x22\x22\x22\x22\x22\x22\x22"
3831 "\x22\x22\x22\x22\x22\x22\x22\x22",
3832 .klen = 32,
3833 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3834 "\x00\x00\x00\x00\x00\x00\x00\x00",
3835 .input = "\xaf\x85\x33\x6b\x59\x7a\xfc\x1a"
3836 "\x90\x0b\x2e\xb2\x1e\xc9\x49\xd2"
3837 "\x92\xdf\x4c\x04\x7e\x0b\x21\x53"
3838 "\x21\x86\xa5\x97\x1a\x22\x7a\x89",
3839 .ilen = 32,
3840 .result = "\x44\x44\x44\x44\x44\x44\x44\x44"
3841 "\x44\x44\x44\x44\x44\x44\x44\x44"
3842 "\x44\x44\x44\x44\x44\x44\x44\x44"
3843 "\x44\x44\x44\x44\x44\x44\x44\x44",
3844 .rlen = 32,
3845 }, { /* XTS-AES 4 */
3846 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
3847 "\x23\x53\x60\x28\x74\x71\x35\x26"
3848 "\x31\x41\x59\x26\x53\x58\x97\x93"
3849 "\x23\x84\x62\x64\x33\x83\x27\x95",
3850 .klen = 32,
3851 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3852 "\x00\x00\x00\x00\x00\x00\x00\x00",
3853 .input = "\x27\xa7\x47\x9b\xef\xa1\xd4\x76"
3854 "\x48\x9f\x30\x8c\xd4\xcf\xa6\xe2"
3855 "\xa9\x6e\x4b\xbe\x32\x08\xff\x25"
3856 "\x28\x7d\xd3\x81\x96\x16\xe8\x9c"
3857 "\xc7\x8c\xf7\xf5\xe5\x43\x44\x5f"
3858 "\x83\x33\xd8\xfa\x7f\x56\x00\x00"
3859 "\x05\x27\x9f\xa5\xd8\xb5\xe4\xad"
3860 "\x40\xe7\x36\xdd\xb4\xd3\x54\x12"
3861 "\x32\x80\x63\xfd\x2a\xab\x53\xe5"
3862 "\xea\x1e\x0a\x9f\x33\x25\x00\xa5"
3863 "\xdf\x94\x87\xd0\x7a\x5c\x92\xcc"
3864 "\x51\x2c\x88\x66\xc7\xe8\x60\xce"
3865 "\x93\xfd\xf1\x66\xa2\x49\x12\xb4"
3866 "\x22\x97\x61\x46\xae\x20\xce\x84"
3867 "\x6b\xb7\xdc\x9b\xa9\x4a\x76\x7a"
3868 "\xae\xf2\x0c\x0d\x61\xad\x02\x65"
3869 "\x5e\xa9\x2d\xc4\xc4\xe4\x1a\x89"
3870 "\x52\xc6\x51\xd3\x31\x74\xbe\x51"
3871 "\xa1\x0c\x42\x11\x10\xe6\xd8\x15"
3872 "\x88\xed\xe8\x21\x03\xa2\x52\xd8"
3873 "\xa7\x50\xe8\x76\x8d\xef\xff\xed"
3874 "\x91\x22\x81\x0a\xae\xb9\x9f\x91"
3875 "\x72\xaf\x82\xb6\x04\xdc\x4b\x8e"
3876 "\x51\xbc\xb0\x82\x35\xa6\xf4\x34"
3877 "\x13\x32\xe4\xca\x60\x48\x2a\x4b"
3878 "\xa1\xa0\x3b\x3e\x65\x00\x8f\xc5"
3879 "\xda\x76\xb7\x0b\xf1\x69\x0d\xb4"
3880 "\xea\xe2\x9c\x5f\x1b\xad\xd0\x3c"
3881 "\x5c\xcf\x2a\x55\xd7\x05\xdd\xcd"
3882 "\x86\xd4\x49\x51\x1c\xeb\x7e\xc3"
3883 "\x0b\xf1\x2b\x1f\xa3\x5b\x91\x3f"
3884 "\x9f\x74\x7a\x8a\xfd\x1b\x13\x0e"
3885 "\x94\xbf\xf9\x4e\xff\xd0\x1a\x91"
3886 "\x73\x5c\xa1\x72\x6a\xcd\x0b\x19"
3887 "\x7c\x4e\x5b\x03\x39\x36\x97\xe1"
3888 "\x26\x82\x6f\xb6\xbb\xde\x8e\xcc"
3889 "\x1e\x08\x29\x85\x16\xe2\xc9\xed"
3890 "\x03\xff\x3c\x1b\x78\x60\xf6\xde"
3891 "\x76\xd4\xce\xcd\x94\xc8\x11\x98"
3892 "\x55\xef\x52\x97\xca\x67\xe9\xf3"
3893 "\xe7\xff\x72\xb1\xe9\x97\x85\xca"
3894 "\x0a\x7e\x77\x20\xc5\xb3\x6d\xc6"
3895 "\xd7\x2c\xac\x95\x74\xc8\xcb\xbc"
3896 "\x2f\x80\x1e\x23\xe5\x6f\xd3\x44"
3897 "\xb0\x7f\x22\x15\x4b\xeb\xa0\xf0"
3898 "\x8c\xe8\x89\x1e\x64\x3e\xd9\x95"
3899 "\xc9\x4d\x9a\x69\xc9\xf1\xb5\xf4"
3900 "\x99\x02\x7a\x78\x57\x2a\xee\xbd"
3901 "\x74\xd2\x0c\xc3\x98\x81\xc2\x13"
3902 "\xee\x77\x0b\x10\x10\xe4\xbe\xa7"
3903 "\x18\x84\x69\x77\xae\x11\x9f\x7a"
3904 "\x02\x3a\xb5\x8c\xca\x0a\xd7\x52"
3905 "\xaf\xe6\x56\xbb\x3c\x17\x25\x6a"
3906 "\x9f\x6e\x9b\xf1\x9f\xdd\x5a\x38"
3907 "\xfc\x82\xbb\xe8\x72\xc5\x53\x9e"
3908 "\xdb\x60\x9e\xf4\xf7\x9c\x20\x3e"
3909 "\xbb\x14\x0f\x2e\x58\x3c\xb2\xad"
3910 "\x15\xb4\xaa\x5b\x65\x50\x16\xa8"
3911 "\x44\x92\x77\xdb\xd4\x77\xef\x2c"
3912 "\x8d\x6c\x01\x7d\xb7\x38\xb1\x8d"
3913 "\xeb\x4a\x42\x7d\x19\x23\xce\x3f"
3914 "\xf2\x62\x73\x57\x79\xa4\x18\xf2"
3915 "\x0a\x28\x2d\xf9\x20\x14\x7b\xea"
3916 "\xbe\x42\x1e\xe5\x31\x9d\x05\x68",
3917 .ilen = 512,
3918 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
3919 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3920 "\x10\x11\x12\x13\x14\x15\x16\x17"
3921 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3922 "\x20\x21\x22\x23\x24\x25\x26\x27"
3923 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3924 "\x30\x31\x32\x33\x34\x35\x36\x37"
3925 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3926 "\x40\x41\x42\x43\x44\x45\x46\x47"
3927 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3928 "\x50\x51\x52\x53\x54\x55\x56\x57"
3929 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3930 "\x60\x61\x62\x63\x64\x65\x66\x67"
3931 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3932 "\x70\x71\x72\x73\x74\x75\x76\x77"
3933 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3934 "\x80\x81\x82\x83\x84\x85\x86\x87"
3935 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3936 "\x90\x91\x92\x93\x94\x95\x96\x97"
3937 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3938 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3939 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3940 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3941 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3942 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3943 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3944 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3945 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3946 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3947 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3948 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3949 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
3950 "\x00\x01\x02\x03\x04\x05\x06\x07"
3951 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3952 "\x10\x11\x12\x13\x14\x15\x16\x17"
3953 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3954 "\x20\x21\x22\x23\x24\x25\x26\x27"
3955 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3956 "\x30\x31\x32\x33\x34\x35\x36\x37"
3957 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3958 "\x40\x41\x42\x43\x44\x45\x46\x47"
3959 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3960 "\x50\x51\x52\x53\x54\x55\x56\x57"
3961 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3962 "\x60\x61\x62\x63\x64\x65\x66\x67"
3963 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3964 "\x70\x71\x72\x73\x74\x75\x76\x77"
3965 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3966 "\x80\x81\x82\x83\x84\x85\x86\x87"
3967 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3968 "\x90\x91\x92\x93\x94\x95\x96\x97"
3969 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3970 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3971 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3972 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3973 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3974 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3975 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3976 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3977 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3978 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3979 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3980 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3981 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
3982 .rlen = 512,
3983 }
3984};
3985
3986
3987static struct cipher_testvec aes_ctr_enc_tv_template[] = {
3988 { /* From RFC 3686 */
3989 .key = "\xae\x68\x52\xf8\x12\x10\x67\xcc"
3990 "\x4b\xf7\xa5\x76\x55\x77\xf3\x9e"
3991 "\x00\x00\x00\x30",
3992 .klen = 20,
3993 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
3994 .input = "Single block msg",
3995 .ilen = 16,
3996 .result = "\xe4\x09\x5d\x4f\xb7\xa7\xb3\x79"
3997 "\x2d\x61\x75\xa3\x26\x13\x11\xb8",
3998 .rlen = 16,
3999 }, {
4000 .key = "\x7e\x24\x06\x78\x17\xfa\xe0\xd7"
4001 "\x43\xd6\xce\x1f\x32\x53\x91\x63"
4002 "\x00\x6c\xb6\xdb",
4003 .klen = 20,
4004 .iv = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
4005 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
4006 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4007 "\x10\x11\x12\x13\x14\x15\x16\x17"
4008 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4009 .ilen = 32,
4010 .result = "\x51\x04\xa1\x06\x16\x8a\x72\xd9"
4011 "\x79\x0d\x41\xee\x8e\xda\xd3\x88"
4012 "\xeb\x2e\x1e\xfc\x46\xda\x57\xc8"
4013 "\xfc\xe6\x30\xdf\x91\x41\xbe\x28",
4014 .rlen = 32,
4015 }, {
4016 .key = "\x16\xaf\x5b\x14\x5f\xc9\xf5\x79"
4017 "\xc1\x75\xf9\x3e\x3b\xfb\x0e\xed"
4018 "\x86\x3d\x06\xcc\xfd\xb7\x85\x15"
4019 "\x00\x00\x00\x48",
4020 .klen = 28,
4021 .iv = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
4022 .input = "Single block msg",
4023 .ilen = 16,
4024 .result = "\x4b\x55\x38\x4f\xe2\x59\xc9\xc8"
4025 "\x4e\x79\x35\xa0\x03\xcb\xe9\x28",
4026 .rlen = 16,
4027 }, {
4028 .key = "\x7c\x5c\xb2\x40\x1b\x3d\xc3\x3c"
4029 "\x19\xe7\x34\x08\x19\xe0\xf6\x9c"
4030 "\x67\x8c\x3d\xb8\xe6\xf6\xa9\x1a"
4031 "\x00\x96\xb0\x3b",
4032 .klen = 28,
4033 .iv = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
4034 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
4035 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4036 "\x10\x11\x12\x13\x14\x15\x16\x17"
4037 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4038 .ilen = 32,
4039 .result = "\x45\x32\x43\xfc\x60\x9b\x23\x32"
4040 "\x7e\xdf\xaa\xfa\x71\x31\xcd\x9f"
4041 "\x84\x90\x70\x1c\x5a\xd4\xa7\x9c"
4042 "\xfc\x1f\xe0\xff\x42\xf4\xfb\x00",
4043 .rlen = 32,
4044 }, {
4045 .key = "\x77\x6b\xef\xf2\x85\x1d\xb0\x6f"
4046 "\x4c\x8a\x05\x42\xc8\x69\x6f\x6c"
4047 "\x6a\x81\xaf\x1e\xec\x96\xb4\xd3"
4048 "\x7f\xc1\xd6\x89\xe6\xc1\xc1\x04"
4049 "\x00\x00\x00\x60",
4050 .klen = 36,
4051 .iv = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
4052 .input = "Single block msg",
4053 .ilen = 16,
4054 .result = "\x14\x5a\xd0\x1d\xbf\x82\x4e\xc7"
4055 "\x56\x08\x63\xdc\x71\xe3\xe0\xc0",
4056 .rlen = 16,
4057 }, {
4058 .key = "\xf6\xd6\x6d\x6b\xd5\x2d\x59\xbb"
4059 "\x07\x96\x36\x58\x79\xef\xf8\x86"
4060 "\xc6\x6d\xd5\x1a\x5b\x6a\x99\x74"
4061 "\x4b\x50\x59\x0c\x87\xa2\x38\x84"
4062 "\x00\xfa\xac\x24",
4063 .klen = 36,
4064 .iv = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
4065 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
4066 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4067 "\x10\x11\x12\x13\x14\x15\x16\x17"
4068 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4069 .ilen = 32,
4070 .result = "\xf0\x5e\x23\x1b\x38\x94\x61\x2c"
4071 "\x49\xee\x00\x0b\x80\x4e\xb2\xa9"
4072 "\xb8\x30\x6b\x50\x8f\x83\x9d\x6a"
4073 "\x55\x30\x83\x1d\x93\x44\xaf\x1c",
4074 .rlen = 32,
4075 }, {
4076 // generated using Crypto++
4077 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
4078 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4079 "\x10\x11\x12\x13\x14\x15\x16\x17"
4080 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
4081 "\x00\x00\x00\x00",
4082 .klen = 32 + 4,
4083 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
4084 .input =
4085 "\x00\x01\x02\x03\x04\x05\x06\x07"
4086 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4087 "\x10\x11\x12\x13\x14\x15\x16\x17"
4088 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
4089 "\x20\x21\x22\x23\x24\x25\x26\x27"
4090 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
4091 "\x30\x31\x32\x33\x34\x35\x36\x37"
4092 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
4093 "\x40\x41\x42\x43\x44\x45\x46\x47"
4094 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
4095 "\x50\x51\x52\x53\x54\x55\x56\x57"
4096 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
4097 "\x60\x61\x62\x63\x64\x65\x66\x67"
4098 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
4099 "\x70\x71\x72\x73\x74\x75\x76\x77"
4100 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
4101 "\x80\x81\x82\x83\x84\x85\x86\x87"
4102 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
4103 "\x90\x91\x92\x93\x94\x95\x96\x97"
4104 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
4105 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
4106 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
4107 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
4108 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
4109 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
4110 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
4111 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
4112 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
4113 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
4114 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
4115 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
4116 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
4117 "\x00\x03\x06\x09\x0c\x0f\x12\x15"
4118 "\x18\x1b\x1e\x21\x24\x27\x2a\x2d"
4119 "\x30\x33\x36\x39\x3c\x3f\x42\x45"
4120 "\x48\x4b\x4e\x51\x54\x57\x5a\x5d"
4121 "\x60\x63\x66\x69\x6c\x6f\x72\x75"
4122 "\x78\x7b\x7e\x81\x84\x87\x8a\x8d"
4123 "\x90\x93\x96\x99\x9c\x9f\xa2\xa5"
4124 "\xa8\xab\xae\xb1\xb4\xb7\xba\xbd"
4125 "\xc0\xc3\xc6\xc9\xcc\xcf\xd2\xd5"
4126 "\xd8\xdb\xde\xe1\xe4\xe7\xea\xed"
4127 "\xf0\xf3\xf6\xf9\xfc\xff\x02\x05"
4128 "\x08\x0b\x0e\x11\x14\x17\x1a\x1d"
4129 "\x20\x23\x26\x29\x2c\x2f\x32\x35"
4130 "\x38\x3b\x3e\x41\x44\x47\x4a\x4d"
4131 "\x50\x53\x56\x59\x5c\x5f\x62\x65"
4132 "\x68\x6b\x6e\x71\x74\x77\x7a\x7d"
4133 "\x80\x83\x86\x89\x8c\x8f\x92\x95"
4134 "\x98\x9b\x9e\xa1\xa4\xa7\xaa\xad"
4135 "\xb0\xb3\xb6\xb9\xbc\xbf\xc2\xc5"
4136 "\xc8\xcb\xce\xd1\xd4\xd7\xda\xdd"
4137 "\xe0\xe3\xe6\xe9\xec\xef\xf2\xf5"
4138 "\xf8\xfb\xfe\x01\x04\x07\x0a\x0d"
4139 "\x10\x13\x16\x19\x1c\x1f\x22\x25"
4140 "\x28\x2b\x2e\x31\x34\x37\x3a\x3d"
4141 "\x40\x43\x46\x49\x4c\x4f\x52\x55"
4142 "\x58\x5b\x5e\x61\x64\x67\x6a\x6d"
4143 "\x70\x73\x76\x79\x7c\x7f\x82\x85"
4144 "\x88\x8b\x8e\x91\x94\x97\x9a\x9d"
4145 "\xa0\xa3\xa6\xa9\xac\xaf\xb2\xb5"
4146 "\xb8\xbb\xbe\xc1\xc4\xc7\xca\xcd"
4147 "\xd0\xd3\xd6\xd9\xdc\xdf\xe2\xe5"
4148 "\xe8\xeb\xee\xf1\xf4\xf7\xfa\xfd"
4149 "\x00\x05\x0a\x0f\x14\x19\x1e\x23"
4150 "\x28\x2d\x32\x37\x3c\x41\x46\x4b"
4151 "\x50\x55\x5a\x5f\x64\x69\x6e\x73"
4152 "\x78\x7d\x82\x87\x8c\x91\x96\x9b"
4153 "\xa0\xa5\xaa\xaf\xb4\xb9\xbe\xc3"
4154 "\xc8\xcd\xd2\xd7\xdc\xe1\xe6\xeb"
4155 "\xf0\xf5\xfa\xff\x04\x09\x0e\x13"
4156 "\x18\x1d\x22\x27\x2c\x31\x36\x3b"
4157 "\x40\x45\x4a\x4f\x54\x59\x5e\x63"
4158 "\x68\x6d\x72\x77\x7c\x81\x86\x8b"
4159 "\x90\x95\x9a\x9f\xa4\xa9\xae\xb3"
4160 "\xb8\xbd\xc2\xc7\xcc\xd1\xd6\xdb"
4161 "\xe0\xe5\xea\xef\xf4\xf9\xfe\x03"
4162 "\x08\x0d\x12\x17\x1c\x21\x26\x2b"
4163 "\x30\x35\x3a\x3f\x44\x49\x4e\x53"
4164 "\x58\x5d\x62\x67\x6c\x71\x76\x7b"
4165 "\x80\x85\x8a\x8f\x94\x99\x9e\xa3"
4166 "\xa8\xad\xb2\xb7\xbc\xc1\xc6\xcb"
4167 "\xd0\xd5\xda\xdf\xe4\xe9\xee\xf3"
4168 "\xf8\xfd\x02\x07\x0c\x11\x16\x1b"
4169 "\x20\x25\x2a\x2f\x34\x39\x3e\x43"
4170 "\x48\x4d\x52\x57\x5c\x61\x66\x6b"
4171 "\x70\x75\x7a\x7f\x84\x89\x8e\x93"
4172 "\x98\x9d\xa2\xa7\xac\xb1\xb6\xbb"
4173 "\xc0\xc5\xca\xcf\xd4\xd9\xde\xe3"
4174 "\xe8\xed\xf2\xf7\xfc\x01\x06\x0b"
4175 "\x10\x15\x1a\x1f\x24\x29\x2e\x33"
4176 "\x38\x3d\x42\x47\x4c\x51\x56\x5b"
4177 "\x60\x65\x6a\x6f\x74\x79\x7e\x83"
4178 "\x88\x8d\x92\x97\x9c\xa1\xa6\xab"
4179 "\xb0\xb5\xba\xbf\xc4\xc9\xce\xd3"
4180 "\xd8\xdd\xe2\xe7\xec\xf1\xf6\xfb"
4181 "\x00\x07\x0e\x15\x1c\x23\x2a\x31"
4182 "\x38\x3f\x46\x4d\x54\x5b\x62\x69"
4183 "\x70\x77\x7e\x85\x8c\x93\x9a\xa1"
4184 "\xa8\xaf\xb6\xbd\xc4\xcb\xd2\xd9"
4185 "\xe0\xe7\xee\xf5\xfc\x03\x0a\x11"
4186 "\x18\x1f\x26\x2d\x34\x3b\x42\x49"
4187 "\x50\x57\x5e\x65\x6c\x73\x7a\x81"
4188 "\x88\x8f\x96\x9d\xa4\xab\xb2\xb9"
4189 "\xc0\xc7\xce\xd5\xdc\xe3\xea\xf1"
4190 "\xf8\xff\x06\x0d\x14\x1b\x22\x29"
4191 "\x30\x37\x3e\x45\x4c\x53\x5a\x61"
4192 "\x68\x6f\x76\x7d\x84\x8b\x92\x99"
4193 "\xa0\xa7\xae\xb5\xbc\xc3\xca\xd1"
4194 "\xd8\xdf\xe6\xed\xf4\xfb\x02\x09"
4195 "\x10\x17\x1e\x25\x2c\x33\x3a\x41"
4196 "\x48\x4f\x56\x5d\x64\x6b\x72\x79"
4197 "\x80\x87\x8e\x95\x9c\xa3\xaa\xb1"
4198 "\xb8\xbf\xc6\xcd\xd4\xdb\xe2\xe9"
4199 "\xf0\xf7\xfe\x05\x0c\x13\x1a\x21"
4200 "\x28\x2f\x36\x3d\x44\x4b\x52\x59"
4201 "\x60\x67\x6e\x75\x7c\x83\x8a\x91"
4202 "\x98\x9f\xa6\xad\xb4\xbb\xc2\xc9"
4203 "\xd0\xd7\xde\xe5\xec\xf3\xfa\x01"
4204 "\x08\x0f\x16\x1d\x24\x2b\x32\x39"
4205 "\x40\x47\x4e\x55\x5c\x63\x6a\x71"
4206 "\x78\x7f\x86\x8d\x94\x9b\xa2\xa9"
4207 "\xb0\xb7\xbe\xc5\xcc\xd3\xda\xe1"
4208 "\xe8\xef\xf6\xfd\x04\x0b\x12\x19"
4209 "\x20\x27\x2e\x35\x3c\x43\x4a\x51"
4210 "\x58\x5f\x66\x6d\x74\x7b\x82\x89"
4211 "\x90\x97\x9e\xa5\xac\xb3\xba\xc1"
4212 "\xc8\xcf\xd6\xdd\xe4\xeb\xf2\xf9"
4213 "\x00\x09\x12\x1b\x24\x2d\x36\x3f"
4214 "\x48\x51\x5a\x63\x6c\x75\x7e\x87"
4215 "\x90\x99\xa2\xab\xb4\xbd\xc6\xcf"
4216 "\xd8\xe1\xea\xf3\xfc\x05\x0e\x17"
4217 "\x20\x29\x32\x3b\x44\x4d\x56\x5f"
4218 "\x68\x71\x7a\x83\x8c\x95\x9e\xa7"
4219 "\xb0\xb9\xc2\xcb\xd4\xdd\xe6\xef"
4220 "\xf8\x01\x0a\x13\x1c\x25\x2e\x37"
4221 "\x40\x49\x52\x5b\x64\x6d\x76\x7f"
4222 "\x88\x91\x9a\xa3\xac\xb5\xbe\xc7"
4223 "\xd0\xd9\xe2\xeb\xf4\xfd\x06\x0f"
4224 "\x18\x21\x2a\x33\x3c\x45\x4e\x57"
4225 "\x60\x69\x72\x7b\x84\x8d\x96\x9f"
4226 "\xa8\xb1\xba\xc3\xcc\xd5\xde\xe7"
4227 "\xf0\xf9\x02\x0b\x14\x1d\x26\x2f"
4228 "\x38\x41\x4a\x53\x5c\x65\x6e\x77"
4229 "\x80\x89\x92\x9b\xa4\xad\xb6\xbf"
4230 "\xc8\xd1\xda\xe3\xec\xf5\xfe\x07"
4231 "\x10\x19\x22\x2b\x34\x3d\x46\x4f"
4232 "\x58\x61\x6a\x73\x7c\x85\x8e\x97"
4233 "\xa0\xa9\xb2\xbb\xc4\xcd\xd6\xdf"
4234 "\xe8\xf1\xfa\x03\x0c\x15\x1e\x27"
4235 "\x30\x39\x42\x4b\x54\x5d\x66\x6f"
4236 "\x78\x81\x8a\x93\x9c\xa5\xae\xb7"
4237 "\xc0\xc9\xd2\xdb\xe4\xed\xf6\xff"
4238 "\x08\x11\x1a\x23\x2c\x35\x3e\x47"
4239 "\x50\x59\x62\x6b\x74\x7d\x86\x8f"
4240 "\x98\xa1\xaa\xb3\xbc\xc5\xce\xd7"
4241 "\xe0\xe9\xf2\xfb\x04\x0d\x16\x1f"
4242 "\x28\x31\x3a\x43\x4c\x55\x5e\x67"
4243 "\x70\x79\x82\x8b\x94\x9d\xa6\xaf"
4244 "\xb8\xc1\xca\xd3\xdc\xe5\xee\xf7"
4245 "\x00\x0b\x16\x21\x2c\x37\x42\x4d"
4246 "\x58\x63\x6e\x79\x84\x8f\x9a\xa5"
4247 "\xb0\xbb\xc6\xd1\xdc\xe7\xf2\xfd"
4248 "\x08\x13\x1e\x29\x34\x3f\x4a\x55"
4249 "\x60\x6b\x76\x81\x8c\x97\xa2\xad"
4250 "\xb8\xc3\xce\xd9\xe4\xef\xfa\x05"
4251 "\x10\x1b\x26\x31\x3c\x47\x52\x5d"
4252 "\x68\x73\x7e\x89\x94\x9f\xaa\xb5"
4253 "\xc0\xcb\xd6\xe1\xec\xf7\x02\x0d"
4254 "\x18\x23\x2e\x39\x44\x4f\x5a\x65"
4255 "\x70\x7b\x86\x91\x9c\xa7\xb2\xbd"
4256 "\xc8\xd3\xde\xe9\xf4\xff\x0a\x15"
4257 "\x20\x2b\x36\x41\x4c\x57\x62\x6d"
4258 "\x78\x83\x8e\x99\xa4\xaf\xba\xc5"
4259 "\xd0\xdb\xe6\xf1\xfc\x07\x12\x1d"
4260 "\x28\x33\x3e\x49\x54\x5f\x6a\x75"
4261 "\x80\x8b\x96\xa1\xac\xb7\xc2\xcd"
4262 "\xd8\xe3\xee\xf9\x04\x0f\x1a\x25"
4263 "\x30\x3b\x46\x51\x5c\x67\x72\x7d"
4264 "\x88\x93\x9e\xa9\xb4\xbf\xca\xd5"
4265 "\xe0\xeb\xf6\x01\x0c\x17\x22\x2d"
4266 "\x38\x43\x4e\x59\x64\x6f\x7a\x85"
4267 "\x90\x9b\xa6\xb1\xbc\xc7\xd2\xdd"
4268 "\xe8\xf3\xfe\x09\x14\x1f\x2a\x35"
4269 "\x40\x4b\x56\x61\x6c\x77\x82\x8d"
4270 "\x98\xa3\xae\xb9\xc4\xcf\xda\xe5"
4271 "\xf0\xfb\x06\x11\x1c\x27\x32\x3d"
4272 "\x48\x53\x5e\x69\x74\x7f\x8a\x95"
4273 "\xa0\xab\xb6\xc1\xcc\xd7\xe2\xed"
4274 "\xf8\x03\x0e\x19\x24\x2f\x3a\x45"
4275 "\x50\x5b\x66\x71\x7c\x87\x92\x9d"
4276 "\xa8\xb3\xbe\xc9\xd4\xdf\xea\xf5"
4277 "\x00\x0d\x1a\x27\x34\x41\x4e\x5b"
4278 "\x68\x75\x82\x8f\x9c\xa9\xb6\xc3"
4279 "\xd0\xdd\xea\xf7\x04\x11\x1e\x2b"
4280 "\x38\x45\x52\x5f\x6c\x79\x86\x93"
4281 "\xa0\xad\xba\xc7\xd4\xe1\xee\xfb"
4282 "\x08\x15\x22\x2f\x3c\x49\x56\x63"
4283 "\x70\x7d\x8a\x97\xa4\xb1\xbe\xcb"
4284 "\xd8\xe5\xf2\xff\x0c\x19\x26\x33"
4285 "\x40\x4d\x5a\x67\x74\x81\x8e\x9b"
4286 "\xa8\xb5\xc2\xcf\xdc\xe9\xf6\x03"
4287 "\x10\x1d\x2a\x37\x44\x51\x5e\x6b"
4288 "\x78\x85\x92\x9f\xac\xb9\xc6\xd3"
4289 "\xe0\xed\xfa\x07\x14\x21\x2e\x3b"
4290 "\x48\x55\x62\x6f\x7c\x89\x96\xa3"
4291 "\xb0\xbd\xca\xd7\xe4\xf1\xfe\x0b"
4292 "\x18\x25\x32\x3f\x4c\x59\x66\x73"
4293 "\x80\x8d\x9a\xa7\xb4\xc1\xce\xdb"
4294 "\xe8\xf5\x02\x0f\x1c\x29\x36\x43"
4295 "\x50\x5d\x6a\x77\x84\x91\x9e\xab"
4296 "\xb8\xc5\xd2\xdf\xec\xf9\x06\x13"
4297 "\x20\x2d\x3a\x47\x54\x61\x6e\x7b"
4298 "\x88\x95\xa2\xaf\xbc\xc9\xd6\xe3"
4299 "\xf0\xfd\x0a\x17\x24\x31\x3e\x4b"
4300 "\x58\x65\x72\x7f\x8c\x99\xa6\xb3"
4301 "\xc0\xcd\xda\xe7\xf4\x01\x0e\x1b"
4302 "\x28\x35\x42\x4f\x5c\x69\x76\x83"
4303 "\x90\x9d\xaa\xb7\xc4\xd1\xde\xeb"
4304 "\xf8\x05\x12\x1f\x2c\x39\x46\x53"
4305 "\x60\x6d\x7a\x87\x94\xa1\xae\xbb"
4306 "\xc8\xd5\xe2\xef\xfc\x09\x16\x23"
4307 "\x30\x3d\x4a\x57\x64\x71\x7e\x8b"
4308 "\x98\xa5\xb2\xbf\xcc\xd9\xe6\xf3"
4309 "\x00\x0f\x1e\x2d\x3c\x4b\x5a\x69"
4310 "\x78\x87\x96\xa5\xb4\xc3\xd2\xe1"
4311 "\xf0\xff\x0e\x1d\x2c\x3b\x4a\x59"
4312 "\x68\x77\x86\x95\xa4\xb3\xc2\xd1"
4313 "\xe0\xef\xfe\x0d\x1c\x2b\x3a\x49"
4314 "\x58\x67\x76\x85\x94\xa3\xb2\xc1"
4315 "\xd0\xdf\xee\xfd\x0c\x1b\x2a\x39"
4316 "\x48\x57\x66\x75\x84\x93\xa2\xb1"
4317 "\xc0\xcf\xde\xed\xfc\x0b\x1a\x29"
4318 "\x38\x47\x56\x65\x74\x83\x92\xa1"
4319 "\xb0\xbf\xce\xdd\xec\xfb\x0a\x19"
4320 "\x28\x37\x46\x55\x64\x73\x82\x91"
4321 "\xa0\xaf\xbe\xcd\xdc\xeb\xfa\x09"
4322 "\x18\x27\x36\x45\x54\x63\x72\x81"
4323 "\x90\x9f\xae\xbd\xcc\xdb\xea\xf9"
4324 "\x08\x17\x26\x35\x44\x53\x62\x71"
4325 "\x80\x8f\x9e\xad\xbc\xcb\xda\xe9"
4326 "\xf8\x07\x16\x25\x34\x43\x52\x61"
4327 "\x70\x7f\x8e\x9d\xac\xbb\xca\xd9"
4328 "\xe8\xf7\x06\x15\x24\x33\x42\x51"
4329 "\x60\x6f\x7e\x8d\x9c\xab\xba\xc9"
4330 "\xd8\xe7\xf6\x05\x14\x23\x32\x41"
4331 "\x50\x5f\x6e\x7d\x8c\x9b\xaa\xb9"
4332 "\xc8\xd7\xe6\xf5\x04\x13\x22\x31"
4333 "\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9"
4334 "\xb8\xc7\xd6\xe5\xf4\x03\x12\x21"
4335 "\x30\x3f\x4e\x5d\x6c\x7b\x8a\x99"
4336 "\xa8\xb7\xc6\xd5\xe4\xf3\x02\x11"
4337 "\x20\x2f\x3e\x4d\x5c\x6b\x7a\x89"
4338 "\x98\xa7\xb6\xc5\xd4\xe3\xf2\x01"
4339 "\x10\x1f\x2e\x3d\x4c\x5b\x6a\x79"
4340 "\x88\x97\xa6\xb5\xc4\xd3\xe2\xf1"
4341 "\x00\x11\x22\x33\x44\x55\x66\x77"
4342 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff"
4343 "\x10\x21\x32\x43\x54\x65\x76\x87"
4344 "\x98\xa9\xba\xcb\xdc\xed\xfe\x0f"
4345 "\x20\x31\x42\x53\x64\x75\x86\x97"
4346 "\xa8\xb9\xca\xdb\xec\xfd\x0e\x1f"
4347 "\x30\x41\x52\x63\x74\x85\x96\xa7"
4348 "\xb8\xc9\xda\xeb\xfc\x0d\x1e\x2f"
4349 "\x40\x51\x62\x73\x84\x95\xa6\xb7"
4350 "\xc8\xd9\xea\xfb\x0c\x1d\x2e\x3f"
4351 "\x50\x61\x72\x83\x94\xa5\xb6\xc7"
4352 "\xd8\xe9\xfa\x0b\x1c\x2d\x3e\x4f"
4353 "\x60\x71\x82\x93\xa4\xb5\xc6\xd7"
4354 "\xe8\xf9\x0a\x1b\x2c\x3d\x4e\x5f"
4355 "\x70\x81\x92\xa3\xb4\xc5\xd6\xe7"
4356 "\xf8\x09\x1a\x2b\x3c\x4d\x5e\x6f"
4357 "\x80\x91\xa2\xb3\xc4\xd5\xe6\xf7"
4358 "\x08\x19\x2a\x3b\x4c\x5d\x6e\x7f"
4359 "\x90\xa1\xb2\xc3\xd4\xe5\xf6\x07"
4360 "\x18\x29\x3a\x4b\x5c\x6d\x7e\x8f"
4361 "\xa0\xb1\xc2\xd3\xe4\xf5\x06\x17"
4362 "\x28\x39\x4a\x5b\x6c\x7d\x8e\x9f"
4363 "\xb0\xc1\xd2\xe3\xf4\x05\x16\x27"
4364 "\x38\x49\x5a\x6b\x7c\x8d\x9e\xaf"
4365 "\xc0\xd1\xe2\xf3\x04\x15\x26\x37"
4366 "\x48\x59\x6a\x7b\x8c\x9d\xae\xbf"
4367 "\xd0\xe1\xf2\x03\x14\x25\x36\x47"
4368 "\x58\x69\x7a\x8b\x9c\xad\xbe\xcf"
4369 "\xe0\xf1\x02\x13\x24\x35\x46\x57"
4370 "\x68\x79\x8a\x9b\xac\xbd\xce\xdf"
4371 "\xf0\x01\x12\x23\x34\x45\x56\x67"
4372 "\x78\x89\x9a\xab\xbc\xcd\xde\xef"
4373 "\x00\x13\x26\x39\x4c\x5f\x72\x85"
4374 "\x98\xab\xbe\xd1\xe4\xf7\x0a\x1d"
4375 "\x30\x43\x56\x69\x7c\x8f\xa2\xb5"
4376 "\xc8\xdb\xee\x01\x14\x27\x3a\x4d"
4377 "\x60\x73\x86\x99\xac\xbf\xd2\xe5"
4378 "\xf8\x0b\x1e\x31\x44\x57\x6a\x7d"
4379 "\x90\xa3\xb6\xc9\xdc\xef\x02\x15"
4380 "\x28\x3b\x4e\x61\x74\x87\x9a\xad"
4381 "\xc0\xd3\xe6\xf9\x0c\x1f\x32\x45"
4382 "\x58\x6b\x7e\x91\xa4\xb7\xca\xdd"
4383 "\xf0\x03\x16\x29\x3c\x4f\x62\x75"
4384 "\x88\x9b\xae\xc1\xd4\xe7\xfa\x0d"
4385 "\x20\x33\x46\x59\x6c\x7f\x92\xa5"
4386 "\xb8\xcb\xde\xf1\x04\x17\x2a\x3d"
4387 "\x50\x63\x76\x89\x9c\xaf\xc2\xd5"
4388 "\xe8\xfb\x0e\x21\x34\x47\x5a\x6d"
4389 "\x80\x93\xa6\xb9\xcc\xdf\xf2\x05"
4390 "\x18\x2b\x3e\x51\x64\x77\x8a\x9d"
4391 "\xb0\xc3\xd6\xe9\xfc\x0f\x22\x35"
4392 "\x48\x5b\x6e\x81\x94\xa7\xba\xcd"
4393 "\xe0\xf3\x06\x19\x2c\x3f\x52\x65"
4394 "\x78\x8b\x9e\xb1\xc4\xd7\xea\xfd"
4395 "\x10\x23\x36\x49\x5c\x6f\x82\x95"
4396 "\xa8\xbb\xce\xe1\xf4\x07\x1a\x2d"
4397 "\x40\x53\x66\x79\x8c\x9f\xb2\xc5"
4398 "\xd8\xeb\xfe\x11\x24\x37\x4a\x5d"
4399 "\x70\x83\x96\xa9\xbc\xcf\xe2\xf5"
4400 "\x08\x1b\x2e\x41\x54\x67\x7a\x8d"
4401 "\xa0\xb3\xc6\xd9\xec\xff\x12\x25"
4402 "\x38\x4b\x5e\x71\x84\x97\xaa\xbd"
4403 "\xd0\xe3\xf6\x09\x1c\x2f\x42\x55"
4404 "\x68\x7b\x8e\xa1\xb4\xc7\xda\xed"
4405 "\x00\x15\x2a\x3f\x54\x69\x7e\x93"
4406 "\xa8\xbd\xd2\xe7\xfc\x11\x26\x3b"
4407 "\x50\x65\x7a\x8f\xa4\xb9\xce\xe3"
4408 "\xf8\x0d\x22\x37\x4c\x61\x76\x8b"
4409 "\xa0\xb5\xca\xdf\xf4\x09\x1e\x33"
4410 "\x48\x5d\x72\x87\x9c\xb1\xc6\xdb"
4411 "\xf0\x05\x1a\x2f\x44\x59\x6e\x83"
4412 "\x98\xad\xc2\xd7\xec\x01\x16\x2b"
4413 "\x40\x55\x6a\x7f\x94\xa9\xbe\xd3"
4414 "\xe8\xfd\x12\x27\x3c\x51\x66\x7b"
4415 "\x90\xa5\xba\xcf\xe4\xf9\x0e\x23"
4416 "\x38\x4d\x62\x77\x8c\xa1\xb6\xcb"
4417 "\xe0\xf5\x0a\x1f\x34\x49\x5e\x73"
4418 "\x88\x9d\xb2\xc7\xdc\xf1\x06\x1b"
4419 "\x30\x45\x5a\x6f\x84\x99\xae\xc3"
4420 "\xd8\xed\x02\x17\x2c\x41\x56\x6b"
4421 "\x80\x95\xaa\xbf\xd4\xe9\xfe\x13"
4422 "\x28\x3d\x52\x67\x7c\x91\xa6\xbb"
4423 "\xd0\xe5\xfa\x0f\x24\x39\x4e\x63"
4424 "\x78\x8d\xa2\xb7\xcc\xe1\xf6\x0b"
4425 "\x20\x35\x4a\x5f\x74\x89\x9e\xb3"
4426 "\xc8\xdd\xf2\x07\x1c\x31\x46\x5b"
4427 "\x70\x85\x9a\xaf\xc4\xd9\xee\x03"
4428 "\x18\x2d\x42\x57\x6c\x81\x96\xab"
4429 "\xc0\xd5\xea\xff\x14\x29\x3e\x53"
4430 "\x68\x7d\x92\xa7\xbc\xd1\xe6\xfb"
4431 "\x10\x25\x3a\x4f\x64\x79\x8e\xa3"
4432 "\xb8\xcd\xe2\xf7\x0c\x21\x36\x4b"
4433 "\x60\x75\x8a\x9f\xb4\xc9\xde\xf3"
4434 "\x08\x1d\x32\x47\x5c\x71\x86\x9b"
4435 "\xb0\xc5\xda\xef\x04\x19\x2e\x43"
4436 "\x58\x6d\x82\x97\xac\xc1\xd6\xeb"
4437 "\x00\x17\x2e\x45\x5c\x73\x8a\xa1"
4438 "\xb8\xcf\xe6\xfd\x14\x2b\x42\x59"
4439 "\x70\x87\x9e\xb5\xcc\xe3\xfa\x11"
4440 "\x28\x3f\x56\x6d\x84\x9b\xb2\xc9"
4441 "\xe0\xf7\x0e\x25\x3c\x53\x6a\x81"
4442 "\x98\xaf\xc6\xdd\xf4\x0b\x22\x39"
4443 "\x50\x67\x7e\x95\xac\xc3\xda\xf1"
4444 "\x08\x1f\x36\x4d\x64\x7b\x92\xa9"
4445 "\xc0\xd7\xee\x05\x1c\x33\x4a\x61"
4446 "\x78\x8f\xa6\xbd\xd4\xeb\x02\x19"
4447 "\x30\x47\x5e\x75\x8c\xa3\xba\xd1"
4448 "\xe8\xff\x16\x2d\x44\x5b\x72\x89"
4449 "\xa0\xb7\xce\xe5\xfc\x13\x2a\x41"
4450 "\x58\x6f\x86\x9d\xb4\xcb\xe2\xf9"
4451 "\x10\x27\x3e\x55\x6c\x83\x9a\xb1"
4452 "\xc8\xdf\xf6\x0d\x24\x3b\x52\x69"
4453 "\x80\x97\xae\xc5\xdc\xf3\x0a\x21"
4454 "\x38\x4f\x66\x7d\x94\xab\xc2\xd9"
4455 "\xf0\x07\x1e\x35\x4c\x63\x7a\x91"
4456 "\xa8\xbf\xd6\xed\x04\x1b\x32\x49"
4457 "\x60\x77\x8e\xa5\xbc\xd3\xea\x01"
4458 "\x18\x2f\x46\x5d\x74\x8b\xa2\xb9"
4459 "\xd0\xe7\xfe\x15\x2c\x43\x5a\x71"
4460 "\x88\x9f\xb6\xcd\xe4\xfb\x12\x29"
4461 "\x40\x57\x6e\x85\x9c\xb3\xca\xe1"
4462 "\xf8\x0f\x26\x3d\x54\x6b\x82\x99"
4463 "\xb0\xc7\xde\xf5\x0c\x23\x3a\x51"
4464 "\x68\x7f\x96\xad\xc4\xdb\xf2\x09"
4465 "\x20\x37\x4e\x65\x7c\x93\xaa\xc1"
4466 "\xd8\xef\x06\x1d\x34\x4b\x62\x79"
4467 "\x90\xa7\xbe\xd5\xec\x03\x1a\x31"
4468 "\x48\x5f\x76\x8d\xa4\xbb\xd2\xe9"
4469 "\x00\x19\x32\x4b\x64\x7d\x96\xaf"
4470 "\xc8\xe1\xfa\x13\x2c\x45\x5e\x77"
4471 "\x90\xa9\xc2\xdb\xf4\x0d\x26\x3f"
4472 "\x58\x71\x8a\xa3\xbc\xd5\xee\x07"
4473 "\x20\x39\x52\x6b\x84\x9d\xb6\xcf"
4474 "\xe8\x01\x1a\x33\x4c\x65\x7e\x97"
4475 "\xb0\xc9\xe2\xfb\x14\x2d\x46\x5f"
4476 "\x78\x91\xaa\xc3\xdc\xf5\x0e\x27"
4477 "\x40\x59\x72\x8b\xa4\xbd\xd6\xef"
4478 "\x08\x21\x3a\x53\x6c\x85\x9e\xb7"
4479 "\xd0\xe9\x02\x1b\x34\x4d\x66\x7f"
4480 "\x98\xb1\xca\xe3\xfc\x15\x2e\x47"
4481 "\x60\x79\x92\xab\xc4\xdd\xf6\x0f"
4482 "\x28\x41\x5a\x73\x8c\xa5\xbe\xd7"
4483 "\xf0\x09\x22\x3b\x54\x6d\x86\x9f"
4484 "\xb8\xd1\xea\x03\x1c\x35\x4e\x67"
4485 "\x80\x99\xb2\xcb\xe4\xfd\x16\x2f"
4486 "\x48\x61\x7a\x93\xac\xc5\xde\xf7"
4487 "\x10\x29\x42\x5b\x74\x8d\xa6\xbf"
4488 "\xd8\xf1\x0a\x23\x3c\x55\x6e\x87"
4489 "\xa0\xb9\xd2\xeb\x04\x1d\x36\x4f"
4490 "\x68\x81\x9a\xb3\xcc\xe5\xfe\x17"
4491 "\x30\x49\x62\x7b\x94\xad\xc6\xdf"
4492 "\xf8\x11\x2a\x43\x5c\x75\x8e\xa7"
4493 "\xc0\xd9\xf2\x0b\x24\x3d\x56\x6f"
4494 "\x88\xa1\xba\xd3\xec\x05\x1e\x37"
4495 "\x50\x69\x82\x9b\xb4\xcd\xe6\xff"
4496 "\x18\x31\x4a\x63\x7c\x95\xae\xc7"
4497 "\xe0\xf9\x12\x2b\x44\x5d\x76\x8f"
4498 "\xa8\xc1\xda\xf3\x0c\x25\x3e\x57"
4499 "\x70\x89\xa2\xbb\xd4\xed\x06\x1f"
4500 "\x38\x51\x6a\x83\x9c\xb5\xce\xe7"
4501 "\x00\x1b\x36\x51\x6c\x87\xa2\xbd"
4502 "\xd8\xf3\x0e\x29\x44\x5f\x7a\x95"
4503 "\xb0\xcb\xe6\x01\x1c\x37\x52\x6d"
4504 "\x88\xa3\xbe\xd9\xf4\x0f\x2a\x45"
4505 "\x60\x7b\x96\xb1\xcc\xe7\x02\x1d"
4506 "\x38\x53\x6e\x89\xa4\xbf\xda\xf5"
4507 "\x10\x2b\x46\x61\x7c\x97\xb2\xcd"
4508 "\xe8\x03\x1e\x39\x54\x6f\x8a\xa5"
4509 "\xc0\xdb\xf6\x11\x2c\x47\x62\x7d"
4510 "\x98\xb3\xce\xe9\x04\x1f\x3a\x55"
4511 "\x70\x8b\xa6\xc1\xdc\xf7\x12\x2d"
4512 "\x48\x63\x7e\x99\xb4\xcf\xea\x05"
4513 "\x20\x3b\x56\x71\x8c\xa7\xc2\xdd"
4514 "\xf8\x13\x2e\x49\x64\x7f\x9a\xb5"
4515 "\xd0\xeb\x06\x21\x3c\x57\x72\x8d"
4516 "\xa8\xc3\xde\xf9\x14\x2f\x4a\x65"
4517 "\x80\x9b\xb6\xd1\xec\x07\x22\x3d"
4518 "\x58\x73\x8e\xa9\xc4\xdf\xfa\x15"
4519 "\x30\x4b\x66\x81\x9c\xb7\xd2\xed"
4520 "\x08\x23\x3e\x59\x74\x8f\xaa\xc5"
4521 "\xe0\xfb\x16\x31\x4c\x67\x82\x9d"
4522 "\xb8\xd3\xee\x09\x24\x3f\x5a\x75"
4523 "\x90\xab\xc6\xe1\xfc\x17\x32\x4d"
4524 "\x68\x83\x9e\xb9\xd4\xef\x0a\x25"
4525 "\x40\x5b\x76\x91\xac\xc7\xe2\xfd"
4526 "\x18\x33\x4e\x69\x84\x9f\xba\xd5"
4527 "\xf0\x0b\x26\x41\x5c\x77\x92\xad"
4528 "\xc8\xe3\xfe\x19\x34\x4f\x6a\x85"
4529 "\xa0\xbb\xd6\xf1\x0c\x27\x42\x5d"
4530 "\x78\x93\xae\xc9\xe4\xff\x1a\x35"
4531 "\x50\x6b\x86\xa1\xbc\xd7\xf2\x0d"
4532 "\x28\x43\x5e\x79\x94\xaf\xca\xe5"
4533 "\x00\x1d\x3a\x57\x74\x91\xae\xcb"
4534 "\xe8\x05\x22\x3f\x5c\x79\x96\xb3"
4535 "\xd0\xed\x0a\x27\x44\x61\x7e\x9b"
4536 "\xb8\xd5\xf2\x0f\x2c\x49\x66\x83"
4537 "\xa0\xbd\xda\xf7\x14\x31\x4e\x6b"
4538 "\x88\xa5\xc2\xdf\xfc\x19\x36\x53"
4539 "\x70\x8d\xaa\xc7\xe4\x01\x1e\x3b"
4540 "\x58\x75\x92\xaf\xcc\xe9\x06\x23"
4541 "\x40\x5d\x7a\x97\xb4\xd1\xee\x0b"
4542 "\x28\x45\x62\x7f\x9c\xb9\xd6\xf3"
4543 "\x10\x2d\x4a\x67\x84\xa1\xbe\xdb"
4544 "\xf8\x15\x32\x4f\x6c\x89\xa6\xc3"
4545 "\xe0\xfd\x1a\x37\x54\x71\x8e\xab"
4546 "\xc8\xe5\x02\x1f\x3c\x59\x76\x93"
4547 "\xb0\xcd\xea\x07\x24\x41\x5e\x7b"
4548 "\x98\xb5\xd2\xef\x0c\x29\x46\x63"
4549 "\x80\x9d\xba\xd7\xf4\x11\x2e\x4b"
4550 "\x68\x85\xa2\xbf\xdc\xf9\x16\x33"
4551 "\x50\x6d\x8a\xa7\xc4\xe1\xfe\x1b"
4552 "\x38\x55\x72\x8f\xac\xc9\xe6\x03"
4553 "\x20\x3d\x5a\x77\x94\xb1\xce\xeb"
4554 "\x08\x25\x42\x5f\x7c\x99\xb6\xd3"
4555 "\xf0\x0d\x2a\x47\x64\x81\x9e\xbb"
4556 "\xd8\xf5\x12\x2f\x4c\x69\x86\xa3"
4557 "\xc0\xdd\xfa\x17\x34\x51\x6e\x8b"
4558 "\xa8\xc5\xe2\xff\x1c\x39\x56\x73"
4559 "\x90\xad\xca\xe7\x04\x21\x3e\x5b"
4560 "\x78\x95\xb2\xcf\xec\x09\x26\x43"
4561 "\x60\x7d\x9a\xb7\xd4\xf1\x0e\x2b"
4562 "\x48\x65\x82\x9f\xbc\xd9\xf6\x13"
4563 "\x30\x4d\x6a\x87\xa4\xc1\xde\xfb"
4564 "\x18\x35\x52\x6f\x8c\xa9\xc6\xe3"
4565 "\x00\x1f\x3e\x5d\x7c\x9b\xba\xd9"
4566 "\xf8\x17\x36\x55\x74\x93\xb2\xd1"
4567 "\xf0\x0f\x2e\x4d\x6c\x8b\xaa\xc9"
4568 "\xe8\x07\x26\x45\x64\x83\xa2\xc1"
4569 "\xe0\xff\x1e\x3d\x5c\x7b\x9a\xb9"
4570 "\xd8\xf7\x16\x35\x54\x73\x92\xb1"
4571 "\xd0\xef\x0e\x2d\x4c\x6b\x8a\xa9"
4572 "\xc8\xe7\x06\x25\x44\x63\x82\xa1"
4573 "\xc0\xdf\xfe\x1d\x3c\x5b\x7a\x99"
4574 "\xb8\xd7\xf6\x15\x34\x53\x72\x91"
4575 "\xb0\xcf\xee\x0d\x2c\x4b\x6a\x89"
4576 "\xa8\xc7\xe6\x05\x24\x43\x62\x81"
4577 "\xa0\xbf\xde\xfd\x1c\x3b\x5a\x79"
4578 "\x98\xb7\xd6\xf5\x14\x33\x52\x71"
4579 "\x90\xaf\xce\xed\x0c\x2b\x4a\x69"
4580 "\x88\xa7\xc6\xe5\x04\x23\x42\x61"
4581 "\x80\x9f\xbe\xdd\xfc\x1b\x3a\x59"
4582 "\x78\x97\xb6\xd5\xf4\x13\x32\x51"
4583 "\x70\x8f\xae\xcd\xec\x0b\x2a\x49"
4584 "\x68\x87\xa6\xc5\xe4\x03\x22\x41"
4585 "\x60\x7f\x9e\xbd\xdc\xfb\x1a\x39"
4586 "\x58\x77\x96\xb5\xd4\xf3\x12\x31"
4587 "\x50\x6f\x8e\xad\xcc\xeb\x0a\x29"
4588 "\x48\x67\x86\xa5\xc4\xe3\x02\x21"
4589 "\x40\x5f\x7e\x9d\xbc\xdb\xfa\x19"
4590 "\x38\x57\x76\x95\xb4\xd3\xf2\x11"
4591 "\x30\x4f\x6e\x8d\xac\xcb\xea\x09"
4592 "\x28\x47\x66\x85\xa4\xc3\xe2\x01"
4593 "\x20\x3f\x5e\x7d\x9c\xbb\xda\xf9"
4594 "\x18\x37\x56\x75\x94\xb3\xd2\xf1"
4595 "\x10\x2f\x4e\x6d\x8c\xab\xca\xe9"
4596 "\x08\x27\x46\x65\x84\xa3\xc2\xe1"
4597 "\x00\x21\x42\x63",
4598 .ilen = 4100,
4599 .result =
4600 "\xf0\x5c\x74\xad\x4e\xbc\x99\xe2"
4601 "\xae\xff\x91\x3a\x44\xcf\x38\x32"
4602 "\x1e\xad\xa7\xcd\xa1\x39\x95\xaa"
4603 "\x10\xb1\xb3\x2e\x04\x31\x8f\x86"
4604 "\xf2\x62\x74\x70\x0c\xa4\x46\x08"
4605 "\xa8\xb7\x99\xa8\xe9\xd2\x73\x79"
4606 "\x7e\x6e\xd4\x8f\x1e\xc7\x8e\x31"
4607 "\x0b\xfa\x4b\xce\xfd\xf3\x57\x71"
4608 "\xe9\x46\x03\xa5\x3d\x34\x00\xe2"
4609 "\x18\xff\x75\x6d\x06\x2d\x00\xab"
4610 "\xb9\x3e\x6c\x59\xc5\x84\x06\xb5"
4611 "\x8b\xd0\x89\x9c\x4a\x79\x16\xc6"
4612 "\x3d\x74\x54\xfa\x44\xcd\x23\x26"
4613 "\x5c\xcf\x7e\x28\x92\x32\xbf\xdf"
4614 "\xa7\x20\x3c\x74\x58\x2a\x9a\xde"
4615 "\x61\x00\x1c\x4f\xff\x59\xc4\x22"
4616 "\xac\x3c\xd0\xe8\x6c\xf9\x97\x1b"
4617 "\x58\x9b\xad\x71\xe8\xa9\xb5\x0d"
4618 "\xee\x2f\x04\x1f\x7f\xbc\x99\xee"
4619 "\x84\xff\x42\x60\xdc\x3a\x18\xa5"
4620 "\x81\xf9\xef\xdc\x7a\x0f\x65\x41"
4621 "\x2f\xa3\xd3\xf9\xc2\xcb\xc0\x4d"
4622 "\x8f\xd3\x76\x96\xad\x49\x6d\x38"
4623 "\x3d\x39\x0b\x6c\x80\xb7\x54\x69"
4624 "\xf0\x2c\x90\x02\x29\x0d\x1c\x12"
4625 "\xad\x55\xc3\x8b\x68\xd9\xcc\xb3"
4626 "\xb2\x64\x33\x90\x5e\xca\x4b\xe2"
4627 "\xfb\x75\xdc\x63\xf7\x9f\x82\x74"
4628 "\xf0\xc9\xaa\x7f\xe9\x2a\x9b\x33"
4629 "\xbc\x88\x00\x7f\xca\xb2\x1f\x14"
4630 "\xdb\xc5\x8e\x7b\x11\x3c\x3e\x08"
4631 "\xf3\x83\xe8\xe0\x94\x86\x2e\x92"
4632 "\x78\x6b\x01\xc9\xc7\x83\xba\x21"
4633 "\x6a\x25\x15\x33\x4e\x45\x08\xec"
4634 "\x35\xdb\xe0\x6e\x31\x51\x79\xa9"
4635 "\x42\x44\x65\xc1\xa0\xf1\xf9\x2a"
4636 "\x70\xd5\xb6\xc6\xc1\x8c\x39\xfc"
4637 "\x25\xa6\x55\xd9\xdd\x2d\x4c\xec"
4638 "\x49\xc6\xeb\x0e\xa8\x25\x2a\x16"
4639 "\x1b\x66\x84\xda\xe2\x92\xe5\xc0"
4640 "\xc8\x53\x07\xaf\x80\x84\xec\xfd"
4641 "\xcd\xd1\x6e\xcd\x6f\x6a\xf5\x36"
4642 "\xc5\x15\xe5\x25\x7d\x77\xd1\x1a"
4643 "\x93\x36\xa9\xcf\x7c\xa4\x54\x4a"
4644 "\x06\x51\x48\x4e\xf6\x59\x87\xd2"
4645 "\x04\x02\xef\xd3\x44\xde\x76\x31"
4646 "\xb3\x34\x17\x1b\x9d\x66\x11\x9f"
4647 "\x1e\xcc\x17\xe9\xc7\x3c\x1b\xe7"
4648 "\xcb\x50\x08\xfc\xdc\x2b\x24\xdb"
4649 "\x65\x83\xd0\x3b\xe3\x30\xea\x94"
4650 "\x6c\xe7\xe8\x35\x32\xc7\xdb\x64"
4651 "\xb4\x01\xab\x36\x2c\x77\x13\xaf"
4652 "\xf8\x2b\x88\x3f\x54\x39\xc4\x44"
4653 "\xfe\xef\x6f\x68\x34\xbe\x0f\x05"
4654 "\x16\x6d\xf6\x0a\x30\xe7\xe3\xed"
4655 "\xc4\xde\x3c\x1b\x13\xd8\xdb\xfe"
4656 "\x41\x62\xe5\x28\xd4\x8d\xa3\xc7"
4657 "\x93\x97\xc6\x48\x45\x1d\x9f\x83"
4658 "\xdf\x4b\x40\x3e\x42\x25\x87\x80"
4659 "\x4c\x7d\xa8\xd4\x98\x23\x95\x75"
4660 "\x41\x8c\xda\x41\x9b\xd4\xa7\x06"
4661 "\xb5\xf1\x71\x09\x53\xbe\xca\xbf"
4662 "\x32\x03\xed\xf0\x50\x1c\x56\x39"
4663 "\x5b\xa4\x75\x18\xf7\x9b\x58\xef"
4664 "\x53\xfc\x2a\x38\x23\x15\x75\xcd"
4665 "\x45\xe5\x5a\x82\x55\xba\x21\xfa"
4666 "\xd4\xbd\xc6\x94\x7c\xc5\x80\x12"
4667 "\xf7\x4b\x32\xc4\x9a\x82\xd8\x28"
4668 "\x8f\xd9\xc2\x0f\x60\x03\xbe\x5e"
4669 "\x21\xd6\x5f\x58\xbf\x5c\xb1\x32"
4670 "\x82\x8d\xa9\xe5\xf2\x66\x1a\xc0"
4671 "\xa0\xbc\x58\x2f\x71\xf5\x2f\xed"
4672 "\xd1\x26\xb9\xd8\x49\x5a\x07\x19"
4673 "\x01\x7c\x59\xb0\xf8\xa4\xb7\xd3"
4674 "\x7b\x1a\x8c\x38\xf4\x50\xa4\x59"
4675 "\xb0\xcc\x41\x0b\x88\x7f\xe5\x31"
4676 "\xb3\x42\xba\xa2\x7e\xd4\x32\x71"
4677 "\x45\x87\x48\xa9\xc2\xf2\x89\xb3"
4678 "\xe4\xa7\x7e\x52\x15\x61\xfa\xfe"
4679 "\xc9\xdd\x81\xeb\x13\xab\xab\xc3"
4680 "\x98\x59\xd8\x16\x3d\x14\x7a\x1c"
4681 "\x3c\x41\x9a\x16\x16\x9b\xd2\xd2"
4682 "\x69\x3a\x29\x23\xac\x86\x32\xa5"
4683 "\x48\x9c\x9e\xf3\x47\x77\x81\x70"
4684 "\x24\xe8\x85\xd2\xf5\xb5\xfa\xff"
4685 "\x59\x6a\xd3\x50\x59\x43\x59\xde"
4686 "\xd9\xf1\x55\xa5\x0c\xc3\x1a\x1a"
4687 "\x18\x34\x0d\x1a\x63\x33\xed\x10"
4688 "\xe0\x1d\x2a\x18\xd2\xc0\x54\xa8"
4689 "\xca\xb5\x9a\xd3\xdd\xca\x45\x84"
4690 "\x50\xe7\x0f\xfe\xa4\x99\x5a\xbe"
4691 "\x43\x2d\x9a\xcb\x92\x3f\x5a\x1d"
4692 "\x85\xd8\xc9\xdf\x68\xc9\x12\x80"
4693 "\x56\x0c\xdc\x00\xdc\x3a\x7d\x9d"
4694 "\xa3\xa2\xe8\x4d\xbf\xf9\x70\xa0"
4695 "\xa4\x13\x4f\x6b\xaf\x0a\x89\x7f"
4696 "\xda\xf0\xbf\x9b\xc8\x1d\xe5\xf8"
4697 "\x2e\x8b\x07\xb5\x73\x1b\xcc\xa2"
4698 "\xa6\xad\x30\xbc\x78\x3c\x5b\x10"
4699 "\xfa\x5e\x62\x2d\x9e\x64\xb3\x33"
4700 "\xce\xf9\x1f\x86\xe7\x8b\xa2\xb8"
4701 "\xe8\x99\x57\x8c\x11\xed\x66\xd9"
4702 "\x3c\x72\xb9\xc3\xe6\x4e\x17\x3a"
4703 "\x6a\xcb\x42\x24\x06\xed\x3e\x4e"
4704 "\xa3\xe8\x6a\x94\xda\x0d\x4e\xd5"
4705 "\x14\x19\xcf\xb6\x26\xd8\x2e\xcc"
4706 "\x64\x76\x38\x49\x4d\xfe\x30\x6d"
4707 "\xe4\xc8\x8c\x7b\xc4\xe0\x35\xba"
4708 "\x22\x6e\x76\xe1\x1a\xf2\x53\xc3"
4709 "\x28\xa2\x82\x1f\x61\x69\xad\xc1"
4710 "\x7b\x28\x4b\x1e\x6c\x85\x95\x9b"
4711 "\x51\xb5\x17\x7f\x12\x69\x8c\x24"
4712 "\xd5\xc7\x5a\x5a\x11\x54\xff\x5a"
4713 "\xf7\x16\xc3\x91\xa6\xf0\xdc\x0a"
4714 "\xb6\xa7\x4a\x0d\x7a\x58\xfe\xa5"
4715 "\xf5\xcb\x8f\x7b\x0e\xea\x57\xe7"
4716 "\xbd\x79\xd6\x1c\x88\x23\x6c\xf2"
4717 "\x4d\x29\x77\x53\x35\x6a\x00\x8d"
4718 "\xcd\xa3\x58\xbe\x77\x99\x18\xf8"
4719 "\xe6\xe1\x8f\xe9\x37\x8f\xe3\xe2"
4720 "\x5a\x8a\x93\x25\xaf\xf3\x78\x80"
4721 "\xbe\xa6\x1b\xc6\xac\x8b\x1c\x91"
4722 "\x58\xe1\x9f\x89\x35\x9d\x1d\x21"
4723 "\x29\x9f\xf4\x99\x02\x27\x0f\xa8"
4724 "\x4f\x79\x94\x2b\x33\x2c\xda\xa2"
4725 "\x26\x39\x83\x94\xef\x27\xd8\x53"
4726 "\x8f\x66\x0d\xe4\x41\x7d\x34\xcd"
4727 "\x43\x7c\x95\x0a\x53\xef\x66\xda"
4728 "\x7e\x9b\xf3\x93\xaf\xd0\x73\x71"
4729 "\xba\x40\x9b\x74\xf8\xd7\xd7\x41"
4730 "\x6d\xaf\x72\x9c\x8d\x21\x87\x3c"
4731 "\xfd\x0a\x90\xa9\x47\x96\x9e\xd3"
4732 "\x88\xee\x73\xcf\x66\x2f\x52\x56"
4733 "\x6d\xa9\x80\x4c\xe2\x6f\x62\x88"
4734 "\x3f\x0e\x54\x17\x48\x80\x5d\xd3"
4735 "\xc3\xda\x25\x3d\xa1\xc8\xcb\x9f"
4736 "\x9b\x70\xb3\xa1\xeb\x04\x52\xa1"
4737 "\xf2\x22\x0f\xfc\xc8\x18\xfa\xf9"
4738 "\x85\x9c\xf1\xac\xeb\x0c\x02\x46"
4739 "\x75\xd2\xf5\x2c\xe3\xd2\x59\x94"
4740 "\x12\xf3\x3c\xfc\xd7\x92\xfa\x36"
4741 "\xba\x61\x34\x38\x7c\xda\x48\x3e"
4742 "\x08\xc9\x39\x23\x5e\x02\x2c\x1a"
4743 "\x18\x7e\xb4\xd9\xfd\x9e\x40\x02"
4744 "\xb1\x33\x37\x32\xe7\xde\xd6\xd0"
4745 "\x7c\x58\x65\x4b\xf8\x34\x27\x9c"
4746 "\x44\xb4\xbd\xe9\xe9\x4c\x78\x7d"
4747 "\x4b\x9f\xce\xb1\xcd\x47\xa5\x37"
4748 "\xe5\x6d\xbd\xb9\x43\x94\x0a\xd4"
4749 "\xd6\xf9\x04\x5f\xb5\x66\x6c\x1a"
4750 "\x35\x12\xe3\x36\x28\x27\x36\x58"
4751 "\x01\x2b\x79\xe4\xba\x6d\x10\x7d"
4752 "\x65\xdf\x84\x95\xf4\xd5\xb6\x8f"
4753 "\x2b\x9f\x96\x00\x86\x60\xf0\x21"
4754 "\x76\xa8\x6a\x8c\x28\x1c\xb3\x6b"
4755 "\x97\xd7\xb6\x53\x2a\xcc\xab\x40"
4756 "\x9d\x62\x79\x58\x52\xe6\x65\xb7"
4757 "\xab\x55\x67\x9c\x89\x7c\x03\xb0"
4758 "\x73\x59\xc5\x81\xf5\x18\x17\x5c"
4759 "\x89\xf3\x78\x35\x44\x62\x78\x72"
4760 "\xd0\x96\xeb\x31\xe7\x87\x77\x14"
4761 "\x99\x51\xf2\x59\x26\x9e\xb5\xa6"
4762 "\x45\xfe\x6e\xbd\x07\x4c\x94\x5a"
4763 "\xa5\x7d\xfc\xf1\x2b\x77\xe2\xfe"
4764 "\x17\xd4\x84\xa0\xac\xb5\xc7\xda"
4765 "\xa9\x1a\xb6\xf3\x74\x11\xb4\x9d"
4766 "\xfb\x79\x2e\x04\x2d\x50\x28\x83"
4767 "\xbf\xc6\x52\xd3\x34\xd6\xe8\x7a"
4768 "\xb6\xea\xe7\xa8\x6c\x15\x1e\x2c"
4769 "\x57\xbc\x48\x4e\x5f\x5c\xb6\x92"
4770 "\xd2\x49\x77\x81\x6d\x90\x70\xae"
4771 "\x98\xa1\x03\x0d\x6b\xb9\x77\x14"
4772 "\xf1\x4e\x23\xd3\xf8\x68\xbd\xc2"
4773 "\xfe\x04\xb7\x5c\xc5\x17\x60\x8f"
4774 "\x65\x54\xa4\x7a\x42\xdc\x18\x0d"
4775 "\xb5\xcf\x0f\xd3\xc7\x91\x66\x1b"
4776 "\x45\x42\x27\x75\x50\xe5\xee\xb8"
4777 "\x7f\x33\x2c\xba\x4a\x92\x4d\x2c"
4778 "\x3c\xe3\x0d\x80\x01\xba\x0d\x29"
4779 "\xd8\x3c\xe9\x13\x16\x57\xe6\xea"
4780 "\x94\x52\xe7\x00\x4d\x30\xb0\x0f"
4781 "\x35\xb8\xb8\xa7\xb1\xb5\x3b\x44"
4782 "\xe1\x2f\xfd\x88\xed\x43\xe7\x52"
4783 "\x10\x93\xb3\x8a\x30\x6b\x0a\xf7"
4784 "\x23\xc6\x50\x9d\x4a\xb0\xde\xc3"
4785 "\xdc\x9b\x2f\x01\x56\x36\x09\xc5"
4786 "\x2f\x6b\xfe\xf1\xd8\x27\x45\x03"
4787 "\x30\x5e\x5c\x5b\xb4\x62\x0e\x1a"
4788 "\xa9\x21\x2b\x92\x94\x87\x62\x57"
4789 "\x4c\x10\x74\x1a\xf1\x0a\xc5\x84"
4790 "\x3b\x9e\x72\x02\xd7\xcc\x09\x56"
4791 "\xbd\x54\xc1\xf0\xc3\xe3\xb3\xf8"
4792 "\xd2\x0d\x61\xcb\xef\xce\x0d\x05"
4793 "\xb0\x98\xd9\x8e\x4f\xf9\xbc\x93"
4794 "\xa6\xea\xc8\xcf\x10\x53\x4b\xf1"
4795 "\xec\xfc\x89\xf9\x64\xb0\x22\xbf"
4796 "\x9e\x55\x46\x9f\x7c\x50\x8e\x84"
4797 "\x54\x20\x98\xd7\x6c\x40\x1e\xdb"
4798 "\x69\x34\x78\x61\x24\x21\x9c\x8a"
4799 "\xb3\x62\x31\x8b\x6e\xf5\x2a\x35"
4800 "\x86\x13\xb1\x6c\x64\x2e\x41\xa5"
4801 "\x05\xf2\x42\xba\xd2\x3a\x0d\x8e"
4802 "\x8a\x59\x94\x3c\xcf\x36\x27\x82"
4803 "\xc2\x45\xee\x58\xcd\x88\xb4\xec"
4804 "\xde\xb2\x96\x0a\xaf\x38\x6f\x88"
4805 "\xd7\xd8\xe1\xdf\xb9\x96\xa9\x0a"
4806 "\xb1\x95\x28\x86\x20\xe9\x17\x49"
4807 "\xa2\x29\x38\xaa\xa5\xe9\x6e\xf1"
4808 "\x19\x27\xc0\xd5\x2a\x22\xc3\x0b"
4809 "\xdb\x7c\x73\x10\xb9\xba\x89\x76"
4810 "\x54\xae\x7d\x71\xb3\x93\xf6\x32"
4811 "\xe6\x47\x43\x55\xac\xa0\x0d\xc2"
4812 "\x93\x27\x4a\x8e\x0e\x74\x15\xc7"
4813 "\x0b\x85\xd9\x0c\xa9\x30\x7a\x3e"
4814 "\xea\x8f\x85\x6d\x3a\x12\x4f\x72"
4815 "\x69\x58\x7a\x80\xbb\xb5\x97\xf3"
4816 "\xcf\x70\xd2\x5d\xdd\x4d\x21\x79"
4817 "\x54\x4d\xe4\x05\xe8\xbd\xc2\x62"
4818 "\xb1\x3b\x77\x1c\xd6\x5c\xf3\xa0"
4819 "\x79\x00\xa8\x6c\x29\xd9\x18\x24"
4820 "\x36\xa2\x46\xc0\x96\x65\x7f\xbd"
4821 "\x2a\xed\x36\x16\x0c\xaa\x9f\xf4"
4822 "\xc5\xb4\xe2\x12\xed\x69\xed\x4f"
4823 "\x26\x2c\x39\x52\x89\x98\xe7\x2c"
4824 "\x99\xa4\x9e\xa3\x9b\x99\x46\x7a"
4825 "\x3a\xdc\xa8\x59\xa3\xdb\xc3\x3b"
4826 "\x95\x0d\x3b\x09\x6e\xee\x83\x5d"
4827 "\x32\x4d\xed\xab\xfa\x98\x14\x4e"
4828 "\xc3\x15\x45\x53\x61\xc4\x93\xbd"
4829 "\x90\xf4\x99\x95\x4c\xe6\x76\x92"
4830 "\x29\x90\x46\x30\x92\x69\x7d\x13"
4831 "\xf2\xa5\xcd\x69\x49\x44\xb2\x0f"
4832 "\x63\x40\x36\x5f\x09\xe2\x78\xf8"
4833 "\x91\xe3\xe2\xfa\x10\xf7\xc8\x24"
4834 "\xa8\x89\x32\x5c\x37\x25\x1d\xb2"
4835 "\xea\x17\x8a\x0a\xa9\x64\xc3\x7c"
4836 "\x3c\x7c\xbd\xc6\x79\x34\xe7\xe2"
4837 "\x85\x8e\xbf\xf8\xde\x92\xa0\xae"
4838 "\x20\xc4\xf6\xbb\x1f\x38\x19\x0e"
4839 "\xe8\x79\x9c\xa1\x23\xe9\x54\x7e"
4840 "\x37\x2f\xe2\x94\x32\xaf\xa0\x23"
4841 "\x49\xe4\xc0\xb3\xac\x00\x8f\x36"
4842 "\x05\xc4\xa6\x96\xec\x05\x98\x4f"
4843 "\x96\x67\x57\x1f\x20\x86\x1b\x2d"
4844 "\x69\xe4\x29\x93\x66\x5f\xaf\x6b"
4845 "\x88\x26\x2c\x67\x02\x4b\x52\xd0"
4846 "\x83\x7a\x43\x1f\xc0\x71\x15\x25"
4847 "\x77\x65\x08\x60\x11\x76\x4c\x8d"
4848 "\xed\xa9\x27\xc6\xb1\x2a\x2c\x6a"
4849 "\x4a\x97\xf5\xc6\xb7\x70\x42\xd3"
4850 "\x03\xd1\x24\x95\xec\x6d\xab\x38"
4851 "\x72\xce\xe2\x8b\x33\xd7\x51\x09"
4852 "\xdc\x45\xe0\x09\x96\x32\xf3\xc4"
4853 "\x84\xdc\x73\x73\x2d\x1b\x11\x98"
4854 "\xc5\x0e\x69\x28\x94\xc7\xb5\x4d"
4855 "\xc8\x8a\xd0\xaa\x13\x2e\x18\x74"
4856 "\xdd\xd1\x1e\xf3\x90\xe8\xfc\x9a"
4857 "\x72\x4a\x0e\xd1\xe4\xfb\x0d\x96"
4858 "\xd1\x0c\x79\x85\x1b\x1c\xfe\xe1"
4859 "\x62\x8f\x7a\x73\x32\xab\xc8\x18"
4860 "\x69\xe3\x34\x30\xdf\x13\xa6\xe5"
4861 "\xe8\x0e\x67\x7f\x81\x11\xb4\x60"
4862 "\xc7\xbd\x79\x65\x50\xdc\xc4\x5b"
4863 "\xde\x39\xa4\x01\x72\x63\xf3\xd1"
4864 "\x64\x4e\xdf\xfc\x27\x92\x37\x0d"
4865 "\x57\xcd\x11\x4f\x11\x04\x8e\x1d"
4866 "\x16\xf7\xcd\x92\x9a\x99\x30\x14"
4867 "\xf1\x7c\x67\x1b\x1f\x41\x0b\xe8"
4868 "\x32\xe8\xb8\xc1\x4f\x54\x86\x4f"
4869 "\xe5\x79\x81\x73\xcd\x43\x59\x68"
4870 "\x73\x02\x3b\x78\x21\x72\x43\x00"
4871 "\x49\x17\xf7\x00\xaf\x68\x24\x53"
4872 "\x05\x0a\xc3\x33\xe0\x33\x3f\x69"
4873 "\xd2\x84\x2f\x0b\xed\xde\x04\xf4"
4874 "\x11\x94\x13\x69\x51\x09\x28\xde"
4875 "\x57\x5c\xef\xdc\x9a\x49\x1c\x17"
4876 "\x97\xf3\x96\xc1\x7f\x5d\x2e\x7d"
4877 "\x55\xb8\xb3\x02\x09\xb3\x1f\xe7"
4878 "\xc9\x8d\xa3\x36\x34\x8a\x77\x13"
4879 "\x30\x63\x4c\xa5\xcd\xc3\xe0\x7e"
4880 "\x05\xa1\x7b\x0c\xcb\x74\x47\x31"
4881 "\x62\x03\x43\xf1\x87\xb4\xb0\x85"
4882 "\x87\x8e\x4b\x25\xc7\xcf\xae\x4b"
4883 "\x36\x46\x3e\x62\xbc\x6f\xeb\x5f"
4884 "\x73\xac\xe6\x07\xee\xc1\xa1\xd6"
4885 "\xc4\xab\xc9\xd6\x89\x45\xe1\xf1"
4886 "\x04\x4e\x1a\x6f\xbb\x4f\x3a\xa3"
4887 "\xa0\xcb\xa3\x0a\xd8\x71\x35\x55"
4888 "\xe4\xbc\x2e\x04\x06\xe6\xff\x5b"
4889 "\x1c\xc0\x11\x7c\xc5\x17\xf3\x38"
4890 "\xcf\xe9\xba\x0f\x0e\xef\x02\xc2"
4891 "\x8d\xc6\xbc\x4b\x67\x20\x95\xd7"
4892 "\x2c\x45\x5b\x86\x44\x8c\x6f\x2e"
4893 "\x7e\x9f\x1c\x77\xba\x6b\x0e\xa3"
4894 "\x69\xdc\xab\x24\x57\x60\x47\xc1"
4895 "\xd1\xa5\x9d\x23\xe6\xb1\x37\xfe"
4896 "\x93\xd2\x4c\x46\xf9\x0c\xc6\xfb"
4897 "\xd6\x9d\x99\x69\xab\x7a\x07\x0c"
4898 "\x65\xe7\xc4\x08\x96\xe2\xa5\x01"
4899 "\x3f\x46\x07\x05\x7e\xe8\x9a\x90"
4900 "\x50\xdc\xe9\x7a\xea\xa1\x39\x6e"
4901 "\x66\xe4\x6f\xa5\x5f\xb2\xd9\x5b"
4902 "\xf5\xdb\x2a\x32\xf0\x11\x6f\x7c"
4903 "\x26\x10\x8f\x3d\x80\xe9\x58\xf7"
4904 "\xe0\xa8\x57\xf8\xdb\x0e\xce\x99"
4905 "\x63\x19\x3d\xd5\xec\x1b\x77\x69"
4906 "\x98\xf6\xe4\x5f\x67\x17\x4b\x09"
4907 "\x85\x62\x82\x70\x18\xe2\x9a\x78"
4908 "\xe2\x62\xbd\xb4\xf1\x42\xc6\xfb"
4909 "\x08\xd0\xbd\xeb\x4e\x09\xf2\xc8"
4910 "\x1e\xdc\x3d\x32\x21\x56\x9c\x4f"
4911 "\x35\xf3\x61\x06\x72\x84\xc4\x32"
4912 "\xf2\xf1\xfa\x0b\x2f\xc3\xdb\x02"
4913 "\x04\xc2\xde\x57\x64\x60\x8d\xcf"
4914 "\xcb\x86\x5d\x97\x3e\xb1\x9c\x01"
4915 "\xd6\x28\x8f\x99\xbc\x46\xeb\x05"
4916 "\xaf\x7e\xb8\x21\x2a\x56\x85\x1c"
4917 "\xb3\x71\xa0\xde\xca\x96\xf1\x78"
4918 "\x49\xa2\x99\x81\x80\x5c\x01\xf5"
4919 "\xa0\xa2\x56\x63\xe2\x70\x07\xa5"
4920 "\x95\xd6\x85\xeb\x36\x9e\xa9\x51"
4921 "\x66\x56\x5f\x1d\x02\x19\xe2\xf6"
4922 "\x4f\x73\x38\x09\x75\x64\x48\xe0"
4923 "\xf1\x7e\x0e\xe8\x9d\xf9\xed\x94"
4924 "\xfe\x16\x26\x62\x49\x74\xf4\xb0"
4925 "\xd4\xa9\x6c\xb0\xfd\x53\xe9\x81"
4926 "\xe0\x7a\xbf\xcf\xb5\xc4\x01\x81"
4927 "\x79\x99\x77\x01\x3b\xe9\xa2\xb6"
4928 "\xe6\x6a\x8a\x9e\x56\x1c\x8d\x1e"
4929 "\x8f\x06\x55\x2c\x6c\xdc\x92\x87"
4930 "\x64\x3b\x4b\x19\xa1\x13\x64\x1d"
4931 "\x4a\xe9\xc0\x00\xb8\x95\xef\x6b"
4932 "\x1a\x86\x6d\x37\x52\x02\xc2\xe0"
4933 "\xc8\xbb\x42\x0c\x02\x21\x4a\xc9"
4934 "\xef\xa0\x54\xe4\x5e\x16\x53\x81"
4935 "\x70\x62\x10\xaf\xde\xb8\xb5\xd3"
4936 "\xe8\x5e\x6c\xc3\x8a\x3e\x18\x07"
4937 "\xf2\x2f\x7d\xa7\xe1\x3d\x4e\xb4"
4938 "\x26\xa7\xa3\x93\x86\xb2\x04\x1e"
4939 "\x53\x5d\x86\xd6\xde\x65\xca\xe3"
4940 "\x4e\xc1\xcf\xef\xc8\x70\x1b\x83"
4941 "\x13\xdd\x18\x8b\x0d\x76\xd2\xf6"
4942 "\x37\x7a\x93\x7a\x50\x11\x9f\x96"
4943 "\x86\x25\xfd\xac\xdc\xbe\x18\x93"
4944 "\x19\x6b\xec\x58\x4f\xb9\x75\xa7"
4945 "\xdd\x3f\x2f\xec\xc8\x5a\x84\xab"
4946 "\xd5\xe4\x8a\x07\xf6\x4d\x23\xd6"
4947 "\x03\xfb\x03\x6a\xea\x66\xbf\xd4"
4948 "\xb1\x34\xfb\x78\xe9\x55\xdc\x7c"
4949 "\x3d\x9c\xe5\x9a\xac\xc3\x7a\x80"
4950 "\x24\x6d\xa0\xef\x25\x7c\xb7\xea"
4951 "\xce\x4d\x5f\x18\x60\xce\x87\x22"
4952 "\x66\x2f\xd5\xdd\xdd\x02\x21\x75"
4953 "\x82\xa0\x1f\x58\xc6\xd3\x62\xf7"
4954 "\x32\xd8\xaf\x1e\x07\x77\x51\x96"
4955 "\xd5\x6b\x1e\x7e\x80\x02\xe8\x67"
4956 "\xea\x17\x0b\x10\xd2\x3f\x28\x25"
4957 "\x4f\x05\x77\x02\x14\x69\xf0\x2c"
4958 "\xbe\x0c\xf1\x74\x30\xd1\xb9\x9b"
4959 "\xfc\x8c\xbb\x04\x16\xd9\xba\xc3"
4960 "\xbc\x91\x8a\xc4\x30\xa4\xb0\x12"
4961 "\x4c\x21\x87\xcb\xc9\x1d\x16\x96"
4962 "\x07\x6f\x23\x54\xb9\x6f\x79\xe5"
4963 "\x64\xc0\x64\xda\xb1\xae\xdd\x60"
4964 "\x6c\x1a\x9d\xd3\x04\x8e\x45\xb0"
4965 "\x92\x61\xd0\x48\x81\xed\x5e\x1d"
4966 "\xa0\xc9\xa4\x33\xc7\x13\x51\x5d"
4967 "\x7f\x83\x73\xb6\x70\x18\x65\x3e"
4968 "\x2f\x0e\x7a\x12\x39\x98\xab\xd8"
4969 "\x7e\x6f\xa3\xd1\xba\x56\xad\xbd"
4970 "\xf0\x03\x01\x1c\x85\x35\x9f\xeb"
4971 "\x19\x63\xa1\xaf\xfe\x2d\x35\x50"
4972 "\x39\xa0\x65\x7c\x95\x7e\x6b\xfe"
4973 "\xc1\xac\x07\x7c\x98\x4f\xbe\x57"
4974 "\xa7\x22\xec\xe2\x7e\x29\x09\x53"
4975 "\xe8\xbf\xb4\x7e\x3f\x8f\xfc\x14"
4976 "\xce\x54\xf9\x18\x58\xb5\xff\x44"
4977 "\x05\x9d\xce\x1b\xb6\x82\x23\xc8"
4978 "\x2e\xbc\x69\xbb\x4a\x29\x0f\x65"
4979 "\x94\xf0\x63\x06\x0e\xef\x8c\xbd"
4980 "\xff\xfd\xb0\x21\x6e\x57\x05\x75"
4981 "\xda\xd5\xc4\xeb\x8d\x32\xf7\x50"
4982 "\xd3\x6f\x22\xed\x5f\x8e\xa2\x5b"
4983 "\x80\x8c\xc8\x78\x40\x24\x4b\x89"
4984 "\x30\xce\x7a\x97\x0e\xc4\xaf\xef"
4985 "\x9b\xb4\xcd\x66\x74\x14\x04\x2b"
4986 "\xf7\xce\x0b\x1c\x6e\xc2\x78\x8c"
4987 "\xca\xc5\xd0\x1c\x95\x4a\x91\x2d"
4988 "\xa7\x20\xeb\x86\x52\xb7\x67\xd8"
4989 "\x0c\xd6\x04\x14\xde\x51\x74\x75"
4990 "\xe7\x11\xb4\x87\xa3\x3d\x2d\xad"
4991 "\x4f\xef\xa0\x0f\x70\x00\x6d\x13"
4992 "\x19\x1d\x41\x50\xe9\xd8\xf0\x32"
4993 "\x71\xbc\xd3\x11\xf2\xac\xbe\xaf"
4994 "\x75\x46\x65\x4e\x07\x34\x37\xa3"
4995 "\x89\xfe\x75\xd4\x70\x4c\xc6\x3f"
4996 "\x69\x24\x0e\x38\x67\x43\x8c\xde"
4997 "\x06\xb5\xb8\xe7\xc4\xf0\x41\x8f"
4998 "\xf0\xbd\x2f\x0b\xb9\x18\xf8\xde"
4999 "\x64\xb1\xdb\xee\x00\x50\x77\xe1"
5000 "\xc7\xff\xa6\xfa\xdd\x70\xf4\xe3"
5001 "\x93\xe9\x77\x35\x3d\x4b\x2f\x2b"
5002 "\x6d\x55\xf0\xfc\x88\x54\x4e\x89"
5003 "\xc1\x8a\x23\x31\x2d\x14\x2a\xb8"
5004 "\x1b\x15\xdd\x9e\x6e\x7b\xda\x05"
5005 "\x91\x7d\x62\x64\x96\x72\xde\xfc"
5006 "\xc1\xec\xf0\x23\x51\x6f\xdb\x5b"
5007 "\x1d\x08\x57\xce\x09\xb8\xf6\xcd"
5008 "\x8d\x95\xf2\x20\xbf\x0f\x20\x57"
5009 "\x98\x81\x84\x4f\x15\x5c\x76\xe7"
5010 "\x3e\x0a\x3a\x6c\xc4\x8a\xbe\x78"
5011 "\x74\x77\xc3\x09\x4b\x5d\x48\xe4"
5012 "\xc8\xcb\x0b\xea\x17\x28\xcf\xcf"
5013 "\x31\x32\x44\xa4\xe5\x0e\x1a\x98"
5014 "\x94\xc4\xf0\xff\xae\x3e\x44\xe8"
5015 "\xa5\xb3\xb5\x37\x2f\xe8\xaf\x6f"
5016 "\x28\xc1\x37\x5f\x31\xd2\xb9\x33"
5017 "\xb1\xb2\x52\x94\x75\x2c\x29\x59"
5018 "\x06\xc2\x25\xe8\x71\x65\x4e\xed"
5019 "\xc0\x9c\xb1\xbb\x25\xdc\x6c\xe7"
5020 "\x4b\xa5\x7a\x54\x7a\x60\xff\x7a"
5021 "\xe0\x50\x40\x96\x35\x63\xe4\x0b"
5022 "\x76\xbd\xa4\x65\x00\x1b\x57\x88"
5023 "\xae\xed\x39\x88\x42\x11\x3c\xed"
5024 "\x85\x67\x7d\xb9\x68\x82\xe9\x43"
5025 "\x3c\x47\x53\xfa\xe8\xf8\x9f\x1f"
5026 "\x9f\xef\x0f\xf7\x30\xd9\x30\x0e"
5027 "\xb9\x9f\x69\x18\x2f\x7e\xf8\xf8"
5028 "\xf8\x8c\x0f\xd4\x02\x4d\xea\xcd"
5029 "\x0a\x9c\x6f\x71\x6d\x5a\x4c\x60"
5030 "\xce\x20\x56\x32\xc6\xc5\x99\x1f"
5031 "\x09\xe6\x4e\x18\x1a\x15\x13\xa8"
5032 "\x7d\xb1\x6b\xc0\xb2\x6d\xf8\x26"
5033 "\x66\xf8\x3d\x18\x74\x70\x66\x7a"
5034 "\x34\x17\xde\xba\x47\xf1\x06\x18"
5035 "\xcb\xaf\xeb\x4a\x1e\x8f\xa7\x77"
5036 "\xe0\x3b\x78\x62\x66\xc9\x10\xea"
5037 "\x1f\xb7\x29\x0a\x45\xa1\x1d\x1e"
5038 "\x1d\xe2\x65\x61\x50\x9c\xd7\x05"
5039 "\xf2\x0b\x5b\x12\x61\x02\xc8\xe5"
5040 "\x63\x4f\x20\x0c\x07\x17\x33\x5e"
5041 "\x03\x9a\x53\x0f\x2e\x55\xfe\x50"
5042 "\x43\x7d\xd0\xb6\x7e\x5a\xda\xae"
5043 "\x58\xef\x15\xa9\x83\xd9\x46\xb1"
5044 "\x42\xaa\xf5\x02\x6c\xce\x92\x06"
5045 "\x1b\xdb\x66\x45\x91\x79\xc2\x2d"
5046 "\xe6\x53\xd3\x14\xfd\xbb\x44\x63"
5047 "\xc6\xd7\x3d\x7a\x0c\x75\x78\x9d"
5048 "\x5c\xa6\x39\xb3\xe5\x63\xca\x8b"
5049 "\xfe\xd3\xef\x60\x83\xf6\x8e\x70"
5050 "\xb6\x67\xc7\x77\xed\x23\xef\x4c"
5051 "\xf0\xed\x2d\x07\x59\x6f\xc1\x01"
5052 "\x34\x37\x08\xab\xd9\x1f\x09\xb1"
5053 "\xce\x5b\x17\xff\x74\xf8\x9c\xd5"
5054 "\x2c\x56\x39\x79\x0f\x69\x44\x75"
5055 "\x58\x27\x01\xc4\xbf\xa7\xa1\x1d"
5056 "\x90\x17\x77\x86\x5a\x3f\xd9\xd1"
5057 "\x0e\xa0\x10\xf8\xec\x1e\xa5\x7f"
5058 "\x5e\x36\xd1\xe3\x04\x2c\x70\xf7"
5059 "\x8e\xc0\x98\x2f\x6c\x94\x2b\x41"
5060 "\xb7\x60\x00\xb7\x2e\xb8\x02\x8d"
5061 "\xb8\xb0\xd3\x86\xba\x1d\xd7\x90"
5062 "\xd6\xb6\xe1\xfc\xd7\xd8\x28\x06"
5063 "\x63\x9b\xce\x61\x24\x79\xc0\x70"
5064 "\x52\xd0\xb6\xd4\x28\x95\x24\x87"
5065 "\x03\x1f\xb7\x9a\xda\xa3\xfb\x52"
5066 "\x5b\x68\xe7\x4c\x8c\x24\xe1\x42"
5067 "\xf7\xd5\xfd\xad\x06\x32\x9f\xba"
5068 "\xc1\xfc\xdd\xc6\xfc\xfc\xb3\x38"
5069 "\x74\x56\x58\x40\x02\x37\x52\x2c"
5070 "\x55\xcc\xb3\x9e\x7a\xe9\xd4\x38"
5071 "\x41\x5e\x0c\x35\xe2\x11\xd1\x13"
5072 "\xf8\xb7\x8d\x72\x6b\x22\x2a\xb0"
5073 "\xdb\x08\xba\x35\xb9\x3f\xc8\xd3"
5074 "\x24\x90\xec\x58\xd2\x09\xc7\x2d"
5075 "\xed\x38\x80\x36\x72\x43\x27\x49"
5076 "\x4a\x80\x8a\xa2\xe8\xd3\xda\x30"
5077 "\x7d\xb6\x82\x37\x86\x92\x86\x3e"
5078 "\x08\xb2\x28\x5a\x55\x44\x24\x7d"
5079 "\x40\x48\x8a\xb6\x89\x58\x08\xa0"
5080 "\xd6\x6d\x3a\x17\xbf\xf6\x54\xa2"
5081 "\xf5\xd3\x8c\x0f\x78\x12\x57\x8b"
5082 "\xd5\xc2\xfd\x58\x5b\x7f\x38\xe3"
5083 "\xcc\xb7\x7c\x48\xb3\x20\xe8\x81"
5084 "\x14\x32\x45\x05\xe0\xdb\x9f\x75"
5085 "\x85\xb4\x6a\xfc\x95\xe3\x54\x22"
5086 "\x12\xee\x30\xfe\xd8\x30\xef\x34"
5087 "\x50\xab\x46\x30\x98\x2f\xb7\xc0"
5088 "\x15\xa2\x83\xb6\xf2\x06\x21\xa2"
5089 "\xc3\x26\x37\x14\xd1\x4d\xb5\x10"
5090 "\x52\x76\x4d\x6a\xee\xb5\x2b\x15"
5091 "\xb7\xf9\x51\xe8\x2a\xaf\xc7\xfa"
5092 "\x77\xaf\xb0\x05\x4d\xd1\x68\x8e"
5093 "\x74\x05\x9f\x9d\x93\xa5\x3e\x7f"
5094 "\x4e\x5f\x9d\xcb\x09\xc7\x83\xe3"
5095 "\x02\x9d\x27\x1f\xef\x85\x05\x8d"
5096 "\xec\x55\x88\x0f\x0d\x7c\x4c\xe8"
5097 "\xa1\x75\xa0\xd8\x06\x47\x14\xef"
5098 "\xaa\x61\xcf\x26\x15\xad\xd8\xa3"
5099 "\xaa\x75\xf2\x78\x4a\x5a\x61\xdf"
5100 "\x8b\xc7\x04\xbc\xb2\x32\xd2\x7e"
5101 "\x42\xee\xb4\x2f\x51\xff\x7b\x2e"
5102 "\xd3\x02\xe8\xdc\x5d\x0d\x50\xdc"
5103 "\xae\xb7\x46\xf9\xa8\xe6\xd0\x16"
5104 "\xcc\xe6\x2c\x81\xc7\xad\xe9\xf0"
5105 "\x05\x72\x6d\x3d\x0a\x7a\xa9\x02"
5106 "\xac\x82\x93\x6e\xb6\x1c\x28\xfc"
5107 "\x44\x12\xfb\x73\x77\xd4\x13\x39"
5108 "\x29\x88\x8a\xf3\x5c\xa6\x36\xa0"
5109 "\x2a\xed\x7e\xb1\x1d\xd6\x4c\x6b"
5110 "\x41\x01\x18\x5d\x5d\x07\x97\xa6"
5111 "\x4b\xef\x31\x18\xea\xac\xb1\x84"
5112 "\x21\xed\xda\x86",
5113 .rlen = 4100,
5114 },
5115};
5116
5117static struct cipher_testvec aes_ctr_dec_tv_template[] = {
5118 { /* From RFC 3686 */
5119 .key = "\xae\x68\x52\xf8\x12\x10\x67\xcc"
5120 "\x4b\xf7\xa5\x76\x55\x77\xf3\x9e"
5121 "\x00\x00\x00\x30",
5122 .klen = 20,
5123 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
5124 .input = "\xe4\x09\x5d\x4f\xb7\xa7\xb3\x79"
5125 "\x2d\x61\x75\xa3\x26\x13\x11\xb8",
5126 .ilen = 16,
5127 .result = "Single block msg",
5128 .rlen = 16,
5129 }, {
5130 .key = "\x7e\x24\x06\x78\x17\xfa\xe0\xd7"
5131 "\x43\xd6\xce\x1f\x32\x53\x91\x63"
5132 "\x00\x6c\xb6\xdb",
5133 .klen = 20,
5134 .iv = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
5135 .input = "\x51\x04\xa1\x06\x16\x8a\x72\xd9"
5136 "\x79\x0d\x41\xee\x8e\xda\xd3\x88"
5137 "\xeb\x2e\x1e\xfc\x46\xda\x57\xc8"
5138 "\xfc\xe6\x30\xdf\x91\x41\xbe\x28",
5139 .ilen = 32,
5140 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5141 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5142 "\x10\x11\x12\x13\x14\x15\x16\x17"
5143 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5144 .rlen = 32,
5145 }, {
5146 .key = "\x16\xaf\x5b\x14\x5f\xc9\xf5\x79"
5147 "\xc1\x75\xf9\x3e\x3b\xfb\x0e\xed"
5148 "\x86\x3d\x06\xcc\xfd\xb7\x85\x15"
5149 "\x00\x00\x00\x48",
5150 .klen = 28,
5151 .iv = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
5152 .input = "\x4b\x55\x38\x4f\xe2\x59\xc9\xc8"
5153 "\x4e\x79\x35\xa0\x03\xcb\xe9\x28",
5154 .ilen = 16,
5155 .result = "Single block msg",
5156 .rlen = 16,
5157 }, {
5158 .key = "\x7c\x5c\xb2\x40\x1b\x3d\xc3\x3c"
5159 "\x19\xe7\x34\x08\x19\xe0\xf6\x9c"
5160 "\x67\x8c\x3d\xb8\xe6\xf6\xa9\x1a"
5161 "\x00\x96\xb0\x3b",
5162 .klen = 28,
5163 .iv = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
5164 .input = "\x45\x32\x43\xfc\x60\x9b\x23\x32"
5165 "\x7e\xdf\xaa\xfa\x71\x31\xcd\x9f"
5166 "\x84\x90\x70\x1c\x5a\xd4\xa7\x9c"
5167 "\xfc\x1f\xe0\xff\x42\xf4\xfb\x00",
5168 .ilen = 32,
5169 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5170 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5171 "\x10\x11\x12\x13\x14\x15\x16\x17"
5172 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5173 .rlen = 32,
5174 }, {
5175 .key = "\x77\x6b\xef\xf2\x85\x1d\xb0\x6f"
5176 "\x4c\x8a\x05\x42\xc8\x69\x6f\x6c"
5177 "\x6a\x81\xaf\x1e\xec\x96\xb4\xd3"
5178 "\x7f\xc1\xd6\x89\xe6\xc1\xc1\x04"
5179 "\x00\x00\x00\x60",
5180 .klen = 36,
5181 .iv = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
5182 .input = "\x14\x5a\xd0\x1d\xbf\x82\x4e\xc7"
5183 "\x56\x08\x63\xdc\x71\xe3\xe0\xc0",
5184 .ilen = 16,
5185 .result = "Single block msg",
5186 .rlen = 16,
5187 }, {
5188 .key = "\xf6\xd6\x6d\x6b\xd5\x2d\x59\xbb"
5189 "\x07\x96\x36\x58\x79\xef\xf8\x86"
5190 "\xc6\x6d\xd5\x1a\x5b\x6a\x99\x74"
5191 "\x4b\x50\x59\x0c\x87\xa2\x38\x84"
5192 "\x00\xfa\xac\x24",
5193 .klen = 36,
5194 .iv = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
5195 .input = "\xf0\x5e\x23\x1b\x38\x94\x61\x2c"
5196 "\x49\xee\x00\x0b\x80\x4e\xb2\xa9"
5197 "\xb8\x30\x6b\x50\x8f\x83\x9d\x6a"
5198 "\x55\x30\x83\x1d\x93\x44\xaf\x1c",
5199 .ilen = 32,
5200 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5201 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5202 "\x10\x11\x12\x13\x14\x15\x16\x17"
5203 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5204 .rlen = 32,
5205 },
5206};
5207
5208static struct aead_testvec aes_gcm_enc_tv_template[] = {
5209 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
5210 .key = zeroed_string,
5211 .klen = 16,
5212 .result = "\x58\xe2\xfc\xce\xfa\x7e\x30\x61"
5213 "\x36\x7f\x1d\x57\xa4\xe7\x45\x5a",
5214 .rlen = 16,
5215 }, {
5216 .key = zeroed_string,
5217 .klen = 16,
5218 .input = zeroed_string,
5219 .ilen = 16,
5220 .result = "\x03\x88\xda\xce\x60\xb6\xa3\x92"
5221 "\xf3\x28\xc2\xb9\x71\xb2\xfe\x78"
5222 "\xab\x6e\x47\xd4\x2c\xec\x13\xbd"
5223 "\xf5\x3a\x67\xb2\x12\x57\xbd\xdf",
5224 .rlen = 32,
5225 }, {
5226 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5227 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5228 .klen = 16,
5229 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5230 "\xde\xca\xf8\x88",
5231 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5232 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5233 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5234 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5235 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5236 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5237 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5238 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5239 .ilen = 64,
5240 .result = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5241 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5242 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5243 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5244 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5245 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5246 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5247 "\x3d\x58\xe0\x91\x47\x3f\x59\x85"
5248 "\x4d\x5c\x2a\xf3\x27\xcd\x64\xa6"
5249 "\x2c\xf3\x5a\xbd\x2b\xa6\xfa\xb4",
5250 .rlen = 80,
5251 }, {
5252 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5253 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5254 .klen = 16,
5255 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5256 "\xde\xca\xf8\x88",
5257 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5258 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5259 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5260 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5261 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5262 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5263 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5264 "\xba\x63\x7b\x39",
5265 .ilen = 60,
5266 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5267 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5268 "\xab\xad\xda\xd2",
5269 .alen = 20,
5270 .result = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5271 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5272 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5273 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5274 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5275 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5276 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5277 "\x3d\x58\xe0\x91"
5278 "\x5b\xc9\x4f\xbc\x32\x21\xa5\xdb"
5279 "\x94\xfa\xe9\x5a\xe7\x12\x1a\x47",
5280 .rlen = 76,
5281 }, {
5282 .key = zeroed_string,
5283 .klen = 24,
5284 .result = "\xcd\x33\xb2\x8a\xc7\x73\xf7\x4b"
5285 "\xa0\x0e\xd1\xf3\x12\x57\x24\x35",
5286 .rlen = 16,
5287 }, {
5288 .key = zeroed_string,
5289 .klen = 24,
5290 .input = zeroed_string,
5291 .ilen = 16,
5292 .result = "\x98\xe7\x24\x7c\x07\xf0\xfe\x41"
5293 "\x1c\x26\x7e\x43\x84\xb0\xf6\x00"
5294 "\x2f\xf5\x8d\x80\x03\x39\x27\xab"
5295 "\x8e\xf4\xd4\x58\x75\x14\xf0\xfb",
5296 .rlen = 32,
5297 }, {
5298 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5299 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5300 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5301 .klen = 24,
5302 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5303 "\xde\xca\xf8\x88",
5304 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5305 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5306 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5307 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5308 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5309 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5310 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5311 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5312 .ilen = 64,
5313 .result = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5314 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5315 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5316 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5317 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5318 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5319 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5320 "\xcc\xda\x27\x10\xac\xad\xe2\x56"
5321 "\x99\x24\xa7\xc8\x58\x73\x36\xbf"
5322 "\xb1\x18\x02\x4d\xb8\x67\x4a\x14",
5323 .rlen = 80,
5324 }, {
5325 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5326 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5327 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5328 .klen = 24,
5329 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5330 "\xde\xca\xf8\x88",
5331 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5332 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5333 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5334 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5335 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5336 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5337 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5338 "\xba\x63\x7b\x39",
5339 .ilen = 60,
5340 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5341 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5342 "\xab\xad\xda\xd2",
5343 .alen = 20,
5344 .result = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5345 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5346 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5347 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5348 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5349 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5350 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5351 "\xcc\xda\x27\x10"
5352 "\x25\x19\x49\x8e\x80\xf1\x47\x8f"
5353 "\x37\xba\x55\xbd\x6d\x27\x61\x8c",
5354 .rlen = 76,
5355 .np = 2,
5356 .tap = { 32, 28 },
5357 .anp = 2,
5358 .atap = { 8, 12 }
5359 }, {
5360 .key = zeroed_string,
5361 .klen = 32,
5362 .result = "\x53\x0f\x8a\xfb\xc7\x45\x36\xb9"
5363 "\xa9\x63\xb4\xf1\xc4\xcb\x73\x8b",
5364 .rlen = 16,
5365 }
5366};
5367
5368static struct aead_testvec aes_gcm_dec_tv_template[] = {
5369 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
5370 .key = zeroed_string,
5371 .klen = 32,
5372 .input = "\xce\xa7\x40\x3d\x4d\x60\x6b\x6e"
5373 "\x07\x4e\xc5\xd3\xba\xf3\x9d\x18"
5374 "\xd0\xd1\xc8\xa7\x99\x99\x6b\xf0"
5375 "\x26\x5b\x98\xb5\xd4\x8a\xb9\x19",
5376 .ilen = 32,
5377 .result = zeroed_string,
5378 .rlen = 16,
5379 }, {
5380 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5381 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5382 "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5383 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5384 .klen = 32,
5385 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5386 "\xde\xca\xf8\x88",
5387 .input = "\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
5388 "\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
5389 "\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
5390 "\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
5391 "\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
5392 "\xa7\xb0\x8b\x10\x56\x82\x88\x38"
5393 "\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
5394 "\xbc\xc9\xf6\x62\x89\x80\x15\xad"
5395 "\xb0\x94\xda\xc5\xd9\x34\x71\xbd"
5396 "\xec\x1a\x50\x22\x70\xe3\xcc\x6c",
5397 .ilen = 80,
5398 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5399 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5400 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5401 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5402 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5403 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5404 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5405 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5406 .rlen = 64,
5407 }, {
5408 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5409 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5410 "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5411 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5412 .klen = 32,
5413 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5414 "\xde\xca\xf8\x88",
5415 .input = "\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
5416 "\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
5417 "\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
5418 "\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
5419 "\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
5420 "\xa7\xb0\x8b\x10\x56\x82\x88\x38"
5421 "\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
5422 "\xbc\xc9\xf6\x62"
5423 "\x76\xfc\x6e\xce\x0f\x4e\x17\x68"
5424 "\xcd\xdf\x88\x53\xbb\x2d\x55\x1b",
5425 .ilen = 76,
5426 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5427 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5428 "\xab\xad\xda\xd2",
5429 .alen = 20,
5430 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5431 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5432 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5433 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5434 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5435 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5436 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5437 "\xba\x63\x7b\x39",
5438 .rlen = 60,
5439 .np = 2,
5440 .tap = { 48, 28 },
5441 .anp = 3,
5442 .atap = { 8, 8, 4 }
5443 }, {
5444 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5445 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5446 .klen = 16,
5447 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5448 "\xde\xca\xf8\x88",
5449 .input = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5450 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5451 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5452 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5453 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5454 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5455 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5456 "\x3d\x58\xe0\x91\x47\x3f\x59\x85"
5457 "\x4d\x5c\x2a\xf3\x27\xcd\x64\xa6"
5458 "\x2c\xf3\x5a\xbd\x2b\xa6\xfa\xb4",
5459 .ilen = 80,
5460 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5461 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5462 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5463 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5464 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5465 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5466 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5467 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5468 .rlen = 64,
5469 }, {
5470 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5471 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5472 .klen = 16,
5473 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5474 "\xde\xca\xf8\x88",
5475 .input = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5476 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5477 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5478 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5479 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5480 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5481 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5482 "\x3d\x58\xe0\x91"
5483 "\x5b\xc9\x4f\xbc\x32\x21\xa5\xdb"
5484 "\x94\xfa\xe9\x5a\xe7\x12\x1a\x47",
5485 .ilen = 76,
5486 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5487 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5488 "\xab\xad\xda\xd2",
5489 .alen = 20,
5490 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5491 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5492 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5493 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5494 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5495 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5496 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5497 "\xba\x63\x7b\x39",
5498 .rlen = 60,
5499 }, {
5500 .key = zeroed_string,
5501 .klen = 24,
5502 .input = "\x98\xe7\x24\x7c\x07\xf0\xfe\x41"
5503 "\x1c\x26\x7e\x43\x84\xb0\xf6\x00"
5504 "\x2f\xf5\x8d\x80\x03\x39\x27\xab"
5505 "\x8e\xf4\xd4\x58\x75\x14\xf0\xfb",
5506 .ilen = 32,
5507 .result = zeroed_string,
5508 .rlen = 16,
5509 }, {
5510 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5511 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5512 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5513 .klen = 24,
5514 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5515 "\xde\xca\xf8\x88",
5516 .input = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5517 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5518 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5519 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5520 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5521 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5522 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5523 "\xcc\xda\x27\x10\xac\xad\xe2\x56"
5524 "\x99\x24\xa7\xc8\x58\x73\x36\xbf"
5525 "\xb1\x18\x02\x4d\xb8\x67\x4a\x14",
5526 .ilen = 80,
5527 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5528 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5529 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5530 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5531 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5532 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5533 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5534 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5535 .rlen = 64,
5536 }, {
5537 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5538 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5539 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5540 .klen = 24,
5541 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5542 "\xde\xca\xf8\x88",
5543 .input = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5544 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5545 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5546 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5547 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5548 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5549 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5550 "\xcc\xda\x27\x10"
5551 "\x25\x19\x49\x8e\x80\xf1\x47\x8f"
5552 "\x37\xba\x55\xbd\x6d\x27\x61\x8c",
5553 .ilen = 76,
5554 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5555 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5556 "\xab\xad\xda\xd2",
5557 .alen = 20,
5558 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5559 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5560 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5561 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5562 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5563 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5564 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5565 "\xba\x63\x7b\x39",
5566 .rlen = 60,
5567 }
5568};
5569
5570static struct aead_testvec aes_ccm_enc_tv_template[] = {
5571 { /* From RFC 3610 */
5572 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5573 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5574 .klen = 16,
5575 .iv = "\x01\x00\x00\x00\x03\x02\x01\x00"
5576 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5577 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5578 .alen = 8,
5579 .input = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5580 "\x10\x11\x12\x13\x14\x15\x16\x17"
5581 "\x18\x19\x1a\x1b\x1c\x1d\x1e",
5582 .ilen = 23,
5583 .result = "\x58\x8c\x97\x9a\x61\xc6\x63\xd2"
5584 "\xf0\x66\xd0\xc2\xc0\xf9\x89\x80"
5585 "\x6d\x5f\x6b\x61\xda\xc3\x84\x17"
5586 "\xe8\xd1\x2c\xfd\xf9\x26\xe0",
5587 .rlen = 31,
5588 }, {
5589 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5590 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5591 .klen = 16,
5592 .iv = "\x01\x00\x00\x00\x07\x06\x05\x04"
5593 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5594 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5595 "\x08\x09\x0a\x0b",
5596 .alen = 12,
5597 .input = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5598 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5599 "\x1c\x1d\x1e\x1f",
5600 .ilen = 20,
5601 .result = "\xdc\xf1\xfb\x7b\x5d\x9e\x23\xfb"
5602 "\x9d\x4e\x13\x12\x53\x65\x8a\xd8"
5603 "\x6e\xbd\xca\x3e\x51\xe8\x3f\x07"
5604 "\x7d\x9c\x2d\x93",
5605 .rlen = 28,
5606 }, {
5607 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5608 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5609 .klen = 16,
5610 .iv = "\x01\x00\x00\x00\x0b\x0a\x09\x08"
5611 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5612 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5613 .alen = 8,
5614 .input = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5615 "\x10\x11\x12\x13\x14\x15\x16\x17"
5616 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
5617 "\x20",
5618 .ilen = 25,
5619 .result = "\x82\x53\x1a\x60\xcc\x24\x94\x5a"
5620 "\x4b\x82\x79\x18\x1a\xb5\xc8\x4d"
5621 "\xf2\x1c\xe7\xf9\xb7\x3f\x42\xe1"
5622 "\x97\xea\x9c\x07\xe5\x6b\x5e\xb1"
5623 "\x7e\x5f\x4e",
5624 .rlen = 35,
5625 }, {
5626 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5627 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5628 .klen = 16,
5629 .iv = "\x01\x00\x00\x00\x0c\x0b\x0a\x09"
5630 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5631 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5632 "\x08\x09\x0a\x0b",
5633 .alen = 12,
5634 .input = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5635 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5636 "\x1c\x1d\x1e",
5637 .ilen = 19,
5638 .result = "\x07\x34\x25\x94\x15\x77\x85\x15"
5639 "\x2b\x07\x40\x98\x33\x0a\xbb\x14"
5640 "\x1b\x94\x7b\x56\x6a\xa9\x40\x6b"
5641 "\x4d\x99\x99\x88\xdd",
5642 .rlen = 29,
5643 }, {
5644 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5645 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5646 .klen = 16,
5647 .iv = "\x01\x00\x33\x56\x8e\xf7\xb2\x63"
5648 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5649 .assoc = "\x63\x01\x8f\x76\xdc\x8a\x1b\xcb",
5650 .alen = 8,
5651 .input = "\x90\x20\xea\x6f\x91\xbd\xd8\x5a"
5652 "\xfa\x00\x39\xba\x4b\xaf\xf9\xbf"
5653 "\xb7\x9c\x70\x28\x94\x9c\xd0\xec",
5654 .ilen = 24,
5655 .result = "\x4c\xcb\x1e\x7c\xa9\x81\xbe\xfa"
5656 "\xa0\x72\x6c\x55\xd3\x78\x06\x12"
5657 "\x98\xc8\x5c\x92\x81\x4a\xbc\x33"
5658 "\xc5\x2e\xe8\x1d\x7d\x77\xc0\x8a",
5659 .rlen = 32,
5660 }, {
5661 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5662 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5663 .klen = 16,
5664 .iv = "\x01\x00\xd5\x60\x91\x2d\x3f\x70"
5665 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5666 .assoc = "\xcd\x90\x44\xd2\xb7\x1f\xdb\x81"
5667 "\x20\xea\x60\xc0",
5668 .alen = 12,
5669 .input = "\x64\x35\xac\xba\xfb\x11\xa8\x2e"
5670 "\x2f\x07\x1d\x7c\xa4\xa5\xeb\xd9"
5671 "\x3a\x80\x3b\xa8\x7f",
5672 .ilen = 21,
5673 .result = "\x00\x97\x69\xec\xab\xdf\x48\x62"
5674 "\x55\x94\xc5\x92\x51\xe6\x03\x57"
5675 "\x22\x67\x5e\x04\xc8\x47\x09\x9e"
5676 "\x5a\xe0\x70\x45\x51",
5677 .rlen = 29,
5678 }, {
5679 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5680 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5681 .klen = 16,
5682 .iv = "\x01\x00\x42\xff\xf8\xf1\x95\x1c"
5683 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5684 .assoc = "\xd8\x5b\xc7\xe6\x9f\x94\x4f\xb8",
5685 .alen = 8,
5686 .input = "\x8a\x19\xb9\x50\xbc\xf7\x1a\x01"
5687 "\x8e\x5e\x67\x01\xc9\x17\x87\x65"
5688 "\x98\x09\xd6\x7d\xbe\xdd\x18",
5689 .ilen = 23,
5690 .result = "\xbc\x21\x8d\xaa\x94\x74\x27\xb6"
5691 "\xdb\x38\x6a\x99\xac\x1a\xef\x23"
5692 "\xad\xe0\xb5\x29\x39\xcb\x6a\x63"
5693 "\x7c\xf9\xbe\xc2\x40\x88\x97\xc6"
5694 "\xba",
5695 .rlen = 33,
5696 },
5697};
5698
5699static struct aead_testvec aes_ccm_dec_tv_template[] = {
5700 { /* From RFC 3610 */
5701 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5702 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5703 .klen = 16,
5704 .iv = "\x01\x00\x00\x00\x03\x02\x01\x00"
5705 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5706 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5707 .alen = 8,
5708 .input = "\x58\x8c\x97\x9a\x61\xc6\x63\xd2"
5709 "\xf0\x66\xd0\xc2\xc0\xf9\x89\x80"
5710 "\x6d\x5f\x6b\x61\xda\xc3\x84\x17"
5711 "\xe8\xd1\x2c\xfd\xf9\x26\xe0",
5712 .ilen = 31,
5713 .result = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5714 "\x10\x11\x12\x13\x14\x15\x16\x17"
5715 "\x18\x19\x1a\x1b\x1c\x1d\x1e",
5716 .rlen = 23,
5717 }, {
5718 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5719 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5720 .klen = 16,
5721 .iv = "\x01\x00\x00\x00\x07\x06\x05\x04"
5722 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5723 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5724 "\x08\x09\x0a\x0b",
5725 .alen = 12,
5726 .input = "\xdc\xf1\xfb\x7b\x5d\x9e\x23\xfb"
5727 "\x9d\x4e\x13\x12\x53\x65\x8a\xd8"
5728 "\x6e\xbd\xca\x3e\x51\xe8\x3f\x07"
5729 "\x7d\x9c\x2d\x93",
5730 .ilen = 28,
5731 .result = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5732 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5733 "\x1c\x1d\x1e\x1f",
5734 .rlen = 20,
5735 }, {
5736 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5737 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5738 .klen = 16,
5739 .iv = "\x01\x00\x00\x00\x0b\x0a\x09\x08"
5740 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5741 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5742 .alen = 8,
5743 .input = "\x82\x53\x1a\x60\xcc\x24\x94\x5a"
5744 "\x4b\x82\x79\x18\x1a\xb5\xc8\x4d"
5745 "\xf2\x1c\xe7\xf9\xb7\x3f\x42\xe1"
5746 "\x97\xea\x9c\x07\xe5\x6b\x5e\xb1"
5747 "\x7e\x5f\x4e",
5748 .ilen = 35,
5749 .result = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5750 "\x10\x11\x12\x13\x14\x15\x16\x17"
5751 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
5752 "\x20",
5753 .rlen = 25,
5754 }, {
5755 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5756 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5757 .klen = 16,
5758 .iv = "\x01\x00\x00\x00\x0c\x0b\x0a\x09"
5759 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5760 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5761 "\x08\x09\x0a\x0b",
5762 .alen = 12,
5763 .input = "\x07\x34\x25\x94\x15\x77\x85\x15"
5764 "\x2b\x07\x40\x98\x33\x0a\xbb\x14"
5765 "\x1b\x94\x7b\x56\x6a\xa9\x40\x6b"
5766 "\x4d\x99\x99\x88\xdd",
5767 .ilen = 29,
5768 .result = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5769 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5770 "\x1c\x1d\x1e",
5771 .rlen = 19,
5772 }, {
5773 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5774 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5775 .klen = 16,
5776 .iv = "\x01\x00\x33\x56\x8e\xf7\xb2\x63"
5777 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5778 .assoc = "\x63\x01\x8f\x76\xdc\x8a\x1b\xcb",
5779 .alen = 8,
5780 .input = "\x4c\xcb\x1e\x7c\xa9\x81\xbe\xfa"
5781 "\xa0\x72\x6c\x55\xd3\x78\x06\x12"
5782 "\x98\xc8\x5c\x92\x81\x4a\xbc\x33"
5783 "\xc5\x2e\xe8\x1d\x7d\x77\xc0\x8a",
5784 .ilen = 32,
5785 .result = "\x90\x20\xea\x6f\x91\xbd\xd8\x5a"
5786 "\xfa\x00\x39\xba\x4b\xaf\xf9\xbf"
5787 "\xb7\x9c\x70\x28\x94\x9c\xd0\xec",
5788 .rlen = 24,
5789 }, {
5790 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5791 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5792 .klen = 16,
5793 .iv = "\x01\x00\xd5\x60\x91\x2d\x3f\x70"
5794 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5795 .assoc = "\xcd\x90\x44\xd2\xb7\x1f\xdb\x81"
5796 "\x20\xea\x60\xc0",
5797 .alen = 12,
5798 .input = "\x00\x97\x69\xec\xab\xdf\x48\x62"
5799 "\x55\x94\xc5\x92\x51\xe6\x03\x57"
5800 "\x22\x67\x5e\x04\xc8\x47\x09\x9e"
5801 "\x5a\xe0\x70\x45\x51",
5802 .ilen = 29,
5803 .result = "\x64\x35\xac\xba\xfb\x11\xa8\x2e"
5804 "\x2f\x07\x1d\x7c\xa4\xa5\xeb\xd9"
5805 "\x3a\x80\x3b\xa8\x7f",
5806 .rlen = 21,
5807 }, {
5808 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5809 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5810 .klen = 16,
5811 .iv = "\x01\x00\x42\xff\xf8\xf1\x95\x1c"
5812 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5813 .assoc = "\xd8\x5b\xc7\xe6\x9f\x94\x4f\xb8",
5814 .alen = 8,
5815 .input = "\xbc\x21\x8d\xaa\x94\x74\x27\xb6"
5816 "\xdb\x38\x6a\x99\xac\x1a\xef\x23"
5817 "\xad\xe0\xb5\x29\x39\xcb\x6a\x63"
5818 "\x7c\xf9\xbe\xc2\x40\x88\x97\xc6"
5819 "\xba",
5820 .ilen = 33,
5821 .result = "\x8a\x19\xb9\x50\xbc\xf7\x1a\x01"
5822 "\x8e\x5e\x67\x01\xc9\x17\x87\x65"
5823 "\x98\x09\xd6\x7d\xbe\xdd\x18",
5824 .rlen = 23,
5825 },
5826};
5827
5828/* Cast5 test vectors from RFC 2144 */
5829#define CAST5_ENC_TEST_VECTORS 3
5830#define CAST5_DEC_TEST_VECTORS 3
5831
5832static struct cipher_testvec cast5_enc_tv_template[] = {
5833 {
5834 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5835 "\x23\x45\x67\x89\x34\x56\x78\x9a",
5836 .klen = 16,
5837 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5838 .ilen = 8,
5839 .result = "\x23\x8b\x4f\xe5\x84\x7e\x44\xb2",
5840 .rlen = 8,
5841 }, {
5842 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5843 "\x23\x45",
5844 .klen = 10,
5845 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5846 .ilen = 8,
5847 .result = "\xeb\x6a\x71\x1a\x2c\x02\x27\x1b",
5848 .rlen = 8,
5849 }, {
5850 .key = "\x01\x23\x45\x67\x12",
5851 .klen = 5,
5852 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5853 .ilen = 8,
5854 .result = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e",
5855 .rlen = 8,
5856 },
5857};
5858
5859static struct cipher_testvec cast5_dec_tv_template[] = {
5860 {
5861 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5862 "\x23\x45\x67\x89\x34\x56\x78\x9a",
5863 .klen = 16,
5864 .input = "\x23\x8b\x4f\xe5\x84\x7e\x44\xb2",
5865 .ilen = 8,
5866 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5867 .rlen = 8,
5868 }, {
5869 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5870 "\x23\x45",
5871 .klen = 10,
5872 .input = "\xeb\x6a\x71\x1a\x2c\x02\x27\x1b",
5873 .ilen = 8,
5874 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5875 .rlen = 8,
5876 }, {
5877 .key = "\x01\x23\x45\x67\x12",
5878 .klen = 5,
5879 .input = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e",
5880 .ilen = 8,
5881 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5882 .rlen = 8,
5883 },
5884};
5885
5886/*
5887 * ARC4 test vectors from OpenSSL
5888 */
5889#define ARC4_ENC_TEST_VECTORS 7
5890#define ARC4_DEC_TEST_VECTORS 7
5891
5892static struct cipher_testvec arc4_enc_tv_template[] = {
5893 {
5894 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5895 .klen = 8,
5896 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5897 .ilen = 8,
5898 .result = "\x75\xb7\x87\x80\x99\xe0\xc5\x96",
5899 .rlen = 8,
5900 }, {
5901 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5902 .klen = 8,
5903 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
5904 .ilen = 8,
5905 .result = "\x74\x94\xc2\xe7\x10\x4b\x08\x79",
5906 .rlen = 8,
5907 }, {
5908 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
5909 .klen = 8,
5910 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
5911 .ilen = 8,
5912 .result = "\xde\x18\x89\x41\xa3\x37\x5d\x3a",
5913 .rlen = 8,
5914 }, {
5915 .key = "\xef\x01\x23\x45",
5916 .klen = 4,
5917 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
5918 "\x00\x00\x00\x00\x00\x00\x00\x00"
5919 "\x00\x00\x00\x00",
5920 .ilen = 20,
5921 .result = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5922 "\xbd\x61\x5a\x11\x62\xe1\xc7\xba"
5923 "\x36\xb6\x78\x58",
5924 .rlen = 20,
5925 }, {
5926 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5927 .klen = 8,
5928 .input = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5929 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5930 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5931 "\x12\x34\x56\x78",
5932 .ilen = 28,
5933 .result = "\x66\xa0\x94\x9f\x8a\xf7\xd6\x89"
5934 "\x1f\x7f\x83\x2b\xa8\x33\xc0\x0c"
5935 "\x89\x2e\xbe\x30\x14\x3c\xe2\x87"
5936 "\x40\x01\x1e\xcf",
5937 .rlen = 28,
5938 }, {
5939 .key = "\xef\x01\x23\x45",
5940 .klen = 4,
5941 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
5942 "\x00\x00",
5943 .ilen = 10,
5944 .result = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5945 "\xbd\x61",
5946 .rlen = 10,
5947 }, {
5948 .key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
5949 "\x00\x00\x00\x00\x00\x00\x00\x00",
5950 .klen = 16,
5951 .input = "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
5952 .ilen = 8,
5953 .result = "\x69\x72\x36\x59\x1B\x52\x42\xB1",
5954 .rlen = 8,
5955 },
5956};
5957
5958static struct cipher_testvec arc4_dec_tv_template[] = {
5959 {
5960 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5961 .klen = 8,
5962 .input = "\x75\xb7\x87\x80\x99\xe0\xc5\x96",
5963 .ilen = 8,
5964 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5965 .rlen = 8,
5966 }, {
5967 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5968 .klen = 8,
5969 .input = "\x74\x94\xc2\xe7\x10\x4b\x08\x79",
5970 .ilen = 8,
5971 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
5972 .rlen = 8,
5973 }, {
5974 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
5975 .klen = 8,
5976 .input = "\xde\x18\x89\x41\xa3\x37\x5d\x3a",
5977 .ilen = 8,
5978 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
5979 .rlen = 8,
5980 }, {
5981 .key = "\xef\x01\x23\x45",
5982 .klen = 4,
5983 .input = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5984 "\xbd\x61\x5a\x11\x62\xe1\xc7\xba"
5985 "\x36\xb6\x78\x58",
5986 .ilen = 20,
5987 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
5988 "\x00\x00\x00\x00\x00\x00\x00\x00"
5989 "\x00\x00\x00\x00",
5990 .rlen = 20,
5991 }, {
5992 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5993 .klen = 8,
5994 .input = "\x66\xa0\x94\x9f\x8a\xf7\xd6\x89"
5995 "\x1f\x7f\x83\x2b\xa8\x33\xc0\x0c"
5996 "\x89\x2e\xbe\x30\x14\x3c\xe2\x87"
5997 "\x40\x01\x1e\xcf",
5998 .ilen = 28,
5999 .result = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
6000 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
6001 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
6002 "\x12\x34\x56\x78",
6003 .rlen = 28,
6004 }, {
6005 .key = "\xef\x01\x23\x45",
6006 .klen = 4,
6007 .input = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
6008 "\xbd\x61",
6009 .ilen = 10,
6010 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
6011 "\x00\x00",
6012 .rlen = 10,
6013 }, {
6014 .key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
6015 "\x00\x00\x00\x00\x00\x00\x00\x00",
6016 .klen = 16,
6017 .input = "\x69\x72\x36\x59\x1B\x52\x42\xB1",
6018 .ilen = 8,
6019 .result = "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
6020 .rlen = 8,
6021 },
6022};
6023
6024/*
6025 * TEA test vectors
6026 */
6027#define TEA_ENC_TEST_VECTORS 4
6028#define TEA_DEC_TEST_VECTORS 4
6029
6030static struct cipher_testvec tea_enc_tv_template[] = {
6031 {
6032 .key = zeroed_string,
6033 .klen = 16,
6034 .input = zeroed_string,
6035 .ilen = 8,
6036 .result = "\x0a\x3a\xea\x41\x40\xa9\xba\x94",
6037 .rlen = 8,
6038 }, {
6039 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6040 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6041 .klen = 16,
6042 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6043 .ilen = 8,
6044 .result = "\x77\x5d\x2a\x6a\xf6\xce\x92\x09",
6045 .rlen = 8,
6046 }, {
6047 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6048 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6049 .klen = 16,
6050 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6051 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6052 .ilen = 16,
6053 .result = "\xbe\x7a\xbb\x81\x95\x2d\x1f\x1e"
6054 "\xdd\x89\xa1\x25\x04\x21\xdf\x95",
6055 .rlen = 16,
6056 }, {
6057 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6058 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6059 .klen = 16,
6060 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6061 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6062 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6063 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6064 .ilen = 32,
6065 .result = "\xe0\x4d\x5d\x3c\xb7\x8c\x36\x47"
6066 "\x94\x18\x95\x91\xa9\xfc\x49\xf8"
6067 "\x44\xd1\x2d\xc2\x99\xb8\x08\x2a"
6068 "\x07\x89\x73\xc2\x45\x92\xc6\x90",
6069 .rlen = 32,
6070 }
6071};
6072
6073static struct cipher_testvec tea_dec_tv_template[] = {
6074 {
6075 .key = zeroed_string,
6076 .klen = 16,
6077 .input = "\x0a\x3a\xea\x41\x40\xa9\xba\x94",
6078 .ilen = 8,
6079 .result = zeroed_string,
6080 .rlen = 8,
6081 }, {
6082 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6083 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6084 .klen = 16,
6085 .input = "\x77\x5d\x2a\x6a\xf6\xce\x92\x09",
6086 .ilen = 8,
6087 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6088 .rlen = 8,
6089 }, {
6090 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6091 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6092 .klen = 16,
6093 .input = "\xbe\x7a\xbb\x81\x95\x2d\x1f\x1e"
6094 "\xdd\x89\xa1\x25\x04\x21\xdf\x95",
6095 .ilen = 16,
6096 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6097 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6098 .rlen = 16,
6099 }, {
6100 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6101 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6102 .klen = 16,
6103 .input = "\xe0\x4d\x5d\x3c\xb7\x8c\x36\x47"
6104 "\x94\x18\x95\x91\xa9\xfc\x49\xf8"
6105 "\x44\xd1\x2d\xc2\x99\xb8\x08\x2a"
6106 "\x07\x89\x73\xc2\x45\x92\xc6\x90",
6107 .ilen = 32,
6108 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6109 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6110 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6111 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6112 .rlen = 32,
6113 }
6114};
6115
6116/*
6117 * XTEA test vectors
6118 */
6119#define XTEA_ENC_TEST_VECTORS 4
6120#define XTEA_DEC_TEST_VECTORS 4
6121
6122static struct cipher_testvec xtea_enc_tv_template[] = {
6123 {
6124 .key = zeroed_string,
6125 .klen = 16,
6126 .input = zeroed_string,
6127 .ilen = 8,
6128 .result = "\xd8\xd4\xe9\xde\xd9\x1e\x13\xf7",
6129 .rlen = 8,
6130 }, {
6131 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6132 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6133 .klen = 16,
6134 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6135 .ilen = 8,
6136 .result = "\x94\xeb\xc8\x96\x84\x6a\x49\xa8",
6137 .rlen = 8,
6138 }, {
6139 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6140 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6141 .klen = 16,
6142 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6143 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6144 .ilen = 16,
6145 .result = "\x3e\xce\xae\x22\x60\x56\xa8\x9d"
6146 "\x77\x4d\xd4\xb4\x87\x24\xe3\x9a",
6147 .rlen = 16,
6148 }, {
6149 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6150 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6151 .klen = 16,
6152 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6153 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6154 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6155 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6156 .ilen = 32,
6157 .result = "\x99\x81\x9f\x5d\x6f\x4b\x31\x3a"
6158 "\x86\xff\x6f\xd0\xe3\x87\x70\x07"
6159 "\x4d\xb8\xcf\xf3\x99\x50\xb3\xd4"
6160 "\x73\xa2\xfa\xc9\x16\x59\x5d\x81",
6161 .rlen = 32,
6162 }
6163};
6164
6165static struct cipher_testvec xtea_dec_tv_template[] = {
6166 {
6167 .key = zeroed_string,
6168 .klen = 16,
6169 .input = "\xd8\xd4\xe9\xde\xd9\x1e\x13\xf7",
6170 .ilen = 8,
6171 .result = zeroed_string,
6172 .rlen = 8,
6173 }, {
6174 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6175 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6176 .klen = 16,
6177 .input = "\x94\xeb\xc8\x96\x84\x6a\x49\xa8",
6178 .ilen = 8,
6179 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6180 .rlen = 8,
6181 }, {
6182 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6183 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6184 .klen = 16,
6185 .input = "\x3e\xce\xae\x22\x60\x56\xa8\x9d"
6186 "\x77\x4d\xd4\xb4\x87\x24\xe3\x9a",
6187 .ilen = 16,
6188 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6189 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6190 .rlen = 16,
6191 }, {
6192 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6193 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6194 .klen = 16,
6195 .input = "\x99\x81\x9f\x5d\x6f\x4b\x31\x3a"
6196 "\x86\xff\x6f\xd0\xe3\x87\x70\x07"
6197 "\x4d\xb8\xcf\xf3\x99\x50\xb3\xd4"
6198 "\x73\xa2\xfa\xc9\x16\x59\x5d\x81",
6199 .ilen = 32,
6200 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6201 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6202 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6203 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6204 .rlen = 32,
6205 }
6206};
6207
6208/*
6209 * KHAZAD test vectors.
6210 */
6211#define KHAZAD_ENC_TEST_VECTORS 5
6212#define KHAZAD_DEC_TEST_VECTORS 5
6213
6214static struct cipher_testvec khazad_enc_tv_template[] = {
6215 {
6216 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
6217 "\x00\x00\x00\x00\x00\x00\x00\x00",
6218 .klen = 16,
6219 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
6220 .ilen = 8,
6221 .result = "\x49\xa4\xce\x32\xac\x19\x0e\x3f",
6222 .rlen = 8,
6223 }, {
6224 .key = "\x38\x38\x38\x38\x38\x38\x38\x38"
6225 "\x38\x38\x38\x38\x38\x38\x38\x38",
6226 .klen = 16,
6227 .input = "\x38\x38\x38\x38\x38\x38\x38\x38",
6228 .ilen = 8,
6229 .result = "\x7e\x82\x12\xa1\xd9\x5b\xe4\xf9",
6230 .rlen = 8,
6231 }, {
6232 .key = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2"
6233 "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6234 .klen = 16,
6235 .input = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6236 .ilen = 8,
6237 .result = "\xaa\xbe\xc1\x95\xc5\x94\x1a\x9c",
6238 .rlen = 8,
6239 }, {
6240 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6241 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6242 .klen = 16,
6243 .input = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6244 .ilen = 8,
6245 .result = "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6246 .rlen = 8,
6247 }, {
6248 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6249 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6250 .klen = 16,
6251 .input = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6252 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6253 .ilen = 16,
6254 .result = "\x04\x74\xf5\x70\x50\x16\xd3\xb8"
6255 "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6256 .rlen = 16,
6257 },
6258};
6259
6260static struct cipher_testvec khazad_dec_tv_template[] = {
6261 {
6262 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
6263 "\x00\x00\x00\x00\x00\x00\x00\x00",
6264 .klen = 16,
6265 .input = "\x49\xa4\xce\x32\xac\x19\x0e\x3f",
6266 .ilen = 8,
6267 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
6268 .rlen = 8,
6269 }, {
6270 .key = "\x38\x38\x38\x38\x38\x38\x38\x38"
6271 "\x38\x38\x38\x38\x38\x38\x38\x38",
6272 .klen = 16,
6273 .input = "\x7e\x82\x12\xa1\xd9\x5b\xe4\xf9",
6274 .ilen = 8,
6275 .result = "\x38\x38\x38\x38\x38\x38\x38\x38",
6276 .rlen = 8,
6277 }, {
6278 .key = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2"
6279 "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6280 .klen = 16,
6281 .input = "\xaa\xbe\xc1\x95\xc5\x94\x1a\x9c",
6282 .ilen = 8,
6283 .result = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6284 .rlen = 8,
6285 }, {
6286 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6287 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6288 .klen = 16,
6289 .input = "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6290 .ilen = 8,
6291 .result = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6292 .rlen = 8,
6293 }, {
6294 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6295 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6296 .klen = 16,
6297 .input = "\x04\x74\xf5\x70\x50\x16\xd3\xb8"
6298 "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6299 .ilen = 16,
6300 .result = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6301 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6302 .rlen = 16,
6303 },
6304};
6305
6306/*
6307 * Anubis test vectors.
6308 */
6309
6310#define ANUBIS_ENC_TEST_VECTORS 5
6311#define ANUBIS_DEC_TEST_VECTORS 5
6312#define ANUBIS_CBC_ENC_TEST_VECTORS 2
6313#define ANUBIS_CBC_DEC_TEST_VECTORS 2
6314
6315static struct cipher_testvec anubis_enc_tv_template[] = {
6316 {
6317 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6318 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6319 .klen = 16,
6320 .input = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6321 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6322 .ilen = 16,
6323 .result = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6324 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90",
6325 .rlen = 16,
6326 }, {
6327
6328 .key = "\x03\x03\x03\x03\x03\x03\x03\x03"
6329 "\x03\x03\x03\x03\x03\x03\x03\x03"
6330 "\x03\x03\x03\x03",
6331 .klen = 20,
6332 .input = "\x03\x03\x03\x03\x03\x03\x03\x03"
6333 "\x03\x03\x03\x03\x03\x03\x03\x03",
6334 .ilen = 16,
6335 .result = "\xdb\xf1\x42\xf4\xd1\x8a\xc7\x49"
6336 "\x87\x41\x6f\x82\x0a\x98\x64\xae",
6337 .rlen = 16,
6338 }, {
6339 .key = "\x24\x24\x24\x24\x24\x24\x24\x24"
6340 "\x24\x24\x24\x24\x24\x24\x24\x24"
6341 "\x24\x24\x24\x24\x24\x24\x24\x24"
6342 "\x24\x24\x24\x24",
6343 .klen = 28,
6344 .input = "\x24\x24\x24\x24\x24\x24\x24\x24"
6345 "\x24\x24\x24\x24\x24\x24\x24\x24",
6346 .ilen = 16,
6347 .result = "\xfd\x1b\x4a\xe3\xbf\xf0\xad\x3d"
6348 "\x06\xd3\x61\x27\xfd\x13\x9e\xde",
6349 .rlen = 16,
6350 }, {
6351 .key = "\x25\x25\x25\x25\x25\x25\x25\x25"
6352 "\x25\x25\x25\x25\x25\x25\x25\x25"
6353 "\x25\x25\x25\x25\x25\x25\x25\x25"
6354 "\x25\x25\x25\x25\x25\x25\x25\x25",
6355 .klen = 32,
6356 .input = "\x25\x25\x25\x25\x25\x25\x25\x25"
6357 "\x25\x25\x25\x25\x25\x25\x25\x25",
6358 .ilen = 16,
6359 .result = "\x1a\x91\xfb\x2b\xb7\x78\x6b\xc4"
6360 "\x17\xd9\xff\x40\x3b\x0e\xe5\xfe",
6361 .rlen = 16,
6362 }, {
6363 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6364 "\x35\x35\x35\x35\x35\x35\x35\x35"
6365 "\x35\x35\x35\x35\x35\x35\x35\x35"
6366 "\x35\x35\x35\x35\x35\x35\x35\x35"
6367 "\x35\x35\x35\x35\x35\x35\x35\x35",
6368 .klen = 40,
6369 .input = "\x35\x35\x35\x35\x35\x35\x35\x35"
6370 "\x35\x35\x35\x35\x35\x35\x35\x35",
6371 .ilen = 16,
6372 .result = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6373 "\x9e\xc6\x84\x0f\x17\x21\x07\xee",
6374 .rlen = 16,
6375 },
6376};
6377
6378static struct cipher_testvec anubis_dec_tv_template[] = {
6379 {
6380 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6381 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6382 .klen = 16,
6383 .input = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6384 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90",
6385 .ilen = 16,
6386 .result = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6387 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6388 .rlen = 16,
6389 }, {
6390
6391 .key = "\x03\x03\x03\x03\x03\x03\x03\x03"
6392 "\x03\x03\x03\x03\x03\x03\x03\x03"
6393 "\x03\x03\x03\x03",
6394 .klen = 20,
6395 .input = "\xdb\xf1\x42\xf4\xd1\x8a\xc7\x49"
6396 "\x87\x41\x6f\x82\x0a\x98\x64\xae",
6397 .ilen = 16,
6398 .result = "\x03\x03\x03\x03\x03\x03\x03\x03"
6399 "\x03\x03\x03\x03\x03\x03\x03\x03",
6400 .rlen = 16,
6401 }, {
6402 .key = "\x24\x24\x24\x24\x24\x24\x24\x24"
6403 "\x24\x24\x24\x24\x24\x24\x24\x24"
6404 "\x24\x24\x24\x24\x24\x24\x24\x24"
6405 "\x24\x24\x24\x24",
6406 .klen = 28,
6407 .input = "\xfd\x1b\x4a\xe3\xbf\xf0\xad\x3d"
6408 "\x06\xd3\x61\x27\xfd\x13\x9e\xde",
6409 .ilen = 16,
6410 .result = "\x24\x24\x24\x24\x24\x24\x24\x24"
6411 "\x24\x24\x24\x24\x24\x24\x24\x24",
6412 .rlen = 16,
6413 }, {
6414 .key = "\x25\x25\x25\x25\x25\x25\x25\x25"
6415 "\x25\x25\x25\x25\x25\x25\x25\x25"
6416 "\x25\x25\x25\x25\x25\x25\x25\x25"
6417 "\x25\x25\x25\x25\x25\x25\x25\x25",
6418 .klen = 32,
6419 .input = "\x1a\x91\xfb\x2b\xb7\x78\x6b\xc4"
6420 "\x17\xd9\xff\x40\x3b\x0e\xe5\xfe",
6421 .ilen = 16,
6422 .result = "\x25\x25\x25\x25\x25\x25\x25\x25"
6423 "\x25\x25\x25\x25\x25\x25\x25\x25",
6424 .rlen = 16,
6425 }, {
6426 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6427 "\x35\x35\x35\x35\x35\x35\x35\x35"
6428 "\x35\x35\x35\x35\x35\x35\x35\x35"
6429 "\x35\x35\x35\x35\x35\x35\x35\x35"
6430 "\x35\x35\x35\x35\x35\x35\x35\x35",
6431 .input = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6432 "\x9e\xc6\x84\x0f\x17\x21\x07\xee",
6433 .klen = 40,
6434 .ilen = 16,
6435 .result = "\x35\x35\x35\x35\x35\x35\x35\x35"
6436 "\x35\x35\x35\x35\x35\x35\x35\x35",
6437 .rlen = 16,
6438 },
6439};
6440
6441static struct cipher_testvec anubis_cbc_enc_tv_template[] = {
6442 {
6443 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6444 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6445 .klen = 16,
6446 .input = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6447 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6448 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6449 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6450 .ilen = 32,
6451 .result = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6452 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90"
6453 "\x86\xd8\xb5\x6f\x98\x5e\x8a\x66"
6454 "\x4f\x1f\x78\xa1\xbb\x37\xf1\xbe",
6455 .rlen = 32,
6456 }, {
6457 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6458 "\x35\x35\x35\x35\x35\x35\x35\x35"
6459 "\x35\x35\x35\x35\x35\x35\x35\x35"
6460 "\x35\x35\x35\x35\x35\x35\x35\x35"
6461 "\x35\x35\x35\x35\x35\x35\x35\x35",
6462 .klen = 40,
6463 .input = "\x35\x35\x35\x35\x35\x35\x35\x35"
6464 "\x35\x35\x35\x35\x35\x35\x35\x35"
6465 "\x35\x35\x35\x35\x35\x35\x35\x35"
6466 "\x35\x35\x35\x35\x35\x35\x35\x35",
6467 .ilen = 32,
6468 .result = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6469 "\x9e\xc6\x84\x0f\x17\x21\x07\xee"
6470 "\xa2\xbc\x06\x98\xc6\x4b\xda\x75"
6471 "\x2e\xaa\xbe\x58\xce\x01\x5b\xc7",
6472 .rlen = 32,
6473 },
6474};
6475
6476static struct cipher_testvec anubis_cbc_dec_tv_template[] = {
6477 {
6478 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6479 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6480 .klen = 16,
6481 .input = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6482 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90"
6483 "\x86\xd8\xb5\x6f\x98\x5e\x8a\x66"
6484 "\x4f\x1f\x78\xa1\xbb\x37\xf1\xbe",
6485 .ilen = 32,
6486 .result = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6487 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6488 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6489 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6490 .rlen = 32,
6491 }, {
6492 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6493 "\x35\x35\x35\x35\x35\x35\x35\x35"
6494 "\x35\x35\x35\x35\x35\x35\x35\x35"
6495 "\x35\x35\x35\x35\x35\x35\x35\x35"
6496 "\x35\x35\x35\x35\x35\x35\x35\x35",
6497 .klen = 40,
6498 .input = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6499 "\x9e\xc6\x84\x0f\x17\x21\x07\xee"
6500 "\xa2\xbc\x06\x98\xc6\x4b\xda\x75"
6501 "\x2e\xaa\xbe\x58\xce\x01\x5b\xc7",
6502 .ilen = 32,
6503 .result = "\x35\x35\x35\x35\x35\x35\x35\x35"
6504 "\x35\x35\x35\x35\x35\x35\x35\x35"
6505 "\x35\x35\x35\x35\x35\x35\x35\x35"
6506 "\x35\x35\x35\x35\x35\x35\x35\x35",
6507 .rlen = 32,
6508 },
6509};
6510
6511/*
6512 * XETA test vectors
6513 */
6514#define XETA_ENC_TEST_VECTORS 4
6515#define XETA_DEC_TEST_VECTORS 4
6516
6517static struct cipher_testvec xeta_enc_tv_template[] = {
6518 {
6519 .key = zeroed_string,
6520 .klen = 16,
6521 .input = zeroed_string,
6522 .ilen = 8,
6523 .result = "\xaa\x22\x96\xe5\x6c\x61\xf3\x45",
6524 .rlen = 8,
6525 }, {
6526 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6527 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6528 .klen = 16,
6529 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6530 .ilen = 8,
6531 .result = "\x82\x3e\xeb\x35\xdc\xdd\xd9\xc3",
6532 .rlen = 8,
6533 }, {
6534 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6535 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6536 .klen = 16,
6537 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6538 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6539 .ilen = 16,
6540 .result = "\xe2\x04\xdb\xf2\x89\x85\x9e\xea"
6541 "\x61\x35\xaa\xed\xb5\xcb\x71\x2c",
6542 .rlen = 16,
6543 }, {
6544 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6545 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6546 .klen = 16,
6547 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6548 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6549 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6550 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6551 .ilen = 32,
6552 .result = "\x0b\x03\xcd\x8a\xbe\x95\xfd\xb1"
6553 "\xc1\x44\x91\x0b\xa5\xc9\x1b\xb4"
6554 "\xa9\xda\x1e\x9e\xb1\x3e\x2a\x8f"
6555 "\xea\xa5\x6a\x85\xd1\xf4\xa8\xa5",
6556 .rlen = 32,
6557 }
6558};
6559
6560static struct cipher_testvec xeta_dec_tv_template[] = {
6561 {
6562 .key = zeroed_string,
6563 .klen = 16,
6564 .input = "\xaa\x22\x96\xe5\x6c\x61\xf3\x45",
6565 .ilen = 8,
6566 .result = zeroed_string,
6567 .rlen = 8,
6568 }, {
6569 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6570 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6571 .klen = 16,
6572 .input = "\x82\x3e\xeb\x35\xdc\xdd\xd9\xc3",
6573 .ilen = 8,
6574 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6575 .rlen = 8,
6576 }, {
6577 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6578 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6579 .klen = 16,
6580 .input = "\xe2\x04\xdb\xf2\x89\x85\x9e\xea"
6581 "\x61\x35\xaa\xed\xb5\xcb\x71\x2c",
6582 .ilen = 16,
6583 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6584 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6585 .rlen = 16,
6586 }, {
6587 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6588 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6589 .klen = 16,
6590 .input = "\x0b\x03\xcd\x8a\xbe\x95\xfd\xb1"
6591 "\xc1\x44\x91\x0b\xa5\xc9\x1b\xb4"
6592 "\xa9\xda\x1e\x9e\xb1\x3e\x2a\x8f"
6593 "\xea\xa5\x6a\x85\xd1\xf4\xa8\xa5",
6594 .ilen = 32,
6595 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6596 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6597 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6598 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6599 .rlen = 32,
6600 }
6601};
6602
6603/*
6604 * FCrypt test vectors
6605 */
6606#define FCRYPT_ENC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_enc_tv_template)
6607#define FCRYPT_DEC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_dec_tv_template)
6608
6609static struct cipher_testvec fcrypt_pcbc_enc_tv_template[] = {
6610 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
6611 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
6612 .klen = 8,
6613 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6614 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
6615 .ilen = 8,
6616 .result = "\x0E\x09\x00\xC7\x3E\xF7\xED\x41",
6617 .rlen = 8,
6618 }, {
6619 .key = "\x11\x44\x77\xAA\xDD\x00\x33\x66",
6620 .klen = 8,
6621 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6622 .input = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0",
6623 .ilen = 8,
6624 .result = "\xD8\xED\x78\x74\x77\xEC\x06\x80",
6625 .rlen = 8,
6626 }, { /* From Arla */
6627 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6628 .klen = 8,
6629 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6630 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6631 .ilen = 48,
6632 .result = "\x00\xf0\x0e\x11\x75\xe6\x23\x82"
6633 "\xee\xac\x98\x62\x44\x51\xe4\x84"
6634 "\xc3\x59\xd8\xaa\x64\x60\xae\xf7"
6635 "\xd2\xd9\x13\x79\x72\xa3\x45\x03"
6636 "\x23\xb5\x62\xd7\x0c\xf5\x27\xd1"
6637 "\xf8\x91\x3c\xac\x44\x22\x92\xef",
6638 .rlen = 48,
6639 }, {
6640 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6641 .klen = 8,
6642 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6643 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6644 .ilen = 48,
6645 .result = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6646 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6647 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6648 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6649 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6650 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6651 .rlen = 48,
6652 }, { /* split-page version */
6653 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6654 .klen = 8,
6655 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6656 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6657 .ilen = 48,
6658 .result = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6659 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6660 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6661 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6662 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6663 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6664 .rlen = 48,
6665 .np = 2,
6666 .tap = { 20, 28 },
6667 }
6668};
6669
6670static struct cipher_testvec fcrypt_pcbc_dec_tv_template[] = {
6671 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
6672 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
6673 .klen = 8,
6674 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6675 .input = "\x0E\x09\x00\xC7\x3E\xF7\xED\x41",
6676 .ilen = 8,
6677 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
6678 .rlen = 8,
6679 }, {
6680 .key = "\x11\x44\x77\xAA\xDD\x00\x33\x66",
6681 .klen = 8,
6682 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6683 .input = "\xD8\xED\x78\x74\x77\xEC\x06\x80",
6684 .ilen = 8,
6685 .result = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0",
6686 .rlen = 8,
6687 }, { /* From Arla */
6688 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6689 .klen = 8,
6690 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6691 .input = "\x00\xf0\x0e\x11\x75\xe6\x23\x82"
6692 "\xee\xac\x98\x62\x44\x51\xe4\x84"
6693 "\xc3\x59\xd8\xaa\x64\x60\xae\xf7"
6694 "\xd2\xd9\x13\x79\x72\xa3\x45\x03"
6695 "\x23\xb5\x62\xd7\x0c\xf5\x27\xd1"
6696 "\xf8\x91\x3c\xac\x44\x22\x92\xef",
6697 .ilen = 48,
6698 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6699 .rlen = 48,
6700 }, {
6701 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6702 .klen = 8,
6703 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6704 .input = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6705 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6706 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6707 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6708 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6709 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6710 .ilen = 48,
6711 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6712 .rlen = 48,
6713 }, { /* split-page version */
6714 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6715 .klen = 8,
6716 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6717 .input = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6718 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6719 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6720 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6721 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6722 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6723 .ilen = 48,
6724 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6725 .rlen = 48,
6726 .np = 2,
6727 .tap = { 20, 28 },
6728 }
6729};
6730
6731/*
6732 * CAMELLIA test vectors.
6733 */
6734#define CAMELLIA_ENC_TEST_VECTORS 3
6735#define CAMELLIA_DEC_TEST_VECTORS 3
6736#define CAMELLIA_CBC_ENC_TEST_VECTORS 2
6737#define CAMELLIA_CBC_DEC_TEST_VECTORS 2
6738
6739static struct cipher_testvec camellia_enc_tv_template[] = {
6740 {
6741 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6742 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6743 .klen = 16,
6744 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6745 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6746 .ilen = 16,
6747 .result = "\x67\x67\x31\x38\x54\x96\x69\x73"
6748 "\x08\x57\x06\x56\x48\xea\xbe\x43",
6749 .rlen = 16,
6750 }, {
6751 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6752 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6753 "\x00\x11\x22\x33\x44\x55\x66\x77",
6754 .klen = 24,
6755 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6756 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6757 .ilen = 16,
6758 .result = "\xb4\x99\x34\x01\xb3\xe9\x96\xf8"
6759 "\x4e\xe5\xce\xe7\xd7\x9b\x09\xb9",
6760 .rlen = 16,
6761 }, {
6762 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6763 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6764 "\x00\x11\x22\x33\x44\x55\x66\x77"
6765 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
6766 .klen = 32,
6767 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6768 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6769 .ilen = 16,
6770 .result = "\x9a\xcc\x23\x7d\xff\x16\xd7\x6c"
6771 "\x20\xef\x7c\x91\x9e\x3a\x75\x09",
6772 .rlen = 16,
6773 },
6774};
6775
6776static struct cipher_testvec camellia_dec_tv_template[] = {
6777 {
6778 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6779 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6780 .klen = 16,
6781 .input = "\x67\x67\x31\x38\x54\x96\x69\x73"
6782 "\x08\x57\x06\x56\x48\xea\xbe\x43",
6783 .ilen = 16,
6784 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6785 "\xfe\xdc\xba\x98\x76\x54\x32\x10", 39 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6786 .rlen = 16,
6787 }, {
6788 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6789 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6790 "\x00\x11\x22\x33\x44\x55\x66\x77",
6791 .klen = 24, 40 .klen = 24,
6792 .input = "\xb4\x99\x34\x01\xb3\xe9\x96\xf8"
6793 "\x4e\xe5\xce\xe7\xd7\x9b\x09\xb9",
6794 .ilen = 16,
6795 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6796 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6797 .rlen = 16,
6798 }, {
6799 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6800 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6801 "\x00\x11\x22\x33\x44\x55\x66\x77"
6802 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
6803 .klen = 32,
6804 .input = "\x9a\xcc\x23\x7d\xff\x16\xd7\x6c"
6805 "\x20\xef\x7c\x91\x9e\x3a\x75\x09",
6806 .ilen = 16,
6807 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6808 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6809 .rlen = 16,
6810 },
6811};
6812
6813static struct cipher_testvec camellia_cbc_enc_tv_template[] = {
6814 {
6815 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
6816 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
6817 .klen = 16,
6818 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
6819 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
6820 .input = "Single block msg",
6821 .ilen = 16,
6822 .result = "\xea\x32\x12\x76\x3b\x50\x10\xe7"
6823 "\x18\xf6\xfd\x5d\xf6\x8f\x13\x51",
6824 .rlen = 16,
6825 }, {
6826 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
6827 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
6828 .klen = 16,
6829 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
6830 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
6831 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
6832 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
6833 "\x10\x11\x12\x13\x14\x15\x16\x17"
6834 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
6835 .ilen = 32,
6836 .result = "\xa5\xdf\x6e\x50\xda\x70\x6c\x01"
6837 "\x4a\xab\xf3\xf2\xd6\xfc\x6c\xfd"
6838 "\x19\xb4\x3e\x57\x1c\x02\x5e\xa0"
6839 "\x15\x78\xe0\x5e\xf2\xcb\x87\x16",
6840 .rlen = 32,
6841 },
6842};
6843
6844static struct cipher_testvec camellia_cbc_dec_tv_template[] = {
6845 {
6846 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
6847 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
6848 .klen = 16,
6849 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
6850 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
6851 .input = "\xea\x32\x12\x76\x3b\x50\x10\xe7"
6852 "\x18\xf6\xfd\x5d\xf6\x8f\x13\x51",
6853 .ilen = 16,
6854 .result = "Single block msg",
6855 .rlen = 16,
6856 }, {
6857 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
6858 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
6859 .klen = 16,
6860 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
6861 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
6862 .input = "\xa5\xdf\x6e\x50\xda\x70\x6c\x01"
6863 "\x4a\xab\xf3\xf2\xd6\xfc\x6c\xfd"
6864 "\x19\xb4\x3e\x57\x1c\x02\x5e\xa0"
6865 "\x15\x78\xe0\x5e\xf2\xcb\x87\x16",
6866 .ilen = 32,
6867 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
6868 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
6869 "\x10\x11\x12\x13\x14\x15\x16\x17"
6870 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
6871 .rlen = 32,
6872 },
6873};
6874
6875/*
6876 * SEED test vectors
6877 */
6878#define SEED_ENC_TEST_VECTORS 4
6879#define SEED_DEC_TEST_VECTORS 4
6880
6881static struct cipher_testvec seed_enc_tv_template[] = {
6882 {
6883 .key = zeroed_string,
6884 .klen = 16,
6885 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
6886 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6887 .ilen = 16,
6888 .result = "\x5e\xba\xc6\xe0\x05\x4e\x16\x68"
6889 "\x19\xaf\xf1\xcc\x6d\x34\x6c\xdb",
6890 .rlen = 16,
6891 }, {
6892 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6893 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6894 .klen = 16,
6895 .input = zeroed_string,
6896 .ilen = 16,
6897 .result = "\xc1\x1f\x22\xf2\x01\x40\x50\x50"
6898 "\x84\x48\x35\x97\xe4\x37\x0f\x43",
6899 .rlen = 16,
6900 }, {
6901 .key = "\x47\x06\x48\x08\x51\xe6\x1b\xe8"
6902 "\x5d\x74\xbf\xb3\xfd\x95\x61\x85",
6903 .klen = 16,
6904 .input = "\x83\xa2\xf8\xa2\x88\x64\x1f\xb9"
6905 "\xa4\xe9\xa5\xcc\x2f\x13\x1c\x7d",
6906 .ilen = 16,
6907 .result = "\xee\x54\xd1\x3e\xbc\xae\x70\x6d"
6908 "\x22\x6b\xc3\x14\x2c\xd4\x0d\x4a",
6909 .rlen = 16,
6910 }, {
6911 .key = "\x28\xdb\xc3\xbc\x49\xff\xd8\x7d"
6912 "\xcf\xa5\x09\xb1\x1d\x42\x2b\xe7",
6913 .klen = 16,
6914 .input = "\xb4\x1e\x6b\xe2\xeb\xa8\x4a\x14"
6915 "\x8e\x2e\xed\x84\x59\x3c\x5e\xc7",
6916 .ilen = 16,
6917 .result = "\x9b\x9b\x7b\xfc\xd1\x81\x3c\xb9"
6918 "\x5d\x0b\x36\x18\xf4\x0f\x51\x22",
6919 .rlen = 16,
6920 } 41 }
6921}; 42};
6922 43
6923static struct cipher_testvec seed_dec_tv_template[] = {
6924 {
6925 .key = zeroed_string,
6926 .klen = 16,
6927 .input = "\x5e\xba\xc6\xe0\x05\x4e\x16\x68"
6928 "\x19\xaf\xf1\xcc\x6d\x34\x6c\xdb",
6929 .ilen = 16,
6930 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
6931 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6932 .rlen = 16,
6933 }, {
6934 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6935 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6936 .klen = 16,
6937 .input = "\xc1\x1f\x22\xf2\x01\x40\x50\x50"
6938 "\x84\x48\x35\x97\xe4\x37\x0f\x43",
6939 .ilen = 16,
6940 .result = zeroed_string,
6941 .rlen = 16,
6942 }, {
6943 .key = "\x47\x06\x48\x08\x51\xe6\x1b\xe8"
6944 "\x5d\x74\xbf\xb3\xfd\x95\x61\x85",
6945 .klen = 16,
6946 .input = "\xee\x54\xd1\x3e\xbc\xae\x70\x6d"
6947 "\x22\x6b\xc3\x14\x2c\xd4\x0d\x4a",
6948 .ilen = 16,
6949 .result = "\x83\xa2\xf8\xa2\x88\x64\x1f\xb9"
6950 "\xa4\xe9\xa5\xcc\x2f\x13\x1c\x7d",
6951 .rlen = 16,
6952 }, {
6953 .key = "\x28\xdb\xc3\xbc\x49\xff\xd8\x7d"
6954 "\xcf\xa5\x09\xb1\x1d\x42\x2b\xe7",
6955 .klen = 16,
6956 .input = "\x9b\x9b\x7b\xfc\xd1\x81\x3c\xb9"
6957 "\x5d\x0b\x36\x18\xf4\x0f\x51\x22",
6958 .ilen = 16,
6959 .result = "\xb4\x1e\x6b\xe2\xeb\xa8\x4a\x14"
6960 "\x8e\x2e\xed\x84\x59\x3c\x5e\xc7",
6961 .rlen = 16,
6962 }
6963};
6964
6965#define SALSA20_STREAM_ENC_TEST_VECTORS 5
6966static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
6967 /*
6968 * Testvectors from verified.test-vectors submitted to ECRYPT.
6969 * They are truncated to size 39, 64, 111, 129 to test a variety
6970 * of input length.
6971 */
6972 { /* Set 3, vector 0 */
6973 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6974 "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
6975 .klen = 16,
6976 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6977 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
6978 "\x00\x00\x00\x00\x00\x00\x00\x00"
6979 "\x00\x00\x00\x00\x00\x00\x00\x00"
6980 "\x00\x00\x00\x00\x00\x00\x00\x00"
6981 "\x00\x00\x00\x00\x00\x00\x00",
6982 .ilen = 39,
6983 .result = "\x2D\xD5\xC3\xF7\xBA\x2B\x20\xF7"
6984 "\x68\x02\x41\x0C\x68\x86\x88\x89"
6985 "\x5A\xD8\xC1\xBD\x4E\xA6\xC9\xB1"
6986 "\x40\xFB\x9B\x90\xE2\x10\x49\xBF"
6987 "\x58\x3F\x52\x79\x70\xEB\xC1",
6988 .rlen = 39,
6989 }, { /* Set 5, vector 0 */
6990 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
6991 "\x00\x00\x00\x00\x00\x00\x00\x00",
6992 .klen = 16,
6993 .iv = "\x80\x00\x00\x00\x00\x00\x00\x00",
6994 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
6995 "\x00\x00\x00\x00\x00\x00\x00\x00"
6996 "\x00\x00\x00\x00\x00\x00\x00\x00"
6997 "\x00\x00\x00\x00\x00\x00\x00\x00"
6998 "\x00\x00\x00\x00\x00\x00\x00\x00"
6999 "\x00\x00\x00\x00\x00\x00\x00\x00"
7000 "\x00\x00\x00\x00\x00\x00\x00\x00"
7001 "\x00\x00\x00\x00\x00\x00\x00\x00",
7002 .ilen = 64,
7003 .result = "\xB6\x6C\x1E\x44\x46\xDD\x95\x57"
7004 "\xE5\x78\xE2\x23\xB0\xB7\x68\x01"
7005 "\x7B\x23\xB2\x67\xBB\x02\x34\xAE"
7006 "\x46\x26\xBF\x44\x3F\x21\x97\x76"
7007 "\x43\x6F\xB1\x9F\xD0\xE8\x86\x6F"
7008 "\xCD\x0D\xE9\xA9\x53\x8F\x4A\x09"
7009 "\xCA\x9A\xC0\x73\x2E\x30\xBC\xF9"
7010 "\x8E\x4F\x13\xE4\xB9\xE2\x01\xD9",
7011 .rlen = 64,
7012 }, { /* Set 3, vector 27 */
7013 .key = "\x1B\x1C\x1D\x1E\x1F\x20\x21\x22"
7014 "\x23\x24\x25\x26\x27\x28\x29\x2A"
7015 "\x2B\x2C\x2D\x2E\x2F\x30\x31\x32"
7016 "\x33\x34\x35\x36\x37\x38\x39\x3A",
7017 .klen = 32,
7018 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
7019 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
7020 "\x00\x00\x00\x00\x00\x00\x00\x00"
7021 "\x00\x00\x00\x00\x00\x00\x00\x00"
7022 "\x00\x00\x00\x00\x00\x00\x00\x00"
7023 "\x00\x00\x00\x00\x00\x00\x00\x00"
7024 "\x00\x00\x00\x00\x00\x00\x00\x00"
7025 "\x00\x00\x00\x00\x00\x00\x00\x00"
7026 "\x00\x00\x00\x00\x00\x00\x00\x00"
7027 "\x00\x00\x00\x00\x00\x00\x00\x00"
7028 "\x00\x00\x00\x00\x00\x00\x00\x00"
7029 "\x00\x00\x00\x00\x00\x00\x00\x00"
7030 "\x00\x00\x00\x00\x00\x00\x00\x00"
7031 "\x00\x00\x00\x00\x00\x00\x00\x00"
7032 "\x00\x00\x00\x00\x00\x00\x00",
7033 .ilen = 111,
7034 .result = "\xAE\x39\x50\x8E\xAC\x9A\xEC\xE7"
7035 "\xBF\x97\xBB\x20\xB9\xDE\xE4\x1F"
7036 "\x87\xD9\x47\xF8\x28\x91\x35\x98"
7037 "\xDB\x72\xCC\x23\x29\x48\x56\x5E"
7038 "\x83\x7E\x0B\xF3\x7D\x5D\x38\x7B"
7039 "\x2D\x71\x02\xB4\x3B\xB5\xD8\x23"
7040 "\xB0\x4A\xDF\x3C\xEC\xB6\xD9\x3B"
7041 "\x9B\xA7\x52\xBE\xC5\xD4\x50\x59"
7042 "\x15\x14\xB4\x0E\x40\xE6\x53\xD1"
7043 "\x83\x9C\x5B\xA0\x92\x29\x6B\x5E"
7044 "\x96\x5B\x1E\x2F\xD3\xAC\xC1\x92"
7045 "\xB1\x41\x3F\x19\x2F\xC4\x3B\xC6"
7046 "\x95\x46\x45\x54\xE9\x75\x03\x08"
7047 "\x44\xAF\xE5\x8A\x81\x12\x09",
7048 .rlen = 111,
7049 }, { /* Set 5, vector 27 */
7050 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
7051 "\x00\x00\x00\x00\x00\x00\x00\x00"
7052 "\x00\x00\x00\x00\x00\x00\x00\x00"
7053 "\x00\x00\x00\x00\x00\x00\x00\x00",
7054 .klen = 32,
7055 .iv = "\x00\x00\x00\x10\x00\x00\x00\x00",
7056 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
7057 "\x00\x00\x00\x00\x00\x00\x00\x00"
7058 "\x00\x00\x00\x00\x00\x00\x00\x00"
7059 "\x00\x00\x00\x00\x00\x00\x00\x00"
7060 "\x00\x00\x00\x00\x00\x00\x00\x00"
7061 "\x00\x00\x00\x00\x00\x00\x00\x00"
7062 "\x00\x00\x00\x00\x00\x00\x00\x00"
7063 "\x00\x00\x00\x00\x00\x00\x00\x00"
7064 "\x00\x00\x00\x00\x00\x00\x00\x00"
7065 "\x00\x00\x00\x00\x00\x00\x00\x00"
7066 "\x00\x00\x00\x00\x00\x00\x00\x00"
7067 "\x00\x00\x00\x00\x00\x00\x00\x00"
7068 "\x00\x00\x00\x00\x00\x00\x00\x00"
7069 "\x00\x00\x00\x00\x00\x00\x00\x00"
7070 "\x00\x00\x00\x00\x00\x00\x00\x00"
7071 "\x00\x00\x00\x00\x00\x00\x00\x00"
7072 "\x00",
7073 .ilen = 129,
7074 .result = "\xD2\xDB\x1A\x5C\xF1\xC1\xAC\xDB"
7075 "\xE8\x1A\x7A\x43\x40\xEF\x53\x43"
7076 "\x5E\x7F\x4B\x1A\x50\x52\x3F\x8D"
7077 "\x28\x3D\xCF\x85\x1D\x69\x6E\x60"
7078 "\xF2\xDE\x74\x56\x18\x1B\x84\x10"
7079 "\xD4\x62\xBA\x60\x50\xF0\x61\xF2"
7080 "\x1C\x78\x7F\xC1\x24\x34\xAF\x58"
7081 "\xBF\x2C\x59\xCA\x90\x77\xF3\xB0"
7082 "\x5B\x4A\xDF\x89\xCE\x2C\x2F\xFC"
7083 "\x67\xF0\xE3\x45\xE8\xB3\xB3\x75"
7084 "\xA0\x95\x71\xA1\x29\x39\x94\xCA"
7085 "\x45\x2F\xBD\xCB\x10\xB6\xBE\x9F"
7086 "\x8E\xF9\xB2\x01\x0A\x5A\x0A\xB7"
7087 "\x6B\x9D\x70\x8E\x4B\xD6\x2F\xCD"
7088 "\x2E\x40\x48\x75\xE9\xE2\x21\x45"
7089 "\x0B\xC9\xB6\xB5\x66\xBC\x9A\x59"
7090 "\x5A",
7091 .rlen = 129,
7092 }, { /* large test vector generated using Crypto++ */
7093 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
7094 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
7095 "\x10\x11\x12\x13\x14\x15\x16\x17"
7096 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
7097 .klen = 32,
7098 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
7099 "\x00\x00\x00\x00\x00\x00\x00\x00",
7100 .input =
7101 "\x00\x01\x02\x03\x04\x05\x06\x07"
7102 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
7103 "\x10\x11\x12\x13\x14\x15\x16\x17"
7104 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
7105 "\x20\x21\x22\x23\x24\x25\x26\x27"
7106 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
7107 "\x30\x31\x32\x33\x34\x35\x36\x37"
7108 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
7109 "\x40\x41\x42\x43\x44\x45\x46\x47"
7110 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
7111 "\x50\x51\x52\x53\x54\x55\x56\x57"
7112 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
7113 "\x60\x61\x62\x63\x64\x65\x66\x67"
7114 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
7115 "\x70\x71\x72\x73\x74\x75\x76\x77"
7116 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
7117 "\x80\x81\x82\x83\x84\x85\x86\x87"
7118 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
7119 "\x90\x91\x92\x93\x94\x95\x96\x97"
7120 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
7121 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
7122 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
7123 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
7124 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
7125 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
7126 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
7127 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
7128 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
7129 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
7130 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
7131 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
7132 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
7133 "\x00\x03\x06\x09\x0c\x0f\x12\x15"
7134 "\x18\x1b\x1e\x21\x24\x27\x2a\x2d"
7135 "\x30\x33\x36\x39\x3c\x3f\x42\x45"
7136 "\x48\x4b\x4e\x51\x54\x57\x5a\x5d"
7137 "\x60\x63\x66\x69\x6c\x6f\x72\x75"
7138 "\x78\x7b\x7e\x81\x84\x87\x8a\x8d"
7139 "\x90\x93\x96\x99\x9c\x9f\xa2\xa5"
7140 "\xa8\xab\xae\xb1\xb4\xb7\xba\xbd"
7141 "\xc0\xc3\xc6\xc9\xcc\xcf\xd2\xd5"
7142 "\xd8\xdb\xde\xe1\xe4\xe7\xea\xed"
7143 "\xf0\xf3\xf6\xf9\xfc\xff\x02\x05"
7144 "\x08\x0b\x0e\x11\x14\x17\x1a\x1d"
7145 "\x20\x23\x26\x29\x2c\x2f\x32\x35"
7146 "\x38\x3b\x3e\x41\x44\x47\x4a\x4d"
7147 "\x50\x53\x56\x59\x5c\x5f\x62\x65"
7148 "\x68\x6b\x6e\x71\x74\x77\x7a\x7d"
7149 "\x80\x83\x86\x89\x8c\x8f\x92\x95"
7150 "\x98\x9b\x9e\xa1\xa4\xa7\xaa\xad"
7151 "\xb0\xb3\xb6\xb9\xbc\xbf\xc2\xc5"
7152 "\xc8\xcb\xce\xd1\xd4\xd7\xda\xdd"
7153 "\xe0\xe3\xe6\xe9\xec\xef\xf2\xf5"
7154 "\xf8\xfb\xfe\x01\x04\x07\x0a\x0d"
7155 "\x10\x13\x16\x19\x1c\x1f\x22\x25"
7156 "\x28\x2b\x2e\x31\x34\x37\x3a\x3d"
7157 "\x40\x43\x46\x49\x4c\x4f\x52\x55"
7158 "\x58\x5b\x5e\x61\x64\x67\x6a\x6d"
7159 "\x70\x73\x76\x79\x7c\x7f\x82\x85"
7160 "\x88\x8b\x8e\x91\x94\x97\x9a\x9d"
7161 "\xa0\xa3\xa6\xa9\xac\xaf\xb2\xb5"
7162 "\xb8\xbb\xbe\xc1\xc4\xc7\xca\xcd"
7163 "\xd0\xd3\xd6\xd9\xdc\xdf\xe2\xe5"
7164 "\xe8\xeb\xee\xf1\xf4\xf7\xfa\xfd"
7165 "\x00\x05\x0a\x0f\x14\x19\x1e\x23"
7166 "\x28\x2d\x32\x37\x3c\x41\x46\x4b"
7167 "\x50\x55\x5a\x5f\x64\x69\x6e\x73"
7168 "\x78\x7d\x82\x87\x8c\x91\x96\x9b"
7169 "\xa0\xa5\xaa\xaf\xb4\xb9\xbe\xc3"
7170 "\xc8\xcd\xd2\xd7\xdc\xe1\xe6\xeb"
7171 "\xf0\xf5\xfa\xff\x04\x09\x0e\x13"
7172 "\x18\x1d\x22\x27\x2c\x31\x36\x3b"
7173 "\x40\x45\x4a\x4f\x54\x59\x5e\x63"
7174 "\x68\x6d\x72\x77\x7c\x81\x86\x8b"
7175 "\x90\x95\x9a\x9f\xa4\xa9\xae\xb3"
7176 "\xb8\xbd\xc2\xc7\xcc\xd1\xd6\xdb"
7177 "\xe0\xe5\xea\xef\xf4\xf9\xfe\x03"
7178 "\x08\x0d\x12\x17\x1c\x21\x26\x2b"
7179 "\x30\x35\x3a\x3f\x44\x49\x4e\x53"
7180 "\x58\x5d\x62\x67\x6c\x71\x76\x7b"
7181 "\x80\x85\x8a\x8f\x94\x99\x9e\xa3"
7182 "\xa8\xad\xb2\xb7\xbc\xc1\xc6\xcb"
7183 "\xd0\xd5\xda\xdf\xe4\xe9\xee\xf3"
7184 "\xf8\xfd\x02\x07\x0c\x11\x16\x1b"
7185 "\x20\x25\x2a\x2f\x34\x39\x3e\x43"
7186 "\x48\x4d\x52\x57\x5c\x61\x66\x6b"
7187 "\x70\x75\x7a\x7f\x84\x89\x8e\x93"
7188 "\x98\x9d\xa2\xa7\xac\xb1\xb6\xbb"
7189 "\xc0\xc5\xca\xcf\xd4\xd9\xde\xe3"
7190 "\xe8\xed\xf2\xf7\xfc\x01\x06\x0b"
7191 "\x10\x15\x1a\x1f\x24\x29\x2e\x33"
7192 "\x38\x3d\x42\x47\x4c\x51\x56\x5b"
7193 "\x60\x65\x6a\x6f\x74\x79\x7e\x83"
7194 "\x88\x8d\x92\x97\x9c\xa1\xa6\xab"
7195 "\xb0\xb5\xba\xbf\xc4\xc9\xce\xd3"
7196 "\xd8\xdd\xe2\xe7\xec\xf1\xf6\xfb"
7197 "\x00\x07\x0e\x15\x1c\x23\x2a\x31"
7198 "\x38\x3f\x46\x4d\x54\x5b\x62\x69"
7199 "\x70\x77\x7e\x85\x8c\x93\x9a\xa1"
7200 "\xa8\xaf\xb6\xbd\xc4\xcb\xd2\xd9"
7201 "\xe0\xe7\xee\xf5\xfc\x03\x0a\x11"
7202 "\x18\x1f\x26\x2d\x34\x3b\x42\x49"
7203 "\x50\x57\x5e\x65\x6c\x73\x7a\x81"
7204 "\x88\x8f\x96\x9d\xa4\xab\xb2\xb9"
7205 "\xc0\xc7\xce\xd5\xdc\xe3\xea\xf1"
7206 "\xf8\xff\x06\x0d\x14\x1b\x22\x29"
7207 "\x30\x37\x3e\x45\x4c\x53\x5a\x61"
7208 "\x68\x6f\x76\x7d\x84\x8b\x92\x99"
7209 "\xa0\xa7\xae\xb5\xbc\xc3\xca\xd1"
7210 "\xd8\xdf\xe6\xed\xf4\xfb\x02\x09"
7211 "\x10\x17\x1e\x25\x2c\x33\x3a\x41"
7212 "\x48\x4f\x56\x5d\x64\x6b\x72\x79"
7213 "\x80\x87\x8e\x95\x9c\xa3\xaa\xb1"
7214 "\xb8\xbf\xc6\xcd\xd4\xdb\xe2\xe9"
7215 "\xf0\xf7\xfe\x05\x0c\x13\x1a\x21"
7216 "\x28\x2f\x36\x3d\x44\x4b\x52\x59"
7217 "\x60\x67\x6e\x75\x7c\x83\x8a\x91"
7218 "\x98\x9f\xa6\xad\xb4\xbb\xc2\xc9"
7219 "\xd0\xd7\xde\xe5\xec\xf3\xfa\x01"
7220 "\x08\x0f\x16\x1d\x24\x2b\x32\x39"
7221 "\x40\x47\x4e\x55\x5c\x63\x6a\x71"
7222 "\x78\x7f\x86\x8d\x94\x9b\xa2\xa9"
7223 "\xb0\xb7\xbe\xc5\xcc\xd3\xda\xe1"
7224 "\xe8\xef\xf6\xfd\x04\x0b\x12\x19"
7225 "\x20\x27\x2e\x35\x3c\x43\x4a\x51"
7226 "\x58\x5f\x66\x6d\x74\x7b\x82\x89"
7227 "\x90\x97\x9e\xa5\xac\xb3\xba\xc1"
7228 "\xc8\xcf\xd6\xdd\xe4\xeb\xf2\xf9"
7229 "\x00\x09\x12\x1b\x24\x2d\x36\x3f"
7230 "\x48\x51\x5a\x63\x6c\x75\x7e\x87"
7231 "\x90\x99\xa2\xab\xb4\xbd\xc6\xcf"
7232 "\xd8\xe1\xea\xf3\xfc\x05\x0e\x17"
7233 "\x20\x29\x32\x3b\x44\x4d\x56\x5f"
7234 "\x68\x71\x7a\x83\x8c\x95\x9e\xa7"
7235 "\xb0\xb9\xc2\xcb\xd4\xdd\xe6\xef"
7236 "\xf8\x01\x0a\x13\x1c\x25\x2e\x37"
7237 "\x40\x49\x52\x5b\x64\x6d\x76\x7f"
7238 "\x88\x91\x9a\xa3\xac\xb5\xbe\xc7"
7239 "\xd0\xd9\xe2\xeb\xf4\xfd\x06\x0f"
7240 "\x18\x21\x2a\x33\x3c\x45\x4e\x57"
7241 "\x60\x69\x72\x7b\x84\x8d\x96\x9f"
7242 "\xa8\xb1\xba\xc3\xcc\xd5\xde\xe7"
7243 "\xf0\xf9\x02\x0b\x14\x1d\x26\x2f"
7244 "\x38\x41\x4a\x53\x5c\x65\x6e\x77"
7245 "\x80\x89\x92\x9b\xa4\xad\xb6\xbf"
7246 "\xc8\xd1\xda\xe3\xec\xf5\xfe\x07"
7247 "\x10\x19\x22\x2b\x34\x3d\x46\x4f"
7248 "\x58\x61\x6a\x73\x7c\x85\x8e\x97"
7249 "\xa0\xa9\xb2\xbb\xc4\xcd\xd6\xdf"
7250 "\xe8\xf1\xfa\x03\x0c\x15\x1e\x27"
7251 "\x30\x39\x42\x4b\x54\x5d\x66\x6f"
7252 "\x78\x81\x8a\x93\x9c\xa5\xae\xb7"
7253 "\xc0\xc9\xd2\xdb\xe4\xed\xf6\xff"
7254 "\x08\x11\x1a\x23\x2c\x35\x3e\x47"
7255 "\x50\x59\x62\x6b\x74\x7d\x86\x8f"
7256 "\x98\xa1\xaa\xb3\xbc\xc5\xce\xd7"
7257 "\xe0\xe9\xf2\xfb\x04\x0d\x16\x1f"
7258 "\x28\x31\x3a\x43\x4c\x55\x5e\x67"
7259 "\x70\x79\x82\x8b\x94\x9d\xa6\xaf"
7260 "\xb8\xc1\xca\xd3\xdc\xe5\xee\xf7"
7261 "\x00\x0b\x16\x21\x2c\x37\x42\x4d"
7262 "\x58\x63\x6e\x79\x84\x8f\x9a\xa5"
7263 "\xb0\xbb\xc6\xd1\xdc\xe7\xf2\xfd"
7264 "\x08\x13\x1e\x29\x34\x3f\x4a\x55"
7265 "\x60\x6b\x76\x81\x8c\x97\xa2\xad"
7266 "\xb8\xc3\xce\xd9\xe4\xef\xfa\x05"
7267 "\x10\x1b\x26\x31\x3c\x47\x52\x5d"
7268 "\x68\x73\x7e\x89\x94\x9f\xaa\xb5"
7269 "\xc0\xcb\xd6\xe1\xec\xf7\x02\x0d"
7270 "\x18\x23\x2e\x39\x44\x4f\x5a\x65"
7271 "\x70\x7b\x86\x91\x9c\xa7\xb2\xbd"
7272 "\xc8\xd3\xde\xe9\xf4\xff\x0a\x15"
7273 "\x20\x2b\x36\x41\x4c\x57\x62\x6d"
7274 "\x78\x83\x8e\x99\xa4\xaf\xba\xc5"
7275 "\xd0\xdb\xe6\xf1\xfc\x07\x12\x1d"
7276 "\x28\x33\x3e\x49\x54\x5f\x6a\x75"
7277 "\x80\x8b\x96\xa1\xac\xb7\xc2\xcd"
7278 "\xd8\xe3\xee\xf9\x04\x0f\x1a\x25"
7279 "\x30\x3b\x46\x51\x5c\x67\x72\x7d"
7280 "\x88\x93\x9e\xa9\xb4\xbf\xca\xd5"
7281 "\xe0\xeb\xf6\x01\x0c\x17\x22\x2d"
7282 "\x38\x43\x4e\x59\x64\x6f\x7a\x85"
7283 "\x90\x9b\xa6\xb1\xbc\xc7\xd2\xdd"
7284 "\xe8\xf3\xfe\x09\x14\x1f\x2a\x35"
7285 "\x40\x4b\x56\x61\x6c\x77\x82\x8d"
7286 "\x98\xa3\xae\xb9\xc4\xcf\xda\xe5"
7287 "\xf0\xfb\x06\x11\x1c\x27\x32\x3d"
7288 "\x48\x53\x5e\x69\x74\x7f\x8a\x95"
7289 "\xa0\xab\xb6\xc1\xcc\xd7\xe2\xed"
7290 "\xf8\x03\x0e\x19\x24\x2f\x3a\x45"
7291 "\x50\x5b\x66\x71\x7c\x87\x92\x9d"
7292 "\xa8\xb3\xbe\xc9\xd4\xdf\xea\xf5"
7293 "\x00\x0d\x1a\x27\x34\x41\x4e\x5b"
7294 "\x68\x75\x82\x8f\x9c\xa9\xb6\xc3"
7295 "\xd0\xdd\xea\xf7\x04\x11\x1e\x2b"
7296 "\x38\x45\x52\x5f\x6c\x79\x86\x93"
7297 "\xa0\xad\xba\xc7\xd4\xe1\xee\xfb"
7298 "\x08\x15\x22\x2f\x3c\x49\x56\x63"
7299 "\x70\x7d\x8a\x97\xa4\xb1\xbe\xcb"
7300 "\xd8\xe5\xf2\xff\x0c\x19\x26\x33"
7301 "\x40\x4d\x5a\x67\x74\x81\x8e\x9b"
7302 "\xa8\xb5\xc2\xcf\xdc\xe9\xf6\x03"
7303 "\x10\x1d\x2a\x37\x44\x51\x5e\x6b"
7304 "\x78\x85\x92\x9f\xac\xb9\xc6\xd3"
7305 "\xe0\xed\xfa\x07\x14\x21\x2e\x3b"
7306 "\x48\x55\x62\x6f\x7c\x89\x96\xa3"
7307 "\xb0\xbd\xca\xd7\xe4\xf1\xfe\x0b"
7308 "\x18\x25\x32\x3f\x4c\x59\x66\x73"
7309 "\x80\x8d\x9a\xa7\xb4\xc1\xce\xdb"
7310 "\xe8\xf5\x02\x0f\x1c\x29\x36\x43"
7311 "\x50\x5d\x6a\x77\x84\x91\x9e\xab"
7312 "\xb8\xc5\xd2\xdf\xec\xf9\x06\x13"
7313 "\x20\x2d\x3a\x47\x54\x61\x6e\x7b"
7314 "\x88\x95\xa2\xaf\xbc\xc9\xd6\xe3"
7315 "\xf0\xfd\x0a\x17\x24\x31\x3e\x4b"
7316 "\x58\x65\x72\x7f\x8c\x99\xa6\xb3"
7317 "\xc0\xcd\xda\xe7\xf4\x01\x0e\x1b"
7318 "\x28\x35\x42\x4f\x5c\x69\x76\x83"
7319 "\x90\x9d\xaa\xb7\xc4\xd1\xde\xeb"
7320 "\xf8\x05\x12\x1f\x2c\x39\x46\x53"
7321 "\x60\x6d\x7a\x87\x94\xa1\xae\xbb"
7322 "\xc8\xd5\xe2\xef\xfc\x09\x16\x23"
7323 "\x30\x3d\x4a\x57\x64\x71\x7e\x8b"
7324 "\x98\xa5\xb2\xbf\xcc\xd9\xe6\xf3"
7325 "\x00\x0f\x1e\x2d\x3c\x4b\x5a\x69"
7326 "\x78\x87\x96\xa5\xb4\xc3\xd2\xe1"
7327 "\xf0\xff\x0e\x1d\x2c\x3b\x4a\x59"
7328 "\x68\x77\x86\x95\xa4\xb3\xc2\xd1"
7329 "\xe0\xef\xfe\x0d\x1c\x2b\x3a\x49"
7330 "\x58\x67\x76\x85\x94\xa3\xb2\xc1"
7331 "\xd0\xdf\xee\xfd\x0c\x1b\x2a\x39"
7332 "\x48\x57\x66\x75\x84\x93\xa2\xb1"
7333 "\xc0\xcf\xde\xed\xfc\x0b\x1a\x29"
7334 "\x38\x47\x56\x65\x74\x83\x92\xa1"
7335 "\xb0\xbf\xce\xdd\xec\xfb\x0a\x19"
7336 "\x28\x37\x46\x55\x64\x73\x82\x91"
7337 "\xa0\xaf\xbe\xcd\xdc\xeb\xfa\x09"
7338 "\x18\x27\x36\x45\x54\x63\x72\x81"
7339 "\x90\x9f\xae\xbd\xcc\xdb\xea\xf9"
7340 "\x08\x17\x26\x35\x44\x53\x62\x71"
7341 "\x80\x8f\x9e\xad\xbc\xcb\xda\xe9"
7342 "\xf8\x07\x16\x25\x34\x43\x52\x61"
7343 "\x70\x7f\x8e\x9d\xac\xbb\xca\xd9"
7344 "\xe8\xf7\x06\x15\x24\x33\x42\x51"
7345 "\x60\x6f\x7e\x8d\x9c\xab\xba\xc9"
7346 "\xd8\xe7\xf6\x05\x14\x23\x32\x41"
7347 "\x50\x5f\x6e\x7d\x8c\x9b\xaa\xb9"
7348 "\xc8\xd7\xe6\xf5\x04\x13\x22\x31"
7349 "\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9"
7350 "\xb8\xc7\xd6\xe5\xf4\x03\x12\x21"
7351 "\x30\x3f\x4e\x5d\x6c\x7b\x8a\x99"
7352 "\xa8\xb7\xc6\xd5\xe4\xf3\x02\x11"
7353 "\x20\x2f\x3e\x4d\x5c\x6b\x7a\x89"
7354 "\x98\xa7\xb6\xc5\xd4\xe3\xf2\x01"
7355 "\x10\x1f\x2e\x3d\x4c\x5b\x6a\x79"
7356 "\x88\x97\xa6\xb5\xc4\xd3\xe2\xf1"
7357 "\x00\x11\x22\x33\x44\x55\x66\x77"
7358 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff"
7359 "\x10\x21\x32\x43\x54\x65\x76\x87"
7360 "\x98\xa9\xba\xcb\xdc\xed\xfe\x0f"
7361 "\x20\x31\x42\x53\x64\x75\x86\x97"
7362 "\xa8\xb9\xca\xdb\xec\xfd\x0e\x1f"
7363 "\x30\x41\x52\x63\x74\x85\x96\xa7"
7364 "\xb8\xc9\xda\xeb\xfc\x0d\x1e\x2f"
7365 "\x40\x51\x62\x73\x84\x95\xa6\xb7"
7366 "\xc8\xd9\xea\xfb\x0c\x1d\x2e\x3f"
7367 "\x50\x61\x72\x83\x94\xa5\xb6\xc7"
7368 "\xd8\xe9\xfa\x0b\x1c\x2d\x3e\x4f"
7369 "\x60\x71\x82\x93\xa4\xb5\xc6\xd7"
7370 "\xe8\xf9\x0a\x1b\x2c\x3d\x4e\x5f"
7371 "\x70\x81\x92\xa3\xb4\xc5\xd6\xe7"
7372 "\xf8\x09\x1a\x2b\x3c\x4d\x5e\x6f"
7373 "\x80\x91\xa2\xb3\xc4\xd5\xe6\xf7"
7374 "\x08\x19\x2a\x3b\x4c\x5d\x6e\x7f"
7375 "\x90\xa1\xb2\xc3\xd4\xe5\xf6\x07"
7376 "\x18\x29\x3a\x4b\x5c\x6d\x7e\x8f"
7377 "\xa0\xb1\xc2\xd3\xe4\xf5\x06\x17"
7378 "\x28\x39\x4a\x5b\x6c\x7d\x8e\x9f"
7379 "\xb0\xc1\xd2\xe3\xf4\x05\x16\x27"
7380 "\x38\x49\x5a\x6b\x7c\x8d\x9e\xaf"
7381 "\xc0\xd1\xe2\xf3\x04\x15\x26\x37"
7382 "\x48\x59\x6a\x7b\x8c\x9d\xae\xbf"
7383 "\xd0\xe1\xf2\x03\x14\x25\x36\x47"
7384 "\x58\x69\x7a\x8b\x9c\xad\xbe\xcf"
7385 "\xe0\xf1\x02\x13\x24\x35\x46\x57"
7386 "\x68\x79\x8a\x9b\xac\xbd\xce\xdf"
7387 "\xf0\x01\x12\x23\x34\x45\x56\x67"
7388 "\x78\x89\x9a\xab\xbc\xcd\xde\xef"
7389 "\x00\x13\x26\x39\x4c\x5f\x72\x85"
7390 "\x98\xab\xbe\xd1\xe4\xf7\x0a\x1d"
7391 "\x30\x43\x56\x69\x7c\x8f\xa2\xb5"
7392 "\xc8\xdb\xee\x01\x14\x27\x3a\x4d"
7393 "\x60\x73\x86\x99\xac\xbf\xd2\xe5"
7394 "\xf8\x0b\x1e\x31\x44\x57\x6a\x7d"
7395 "\x90\xa3\xb6\xc9\xdc\xef\x02\x15"
7396 "\x28\x3b\x4e\x61\x74\x87\x9a\xad"
7397 "\xc0\xd3\xe6\xf9\x0c\x1f\x32\x45"
7398 "\x58\x6b\x7e\x91\xa4\xb7\xca\xdd"
7399 "\xf0\x03\x16\x29\x3c\x4f\x62\x75"
7400 "\x88\x9b\xae\xc1\xd4\xe7\xfa\x0d"
7401 "\x20\x33\x46\x59\x6c\x7f\x92\xa5"
7402 "\xb8\xcb\xde\xf1\x04\x17\x2a\x3d"
7403 "\x50\x63\x76\x89\x9c\xaf\xc2\xd5"
7404 "\xe8\xfb\x0e\x21\x34\x47\x5a\x6d"
7405 "\x80\x93\xa6\xb9\xcc\xdf\xf2\x05"
7406 "\x18\x2b\x3e\x51\x64\x77\x8a\x9d"
7407 "\xb0\xc3\xd6\xe9\xfc\x0f\x22\x35"
7408 "\x48\x5b\x6e\x81\x94\xa7\xba\xcd"
7409 "\xe0\xf3\x06\x19\x2c\x3f\x52\x65"
7410 "\x78\x8b\x9e\xb1\xc4\xd7\xea\xfd"
7411 "\x10\x23\x36\x49\x5c\x6f\x82\x95"
7412 "\xa8\xbb\xce\xe1\xf4\x07\x1a\x2d"
7413 "\x40\x53\x66\x79\x8c\x9f\xb2\xc5"
7414 "\xd8\xeb\xfe\x11\x24\x37\x4a\x5d"
7415 "\x70\x83\x96\xa9\xbc\xcf\xe2\xf5"
7416 "\x08\x1b\x2e\x41\x54\x67\x7a\x8d"
7417 "\xa0\xb3\xc6\xd9\xec\xff\x12\x25"
7418 "\x38\x4b\x5e\x71\x84\x97\xaa\xbd"
7419 "\xd0\xe3\xf6\x09\x1c\x2f\x42\x55"
7420 "\x68\x7b\x8e\xa1\xb4\xc7\xda\xed"
7421 "\x00\x15\x2a\x3f\x54\x69\x7e\x93"
7422 "\xa8\xbd\xd2\xe7\xfc\x11\x26\x3b"
7423 "\x50\x65\x7a\x8f\xa4\xb9\xce\xe3"
7424 "\xf8\x0d\x22\x37\x4c\x61\x76\x8b"
7425 "\xa0\xb5\xca\xdf\xf4\x09\x1e\x33"
7426 "\x48\x5d\x72\x87\x9c\xb1\xc6\xdb"
7427 "\xf0\x05\x1a\x2f\x44\x59\x6e\x83"
7428 "\x98\xad\xc2\xd7\xec\x01\x16\x2b"
7429 "\x40\x55\x6a\x7f\x94\xa9\xbe\xd3"
7430 "\xe8\xfd\x12\x27\x3c\x51\x66\x7b"
7431 "\x90\xa5\xba\xcf\xe4\xf9\x0e\x23"
7432 "\x38\x4d\x62\x77\x8c\xa1\xb6\xcb"
7433 "\xe0\xf5\x0a\x1f\x34\x49\x5e\x73"
7434 "\x88\x9d\xb2\xc7\xdc\xf1\x06\x1b"
7435 "\x30\x45\x5a\x6f\x84\x99\xae\xc3"
7436 "\xd8\xed\x02\x17\x2c\x41\x56\x6b"
7437 "\x80\x95\xaa\xbf\xd4\xe9\xfe\x13"
7438 "\x28\x3d\x52\x67\x7c\x91\xa6\xbb"
7439 "\xd0\xe5\xfa\x0f\x24\x39\x4e\x63"
7440 "\x78\x8d\xa2\xb7\xcc\xe1\xf6\x0b"
7441 "\x20\x35\x4a\x5f\x74\x89\x9e\xb3"
7442 "\xc8\xdd\xf2\x07\x1c\x31\x46\x5b"
7443 "\x70\x85\x9a\xaf\xc4\xd9\xee\x03"
7444 "\x18\x2d\x42\x57\x6c\x81\x96\xab"
7445 "\xc0\xd5\xea\xff\x14\x29\x3e\x53"
7446 "\x68\x7d\x92\xa7\xbc\xd1\xe6\xfb"
7447 "\x10\x25\x3a\x4f\x64\x79\x8e\xa3"
7448 "\xb8\xcd\xe2\xf7\x0c\x21\x36\x4b"
7449 "\x60\x75\x8a\x9f\xb4\xc9\xde\xf3"
7450 "\x08\x1d\x32\x47\x5c\x71\x86\x9b"
7451 "\xb0\xc5\xda\xef\x04\x19\x2e\x43"
7452 "\x58\x6d\x82\x97\xac\xc1\xd6\xeb"
7453 "\x00\x17\x2e\x45\x5c\x73\x8a\xa1"
7454 "\xb8\xcf\xe6\xfd\x14\x2b\x42\x59"
7455 "\x70\x87\x9e\xb5\xcc\xe3\xfa\x11"
7456 "\x28\x3f\x56\x6d\x84\x9b\xb2\xc9"
7457 "\xe0\xf7\x0e\x25\x3c\x53\x6a\x81"
7458 "\x98\xaf\xc6\xdd\xf4\x0b\x22\x39"
7459 "\x50\x67\x7e\x95\xac\xc3\xda\xf1"
7460 "\x08\x1f\x36\x4d\x64\x7b\x92\xa9"
7461 "\xc0\xd7\xee\x05\x1c\x33\x4a\x61"
7462 "\x78\x8f\xa6\xbd\xd4\xeb\x02\x19"
7463 "\x30\x47\x5e\x75\x8c\xa3\xba\xd1"
7464 "\xe8\xff\x16\x2d\x44\x5b\x72\x89"
7465 "\xa0\xb7\xce\xe5\xfc\x13\x2a\x41"
7466 "\x58\x6f\x86\x9d\xb4\xcb\xe2\xf9"
7467 "\x10\x27\x3e\x55\x6c\x83\x9a\xb1"
7468 "\xc8\xdf\xf6\x0d\x24\x3b\x52\x69"
7469 "\x80\x97\xae\xc5\xdc\xf3\x0a\x21"
7470 "\x38\x4f\x66\x7d\x94\xab\xc2\xd9"
7471 "\xf0\x07\x1e\x35\x4c\x63\x7a\x91"
7472 "\xa8\xbf\xd6\xed\x04\x1b\x32\x49"
7473 "\x60\x77\x8e\xa5\xbc\xd3\xea\x01"
7474 "\x18\x2f\x46\x5d\x74\x8b\xa2\xb9"
7475 "\xd0\xe7\xfe\x15\x2c\x43\x5a\x71"
7476 "\x88\x9f\xb6\xcd\xe4\xfb\x12\x29"
7477 "\x40\x57\x6e\x85\x9c\xb3\xca\xe1"
7478 "\xf8\x0f\x26\x3d\x54\x6b\x82\x99"
7479 "\xb0\xc7\xde\xf5\x0c\x23\x3a\x51"
7480 "\x68\x7f\x96\xad\xc4\xdb\xf2\x09"
7481 "\x20\x37\x4e\x65\x7c\x93\xaa\xc1"
7482 "\xd8\xef\x06\x1d\x34\x4b\x62\x79"
7483 "\x90\xa7\xbe\xd5\xec\x03\x1a\x31"
7484 "\x48\x5f\x76\x8d\xa4\xbb\xd2\xe9"
7485 "\x00\x19\x32\x4b\x64\x7d\x96\xaf"
7486 "\xc8\xe1\xfa\x13\x2c\x45\x5e\x77"
7487 "\x90\xa9\xc2\xdb\xf4\x0d\x26\x3f"
7488 "\x58\x71\x8a\xa3\xbc\xd5\xee\x07"
7489 "\x20\x39\x52\x6b\x84\x9d\xb6\xcf"
7490 "\xe8\x01\x1a\x33\x4c\x65\x7e\x97"
7491 "\xb0\xc9\xe2\xfb\x14\x2d\x46\x5f"
7492 "\x78\x91\xaa\xc3\xdc\xf5\x0e\x27"
7493 "\x40\x59\x72\x8b\xa4\xbd\xd6\xef"
7494 "\x08\x21\x3a\x53\x6c\x85\x9e\xb7"
7495 "\xd0\xe9\x02\x1b\x34\x4d\x66\x7f"
7496 "\x98\xb1\xca\xe3\xfc\x15\x2e\x47"
7497 "\x60\x79\x92\xab\xc4\xdd\xf6\x0f"
7498 "\x28\x41\x5a\x73\x8c\xa5\xbe\xd7"
7499 "\xf0\x09\x22\x3b\x54\x6d\x86\x9f"
7500 "\xb8\xd1\xea\x03\x1c\x35\x4e\x67"
7501 "\x80\x99\xb2\xcb\xe4\xfd\x16\x2f"
7502 "\x48\x61\x7a\x93\xac\xc5\xde\xf7"
7503 "\x10\x29\x42\x5b\x74\x8d\xa6\xbf"
7504 "\xd8\xf1\x0a\x23\x3c\x55\x6e\x87"
7505 "\xa0\xb9\xd2\xeb\x04\x1d\x36\x4f"
7506 "\x68\x81\x9a\xb3\xcc\xe5\xfe\x17"
7507 "\x30\x49\x62\x7b\x94\xad\xc6\xdf"
7508 "\xf8\x11\x2a\x43\x5c\x75\x8e\xa7"
7509 "\xc0\xd9\xf2\x0b\x24\x3d\x56\x6f"
7510 "\x88\xa1\xba\xd3\xec\x05\x1e\x37"
7511 "\x50\x69\x82\x9b\xb4\xcd\xe6\xff"
7512 "\x18\x31\x4a\x63\x7c\x95\xae\xc7"
7513 "\xe0\xf9\x12\x2b\x44\x5d\x76\x8f"
7514 "\xa8\xc1\xda\xf3\x0c\x25\x3e\x57"
7515 "\x70\x89\xa2\xbb\xd4\xed\x06\x1f"
7516 "\x38\x51\x6a\x83\x9c\xb5\xce\xe7"
7517 "\x00\x1b\x36\x51\x6c\x87\xa2\xbd"
7518 "\xd8\xf3\x0e\x29\x44\x5f\x7a\x95"
7519 "\xb0\xcb\xe6\x01\x1c\x37\x52\x6d"
7520 "\x88\xa3\xbe\xd9\xf4\x0f\x2a\x45"
7521 "\x60\x7b\x96\xb1\xcc\xe7\x02\x1d"
7522 "\x38\x53\x6e\x89\xa4\xbf\xda\xf5"
7523 "\x10\x2b\x46\x61\x7c\x97\xb2\xcd"
7524 "\xe8\x03\x1e\x39\x54\x6f\x8a\xa5"
7525 "\xc0\xdb\xf6\x11\x2c\x47\x62\x7d"
7526 "\x98\xb3\xce\xe9\x04\x1f\x3a\x55"
7527 "\x70\x8b\xa6\xc1\xdc\xf7\x12\x2d"
7528 "\x48\x63\x7e\x99\xb4\xcf\xea\x05"
7529 "\x20\x3b\x56\x71\x8c\xa7\xc2\xdd"
7530 "\xf8\x13\x2e\x49\x64\x7f\x9a\xb5"
7531 "\xd0\xeb\x06\x21\x3c\x57\x72\x8d"
7532 "\xa8\xc3\xde\xf9\x14\x2f\x4a\x65"
7533 "\x80\x9b\xb6\xd1\xec\x07\x22\x3d"
7534 "\x58\x73\x8e\xa9\xc4\xdf\xfa\x15"
7535 "\x30\x4b\x66\x81\x9c\xb7\xd2\xed"
7536 "\x08\x23\x3e\x59\x74\x8f\xaa\xc5"
7537 "\xe0\xfb\x16\x31\x4c\x67\x82\x9d"
7538 "\xb8\xd3\xee\x09\x24\x3f\x5a\x75"
7539 "\x90\xab\xc6\xe1\xfc\x17\x32\x4d"
7540 "\x68\x83\x9e\xb9\xd4\xef\x0a\x25"
7541 "\x40\x5b\x76\x91\xac\xc7\xe2\xfd"
7542 "\x18\x33\x4e\x69\x84\x9f\xba\xd5"
7543 "\xf0\x0b\x26\x41\x5c\x77\x92\xad"
7544 "\xc8\xe3\xfe\x19\x34\x4f\x6a\x85"
7545 "\xa0\xbb\xd6\xf1\x0c\x27\x42\x5d"
7546 "\x78\x93\xae\xc9\xe4\xff\x1a\x35"
7547 "\x50\x6b\x86\xa1\xbc\xd7\xf2\x0d"
7548 "\x28\x43\x5e\x79\x94\xaf\xca\xe5"
7549 "\x00\x1d\x3a\x57\x74\x91\xae\xcb"
7550 "\xe8\x05\x22\x3f\x5c\x79\x96\xb3"
7551 "\xd0\xed\x0a\x27\x44\x61\x7e\x9b"
7552 "\xb8\xd5\xf2\x0f\x2c\x49\x66\x83"
7553 "\xa0\xbd\xda\xf7\x14\x31\x4e\x6b"
7554 "\x88\xa5\xc2\xdf\xfc\x19\x36\x53"
7555 "\x70\x8d\xaa\xc7\xe4\x01\x1e\x3b"
7556 "\x58\x75\x92\xaf\xcc\xe9\x06\x23"
7557 "\x40\x5d\x7a\x97\xb4\xd1\xee\x0b"
7558 "\x28\x45\x62\x7f\x9c\xb9\xd6\xf3"
7559 "\x10\x2d\x4a\x67\x84\xa1\xbe\xdb"
7560 "\xf8\x15\x32\x4f\x6c\x89\xa6\xc3"
7561 "\xe0\xfd\x1a\x37\x54\x71\x8e\xab"
7562 "\xc8\xe5\x02\x1f\x3c\x59\x76\x93"
7563 "\xb0\xcd\xea\x07\x24\x41\x5e\x7b"
7564 "\x98\xb5\xd2\xef\x0c\x29\x46\x63"
7565 "\x80\x9d\xba\xd7\xf4\x11\x2e\x4b"
7566 "\x68\x85\xa2\xbf\xdc\xf9\x16\x33"
7567 "\x50\x6d\x8a\xa7\xc4\xe1\xfe\x1b"
7568 "\x38\x55\x72\x8f\xac\xc9\xe6\x03"
7569 "\x20\x3d\x5a\x77\x94\xb1\xce\xeb"
7570 "\x08\x25\x42\x5f\x7c\x99\xb6\xd3"
7571 "\xf0\x0d\x2a\x47\x64\x81\x9e\xbb"
7572 "\xd8\xf5\x12\x2f\x4c\x69\x86\xa3"
7573 "\xc0\xdd\xfa\x17\x34\x51\x6e\x8b"
7574 "\xa8\xc5\xe2\xff\x1c\x39\x56\x73"
7575 "\x90\xad\xca\xe7\x04\x21\x3e\x5b"
7576 "\x78\x95\xb2\xcf\xec\x09\x26\x43"
7577 "\x60\x7d\x9a\xb7\xd4\xf1\x0e\x2b"
7578 "\x48\x65\x82\x9f\xbc\xd9\xf6\x13"
7579 "\x30\x4d\x6a\x87\xa4\xc1\xde\xfb"
7580 "\x18\x35\x52\x6f\x8c\xa9\xc6\xe3"
7581 "\x00\x1f\x3e\x5d\x7c\x9b\xba\xd9"
7582 "\xf8\x17\x36\x55\x74\x93\xb2\xd1"
7583 "\xf0\x0f\x2e\x4d\x6c\x8b\xaa\xc9"
7584 "\xe8\x07\x26\x45\x64\x83\xa2\xc1"
7585 "\xe0\xff\x1e\x3d\x5c\x7b\x9a\xb9"
7586 "\xd8\xf7\x16\x35\x54\x73\x92\xb1"
7587 "\xd0\xef\x0e\x2d\x4c\x6b\x8a\xa9"
7588 "\xc8\xe7\x06\x25\x44\x63\x82\xa1"
7589 "\xc0\xdf\xfe\x1d\x3c\x5b\x7a\x99"
7590 "\xb8\xd7\xf6\x15\x34\x53\x72\x91"
7591 "\xb0\xcf\xee\x0d\x2c\x4b\x6a\x89"
7592 "\xa8\xc7\xe6\x05\x24\x43\x62\x81"
7593 "\xa0\xbf\xde\xfd\x1c\x3b\x5a\x79"
7594 "\x98\xb7\xd6\xf5\x14\x33\x52\x71"
7595 "\x90\xaf\xce\xed\x0c\x2b\x4a\x69"
7596 "\x88\xa7\xc6\xe5\x04\x23\x42\x61"
7597 "\x80\x9f\xbe\xdd\xfc\x1b\x3a\x59"
7598 "\x78\x97\xb6\xd5\xf4\x13\x32\x51"
7599 "\x70\x8f\xae\xcd\xec\x0b\x2a\x49"
7600 "\x68\x87\xa6\xc5\xe4\x03\x22\x41"
7601 "\x60\x7f\x9e\xbd\xdc\xfb\x1a\x39"
7602 "\x58\x77\x96\xb5\xd4\xf3\x12\x31"
7603 "\x50\x6f\x8e\xad\xcc\xeb\x0a\x29"
7604 "\x48\x67\x86\xa5\xc4\xe3\x02\x21"
7605 "\x40\x5f\x7e\x9d\xbc\xdb\xfa\x19"
7606 "\x38\x57\x76\x95\xb4\xd3\xf2\x11"
7607 "\x30\x4f\x6e\x8d\xac\xcb\xea\x09"
7608 "\x28\x47\x66\x85\xa4\xc3\xe2\x01"
7609 "\x20\x3f\x5e\x7d\x9c\xbb\xda\xf9"
7610 "\x18\x37\x56\x75\x94\xb3\xd2\xf1"
7611 "\x10\x2f\x4e\x6d\x8c\xab\xca\xe9"
7612 "\x08\x27\x46\x65\x84\xa3\xc2\xe1"
7613 "\x00\x21\x42\x63",
7614 .ilen = 4100,
7615 .result =
7616 "\xb5\x81\xf5\x64\x18\x73\xe3\xf0"
7617 "\x4c\x13\xf2\x77\x18\x60\x65\x5e"
7618 "\x29\x01\xce\x98\x55\x53\xf9\x0c"
7619 "\x2a\x08\xd5\x09\xb3\x57\x55\x56"
7620 "\xc5\xe9\x56\x90\xcb\x6a\xa3\xc0"
7621 "\xff\xc4\x79\xb4\xd2\x97\x5d\xc4"
7622 "\x43\xd1\xfe\x94\x7b\x88\x06\x5a"
7623 "\xb2\x9e\x2c\xfc\x44\x03\xb7\x90"
7624 "\xa0\xc1\xba\x6a\x33\xb8\xc7\xb2"
7625 "\x9d\xe1\x12\x4f\xc0\x64\xd4\x01"
7626 "\xfe\x8c\x7a\x66\xf7\xe6\x5a\x91"
7627 "\xbb\xde\x56\x86\xab\x65\x21\x30"
7628 "\x00\x84\x65\x24\xa5\x7d\x85\xb4"
7629 "\xe3\x17\xed\x3a\xb7\x6f\xb4\x0b"
7630 "\x0b\xaf\x15\xae\x5a\x8f\xf2\x0c"
7631 "\x2f\x27\xf4\x09\xd8\xd2\x96\xb7"
7632 "\x71\xf2\xc5\x99\x4d\x7e\x7f\x75"
7633 "\x77\x89\x30\x8b\x59\xdb\xa2\xb2"
7634 "\xa0\xf3\x19\x39\x2b\xc5\x7e\x3f"
7635 "\x4f\xd9\xd3\x56\x28\x97\x44\xdc"
7636 "\xc0\x8b\x77\x24\xd9\x52\xe7\xc5"
7637 "\xaf\xf6\x7d\x59\xb2\x44\x05\x1d"
7638 "\xb1\xb0\x11\xa5\x0f\xec\x33\xe1"
7639 "\x6d\x1b\x4e\x1f\xff\x57\x91\xb4"
7640 "\x5b\x9a\x96\xc5\x53\xbc\xae\x20"
7641 "\x3c\xbb\x14\xe2\xe8\x22\x33\xc1"
7642 "\x5e\x76\x9e\x46\x99\xf6\x2a\x15"
7643 "\xc6\x97\x02\xa0\x66\x43\xd1\xa6"
7644 "\x31\xa6\x9f\xfb\xf4\xd3\x69\xe5"
7645 "\xcd\x76\x95\xb8\x7a\x82\x7f\x21"
7646 "\x45\xff\x3f\xce\x55\xf6\x95\x10"
7647 "\x08\x77\x10\x43\xc6\xf3\x09\xe5"
7648 "\x68\xe7\x3c\xad\x00\x52\x45\x0d"
7649 "\xfe\x2d\xc6\xc2\x94\x8c\x12\x1d"
7650 "\xe6\x25\xae\x98\x12\x8e\x19\x9c"
7651 "\x81\x68\xb1\x11\xf6\x69\xda\xe3"
7652 "\x62\x08\x18\x7a\x25\x49\x28\xac"
7653 "\xba\x71\x12\x0b\xe4\xa2\xe5\xc7"
7654 "\x5d\x8e\xec\x49\x40\x21\xbf\x5a"
7655 "\x98\xf3\x02\x68\x55\x03\x7f\x8a"
7656 "\xe5\x94\x0c\x32\x5c\x07\x82\x63"
7657 "\xaf\x6f\x91\x40\x84\x8e\x52\x25"
7658 "\xd0\xb0\x29\x53\x05\xe2\x50\x7a"
7659 "\x34\xeb\xc9\x46\x20\xa8\x3d\xde"
7660 "\x7f\x16\x5f\x36\xc5\x2e\xdc\xd1"
7661 "\x15\x47\xc7\x50\x40\x6d\x91\xc5"
7662 "\xe7\x93\x95\x1a\xd3\x57\xbc\x52"
7663 "\x33\xee\x14\x19\x22\x52\x89\xa7"
7664 "\x4a\x25\x56\x77\x4b\xca\xcf\x0a"
7665 "\xe1\xf5\x35\x85\x30\x7e\x59\x4a"
7666 "\xbd\x14\x5b\xdf\xe3\x46\xcb\xac"
7667 "\x1f\x6c\x96\x0e\xf4\x81\xd1\x99"
7668 "\xca\x88\x63\x3d\x02\x58\x6b\xa9"
7669 "\xe5\x9f\xb3\x00\xb2\x54\xc6\x74"
7670 "\x1c\xbf\x46\xab\x97\xcc\xf8\x54"
7671 "\x04\x07\x08\x52\xe6\xc0\xda\x93"
7672 "\x74\x7d\x93\x99\x5d\x78\x68\xa6"
7673 "\x2e\x6b\xd3\x6a\x69\xcc\x12\x6b"
7674 "\xd4\xc7\xa5\xc6\xe7\xf6\x03\x04"
7675 "\x5d\xcd\x61\x5e\x17\x40\xdc\xd1"
7676 "\x5c\xf5\x08\xdf\x5c\x90\x85\xa4"
7677 "\xaf\xf6\x78\xbb\x0d\xf1\xf4\xa4"
7678 "\x54\x26\x72\x9e\x61\xfa\x86\xcf"
7679 "\xe8\x9e\xa1\xe0\xc7\x48\x23\xae"
7680 "\x5a\x90\xae\x75\x0a\x74\x18\x89"
7681 "\x05\xb1\x92\xb2\x7f\xd0\x1b\xa6"
7682 "\x62\x07\x25\x01\xc7\xc2\x4f\xf9"
7683 "\xe8\xfe\x63\x95\x80\x07\xb4\x26"
7684 "\xcc\xd1\x26\xb6\xc4\x3f\x9e\xcb"
7685 "\x8e\x3b\x2e\x44\x16\xd3\x10\x9a"
7686 "\x95\x08\xeb\xc8\xcb\xeb\xbf\x6f"
7687 "\x0b\xcd\x1f\xc8\xca\x86\xaa\xec"
7688 "\x33\xe6\x69\xf4\x45\x25\x86\x3a"
7689 "\x22\x94\x4f\x00\x23\x6a\x44\xc2"
7690 "\x49\x97\x33\xab\x36\x14\x0a\x70"
7691 "\x24\xc3\xbe\x04\x3b\x79\xa0\xf9"
7692 "\xb8\xe7\x76\x29\x22\x83\xd7\xf2"
7693 "\x94\xf4\x41\x49\xba\x5f\x7b\x07"
7694 "\xb5\xfb\xdb\x03\x1a\x9f\xb6\x4c"
7695 "\xc2\x2e\x37\x40\x49\xc3\x38\x16"
7696 "\xe2\x4f\x77\x82\xb0\x68\x4c\x71"
7697 "\x1d\x57\x61\x9c\xd9\x4e\x54\x99"
7698 "\x47\x13\x28\x73\x3c\xbb\x00\x90"
7699 "\xf3\x4d\xc9\x0e\xfd\xe7\xb1\x71"
7700 "\xd3\x15\x79\xbf\xcc\x26\x2f\xbd"
7701 "\xad\x6c\x50\x69\x6c\x3e\x6d\x80"
7702 "\x9a\xea\x78\xaf\x19\xb2\x0d\x4d"
7703 "\xad\x04\x07\xae\x22\x90\x4a\x93"
7704 "\x32\x0e\x36\x9b\x1b\x46\xba\x3b"
7705 "\xb4\xac\xc6\xd1\xa2\x31\x53\x3b"
7706 "\x2a\x3d\x45\xfe\x03\x61\x10\x85"
7707 "\x17\x69\xa6\x78\xcc\x6c\x87\x49"
7708 "\x53\xf9\x80\x10\xde\x80\xa2\x41"
7709 "\x6a\xc3\x32\x02\xad\x6d\x3c\x56"
7710 "\x00\x71\x51\x06\xa7\xbd\xfb\xef"
7711 "\x3c\xb5\x9f\xfc\x48\x7d\x53\x7c"
7712 "\x66\xb0\x49\x23\xc4\x47\x10\x0e"
7713 "\xe5\x6c\x74\x13\xe6\xc5\x3f\xaa"
7714 "\xde\xff\x07\x44\xdd\x56\x1b\xad"
7715 "\x09\x77\xfb\x5b\x12\xb8\x0d\x38"
7716 "\x17\x37\x35\x7b\x9b\xbc\xfe\xd4"
7717 "\x7e\x8b\xda\x7e\x5b\x04\xa7\x22"
7718 "\xa7\x31\xa1\x20\x86\xc7\x1b\x99"
7719 "\xdb\xd1\x89\xf4\x94\xa3\x53\x69"
7720 "\x8d\xe7\xe8\x74\x11\x8d\x74\xd6"
7721 "\x07\x37\x91\x9f\xfd\x67\x50\x3a"
7722 "\xc9\xe1\xf4\x36\xd5\xa0\x47\xd1"
7723 "\xf9\xe5\x39\xa3\x31\xac\x07\x36"
7724 "\x23\xf8\x66\x18\x14\x28\x34\x0f"
7725 "\xb8\xd0\xe7\x29\xb3\x04\x4b\x55"
7726 "\x01\x41\xb2\x75\x8d\xcb\x96\x85"
7727 "\x3a\xfb\xab\x2b\x9e\xfa\x58\x20"
7728 "\x44\x1f\xc0\x14\x22\x75\x61\xe8"
7729 "\xaa\x19\xcf\xf1\x82\x56\xf4\xd7"
7730 "\x78\x7b\x3d\x5f\xb3\x9e\x0b\x8a"
7731 "\x57\x50\xdb\x17\x41\x65\x4d\xa3"
7732 "\x02\xc9\x9c\x9c\x53\xfb\x39\x39"
7733 "\x9b\x1d\x72\x24\xda\xb7\x39\xbe"
7734 "\x13\x3b\xfa\x29\xda\x9e\x54\x64"
7735 "\x6e\xba\xd8\xa1\xcb\xb3\x36\xfa"
7736 "\xcb\x47\x85\xe9\x61\x38\xbc\xbe"
7737 "\xc5\x00\x38\x2a\x54\xf7\xc4\xb9"
7738 "\xb3\xd3\x7b\xa0\xa0\xf8\x72\x7f"
7739 "\x8c\x8e\x82\x0e\xc6\x1c\x75\x9d"
7740 "\xca\x8e\x61\x87\xde\xad\x80\xd2"
7741 "\xf5\xf9\x80\xef\x15\x75\xaf\xf5"
7742 "\x80\xfb\xff\x6d\x1e\x25\xb7\x40"
7743 "\x61\x6a\x39\x5a\x6a\xb5\x31\xab"
7744 "\x97\x8a\x19\x89\x44\x40\xc0\xa6"
7745 "\xb4\x4e\x30\x32\x7b\x13\xe7\x67"
7746 "\xa9\x8b\x57\x04\xc2\x01\xa6\xf4"
7747 "\x28\x99\xad\x2c\x76\xa3\x78\xc2"
7748 "\x4a\xe6\xca\x5c\x50\x6a\xc1\xb0"
7749 "\x62\x4b\x10\x8e\x7c\x17\x43\xb3"
7750 "\x17\x66\x1c\x3e\x8d\x69\xf0\x5a"
7751 "\x71\xf5\x97\xdc\xd1\x45\xdd\x28"
7752 "\xf3\x5d\xdf\x53\x7b\x11\xe5\xbc"
7753 "\x4c\xdb\x1b\x51\x6b\xe9\xfb\x3d"
7754 "\xc1\xc3\x2c\xb9\x71\xf5\xb6\xb2"
7755 "\x13\x36\x79\x80\x53\xe8\xd3\xa6"
7756 "\x0a\xaf\xfd\x56\x97\xf7\x40\x8e"
7757 "\x45\xce\xf8\xb0\x9e\x5c\x33\x82"
7758 "\xb0\x44\x56\xfc\x05\x09\xe9\x2a"
7759 "\xac\x26\x80\x14\x1d\xc8\x3a\x35"
7760 "\x4c\x82\x97\xfd\x76\xb7\xa9\x0a"
7761 "\x35\x58\x79\x8e\x0f\x66\xea\xaf"
7762 "\x51\x6c\x09\xa9\x6e\x9b\xcb\x9a"
7763 "\x31\x47\xa0\x2f\x7c\x71\xb4\x4a"
7764 "\x11\xaa\x8c\x66\xc5\x64\xe6\x3a"
7765 "\x54\xda\x24\x6a\xc4\x41\x65\x46"
7766 "\x82\xa0\x0a\x0f\x5f\xfb\x25\xd0"
7767 "\x2c\x91\xa7\xee\xc4\x81\x07\x86"
7768 "\x75\x5e\x33\x69\x97\xe4\x2c\xa8"
7769 "\x9d\x9f\x0b\x6a\xbe\xad\x98\xda"
7770 "\x6d\x94\x41\xda\x2c\x1e\x89\xc4"
7771 "\xc2\xaf\x1e\x00\x05\x0b\x83\x60"
7772 "\xbd\x43\xea\x15\x23\x7f\xb9\xac"
7773 "\xee\x4f\x2c\xaf\x2a\xf3\xdf\xd0"
7774 "\xf3\x19\x31\xbb\x4a\x74\x84\x17"
7775 "\x52\x32\x2c\x7d\x61\xe4\xcb\xeb"
7776 "\x80\x38\x15\x52\xcb\x6f\xea\xe5"
7777 "\x73\x9c\xd9\x24\x69\xc6\x95\x32"
7778 "\x21\xc8\x11\xe4\xdc\x36\xd7\x93"
7779 "\x38\x66\xfb\xb2\x7f\x3a\xb9\xaf"
7780 "\x31\xdd\x93\x75\x78\x8a\x2c\x94"
7781 "\x87\x1a\x58\xec\x9e\x7d\x4d\xba"
7782 "\xe1\xe5\x4d\xfc\xbc\xa4\x2a\x14"
7783 "\xef\xcc\xa7\xec\xab\x43\x09\x18"
7784 "\xd3\xab\x68\xd1\x07\x99\x44\x47"
7785 "\xd6\x83\x85\x3b\x30\xea\xa9\x6b"
7786 "\x63\xea\xc4\x07\xfb\x43\x2f\xa4"
7787 "\xaa\xb0\xab\x03\x89\xce\x3f\x8c"
7788 "\x02\x7c\x86\x54\xbc\x88\xaf\x75"
7789 "\xd2\xdc\x63\x17\xd3\x26\xf6\x96"
7790 "\xa9\x3c\xf1\x61\x8c\x11\x18\xcc"
7791 "\xd6\xea\x5b\xe2\xcd\xf0\xf1\xb2"
7792 "\xe5\x35\x90\x1f\x85\x4c\x76\x5b"
7793 "\x66\xce\x44\xa4\x32\x9f\xe6\x7b"
7794 "\x71\x6e\x9f\x58\x15\x67\x72\x87"
7795 "\x64\x8e\x3a\x44\x45\xd4\x76\xfa"
7796 "\xc2\xf6\xef\x85\x05\x18\x7a\x9b"
7797 "\xba\x41\x54\xac\xf0\xfc\x59\x12"
7798 "\x3f\xdf\xa0\xe5\x8a\x65\xfd\x3a"
7799 "\x62\x8d\x83\x2c\x03\xbe\x05\x76"
7800 "\x2e\x53\x49\x97\x94\x33\xae\x40"
7801 "\x81\x15\xdb\x6e\xad\xaa\xf5\x4b"
7802 "\xe3\x98\x70\xdf\xe0\x7c\xcd\xdb"
7803 "\x02\xd4\x7d\x2f\xc1\xe6\xb4\xf3"
7804 "\xd7\x0d\x7a\xd9\x23\x9e\x87\x2d"
7805 "\xce\x87\xad\xcc\x72\x05\x00\x29"
7806 "\xdc\x73\x7f\x64\xc1\x15\x0e\xc2"
7807 "\xdf\xa7\x5f\xeb\x41\xa1\xcd\xef"
7808 "\x5c\x50\x79\x2a\x56\x56\x71\x8c"
7809 "\xac\xc0\x79\x50\x69\xca\x59\x32"
7810 "\x65\xf2\x54\xe4\x52\x38\x76\xd1"
7811 "\x5e\xde\x26\x9e\xfb\x75\x2e\x11"
7812 "\xb5\x10\xf4\x17\x73\xf5\x89\xc7"
7813 "\x4f\x43\x5c\x8e\x7c\xb9\x05\x52"
7814 "\x24\x40\x99\xfe\x9b\x85\x0b\x6c"
7815 "\x22\x3e\x8b\xae\x86\xa1\xd2\x79"
7816 "\x05\x68\x6b\xab\xe3\x41\x49\xed"
7817 "\x15\xa1\x8d\x40\x2d\x61\xdf\x1a"
7818 "\x59\xc9\x26\x8b\xef\x30\x4c\x88"
7819 "\x4b\x10\xf8\x8d\xa6\x92\x9f\x4b"
7820 "\xf3\xc4\x53\x0b\x89\x5d\x28\x92"
7821 "\xcf\x78\xb2\xc0\x5d\xed\x7e\xfc"
7822 "\xc0\x12\x23\x5f\x5a\x78\x86\x43"
7823 "\x6e\x27\xf7\x5a\xa7\x6a\xed\x19"
7824 "\x04\xf0\xb3\x12\xd1\xbd\x0e\x89"
7825 "\x6e\xbc\x96\xa8\xd8\x49\x39\x9f"
7826 "\x7e\x67\xf0\x2e\x3e\x01\xa9\xba"
7827 "\xec\x8b\x62\x8e\xcb\x4a\x70\x43"
7828 "\xc7\xc2\xc4\xca\x82\x03\x73\xe9"
7829 "\x11\xdf\xcf\x54\xea\xc9\xb0\x95"
7830 "\x51\xc0\x13\x3d\x92\x05\xfa\xf4"
7831 "\xa9\x34\xc8\xce\x6c\x3d\x54\xcc"
7832 "\xc4\xaf\xf1\xdc\x11\x44\x26\xa2"
7833 "\xaf\xf1\x85\x75\x7d\x03\x61\x68"
7834 "\x4e\x78\xc6\x92\x7d\x86\x7d\x77"
7835 "\xdc\x71\x72\xdb\xc6\xae\xa1\xcb"
7836 "\x70\x9a\x0b\x19\xbe\x4a\x6c\x2a"
7837 "\xe2\xba\x6c\x64\x9a\x13\x28\xdf"
7838 "\x85\x75\xe6\x43\xf6\x87\x08\x68"
7839 "\x6e\xba\x6e\x79\x9f\x04\xbc\x23"
7840 "\x50\xf6\x33\x5c\x1f\x24\x25\xbe"
7841 "\x33\x47\x80\x45\x56\xa3\xa7\xd7"
7842 "\x7a\xb1\x34\x0b\x90\x3c\x9c\xad"
7843 "\x44\x5f\x9e\x0e\x9d\xd4\xbd\x93"
7844 "\x5e\xfa\x3c\xe0\xb0\xd9\xed\xf3"
7845 "\xd6\x2e\xff\x24\xd8\x71\x6c\xed"
7846 "\xaf\x55\xeb\x22\xac\x93\x68\x32"
7847 "\x05\x5b\x47\xdd\xc6\x4a\xcb\xc7"
7848 "\x10\xe1\x3c\x92\x1a\xf3\x23\x78"
7849 "\x2b\xa1\xd2\x80\xf4\x12\xb1\x20"
7850 "\x8f\xff\x26\x35\xdd\xfb\xc7\x4e"
7851 "\x78\xf1\x2d\x50\x12\x77\xa8\x60"
7852 "\x7c\x0f\xf5\x16\x2f\x63\x70\x2a"
7853 "\xc0\x96\x80\x4e\x0a\xb4\x93\x35"
7854 "\x5d\x1d\x3f\x56\xf7\x2f\xbb\x90"
7855 "\x11\x16\x8f\xa2\xec\x47\xbe\xac"
7856 "\x56\x01\x26\x56\xb1\x8c\xb2\x10"
7857 "\xf9\x1a\xca\xf5\xd1\xb7\x39\x20"
7858 "\x63\xf1\x69\x20\x4f\x13\x12\x1f"
7859 "\x5b\x65\xfc\x98\xf7\xc4\x7a\xbe"
7860 "\xf7\x26\x4d\x2b\x84\x7b\x42\xad"
7861 "\xd8\x7a\x0a\xb4\xd8\x74\xbf\xc1"
7862 "\xf0\x6e\xb4\x29\xa3\xbb\xca\x46"
7863 "\x67\x70\x6a\x2d\xce\x0e\xa2\x8a"
7864 "\xa9\x87\xbf\x05\xc4\xc1\x04\xa3"
7865 "\xab\xd4\x45\x43\x8c\xb6\x02\xb0"
7866 "\x41\xc8\xfc\x44\x3d\x59\xaa\x2e"
7867 "\x44\x21\x2a\x8d\x88\x9d\x57\xf4"
7868 "\xa0\x02\x77\xb8\xa6\xa0\xe6\x75"
7869 "\x5c\x82\x65\x3e\x03\x5c\x29\x8f"
7870 "\x38\x55\xab\x33\x26\xef\x9f\x43"
7871 "\x52\xfd\x68\xaf\x36\xb4\xbb\x9a"
7872 "\x58\x09\x09\x1b\xc3\x65\x46\x46"
7873 "\x1d\xa7\x94\x18\x23\x50\x2c\xca"
7874 "\x2c\x55\x19\x97\x01\x9d\x93\x3b"
7875 "\x63\x86\xf2\x03\x67\x45\xd2\x72"
7876 "\x28\x52\x6c\xf4\xe3\x1c\xb5\x11"
7877 "\x13\xf1\xeb\x21\xc7\xd9\x56\x82"
7878 "\x2b\x82\x39\xbd\x69\x54\xed\x62"
7879 "\xc3\xe2\xde\x73\xd4\x6a\x12\xae"
7880 "\x13\x21\x7f\x4b\x5b\xfc\xbf\xe8"
7881 "\x2b\xbe\x56\xba\x68\x8b\x9a\xb1"
7882 "\x6e\xfa\xbf\x7e\x5a\x4b\xf1\xac"
7883 "\x98\x65\x85\xd1\x93\x53\xd3\x7b"
7884 "\x09\xdd\x4b\x10\x6d\x84\xb0\x13"
7885 "\x65\xbd\xcf\x52\x09\xc4\x85\xe2"
7886 "\x84\x74\x15\x65\xb7\xf7\x51\xaf"
7887 "\x55\xad\xa4\xd1\x22\x54\x70\x94"
7888 "\xa0\x1c\x90\x41\xfd\x99\xd7\x5a"
7889 "\x31\xef\xaa\x25\xd0\x7f\x4f\xea"
7890 "\x1d\x55\x42\xe5\x49\xb0\xd0\x46"
7891 "\x62\x36\x43\xb2\x82\x15\x75\x50"
7892 "\xa4\x72\xeb\x54\x27\x1f\x8a\xe4"
7893 "\x7d\xe9\x66\xc5\xf1\x53\xa4\xd1"
7894 "\x0c\xeb\xb8\xf8\xbc\xd4\xe2\xe7"
7895 "\xe1\xf8\x4b\xcb\xa9\xa1\xaf\x15"
7896 "\x83\xcb\x72\xd0\x33\x79\x00\x2d"
7897 "\x9f\xd7\xf1\x2e\x1e\x10\xe4\x45"
7898 "\xc0\x75\x3a\x39\xea\x68\xf7\x5d"
7899 "\x1b\x73\x8f\xe9\x8e\x0f\x72\x47"
7900 "\xae\x35\x0a\x31\x7a\x14\x4d\x4a"
7901 "\x6f\x47\xf7\x7e\x91\x6e\x74\x8b"
7902 "\x26\x47\xf9\xc3\xf9\xde\x70\xf5"
7903 "\x61\xab\xa9\x27\x9f\x82\xe4\x9c"
7904 "\x89\x91\x3f\x2e\x6a\xfd\xb5\x49"
7905 "\xe9\xfd\x59\x14\x36\x49\x40\x6d"
7906 "\x32\xd8\x85\x42\xf3\xa5\xdf\x0c"
7907 "\xa8\x27\xd7\x54\xe2\x63\x2f\xf2"
7908 "\x7e\x8b\x8b\xe7\xf1\x9a\x95\x35"
7909 "\x43\xdc\x3a\xe4\xb6\xf4\xd0\xdf"
7910 "\x9c\xcb\x94\xf3\x21\xa0\x77\x50"
7911 "\xe2\xc6\xc4\xc6\x5f\x09\x64\x5b"
7912 "\x92\x90\xd8\xe1\xd1\xed\x4b\x42"
7913 "\xd7\x37\xaf\x65\x3d\x11\x39\xb6"
7914 "\x24\x8a\x60\xae\xd6\x1e\xbf\x0e"
7915 "\x0d\xd7\xdc\x96\x0e\x65\x75\x4e"
7916 "\x29\x06\x9d\xa4\x51\x3a\x10\x63"
7917 "\x8f\x17\x07\xd5\x8e\x3c\xf4\x28"
7918 "\x00\x5a\x5b\x05\x19\xd8\xc0\x6c"
7919 "\xe5\x15\xe4\x9c\x9d\x71\x9d\x5e"
7920 "\x94\x29\x1a\xa7\x80\xfa\x0e\x33"
7921 "\x03\xdd\xb7\x3e\x9a\xa9\x26\x18"
7922 "\x37\xa9\x64\x08\x4d\x94\x5a\x88"
7923 "\xca\x35\xce\x81\x02\xe3\x1f\x1b"
7924 "\x89\x1a\x77\x85\xe3\x41\x6d\x32"
7925 "\x42\x19\x23\x7d\xc8\x73\xee\x25"
7926 "\x85\x0d\xf8\x31\x25\x79\x1b\x6f"
7927 "\x79\x25\xd2\xd8\xd4\x23\xfd\xf7"
7928 "\x82\x36\x6a\x0c\x46\x22\x15\xe9"
7929 "\xff\x72\x41\x91\x91\x7d\x3a\xb7"
7930 "\xdd\x65\x99\x70\xf6\x8d\x84\xf8"
7931 "\x67\x15\x20\x11\xd6\xb2\x55\x7b"
7932 "\xdb\x87\xee\xef\x55\x89\x2a\x59"
7933 "\x2b\x07\x8f\x43\x8a\x59\x3c\x01"
7934 "\x8b\x65\x54\xa1\x66\xd5\x38\xbd"
7935 "\xc6\x30\xa9\xcc\x49\xb6\xa8\x1b"
7936 "\xb8\xc0\x0e\xe3\x45\x28\xe2\xff"
7937 "\x41\x9f\x7e\x7c\xd1\xae\x9e\x25"
7938 "\x3f\x4c\x7c\x7c\xf4\xa8\x26\x4d"
7939 "\x5c\xfd\x4b\x27\x18\xf9\x61\x76"
7940 "\x48\xba\x0c\x6b\xa9\x4d\xfc\xf5"
7941 "\x3b\x35\x7e\x2f\x4a\xa9\xc2\x9a"
7942 "\xae\xab\x86\x09\x89\xc9\xc2\x40"
7943 "\x39\x2c\x81\xb3\xb8\x17\x67\xc2"
7944 "\x0d\x32\x4a\x3a\x67\x81\xd7\x1a"
7945 "\x34\x52\xc5\xdb\x0a\xf5\x63\x39"
7946 "\xea\x1f\xe1\x7c\xa1\x9e\xc1\x35"
7947 "\xe3\xb1\x18\x45\x67\xf9\x22\x38"
7948 "\x95\xd9\x34\x34\x86\xc6\x41\x94"
7949 "\x15\xf9\x5b\x41\xa6\x87\x8b\xf8"
7950 "\xd5\xe1\x1b\xe2\x5b\xf3\x86\x10"
7951 "\xff\xe6\xae\x69\x76\xbc\x0d\xb4"
7952 "\x09\x90\x0c\xa2\x65\x0c\xad\x74"
7953 "\xf5\xd7\xff\xda\xc1\xce\x85\xbe"
7954 "\x00\xa7\xff\x4d\x2f\x65\xd3\x8c"
7955 "\x86\x2d\x05\xe8\xed\x3e\x6b\x8b"
7956 "\x0f\x3d\x83\x8c\xf1\x1d\x5b\x96"
7957 "\x2e\xb1\x9c\xc2\x98\xe1\x70\xb9"
7958 "\xba\x5c\x8a\x43\xd6\x34\xa7\x2d"
7959 "\xc9\x92\xae\xf2\xa5\x7b\x05\x49"
7960 "\xa7\x33\x34\x86\xca\xe4\x96\x23"
7961 "\x76\x5b\xf2\xc6\xf1\x51\x28\x42"
7962 "\x7b\xcc\x76\x8f\xfa\xa2\xad\x31"
7963 "\xd4\xd6\x7a\x6d\x25\x25\x54\xe4"
7964 "\x3f\x50\x59\xe1\x5c\x05\xb7\x27"
7965 "\x48\xbf\x07\xec\x1b\x13\xbe\x2b"
7966 "\xa1\x57\x2b\xd5\xab\xd7\xd0\x4c"
7967 "\x1e\xcb\x71\x9b\xc5\x90\x85\xd3"
7968 "\xde\x59\xec\x71\xeb\x89\xbb\xd0"
7969 "\x09\x50\xe1\x16\x3f\xfd\x1c\x34"
7970 "\xc3\x1c\xa1\x10\x77\x53\x98\xef"
7971 "\xf2\xfd\xa5\x01\x59\xc2\x9b\x26"
7972 "\xc7\x42\xd9\x49\xda\x58\x2b\x6e"
7973 "\x9f\x53\x19\x76\x7e\xd9\xc9\x0e"
7974 "\x68\xc8\x7f\x51\x22\x42\xef\x49"
7975 "\xa4\x55\xb6\x36\xac\x09\xc7\x31"
7976 "\x88\x15\x4b\x2e\x8f\x3a\x08\xf7"
7977 "\xd8\xf7\xa8\xc5\xa9\x33\xa6\x45"
7978 "\xe4\xc4\x94\x76\xf3\x0d\x8f\x7e"
7979 "\xc8\xf6\xbc\x23\x0a\xb6\x4c\xd3"
7980 "\x6a\xcd\x36\xc2\x90\x5c\x5c\x3c"
7981 "\x65\x7b\xc2\xd6\xcc\xe6\x0d\x87"
7982 "\x73\x2e\x71\x79\x16\x06\x63\x28"
7983 "\x09\x15\xd8\x89\x38\x38\x3d\xb5"
7984 "\x42\x1c\x08\x24\xf7\x2a\xd2\x9d"
7985 "\xc8\xca\xef\xf9\x27\xd8\x07\x86"
7986 "\xf7\x43\x0b\x55\x15\x3f\x9f\x83"
7987 "\xef\xdc\x49\x9d\x2a\xc1\x54\x62"
7988 "\xbd\x9b\x66\x55\x9f\xb7\x12\xf3"
7989 "\x1b\x4d\x9d\x2a\x5c\xed\x87\x75"
7990 "\x87\x26\xec\x61\x2c\xb4\x0f\x89"
7991 "\xb0\xfb\x2e\x68\x5d\x15\xc7\x8d"
7992 "\x2e\xc0\xd9\xec\xaf\x4f\xd2\x25"
7993 "\x29\xe8\xd2\x26\x2b\x67\xe9\xfc"
7994 "\x2b\xa8\x67\x96\x12\x1f\x5b\x96"
7995 "\xc6\x14\x53\xaf\x44\xea\xd6\xe2"
7996 "\x94\x98\xe4\x12\x93\x4c\x92\xe0"
7997 "\x18\xa5\x8d\x2d\xe4\x71\x3c\x47"
7998 "\x4c\xf7\xe6\x47\x9e\xc0\x68\xdf"
7999 "\xd4\xf5\x5a\x74\xb1\x2b\x29\x03"
8000 "\x19\x07\xaf\x90\x62\x5c\x68\x98"
8001 "\x48\x16\x11\x02\x9d\xee\xb4\x9b"
8002 "\xe5\x42\x7f\x08\xfd\x16\x32\x0b"
8003 "\xd0\xb3\xfa\x2b\xb7\x99\xf9\x29"
8004 "\xcd\x20\x45\x9f\xb3\x1a\x5d\xa2"
8005 "\xaf\x4d\xe0\xbd\x42\x0d\xbc\x74"
8006 "\x99\x9c\x8e\x53\x1a\xb4\x3e\xbd"
8007 "\xa2\x9a\x2d\xf7\xf8\x39\x0f\x67"
8008 "\x63\xfc\x6b\xc0\xaf\xb3\x4b\x4f"
8009 "\x55\xc4\xcf\xa7\xc8\x04\x11\x3e"
8010 "\x14\x32\xbb\x1b\x38\x77\xd6\x7f"
8011 "\x54\x4c\xdf\x75\xf3\x07\x2d\x33"
8012 "\x9b\xa8\x20\xe1\x7b\x12\xb5\xf3"
8013 "\xef\x2f\xce\x72\xe5\x24\x60\xc1"
8014 "\x30\xe2\xab\xa1\x8e\x11\x09\xa8"
8015 "\x21\x33\x44\xfe\x7f\x35\x32\x93"
8016 "\x39\xa7\xad\x8b\x79\x06\xb2\xcb"
8017 "\x4e\xa9\x5f\xc7\xba\x74\x29\xec"
8018 "\x93\xa0\x4e\x54\x93\xc0\xbc\x55"
8019 "\x64\xf0\x48\xe5\x57\x99\xee\x75"
8020 "\xd6\x79\x0f\x66\xb7\xc6\x57\x76"
8021 "\xf7\xb7\xf3\x9c\xc5\x60\xe8\x7f"
8022 "\x83\x76\xd6\x0e\xaa\xe6\x90\x39"
8023 "\x1d\xa6\x32\x6a\x34\xe3\x55\xf8"
8024 "\x58\xa0\x58\x7d\x33\xe0\x22\x39"
8025 "\x44\x64\x87\x86\x5a\x2f\xa7\x7e"
8026 "\x0f\x38\xea\xb0\x30\xcc\x61\xa5"
8027 "\x6a\x32\xae\x1e\xf7\xe9\xd0\xa9"
8028 "\x0c\x32\x4b\xb5\x49\x28\xab\x85"
8029 "\x2f\x8e\x01\x36\x38\x52\xd0\xba"
8030 "\xd6\x02\x78\xf8\x0e\x3e\x9c\x8b"
8031 "\x6b\x45\x99\x3f\x5c\xfe\x58\xf1"
8032 "\x5c\x94\x04\xe1\xf5\x18\x6d\x51"
8033 "\xb2\x5d\x18\x20\xb6\xc2\x9a\x42"
8034 "\x1d\xb3\xab\x3c\xb6\x3a\x13\x03"
8035 "\xb2\x46\x82\x4f\xfc\x64\xbc\x4f"
8036 "\xca\xfa\x9c\xc0\xd5\xa7\xbd\x11"
8037 "\xb7\xe4\x5a\xf6\x6f\x4d\x4d\x54"
8038 "\xea\xa4\x98\x66\xd4\x22\x3b\xd3"
8039 "\x8f\x34\x47\xd9\x7c\xf4\x72\x3b"
8040 "\x4d\x02\x77\xf6\xd6\xdd\x08\x0a"
8041 "\x81\xe1\x86\x89\x3e\x56\x10\x3c"
8042 "\xba\xd7\x81\x8c\x08\xbc\x8b\xe2"
8043 "\x53\xec\xa7\x89\xee\xc8\x56\xb5"
8044 "\x36\x2c\xb2\x03\xba\x99\xdd\x7c"
8045 "\x48\xa0\xb0\xbc\x91\x33\xe9\xa8"
8046 "\xcb\xcd\xcf\x59\x5f\x1f\x15\xe2"
8047 "\x56\xf5\x4e\x01\x35\x27\x45\x77"
8048 "\x47\xc8\xbc\xcb\x7e\x39\xc1\x97"
8049 "\x28\xd3\x84\xfc\x2c\x3e\xc8\xad"
8050 "\x9c\xf8\x8a\x61\x9c\x28\xaa\xc5"
8051 "\x99\x20\x43\x85\x9d\xa5\xe2\x8b"
8052 "\xb8\xae\xeb\xd0\x32\x0d\x52\x78"
8053 "\x09\x56\x3f\xc7\xd8\x7e\x26\xfc"
8054 "\x37\xfb\x6f\x04\xfc\xfa\x92\x10"
8055 "\xac\xf8\x3e\x21\xdc\x8c\x21\x16"
8056 "\x7d\x67\x6e\xf6\xcd\xda\xb6\x98"
8057 "\x23\xab\x23\x3c\xb2\x10\xa0\x53"
8058 "\x5a\x56\x9f\xc5\xd0\xff\xbb\xe4"
8059 "\x98\x3c\x69\x1e\xdb\x38\x8f\x7e"
8060 "\x0f\xd2\x98\x88\x81\x8b\x45\x67"
8061 "\xea\x33\xf1\xeb\xe9\x97\x55\x2e"
8062 "\xd9\xaa\xeb\x5a\xec\xda\xe1\x68"
8063 "\xa8\x9d\x3c\x84\x7c\x05\x3d\x62"
8064 "\x87\x8f\x03\x21\x28\x95\x0c\x89"
8065 "\x25\x22\x4a\xb0\x93\xa9\x50\xa2"
8066 "\x2f\x57\x6e\x18\x42\x19\x54\x0c"
8067 "\x55\x67\xc6\x11\x49\xf4\x5c\xd2"
8068 "\xe9\x3d\xdd\x8b\x48\x71\x21\x00"
8069 "\xc3\x9a\x6c\x85\x74\x28\x83\x4a"
8070 "\x1b\x31\x05\xe1\x06\x92\xe7\xda"
8071 "\x85\x73\x78\x45\x20\x7f\xae\x13"
8072 "\x7c\x33\x06\x22\xf4\x83\xf9\x35"
8073 "\x3f\x6c\x71\xa8\x4e\x48\xbe\x9b"
8074 "\xce\x8a\xba\xda\xbe\x28\x08\xf7"
8075 "\xe2\x14\x8c\x71\xea\x72\xf9\x33"
8076 "\xf2\x88\x3f\xd7\xbb\x69\x6c\x29"
8077 "\x19\xdc\x84\xce\x1f\x12\x4f\xc8"
8078 "\xaf\xa5\x04\xba\x5a\xab\xb0\xd9"
8079 "\x14\x1f\x6c\x68\x98\x39\x89\x7a"
8080 "\xd9\xd8\x2f\xdf\xa8\x47\x4a\x25"
8081 "\xe2\xfb\x33\xf4\x59\x78\xe1\x68"
8082 "\x85\xcf\xfe\x59\x20\xd4\x05\x1d"
8083 "\x80\x99\xae\xbc\xca\xae\x0f\x2f"
8084 "\x65\x43\x34\x8e\x7e\xac\xd3\x93"
8085 "\x2f\xac\x6d\x14\x3d\x02\x07\x70"
8086 "\x9d\xa4\xf3\x1b\x5c\x36\xfc\x01"
8087 "\x73\x34\x85\x0c\x6c\xd6\xf1\xbd"
8088 "\x3f\xdf\xee\xf5\xd9\xba\x56\xef"
8089 "\xf4\x9b\x6b\xee\x9f\x5a\x78\x6d"
8090 "\x32\x19\xf4\xf7\xf8\x4c\x69\x0b"
8091 "\x4b\xbc\xbb\xb7\xf2\x85\xaf\x70"
8092 "\x75\x24\x6c\x54\xa7\x0e\x4d\x1d"
8093 "\x01\xbf\x08\xac\xcf\x7f\x2c\xe3"
8094 "\x14\x89\x5e\x70\x5a\x99\x92\xcd"
8095 "\x01\x84\xc8\xd2\xab\xe5\x4f\x58"
8096 "\xe7\x0f\x2f\x0e\xff\x68\xea\xfd"
8097 "\x15\xb3\x17\xe6\xb0\xe7\x85\xd8"
8098 "\x23\x2e\x05\xc7\xc9\xc4\x46\x1f"
8099 "\xe1\x9e\x49\x20\x23\x24\x4d\x7e"
8100 "\x29\x65\xff\xf4\xb6\xfd\x1a\x85"
8101 "\xc4\x16\xec\xfc\xea\x7b\xd6\x2c"
8102 "\x43\xf8\xb7\xbf\x79\xc0\x85\xcd"
8103 "\xef\xe1\x98\xd3\xa5\xf7\x90\x8c"
8104 "\xe9\x7f\x80\x6b\xd2\xac\x4c\x30"
8105 "\xa7\xc6\x61\x6c\xd2\xf9\x2c\xff"
8106 "\x30\xbc\x22\x81\x7d\x93\x12\xe4"
8107 "\x0a\xcd\xaf\xdd\xe8\xab\x0a\x1e"
8108 "\x13\xa4\x27\xc3\x5f\xf7\x4b\xbb"
8109 "\x37\x09\x4b\x91\x6f\x92\x4f\xaf"
8110 "\x52\xee\xdf\xef\x09\x6f\xf7\x5c"
8111 "\x6e\x12\x17\x72\x63\x57\xc7\xba"
8112 "\x3b\x6b\x38\x32\x73\x1b\x9c\x80"
8113 "\xc1\x7a\xc6\xcf\xcd\x35\xc0\x6b"
8114 "\x31\x1a\x6b\xe9\xd8\x2c\x29\x3f"
8115 "\x96\xfb\xb6\xcd\x13\x91\x3b\xc2"
8116 "\xd2\xa3\x31\x8d\xa4\xcd\x57\xcd"
8117 "\x13\x3d\x64\xfd\x06\xce\xe6\xdc"
8118 "\x0c\x24\x43\x31\x40\x57\xf1\x72"
8119 "\x17\xe3\x3a\x63\x6d\x35\xcf\x5d"
8120 "\x97\x40\x59\xdd\xf7\x3c\x02\xf7"
8121 "\x1c\x7e\x05\xbb\xa9\x0d\x01\xb1"
8122 "\x8e\xc0\x30\xa9\x53\x24\xc9\x89"
8123 "\x84\x6d\xaa\xd0\xcd\x91\xc2\x4d"
8124 "\x91\xb0\x89\xe2\xbf\x83\x44\xaa"
8125 "\x28\x72\x23\xa0\xc2\xad\xad\x1c"
8126 "\xfc\x3f\x09\x7a\x0b\xdc\xc5\x1b"
8127 "\x87\x13\xc6\x5b\x59\x8d\xf2\xc8"
8128 "\xaf\xdf\x11\x95",
8129 .rlen = 4100,
8130 },
8131};
8132
8133/*
8134 * CTS (Cipher Text Stealing) mode tests
8135 */
8136#define CTS_MODE_ENC_TEST_VECTORS 6
8137#define CTS_MODE_DEC_TEST_VECTORS 6
8138static struct cipher_testvec cts_mode_enc_tv_template[] = {
8139 { /* from rfc3962 */
8140 .klen = 16,
8141 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8142 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8143 .ilen = 17,
8144 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8145 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8146 "\x20",
8147 .rlen = 17,
8148 .result = "\xc6\x35\x35\x68\xf2\xbf\x8c\xb4"
8149 "\xd8\xa5\x80\x36\x2d\xa7\xff\x7f"
8150 "\x97",
8151 }, {
8152 .klen = 16,
8153 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8154 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8155 .ilen = 31,
8156 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8157 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8158 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8159 "\x20\x47\x61\x75\x27\x73\x20",
8160 .rlen = 31,
8161 .result = "\xfc\x00\x78\x3e\x0e\xfd\xb2\xc1"
8162 "\xd4\x45\xd4\xc8\xef\xf7\xed\x22"
8163 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8164 "\xc0\x7b\x25\xe2\x5e\xcf\xe5",
8165 }, {
8166 .klen = 16,
8167 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8168 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8169 .ilen = 32,
8170 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8171 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8172 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8173 "\x20\x47\x61\x75\x27\x73\x20\x43",
8174 .rlen = 32,
8175 .result = "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8176 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8177 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8178 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84",
8179 }, {
8180 .klen = 16,
8181 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8182 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8183 .ilen = 47,
8184 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8185 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8186 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8187 "\x20\x47\x61\x75\x27\x73\x20\x43"
8188 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8189 "\x70\x6c\x65\x61\x73\x65\x2c",
8190 .rlen = 47,
8191 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8192 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8193 "\xb3\xff\xfd\x94\x0c\x16\xa1\x8c"
8194 "\x1b\x55\x49\xd2\xf8\x38\x02\x9e"
8195 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8196 "\xbe\x7f\xcb\xcc\x98\xeb\xf5",
8197 }, {
8198 .klen = 16,
8199 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8200 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8201 .ilen = 48,
8202 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8203 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8204 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8205 "\x20\x47\x61\x75\x27\x73\x20\x43"
8206 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8207 "\x70\x6c\x65\x61\x73\x65\x2c\x20",
8208 .rlen = 48,
8209 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8210 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8211 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8212 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8"
8213 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8214 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8",
8215 }, {
8216 .klen = 16,
8217 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8218 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8219 .ilen = 64,
8220 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8221 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8222 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8223 "\x20\x47\x61\x75\x27\x73\x20\x43"
8224 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8225 "\x70\x6c\x65\x61\x73\x65\x2c\x20"
8226 "\x61\x6e\x64\x20\x77\x6f\x6e\x74"
8227 "\x6f\x6e\x20\x73\x6f\x75\x70\x2e",
8228 .rlen = 64,
8229 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8230 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8231 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8232 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8233 "\x48\x07\xef\xe8\x36\xee\x89\xa5"
8234 "\x26\x73\x0d\xbc\x2f\x7b\xc8\x40"
8235 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8236 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8",
8237 }
8238};
8239
8240static struct cipher_testvec cts_mode_dec_tv_template[] = {
8241 { /* from rfc3962 */
8242 .klen = 16,
8243 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8244 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8245 .rlen = 17,
8246 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8247 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8248 "\x20",
8249 .ilen = 17,
8250 .input = "\xc6\x35\x35\x68\xf2\xbf\x8c\xb4"
8251 "\xd8\xa5\x80\x36\x2d\xa7\xff\x7f"
8252 "\x97",
8253 }, {
8254 .klen = 16,
8255 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8256 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8257 .rlen = 31,
8258 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8259 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8260 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8261 "\x20\x47\x61\x75\x27\x73\x20",
8262 .ilen = 31,
8263 .input = "\xfc\x00\x78\x3e\x0e\xfd\xb2\xc1"
8264 "\xd4\x45\xd4\xc8\xef\xf7\xed\x22"
8265 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8266 "\xc0\x7b\x25\xe2\x5e\xcf\xe5",
8267 }, {
8268 .klen = 16,
8269 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8270 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8271 .rlen = 32,
8272 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8273 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8274 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8275 "\x20\x47\x61\x75\x27\x73\x20\x43",
8276 .ilen = 32,
8277 .input = "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8278 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8279 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8280 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84",
8281 }, {
8282 .klen = 16,
8283 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8284 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8285 .rlen = 47,
8286 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8287 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8288 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8289 "\x20\x47\x61\x75\x27\x73\x20\x43"
8290 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8291 "\x70\x6c\x65\x61\x73\x65\x2c",
8292 .ilen = 47,
8293 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8294 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8295 "\xb3\xff\xfd\x94\x0c\x16\xa1\x8c"
8296 "\x1b\x55\x49\xd2\xf8\x38\x02\x9e"
8297 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8298 "\xbe\x7f\xcb\xcc\x98\xeb\xf5",
8299 }, {
8300 .klen = 16,
8301 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8302 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8303 .rlen = 48,
8304 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8305 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8306 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8307 "\x20\x47\x61\x75\x27\x73\x20\x43"
8308 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8309 "\x70\x6c\x65\x61\x73\x65\x2c\x20",
8310 .ilen = 48,
8311 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8312 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8313 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8314 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8"
8315 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8316 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8",
8317 }, {
8318 .klen = 16,
8319 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8320 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8321 .rlen = 64,
8322 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8323 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8324 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8325 "\x20\x47\x61\x75\x27\x73\x20\x43"
8326 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8327 "\x70\x6c\x65\x61\x73\x65\x2c\x20"
8328 "\x61\x6e\x64\x20\x77\x6f\x6e\x74"
8329 "\x6f\x6e\x20\x73\x6f\x75\x70\x2e",
8330 .ilen = 64,
8331 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8332 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8333 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8334 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8335 "\x48\x07\xef\xe8\x36\xee\x89\xa5"
8336 "\x26\x73\x0d\xbc\x2f\x7b\xc8\x40"
8337 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8338 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8",
8339 }
8340};
8341
8342/*
8343 * Compression stuff.
8344 */
8345#define COMP_BUF_SIZE 512
8346
8347struct comp_testvec {
8348 int inlen, outlen;
8349 char input[COMP_BUF_SIZE];
8350 char output[COMP_BUF_SIZE];
8351};
8352
8353/*
8354 * Deflate test vectors (null-terminated strings).
8355 * Params: winbits=11, Z_DEFAULT_COMPRESSION, MAX_MEM_LEVEL.
8356 */
8357#define DEFLATE_COMP_TEST_VECTORS 2
8358#define DEFLATE_DECOMP_TEST_VECTORS 2
8359
8360static struct comp_testvec deflate_comp_tv_template[] = {
8361 {
8362 .inlen = 70,
8363 .outlen = 38,
8364 .input = "Join us now and share the software "
8365 "Join us now and share the software ",
8366 .output = "\xf3\xca\xcf\xcc\x53\x28\x2d\x56"
8367 "\xc8\xcb\x2f\x57\x48\xcc\x4b\x51"
8368 "\x28\xce\x48\x2c\x4a\x55\x28\xc9"
8369 "\x48\x55\x28\xce\x4f\x2b\x29\x07"
8370 "\x71\xbc\x08\x2b\x01\x00",
8371 }, {
8372 .inlen = 191,
8373 .outlen = 122,
8374 .input = "This document describes a compression method based on the DEFLATE"
8375 "compression algorithm. This document defines the application of "
8376 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
8377 .output = "\x5d\x8d\x31\x0e\xc2\x30\x10\x04"
8378 "\xbf\xb2\x2f\xc8\x1f\x10\x04\x09"
8379 "\x89\xc2\x85\x3f\x70\xb1\x2f\xf8"
8380 "\x24\xdb\x67\xd9\x47\xc1\xef\x49"
8381 "\x68\x12\x51\xae\x76\x67\xd6\x27"
8382 "\x19\x88\x1a\xde\x85\xab\x21\xf2"
8383 "\x08\x5d\x16\x1e\x20\x04\x2d\xad"
8384 "\xf3\x18\xa2\x15\x85\x2d\x69\xc4"
8385 "\x42\x83\x23\xb6\x6c\x89\x71\x9b"
8386 "\xef\xcf\x8b\x9f\xcf\x33\xca\x2f"
8387 "\xed\x62\xa9\x4c\x80\xff\x13\xaf"
8388 "\x52\x37\xed\x0e\x52\x6b\x59\x02"
8389 "\xd9\x4e\xe8\x7a\x76\x1d\x02\x98"
8390 "\xfe\x8a\x87\x83\xa3\x4f\x56\x8a"
8391 "\xb8\x9e\x8e\x5c\x57\xd3\xa0\x79"
8392 "\xfa\x02",
8393 },
8394};
8395
8396static struct comp_testvec deflate_decomp_tv_template[] = {
8397 {
8398 .inlen = 122,
8399 .outlen = 191,
8400 .input = "\x5d\x8d\x31\x0e\xc2\x30\x10\x04"
8401 "\xbf\xb2\x2f\xc8\x1f\x10\x04\x09"
8402 "\x89\xc2\x85\x3f\x70\xb1\x2f\xf8"
8403 "\x24\xdb\x67\xd9\x47\xc1\xef\x49"
8404 "\x68\x12\x51\xae\x76\x67\xd6\x27"
8405 "\x19\x88\x1a\xde\x85\xab\x21\xf2"
8406 "\x08\x5d\x16\x1e\x20\x04\x2d\xad"
8407 "\xf3\x18\xa2\x15\x85\x2d\x69\xc4"
8408 "\x42\x83\x23\xb6\x6c\x89\x71\x9b"
8409 "\xef\xcf\x8b\x9f\xcf\x33\xca\x2f"
8410 "\xed\x62\xa9\x4c\x80\xff\x13\xaf"
8411 "\x52\x37\xed\x0e\x52\x6b\x59\x02"
8412 "\xd9\x4e\xe8\x7a\x76\x1d\x02\x98"
8413 "\xfe\x8a\x87\x83\xa3\x4f\x56\x8a"
8414 "\xb8\x9e\x8e\x5c\x57\xd3\xa0\x79"
8415 "\xfa\x02",
8416 .output = "This document describes a compression method based on the DEFLATE"
8417 "compression algorithm. This document defines the application of "
8418 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
8419 }, {
8420 .inlen = 38,
8421 .outlen = 70,
8422 .input = "\xf3\xca\xcf\xcc\x53\x28\x2d\x56"
8423 "\xc8\xcb\x2f\x57\x48\xcc\x4b\x51"
8424 "\x28\xce\x48\x2c\x4a\x55\x28\xc9"
8425 "\x48\x55\x28\xce\x4f\x2b\x29\x07"
8426 "\x71\xbc\x08\x2b\x01\x00",
8427 .output = "Join us now and share the software "
8428 "Join us now and share the software ",
8429 },
8430};
8431
8432/*
8433 * LZO test vectors (null-terminated strings).
8434 */
8435#define LZO_COMP_TEST_VECTORS 2
8436#define LZO_DECOMP_TEST_VECTORS 2
8437
8438static struct comp_testvec lzo_comp_tv_template[] = {
8439 {
8440 .inlen = 70,
8441 .outlen = 46,
8442 .input = "Join us now and share the software "
8443 "Join us now and share the software ",
8444 .output = "\x00\x0d\x4a\x6f\x69\x6e\x20\x75"
8445 "\x73\x20\x6e\x6f\x77\x20\x61\x6e"
8446 "\x64\x20\x73\x68\x61\x72\x65\x20"
8447 "\x74\x68\x65\x20\x73\x6f\x66\x74"
8448 "\x77\x70\x01\x01\x4a\x6f\x69\x6e"
8449 "\x3d\x88\x00\x11\x00\x00",
8450 }, {
8451 .inlen = 159,
8452 .outlen = 133,
8453 .input = "This document describes a compression method based on the LZO "
8454 "compression algorithm. This document defines the application of "
8455 "the LZO algorithm used in UBIFS.",
8456 .output = "\x00\x2b\x54\x68\x69\x73\x20\x64"
8457 "\x6f\x63\x75\x6d\x65\x6e\x74\x20"
8458 "\x64\x65\x73\x63\x72\x69\x62\x65"
8459 "\x73\x20\x61\x20\x63\x6f\x6d\x70"
8460 "\x72\x65\x73\x73\x69\x6f\x6e\x20"
8461 "\x6d\x65\x74\x68\x6f\x64\x20\x62"
8462 "\x61\x73\x65\x64\x20\x6f\x6e\x20"
8463 "\x74\x68\x65\x20\x4c\x5a\x4f\x2b"
8464 "\x8c\x00\x0d\x61\x6c\x67\x6f\x72"
8465 "\x69\x74\x68\x6d\x2e\x20\x20\x54"
8466 "\x68\x69\x73\x2a\x54\x01\x02\x66"
8467 "\x69\x6e\x65\x73\x94\x06\x05\x61"
8468 "\x70\x70\x6c\x69\x63\x61\x74\x76"
8469 "\x0a\x6f\x66\x88\x02\x60\x09\x27"
8470 "\xf0\x00\x0c\x20\x75\x73\x65\x64"
8471 "\x20\x69\x6e\x20\x55\x42\x49\x46"
8472 "\x53\x2e\x11\x00\x00",
8473 },
8474};
8475
8476static struct comp_testvec lzo_decomp_tv_template[] = {
8477 {
8478 .inlen = 133,
8479 .outlen = 159,
8480 .input = "\x00\x2b\x54\x68\x69\x73\x20\x64"
8481 "\x6f\x63\x75\x6d\x65\x6e\x74\x20"
8482 "\x64\x65\x73\x63\x72\x69\x62\x65"
8483 "\x73\x20\x61\x20\x63\x6f\x6d\x70"
8484 "\x72\x65\x73\x73\x69\x6f\x6e\x20"
8485 "\x6d\x65\x74\x68\x6f\x64\x20\x62"
8486 "\x61\x73\x65\x64\x20\x6f\x6e\x20"
8487 "\x74\x68\x65\x20\x4c\x5a\x4f\x2b"
8488 "\x8c\x00\x0d\x61\x6c\x67\x6f\x72"
8489 "\x69\x74\x68\x6d\x2e\x20\x20\x54"
8490 "\x68\x69\x73\x2a\x54\x01\x02\x66"
8491 "\x69\x6e\x65\x73\x94\x06\x05\x61"
8492 "\x70\x70\x6c\x69\x63\x61\x74\x76"
8493 "\x0a\x6f\x66\x88\x02\x60\x09\x27"
8494 "\xf0\x00\x0c\x20\x75\x73\x65\x64"
8495 "\x20\x69\x6e\x20\x55\x42\x49\x46"
8496 "\x53\x2e\x11\x00\x00",
8497 .output = "This document describes a compression method based on the LZO "
8498 "compression algorithm. This document defines the application of "
8499 "the LZO algorithm used in UBIFS.",
8500 }, {
8501 .inlen = 46,
8502 .outlen = 70,
8503 .input = "\x00\x0d\x4a\x6f\x69\x6e\x20\x75"
8504 "\x73\x20\x6e\x6f\x77\x20\x61\x6e"
8505 "\x64\x20\x73\x68\x61\x72\x65\x20"
8506 "\x74\x68\x65\x20\x73\x6f\x66\x74"
8507 "\x77\x70\x01\x01\x4a\x6f\x69\x6e"
8508 "\x3d\x88\x00\x11\x00\x00",
8509 .output = "Join us now and share the software "
8510 "Join us now and share the software ",
8511 },
8512};
8513
8514/*
8515 * Michael MIC test vectors from IEEE 802.11i
8516 */
8517#define MICHAEL_MIC_TEST_VECTORS 6
8518
8519static struct hash_testvec michael_mic_tv_template[] = {
8520 {
8521 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
8522 .ksize = 8,
8523 .plaintext = zeroed_string,
8524 .psize = 0,
8525 .digest = "\x82\x92\x5c\x1c\xa1\xd1\x30\xb8",
8526 },
8527 {
8528 .key = "\x82\x92\x5c\x1c\xa1\xd1\x30\xb8",
8529 .ksize = 8,
8530 .plaintext = "M",
8531 .psize = 1,
8532 .digest = "\x43\x47\x21\xca\x40\x63\x9b\x3f",
8533 },
8534 {
8535 .key = "\x43\x47\x21\xca\x40\x63\x9b\x3f",
8536 .ksize = 8,
8537 .plaintext = "Mi",
8538 .psize = 2,
8539 .digest = "\xe8\xf9\xbe\xca\xe9\x7e\x5d\x29",
8540 },
8541 {
8542 .key = "\xe8\xf9\xbe\xca\xe9\x7e\x5d\x29",
8543 .ksize = 8,
8544 .plaintext = "Mic",
8545 .psize = 3,
8546 .digest = "\x90\x03\x8f\xc6\xcf\x13\xc1\xdb",
8547 },
8548 {
8549 .key = "\x90\x03\x8f\xc6\xcf\x13\xc1\xdb",
8550 .ksize = 8,
8551 .plaintext = "Mich",
8552 .psize = 4,
8553 .digest = "\xd5\x5e\x10\x05\x10\x12\x89\x86",
8554 },
8555 {
8556 .key = "\xd5\x5e\x10\x05\x10\x12\x89\x86",
8557 .ksize = 8,
8558 .plaintext = "Michael",
8559 .psize = 7,
8560 .digest = "\x0a\x94\x2b\x12\x4e\xca\xa5\x46",
8561 }
8562};
8563
8564/*
8565 * CRC32C test vectors
8566 */
8567#define CRC32C_TEST_VECTORS 14
8568
8569static struct hash_testvec crc32c_tv_template[] = {
8570 {
8571 .psize = 0,
8572 .digest = "\x00\x00\x00\x00",
8573 },
8574 {
8575 .key = "\x87\xa9\xcb\xed",
8576 .ksize = 4,
8577 .psize = 0,
8578 .digest = "\x78\x56\x34\x12",
8579 },
8580 {
8581 .key = "\xff\xff\xff\xff",
8582 .ksize = 4,
8583 .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
8584 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
8585 "\x11\x12\x13\x14\x15\x16\x17\x18"
8586 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
8587 "\x21\x22\x23\x24\x25\x26\x27\x28",
8588 .psize = 40,
8589 .digest = "\x7f\x15\x2c\x0e",
8590 },
8591 {
8592 .key = "\xff\xff\xff\xff",
8593 .ksize = 4,
8594 .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8595 "\x31\x32\x33\x34\x35\x36\x37\x38"
8596 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8597 "\x41\x42\x43\x44\x45\x46\x47\x48"
8598 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
8599 .psize = 40,
8600 .digest = "\xf6\xeb\x80\xe9",
8601 },
8602 {
8603 .key = "\xff\xff\xff\xff",
8604 .ksize = 4,
8605 .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
8606 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8607 "\x61\x62\x63\x64\x65\x66\x67\x68"
8608 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8609 "\x71\x72\x73\x74\x75\x76\x77\x78",
8610 .psize = 40,
8611 .digest = "\xed\xbd\x74\xde",
8612 },
8613 {
8614 .key = "\xff\xff\xff\xff",
8615 .ksize = 4,
8616 .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8617 "\x81\x82\x83\x84\x85\x86\x87\x88"
8618 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8619 "\x91\x92\x93\x94\x95\x96\x97\x98"
8620 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
8621 .psize = 40,
8622 .digest = "\x62\xc8\x79\xd5",
8623 },
8624 {
8625 .key = "\xff\xff\xff\xff",
8626 .ksize = 4,
8627 .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8628 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8629 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8630 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8631 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
8632 .psize = 40,
8633 .digest = "\xd0\x9a\x97\xba",
8634 },
8635 {
8636 .key = "\xff\xff\xff\xff",
8637 .ksize = 4,
8638 .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8639 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8640 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8641 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8642 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8643 .psize = 40,
8644 .digest = "\x13\xd9\x29\x2b",
8645 },
8646 {
8647 .key = "\x80\xea\xd3\xf1",
8648 .ksize = 4,
8649 .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8650 "\x31\x32\x33\x34\x35\x36\x37\x38"
8651 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8652 "\x41\x42\x43\x44\x45\x46\x47\x48"
8653 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
8654 .psize = 40,
8655 .digest = "\x0c\xb5\xe2\xa2",
8656 },
8657 {
8658 .key = "\xf3\x4a\x1d\x5d",
8659 .ksize = 4,
8660 .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
8661 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8662 "\x61\x62\x63\x64\x65\x66\x67\x68"
8663 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8664 "\x71\x72\x73\x74\x75\x76\x77\x78",
8665 .psize = 40,
8666 .digest = "\xd1\x7f\xfb\xa6",
8667 },
8668 {
8669 .key = "\x2e\x80\x04\x59",
8670 .ksize = 4,
8671 .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8672 "\x81\x82\x83\x84\x85\x86\x87\x88"
8673 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8674 "\x91\x92\x93\x94\x95\x96\x97\x98"
8675 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
8676 .psize = 40,
8677 .digest = "\x59\x33\xe6\x7a",
8678 },
8679 {
8680 .key = "\xa6\xcc\x19\x85",
8681 .ksize = 4,
8682 .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8683 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8684 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8685 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8686 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
8687 .psize = 40,
8688 .digest = "\xbe\x03\x01\xd2",
8689 },
8690 {
8691 .key = "\x41\xfc\xfe\x2d",
8692 .ksize = 4,
8693 .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8694 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8695 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8696 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8697 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8698 .psize = 40,
8699 .digest = "\x75\xd3\xc5\x24",
8700 },
8701 {
8702 .key = "\xff\xff\xff\xff",
8703 .ksize = 4,
8704 .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
8705 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
8706 "\x11\x12\x13\x14\x15\x16\x17\x18"
8707 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
8708 "\x21\x22\x23\x24\x25\x26\x27\x28"
8709 "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8710 "\x31\x32\x33\x34\x35\x36\x37\x38"
8711 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8712 "\x41\x42\x43\x44\x45\x46\x47\x48"
8713 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
8714 "\x51\x52\x53\x54\x55\x56\x57\x58"
8715 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8716 "\x61\x62\x63\x64\x65\x66\x67\x68"
8717 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8718 "\x71\x72\x73\x74\x75\x76\x77\x78"
8719 "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8720 "\x81\x82\x83\x84\x85\x86\x87\x88"
8721 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8722 "\x91\x92\x93\x94\x95\x96\x97\x98"
8723 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
8724 "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8725 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8726 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8727 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8728 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8"
8729 "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8730 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8731 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8732 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8733 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8734 .psize = 240,
8735 .digest = "\x75\xd3\xc5\x24",
8736 .np = 2,
8737 .tap = { 31, 209 }
8738 },
8739};
8740
8741/* 44/*
8742 * Cipher speed tests 45 * Cipher speed tests
8743 */ 46 */
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
new file mode 100644
index 000000000000..b828c6cf1b1d
--- /dev/null
+++ b/crypto/testmgr.c
@@ -0,0 +1,1868 @@
1/*
2 * Algorithm testing framework and tests.
3 *
4 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
5 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
6 * Copyright (c) 2007 Nokia Siemens Networks
7 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
12 * any later version.
13 *
14 */
15
16#include <crypto/hash.h>
17#include <linux/err.h>
18#include <linux/module.h>
19#include <linux/scatterlist.h>
20#include <linux/slab.h>
21#include <linux/string.h>
22
23#include "internal.h"
24#include "testmgr.h"
25
26/*
27 * Need slab memory for testing (size in number of pages).
28 */
29#define XBUFSIZE 8
30
31/*
32 * Indexes into the xbuf to simulate cross-page access.
33 */
34#define IDX1 32
35#define IDX2 32400
36#define IDX3 1
37#define IDX4 8193
38#define IDX5 22222
39#define IDX6 17101
40#define IDX7 27333
41#define IDX8 3000
42
43/*
44* Used by test_cipher()
45*/
46#define ENCRYPT 1
47#define DECRYPT 0
48
49struct tcrypt_result {
50 struct completion completion;
51 int err;
52};
53
54struct aead_test_suite {
55 struct {
56 struct aead_testvec *vecs;
57 unsigned int count;
58 } enc, dec;
59};
60
61struct cipher_test_suite {
62 struct {
63 struct cipher_testvec *vecs;
64 unsigned int count;
65 } enc, dec;
66};
67
68struct comp_test_suite {
69 struct {
70 struct comp_testvec *vecs;
71 unsigned int count;
72 } comp, decomp;
73};
74
75struct hash_test_suite {
76 struct hash_testvec *vecs;
77 unsigned int count;
78};
79
80struct alg_test_desc {
81 const char *alg;
82 int (*test)(const struct alg_test_desc *desc, const char *driver,
83 u32 type, u32 mask);
84
85 union {
86 struct aead_test_suite aead;
87 struct cipher_test_suite cipher;
88 struct comp_test_suite comp;
89 struct hash_test_suite hash;
90 } suite;
91};
92
93static unsigned int IDX[8] = { IDX1, IDX2, IDX3, IDX4, IDX5, IDX6, IDX7, IDX8 };
94
95static char *xbuf[XBUFSIZE];
96static char *axbuf[XBUFSIZE];
97
98static void hexdump(unsigned char *buf, unsigned int len)
99{
100 print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET,
101 16, 1,
102 buf, len, false);
103}
104
105static void tcrypt_complete(struct crypto_async_request *req, int err)
106{
107 struct tcrypt_result *res = req->data;
108
109 if (err == -EINPROGRESS)
110 return;
111
112 res->err = err;
113 complete(&res->completion);
114}
115
116static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template,
117 unsigned int tcount)
118{
119 const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm));
120 unsigned int i, j, k, temp;
121 struct scatterlist sg[8];
122 char result[64];
123 struct ahash_request *req;
124 struct tcrypt_result tresult;
125 int ret;
126 void *hash_buff;
127
128 init_completion(&tresult.completion);
129
130 req = ahash_request_alloc(tfm, GFP_KERNEL);
131 if (!req) {
132 printk(KERN_ERR "alg: hash: Failed to allocate request for "
133 "%s\n", algo);
134 ret = -ENOMEM;
135 goto out_noreq;
136 }
137 ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
138 tcrypt_complete, &tresult);
139
140 for (i = 0; i < tcount; i++) {
141 memset(result, 0, 64);
142
143 hash_buff = xbuf[0];
144
145 memcpy(hash_buff, template[i].plaintext, template[i].psize);
146 sg_init_one(&sg[0], hash_buff, template[i].psize);
147
148 if (template[i].ksize) {
149 crypto_ahash_clear_flags(tfm, ~0);
150 ret = crypto_ahash_setkey(tfm, template[i].key,
151 template[i].ksize);
152 if (ret) {
153 printk(KERN_ERR "alg: hash: setkey failed on "
154 "test %d for %s: ret=%d\n", i + 1, algo,
155 -ret);
156 goto out;
157 }
158 }
159
160 ahash_request_set_crypt(req, sg, result, template[i].psize);
161 ret = crypto_ahash_digest(req);
162 switch (ret) {
163 case 0:
164 break;
165 case -EINPROGRESS:
166 case -EBUSY:
167 ret = wait_for_completion_interruptible(
168 &tresult.completion);
169 if (!ret && !(ret = tresult.err)) {
170 INIT_COMPLETION(tresult.completion);
171 break;
172 }
173 /* fall through */
174 default:
175 printk(KERN_ERR "alg: hash: digest failed on test %d "
176 "for %s: ret=%d\n", i + 1, algo, -ret);
177 goto out;
178 }
179
180 if (memcmp(result, template[i].digest,
181 crypto_ahash_digestsize(tfm))) {
182 printk(KERN_ERR "alg: hash: Test %d failed for %s\n",
183 i + 1, algo);
184 hexdump(result, crypto_ahash_digestsize(tfm));
185 ret = -EINVAL;
186 goto out;
187 }
188 }
189
190 j = 0;
191 for (i = 0; i < tcount; i++) {
192 if (template[i].np) {
193 j++;
194 memset(result, 0, 64);
195
196 temp = 0;
197 sg_init_table(sg, template[i].np);
198 for (k = 0; k < template[i].np; k++) {
199 sg_set_buf(&sg[k],
200 memcpy(xbuf[IDX[k] >> PAGE_SHIFT] +
201 offset_in_page(IDX[k]),
202 template[i].plaintext + temp,
203 template[i].tap[k]),
204 template[i].tap[k]);
205 temp += template[i].tap[k];
206 }
207
208 if (template[i].ksize) {
209 crypto_ahash_clear_flags(tfm, ~0);
210 ret = crypto_ahash_setkey(tfm, template[i].key,
211 template[i].ksize);
212
213 if (ret) {
214 printk(KERN_ERR "alg: hash: setkey "
215 "failed on chunking test %d "
216 "for %s: ret=%d\n", j, algo,
217 -ret);
218 goto out;
219 }
220 }
221
222 ahash_request_set_crypt(req, sg, result,
223 template[i].psize);
224 ret = crypto_ahash_digest(req);
225 switch (ret) {
226 case 0:
227 break;
228 case -EINPROGRESS:
229 case -EBUSY:
230 ret = wait_for_completion_interruptible(
231 &tresult.completion);
232 if (!ret && !(ret = tresult.err)) {
233 INIT_COMPLETION(tresult.completion);
234 break;
235 }
236 /* fall through */
237 default:
238 printk(KERN_ERR "alg: hash: digest failed "
239 "on chunking test %d for %s: "
240 "ret=%d\n", j, algo, -ret);
241 goto out;
242 }
243
244 if (memcmp(result, template[i].digest,
245 crypto_ahash_digestsize(tfm))) {
246 printk(KERN_ERR "alg: hash: Chunking test %d "
247 "failed for %s\n", j, algo);
248 hexdump(result, crypto_ahash_digestsize(tfm));
249 ret = -EINVAL;
250 goto out;
251 }
252 }
253 }
254
255 ret = 0;
256
257out:
258 ahash_request_free(req);
259out_noreq:
260 return ret;
261}
262
263static int test_aead(struct crypto_aead *tfm, int enc,
264 struct aead_testvec *template, unsigned int tcount)
265{
266 const char *algo = crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm));
267 unsigned int i, j, k, n, temp;
268 int ret = 0;
269 char *q;
270 char *key;
271 struct aead_request *req;
272 struct scatterlist sg[8];
273 struct scatterlist asg[8];
274 const char *e;
275 struct tcrypt_result result;
276 unsigned int authsize;
277 void *input;
278 void *assoc;
279 char iv[MAX_IVLEN];
280
281 if (enc == ENCRYPT)
282 e = "encryption";
283 else
284 e = "decryption";
285
286 init_completion(&result.completion);
287
288 req = aead_request_alloc(tfm, GFP_KERNEL);
289 if (!req) {
290 printk(KERN_ERR "alg: aead: Failed to allocate request for "
291 "%s\n", algo);
292 ret = -ENOMEM;
293 goto out;
294 }
295
296 aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
297 tcrypt_complete, &result);
298
299 for (i = 0, j = 0; i < tcount; i++) {
300 if (!template[i].np) {
301 j++;
302
303 /* some tepmplates have no input data but they will
304 * touch input
305 */
306 input = xbuf[0];
307 assoc = axbuf[0];
308
309 memcpy(input, template[i].input, template[i].ilen);
310 memcpy(assoc, template[i].assoc, template[i].alen);
311 if (template[i].iv)
312 memcpy(iv, template[i].iv, MAX_IVLEN);
313 else
314 memset(iv, 0, MAX_IVLEN);
315
316 crypto_aead_clear_flags(tfm, ~0);
317 if (template[i].wk)
318 crypto_aead_set_flags(
319 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
320
321 key = template[i].key;
322
323 ret = crypto_aead_setkey(tfm, key,
324 template[i].klen);
325 if (!ret == template[i].fail) {
326 printk(KERN_ERR "alg: aead: setkey failed on "
327 "test %d for %s: flags=%x\n", j, algo,
328 crypto_aead_get_flags(tfm));
329 goto out;
330 } else if (ret)
331 continue;
332
333 authsize = abs(template[i].rlen - template[i].ilen);
334 ret = crypto_aead_setauthsize(tfm, authsize);
335 if (ret) {
336 printk(KERN_ERR "alg: aead: Failed to set "
337 "authsize to %u on test %d for %s\n",
338 authsize, j, algo);
339 goto out;
340 }
341
342 sg_init_one(&sg[0], input,
343 template[i].ilen + (enc ? authsize : 0));
344
345 sg_init_one(&asg[0], assoc, template[i].alen);
346
347 aead_request_set_crypt(req, sg, sg,
348 template[i].ilen, iv);
349
350 aead_request_set_assoc(req, asg, template[i].alen);
351
352 ret = enc ?
353 crypto_aead_encrypt(req) :
354 crypto_aead_decrypt(req);
355
356 switch (ret) {
357 case 0:
358 break;
359 case -EINPROGRESS:
360 case -EBUSY:
361 ret = wait_for_completion_interruptible(
362 &result.completion);
363 if (!ret && !(ret = result.err)) {
364 INIT_COMPLETION(result.completion);
365 break;
366 }
367 /* fall through */
368 default:
369 printk(KERN_ERR "alg: aead: %s failed on test "
370 "%d for %s: ret=%d\n", e, j, algo, -ret);
371 goto out;
372 }
373
374 q = input;
375 if (memcmp(q, template[i].result, template[i].rlen)) {
376 printk(KERN_ERR "alg: aead: Test %d failed on "
377 "%s for %s\n", j, e, algo);
378 hexdump(q, template[i].rlen);
379 ret = -EINVAL;
380 goto out;
381 }
382 }
383 }
384
385 for (i = 0, j = 0; i < tcount; i++) {
386 if (template[i].np) {
387 j++;
388
389 if (template[i].iv)
390 memcpy(iv, template[i].iv, MAX_IVLEN);
391 else
392 memset(iv, 0, MAX_IVLEN);
393
394 crypto_aead_clear_flags(tfm, ~0);
395 if (template[i].wk)
396 crypto_aead_set_flags(
397 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
398 key = template[i].key;
399
400 ret = crypto_aead_setkey(tfm, key, template[i].klen);
401 if (!ret == template[i].fail) {
402 printk(KERN_ERR "alg: aead: setkey failed on "
403 "chunk test %d for %s: flags=%x\n", j,
404 algo, crypto_aead_get_flags(tfm));
405 goto out;
406 } else if (ret)
407 continue;
408
409 authsize = abs(template[i].rlen - template[i].ilen);
410
411 ret = -EINVAL;
412 sg_init_table(sg, template[i].np);
413 for (k = 0, temp = 0; k < template[i].np; k++) {
414 if (WARN_ON(offset_in_page(IDX[k]) +
415 template[i].tap[k] > PAGE_SIZE))
416 goto out;
417
418 q = xbuf[IDX[k] >> PAGE_SHIFT] +
419 offset_in_page(IDX[k]);
420
421 memcpy(q, template[i].input + temp,
422 template[i].tap[k]);
423
424 n = template[i].tap[k];
425 if (k == template[i].np - 1 && enc)
426 n += authsize;
427 if (offset_in_page(q) + n < PAGE_SIZE)
428 q[n] = 0;
429
430 sg_set_buf(&sg[k], q, template[i].tap[k]);
431 temp += template[i].tap[k];
432 }
433
434 ret = crypto_aead_setauthsize(tfm, authsize);
435 if (ret) {
436 printk(KERN_ERR "alg: aead: Failed to set "
437 "authsize to %u on chunk test %d for "
438 "%s\n", authsize, j, algo);
439 goto out;
440 }
441
442 if (enc) {
443 if (WARN_ON(sg[k - 1].offset +
444 sg[k - 1].length + authsize >
445 PAGE_SIZE)) {
446 ret = -EINVAL;
447 goto out;
448 }
449
450 sg[k - 1].length += authsize;
451 }
452
453 sg_init_table(asg, template[i].anp);
454 for (k = 0, temp = 0; k < template[i].anp; k++) {
455 sg_set_buf(&asg[k],
456 memcpy(axbuf[IDX[k] >> PAGE_SHIFT] +
457 offset_in_page(IDX[k]),
458 template[i].assoc + temp,
459 template[i].atap[k]),
460 template[i].atap[k]);
461 temp += template[i].atap[k];
462 }
463
464 aead_request_set_crypt(req, sg, sg,
465 template[i].ilen,
466 iv);
467
468 aead_request_set_assoc(req, asg, template[i].alen);
469
470 ret = enc ?
471 crypto_aead_encrypt(req) :
472 crypto_aead_decrypt(req);
473
474 switch (ret) {
475 case 0:
476 break;
477 case -EINPROGRESS:
478 case -EBUSY:
479 ret = wait_for_completion_interruptible(
480 &result.completion);
481 if (!ret && !(ret = result.err)) {
482 INIT_COMPLETION(result.completion);
483 break;
484 }
485 /* fall through */
486 default:
487 printk(KERN_ERR "alg: aead: %s failed on "
488 "chunk test %d for %s: ret=%d\n", e, j,
489 algo, -ret);
490 goto out;
491 }
492
493 ret = -EINVAL;
494 for (k = 0, temp = 0; k < template[i].np; k++) {
495 q = xbuf[IDX[k] >> PAGE_SHIFT] +
496 offset_in_page(IDX[k]);
497
498 n = template[i].tap[k];
499 if (k == template[i].np - 1)
500 n += enc ? authsize : -authsize;
501
502 if (memcmp(q, template[i].result + temp, n)) {
503 printk(KERN_ERR "alg: aead: Chunk "
504 "test %d failed on %s at page "
505 "%u for %s\n", j, e, k, algo);
506 hexdump(q, n);
507 goto out;
508 }
509
510 q += n;
511 if (k == template[i].np - 1 && !enc) {
512 if (memcmp(q, template[i].input +
513 temp + n, authsize))
514 n = authsize;
515 else
516 n = 0;
517 } else {
518 for (n = 0; offset_in_page(q + n) &&
519 q[n]; n++)
520 ;
521 }
522 if (n) {
523 printk(KERN_ERR "alg: aead: Result "
524 "buffer corruption in chunk "
525 "test %d on %s at page %u for "
526 "%s: %u bytes:\n", j, e, k,
527 algo, n);
528 hexdump(q, n);
529 goto out;
530 }
531
532 temp += template[i].tap[k];
533 }
534 }
535 }
536
537 ret = 0;
538
539out:
540 aead_request_free(req);
541 return ret;
542}
543
544static int test_cipher(struct crypto_cipher *tfm, int enc,
545 struct cipher_testvec *template, unsigned int tcount)
546{
547 const char *algo = crypto_tfm_alg_driver_name(crypto_cipher_tfm(tfm));
548 unsigned int i, j, k;
549 int ret;
550 char *q;
551 const char *e;
552 void *data;
553
554 if (enc == ENCRYPT)
555 e = "encryption";
556 else
557 e = "decryption";
558
559 j = 0;
560 for (i = 0; i < tcount; i++) {
561 if (template[i].np)
562 continue;
563
564 j++;
565
566 data = xbuf[0];
567 memcpy(data, template[i].input, template[i].ilen);
568
569 crypto_cipher_clear_flags(tfm, ~0);
570 if (template[i].wk)
571 crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY);
572
573 ret = crypto_cipher_setkey(tfm, template[i].key,
574 template[i].klen);
575 if (!ret == template[i].fail) {
576 printk(KERN_ERR "alg: cipher: setkey failed "
577 "on test %d for %s: flags=%x\n", j,
578 algo, crypto_cipher_get_flags(tfm));
579 goto out;
580 } else if (ret)
581 continue;
582
583 for (k = 0; k < template[i].ilen;
584 k += crypto_cipher_blocksize(tfm)) {
585 if (enc)
586 crypto_cipher_encrypt_one(tfm, data + k,
587 data + k);
588 else
589 crypto_cipher_decrypt_one(tfm, data + k,
590 data + k);
591 }
592
593 q = data;
594 if (memcmp(q, template[i].result, template[i].rlen)) {
595 printk(KERN_ERR "alg: cipher: Test %d failed "
596 "on %s for %s\n", j, e, algo);
597 hexdump(q, template[i].rlen);
598 ret = -EINVAL;
599 goto out;
600 }
601 }
602
603 ret = 0;
604
605out:
606 return ret;
607}
608
609static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
610 struct cipher_testvec *template, unsigned int tcount)
611{
612 const char *algo =
613 crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm));
614 unsigned int i, j, k, n, temp;
615 int ret;
616 char *q;
617 struct ablkcipher_request *req;
618 struct scatterlist sg[8];
619 const char *e;
620 struct tcrypt_result result;
621 void *data;
622 char iv[MAX_IVLEN];
623
624 if (enc == ENCRYPT)
625 e = "encryption";
626 else
627 e = "decryption";
628
629 init_completion(&result.completion);
630
631 req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
632 if (!req) {
633 printk(KERN_ERR "alg: skcipher: Failed to allocate request "
634 "for %s\n", algo);
635 ret = -ENOMEM;
636 goto out;
637 }
638
639 ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
640 tcrypt_complete, &result);
641
642 j = 0;
643 for (i = 0; i < tcount; i++) {
644 if (template[i].iv)
645 memcpy(iv, template[i].iv, MAX_IVLEN);
646 else
647 memset(iv, 0, MAX_IVLEN);
648
649 if (!(template[i].np)) {
650 j++;
651
652 data = xbuf[0];
653 memcpy(data, template[i].input, template[i].ilen);
654
655 crypto_ablkcipher_clear_flags(tfm, ~0);
656 if (template[i].wk)
657 crypto_ablkcipher_set_flags(
658 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
659
660 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
661 template[i].klen);
662 if (!ret == template[i].fail) {
663 printk(KERN_ERR "alg: skcipher: setkey failed "
664 "on test %d for %s: flags=%x\n", j,
665 algo, crypto_ablkcipher_get_flags(tfm));
666 goto out;
667 } else if (ret)
668 continue;
669
670 sg_init_one(&sg[0], data, template[i].ilen);
671
672 ablkcipher_request_set_crypt(req, sg, sg,
673 template[i].ilen, iv);
674 ret = enc ?
675 crypto_ablkcipher_encrypt(req) :
676 crypto_ablkcipher_decrypt(req);
677
678 switch (ret) {
679 case 0:
680 break;
681 case -EINPROGRESS:
682 case -EBUSY:
683 ret = wait_for_completion_interruptible(
684 &result.completion);
685 if (!ret && !((ret = result.err))) {
686 INIT_COMPLETION(result.completion);
687 break;
688 }
689 /* fall through */
690 default:
691 printk(KERN_ERR "alg: skcipher: %s failed on "
692 "test %d for %s: ret=%d\n", e, j, algo,
693 -ret);
694 goto out;
695 }
696
697 q = data;
698 if (memcmp(q, template[i].result, template[i].rlen)) {
699 printk(KERN_ERR "alg: skcipher: Test %d "
700 "failed on %s for %s\n", j, e, algo);
701 hexdump(q, template[i].rlen);
702 ret = -EINVAL;
703 goto out;
704 }
705 }
706 }
707
708 j = 0;
709 for (i = 0; i < tcount; i++) {
710
711 if (template[i].iv)
712 memcpy(iv, template[i].iv, MAX_IVLEN);
713 else
714 memset(iv, 0, MAX_IVLEN);
715
716 if (template[i].np) {
717 j++;
718
719 crypto_ablkcipher_clear_flags(tfm, ~0);
720 if (template[i].wk)
721 crypto_ablkcipher_set_flags(
722 tfm, CRYPTO_TFM_REQ_WEAK_KEY);
723
724 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
725 template[i].klen);
726 if (!ret == template[i].fail) {
727 printk(KERN_ERR "alg: skcipher: setkey failed "
728 "on chunk test %d for %s: flags=%x\n",
729 j, algo,
730 crypto_ablkcipher_get_flags(tfm));
731 goto out;
732 } else if (ret)
733 continue;
734
735 temp = 0;
736 ret = -EINVAL;
737 sg_init_table(sg, template[i].np);
738 for (k = 0; k < template[i].np; k++) {
739 if (WARN_ON(offset_in_page(IDX[k]) +
740 template[i].tap[k] > PAGE_SIZE))
741 goto out;
742
743 q = xbuf[IDX[k] >> PAGE_SHIFT] +
744 offset_in_page(IDX[k]);
745
746 memcpy(q, template[i].input + temp,
747 template[i].tap[k]);
748
749 if (offset_in_page(q) + template[i].tap[k] <
750 PAGE_SIZE)
751 q[template[i].tap[k]] = 0;
752
753 sg_set_buf(&sg[k], q, template[i].tap[k]);
754
755 temp += template[i].tap[k];
756 }
757
758 ablkcipher_request_set_crypt(req, sg, sg,
759 template[i].ilen, iv);
760
761 ret = enc ?
762 crypto_ablkcipher_encrypt(req) :
763 crypto_ablkcipher_decrypt(req);
764
765 switch (ret) {
766 case 0:
767 break;
768 case -EINPROGRESS:
769 case -EBUSY:
770 ret = wait_for_completion_interruptible(
771 &result.completion);
772 if (!ret && !((ret = result.err))) {
773 INIT_COMPLETION(result.completion);
774 break;
775 }
776 /* fall through */
777 default:
778 printk(KERN_ERR "alg: skcipher: %s failed on "
779 "chunk test %d for %s: ret=%d\n", e, j,
780 algo, -ret);
781 goto out;
782 }
783
784 temp = 0;
785 ret = -EINVAL;
786 for (k = 0; k < template[i].np; k++) {
787 q = xbuf[IDX[k] >> PAGE_SHIFT] +
788 offset_in_page(IDX[k]);
789
790 if (memcmp(q, template[i].result + temp,
791 template[i].tap[k])) {
792 printk(KERN_ERR "alg: skcipher: Chunk "
793 "test %d failed on %s at page "
794 "%u for %s\n", j, e, k, algo);
795 hexdump(q, template[i].tap[k]);
796 goto out;
797 }
798
799 q += template[i].tap[k];
800 for (n = 0; offset_in_page(q + n) && q[n]; n++)
801 ;
802 if (n) {
803 printk(KERN_ERR "alg: skcipher: "
804 "Result buffer corruption in "
805 "chunk test %d on %s at page "
806 "%u for %s: %u bytes:\n", j, e,
807 k, algo, n);
808 hexdump(q, n);
809 goto out;
810 }
811 temp += template[i].tap[k];
812 }
813 }
814 }
815
816 ret = 0;
817
818out:
819 ablkcipher_request_free(req);
820 return ret;
821}
822
823static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate,
824 struct comp_testvec *dtemplate, int ctcount, int dtcount)
825{
826 const char *algo = crypto_tfm_alg_driver_name(crypto_comp_tfm(tfm));
827 unsigned int i;
828 char result[COMP_BUF_SIZE];
829 int ret;
830
831 for (i = 0; i < ctcount; i++) {
832 int ilen, dlen = COMP_BUF_SIZE;
833
834 memset(result, 0, sizeof (result));
835
836 ilen = ctemplate[i].inlen;
837 ret = crypto_comp_compress(tfm, ctemplate[i].input,
838 ilen, result, &dlen);
839 if (ret) {
840 printk(KERN_ERR "alg: comp: compression failed "
841 "on test %d for %s: ret=%d\n", i + 1, algo,
842 -ret);
843 goto out;
844 }
845
846 if (memcmp(result, ctemplate[i].output, dlen)) {
847 printk(KERN_ERR "alg: comp: Compression test %d "
848 "failed for %s\n", i + 1, algo);
849 hexdump(result, dlen);
850 ret = -EINVAL;
851 goto out;
852 }
853 }
854
855 for (i = 0; i < dtcount; i++) {
856 int ilen, ret, dlen = COMP_BUF_SIZE;
857
858 memset(result, 0, sizeof (result));
859
860 ilen = dtemplate[i].inlen;
861 ret = crypto_comp_decompress(tfm, dtemplate[i].input,
862 ilen, result, &dlen);
863 if (ret) {
864 printk(KERN_ERR "alg: comp: decompression failed "
865 "on test %d for %s: ret=%d\n", i + 1, algo,
866 -ret);
867 goto out;
868 }
869
870 if (memcmp(result, dtemplate[i].output, dlen)) {
871 printk(KERN_ERR "alg: comp: Decompression test %d "
872 "failed for %s\n", i + 1, algo);
873 hexdump(result, dlen);
874 ret = -EINVAL;
875 goto out;
876 }
877 }
878
879 ret = 0;
880
881out:
882 return ret;
883}
884
885static int alg_test_aead(const struct alg_test_desc *desc, const char *driver,
886 u32 type, u32 mask)
887{
888 struct crypto_aead *tfm;
889 int err = 0;
890
891 tfm = crypto_alloc_aead(driver, type, mask);
892 if (IS_ERR(tfm)) {
893 printk(KERN_ERR "alg: aead: Failed to load transform for %s: "
894 "%ld\n", driver, PTR_ERR(tfm));
895 return PTR_ERR(tfm);
896 }
897
898 if (desc->suite.aead.enc.vecs) {
899 err = test_aead(tfm, ENCRYPT, desc->suite.aead.enc.vecs,
900 desc->suite.aead.enc.count);
901 if (err)
902 goto out;
903 }
904
905 if (!err && desc->suite.aead.dec.vecs)
906 err = test_aead(tfm, DECRYPT, desc->suite.aead.dec.vecs,
907 desc->suite.aead.dec.count);
908
909out:
910 crypto_free_aead(tfm);
911 return err;
912}
913
914static int alg_test_cipher(const struct alg_test_desc *desc,
915 const char *driver, u32 type, u32 mask)
916{
917 struct crypto_cipher *tfm;
918 int err = 0;
919
920 tfm = crypto_alloc_cipher(driver, type, mask);
921 if (IS_ERR(tfm)) {
922 printk(KERN_ERR "alg: cipher: Failed to load transform for "
923 "%s: %ld\n", driver, PTR_ERR(tfm));
924 return PTR_ERR(tfm);
925 }
926
927 if (desc->suite.cipher.enc.vecs) {
928 err = test_cipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs,
929 desc->suite.cipher.enc.count);
930 if (err)
931 goto out;
932 }
933
934 if (desc->suite.cipher.dec.vecs)
935 err = test_cipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs,
936 desc->suite.cipher.dec.count);
937
938out:
939 crypto_free_cipher(tfm);
940 return err;
941}
942
943static int alg_test_skcipher(const struct alg_test_desc *desc,
944 const char *driver, u32 type, u32 mask)
945{
946 struct crypto_ablkcipher *tfm;
947 int err = 0;
948
949 tfm = crypto_alloc_ablkcipher(driver, type, mask);
950 if (IS_ERR(tfm)) {
951 printk(KERN_ERR "alg: skcipher: Failed to load transform for "
952 "%s: %ld\n", driver, PTR_ERR(tfm));
953 return PTR_ERR(tfm);
954 }
955
956 if (desc->suite.cipher.enc.vecs) {
957 err = test_skcipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs,
958 desc->suite.cipher.enc.count);
959 if (err)
960 goto out;
961 }
962
963 if (desc->suite.cipher.dec.vecs)
964 err = test_skcipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs,
965 desc->suite.cipher.dec.count);
966
967out:
968 crypto_free_ablkcipher(tfm);
969 return err;
970}
971
972static int alg_test_comp(const struct alg_test_desc *desc, const char *driver,
973 u32 type, u32 mask)
974{
975 struct crypto_comp *tfm;
976 int err;
977
978 tfm = crypto_alloc_comp(driver, type, mask);
979 if (IS_ERR(tfm)) {
980 printk(KERN_ERR "alg: comp: Failed to load transform for %s: "
981 "%ld\n", driver, PTR_ERR(tfm));
982 return PTR_ERR(tfm);
983 }
984
985 err = test_comp(tfm, desc->suite.comp.comp.vecs,
986 desc->suite.comp.decomp.vecs,
987 desc->suite.comp.comp.count,
988 desc->suite.comp.decomp.count);
989
990 crypto_free_comp(tfm);
991 return err;
992}
993
994static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
995 u32 type, u32 mask)
996{
997 struct crypto_ahash *tfm;
998 int err;
999
1000 tfm = crypto_alloc_ahash(driver, type, mask);
1001 if (IS_ERR(tfm)) {
1002 printk(KERN_ERR "alg: hash: Failed to load transform for %s: "
1003 "%ld\n", driver, PTR_ERR(tfm));
1004 return PTR_ERR(tfm);
1005 }
1006
1007 err = test_hash(tfm, desc->suite.hash.vecs, desc->suite.hash.count);
1008
1009 crypto_free_ahash(tfm);
1010 return err;
1011}
1012
1013/* Please keep this list sorted by algorithm name. */
1014static const struct alg_test_desc alg_test_descs[] = {
1015 {
1016 .alg = "cbc(aes)",
1017 .test = alg_test_skcipher,
1018 .suite = {
1019 .cipher = {
1020 .enc = {
1021 .vecs = aes_cbc_enc_tv_template,
1022 .count = AES_CBC_ENC_TEST_VECTORS
1023 },
1024 .dec = {
1025 .vecs = aes_cbc_dec_tv_template,
1026 .count = AES_CBC_DEC_TEST_VECTORS
1027 }
1028 }
1029 }
1030 }, {
1031 .alg = "cbc(anubis)",
1032 .test = alg_test_skcipher,
1033 .suite = {
1034 .cipher = {
1035 .enc = {
1036 .vecs = anubis_cbc_enc_tv_template,
1037 .count = ANUBIS_CBC_ENC_TEST_VECTORS
1038 },
1039 .dec = {
1040 .vecs = anubis_cbc_dec_tv_template,
1041 .count = ANUBIS_CBC_DEC_TEST_VECTORS
1042 }
1043 }
1044 }
1045 }, {
1046 .alg = "cbc(blowfish)",
1047 .test = alg_test_skcipher,
1048 .suite = {
1049 .cipher = {
1050 .enc = {
1051 .vecs = bf_cbc_enc_tv_template,
1052 .count = BF_CBC_ENC_TEST_VECTORS
1053 },
1054 .dec = {
1055 .vecs = bf_cbc_dec_tv_template,
1056 .count = BF_CBC_DEC_TEST_VECTORS
1057 }
1058 }
1059 }
1060 }, {
1061 .alg = "cbc(camellia)",
1062 .test = alg_test_skcipher,
1063 .suite = {
1064 .cipher = {
1065 .enc = {
1066 .vecs = camellia_cbc_enc_tv_template,
1067 .count = CAMELLIA_CBC_ENC_TEST_VECTORS
1068 },
1069 .dec = {
1070 .vecs = camellia_cbc_dec_tv_template,
1071 .count = CAMELLIA_CBC_DEC_TEST_VECTORS
1072 }
1073 }
1074 }
1075 }, {
1076 .alg = "cbc(des)",
1077 .test = alg_test_skcipher,
1078 .suite = {
1079 .cipher = {
1080 .enc = {
1081 .vecs = des_cbc_enc_tv_template,
1082 .count = DES_CBC_ENC_TEST_VECTORS
1083 },
1084 .dec = {
1085 .vecs = des_cbc_dec_tv_template,
1086 .count = DES_CBC_DEC_TEST_VECTORS
1087 }
1088 }
1089 }
1090 }, {
1091 .alg = "cbc(des3_ede)",
1092 .test = alg_test_skcipher,
1093 .suite = {
1094 .cipher = {
1095 .enc = {
1096 .vecs = des3_ede_cbc_enc_tv_template,
1097 .count = DES3_EDE_CBC_ENC_TEST_VECTORS
1098 },
1099 .dec = {
1100 .vecs = des3_ede_cbc_dec_tv_template,
1101 .count = DES3_EDE_CBC_DEC_TEST_VECTORS
1102 }
1103 }
1104 }
1105 }, {
1106 .alg = "cbc(twofish)",
1107 .test = alg_test_skcipher,
1108 .suite = {
1109 .cipher = {
1110 .enc = {
1111 .vecs = tf_cbc_enc_tv_template,
1112 .count = TF_CBC_ENC_TEST_VECTORS
1113 },
1114 .dec = {
1115 .vecs = tf_cbc_dec_tv_template,
1116 .count = TF_CBC_DEC_TEST_VECTORS
1117 }
1118 }
1119 }
1120 }, {
1121 .alg = "ccm(aes)",
1122 .test = alg_test_aead,
1123 .suite = {
1124 .aead = {
1125 .enc = {
1126 .vecs = aes_ccm_enc_tv_template,
1127 .count = AES_CCM_ENC_TEST_VECTORS
1128 },
1129 .dec = {
1130 .vecs = aes_ccm_dec_tv_template,
1131 .count = AES_CCM_DEC_TEST_VECTORS
1132 }
1133 }
1134 }
1135 }, {
1136 .alg = "crc32c",
1137 .test = alg_test_hash,
1138 .suite = {
1139 .hash = {
1140 .vecs = crc32c_tv_template,
1141 .count = CRC32C_TEST_VECTORS
1142 }
1143 }
1144 }, {
1145 .alg = "cts(cbc(aes))",
1146 .test = alg_test_skcipher,
1147 .suite = {
1148 .cipher = {
1149 .enc = {
1150 .vecs = cts_mode_enc_tv_template,
1151 .count = CTS_MODE_ENC_TEST_VECTORS
1152 },
1153 .dec = {
1154 .vecs = cts_mode_dec_tv_template,
1155 .count = CTS_MODE_DEC_TEST_VECTORS
1156 }
1157 }
1158 }
1159 }, {
1160 .alg = "deflate",
1161 .test = alg_test_comp,
1162 .suite = {
1163 .comp = {
1164 .comp = {
1165 .vecs = deflate_comp_tv_template,
1166 .count = DEFLATE_COMP_TEST_VECTORS
1167 },
1168 .decomp = {
1169 .vecs = deflate_decomp_tv_template,
1170 .count = DEFLATE_DECOMP_TEST_VECTORS
1171 }
1172 }
1173 }
1174 }, {
1175 .alg = "ecb(aes)",
1176 .test = alg_test_skcipher,
1177 .suite = {
1178 .cipher = {
1179 .enc = {
1180 .vecs = aes_enc_tv_template,
1181 .count = AES_ENC_TEST_VECTORS
1182 },
1183 .dec = {
1184 .vecs = aes_dec_tv_template,
1185 .count = AES_DEC_TEST_VECTORS
1186 }
1187 }
1188 }
1189 }, {
1190 .alg = "ecb(anubis)",
1191 .test = alg_test_skcipher,
1192 .suite = {
1193 .cipher = {
1194 .enc = {
1195 .vecs = anubis_enc_tv_template,
1196 .count = ANUBIS_ENC_TEST_VECTORS
1197 },
1198 .dec = {
1199 .vecs = anubis_dec_tv_template,
1200 .count = ANUBIS_DEC_TEST_VECTORS
1201 }
1202 }
1203 }
1204 }, {
1205 .alg = "ecb(arc4)",
1206 .test = alg_test_skcipher,
1207 .suite = {
1208 .cipher = {
1209 .enc = {
1210 .vecs = arc4_enc_tv_template,
1211 .count = ARC4_ENC_TEST_VECTORS
1212 },
1213 .dec = {
1214 .vecs = arc4_dec_tv_template,
1215 .count = ARC4_DEC_TEST_VECTORS
1216 }
1217 }
1218 }
1219 }, {
1220 .alg = "ecb(blowfish)",
1221 .test = alg_test_skcipher,
1222 .suite = {
1223 .cipher = {
1224 .enc = {
1225 .vecs = bf_enc_tv_template,
1226 .count = BF_ENC_TEST_VECTORS
1227 },
1228 .dec = {
1229 .vecs = bf_dec_tv_template,
1230 .count = BF_DEC_TEST_VECTORS
1231 }
1232 }
1233 }
1234 }, {
1235 .alg = "ecb(camellia)",
1236 .test = alg_test_skcipher,
1237 .suite = {
1238 .cipher = {
1239 .enc = {
1240 .vecs = camellia_enc_tv_template,
1241 .count = CAMELLIA_ENC_TEST_VECTORS
1242 },
1243 .dec = {
1244 .vecs = camellia_dec_tv_template,
1245 .count = CAMELLIA_DEC_TEST_VECTORS
1246 }
1247 }
1248 }
1249 }, {
1250 .alg = "ecb(cast5)",
1251 .test = alg_test_skcipher,
1252 .suite = {
1253 .cipher = {
1254 .enc = {
1255 .vecs = cast5_enc_tv_template,
1256 .count = CAST5_ENC_TEST_VECTORS
1257 },
1258 .dec = {
1259 .vecs = cast5_dec_tv_template,
1260 .count = CAST5_DEC_TEST_VECTORS
1261 }
1262 }
1263 }
1264 }, {
1265 .alg = "ecb(cast6)",
1266 .test = alg_test_skcipher,
1267 .suite = {
1268 .cipher = {
1269 .enc = {
1270 .vecs = cast6_enc_tv_template,
1271 .count = CAST6_ENC_TEST_VECTORS
1272 },
1273 .dec = {
1274 .vecs = cast6_dec_tv_template,
1275 .count = CAST6_DEC_TEST_VECTORS
1276 }
1277 }
1278 }
1279 }, {
1280 .alg = "ecb(des)",
1281 .test = alg_test_skcipher,
1282 .suite = {
1283 .cipher = {
1284 .enc = {
1285 .vecs = des_enc_tv_template,
1286 .count = DES_ENC_TEST_VECTORS
1287 },
1288 .dec = {
1289 .vecs = des_dec_tv_template,
1290 .count = DES_DEC_TEST_VECTORS
1291 }
1292 }
1293 }
1294 }, {
1295 .alg = "ecb(des3_ede)",
1296 .test = alg_test_skcipher,
1297 .suite = {
1298 .cipher = {
1299 .enc = {
1300 .vecs = des3_ede_enc_tv_template,
1301 .count = DES3_EDE_ENC_TEST_VECTORS
1302 },
1303 .dec = {
1304 .vecs = des3_ede_dec_tv_template,
1305 .count = DES3_EDE_DEC_TEST_VECTORS
1306 }
1307 }
1308 }
1309 }, {
1310 .alg = "ecb(khazad)",
1311 .test = alg_test_skcipher,
1312 .suite = {
1313 .cipher = {
1314 .enc = {
1315 .vecs = khazad_enc_tv_template,
1316 .count = KHAZAD_ENC_TEST_VECTORS
1317 },
1318 .dec = {
1319 .vecs = khazad_dec_tv_template,
1320 .count = KHAZAD_DEC_TEST_VECTORS
1321 }
1322 }
1323 }
1324 }, {
1325 .alg = "ecb(seed)",
1326 .test = alg_test_skcipher,
1327 .suite = {
1328 .cipher = {
1329 .enc = {
1330 .vecs = seed_enc_tv_template,
1331 .count = SEED_ENC_TEST_VECTORS
1332 },
1333 .dec = {
1334 .vecs = seed_dec_tv_template,
1335 .count = SEED_DEC_TEST_VECTORS
1336 }
1337 }
1338 }
1339 }, {
1340 .alg = "ecb(serpent)",
1341 .test = alg_test_skcipher,
1342 .suite = {
1343 .cipher = {
1344 .enc = {
1345 .vecs = serpent_enc_tv_template,
1346 .count = SERPENT_ENC_TEST_VECTORS
1347 },
1348 .dec = {
1349 .vecs = serpent_dec_tv_template,
1350 .count = SERPENT_DEC_TEST_VECTORS
1351 }
1352 }
1353 }
1354 }, {
1355 .alg = "ecb(tea)",
1356 .test = alg_test_skcipher,
1357 .suite = {
1358 .cipher = {
1359 .enc = {
1360 .vecs = tea_enc_tv_template,
1361 .count = TEA_ENC_TEST_VECTORS
1362 },
1363 .dec = {
1364 .vecs = tea_dec_tv_template,
1365 .count = TEA_DEC_TEST_VECTORS
1366 }
1367 }
1368 }
1369 }, {
1370 .alg = "ecb(tnepres)",
1371 .test = alg_test_skcipher,
1372 .suite = {
1373 .cipher = {
1374 .enc = {
1375 .vecs = tnepres_enc_tv_template,
1376 .count = TNEPRES_ENC_TEST_VECTORS
1377 },
1378 .dec = {
1379 .vecs = tnepres_dec_tv_template,
1380 .count = TNEPRES_DEC_TEST_VECTORS
1381 }
1382 }
1383 }
1384 }, {
1385 .alg = "ecb(twofish)",
1386 .test = alg_test_skcipher,
1387 .suite = {
1388 .cipher = {
1389 .enc = {
1390 .vecs = tf_enc_tv_template,
1391 .count = TF_ENC_TEST_VECTORS
1392 },
1393 .dec = {
1394 .vecs = tf_dec_tv_template,
1395 .count = TF_DEC_TEST_VECTORS
1396 }
1397 }
1398 }
1399 }, {
1400 .alg = "ecb(xeta)",
1401 .test = alg_test_skcipher,
1402 .suite = {
1403 .cipher = {
1404 .enc = {
1405 .vecs = xeta_enc_tv_template,
1406 .count = XETA_ENC_TEST_VECTORS
1407 },
1408 .dec = {
1409 .vecs = xeta_dec_tv_template,
1410 .count = XETA_DEC_TEST_VECTORS
1411 }
1412 }
1413 }
1414 }, {
1415 .alg = "ecb(xtea)",
1416 .test = alg_test_skcipher,
1417 .suite = {
1418 .cipher = {
1419 .enc = {
1420 .vecs = xtea_enc_tv_template,
1421 .count = XTEA_ENC_TEST_VECTORS
1422 },
1423 .dec = {
1424 .vecs = xtea_dec_tv_template,
1425 .count = XTEA_DEC_TEST_VECTORS
1426 }
1427 }
1428 }
1429 }, {
1430 .alg = "gcm(aes)",
1431 .test = alg_test_aead,
1432 .suite = {
1433 .aead = {
1434 .enc = {
1435 .vecs = aes_gcm_enc_tv_template,
1436 .count = AES_GCM_ENC_TEST_VECTORS
1437 },
1438 .dec = {
1439 .vecs = aes_gcm_dec_tv_template,
1440 .count = AES_GCM_DEC_TEST_VECTORS
1441 }
1442 }
1443 }
1444 }, {
1445 .alg = "hmac(md5)",
1446 .test = alg_test_hash,
1447 .suite = {
1448 .hash = {
1449 .vecs = hmac_md5_tv_template,
1450 .count = HMAC_MD5_TEST_VECTORS
1451 }
1452 }
1453 }, {
1454 .alg = "hmac(rmd128)",
1455 .test = alg_test_hash,
1456 .suite = {
1457 .hash = {
1458 .vecs = hmac_rmd128_tv_template,
1459 .count = HMAC_RMD128_TEST_VECTORS
1460 }
1461 }
1462 }, {
1463 .alg = "hmac(rmd160)",
1464 .test = alg_test_hash,
1465 .suite = {
1466 .hash = {
1467 .vecs = hmac_rmd160_tv_template,
1468 .count = HMAC_RMD160_TEST_VECTORS
1469 }
1470 }
1471 }, {
1472 .alg = "hmac(sha1)",
1473 .test = alg_test_hash,
1474 .suite = {
1475 .hash = {
1476 .vecs = hmac_sha1_tv_template,
1477 .count = HMAC_SHA1_TEST_VECTORS
1478 }
1479 }
1480 }, {
1481 .alg = "hmac(sha224)",
1482 .test = alg_test_hash,
1483 .suite = {
1484 .hash = {
1485 .vecs = hmac_sha224_tv_template,
1486 .count = HMAC_SHA224_TEST_VECTORS
1487 }
1488 }
1489 }, {
1490 .alg = "hmac(sha256)",
1491 .test = alg_test_hash,
1492 .suite = {
1493 .hash = {
1494 .vecs = hmac_sha256_tv_template,
1495 .count = HMAC_SHA256_TEST_VECTORS
1496 }
1497 }
1498 }, {
1499 .alg = "hmac(sha384)",
1500 .test = alg_test_hash,
1501 .suite = {
1502 .hash = {
1503 .vecs = hmac_sha384_tv_template,
1504 .count = HMAC_SHA384_TEST_VECTORS
1505 }
1506 }
1507 }, {
1508 .alg = "hmac(sha512)",
1509 .test = alg_test_hash,
1510 .suite = {
1511 .hash = {
1512 .vecs = hmac_sha512_tv_template,
1513 .count = HMAC_SHA512_TEST_VECTORS
1514 }
1515 }
1516 }, {
1517 .alg = "lrw(aes)",
1518 .test = alg_test_skcipher,
1519 .suite = {
1520 .cipher = {
1521 .enc = {
1522 .vecs = aes_lrw_enc_tv_template,
1523 .count = AES_LRW_ENC_TEST_VECTORS
1524 },
1525 .dec = {
1526 .vecs = aes_lrw_dec_tv_template,
1527 .count = AES_LRW_DEC_TEST_VECTORS
1528 }
1529 }
1530 }
1531 }, {
1532 .alg = "lzo",
1533 .test = alg_test_comp,
1534 .suite = {
1535 .comp = {
1536 .comp = {
1537 .vecs = lzo_comp_tv_template,
1538 .count = LZO_COMP_TEST_VECTORS
1539 },
1540 .decomp = {
1541 .vecs = lzo_decomp_tv_template,
1542 .count = LZO_DECOMP_TEST_VECTORS
1543 }
1544 }
1545 }
1546 }, {
1547 .alg = "md4",
1548 .test = alg_test_hash,
1549 .suite = {
1550 .hash = {
1551 .vecs = md4_tv_template,
1552 .count = MD4_TEST_VECTORS
1553 }
1554 }
1555 }, {
1556 .alg = "md5",
1557 .test = alg_test_hash,
1558 .suite = {
1559 .hash = {
1560 .vecs = md5_tv_template,
1561 .count = MD5_TEST_VECTORS
1562 }
1563 }
1564 }, {
1565 .alg = "michael_mic",
1566 .test = alg_test_hash,
1567 .suite = {
1568 .hash = {
1569 .vecs = michael_mic_tv_template,
1570 .count = MICHAEL_MIC_TEST_VECTORS
1571 }
1572 }
1573 }, {
1574 .alg = "pcbc(fcrypt)",
1575 .test = alg_test_skcipher,
1576 .suite = {
1577 .cipher = {
1578 .enc = {
1579 .vecs = fcrypt_pcbc_enc_tv_template,
1580 .count = FCRYPT_ENC_TEST_VECTORS
1581 },
1582 .dec = {
1583 .vecs = fcrypt_pcbc_dec_tv_template,
1584 .count = FCRYPT_DEC_TEST_VECTORS
1585 }
1586 }
1587 }
1588 }, {
1589 .alg = "rfc3686(ctr(aes))",
1590 .test = alg_test_skcipher,
1591 .suite = {
1592 .cipher = {
1593 .enc = {
1594 .vecs = aes_ctr_enc_tv_template,
1595 .count = AES_CTR_ENC_TEST_VECTORS
1596 },
1597 .dec = {
1598 .vecs = aes_ctr_dec_tv_template,
1599 .count = AES_CTR_DEC_TEST_VECTORS
1600 }
1601 }
1602 }
1603 }, {
1604 .alg = "rmd128",
1605 .test = alg_test_hash,
1606 .suite = {
1607 .hash = {
1608 .vecs = rmd128_tv_template,
1609 .count = RMD128_TEST_VECTORS
1610 }
1611 }
1612 }, {
1613 .alg = "rmd160",
1614 .test = alg_test_hash,
1615 .suite = {
1616 .hash = {
1617 .vecs = rmd160_tv_template,
1618 .count = RMD160_TEST_VECTORS
1619 }
1620 }
1621 }, {
1622 .alg = "rmd256",
1623 .test = alg_test_hash,
1624 .suite = {
1625 .hash = {
1626 .vecs = rmd256_tv_template,
1627 .count = RMD256_TEST_VECTORS
1628 }
1629 }
1630 }, {
1631 .alg = "rmd320",
1632 .test = alg_test_hash,
1633 .suite = {
1634 .hash = {
1635 .vecs = rmd320_tv_template,
1636 .count = RMD320_TEST_VECTORS
1637 }
1638 }
1639 }, {
1640 .alg = "salsa20",
1641 .test = alg_test_skcipher,
1642 .suite = {
1643 .cipher = {
1644 .enc = {
1645 .vecs = salsa20_stream_enc_tv_template,
1646 .count = SALSA20_STREAM_ENC_TEST_VECTORS
1647 }
1648 }
1649 }
1650 }, {
1651 .alg = "sha1",
1652 .test = alg_test_hash,
1653 .suite = {
1654 .hash = {
1655 .vecs = sha1_tv_template,
1656 .count = SHA1_TEST_VECTORS
1657 }
1658 }
1659 }, {
1660 .alg = "sha224",
1661 .test = alg_test_hash,
1662 .suite = {
1663 .hash = {
1664 .vecs = sha224_tv_template,
1665 .count = SHA224_TEST_VECTORS
1666 }
1667 }
1668 }, {
1669 .alg = "sha256",
1670 .test = alg_test_hash,
1671 .suite = {
1672 .hash = {
1673 .vecs = sha256_tv_template,
1674 .count = SHA256_TEST_VECTORS
1675 }
1676 }
1677 }, {
1678 .alg = "sha384",
1679 .test = alg_test_hash,
1680 .suite = {
1681 .hash = {
1682 .vecs = sha384_tv_template,
1683 .count = SHA384_TEST_VECTORS
1684 }
1685 }
1686 }, {
1687 .alg = "sha512",
1688 .test = alg_test_hash,
1689 .suite = {
1690 .hash = {
1691 .vecs = sha512_tv_template,
1692 .count = SHA512_TEST_VECTORS
1693 }
1694 }
1695 }, {
1696 .alg = "tgr128",
1697 .test = alg_test_hash,
1698 .suite = {
1699 .hash = {
1700 .vecs = tgr128_tv_template,
1701 .count = TGR128_TEST_VECTORS
1702 }
1703 }
1704 }, {
1705 .alg = "tgr160",
1706 .test = alg_test_hash,
1707 .suite = {
1708 .hash = {
1709 .vecs = tgr160_tv_template,
1710 .count = TGR160_TEST_VECTORS
1711 }
1712 }
1713 }, {
1714 .alg = "tgr192",
1715 .test = alg_test_hash,
1716 .suite = {
1717 .hash = {
1718 .vecs = tgr192_tv_template,
1719 .count = TGR192_TEST_VECTORS
1720 }
1721 }
1722 }, {
1723 .alg = "wp256",
1724 .test = alg_test_hash,
1725 .suite = {
1726 .hash = {
1727 .vecs = wp256_tv_template,
1728 .count = WP256_TEST_VECTORS
1729 }
1730 }
1731 }, {
1732 .alg = "wp384",
1733 .test = alg_test_hash,
1734 .suite = {
1735 .hash = {
1736 .vecs = wp384_tv_template,
1737 .count = WP384_TEST_VECTORS
1738 }
1739 }
1740 }, {
1741 .alg = "wp512",
1742 .test = alg_test_hash,
1743 .suite = {
1744 .hash = {
1745 .vecs = wp512_tv_template,
1746 .count = WP512_TEST_VECTORS
1747 }
1748 }
1749 }, {
1750 .alg = "xcbc(aes)",
1751 .test = alg_test_hash,
1752 .suite = {
1753 .hash = {
1754 .vecs = aes_xcbc128_tv_template,
1755 .count = XCBC_AES_TEST_VECTORS
1756 }
1757 }
1758 }, {
1759 .alg = "xts(aes)",
1760 .test = alg_test_skcipher,
1761 .suite = {
1762 .cipher = {
1763 .enc = {
1764 .vecs = aes_xts_enc_tv_template,
1765 .count = AES_XTS_ENC_TEST_VECTORS
1766 },
1767 .dec = {
1768 .vecs = aes_xts_dec_tv_template,
1769 .count = AES_XTS_DEC_TEST_VECTORS
1770 }
1771 }
1772 }
1773 }
1774};
1775
1776static int alg_find_test(const char *alg)
1777{
1778 int start = 0;
1779 int end = ARRAY_SIZE(alg_test_descs);
1780
1781 while (start < end) {
1782 int i = (start + end) / 2;
1783 int diff = strcmp(alg_test_descs[i].alg, alg);
1784
1785 if (diff > 0) {
1786 end = i;
1787 continue;
1788 }
1789
1790 if (diff < 0) {
1791 start = i + 1;
1792 continue;
1793 }
1794
1795 return i;
1796 }
1797
1798 return -1;
1799}
1800
1801int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
1802{
1803 int i;
1804
1805 if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) {
1806 char nalg[CRYPTO_MAX_ALG_NAME];
1807
1808 if (snprintf(nalg, sizeof(nalg), "ecb(%s)", alg) >=
1809 sizeof(nalg))
1810 return -ENAMETOOLONG;
1811
1812 i = alg_find_test(nalg);
1813 if (i < 0)
1814 goto notest;
1815
1816 return alg_test_cipher(alg_test_descs + i, driver, type, mask);
1817 }
1818
1819 i = alg_find_test(alg);
1820 if (i < 0)
1821 goto notest;
1822
1823 return alg_test_descs[i].test(alg_test_descs + i, driver,
1824 type, mask);
1825
1826notest:
1827 printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver);
1828 return 0;
1829}
1830EXPORT_SYMBOL_GPL(alg_test);
1831
1832int __init testmgr_init(void)
1833{
1834 int i;
1835
1836 for (i = 0; i < XBUFSIZE; i++) {
1837 xbuf[i] = (void *)__get_free_page(GFP_KERNEL);
1838 if (!xbuf[i])
1839 goto err_free_xbuf;
1840 }
1841
1842 for (i = 0; i < XBUFSIZE; i++) {
1843 axbuf[i] = (void *)__get_free_page(GFP_KERNEL);
1844 if (!axbuf[i])
1845 goto err_free_axbuf;
1846 }
1847
1848 return 0;
1849
1850err_free_axbuf:
1851 for (i = 0; i < XBUFSIZE && axbuf[i]; i++)
1852 free_page((unsigned long)axbuf[i]);
1853err_free_xbuf:
1854 for (i = 0; i < XBUFSIZE && xbuf[i]; i++)
1855 free_page((unsigned long)xbuf[i]);
1856
1857 return -ENOMEM;
1858}
1859
1860void testmgr_exit(void)
1861{
1862 int i;
1863
1864 for (i = 0; i < XBUFSIZE; i++)
1865 free_page((unsigned long)axbuf[i]);
1866 for (i = 0; i < XBUFSIZE; i++)
1867 free_page((unsigned long)xbuf[i]);
1868}
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
new file mode 100644
index 000000000000..dee94d9ecfba
--- /dev/null
+++ b/crypto/testmgr.h
@@ -0,0 +1,8738 @@
1/*
2 * Algorithm testing framework and tests.
3 *
4 * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
5 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
6 * Copyright (c) 2007 Nokia Siemens Networks
7 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the Free
11 * Software Foundation; either version 2 of the License, or (at your option)
12 * any later version.
13 *
14 */
15#ifndef _CRYPTO_TESTMGR_H
16#define _CRYPTO_TESTMGR_H
17
18#define MAX_DIGEST_SIZE 64
19#define MAX_TAP 8
20
21#define MAX_KEYLEN 56
22#define MAX_IVLEN 32
23
24struct hash_testvec {
25 /* only used with keyed hash algorithms */
26 char *key;
27 char *plaintext;
28 char *digest;
29 unsigned char tap[MAX_TAP];
30 unsigned char psize;
31 unsigned char np;
32 unsigned char ksize;
33};
34
35struct cipher_testvec {
36 char *key;
37 char *iv;
38 char *input;
39 char *result;
40 unsigned short tap[MAX_TAP];
41 int np;
42 unsigned char fail;
43 unsigned char wk; /* weak key flag */
44 unsigned char klen;
45 unsigned short ilen;
46 unsigned short rlen;
47};
48
49struct aead_testvec {
50 char *key;
51 char *iv;
52 char *input;
53 char *assoc;
54 char *result;
55 unsigned char tap[MAX_TAP];
56 unsigned char atap[MAX_TAP];
57 int np;
58 int anp;
59 unsigned char fail;
60 unsigned char wk; /* weak key flag */
61 unsigned char klen;
62 unsigned short ilen;
63 unsigned short alen;
64 unsigned short rlen;
65};
66
67static char zeroed_string[48];
68
69/*
70 * MD4 test vectors from RFC1320
71 */
72#define MD4_TEST_VECTORS 7
73
74static struct hash_testvec md4_tv_template [] = {
75 {
76 .plaintext = "",
77 .digest = "\x31\xd6\xcf\xe0\xd1\x6a\xe9\x31"
78 "\xb7\x3c\x59\xd7\xe0\xc0\x89\xc0",
79 }, {
80 .plaintext = "a",
81 .psize = 1,
82 .digest = "\xbd\xe5\x2c\xb3\x1d\xe3\x3e\x46"
83 "\x24\x5e\x05\xfb\xdb\xd6\xfb\x24",
84 }, {
85 .plaintext = "abc",
86 .psize = 3,
87 .digest = "\xa4\x48\x01\x7a\xaf\x21\xd8\x52"
88 "\x5f\xc1\x0a\xe8\x7a\xa6\x72\x9d",
89 }, {
90 .plaintext = "message digest",
91 .psize = 14,
92 .digest = "\xd9\x13\x0a\x81\x64\x54\x9f\xe8"
93 "\x18\x87\x48\x06\xe1\xc7\x01\x4b",
94 }, {
95 .plaintext = "abcdefghijklmnopqrstuvwxyz",
96 .psize = 26,
97 .digest = "\xd7\x9e\x1c\x30\x8a\xa5\xbb\xcd"
98 "\xee\xa8\xed\x63\xdf\x41\x2d\xa9",
99 .np = 2,
100 .tap = { 13, 13 },
101 }, {
102 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
103 .psize = 62,
104 .digest = "\x04\x3f\x85\x82\xf2\x41\xdb\x35"
105 "\x1c\xe6\x27\xe1\x53\xe7\xf0\xe4",
106 }, {
107 .plaintext = "123456789012345678901234567890123456789012345678901234567890123"
108 "45678901234567890",
109 .psize = 80,
110 .digest = "\xe3\x3b\x4d\xdc\x9c\x38\xf2\x19"
111 "\x9c\x3e\x7b\x16\x4f\xcc\x05\x36",
112 },
113};
114
115/*
116 * MD5 test vectors from RFC1321
117 */
118#define MD5_TEST_VECTORS 7
119
120static struct hash_testvec md5_tv_template[] = {
121 {
122 .digest = "\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04"
123 "\xe9\x80\x09\x98\xec\xf8\x42\x7e",
124 }, {
125 .plaintext = "a",
126 .psize = 1,
127 .digest = "\x0c\xc1\x75\xb9\xc0\xf1\xb6\xa8"
128 "\x31\xc3\x99\xe2\x69\x77\x26\x61",
129 }, {
130 .plaintext = "abc",
131 .psize = 3,
132 .digest = "\x90\x01\x50\x98\x3c\xd2\x4f\xb0"
133 "\xd6\x96\x3f\x7d\x28\xe1\x7f\x72",
134 }, {
135 .plaintext = "message digest",
136 .psize = 14,
137 .digest = "\xf9\x6b\x69\x7d\x7c\xb7\x93\x8d"
138 "\x52\x5a\x2f\x31\xaa\xf1\x61\xd0",
139 }, {
140 .plaintext = "abcdefghijklmnopqrstuvwxyz",
141 .psize = 26,
142 .digest = "\xc3\xfc\xd3\xd7\x61\x92\xe4\x00"
143 "\x7d\xfb\x49\x6c\xca\x67\xe1\x3b",
144 .np = 2,
145 .tap = {13, 13}
146 }, {
147 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
148 .psize = 62,
149 .digest = "\xd1\x74\xab\x98\xd2\x77\xd9\xf5"
150 "\xa5\x61\x1c\x2c\x9f\x41\x9d\x9f",
151 }, {
152 .plaintext = "12345678901234567890123456789012345678901234567890123456789012"
153 "345678901234567890",
154 .psize = 80,
155 .digest = "\x57\xed\xf4\xa2\x2b\xe3\xc9\x55"
156 "\xac\x49\xda\x2e\x21\x07\xb6\x7a",
157 }
158
159};
160
161/*
162 * RIPEMD-128 test vectors from ISO/IEC 10118-3:2004(E)
163 */
164#define RMD128_TEST_VECTORS 10
165
166static struct hash_testvec rmd128_tv_template[] = {
167 {
168 .digest = "\xcd\xf2\x62\x13\xa1\x50\xdc\x3e"
169 "\xcb\x61\x0f\x18\xf6\xb3\x8b\x46",
170 }, {
171 .plaintext = "a",
172 .psize = 1,
173 .digest = "\x86\xbe\x7a\xfa\x33\x9d\x0f\xc7"
174 "\xcf\xc7\x85\xe7\x2f\x57\x8d\x33",
175 }, {
176 .plaintext = "abc",
177 .psize = 3,
178 .digest = "\xc1\x4a\x12\x19\x9c\x66\xe4\xba"
179 "\x84\x63\x6b\x0f\x69\x14\x4c\x77",
180 }, {
181 .plaintext = "message digest",
182 .psize = 14,
183 .digest = "\x9e\x32\x7b\x3d\x6e\x52\x30\x62"
184 "\xaf\xc1\x13\x2d\x7d\xf9\xd1\xb8",
185 }, {
186 .plaintext = "abcdefghijklmnopqrstuvwxyz",
187 .psize = 26,
188 .digest = "\xfd\x2a\xa6\x07\xf7\x1d\xc8\xf5"
189 "\x10\x71\x49\x22\xb3\x71\x83\x4e",
190 }, {
191 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
192 "fghijklmnopqrstuvwxyz0123456789",
193 .psize = 62,
194 .digest = "\xd1\xe9\x59\xeb\x17\x9c\x91\x1f"
195 "\xae\xa4\x62\x4c\x60\xc5\xc7\x02",
196 }, {
197 .plaintext = "1234567890123456789012345678901234567890"
198 "1234567890123456789012345678901234567890",
199 .psize = 80,
200 .digest = "\x3f\x45\xef\x19\x47\x32\xc2\xdb"
201 "\xb2\xc4\xa2\xc7\x69\x79\x5f\xa3",
202 }, {
203 .plaintext = "abcdbcdecdefdefgefghfghighij"
204 "hijkijkljklmklmnlmnomnopnopq",
205 .psize = 56,
206 .digest = "\xa1\xaa\x06\x89\xd0\xfa\xfa\x2d"
207 "\xdc\x22\xe8\x8b\x49\x13\x3a\x06",
208 .np = 2,
209 .tap = { 28, 28 },
210 }, {
211 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
212 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
213 "lmnopqrsmnopqrstnopqrstu",
214 .psize = 112,
215 .digest = "\xd4\xec\xc9\x13\xe1\xdf\x77\x6b"
216 "\xf4\x8d\xe9\xd5\x5b\x1f\x25\x46",
217 }, {
218 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
219 .psize = 32,
220 .digest = "\x13\xfc\x13\xe8\xef\xff\x34\x7d"
221 "\xe1\x93\xff\x46\xdb\xac\xcf\xd4",
222 }
223};
224
225/*
226 * RIPEMD-160 test vectors from ISO/IEC 10118-3:2004(E)
227 */
228#define RMD160_TEST_VECTORS 10
229
230static struct hash_testvec rmd160_tv_template[] = {
231 {
232 .digest = "\x9c\x11\x85\xa5\xc5\xe9\xfc\x54\x61\x28"
233 "\x08\x97\x7e\xe8\xf5\x48\xb2\x25\x8d\x31",
234 }, {
235 .plaintext = "a",
236 .psize = 1,
237 .digest = "\x0b\xdc\x9d\x2d\x25\x6b\x3e\xe9\xda\xae"
238 "\x34\x7b\xe6\xf4\xdc\x83\x5a\x46\x7f\xfe",
239 }, {
240 .plaintext = "abc",
241 .psize = 3,
242 .digest = "\x8e\xb2\x08\xf7\xe0\x5d\x98\x7a\x9b\x04"
243 "\x4a\x8e\x98\xc6\xb0\x87\xf1\x5a\x0b\xfc",
244 }, {
245 .plaintext = "message digest",
246 .psize = 14,
247 .digest = "\x5d\x06\x89\xef\x49\xd2\xfa\xe5\x72\xb8"
248 "\x81\xb1\x23\xa8\x5f\xfa\x21\x59\x5f\x36",
249 }, {
250 .plaintext = "abcdefghijklmnopqrstuvwxyz",
251 .psize = 26,
252 .digest = "\xf7\x1c\x27\x10\x9c\x69\x2c\x1b\x56\xbb"
253 "\xdc\xeb\x5b\x9d\x28\x65\xb3\x70\x8d\xbc",
254 }, {
255 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
256 "fghijklmnopqrstuvwxyz0123456789",
257 .psize = 62,
258 .digest = "\xb0\xe2\x0b\x6e\x31\x16\x64\x02\x86\xed"
259 "\x3a\x87\xa5\x71\x30\x79\xb2\x1f\x51\x89",
260 }, {
261 .plaintext = "1234567890123456789012345678901234567890"
262 "1234567890123456789012345678901234567890",
263 .psize = 80,
264 .digest = "\x9b\x75\x2e\x45\x57\x3d\x4b\x39\xf4\xdb"
265 "\xd3\x32\x3c\xab\x82\xbf\x63\x32\x6b\xfb",
266 }, {
267 .plaintext = "abcdbcdecdefdefgefghfghighij"
268 "hijkijkljklmklmnlmnomnopnopq",
269 .psize = 56,
270 .digest = "\x12\xa0\x53\x38\x4a\x9c\x0c\x88\xe4\x05"
271 "\xa0\x6c\x27\xdc\xf4\x9a\xda\x62\xeb\x2b",
272 .np = 2,
273 .tap = { 28, 28 },
274 }, {
275 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghi"
276 "jklmghijklmnhijklmnoijklmnopjklmnopqklmnopqr"
277 "lmnopqrsmnopqrstnopqrstu",
278 .psize = 112,
279 .digest = "\x6f\x3f\xa3\x9b\x6b\x50\x3c\x38\x4f\x91"
280 "\x9a\x49\xa7\xaa\x5c\x2c\x08\xbd\xfb\x45",
281 }, {
282 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
283 .psize = 32,
284 .digest = "\x94\xc2\x64\x11\x54\x04\xe6\x33\x79\x0d"
285 "\xfc\xc8\x7b\x58\x7d\x36\x77\x06\x7d\x9f",
286 }
287};
288
289/*
290 * RIPEMD-256 test vectors
291 */
292#define RMD256_TEST_VECTORS 8
293
294static struct hash_testvec rmd256_tv_template[] = {
295 {
296 .digest = "\x02\xba\x4c\x4e\x5f\x8e\xcd\x18"
297 "\x77\xfc\x52\xd6\x4d\x30\xe3\x7a"
298 "\x2d\x97\x74\xfb\x1e\x5d\x02\x63"
299 "\x80\xae\x01\x68\xe3\xc5\x52\x2d",
300 }, {
301 .plaintext = "a",
302 .psize = 1,
303 .digest = "\xf9\x33\x3e\x45\xd8\x57\xf5\xd9"
304 "\x0a\x91\xba\xb7\x0a\x1e\xba\x0c"
305 "\xfb\x1b\xe4\xb0\x78\x3c\x9a\xcf"
306 "\xcd\x88\x3a\x91\x34\x69\x29\x25",
307 }, {
308 .plaintext = "abc",
309 .psize = 3,
310 .digest = "\xaf\xbd\x6e\x22\x8b\x9d\x8c\xbb"
311 "\xce\xf5\xca\x2d\x03\xe6\xdb\xa1"
312 "\x0a\xc0\xbc\x7d\xcb\xe4\x68\x0e"
313 "\x1e\x42\xd2\xe9\x75\x45\x9b\x65",
314 }, {
315 .plaintext = "message digest",
316 .psize = 14,
317 .digest = "\x87\xe9\x71\x75\x9a\x1c\xe4\x7a"
318 "\x51\x4d\x5c\x91\x4c\x39\x2c\x90"
319 "\x18\xc7\xc4\x6b\xc1\x44\x65\x55"
320 "\x4a\xfc\xdf\x54\xa5\x07\x0c\x0e",
321 }, {
322 .plaintext = "abcdefghijklmnopqrstuvwxyz",
323 .psize = 26,
324 .digest = "\x64\x9d\x30\x34\x75\x1e\xa2\x16"
325 "\x77\x6b\xf9\xa1\x8a\xcc\x81\xbc"
326 "\x78\x96\x11\x8a\x51\x97\x96\x87"
327 "\x82\xdd\x1f\xd9\x7d\x8d\x51\x33",
328 }, {
329 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
330 "fghijklmnopqrstuvwxyz0123456789",
331 .psize = 62,
332 .digest = "\x57\x40\xa4\x08\xac\x16\xb7\x20"
333 "\xb8\x44\x24\xae\x93\x1c\xbb\x1f"
334 "\xe3\x63\xd1\xd0\xbf\x40\x17\xf1"
335 "\xa8\x9f\x7e\xa6\xde\x77\xa0\xb8",
336 }, {
337 .plaintext = "1234567890123456789012345678901234567890"
338 "1234567890123456789012345678901234567890",
339 .psize = 80,
340 .digest = "\x06\xfd\xcc\x7a\x40\x95\x48\xaa"
341 "\xf9\x13\x68\xc0\x6a\x62\x75\xb5"
342 "\x53\xe3\xf0\x99\xbf\x0e\xa4\xed"
343 "\xfd\x67\x78\xdf\x89\xa8\x90\xdd",
344 }, {
345 .plaintext = "abcdbcdecdefdefgefghfghighij"
346 "hijkijkljklmklmnlmnomnopnopq",
347 .psize = 56,
348 .digest = "\x38\x43\x04\x55\x83\xaa\xc6\xc8"
349 "\xc8\xd9\x12\x85\x73\xe7\xa9\x80"
350 "\x9a\xfb\x2a\x0f\x34\xcc\xc3\x6e"
351 "\xa9\xe7\x2f\x16\xf6\x36\x8e\x3f",
352 .np = 2,
353 .tap = { 28, 28 },
354 }
355};
356
357/*
358 * RIPEMD-320 test vectors
359 */
360#define RMD320_TEST_VECTORS 8
361
362static struct hash_testvec rmd320_tv_template[] = {
363 {
364 .digest = "\x22\xd6\x5d\x56\x61\x53\x6c\xdc\x75\xc1"
365 "\xfd\xf5\xc6\xde\x7b\x41\xb9\xf2\x73\x25"
366 "\xeb\xc6\x1e\x85\x57\x17\x7d\x70\x5a\x0e"
367 "\xc8\x80\x15\x1c\x3a\x32\xa0\x08\x99\xb8",
368 }, {
369 .plaintext = "a",
370 .psize = 1,
371 .digest = "\xce\x78\x85\x06\x38\xf9\x26\x58\xa5\xa5"
372 "\x85\x09\x75\x79\x92\x6d\xda\x66\x7a\x57"
373 "\x16\x56\x2c\xfc\xf6\xfb\xe7\x7f\x63\x54"
374 "\x2f\x99\xb0\x47\x05\xd6\x97\x0d\xff\x5d",
375 }, {
376 .plaintext = "abc",
377 .psize = 3,
378 .digest = "\xde\x4c\x01\xb3\x05\x4f\x89\x30\xa7\x9d"
379 "\x09\xae\x73\x8e\x92\x30\x1e\x5a\x17\x08"
380 "\x5b\xef\xfd\xc1\xb8\xd1\x16\x71\x3e\x74"
381 "\xf8\x2f\xa9\x42\xd6\x4c\xdb\xc4\x68\x2d",
382 }, {
383 .plaintext = "message digest",
384 .psize = 14,
385 .digest = "\x3a\x8e\x28\x50\x2e\xd4\x5d\x42\x2f\x68"
386 "\x84\x4f\x9d\xd3\x16\xe7\xb9\x85\x33\xfa"
387 "\x3f\x2a\x91\xd2\x9f\x84\xd4\x25\xc8\x8d"
388 "\x6b\x4e\xff\x72\x7d\xf6\x6a\x7c\x01\x97",
389 }, {
390 .plaintext = "abcdefghijklmnopqrstuvwxyz",
391 .psize = 26,
392 .digest = "\xca\xbd\xb1\x81\x0b\x92\x47\x0a\x20\x93"
393 "\xaa\x6b\xce\x05\x95\x2c\x28\x34\x8c\xf4"
394 "\x3f\xf6\x08\x41\x97\x51\x66\xbb\x40\xed"
395 "\x23\x40\x04\xb8\x82\x44\x63\xe6\xb0\x09",
396 }, {
397 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcde"
398 "fghijklmnopqrstuvwxyz0123456789",
399 .psize = 62,
400 .digest = "\xed\x54\x49\x40\xc8\x6d\x67\xf2\x50\xd2"
401 "\x32\xc3\x0b\x7b\x3e\x57\x70\xe0\xc6\x0c"
402 "\x8c\xb9\xa4\xca\xfe\x3b\x11\x38\x8a\xf9"
403 "\x92\x0e\x1b\x99\x23\x0b\x84\x3c\x86\xa4",
404 }, {
405 .plaintext = "1234567890123456789012345678901234567890"
406 "1234567890123456789012345678901234567890",
407 .psize = 80,
408 .digest = "\x55\x78\x88\xaf\x5f\x6d\x8e\xd6\x2a\xb6"
409 "\x69\x45\xc6\xd2\xa0\xa4\x7e\xcd\x53\x41"
410 "\xe9\x15\xeb\x8f\xea\x1d\x05\x24\x95\x5f"
411 "\x82\x5d\xc7\x17\xe4\xa0\x08\xab\x2d\x42",
412 }, {
413 .plaintext = "abcdbcdecdefdefgefghfghighij"
414 "hijkijkljklmklmnlmnomnopnopq",
415 .psize = 56,
416 .digest = "\xd0\x34\xa7\x95\x0c\xf7\x22\x02\x1b\xa4"
417 "\xb8\x4d\xf7\x69\xa5\xde\x20\x60\xe2\x59"
418 "\xdf\x4c\x9b\xb4\xa4\x26\x8c\x0e\x93\x5b"
419 "\xbc\x74\x70\xa9\x69\xc9\xd0\x72\xa1\xac",
420 .np = 2,
421 .tap = { 28, 28 },
422 }
423};
424
425/*
426 * SHA1 test vectors from from FIPS PUB 180-1
427 */
428#define SHA1_TEST_VECTORS 2
429
430static struct hash_testvec sha1_tv_template[] = {
431 {
432 .plaintext = "abc",
433 .psize = 3,
434 .digest = "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e"
435 "\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d",
436 }, {
437 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
438 .psize = 56,
439 .digest = "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae"
440 "\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1",
441 .np = 2,
442 .tap = { 28, 28 }
443 }
444};
445
446
447/*
448 * SHA224 test vectors from from FIPS PUB 180-2
449 */
450#define SHA224_TEST_VECTORS 2
451
452static struct hash_testvec sha224_tv_template[] = {
453 {
454 .plaintext = "abc",
455 .psize = 3,
456 .digest = "\x23\x09\x7D\x22\x34\x05\xD8\x22"
457 "\x86\x42\xA4\x77\xBD\xA2\x55\xB3"
458 "\x2A\xAD\xBC\xE4\xBD\xA0\xB3\xF7"
459 "\xE3\x6C\x9D\xA7",
460 }, {
461 .plaintext =
462 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
463 .psize = 56,
464 .digest = "\x75\x38\x8B\x16\x51\x27\x76\xCC"
465 "\x5D\xBA\x5D\xA1\xFD\x89\x01\x50"
466 "\xB0\xC6\x45\x5C\xB4\xF5\x8B\x19"
467 "\x52\x52\x25\x25",
468 .np = 2,
469 .tap = { 28, 28 }
470 }
471};
472
473/*
474 * SHA256 test vectors from from NIST
475 */
476#define SHA256_TEST_VECTORS 2
477
478static struct hash_testvec sha256_tv_template[] = {
479 {
480 .plaintext = "abc",
481 .psize = 3,
482 .digest = "\xba\x78\x16\xbf\x8f\x01\xcf\xea"
483 "\x41\x41\x40\xde\x5d\xae\x22\x23"
484 "\xb0\x03\x61\xa3\x96\x17\x7a\x9c"
485 "\xb4\x10\xff\x61\xf2\x00\x15\xad",
486 }, {
487 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
488 .psize = 56,
489 .digest = "\x24\x8d\x6a\x61\xd2\x06\x38\xb8"
490 "\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
491 "\xa3\x3c\xe4\x59\x64\xff\x21\x67"
492 "\xf6\xec\xed\xd4\x19\xdb\x06\xc1",
493 .np = 2,
494 .tap = { 28, 28 }
495 },
496};
497
498/*
499 * SHA384 test vectors from from NIST and kerneli
500 */
501#define SHA384_TEST_VECTORS 4
502
503static struct hash_testvec sha384_tv_template[] = {
504 {
505 .plaintext= "abc",
506 .psize = 3,
507 .digest = "\xcb\x00\x75\x3f\x45\xa3\x5e\x8b"
508 "\xb5\xa0\x3d\x69\x9a\xc6\x50\x07"
509 "\x27\x2c\x32\xab\x0e\xde\xd1\x63"
510 "\x1a\x8b\x60\x5a\x43\xff\x5b\xed"
511 "\x80\x86\x07\x2b\xa1\xe7\xcc\x23"
512 "\x58\xba\xec\xa1\x34\xc8\x25\xa7",
513 }, {
514 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
515 .psize = 56,
516 .digest = "\x33\x91\xfd\xdd\xfc\x8d\xc7\x39"
517 "\x37\x07\xa6\x5b\x1b\x47\x09\x39"
518 "\x7c\xf8\xb1\xd1\x62\xaf\x05\xab"
519 "\xfe\x8f\x45\x0d\xe5\xf3\x6b\xc6"
520 "\xb0\x45\x5a\x85\x20\xbc\x4e\x6f"
521 "\x5f\xe9\x5b\x1f\xe3\xc8\x45\x2b",
522 }, {
523 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
524 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
525 .psize = 112,
526 .digest = "\x09\x33\x0c\x33\xf7\x11\x47\xe8"
527 "\x3d\x19\x2f\xc7\x82\xcd\x1b\x47"
528 "\x53\x11\x1b\x17\x3b\x3b\x05\xd2"
529 "\x2f\xa0\x80\x86\xe3\xb0\xf7\x12"
530 "\xfc\xc7\xc7\x1a\x55\x7e\x2d\xb9"
531 "\x66\xc3\xe9\xfa\x91\x74\x60\x39",
532 }, {
533 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
534 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
535 .psize = 104,
536 .digest = "\x3d\x20\x89\x73\xab\x35\x08\xdb"
537 "\xbd\x7e\x2c\x28\x62\xba\x29\x0a"
538 "\xd3\x01\x0e\x49\x78\xc1\x98\xdc"
539 "\x4d\x8f\xd0\x14\xe5\x82\x82\x3a"
540 "\x89\xe1\x6f\x9b\x2a\x7b\xbc\x1a"
541 "\xc9\x38\xe2\xd1\x99\xe8\xbe\xa4",
542 .np = 4,
543 .tap = { 26, 26, 26, 26 }
544 },
545};
546
547/*
548 * SHA512 test vectors from from NIST and kerneli
549 */
550#define SHA512_TEST_VECTORS 4
551
552static struct hash_testvec sha512_tv_template[] = {
553 {
554 .plaintext = "abc",
555 .psize = 3,
556 .digest = "\xdd\xaf\x35\xa1\x93\x61\x7a\xba"
557 "\xcc\x41\x73\x49\xae\x20\x41\x31"
558 "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2"
559 "\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a"
560 "\x21\x92\x99\x2a\x27\x4f\xc1\xa8"
561 "\x36\xba\x3c\x23\xa3\xfe\xeb\xbd"
562 "\x45\x4d\x44\x23\x64\x3c\xe8\x0e"
563 "\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f",
564 }, {
565 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
566 .psize = 56,
567 .digest = "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a"
568 "\x0c\xed\x7b\xeb\x8e\x08\xa4\x16"
569 "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8"
570 "\x27\x9b\xe3\x31\xa7\x03\xc3\x35"
571 "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9"
572 "\xaa\x1d\x3b\xea\x57\x78\x9c\xa0"
573 "\x31\xad\x85\xc7\xa7\x1d\xd7\x03"
574 "\x54\xec\x63\x12\x38\xca\x34\x45",
575 }, {
576 .plaintext = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
577 "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
578 .psize = 112,
579 .digest = "\x8e\x95\x9b\x75\xda\xe3\x13\xda"
580 "\x8c\xf4\xf7\x28\x14\xfc\x14\x3f"
581 "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1"
582 "\x72\x99\xae\xad\xb6\x88\x90\x18"
583 "\x50\x1d\x28\x9e\x49\x00\xf7\xe4"
584 "\x33\x1b\x99\xde\xc4\xb5\x43\x3a"
585 "\xc7\xd3\x29\xee\xb6\xdd\x26\x54"
586 "\x5e\x96\xe5\x5b\x87\x4b\xe9\x09",
587 }, {
588 .plaintext = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"
589 "efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz",
590 .psize = 104,
591 .digest = "\x93\x0d\x0c\xef\xcb\x30\xff\x11"
592 "\x33\xb6\x89\x81\x21\xf1\xcf\x3d"
593 "\x27\x57\x8a\xfc\xaf\xe8\x67\x7c"
594 "\x52\x57\xcf\x06\x99\x11\xf7\x5d"
595 "\x8f\x58\x31\xb5\x6e\xbf\xda\x67"
596 "\xb2\x78\xe6\x6d\xff\x8b\x84\xfe"
597 "\x2b\x28\x70\xf7\x42\xa5\x80\xd8"
598 "\xed\xb4\x19\x87\x23\x28\x50\xc9",
599 .np = 4,
600 .tap = { 26, 26, 26, 26 }
601 },
602};
603
604
605/*
606 * WHIRLPOOL test vectors from Whirlpool package
607 * by Vincent Rijmen and Paulo S. L. M. Barreto as part of the NESSIE
608 * submission
609 */
610#define WP512_TEST_VECTORS 8
611
612static struct hash_testvec wp512_tv_template[] = {
613 {
614 .plaintext = "",
615 .psize = 0,
616 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
617 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
618 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
619 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
620 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
621 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57"
622 "\xEA\x89\x64\xE5\x9B\x63\xD9\x37"
623 "\x08\xB1\x38\xCC\x42\xA6\x6E\xB3",
624
625
626 }, {
627 .plaintext = "a",
628 .psize = 1,
629 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
630 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
631 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
632 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
633 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
634 "\x3A\x42\x39\x1A\x39\x14\x5A\x59"
635 "\x1A\x92\x20\x0D\x56\x01\x95\xE5"
636 "\x3B\x47\x85\x84\xFD\xAE\x23\x1A",
637 }, {
638 .plaintext = "abc",
639 .psize = 3,
640 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
641 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
642 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
643 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
644 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
645 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6"
646 "\xC7\x97\xFC\x9D\x95\xD8\xB5\x82"
647 "\xD2\x25\x29\x20\x76\xD4\xEE\xF5",
648 }, {
649 .plaintext = "message digest",
650 .psize = 14,
651 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
652 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
653 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
654 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
655 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
656 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6"
657 "\x92\xED\x92\x00\x52\x83\x8F\x33"
658 "\x62\xE8\x6D\xBD\x37\xA8\x90\x3E",
659 }, {
660 .plaintext = "abcdefghijklmnopqrstuvwxyz",
661 .psize = 26,
662 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
663 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
664 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
665 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
666 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
667 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6"
668 "\xF6\x8F\x67\x3E\x72\x07\x86\x5D"
669 "\x5D\x98\x19\xA3\xDB\xA4\xEB\x3B",
670 }, {
671 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
672 "abcdefghijklmnopqrstuvwxyz0123456789",
673 .psize = 62,
674 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
675 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
676 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
677 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
678 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
679 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6"
680 "\x55\x17\xCC\x87\x9D\x7B\x96\x21"
681 "\x42\xC6\x5F\x5A\x7A\xF0\x14\x67",
682 }, {
683 .plaintext = "1234567890123456789012345678901234567890"
684 "1234567890123456789012345678901234567890",
685 .psize = 80,
686 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
687 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
688 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
689 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
690 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
691 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A"
692 "\x2C\x60\x48\x1E\x88\xC5\xA2\x0B"
693 "\x2C\x2A\x80\xCF\x3A\x9A\x08\x3B",
694 }, {
695 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
696 .psize = 32,
697 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
698 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
699 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
700 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
701 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
702 "\x7B\x94\x76\x39\xFE\x05\x0B\x56"
703 "\x93\x9B\xAA\xA0\xAD\xFF\x9A\xE6"
704 "\x74\x5B\x7B\x18\x1C\x3B\xE3\xFD",
705 },
706};
707
708#define WP384_TEST_VECTORS 8
709
710static struct hash_testvec wp384_tv_template[] = {
711 {
712 .plaintext = "",
713 .psize = 0,
714 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
715 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
716 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
717 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7"
718 "\x3E\x83\xBE\x69\x8B\x28\x8F\xEB"
719 "\xCF\x88\xE3\xE0\x3C\x4F\x07\x57",
720
721
722 }, {
723 .plaintext = "a",
724 .psize = 1,
725 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
726 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
727 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
728 "\x73\xC4\x50\x01\xD0\x08\x7B\x42"
729 "\xD1\x1B\xC6\x45\x41\x3A\xEF\xF6"
730 "\x3A\x42\x39\x1A\x39\x14\x5A\x59",
731 }, {
732 .plaintext = "abc",
733 .psize = 3,
734 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
735 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
736 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
737 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C"
738 "\x71\x81\xEE\xBD\xB6\xC5\x7E\x27"
739 "\x7D\x0E\x34\x95\x71\x14\xCB\xD6",
740 }, {
741 .plaintext = "message digest",
742 .psize = 14,
743 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
744 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
745 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
746 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B"
747 "\x84\x21\x55\x76\x59\xEF\x55\xC1"
748 "\x06\xB4\xB5\x2A\xC5\xA4\xAA\xA6",
749 }, {
750 .plaintext = "abcdefghijklmnopqrstuvwxyz",
751 .psize = 26,
752 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
753 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
754 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
755 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B"
756 "\x08\xBF\x2A\x92\x51\xC3\x0B\x6A"
757 "\x0B\x8A\xAE\x86\x17\x7A\xB4\xA6",
758 }, {
759 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
760 "abcdefghijklmnopqrstuvwxyz0123456789",
761 .psize = 62,
762 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
763 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
764 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
765 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E"
766 "\x08\xEB\xA2\x66\x29\x12\x9D\x8F"
767 "\xB7\xCB\x57\x21\x1B\x92\x81\xA6",
768 }, {
769 .plaintext = "1234567890123456789012345678901234567890"
770 "1234567890123456789012345678901234567890",
771 .psize = 80,
772 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
773 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
774 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
775 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29"
776 "\x4D\x5B\xD8\xDF\x2A\x6C\x44\xE5"
777 "\x38\xCD\x04\x7B\x26\x81\xA5\x1A",
778 }, {
779 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
780 .psize = 32,
781 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
782 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
783 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
784 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69"
785 "\x16\xBD\xC8\x03\x1B\xC5\xBE\x1B"
786 "\x7B\x94\x76\x39\xFE\x05\x0B\x56",
787 },
788};
789
790#define WP256_TEST_VECTORS 8
791
792static struct hash_testvec wp256_tv_template[] = {
793 {
794 .plaintext = "",
795 .psize = 0,
796 .digest = "\x19\xFA\x61\xD7\x55\x22\xA4\x66"
797 "\x9B\x44\xE3\x9C\x1D\x2E\x17\x26"
798 "\xC5\x30\x23\x21\x30\xD4\x07\xF8"
799 "\x9A\xFE\xE0\x96\x49\x97\xF7\xA7",
800
801
802 }, {
803 .plaintext = "a",
804 .psize = 1,
805 .digest = "\x8A\xCA\x26\x02\x79\x2A\xEC\x6F"
806 "\x11\xA6\x72\x06\x53\x1F\xB7\xD7"
807 "\xF0\xDF\xF5\x94\x13\x14\x5E\x69"
808 "\x73\xC4\x50\x01\xD0\x08\x7B\x42",
809 }, {
810 .plaintext = "abc",
811 .psize = 3,
812 .digest = "\x4E\x24\x48\xA4\xC6\xF4\x86\xBB"
813 "\x16\xB6\x56\x2C\x73\xB4\x02\x0B"
814 "\xF3\x04\x3E\x3A\x73\x1B\xCE\x72"
815 "\x1A\xE1\xB3\x03\xD9\x7E\x6D\x4C",
816 }, {
817 .plaintext = "message digest",
818 .psize = 14,
819 .digest = "\x37\x8C\x84\xA4\x12\x6E\x2D\xC6"
820 "\xE5\x6D\xCC\x74\x58\x37\x7A\xAC"
821 "\x83\x8D\x00\x03\x22\x30\xF5\x3C"
822 "\xE1\xF5\x70\x0C\x0F\xFB\x4D\x3B",
823 }, {
824 .plaintext = "abcdefghijklmnopqrstuvwxyz",
825 .psize = 26,
826 .digest = "\xF1\xD7\x54\x66\x26\x36\xFF\xE9"
827 "\x2C\x82\xEB\xB9\x21\x2A\x48\x4A"
828 "\x8D\x38\x63\x1E\xAD\x42\x38\xF5"
829 "\x44\x2E\xE1\x3B\x80\x54\xE4\x1B",
830 }, {
831 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
832 "abcdefghijklmnopqrstuvwxyz0123456789",
833 .psize = 62,
834 .digest = "\xDC\x37\xE0\x08\xCF\x9E\xE6\x9B"
835 "\xF1\x1F\x00\xED\x9A\xBA\x26\x90"
836 "\x1D\xD7\xC2\x8C\xDE\xC0\x66\xCC"
837 "\x6A\xF4\x2E\x40\xF8\x2F\x3A\x1E",
838 }, {
839 .plaintext = "1234567890123456789012345678901234567890"
840 "1234567890123456789012345678901234567890",
841 .psize = 80,
842 .digest = "\x46\x6E\xF1\x8B\xAB\xB0\x15\x4D"
843 "\x25\xB9\xD3\x8A\x64\x14\xF5\xC0"
844 "\x87\x84\x37\x2B\xCC\xB2\x04\xD6"
845 "\x54\x9C\x4A\xFA\xDB\x60\x14\x29",
846 }, {
847 .plaintext = "abcdbcdecdefdefgefghfghighijhijk",
848 .psize = 32,
849 .digest = "\x2A\x98\x7E\xA4\x0F\x91\x70\x61"
850 "\xF5\xD6\xF0\xA0\xE4\x64\x4F\x48"
851 "\x8A\x7A\x5A\x52\xDE\xEE\x65\x62"
852 "\x07\xC5\x62\xF9\x88\xE9\x5C\x69",
853 },
854};
855
856/*
857 * TIGER test vectors from Tiger website
858 */
859#define TGR192_TEST_VECTORS 6
860
861static struct hash_testvec tgr192_tv_template[] = {
862 {
863 .plaintext = "",
864 .psize = 0,
865 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
866 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
867 "\xf3\x73\xde\x2d\x49\x58\x4e\x7a",
868 }, {
869 .plaintext = "abc",
870 .psize = 3,
871 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
872 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
873 "\x93\x5f\x7b\x95\x1c\x13\x29\x51",
874 }, {
875 .plaintext = "Tiger",
876 .psize = 5,
877 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
878 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
879 "\x37\x79\x0c\x11\x6f\x9d\x2b\xdf",
880 }, {
881 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
882 .psize = 64,
883 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
884 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
885 "\xb5\x86\x44\x50\x34\xa5\xa3\x86",
886 }, {
887 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
888 .psize = 64,
889 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
890 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
891 "\x57\x89\x65\x65\x97\x5f\x91\x97",
892 }, {
893 .plaintext = "Tiger - A Fast New Hash Function, "
894 "by Ross Anderson and Eli Biham, "
895 "proceedings of Fast Software Encryption 3, "
896 "Cambridge, 1996.",
897 .psize = 125,
898 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
899 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
900 "\xdd\x68\x15\x1d\x50\x39\x74\xfc",
901 },
902};
903
904#define TGR160_TEST_VECTORS 6
905
906static struct hash_testvec tgr160_tv_template[] = {
907 {
908 .plaintext = "",
909 .psize = 0,
910 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
911 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f"
912 "\xf3\x73\xde\x2d",
913 }, {
914 .plaintext = "abc",
915 .psize = 3,
916 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
917 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf"
918 "\x93\x5f\x7b\x95",
919 }, {
920 .plaintext = "Tiger",
921 .psize = 5,
922 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
923 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec"
924 "\x37\x79\x0c\x11",
925 }, {
926 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
927 .psize = 64,
928 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
929 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e"
930 "\xb5\x86\x44\x50",
931 }, {
932 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
933 .psize = 64,
934 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
935 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9"
936 "\x57\x89\x65\x65",
937 }, {
938 .plaintext = "Tiger - A Fast New Hash Function, "
939 "by Ross Anderson and Eli Biham, "
940 "proceedings of Fast Software Encryption 3, "
941 "Cambridge, 1996.",
942 .psize = 125,
943 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
944 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24"
945 "\xdd\x68\x15\x1d",
946 },
947};
948
949#define TGR128_TEST_VECTORS 6
950
951static struct hash_testvec tgr128_tv_template[] = {
952 {
953 .plaintext = "",
954 .psize = 0,
955 .digest = "\x24\xf0\x13\x0c\x63\xac\x93\x32"
956 "\x16\x16\x6e\x76\xb1\xbb\x92\x5f",
957 }, {
958 .plaintext = "abc",
959 .psize = 3,
960 .digest = "\xf2\x58\xc1\xe8\x84\x14\xab\x2a"
961 "\x52\x7a\xb5\x41\xff\xc5\xb8\xbf",
962 }, {
963 .plaintext = "Tiger",
964 .psize = 5,
965 .digest = "\x9f\x00\xf5\x99\x07\x23\x00\xdd"
966 "\x27\x6a\xbb\x38\xc8\xeb\x6d\xec",
967 }, {
968 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-",
969 .psize = 64,
970 .digest = "\x87\xfb\x2a\x90\x83\x85\x1c\xf7"
971 "\x47\x0d\x2c\xf8\x10\xe6\xdf\x9e",
972 }, {
973 .plaintext = "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789",
974 .psize = 64,
975 .digest = "\x46\x7d\xb8\x08\x63\xeb\xce\x48"
976 "\x8d\xf1\xcd\x12\x61\x65\x5d\xe9",
977 }, {
978 .plaintext = "Tiger - A Fast New Hash Function, "
979 "by Ross Anderson and Eli Biham, "
980 "proceedings of Fast Software Encryption 3, "
981 "Cambridge, 1996.",
982 .psize = 125,
983 .digest = "\x3d\x9a\xeb\x03\xd1\xbd\x1a\x63"
984 "\x57\xb2\x77\x4d\xfd\x6d\x5b\x24",
985 },
986};
987
988/*
989 * HMAC-MD5 test vectors from RFC2202
990 * (These need to be fixed to not use strlen).
991 */
992#define HMAC_MD5_TEST_VECTORS 7
993
994static struct hash_testvec hmac_md5_tv_template[] =
995{
996 {
997 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
998 .ksize = 16,
999 .plaintext = "Hi There",
1000 .psize = 8,
1001 .digest = "\x92\x94\x72\x7a\x36\x38\xbb\x1c"
1002 "\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d",
1003 }, {
1004 .key = "Jefe",
1005 .ksize = 4,
1006 .plaintext = "what do ya want for nothing?",
1007 .psize = 28,
1008 .digest = "\x75\x0c\x78\x3e\x6a\xb0\xb5\x03"
1009 "\xea\xa8\x6e\x31\x0a\x5d\xb7\x38",
1010 .np = 2,
1011 .tap = {14, 14}
1012 }, {
1013 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1014 .ksize = 16,
1015 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1016 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1017 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1018 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1019 .psize = 50,
1020 .digest = "\x56\xbe\x34\x52\x1d\x14\x4c\x88"
1021 "\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6",
1022 }, {
1023 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1024 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1025 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1026 .ksize = 25,
1027 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1028 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1029 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1030 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1031 .psize = 50,
1032 .digest = "\x69\x7e\xaf\x0a\xca\x3a\x3a\xea"
1033 "\x3a\x75\x16\x47\x46\xff\xaa\x79",
1034 }, {
1035 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1036 .ksize = 16,
1037 .plaintext = "Test With Truncation",
1038 .psize = 20,
1039 .digest = "\x56\x46\x1e\xf2\x34\x2e\xdc\x00"
1040 "\xf9\xba\xb9\x95\x69\x0e\xfd\x4c",
1041 }, {
1042 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1043 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1044 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1045 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1046 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1047 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1048 "\xaa\xaa",
1049 .ksize = 80,
1050 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1051 .psize = 54,
1052 .digest = "\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f"
1053 "\x0b\x62\xe6\xce\x61\xb9\xd0\xcd",
1054 }, {
1055 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1056 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1057 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1058 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1059 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1060 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1061 "\xaa\xaa",
1062 .ksize = 80,
1063 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1064 "Block-Size Data",
1065 .psize = 73,
1066 .digest = "\x6f\x63\x0f\xad\x67\xcd\xa0\xee"
1067 "\x1f\xb1\xf5\x62\xdb\x3a\xa5\x3e",
1068 },
1069};
1070
1071/*
1072 * HMAC-RIPEMD128 test vectors from RFC2286
1073 */
1074#define HMAC_RMD128_TEST_VECTORS 7
1075
1076static struct hash_testvec hmac_rmd128_tv_template[] = {
1077 {
1078 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1079 .ksize = 16,
1080 .plaintext = "Hi There",
1081 .psize = 8,
1082 .digest = "\xfb\xf6\x1f\x94\x92\xaa\x4b\xbf"
1083 "\x81\xc1\x72\xe8\x4e\x07\x34\xdb",
1084 }, {
1085 .key = "Jefe",
1086 .ksize = 4,
1087 .plaintext = "what do ya want for nothing?",
1088 .psize = 28,
1089 .digest = "\x87\x5f\x82\x88\x62\xb6\xb3\x34"
1090 "\xb4\x27\xc5\x5f\x9f\x7f\xf0\x9b",
1091 .np = 2,
1092 .tap = { 14, 14 },
1093 }, {
1094 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1095 .ksize = 16,
1096 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1097 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1098 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1099 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1100 .psize = 50,
1101 .digest = "\x09\xf0\xb2\x84\x6d\x2f\x54\x3d"
1102 "\xa3\x63\xcb\xec\x8d\x62\xa3\x8d",
1103 }, {
1104 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1105 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1106 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1107 .ksize = 25,
1108 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1109 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1110 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1111 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1112 .psize = 50,
1113 .digest = "\xbd\xbb\xd7\xcf\x03\xe4\x4b\x5a"
1114 "\xa6\x0a\xf8\x15\xbe\x4d\x22\x94",
1115 }, {
1116 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1117 .ksize = 16,
1118 .plaintext = "Test With Truncation",
1119 .psize = 20,
1120 .digest = "\xe7\x98\x08\xf2\x4b\x25\xfd\x03"
1121 "\x1c\x15\x5f\x0d\x55\x1d\x9a\x3a",
1122 }, {
1123 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1124 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1125 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1126 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1127 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1128 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1129 "\xaa\xaa",
1130 .ksize = 80,
1131 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1132 .psize = 54,
1133 .digest = "\xdc\x73\x29\x28\xde\x98\x10\x4a"
1134 "\x1f\x59\xd3\x73\xc1\x50\xac\xbb",
1135 }, {
1136 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1137 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1138 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1139 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1140 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1141 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1142 "\xaa\xaa",
1143 .ksize = 80,
1144 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1145 "Block-Size Data",
1146 .psize = 73,
1147 .digest = "\x5c\x6b\xec\x96\x79\x3e\x16\xd4"
1148 "\x06\x90\xc2\x37\x63\x5f\x30\xc5",
1149 },
1150};
1151
1152/*
1153 * HMAC-RIPEMD160 test vectors from RFC2286
1154 */
1155#define HMAC_RMD160_TEST_VECTORS 7
1156
1157static struct hash_testvec hmac_rmd160_tv_template[] = {
1158 {
1159 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1160 .ksize = 20,
1161 .plaintext = "Hi There",
1162 .psize = 8,
1163 .digest = "\x24\xcb\x4b\xd6\x7d\x20\xfc\x1a\x5d\x2e"
1164 "\xd7\x73\x2d\xcc\x39\x37\x7f\x0a\x56\x68",
1165 }, {
1166 .key = "Jefe",
1167 .ksize = 4,
1168 .plaintext = "what do ya want for nothing?",
1169 .psize = 28,
1170 .digest = "\xdd\xa6\xc0\x21\x3a\x48\x5a\x9e\x24\xf4"
1171 "\x74\x20\x64\xa7\xf0\x33\xb4\x3c\x40\x69",
1172 .np = 2,
1173 .tap = { 14, 14 },
1174 }, {
1175 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1176 .ksize = 20,
1177 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1178 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1179 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1180 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1181 .psize = 50,
1182 .digest = "\xb0\xb1\x05\x36\x0d\xe7\x59\x96\x0a\xb4"
1183 "\xf3\x52\x98\xe1\x16\xe2\x95\xd8\xe7\xc1",
1184 }, {
1185 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1186 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1187 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1188 .ksize = 25,
1189 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1190 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1191 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1192 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1193 .psize = 50,
1194 .digest = "\xd5\xca\x86\x2f\x4d\x21\xd5\xe6\x10\xe1"
1195 "\x8b\x4c\xf1\xbe\xb9\x7a\x43\x65\xec\xf4",
1196 }, {
1197 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1198 .ksize = 20,
1199 .plaintext = "Test With Truncation",
1200 .psize = 20,
1201 .digest = "\x76\x19\x69\x39\x78\xf9\x1d\x90\x53\x9a"
1202 "\xe7\x86\x50\x0f\xf3\xd8\xe0\x51\x8e\x39",
1203 }, {
1204 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1205 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1206 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1207 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1208 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1209 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1210 "\xaa\xaa",
1211 .ksize = 80,
1212 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1213 .psize = 54,
1214 .digest = "\x64\x66\xca\x07\xac\x5e\xac\x29\xe1\xbd"
1215 "\x52\x3e\x5a\xda\x76\x05\xb7\x91\xfd\x8b",
1216 }, {
1217 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1218 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1219 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1220 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1221 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1222 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1223 "\xaa\xaa",
1224 .ksize = 80,
1225 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1226 "Block-Size Data",
1227 .psize = 73,
1228 .digest = "\x69\xea\x60\x79\x8d\x71\x61\x6c\xce\x5f"
1229 "\xd0\x87\x1e\x23\x75\x4c\xd7\x5d\x5a\x0a",
1230 },
1231};
1232
1233/*
1234 * HMAC-SHA1 test vectors from RFC2202
1235 */
1236#define HMAC_SHA1_TEST_VECTORS 7
1237
1238static struct hash_testvec hmac_sha1_tv_template[] = {
1239 {
1240 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b",
1241 .ksize = 20,
1242 .plaintext = "Hi There",
1243 .psize = 8,
1244 .digest = "\xb6\x17\x31\x86\x55\x05\x72\x64"
1245 "\xe2\x8b\xc0\xb6\xfb\x37\x8c\x8e\xf1"
1246 "\x46\xbe",
1247 }, {
1248 .key = "Jefe",
1249 .ksize = 4,
1250 .plaintext = "what do ya want for nothing?",
1251 .psize = 28,
1252 .digest = "\xef\xfc\xdf\x6a\xe5\xeb\x2f\xa2\xd2\x74"
1253 "\x16\xd5\xf1\x84\xdf\x9c\x25\x9a\x7c\x79",
1254 .np = 2,
1255 .tap = { 14, 14 }
1256 }, {
1257 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1258 .ksize = 20,
1259 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1260 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1261 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1262 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1263 .psize = 50,
1264 .digest = "\x12\x5d\x73\x42\xb9\xac\x11\xcd\x91\xa3"
1265 "\x9a\xf4\x8a\xa1\x7b\x4f\x63\xf1\x75\xd3",
1266 }, {
1267 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1268 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1269 "\x11\x12\x13\x14\x15\x16\x17\x18\x19",
1270 .ksize = 25,
1271 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1272 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1273 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1274 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1275 .psize = 50,
1276 .digest = "\x4c\x90\x07\xf4\x02\x62\x50\xc6\xbc\x84"
1277 "\x14\xf9\xbf\x50\xc8\x6c\x2d\x72\x35\xda",
1278 }, {
1279 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c",
1280 .ksize = 20,
1281 .plaintext = "Test With Truncation",
1282 .psize = 20,
1283 .digest = "\x4c\x1a\x03\x42\x4b\x55\xe0\x7f\xe7\xf2"
1284 "\x7b\xe1\xd5\x8b\xb9\x32\x4a\x9a\x5a\x04",
1285 }, {
1286 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1287 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1288 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1289 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1290 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1291 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1292 "\xaa\xaa",
1293 .ksize = 80,
1294 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1295 .psize = 54,
1296 .digest = "\xaa\x4a\xe5\xe1\x52\x72\xd0\x0e\x95\x70"
1297 "\x56\x37\xce\x8a\x3b\x55\xed\x40\x21\x12",
1298 }, {
1299 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1300 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1301 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1302 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1303 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1304 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1305 "\xaa\xaa",
1306 .ksize = 80,
1307 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than One "
1308 "Block-Size Data",
1309 .psize = 73,
1310 .digest = "\xe8\xe9\x9d\x0f\x45\x23\x7d\x78\x6d\x6b"
1311 "\xba\xa7\x96\x5c\x78\x08\xbb\xff\x1a\x91",
1312 },
1313};
1314
1315
1316/*
1317 * SHA224 HMAC test vectors from RFC4231
1318 */
1319#define HMAC_SHA224_TEST_VECTORS 4
1320
1321static struct hash_testvec hmac_sha224_tv_template[] = {
1322 {
1323 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1324 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1325 "\x0b\x0b\x0b\x0b",
1326 .ksize = 20,
1327 /* ("Hi There") */
1328 .plaintext = "\x48\x69\x20\x54\x68\x65\x72\x65",
1329 .psize = 8,
1330 .digest = "\x89\x6f\xb1\x12\x8a\xbb\xdf\x19"
1331 "\x68\x32\x10\x7c\xd4\x9d\xf3\x3f"
1332 "\x47\xb4\xb1\x16\x99\x12\xba\x4f"
1333 "\x53\x68\x4b\x22",
1334 }, {
1335 .key = "Jefe",
1336 .ksize = 4,
1337 /* ("what do ya want for nothing?") */
1338 .plaintext = "\x77\x68\x61\x74\x20\x64\x6f\x20"
1339 "\x79\x61\x20\x77\x61\x6e\x74\x20"
1340 "\x66\x6f\x72\x20\x6e\x6f\x74\x68"
1341 "\x69\x6e\x67\x3f",
1342 .psize = 28,
1343 .digest = "\xa3\x0e\x01\x09\x8b\xc6\xdb\xbf"
1344 "\x45\x69\x0f\x3a\x7e\x9e\x6d\x0f"
1345 "\x8b\xbe\xa2\xa3\x9e\x61\x48\x00"
1346 "\x8f\xd0\x5e\x44",
1347 .np = 4,
1348 .tap = { 7, 7, 7, 7 }
1349 }, {
1350 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1351 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1352 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1353 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1354 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1355 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1356 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1357 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1358 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1359 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1360 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1361 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1362 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1363 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1364 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1365 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1366 "\xaa\xaa\xaa",
1367 .ksize = 131,
1368 /* ("Test Using Larger Than Block-Size Key - Hash Key First") */
1369 .plaintext = "\x54\x65\x73\x74\x20\x55\x73\x69"
1370 "\x6e\x67\x20\x4c\x61\x72\x67\x65"
1371 "\x72\x20\x54\x68\x61\x6e\x20\x42"
1372 "\x6c\x6f\x63\x6b\x2d\x53\x69\x7a"
1373 "\x65\x20\x4b\x65\x79\x20\x2d\x20"
1374 "\x48\x61\x73\x68\x20\x4b\x65\x79"
1375 "\x20\x46\x69\x72\x73\x74",
1376 .psize = 54,
1377 .digest = "\x95\xe9\xa0\xdb\x96\x20\x95\xad"
1378 "\xae\xbe\x9b\x2d\x6f\x0d\xbc\xe2"
1379 "\xd4\x99\xf1\x12\xf2\xd2\xb7\x27"
1380 "\x3f\xa6\x87\x0e",
1381 }, {
1382 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1383 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1384 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1385 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1386 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1387 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1388 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1389 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1390 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1391 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1392 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1393 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1394 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1395 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1396 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1397 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1398 "\xaa\xaa\xaa",
1399 .ksize = 131,
1400 /* ("This is a test using a larger than block-size key and a")
1401 (" larger than block-size data. The key needs to be")
1402 (" hashed before being used by the HMAC algorithm.") */
1403 .plaintext = "\x54\x68\x69\x73\x20\x69\x73\x20"
1404 "\x61\x20\x74\x65\x73\x74\x20\x75"
1405 "\x73\x69\x6e\x67\x20\x61\x20\x6c"
1406 "\x61\x72\x67\x65\x72\x20\x74\x68"
1407 "\x61\x6e\x20\x62\x6c\x6f\x63\x6b"
1408 "\x2d\x73\x69\x7a\x65\x20\x6b\x65"
1409 "\x79\x20\x61\x6e\x64\x20\x61\x20"
1410 "\x6c\x61\x72\x67\x65\x72\x20\x74"
1411 "\x68\x61\x6e\x20\x62\x6c\x6f\x63"
1412 "\x6b\x2d\x73\x69\x7a\x65\x20\x64"
1413 "\x61\x74\x61\x2e\x20\x54\x68\x65"
1414 "\x20\x6b\x65\x79\x20\x6e\x65\x65"
1415 "\x64\x73\x20\x74\x6f\x20\x62\x65"
1416 "\x20\x68\x61\x73\x68\x65\x64\x20"
1417 "\x62\x65\x66\x6f\x72\x65\x20\x62"
1418 "\x65\x69\x6e\x67\x20\x75\x73\x65"
1419 "\x64\x20\x62\x79\x20\x74\x68\x65"
1420 "\x20\x48\x4d\x41\x43\x20\x61\x6c"
1421 "\x67\x6f\x72\x69\x74\x68\x6d\x2e",
1422 .psize = 152,
1423 .digest = "\x3a\x85\x41\x66\xac\x5d\x9f\x02"
1424 "\x3f\x54\xd5\x17\xd0\xb3\x9d\xbd"
1425 "\x94\x67\x70\xdb\x9c\x2b\x95\xc9"
1426 "\xf6\xf5\x65\xd1",
1427 },
1428};
1429
1430/*
1431 * HMAC-SHA256 test vectors from
1432 * draft-ietf-ipsec-ciph-sha-256-01.txt
1433 */
1434#define HMAC_SHA256_TEST_VECTORS 10
1435
1436static struct hash_testvec hmac_sha256_tv_template[] = {
1437 {
1438 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1439 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1440 "\x11\x12\x13\x14\x15\x16\x17\x18"
1441 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1442 .ksize = 32,
1443 .plaintext = "abc",
1444 .psize = 3,
1445 .digest = "\xa2\x1b\x1f\x5d\x4c\xf4\xf7\x3a"
1446 "\x4d\xd9\x39\x75\x0f\x7a\x06\x6a"
1447 "\x7f\x98\xcc\x13\x1c\xb1\x6a\x66"
1448 "\x92\x75\x90\x21\xcf\xab\x81\x81",
1449 }, {
1450 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1451 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1452 "\x11\x12\x13\x14\x15\x16\x17\x18"
1453 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1454 .ksize = 32,
1455 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1456 .psize = 56,
1457 .digest = "\x10\x4f\xdc\x12\x57\x32\x8f\x08"
1458 "\x18\x4b\xa7\x31\x31\xc5\x3c\xae"
1459 "\xe6\x98\xe3\x61\x19\x42\x11\x49"
1460 "\xea\x8c\x71\x24\x56\x69\x7d\x30",
1461 }, {
1462 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1463 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1464 "\x11\x12\x13\x14\x15\x16\x17\x18"
1465 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20",
1466 .ksize = 32,
1467 .plaintext = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
1468 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
1469 .psize = 112,
1470 .digest = "\x47\x03\x05\xfc\x7e\x40\xfe\x34"
1471 "\xd3\xee\xb3\xe7\x73\xd9\x5a\xab"
1472 "\x73\xac\xf0\xfd\x06\x04\x47\xa5"
1473 "\xeb\x45\x95\xbf\x33\xa9\xd1\xa3",
1474 }, {
1475 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1476 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1477 "\x0b\x0b\x0b\x0b\x0b\x0b",
1478 .ksize = 32,
1479 .plaintext = "Hi There",
1480 .psize = 8,
1481 .digest = "\x19\x8a\x60\x7e\xb4\x4b\xfb\xc6"
1482 "\x99\x03\xa0\xf1\xcf\x2b\xbd\xc5"
1483 "\xba\x0a\xa3\xf3\xd9\xae\x3c\x1c"
1484 "\x7a\x3b\x16\x96\xa0\xb6\x8c\xf7",
1485 }, {
1486 .key = "Jefe",
1487 .ksize = 4,
1488 .plaintext = "what do ya want for nothing?",
1489 .psize = 28,
1490 .digest = "\x5b\xdc\xc1\x46\xbf\x60\x75\x4e"
1491 "\x6a\x04\x24\x26\x08\x95\x75\xc7"
1492 "\x5a\x00\x3f\x08\x9d\x27\x39\x83"
1493 "\x9d\xec\x58\xb9\x64\xec\x38\x43",
1494 .np = 2,
1495 .tap = { 14, 14 }
1496 }, {
1497 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1498 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1499 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa",
1500 .ksize = 32,
1501 .plaintext = "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1502 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1503 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd"
1504 "\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd",
1505 .psize = 50,
1506 .digest = "\xcd\xcb\x12\x20\xd1\xec\xcc\xea"
1507 "\x91\xe5\x3a\xba\x30\x92\xf9\x62"
1508 "\xe5\x49\xfe\x6c\xe9\xed\x7f\xdc"
1509 "\x43\x19\x1f\xbd\xe4\x5c\x30\xb0",
1510 }, {
1511 .key = "\x01\x02\x03\x04\x05\x06\x07\x08"
1512 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
1513 "\x11\x12\x13\x14\x15\x16\x17\x18"
1514 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
1515 "\x21\x22\x23\x24\x25",
1516 .ksize = 37,
1517 .plaintext = "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1518 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1519 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd"
1520 "\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd\xcd",
1521 .psize = 50,
1522 .digest = "\xd4\x63\x3c\x17\xf6\xfb\x8d\x74"
1523 "\x4c\x66\xde\xe0\xf8\xf0\x74\x55"
1524 "\x6e\xc4\xaf\x55\xef\x07\x99\x85"
1525 "\x41\x46\x8e\xb4\x9b\xd2\xe9\x17",
1526 }, {
1527 .key = "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1528 "\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c"
1529 "\x0c\x0c\x0c\x0c\x0c\x0c",
1530 .ksize = 32,
1531 .plaintext = "Test With Truncation",
1532 .psize = 20,
1533 .digest = "\x75\x46\xaf\x01\x84\x1f\xc0\x9b"
1534 "\x1a\xb9\xc3\x74\x9a\x5f\x1c\x17"
1535 "\xd4\xf5\x89\x66\x8a\x58\x7b\x27"
1536 "\x00\xa9\xc9\x7c\x11\x93\xcf\x42",
1537 }, {
1538 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1539 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1540 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1541 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1542 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1543 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1544 "\xaa\xaa",
1545 .ksize = 80,
1546 .plaintext = "Test Using Larger Than Block-Size Key - Hash Key First",
1547 .psize = 54,
1548 .digest = "\x69\x53\x02\x5e\xd9\x6f\x0c\x09"
1549 "\xf8\x0a\x96\xf7\x8e\x65\x38\xdb"
1550 "\xe2\xe7\xb8\x20\xe3\xdd\x97\x0e"
1551 "\x7d\xdd\x39\x09\x1b\x32\x35\x2f",
1552 }, {
1553 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1554 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1555 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1556 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1557 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1558 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1559 "\xaa\xaa",
1560 .ksize = 80,
1561 .plaintext = "Test Using Larger Than Block-Size Key and Larger Than "
1562 "One Block-Size Data",
1563 .psize = 73,
1564 .digest = "\x63\x55\xac\x22\xe8\x90\xd0\xa3"
1565 "\xc8\x48\x1a\x5c\xa4\x82\x5b\xc8"
1566 "\x84\xd3\xe7\xa1\xff\x98\xa2\xfc"
1567 "\x2a\xc7\xd8\xe0\x64\xc3\xb2\xe6",
1568 },
1569};
1570
1571#define XCBC_AES_TEST_VECTORS 6
1572
1573static struct hash_testvec aes_xcbc128_tv_template[] = {
1574 {
1575 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1576 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1577 .plaintext = zeroed_string,
1578 .digest = "\x75\xf0\x25\x1d\x52\x8a\xc0\x1c"
1579 "\x45\x73\xdf\xd5\x84\xd7\x9f\x29",
1580 .psize = 0,
1581 .ksize = 16,
1582 }, {
1583 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1584 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1585 .plaintext = "\x00\x01\x02",
1586 .digest = "\x5b\x37\x65\x80\xae\x2f\x19\xaf"
1587 "\xe7\x21\x9c\xee\xf1\x72\x75\x6f",
1588 .psize = 3,
1589 .ksize = 16,
1590 } , {
1591 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1592 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1593 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1594 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1595 .digest = "\xd2\xa2\x46\xfa\x34\x9b\x68\xa7"
1596 "\x99\x98\xa4\x39\x4f\xf7\xa2\x63",
1597 .psize = 16,
1598 .ksize = 16,
1599 }, {
1600 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1601 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1602 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1603 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1604 "\x10\x11\x12\x13",
1605 .digest = "\x47\xf5\x1b\x45\x64\x96\x62\x15"
1606 "\xb8\x98\x5c\x63\x05\x5e\xd3\x08",
1607 .tap = { 10, 10 },
1608 .psize = 20,
1609 .np = 2,
1610 .ksize = 16,
1611 }, {
1612 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1613 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1614 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1615 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1616 "\x10\x11\x12\x13\x14\x15\x16\x17"
1617 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
1618 .digest = "\xf5\x4f\x0e\xc8\xd2\xb9\xf3\xd3"
1619 "\x68\x07\x73\x4b\xd5\x28\x3f\xd4",
1620 .psize = 32,
1621 .ksize = 16,
1622 }, {
1623 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
1624 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
1625 .plaintext = "\x00\x01\x02\x03\x04\x05\x06\x07"
1626 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
1627 "\x10\x11\x12\x13\x14\x15\x16\x17"
1628 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
1629 "\x20\x21",
1630 .digest = "\xbe\xcb\xb3\xbc\xcd\xb5\x18\xa3"
1631 "\x06\x77\xd5\x48\x1f\xb6\xb4\xd8",
1632 .tap = { 17, 17 },
1633 .psize = 34,
1634 .np = 2,
1635 .ksize = 16,
1636 }
1637};
1638
1639/*
1640 * SHA384 HMAC test vectors from RFC4231
1641 */
1642
1643#define HMAC_SHA384_TEST_VECTORS 4
1644
1645static struct hash_testvec hmac_sha384_tv_template[] = {
1646 {
1647 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1648 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1649 "\x0b\x0b\x0b\x0b",
1650 .ksize = 20,
1651 .plaintext = "Hi There",
1652 .psize = 8,
1653 .digest = "\xaf\xd0\x39\x44\xd8\x48\x95\x62"
1654 "\x6b\x08\x25\xf4\xab\x46\x90\x7f"
1655 "\x15\xf9\xda\xdb\xe4\x10\x1e\xc6"
1656 "\x82\xaa\x03\x4c\x7c\xeb\xc5\x9c"
1657 "\xfa\xea\x9e\xa9\x07\x6e\xde\x7f"
1658 "\x4a\xf1\x52\xe8\xb2\xfa\x9c\xb6",
1659 }, {
1660 .key = "Jefe",
1661 .ksize = 4,
1662 .plaintext = "what do ya want for nothing?",
1663 .psize = 28,
1664 .digest = "\xaf\x45\xd2\xe3\x76\x48\x40\x31"
1665 "\x61\x7f\x78\xd2\xb5\x8a\x6b\x1b"
1666 "\x9c\x7e\xf4\x64\xf5\xa0\x1b\x47"
1667 "\xe4\x2e\xc3\x73\x63\x22\x44\x5e"
1668 "\x8e\x22\x40\xca\x5e\x69\xe2\xc7"
1669 "\x8b\x32\x39\xec\xfa\xb2\x16\x49",
1670 .np = 4,
1671 .tap = { 7, 7, 7, 7 }
1672 }, {
1673 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1674 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1675 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1676 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1677 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1678 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1679 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1680 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1681 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1682 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1683 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1684 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1685 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1686 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1687 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1688 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1689 "\xaa\xaa\xaa",
1690 .ksize = 131,
1691 .plaintext = "Test Using Larger Than Block-Siz"
1692 "e Key - Hash Key First",
1693 .psize = 54,
1694 .digest = "\x4e\xce\x08\x44\x85\x81\x3e\x90"
1695 "\x88\xd2\xc6\x3a\x04\x1b\xc5\xb4"
1696 "\x4f\x9e\xf1\x01\x2a\x2b\x58\x8f"
1697 "\x3c\xd1\x1f\x05\x03\x3a\xc4\xc6"
1698 "\x0c\x2e\xf6\xab\x40\x30\xfe\x82"
1699 "\x96\x24\x8d\xf1\x63\xf4\x49\x52",
1700 }, {
1701 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1702 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1703 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1704 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1705 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1706 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1707 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1708 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1709 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1710 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1711 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1712 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1713 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1714 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1715 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1716 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1717 "\xaa\xaa\xaa",
1718 .ksize = 131,
1719 .plaintext = "This is a test u"
1720 "sing a larger th"
1721 "an block-size ke"
1722 "y and a larger t"
1723 "han block-size d"
1724 "ata. The key nee"
1725 "ds to be hashed "
1726 "before being use"
1727 "d by the HMAC al"
1728 "gorithm.",
1729 .psize = 152,
1730 .digest = "\x66\x17\x17\x8e\x94\x1f\x02\x0d"
1731 "\x35\x1e\x2f\x25\x4e\x8f\xd3\x2c"
1732 "\x60\x24\x20\xfe\xb0\xb8\xfb\x9a"
1733 "\xdc\xce\xbb\x82\x46\x1e\x99\xc5"
1734 "\xa6\x78\xcc\x31\xe7\x99\x17\x6d"
1735 "\x38\x60\xe6\x11\x0c\x46\x52\x3e",
1736 },
1737};
1738
1739/*
1740 * SHA512 HMAC test vectors from RFC4231
1741 */
1742
1743#define HMAC_SHA512_TEST_VECTORS 4
1744
1745static struct hash_testvec hmac_sha512_tv_template[] = {
1746 {
1747 .key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1748 "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
1749 "\x0b\x0b\x0b\x0b",
1750 .ksize = 20,
1751 .plaintext = "Hi There",
1752 .psize = 8,
1753 .digest = "\x87\xaa\x7c\xde\xa5\xef\x61\x9d"
1754 "\x4f\xf0\xb4\x24\x1a\x1d\x6c\xb0"
1755 "\x23\x79\xf4\xe2\xce\x4e\xc2\x78"
1756 "\x7a\xd0\xb3\x05\x45\xe1\x7c\xde"
1757 "\xda\xa8\x33\xb7\xd6\xb8\xa7\x02"
1758 "\x03\x8b\x27\x4e\xae\xa3\xf4\xe4"
1759 "\xbe\x9d\x91\x4e\xeb\x61\xf1\x70"
1760 "\x2e\x69\x6c\x20\x3a\x12\x68\x54",
1761 }, {
1762 .key = "Jefe",
1763 .ksize = 4,
1764 .plaintext = "what do ya want for nothing?",
1765 .psize = 28,
1766 .digest = "\x16\x4b\x7a\x7b\xfc\xf8\x19\xe2"
1767 "\xe3\x95\xfb\xe7\x3b\x56\xe0\xa3"
1768 "\x87\xbd\x64\x22\x2e\x83\x1f\xd6"
1769 "\x10\x27\x0c\xd7\xea\x25\x05\x54"
1770 "\x97\x58\xbf\x75\xc0\x5a\x99\x4a"
1771 "\x6d\x03\x4f\x65\xf8\xf0\xe6\xfd"
1772 "\xca\xea\xb1\xa3\x4d\x4a\x6b\x4b"
1773 "\x63\x6e\x07\x0a\x38\xbc\xe7\x37",
1774 .np = 4,
1775 .tap = { 7, 7, 7, 7 }
1776 }, {
1777 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1778 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1779 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1780 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1781 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1782 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1783 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1784 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1785 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1786 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1787 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1788 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1789 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1790 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1791 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1792 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1793 "\xaa\xaa\xaa",
1794 .ksize = 131,
1795 .plaintext = "Test Using Large"
1796 "r Than Block-Siz"
1797 "e Key - Hash Key"
1798 " First",
1799 .psize = 54,
1800 .digest = "\x80\xb2\x42\x63\xc7\xc1\xa3\xeb"
1801 "\xb7\x14\x93\xc1\xdd\x7b\xe8\xb4"
1802 "\x9b\x46\xd1\xf4\x1b\x4a\xee\xc1"
1803 "\x12\x1b\x01\x37\x83\xf8\xf3\x52"
1804 "\x6b\x56\xd0\x37\xe0\x5f\x25\x98"
1805 "\xbd\x0f\xd2\x21\x5d\x6a\x1e\x52"
1806 "\x95\xe6\x4f\x73\xf6\x3f\x0a\xec"
1807 "\x8b\x91\x5a\x98\x5d\x78\x65\x98",
1808 }, {
1809 .key = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1810 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1811 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1812 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1813 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1814 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1815 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1816 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1817 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1818 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1819 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1820 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1821 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1822 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1823 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1824 "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
1825 "\xaa\xaa\xaa",
1826 .ksize = 131,
1827 .plaintext =
1828 "This is a test u"
1829 "sing a larger th"
1830 "an block-size ke"
1831 "y and a larger t"
1832 "han block-size d"
1833 "ata. The key nee"
1834 "ds to be hashed "
1835 "before being use"
1836 "d by the HMAC al"
1837 "gorithm.",
1838 .psize = 152,
1839 .digest = "\xe3\x7b\x6a\x77\x5d\xc8\x7d\xba"
1840 "\xa4\xdf\xa9\xf9\x6e\x5e\x3f\xfd"
1841 "\xde\xbd\x71\xf8\x86\x72\x89\x86"
1842 "\x5d\xf5\xa3\x2d\x20\xcd\xc9\x44"
1843 "\xb6\x02\x2c\xac\x3c\x49\x82\xb1"
1844 "\x0d\x5e\xeb\x55\xc3\xe4\xde\x15"
1845 "\x13\x46\x76\xfb\x6d\xe0\x44\x60"
1846 "\x65\xc9\x74\x40\xfa\x8c\x6a\x58",
1847 },
1848};
1849
1850/*
1851 * DES test vectors.
1852 */
1853#define DES_ENC_TEST_VECTORS 10
1854#define DES_DEC_TEST_VECTORS 4
1855#define DES_CBC_ENC_TEST_VECTORS 5
1856#define DES_CBC_DEC_TEST_VECTORS 4
1857#define DES3_EDE_ENC_TEST_VECTORS 3
1858#define DES3_EDE_DEC_TEST_VECTORS 3
1859#define DES3_EDE_CBC_ENC_TEST_VECTORS 1
1860#define DES3_EDE_CBC_DEC_TEST_VECTORS 1
1861
1862static struct cipher_testvec des_enc_tv_template[] = {
1863 { /* From Applied Cryptography */
1864 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1865 .klen = 8,
1866 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1867 .ilen = 8,
1868 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1869 .rlen = 8,
1870 }, { /* Same key, different plaintext block */
1871 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1872 .klen = 8,
1873 .input = "\x22\x33\x44\x55\x66\x77\x88\x99",
1874 .ilen = 8,
1875 .result = "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1876 .rlen = 8,
1877 }, { /* Sbox test from NBS */
1878 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1879 .klen = 8,
1880 .input = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1881 .ilen = 8,
1882 .result = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1883 .rlen = 8,
1884 }, { /* Three blocks */
1885 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1886 .klen = 8,
1887 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1888 "\x22\x33\x44\x55\x66\x77\x88\x99"
1889 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1890 .ilen = 24,
1891 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1892 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1893 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1894 .rlen = 24,
1895 }, { /* Weak key */
1896 .fail = 1,
1897 .wk = 1,
1898 .key = "\x01\x01\x01\x01\x01\x01\x01\x01",
1899 .klen = 8,
1900 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1901 .ilen = 8,
1902 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1903 .rlen = 8,
1904 }, { /* Two blocks -- for testing encryption across pages */
1905 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1906 .klen = 8,
1907 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1908 "\x22\x33\x44\x55\x66\x77\x88\x99",
1909 .ilen = 16,
1910 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1911 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1912 .rlen = 16,
1913 .np = 2,
1914 .tap = { 8, 8 }
1915 }, { /* Four blocks -- for testing encryption with chunking */
1916 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1917 .klen = 8,
1918 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1919 "\x22\x33\x44\x55\x66\x77\x88\x99"
1920 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef"
1921 "\x22\x33\x44\x55\x66\x77\x88\x99",
1922 .ilen = 32,
1923 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1924 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1925 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90"
1926 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1927 .rlen = 32,
1928 .np = 3,
1929 .tap = { 14, 10, 8 }
1930 }, {
1931 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1932 .klen = 8,
1933 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1934 "\x22\x33\x44\x55\x66\x77\x88\x99"
1935 "\xca\xfe\xba\xbe\xfe\xed\xbe\xef",
1936 .ilen = 24,
1937 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1938 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b"
1939 "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
1940 .rlen = 24,
1941 .np = 4,
1942 .tap = { 2, 1, 3, 18 }
1943 }, {
1944 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1945 .klen = 8,
1946 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1947 "\x22\x33\x44\x55\x66\x77\x88\x99",
1948 .ilen = 16,
1949 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1950 "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b",
1951 .rlen = 16,
1952 .np = 5,
1953 .tap = { 2, 2, 2, 2, 8 }
1954 }, {
1955 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1956 .klen = 8,
1957 .input = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1958 .ilen = 8,
1959 .result = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1960 .rlen = 8,
1961 .np = 8,
1962 .tap = { 1, 1, 1, 1, 1, 1, 1, 1 }
1963 },
1964};
1965
1966static struct cipher_testvec des_dec_tv_template[] = {
1967 { /* From Applied Cryptography */
1968 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1969 .klen = 8,
1970 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d",
1971 .ilen = 8,
1972 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7",
1973 .rlen = 8,
1974 }, { /* Sbox test from NBS */
1975 .key = "\x7c\xa1\x10\x45\x4a\x1a\x6e\x57",
1976 .klen = 8,
1977 .input = "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1978 .ilen = 8,
1979 .result = "\x01\xa1\xd6\xd0\x39\x77\x67\x42",
1980 .rlen = 8,
1981 }, { /* Two blocks, for chunking test */
1982 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1983 .klen = 8,
1984 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1985 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1986 .ilen = 16,
1987 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1988 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
1989 .rlen = 16,
1990 .np = 2,
1991 .tap = { 8, 8 }
1992 }, {
1993 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
1994 .klen = 8,
1995 .input = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d"
1996 "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b",
1997 .ilen = 16,
1998 .result = "\x01\x23\x45\x67\x89\xab\xcd\xe7"
1999 "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5",
2000 .rlen = 16,
2001 .np = 3,
2002 .tap = { 3, 12, 1 }
2003 },
2004};
2005
2006static struct cipher_testvec des_cbc_enc_tv_template[] = {
2007 { /* From OpenSSL */
2008 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2009 .klen = 8,
2010 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2011 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2012 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2013 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2014 .ilen = 24,
2015 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2016 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2017 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2018 .rlen = 24,
2019 }, { /* FIPS Pub 81 */
2020 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2021 .klen = 8,
2022 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2023 .input = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2024 .ilen = 8,
2025 .result = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2026 .rlen = 8,
2027 }, {
2028 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2029 .klen = 8,
2030 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2031 .input = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2032 .ilen = 8,
2033 .result = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2034 .rlen = 8,
2035 }, {
2036 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2037 .klen = 8,
2038 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2039 .input = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2040 .ilen = 8,
2041 .result = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2042 .rlen = 8,
2043 }, { /* Copy of openssl vector for chunk testing */
2044 /* From OpenSSL */
2045 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2046 .klen = 8,
2047 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2048 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2049 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2050 "\x68\x65\x20\x74\x69\x6d\x65\x20",
2051 .ilen = 24,
2052 .result = "\xcc\xd1\x73\xff\xab\x20\x39\xf4"
2053 "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb"
2054 "\x46\x8e\x91\x15\x78\x88\xba\x68",
2055 .rlen = 24,
2056 .np = 2,
2057 .tap = { 13, 11 }
2058 },
2059};
2060
2061static struct cipher_testvec des_cbc_dec_tv_template[] = {
2062 { /* FIPS Pub 81 */
2063 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2064 .klen = 8,
2065 .iv = "\x12\x34\x56\x78\x90\xab\xcd\xef",
2066 .input = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2067 .ilen = 8,
2068 .result = "\x4e\x6f\x77\x20\x69\x73\x20\x74",
2069 .rlen = 8,
2070 }, {
2071 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2072 .klen = 8,
2073 .iv = "\xe5\xc7\xcd\xde\x87\x2b\xf2\x7c",
2074 .input = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2075 .ilen = 8,
2076 .result = "\x68\x65\x20\x74\x69\x6d\x65\x20",
2077 .rlen = 8,
2078 }, {
2079 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2080 .klen = 8,
2081 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2082 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2083 .ilen = 8,
2084 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2085 .rlen = 8,
2086 }, { /* Copy of above, for chunk testing */
2087 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2088 .klen = 8,
2089 .iv = "\x43\xe9\x34\x00\x8c\x38\x9c\x0f",
2090 .input = "\x68\x37\x88\x49\x9a\x7c\x05\xf6",
2091 .ilen = 8,
2092 .result = "\x66\x6f\x72\x20\x61\x6c\x6c\x20",
2093 .rlen = 8,
2094 .np = 2,
2095 .tap = { 4, 4 }
2096 },
2097};
2098
2099static struct cipher_testvec des3_ede_enc_tv_template[] = {
2100 { /* These are from openssl */
2101 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2102 "\x55\x55\x55\x55\x55\x55\x55\x55"
2103 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2104 .klen = 24,
2105 .input = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2106 .ilen = 8,
2107 .result = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2108 .rlen = 8,
2109 }, {
2110 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2111 "\x86\x02\x87\x66\x59\x08\x21\x98"
2112 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2113 .klen = 24,
2114 .input = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2115 .ilen = 8,
2116 .result = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2117 .rlen = 8,
2118 }, {
2119 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2120 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2121 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2122 .klen = 24,
2123 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2124 .ilen = 8,
2125 .result = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2126 .rlen = 8,
2127 },
2128};
2129
2130static struct cipher_testvec des3_ede_dec_tv_template[] = {
2131 { /* These are from openssl */
2132 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2133 "\x55\x55\x55\x55\x55\x55\x55\x55"
2134 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2135 .klen = 24,
2136 .input = "\x18\xd7\x48\xe5\x63\x62\x05\x72",
2137 .ilen = 8,
2138 .result = "\x73\x6f\x6d\x65\x64\x61\x74\x61",
2139 .rlen = 8,
2140 }, {
2141 .key = "\x03\x52\x02\x07\x67\x20\x82\x17"
2142 "\x86\x02\x87\x66\x59\x08\x21\x98"
2143 "\x64\x05\x6a\xbd\xfe\xa9\x34\x57",
2144 .klen = 24,
2145 .input = "\xc0\x7d\x2a\x0f\xa5\x66\xfa\x30",
2146 .ilen = 8,
2147 .result = "\x73\x71\x75\x69\x67\x67\x6c\x65",
2148 .rlen = 8,
2149 }, {
2150 .key = "\x10\x46\x10\x34\x89\x98\x80\x20"
2151 "\x91\x07\xd0\x15\x89\x19\x01\x01"
2152 "\x19\x07\x92\x10\x98\x1a\x01\x01",
2153 .klen = 24,
2154 .input = "\xe1\xef\x62\xc3\x32\xfe\x82\x5b",
2155 .ilen = 8,
2156 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2157 .rlen = 8,
2158 },
2159};
2160
2161static struct cipher_testvec des3_ede_cbc_enc_tv_template[] = {
2162 { /* Generated from openssl */
2163 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2164 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2165 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2166 .klen = 24,
2167 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2168 .input = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2169 "\x53\x20\x63\x65\x65\x72\x73\x74"
2170 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2171 "\x20\x79\x65\x53\x72\x63\x74\x65"
2172 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2173 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2174 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2175 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2176 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2177 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2178 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2179 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2180 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2181 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2182 "\x63\x65\x65\x72\x73\x74\x54\x20"
2183 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2184 .ilen = 128,
2185 .result = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2186 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2187 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2188 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2189 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2190 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2191 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2192 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2193 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2194 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2195 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2196 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2197 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2198 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2199 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2200 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2201 .rlen = 128,
2202 },
2203};
2204
2205static struct cipher_testvec des3_ede_cbc_dec_tv_template[] = {
2206 { /* Generated from openssl */
2207 .key = "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24"
2208 "\x44\x4D\x99\x5A\x12\xD6\x40\xC0"
2209 "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
2210 .klen = 24,
2211 .iv = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
2212 .input = "\x0e\x2d\xb6\x97\x3c\x56\x33\xf4"
2213 "\x67\x17\x21\xc7\x6e\x8a\xd5\x49"
2214 "\x74\xb3\x49\x05\xc5\x1c\xd0\xed"
2215 "\x12\x56\x5c\x53\x96\xb6\x00\x7d"
2216 "\x90\x48\xfc\xf5\x8d\x29\x39\xcc"
2217 "\x8a\xd5\x35\x18\x36\x23\x4e\xd7"
2218 "\x76\xd1\xda\x0c\x94\x67\xbb\x04"
2219 "\x8b\xf2\x03\x6c\xa8\xcf\xb6\xea"
2220 "\x22\x64\x47\xaa\x8f\x75\x13\xbf"
2221 "\x9f\xc2\xc3\xf0\xc9\x56\xc5\x7a"
2222 "\x71\x63\x2e\x89\x7b\x1e\x12\xca"
2223 "\xe2\x5f\xaf\xd8\xa4\xf8\xc9\x7a"
2224 "\xd6\xf9\x21\x31\x62\x44\x45\xa6"
2225 "\xd6\xbc\x5a\xd3\x2d\x54\x43\xcc"
2226 "\x9d\xde\xa5\x70\xe9\x42\x45\x8a"
2227 "\x6b\xfa\xb1\x91\x13\xb0\xd9\x19",
2228 .ilen = 128,
2229 .result = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
2230 "\x53\x20\x63\x65\x65\x72\x73\x74"
2231 "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
2232 "\x20\x79\x65\x53\x72\x63\x74\x65"
2233 "\x20\x73\x6f\x54\x20\x6f\x61\x4d"
2234 "\x79\x6e\x53\x20\x63\x65\x65\x72"
2235 "\x73\x74\x54\x20\x6f\x6f\x4d\x20"
2236 "\x6e\x61\x20\x79\x65\x53\x72\x63"
2237 "\x74\x65\x20\x73\x6f\x54\x20\x6f"
2238 "\x61\x4d\x79\x6e\x53\x20\x63\x65"
2239 "\x65\x72\x73\x74\x54\x20\x6f\x6f"
2240 "\x4d\x20\x6e\x61\x20\x79\x65\x53"
2241 "\x72\x63\x74\x65\x20\x73\x6f\x54"
2242 "\x20\x6f\x61\x4d\x79\x6e\x53\x20"
2243 "\x63\x65\x65\x72\x73\x74\x54\x20"
2244 "\x6f\x6f\x4d\x20\x6e\x61\x0a\x79",
2245 .rlen = 128,
2246 },
2247};
2248
2249/*
2250 * Blowfish test vectors.
2251 */
2252#define BF_ENC_TEST_VECTORS 6
2253#define BF_DEC_TEST_VECTORS 6
2254#define BF_CBC_ENC_TEST_VECTORS 1
2255#define BF_CBC_DEC_TEST_VECTORS 1
2256
2257static struct cipher_testvec bf_enc_tv_template[] = {
2258 { /* DES test vectors from OpenSSL */
2259 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2260 .klen = 8,
2261 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
2262 .ilen = 8,
2263 .result = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2264 .rlen = 8,
2265 }, {
2266 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2267 .klen = 8,
2268 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2269 .ilen = 8,
2270 .result = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2271 .rlen = 8,
2272 }, {
2273 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2274 .klen = 8,
2275 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2276 .ilen = 8,
2277 .result = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2278 .rlen = 8,
2279 }, { /* Vary the keylength... */
2280 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2281 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2282 .klen = 16,
2283 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2284 .ilen = 8,
2285 .result = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2286 .rlen = 8,
2287 }, {
2288 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2289 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2290 "\x00\x11\x22\x33\x44",
2291 .klen = 21,
2292 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2293 .ilen = 8,
2294 .result = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2295 .rlen = 8,
2296 }, { /* Generated with bf488 */
2297 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2298 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2299 "\x00\x11\x22\x33\x44\x55\x66\x77"
2300 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2301 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2302 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2303 "\xff\xff\xff\xff\xff\xff\xff\xff",
2304 .klen = 56,
2305 .input = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2306 .ilen = 8,
2307 .result = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2308 .rlen = 8,
2309 },
2310};
2311
2312static struct cipher_testvec bf_dec_tv_template[] = {
2313 { /* DES test vectors from OpenSSL */
2314 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
2315 .klen = 8,
2316 .input = "\x4e\xf9\x97\x45\x61\x98\xdd\x78",
2317 .ilen = 8,
2318 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
2319 .rlen = 8,
2320 }, {
2321 .key = "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e",
2322 .klen = 8,
2323 .input = "\xa7\x90\x79\x51\x08\xea\x3c\xae",
2324 .ilen = 8,
2325 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
2326 .rlen = 8,
2327 }, {
2328 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2329 .klen = 8,
2330 .input = "\xe8\x7a\x24\x4e\x2c\xc8\x5e\x82",
2331 .ilen = 8,
2332 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2333 .rlen = 8,
2334 }, { /* Vary the keylength... */
2335 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2336 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f",
2337 .klen = 16,
2338 .input = "\x93\x14\x28\x87\xee\x3b\xe1\x5c",
2339 .ilen = 8,
2340 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2341 .rlen = 8,
2342 }, {
2343 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2344 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2345 "\x00\x11\x22\x33\x44",
2346 .klen = 21,
2347 .input = "\xe6\xf5\x1e\xd7\x9b\x9d\xb2\x1f",
2348 .ilen = 8,
2349 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2350 .rlen = 8,
2351 }, { /* Generated with bf488, using OpenSSL, Libgcrypt and Nettle */
2352 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87"
2353 "\x78\x69\x5a\x4b\x3c\x2d\x1e\x0f"
2354 "\x00\x11\x22\x33\x44\x55\x66\x77"
2355 "\x04\x68\x91\x04\xc2\xfd\x3b\x2f"
2356 "\x58\x40\x23\x64\x1a\xba\x61\x76"
2357 "\x1f\x1f\x1f\x1f\x0e\x0e\x0e\x0e"
2358 "\xff\xff\xff\xff\xff\xff\xff\xff",
2359 .klen = 56,
2360 .input = "\xc0\x45\x04\x01\x2e\x4e\x1f\x53",
2361 .ilen = 8,
2362 .result = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2363 .rlen = 8,
2364 },
2365};
2366
2367static struct cipher_testvec bf_cbc_enc_tv_template[] = {
2368 { /* From OpenSSL */
2369 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2370 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2371 .klen = 16,
2372 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2373 .input = "\x37\x36\x35\x34\x33\x32\x31\x20"
2374 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2375 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2376 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2377 .ilen = 32,
2378 .result = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2379 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2380 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2381 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2382 .rlen = 32,
2383 },
2384};
2385
2386static struct cipher_testvec bf_cbc_dec_tv_template[] = {
2387 { /* From OpenSSL */
2388 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2389 "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
2390 .klen = 16,
2391 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
2392 .input = "\x6b\x77\xb4\xd6\x30\x06\xde\xe6"
2393 "\x05\xb1\x56\xe2\x74\x03\x97\x93"
2394 "\x58\xde\xb9\xe7\x15\x46\x16\xd9"
2395 "\x59\xf1\x65\x2b\xd5\xff\x92\xcc",
2396 .ilen = 32,
2397 .result = "\x37\x36\x35\x34\x33\x32\x31\x20"
2398 "\x4e\x6f\x77\x20\x69\x73\x20\x74"
2399 "\x68\x65\x20\x74\x69\x6d\x65\x20"
2400 "\x66\x6f\x72\x20\x00\x00\x00\x00",
2401 .rlen = 32,
2402 },
2403};
2404
2405/*
2406 * Twofish test vectors.
2407 */
2408#define TF_ENC_TEST_VECTORS 3
2409#define TF_DEC_TEST_VECTORS 3
2410#define TF_CBC_ENC_TEST_VECTORS 4
2411#define TF_CBC_DEC_TEST_VECTORS 4
2412
2413static struct cipher_testvec tf_enc_tv_template[] = {
2414 {
2415 .key = zeroed_string,
2416 .klen = 16,
2417 .input = zeroed_string,
2418 .ilen = 16,
2419 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2420 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2421 .rlen = 16,
2422 }, {
2423 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2424 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2425 "\x00\x11\x22\x33\x44\x55\x66\x77",
2426 .klen = 24,
2427 .input = zeroed_string,
2428 .ilen = 16,
2429 .result = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2430 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2431 .rlen = 16,
2432 }, {
2433 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2434 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2435 "\x00\x11\x22\x33\x44\x55\x66\x77"
2436 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2437 .klen = 32,
2438 .input = zeroed_string,
2439 .ilen = 16,
2440 .result = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2441 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2442 .rlen = 16,
2443 },
2444};
2445
2446static struct cipher_testvec tf_dec_tv_template[] = {
2447 {
2448 .key = zeroed_string,
2449 .klen = 16,
2450 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2451 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2452 .ilen = 16,
2453 .result = zeroed_string,
2454 .rlen = 16,
2455 }, {
2456 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2457 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2458 "\x00\x11\x22\x33\x44\x55\x66\x77",
2459 .klen = 24,
2460 .input = "\xcf\xd1\xd2\xe5\xa9\xbe\x9c\xdf"
2461 "\x50\x1f\x13\xb8\x92\xbd\x22\x48",
2462 .ilen = 16,
2463 .result = zeroed_string,
2464 .rlen = 16,
2465 }, {
2466 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
2467 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
2468 "\x00\x11\x22\x33\x44\x55\x66\x77"
2469 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2470 .klen = 32,
2471 .input = "\x37\x52\x7b\xe0\x05\x23\x34\xb8"
2472 "\x9f\x0c\xfc\xca\xe8\x7c\xfa\x20",
2473 .ilen = 16,
2474 .result = zeroed_string,
2475 .rlen = 16,
2476 },
2477};
2478
2479static struct cipher_testvec tf_cbc_enc_tv_template[] = {
2480 { /* Generated with Nettle */
2481 .key = zeroed_string,
2482 .klen = 16,
2483 .iv = zeroed_string,
2484 .input = zeroed_string,
2485 .ilen = 16,
2486 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2487 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2488 .rlen = 16,
2489 }, {
2490 .key = zeroed_string,
2491 .klen = 16,
2492 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2493 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2494 .input = zeroed_string,
2495 .ilen = 16,
2496 .result = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2497 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2498 .rlen = 16,
2499 }, {
2500 .key = zeroed_string,
2501 .klen = 16,
2502 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2503 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2504 .input = zeroed_string,
2505 .ilen = 16,
2506 .result = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2507 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2508 .rlen = 16,
2509 }, {
2510 .key = zeroed_string,
2511 .klen = 16,
2512 .iv = zeroed_string,
2513 .input = zeroed_string,
2514 .ilen = 48,
2515 .result = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2516 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2517 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2518 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2519 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2520 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2521 .rlen = 48,
2522 },
2523};
2524
2525static struct cipher_testvec tf_cbc_dec_tv_template[] = {
2526 { /* Reverse of the first four above */
2527 .key = zeroed_string,
2528 .klen = 16,
2529 .iv = zeroed_string,
2530 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2531 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2532 .ilen = 16,
2533 .result = zeroed_string,
2534 .rlen = 16,
2535 }, {
2536 .key = zeroed_string,
2537 .klen = 16,
2538 .iv = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2539 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a",
2540 .input = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2541 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2542 .ilen = 16,
2543 .result = zeroed_string,
2544 .rlen = 16,
2545 }, {
2546 .key = zeroed_string,
2547 .klen = 16,
2548 .iv = "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2549 "\x86\xcb\x08\x6b\x78\x9f\x54\x19",
2550 .input = "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2551 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2552 .ilen = 16,
2553 .result = zeroed_string,
2554 .rlen = 16,
2555 }, {
2556 .key = zeroed_string,
2557 .klen = 16,
2558 .iv = zeroed_string,
2559 .input = "\x9f\x58\x9f\x5c\xf6\x12\x2c\x32"
2560 "\xb6\xbf\xec\x2f\x2a\xe8\xc3\x5a"
2561 "\xd4\x91\xdb\x16\xe7\xb1\xc3\x9e"
2562 "\x86\xcb\x08\x6b\x78\x9f\x54\x19"
2563 "\x05\xef\x8c\x61\xa8\x11\x58\x26"
2564 "\x34\xba\x5c\xb7\x10\x6a\xa6\x41",
2565 .ilen = 48,
2566 .result = zeroed_string,
2567 .rlen = 48,
2568 },
2569};
2570
2571/*
2572 * Serpent test vectors. These are backwards because Serpent writes
2573 * octet sequences in right-to-left mode.
2574 */
2575#define SERPENT_ENC_TEST_VECTORS 4
2576#define SERPENT_DEC_TEST_VECTORS 4
2577
2578#define TNEPRES_ENC_TEST_VECTORS 4
2579#define TNEPRES_DEC_TEST_VECTORS 4
2580
2581static struct cipher_testvec serpent_enc_tv_template[] = {
2582 {
2583 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2584 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2585 .ilen = 16,
2586 .result = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2587 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2588 .rlen = 16,
2589 }, {
2590 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2591 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2592 .klen = 16,
2593 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2594 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2595 .ilen = 16,
2596 .result = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2597 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2598 .rlen = 16,
2599 }, {
2600 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2601 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2602 "\x10\x11\x12\x13\x14\x15\x16\x17"
2603 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2604 .klen = 32,
2605 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2606 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2607 .ilen = 16,
2608 .result = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2609 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2610 .rlen = 16,
2611 }, {
2612 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2613 .klen = 16,
2614 .input = zeroed_string,
2615 .ilen = 16,
2616 .result = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2617 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2618 .rlen = 16,
2619 },
2620};
2621
2622static struct cipher_testvec tnepres_enc_tv_template[] = {
2623 { /* KeySize=128, PT=0, I=1 */
2624 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2625 "\x00\x00\x00\x00\x00\x00\x00\x00",
2626 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2627 "\x00\x00\x00\x00\x00\x00\x00\x00",
2628 .klen = 16,
2629 .ilen = 16,
2630 .result = "\x49\xaf\xbf\xad\x9d\x5a\x34\x05"
2631 "\x2c\xd8\xff\xa5\x98\x6b\xd2\xdd",
2632 .rlen = 16,
2633 }, { /* KeySize=192, PT=0, I=1 */
2634 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2635 "\x00\x00\x00\x00\x00\x00\x00\x00"
2636 "\x00\x00\x00\x00\x00\x00\x00\x00",
2637 .klen = 24,
2638 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2639 "\x00\x00\x00\x00\x00\x00\x00\x00",
2640 .ilen = 16,
2641 .result = "\xe7\x8e\x54\x02\xc7\x19\x55\x68"
2642 "\xac\x36\x78\xf7\xa3\xf6\x0c\x66",
2643 .rlen = 16,
2644 }, { /* KeySize=256, PT=0, I=1 */
2645 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
2646 "\x00\x00\x00\x00\x00\x00\x00\x00"
2647 "\x00\x00\x00\x00\x00\x00\x00\x00"
2648 "\x00\x00\x00\x00\x00\x00\x00\x00",
2649 .klen = 32,
2650 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
2651 "\x00\x00\x00\x00\x00\x00\x00\x00",
2652 .ilen = 16,
2653 .result = "\xab\xed\x96\xe7\x66\xbf\x28\xcb"
2654 "\xc0\xeb\xd2\x1a\x82\xef\x08\x19",
2655 .rlen = 16,
2656 }, { /* KeySize=256, I=257 */
2657 .key = "\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18"
2658 "\x17\x16\x15\x14\x13\x12\x11\x10"
2659 "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2660 "\x07\x06\x05\x04\x03\x02\x01\x00",
2661 .klen = 32,
2662 .input = "\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08"
2663 "\x07\x06\x05\x04\x03\x02\x01\x00",
2664 .ilen = 16,
2665 .result = "\x5c\xe7\x1c\x70\xd2\x88\x2e\x5b"
2666 "\xb8\x32\xe4\x33\xf8\x9f\x26\xde",
2667 .rlen = 16,
2668 },
2669};
2670
2671
2672static struct cipher_testvec serpent_dec_tv_template[] = {
2673 {
2674 .input = "\x12\x07\xfc\xce\x9b\xd0\xd6\x47"
2675 "\x6a\xe9\x8f\xbe\xd1\x43\xa0\xe2",
2676 .ilen = 16,
2677 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2678 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2679 .rlen = 16,
2680 }, {
2681 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2682 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2683 .klen = 16,
2684 .input = "\x4c\x7d\x8a\x32\x80\x72\xa2\x2c"
2685 "\x82\x3e\x4a\x1f\x3a\xcd\xa1\x6d",
2686 .ilen = 16,
2687 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2688 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2689 .rlen = 16,
2690 }, {
2691 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2692 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2693 "\x10\x11\x12\x13\x14\x15\x16\x17"
2694 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2695 .klen = 32,
2696 .input = "\xde\x26\x9f\xf8\x33\xe4\x32\xb8"
2697 "\x5b\x2e\x88\xd2\x70\x1c\xe7\x5c",
2698 .ilen = 16,
2699 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2700 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2701 .rlen = 16,
2702 }, {
2703 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2704 .klen = 16,
2705 .input = "\xdd\xd2\x6b\x98\xa5\xff\xd8\x2c"
2706 "\x05\x34\x5a\x9d\xad\xbf\xaf\x49",
2707 .ilen = 16,
2708 .result = zeroed_string,
2709 .rlen = 16,
2710 },
2711};
2712
2713static struct cipher_testvec tnepres_dec_tv_template[] = {
2714 {
2715 .input = "\x41\xcc\x6b\x31\x59\x31\x45\x97"
2716 "\x6d\x6f\xbb\x38\x4b\x37\x21\x28",
2717 .ilen = 16,
2718 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2719 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2720 .rlen = 16,
2721 }, {
2722 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2723 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2724 .klen = 16,
2725 .input = "\xea\xf4\xd7\xfc\xd8\x01\x34\x47"
2726 "\x81\x45\x0b\xfa\x0c\xd6\xad\x6e",
2727 .ilen = 16,
2728 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2729 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2730 .rlen = 16,
2731 }, {
2732 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2733 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2734 "\x10\x11\x12\x13\x14\x15\x16\x17"
2735 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2736 .klen = 32,
2737 .input = "\x64\xa9\x1a\x37\xed\x9f\xe7\x49"
2738 "\xa8\x4e\x76\xd6\xf5\x0d\x78\xee",
2739 .ilen = 16,
2740 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
2741 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2742 .rlen = 16,
2743 }, { /* KeySize=128, I=121 */
2744 .key = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80",
2745 .klen = 16,
2746 .input = "\x3d\xda\xbf\xc0\x06\xda\xab\x06"
2747 "\x46\x2a\xf4\xef\x81\x54\x4e\x26",
2748 .ilen = 16,
2749 .result = zeroed_string,
2750 .rlen = 16,
2751 },
2752};
2753
2754
2755/* Cast6 test vectors from RFC 2612 */
2756#define CAST6_ENC_TEST_VECTORS 3
2757#define CAST6_DEC_TEST_VECTORS 3
2758
2759static struct cipher_testvec cast6_enc_tv_template[] = {
2760 {
2761 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2762 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2763 .klen = 16,
2764 .input = zeroed_string,
2765 .ilen = 16,
2766 .result = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2767 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2768 .rlen = 16,
2769 }, {
2770 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2771 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2772 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2773 .klen = 24,
2774 .input = zeroed_string,
2775 .ilen = 16,
2776 .result = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2777 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2778 .rlen = 16,
2779 }, {
2780 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2781 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2782 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2783 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2784 .klen = 32,
2785 .input = zeroed_string,
2786 .ilen = 16,
2787 .result = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2788 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2789 .rlen = 16,
2790 },
2791};
2792
2793static struct cipher_testvec cast6_dec_tv_template[] = {
2794 {
2795 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2796 "\x0a\xf7\x56\x47\xf2\x9f\x61\x5d",
2797 .klen = 16,
2798 .input = "\xc8\x42\xa0\x89\x72\xb4\x3d\x20"
2799 "\x83\x6c\x91\xd1\xb7\x53\x0f\x6b",
2800 .ilen = 16,
2801 .result = zeroed_string,
2802 .rlen = 16,
2803 }, {
2804 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2805 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2806 "\xba\xc7\x7a\x77\x17\x94\x28\x63",
2807 .klen = 24,
2808 .input = "\x1b\x38\x6c\x02\x10\xdc\xad\xcb"
2809 "\xdd\x0e\x41\xaa\x08\xa7\xa7\xe8",
2810 .ilen = 16,
2811 .result = zeroed_string,
2812 .rlen = 16,
2813 }, {
2814 .key = "\x23\x42\xbb\x9e\xfa\x38\x54\x2c"
2815 "\xbe\xd0\xac\x83\x94\x0a\xc2\x98"
2816 "\x8d\x7c\x47\xce\x26\x49\x08\x46"
2817 "\x1c\xc1\xb5\x13\x7a\xe6\xb6\x04",
2818 .klen = 32,
2819 .input = "\x4f\x6a\x20\x38\x28\x68\x97\xb9"
2820 "\xc9\x87\x01\x36\x55\x33\x17\xfa",
2821 .ilen = 16,
2822 .result = zeroed_string,
2823 .rlen = 16,
2824 },
2825};
2826
2827
2828/*
2829 * AES test vectors.
2830 */
2831#define AES_ENC_TEST_VECTORS 3
2832#define AES_DEC_TEST_VECTORS 3
2833#define AES_CBC_ENC_TEST_VECTORS 4
2834#define AES_CBC_DEC_TEST_VECTORS 4
2835#define AES_LRW_ENC_TEST_VECTORS 8
2836#define AES_LRW_DEC_TEST_VECTORS 8
2837#define AES_XTS_ENC_TEST_VECTORS 4
2838#define AES_XTS_DEC_TEST_VECTORS 4
2839#define AES_CTR_ENC_TEST_VECTORS 7
2840#define AES_CTR_DEC_TEST_VECTORS 6
2841#define AES_GCM_ENC_TEST_VECTORS 9
2842#define AES_GCM_DEC_TEST_VECTORS 8
2843#define AES_CCM_ENC_TEST_VECTORS 7
2844#define AES_CCM_DEC_TEST_VECTORS 7
2845
2846static struct cipher_testvec aes_enc_tv_template[] = {
2847 { /* From FIPS-197 */
2848 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2849 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2850 .klen = 16,
2851 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2852 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2853 .ilen = 16,
2854 .result = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2855 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2856 .rlen = 16,
2857 }, {
2858 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2859 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2860 "\x10\x11\x12\x13\x14\x15\x16\x17",
2861 .klen = 24,
2862 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2863 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2864 .ilen = 16,
2865 .result = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2866 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2867 .rlen = 16,
2868 }, {
2869 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2870 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2871 "\x10\x11\x12\x13\x14\x15\x16\x17"
2872 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2873 .klen = 32,
2874 .input = "\x00\x11\x22\x33\x44\x55\x66\x77"
2875 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2876 .ilen = 16,
2877 .result = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2878 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2879 .rlen = 16,
2880 },
2881};
2882
2883static struct cipher_testvec aes_dec_tv_template[] = {
2884 { /* From FIPS-197 */
2885 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2886 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2887 .klen = 16,
2888 .input = "\x69\xc4\xe0\xd8\x6a\x7b\x04\x30"
2889 "\xd8\xcd\xb7\x80\x70\xb4\xc5\x5a",
2890 .ilen = 16,
2891 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2892 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2893 .rlen = 16,
2894 }, {
2895 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2896 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2897 "\x10\x11\x12\x13\x14\x15\x16\x17",
2898 .klen = 24,
2899 .input = "\xdd\xa9\x7c\xa4\x86\x4c\xdf\xe0"
2900 "\x6e\xaf\x70\xa0\xec\x0d\x71\x91",
2901 .ilen = 16,
2902 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2903 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2904 .rlen = 16,
2905 }, {
2906 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
2907 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2908 "\x10\x11\x12\x13\x14\x15\x16\x17"
2909 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2910 .klen = 32,
2911 .input = "\x8e\xa2\xb7\xca\x51\x67\x45\xbf"
2912 "\xea\xfc\x49\x90\x4b\x49\x60\x89",
2913 .ilen = 16,
2914 .result = "\x00\x11\x22\x33\x44\x55\x66\x77"
2915 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
2916 .rlen = 16,
2917 },
2918};
2919
2920static struct cipher_testvec aes_cbc_enc_tv_template[] = {
2921 { /* From RFC 3602 */
2922 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
2923 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
2924 .klen = 16,
2925 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
2926 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
2927 .input = "Single block msg",
2928 .ilen = 16,
2929 .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
2930 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
2931 .rlen = 16,
2932 }, {
2933 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
2934 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
2935 .klen = 16,
2936 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
2937 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
2938 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
2939 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
2940 "\x10\x11\x12\x13\x14\x15\x16\x17"
2941 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
2942 .ilen = 32,
2943 .result = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
2944 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
2945 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
2946 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
2947 .rlen = 32,
2948 }, { /* From NIST SP800-38A */
2949 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
2950 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
2951 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
2952 .klen = 24,
2953 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
2954 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2955 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
2956 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
2957 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
2958 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
2959 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
2960 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
2961 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
2962 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
2963 .ilen = 64,
2964 .result = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
2965 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
2966 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
2967 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
2968 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
2969 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
2970 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
2971 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
2972 .rlen = 64,
2973 }, {
2974 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
2975 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
2976 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
2977 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
2978 .klen = 32,
2979 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
2980 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
2981 .input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
2982 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
2983 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
2984 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
2985 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
2986 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
2987 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
2988 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
2989 .ilen = 64,
2990 .result = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
2991 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
2992 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
2993 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
2994 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
2995 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
2996 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
2997 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
2998 .rlen = 64,
2999 },
3000};
3001
3002static struct cipher_testvec aes_cbc_dec_tv_template[] = {
3003 { /* From RFC 3602 */
3004 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
3005 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
3006 .klen = 16,
3007 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
3008 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
3009 .input = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
3010 "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
3011 .ilen = 16,
3012 .result = "Single block msg",
3013 .rlen = 16,
3014 }, {
3015 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
3016 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
3017 .klen = 16,
3018 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
3019 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
3020 .input = "\xd2\x96\xcd\x94\xc2\xcc\xcf\x8a"
3021 "\x3a\x86\x30\x28\xb5\xe1\xdc\x0a"
3022 "\x75\x86\x60\x2d\x25\x3c\xff\xf9"
3023 "\x1b\x82\x66\xbe\xa6\xd6\x1a\xb1",
3024 .ilen = 32,
3025 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
3026 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3027 "\x10\x11\x12\x13\x14\x15\x16\x17"
3028 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
3029 .rlen = 32,
3030 }, { /* From NIST SP800-38A */
3031 .key = "\x8e\x73\xb0\xf7\xda\x0e\x64\x52"
3032 "\xc8\x10\xf3\x2b\x80\x90\x79\xe5"
3033 "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b",
3034 .klen = 24,
3035 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3036 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3037 .input = "\x4f\x02\x1d\xb2\x43\xbc\x63\x3d"
3038 "\x71\x78\x18\x3a\x9f\xa0\x71\xe8"
3039 "\xb4\xd9\xad\xa9\xad\x7d\xed\xf4"
3040 "\xe5\xe7\x38\x76\x3f\x69\x14\x5a"
3041 "\x57\x1b\x24\x20\x12\xfb\x7a\xe0"
3042 "\x7f\xa9\xba\xac\x3d\xf1\x02\xe0"
3043 "\x08\xb0\xe2\x79\x88\x59\x88\x81"
3044 "\xd9\x20\xa9\xe6\x4f\x56\x15\xcd",
3045 .ilen = 64,
3046 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3047 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3048 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3049 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3050 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3051 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3052 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3053 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3054 .rlen = 64,
3055 }, {
3056 .key = "\x60\x3d\xeb\x10\x15\xca\x71\xbe"
3057 "\x2b\x73\xae\xf0\x85\x7d\x77\x81"
3058 "\x1f\x35\x2c\x07\x3b\x61\x08\xd7"
3059 "\x2d\x98\x10\xa3\x09\x14\xdf\xf4",
3060 .klen = 32,
3061 .iv = "\x00\x01\x02\x03\x04\x05\x06\x07"
3062 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
3063 .input = "\xf5\x8c\x4c\x04\xd6\xe5\xf1\xba"
3064 "\x77\x9e\xab\xfb\x5f\x7b\xfb\xd6"
3065 "\x9c\xfc\x4e\x96\x7e\xdb\x80\x8d"
3066 "\x67\x9f\x77\x7b\xc6\x70\x2c\x7d"
3067 "\x39\xf2\x33\x69\xa9\xd9\xba\xcf"
3068 "\xa5\x30\xe2\x63\x04\x23\x14\x61"
3069 "\xb2\xeb\x05\xe2\xc3\x9b\xe9\xfc"
3070 "\xda\x6c\x19\x07\x8c\x6a\x9d\x1b",
3071 .ilen = 64,
3072 .result = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
3073 "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
3074 "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
3075 "\x9e\xb7\x6f\xac\x45\xaf\x8e\x51"
3076 "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11"
3077 "\xe5\xfb\xc1\x19\x1a\x0a\x52\xef"
3078 "\xf6\x9f\x24\x45\xdf\x4f\x9b\x17"
3079 "\xad\x2b\x41\x7b\xe6\x6c\x37\x10",
3080 .rlen = 64,
3081 },
3082};
3083
3084static struct cipher_testvec aes_lrw_enc_tv_template[] = {
3085 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
3086 { /* LRW-32-AES 1 */
3087 .key = "\x45\x62\xac\x25\xf8\x28\x17\x6d"
3088 "\x4c\x26\x84\x14\xb5\x68\x01\x85"
3089 "\x25\x8e\x2a\x05\xe7\x3e\x9d\x03"
3090 "\xee\x5a\x83\x0c\xcc\x09\x4c\x87",
3091 .klen = 32,
3092 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3093 "\x00\x00\x00\x00\x00\x00\x00\x01",
3094 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3095 "\x38\x39\x41\x42\x43\x44\x45\x46",
3096 .ilen = 16,
3097 .result = "\xf1\xb2\x73\xcd\x65\xa3\xdf\x5f"
3098 "\xe9\x5d\x48\x92\x54\x63\x4e\xb8",
3099 .rlen = 16,
3100 }, { /* LRW-32-AES 2 */
3101 .key = "\x59\x70\x47\x14\xf5\x57\x47\x8c"
3102 "\xd7\x79\xe8\x0f\x54\x88\x79\x44"
3103 "\x0d\x48\xf0\xb7\xb1\x5a\x53\xea"
3104 "\x1c\xaa\x6b\x29\xc2\xca\xfb\xaf",
3105 .klen = 32,
3106 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3107 "\x00\x00\x00\x00\x00\x00\x00\x02",
3108 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3109 "\x38\x39\x41\x42\x43\x44\x45\x46",
3110 .ilen = 16,
3111 .result = "\x00\xc8\x2b\xae\x95\xbb\xcd\xe5"
3112 "\x27\x4f\x07\x69\xb2\x60\xe1\x36",
3113 .rlen = 16,
3114 }, { /* LRW-32-AES 3 */
3115 .key = "\xd8\x2a\x91\x34\xb2\x6a\x56\x50"
3116 "\x30\xfe\x69\xe2\x37\x7f\x98\x47"
3117 "\xcd\xf9\x0b\x16\x0c\x64\x8f\xb6"
3118 "\xb0\x0d\x0d\x1b\xae\x85\x87\x1f",
3119 .klen = 32,
3120 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3121 "\x00\x00\x00\x02\x00\x00\x00\x00",
3122 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3123 "\x38\x39\x41\x42\x43\x44\x45\x46",
3124 .ilen = 16,
3125 .result = "\x76\x32\x21\x83\xed\x8f\xf1\x82"
3126 "\xf9\x59\x62\x03\x69\x0e\x5e\x01",
3127 .rlen = 16,
3128 }, { /* LRW-32-AES 4 */
3129 .key = "\x0f\x6a\xef\xf8\xd3\xd2\xbb\x15"
3130 "\x25\x83\xf7\x3c\x1f\x01\x28\x74"
3131 "\xca\xc6\xbc\x35\x4d\x4a\x65\x54"
3132 "\x90\xae\x61\xcf\x7b\xae\xbd\xcc"
3133 "\xad\xe4\x94\xc5\x4a\x29\xae\x70",
3134 .klen = 40,
3135 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3136 "\x00\x00\x00\x00\x00\x00\x00\x01",
3137 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3138 "\x38\x39\x41\x42\x43\x44\x45\x46",
3139 .ilen = 16,
3140 .result = "\x9c\x0f\x15\x2f\x55\xa2\xd8\xf0"
3141 "\xd6\x7b\x8f\x9e\x28\x22\xbc\x41",
3142 .rlen = 16,
3143 }, { /* LRW-32-AES 5 */
3144 .key = "\x8a\xd4\xee\x10\x2f\xbd\x81\xff"
3145 "\xf8\x86\xce\xac\x93\xc5\xad\xc6"
3146 "\xa0\x19\x07\xc0\x9d\xf7\xbb\xdd"
3147 "\x52\x13\xb2\xb7\xf0\xff\x11\xd8"
3148 "\xd6\x08\xd0\xcd\x2e\xb1\x17\x6f",
3149 .klen = 40,
3150 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3151 "\x00\x00\x00\x02\x00\x00\x00\x00",
3152 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3153 "\x38\x39\x41\x42\x43\x44\x45\x46",
3154 .ilen = 16,
3155 .result = "\xd4\x27\x6a\x7f\x14\x91\x3d\x65"
3156 "\xc8\x60\x48\x02\x87\xe3\x34\x06",
3157 .rlen = 16,
3158 }, { /* LRW-32-AES 6 */
3159 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3160 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3161 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3162 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3163 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3164 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3165 .klen = 48,
3166 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3167 "\x00\x00\x00\x00\x00\x00\x00\x01",
3168 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3169 "\x38\x39\x41\x42\x43\x44\x45\x46",
3170 .ilen = 16,
3171 .result = "\xbd\x06\xb8\xe1\xdb\x98\x89\x9e"
3172 "\xc4\x98\xe4\x91\xcf\x1c\x70\x2b",
3173 .rlen = 16,
3174 }, { /* LRW-32-AES 7 */
3175 .key = "\xfb\x76\x15\xb2\x3d\x80\x89\x1d"
3176 "\xd4\x70\x98\x0b\xc7\x95\x84\xc8"
3177 "\xb2\xfb\x64\xce\x60\x97\x87\x8d"
3178 "\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"
3179 "\x6e\x78\x17\xe7\x2d\x5e\x12\xd4"
3180 "\x60\x64\x04\x7a\xf1\x2f\x9e\x0c",
3181 .klen = 48,
3182 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3183 "\x00\x00\x00\x02\x00\x00\x00\x00",
3184 .input = "\x30\x31\x32\x33\x34\x35\x36\x37"
3185 "\x38\x39\x41\x42\x43\x44\x45\x46",
3186 .ilen = 16,
3187 .result = "\x5b\x90\x8e\xc1\xab\xdd\x67\x5f"
3188 "\x3d\x69\x8a\x95\x53\xc8\x9c\xe5",
3189 .rlen = 16,
3190 }, {
3191/* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
3192 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3193 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3194 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3195 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3196 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3197 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3198 .klen = 48,
3199 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3200 "\x00\x00\x00\x00\x00\x00\x00\x01",
3201 .input = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
3202 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
3203 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
3204 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
3205 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
3206 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
3207 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
3208 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
3209 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
3210 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
3211 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
3212 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
3213 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
3214 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
3215 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
3216 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
3217 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
3218 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
3219 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
3220 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
3221 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
3222 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
3223 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
3224 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
3225 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
3226 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
3227 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
3228 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
3229 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
3230 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
3231 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
3232 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
3233 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
3234 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
3235 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
3236 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
3237 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
3238 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
3239 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
3240 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
3241 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
3242 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
3243 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
3244 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
3245 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
3246 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
3247 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
3248 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
3249 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
3250 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
3251 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
3252 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
3253 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
3254 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
3255 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
3256 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
3257 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
3258 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
3259 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
3260 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
3261 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
3262 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
3263 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
3264 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
3265 .ilen = 512,
3266 .result = "\x1a\x1d\xa9\x30\xad\xf9\x2f\x9b"
3267 "\xb6\x1d\xae\xef\xf0\x2f\xf8\x5a"
3268 "\x39\x3c\xbf\x2a\xb2\x45\xb2\x23"
3269 "\x1b\x63\x3c\xcf\xaa\xbe\xcf\x4e"
3270 "\xfa\xe8\x29\xc2\x20\x68\x2b\x3c"
3271 "\x2e\x8b\xf7\x6e\x25\xbd\xe3\x3d"
3272 "\x66\x27\xd6\xaf\xd6\x64\x3e\xe3"
3273 "\xe8\x58\x46\x97\x39\x51\x07\xde"
3274 "\xcb\x37\xbc\xa9\xc0\x5f\x75\xc3"
3275 "\x0e\x84\x23\x1d\x16\xd4\x1c\x59"
3276 "\x9c\x1a\x02\x55\xab\x3a\x97\x1d"
3277 "\xdf\xdd\xc7\x06\x51\xd7\x70\xae"
3278 "\x23\xc6\x8c\xf5\x1e\xa0\xe5\x82"
3279 "\xb8\xb2\xbf\x04\xa0\x32\x8e\x68"
3280 "\xeb\xaf\x6e\x2d\x94\x22\x2f\xce"
3281 "\x4c\xb5\x59\xe2\xa2\x2f\xa0\x98"
3282 "\x1a\x97\xc6\xd4\xb5\x00\x59\xf2"
3283 "\x84\x14\x72\xb1\x9a\x6e\xa3\x7f"
3284 "\xea\x20\xe7\xcb\x65\x77\x3a\xdf"
3285 "\xc8\x97\x67\x15\xc2\x2a\x27\xcc"
3286 "\x18\x55\xa1\x24\x0b\x24\x24\xaf"
3287 "\x5b\xec\x68\xb8\xc8\xf5\xba\x63"
3288 "\xff\xed\x89\xce\xd5\x3d\x88\xf3"
3289 "\x25\xef\x05\x7c\x3a\xef\xeb\xd8"
3290 "\x7a\x32\x0d\xd1\x1e\x58\x59\x99"
3291 "\x90\x25\xb5\x26\xb0\xe3\x2b\x6c"
3292 "\x4c\xa9\x8b\x84\x4f\x5e\x01\x50"
3293 "\x41\x30\x58\xc5\x62\x74\x52\x1d"
3294 "\x45\x24\x6a\x42\x64\x4f\x97\x1c"
3295 "\xa8\x66\xb5\x6d\x79\xd4\x0d\x48"
3296 "\xc5\x5f\xf3\x90\x32\xdd\xdd\xe1"
3297 "\xe4\xa9\x9f\xfc\xc3\x52\x5a\x46"
3298 "\xe4\x81\x84\x95\x36\x59\x7a\x6b"
3299 "\xaa\xb3\x60\xad\xce\x9f\x9f\x28"
3300 "\xe0\x01\x75\x22\xc4\x4e\xa9\x62"
3301 "\x5c\x62\x0d\x00\xcb\x13\xe8\x43"
3302 "\x72\xd4\x2d\x53\x46\xb5\xd1\x16"
3303 "\x22\x18\xdf\x34\x33\xf5\xd6\x1c"
3304 "\xb8\x79\x78\x97\x94\xff\x72\x13"
3305 "\x4c\x27\xfc\xcb\xbf\x01\x53\xa6"
3306 "\xb4\x50\x6e\xde\xdf\xb5\x43\xa4"
3307 "\x59\xdf\x52\xf9\x7c\xe0\x11\x6f"
3308 "\x2d\x14\x8e\x24\x61\x2c\xe1\x17"
3309 "\xcc\xce\x51\x0c\x19\x8a\x82\x30"
3310 "\x94\xd5\x3d\x6a\x53\x06\x5e\xbd"
3311 "\xb7\xeb\xfa\xfd\x27\x51\xde\x85"
3312 "\x1e\x86\x53\x11\x53\x94\x00\xee"
3313 "\x2b\x8c\x08\x2a\xbf\xdd\xae\x11"
3314 "\xcb\x1e\xa2\x07\x9a\x80\xcf\x62"
3315 "\x9b\x09\xdc\x95\x3c\x96\x8e\xb1"
3316 "\x09\xbd\xe4\xeb\xdb\xca\x70\x7a"
3317 "\x9e\xfa\x31\x18\x45\x3c\x21\x33"
3318 "\xb0\xb3\x2b\xea\xf3\x71\x2d\xe1"
3319 "\x03\xad\x1b\x48\xd4\x67\x27\xf0"
3320 "\x62\xe4\x3d\xfb\x9b\x08\x76\xe7"
3321 "\xdd\x2b\x01\x39\x04\x5a\x58\x7a"
3322 "\xf7\x11\x90\xec\xbd\x51\x5c\x32"
3323 "\x6b\xd7\x35\x39\x02\x6b\xf2\xa6"
3324 "\xd0\x0d\x07\xe1\x06\xc4\x5b\x7d"
3325 "\xe4\x6a\xd7\xee\x15\x1f\x83\xb4"
3326 "\xa3\xa7\x5e\xc3\x90\xb7\xef\xd3"
3327 "\xb7\x4f\xf8\x92\x4c\xb7\x3c\x29"
3328 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7"
3329 "\x74\x3f\x7d\x58\x88\x75\xde\x3e",
3330 .rlen = 512,
3331 }
3332};
3333
3334static struct cipher_testvec aes_lrw_dec_tv_template[] = {
3335 /* from http://grouper.ieee.org/groups/1619/email/pdf00017.pdf */
3336 /* same as enc vectors with input and result reversed */
3337 { /* LRW-32-AES 1 */
3338 .key = "\x45\x62\xac\x25\xf8\x28\x17\x6d"
3339 "\x4c\x26\x84\x14\xb5\x68\x01\x85"
3340 "\x25\x8e\x2a\x05\xe7\x3e\x9d\x03"
3341 "\xee\x5a\x83\x0c\xcc\x09\x4c\x87",
3342 .klen = 32,
3343 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3344 "\x00\x00\x00\x00\x00\x00\x00\x01",
3345 .input = "\xf1\xb2\x73\xcd\x65\xa3\xdf\x5f"
3346 "\xe9\x5d\x48\x92\x54\x63\x4e\xb8",
3347 .ilen = 16,
3348 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3349 "\x38\x39\x41\x42\x43\x44\x45\x46",
3350 .rlen = 16,
3351 }, { /* LRW-32-AES 2 */
3352 .key = "\x59\x70\x47\x14\xf5\x57\x47\x8c"
3353 "\xd7\x79\xe8\x0f\x54\x88\x79\x44"
3354 "\x0d\x48\xf0\xb7\xb1\x5a\x53\xea"
3355 "\x1c\xaa\x6b\x29\xc2\xca\xfb\xaf",
3356 .klen = 32,
3357 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3358 "\x00\x00\x00\x00\x00\x00\x00\x02",
3359 .input = "\x00\xc8\x2b\xae\x95\xbb\xcd\xe5"
3360 "\x27\x4f\x07\x69\xb2\x60\xe1\x36",
3361 .ilen = 16,
3362 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3363 "\x38\x39\x41\x42\x43\x44\x45\x46",
3364 .rlen = 16,
3365 }, { /* LRW-32-AES 3 */
3366 .key = "\xd8\x2a\x91\x34\xb2\x6a\x56\x50"
3367 "\x30\xfe\x69\xe2\x37\x7f\x98\x47"
3368 "\xcd\xf9\x0b\x16\x0c\x64\x8f\xb6"
3369 "\xb0\x0d\x0d\x1b\xae\x85\x87\x1f",
3370 .klen = 32,
3371 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3372 "\x00\x00\x00\x02\x00\x00\x00\x00",
3373 .input = "\x76\x32\x21\x83\xed\x8f\xf1\x82"
3374 "\xf9\x59\x62\x03\x69\x0e\x5e\x01",
3375 .ilen = 16,
3376 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3377 "\x38\x39\x41\x42\x43\x44\x45\x46",
3378 .rlen = 16,
3379 }, { /* LRW-32-AES 4 */
3380 .key = "\x0f\x6a\xef\xf8\xd3\xd2\xbb\x15"
3381 "\x25\x83\xf7\x3c\x1f\x01\x28\x74"
3382 "\xca\xc6\xbc\x35\x4d\x4a\x65\x54"
3383 "\x90\xae\x61\xcf\x7b\xae\xbd\xcc"
3384 "\xad\xe4\x94\xc5\x4a\x29\xae\x70",
3385 .klen = 40,
3386 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3387 "\x00\x00\x00\x00\x00\x00\x00\x01",
3388 .input = "\x9c\x0f\x15\x2f\x55\xa2\xd8\xf0"
3389 "\xd6\x7b\x8f\x9e\x28\x22\xbc\x41",
3390 .ilen = 16,
3391 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3392 "\x38\x39\x41\x42\x43\x44\x45\x46",
3393 .rlen = 16,
3394 }, { /* LRW-32-AES 5 */
3395 .key = "\x8a\xd4\xee\x10\x2f\xbd\x81\xff"
3396 "\xf8\x86\xce\xac\x93\xc5\xad\xc6"
3397 "\xa0\x19\x07\xc0\x9d\xf7\xbb\xdd"
3398 "\x52\x13\xb2\xb7\xf0\xff\x11\xd8"
3399 "\xd6\x08\xd0\xcd\x2e\xb1\x17\x6f",
3400 .klen = 40,
3401 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3402 "\x00\x00\x00\x02\x00\x00\x00\x00",
3403 .input = "\xd4\x27\x6a\x7f\x14\x91\x3d\x65"
3404 "\xc8\x60\x48\x02\x87\xe3\x34\x06",
3405 .ilen = 16,
3406 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3407 "\x38\x39\x41\x42\x43\x44\x45\x46",
3408 .rlen = 16,
3409 }, { /* LRW-32-AES 6 */
3410 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3411 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3412 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3413 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3414 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3415 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3416 .klen = 48,
3417 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3418 "\x00\x00\x00\x00\x00\x00\x00\x01",
3419 .input = "\xbd\x06\xb8\xe1\xdb\x98\x89\x9e"
3420 "\xc4\x98\xe4\x91\xcf\x1c\x70\x2b",
3421 .ilen = 16,
3422 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3423 "\x38\x39\x41\x42\x43\x44\x45\x46",
3424 .rlen = 16,
3425 }, { /* LRW-32-AES 7 */
3426 .key = "\xfb\x76\x15\xb2\x3d\x80\x89\x1d"
3427 "\xd4\x70\x98\x0b\xc7\x95\x84\xc8"
3428 "\xb2\xfb\x64\xce\x60\x97\x87\x8d"
3429 "\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"
3430 "\x6e\x78\x17\xe7\x2d\x5e\x12\xd4"
3431 "\x60\x64\x04\x7a\xf1\x2f\x9e\x0c",
3432 .klen = 48,
3433 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3434 "\x00\x00\x00\x02\x00\x00\x00\x00",
3435 .input = "\x5b\x90\x8e\xc1\xab\xdd\x67\x5f"
3436 "\x3d\x69\x8a\x95\x53\xc8\x9c\xe5",
3437 .ilen = 16,
3438 .result = "\x30\x31\x32\x33\x34\x35\x36\x37"
3439 "\x38\x39\x41\x42\x43\x44\x45\x46",
3440 .rlen = 16,
3441 }, {
3442/* http://www.mail-archive.com/stds-p1619@listserv.ieee.org/msg00173.html */
3443 .key = "\xf8\xd4\x76\xff\xd6\x46\xee\x6c"
3444 "\x23\x84\xcb\x1c\x77\xd6\x19\x5d"
3445 "\xfe\xf1\xa9\xf3\x7b\xbc\x8d\x21"
3446 "\xa7\x9c\x21\xf8\xcb\x90\x02\x89"
3447 "\xa8\x45\x34\x8e\xc8\xc5\xb5\xf1"
3448 "\x26\xf5\x0e\x76\xfe\xfd\x1b\x1e",
3449 .klen = 48,
3450 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3451 "\x00\x00\x00\x00\x00\x00\x00\x01",
3452 .input = "\x1a\x1d\xa9\x30\xad\xf9\x2f\x9b"
3453 "\xb6\x1d\xae\xef\xf0\x2f\xf8\x5a"
3454 "\x39\x3c\xbf\x2a\xb2\x45\xb2\x23"
3455 "\x1b\x63\x3c\xcf\xaa\xbe\xcf\x4e"
3456 "\xfa\xe8\x29\xc2\x20\x68\x2b\x3c"
3457 "\x2e\x8b\xf7\x6e\x25\xbd\xe3\x3d"
3458 "\x66\x27\xd6\xaf\xd6\x64\x3e\xe3"
3459 "\xe8\x58\x46\x97\x39\x51\x07\xde"
3460 "\xcb\x37\xbc\xa9\xc0\x5f\x75\xc3"
3461 "\x0e\x84\x23\x1d\x16\xd4\x1c\x59"
3462 "\x9c\x1a\x02\x55\xab\x3a\x97\x1d"
3463 "\xdf\xdd\xc7\x06\x51\xd7\x70\xae"
3464 "\x23\xc6\x8c\xf5\x1e\xa0\xe5\x82"
3465 "\xb8\xb2\xbf\x04\xa0\x32\x8e\x68"
3466 "\xeb\xaf\x6e\x2d\x94\x22\x2f\xce"
3467 "\x4c\xb5\x59\xe2\xa2\x2f\xa0\x98"
3468 "\x1a\x97\xc6\xd4\xb5\x00\x59\xf2"
3469 "\x84\x14\x72\xb1\x9a\x6e\xa3\x7f"
3470 "\xea\x20\xe7\xcb\x65\x77\x3a\xdf"
3471 "\xc8\x97\x67\x15\xc2\x2a\x27\xcc"
3472 "\x18\x55\xa1\x24\x0b\x24\x24\xaf"
3473 "\x5b\xec\x68\xb8\xc8\xf5\xba\x63"
3474 "\xff\xed\x89\xce\xd5\x3d\x88\xf3"
3475 "\x25\xef\x05\x7c\x3a\xef\xeb\xd8"
3476 "\x7a\x32\x0d\xd1\x1e\x58\x59\x99"
3477 "\x90\x25\xb5\x26\xb0\xe3\x2b\x6c"
3478 "\x4c\xa9\x8b\x84\x4f\x5e\x01\x50"
3479 "\x41\x30\x58\xc5\x62\x74\x52\x1d"
3480 "\x45\x24\x6a\x42\x64\x4f\x97\x1c"
3481 "\xa8\x66\xb5\x6d\x79\xd4\x0d\x48"
3482 "\xc5\x5f\xf3\x90\x32\xdd\xdd\xe1"
3483 "\xe4\xa9\x9f\xfc\xc3\x52\x5a\x46"
3484 "\xe4\x81\x84\x95\x36\x59\x7a\x6b"
3485 "\xaa\xb3\x60\xad\xce\x9f\x9f\x28"
3486 "\xe0\x01\x75\x22\xc4\x4e\xa9\x62"
3487 "\x5c\x62\x0d\x00\xcb\x13\xe8\x43"
3488 "\x72\xd4\x2d\x53\x46\xb5\xd1\x16"
3489 "\x22\x18\xdf\x34\x33\xf5\xd6\x1c"
3490 "\xb8\x79\x78\x97\x94\xff\x72\x13"
3491 "\x4c\x27\xfc\xcb\xbf\x01\x53\xa6"
3492 "\xb4\x50\x6e\xde\xdf\xb5\x43\xa4"
3493 "\x59\xdf\x52\xf9\x7c\xe0\x11\x6f"
3494 "\x2d\x14\x8e\x24\x61\x2c\xe1\x17"
3495 "\xcc\xce\x51\x0c\x19\x8a\x82\x30"
3496 "\x94\xd5\x3d\x6a\x53\x06\x5e\xbd"
3497 "\xb7\xeb\xfa\xfd\x27\x51\xde\x85"
3498 "\x1e\x86\x53\x11\x53\x94\x00\xee"
3499 "\x2b\x8c\x08\x2a\xbf\xdd\xae\x11"
3500 "\xcb\x1e\xa2\x07\x9a\x80\xcf\x62"
3501 "\x9b\x09\xdc\x95\x3c\x96\x8e\xb1"
3502 "\x09\xbd\xe4\xeb\xdb\xca\x70\x7a"
3503 "\x9e\xfa\x31\x18\x45\x3c\x21\x33"
3504 "\xb0\xb3\x2b\xea\xf3\x71\x2d\xe1"
3505 "\x03\xad\x1b\x48\xd4\x67\x27\xf0"
3506 "\x62\xe4\x3d\xfb\x9b\x08\x76\xe7"
3507 "\xdd\x2b\x01\x39\x04\x5a\x58\x7a"
3508 "\xf7\x11\x90\xec\xbd\x51\x5c\x32"
3509 "\x6b\xd7\x35\x39\x02\x6b\xf2\xa6"
3510 "\xd0\x0d\x07\xe1\x06\xc4\x5b\x7d"
3511 "\xe4\x6a\xd7\xee\x15\x1f\x83\xb4"
3512 "\xa3\xa7\x5e\xc3\x90\xb7\xef\xd3"
3513 "\xb7\x4f\xf8\x92\x4c\xb7\x3c\x29"
3514 "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7"
3515 "\x74\x3f\x7d\x58\x88\x75\xde\x3e",
3516 .ilen = 512,
3517 .result = "\x05\x11\xb7\x18\xab\xc6\x2d\xac"
3518 "\x70\x5d\xf6\x22\x94\xcd\xe5\x6c"
3519 "\x17\x6b\xf6\x1c\xf0\xf3\x6e\xf8"
3520 "\x50\x38\x1f\x71\x49\xb6\x57\xd6"
3521 "\x8f\xcb\x8d\x6b\xe3\xa6\x29\x90"
3522 "\xfe\x2a\x62\x82\xae\x6d\x8b\xf6"
3523 "\xad\x1e\x9e\x20\x5f\x38\xbe\x04"
3524 "\xda\x10\x8e\xed\xa2\xa4\x87\xab"
3525 "\xda\x6b\xb4\x0c\x75\xba\xd3\x7c"
3526 "\xc9\xac\x42\x31\x95\x7c\xc9\x04"
3527 "\xeb\xd5\x6e\x32\x69\x8a\xdb\xa6"
3528 "\x15\xd7\x3f\x4f\x2f\x66\x69\x03"
3529 "\x9c\x1f\x54\x0f\xde\x1f\xf3\x65"
3530 "\x4c\x96\x12\xed\x7c\x92\x03\x01"
3531 "\x6f\xbc\x35\x93\xac\xf1\x27\xf1"
3532 "\xb4\x96\x82\x5a\x5f\xb0\xa0\x50"
3533 "\x89\xa4\x8e\x66\x44\x85\xcc\xfd"
3534 "\x33\x14\x70\xe3\x96\xb2\xc3\xd3"
3535 "\xbb\x54\x5a\x1a\xf9\x74\xa2\xc5"
3536 "\x2d\x64\x75\xdd\xb4\x54\xe6\x74"
3537 "\x8c\xd3\x9d\x9e\x86\xab\x51\x53"
3538 "\xb7\x93\x3e\x6f\xd0\x4e\x2c\x40"
3539 "\xf6\xa8\x2e\x3e\x9d\xf4\x66\xa5"
3540 "\x76\x12\x73\x44\x1a\x56\xd7\x72"
3541 "\x88\xcd\x21\x8c\x4c\x0f\xfe\xda"
3542 "\x95\xe0\x3a\xa6\xa5\x84\x46\xcd"
3543 "\xd5\x3e\x9d\x3a\xe2\x67\xe6\x60"
3544 "\x1a\xe2\x70\x85\x58\xc2\x1b\x09"
3545 "\xe1\xd7\x2c\xca\xad\xa8\x8f\xf9"
3546 "\xac\xb3\x0e\xdb\xca\x2e\xe2\xb8"
3547 "\x51\x71\xd9\x3c\x6c\xf1\x56\xf8"
3548 "\xea\x9c\xf1\xfb\x0c\xe6\xb7\x10"
3549 "\x1c\xf8\xa9\x7c\xe8\x53\x35\xc1"
3550 "\x90\x3e\x76\x4a\x74\xa4\x21\x2c"
3551 "\xf6\x2c\x4e\x0f\x94\x3a\x88\x2e"
3552 "\x41\x09\x6a\x33\x7d\xf6\xdd\x3f"
3553 "\x8d\x23\x31\x74\x84\xeb\x88\x6e"
3554 "\xcc\xb9\xbc\x22\x83\x19\x07\x22"
3555 "\xa5\x2d\xdf\xa5\xf3\x80\x85\x78"
3556 "\x84\x39\x6a\x6d\x6a\x99\x4f\xa5"
3557 "\x15\xfe\x46\xb0\xe4\x6c\xa5\x41"
3558 "\x3c\xce\x8f\x42\x60\x71\xa7\x75"
3559 "\x08\x40\x65\x8a\x82\xbf\xf5\x43"
3560 "\x71\x96\xa9\x4d\x44\x8a\x20\xbe"
3561 "\xfa\x4d\xbb\xc0\x7d\x31\x96\x65"
3562 "\xe7\x75\xe5\x3e\xfd\x92\x3b\xc9"
3563 "\x55\xbb\x16\x7e\xf7\xc2\x8c\xa4"
3564 "\x40\x1d\xe5\xef\x0e\xdf\xe4\x9a"
3565 "\x62\x73\x65\xfd\x46\x63\x25\x3d"
3566 "\x2b\xaf\xe5\x64\xfe\xa5\x5c\xcf"
3567 "\x24\xf3\xb4\xac\x64\xba\xdf\x4b"
3568 "\xc6\x96\x7d\x81\x2d\x8d\x97\xf7"
3569 "\xc5\x68\x77\x84\x32\x2b\xcc\x85"
3570 "\x74\x96\xf0\x12\x77\x61\xb9\xeb"
3571 "\x71\xaa\x82\xcb\x1c\xdb\x89\xc8"
3572 "\xc6\xb5\xe3\x5c\x7d\x39\x07\x24"
3573 "\xda\x39\x87\x45\xc0\x2b\xbb\x01"
3574 "\xac\xbc\x2a\x5c\x7f\xfc\xe8\xce"
3575 "\x6d\x9c\x6f\xed\xd3\xc1\xa1\xd6"
3576 "\xc5\x55\xa9\x66\x2f\xe1\xc8\x32"
3577 "\xa6\x5d\xa4\x3a\x98\x73\xe8\x45"
3578 "\xa4\xc7\xa8\xb4\xf6\x13\x03\xf6"
3579 "\xe9\x2e\xc4\x29\x0f\x84\xdb\xc4"
3580 "\x21\xc4\xc2\x75\x67\x89\x37\x0a",
3581 .rlen = 512,
3582 }
3583};
3584
3585static struct cipher_testvec aes_xts_enc_tv_template[] = {
3586 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3587 { /* XTS-AES 1 */
3588 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
3589 "\x00\x00\x00\x00\x00\x00\x00\x00"
3590 "\x00\x00\x00\x00\x00\x00\x00\x00"
3591 "\x00\x00\x00\x00\x00\x00\x00\x00",
3592 .klen = 32,
3593 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3594 "\x00\x00\x00\x00\x00\x00\x00\x00",
3595 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
3596 "\x00\x00\x00\x00\x00\x00\x00\x00"
3597 "\x00\x00\x00\x00\x00\x00\x00\x00"
3598 "\x00\x00\x00\x00\x00\x00\x00\x00",
3599 .ilen = 32,
3600 .result = "\x91\x7c\xf6\x9e\xbd\x68\xb2\xec"
3601 "\x9b\x9f\xe9\xa3\xea\xdd\xa6\x92"
3602 "\xcd\x43\xd2\xf5\x95\x98\xed\x85"
3603 "\x8c\x02\xc2\x65\x2f\xbf\x92\x2e",
3604 .rlen = 32,
3605 }, { /* XTS-AES 2 */
3606 .key = "\x11\x11\x11\x11\x11\x11\x11\x11"
3607 "\x11\x11\x11\x11\x11\x11\x11\x11"
3608 "\x22\x22\x22\x22\x22\x22\x22\x22"
3609 "\x22\x22\x22\x22\x22\x22\x22\x22",
3610 .klen = 32,
3611 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3612 "\x00\x00\x00\x00\x00\x00\x00\x00",
3613 .input = "\x44\x44\x44\x44\x44\x44\x44\x44"
3614 "\x44\x44\x44\x44\x44\x44\x44\x44"
3615 "\x44\x44\x44\x44\x44\x44\x44\x44"
3616 "\x44\x44\x44\x44\x44\x44\x44\x44",
3617 .ilen = 32,
3618 .result = "\xc4\x54\x18\x5e\x6a\x16\x93\x6e"
3619 "\x39\x33\x40\x38\xac\xef\x83\x8b"
3620 "\xfb\x18\x6f\xff\x74\x80\xad\xc4"
3621 "\x28\x93\x82\xec\xd6\xd3\x94\xf0",
3622 .rlen = 32,
3623 }, { /* XTS-AES 3 */
3624 .key = "\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8"
3625 "\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0"
3626 "\x22\x22\x22\x22\x22\x22\x22\x22"
3627 "\x22\x22\x22\x22\x22\x22\x22\x22",
3628 .klen = 32,
3629 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3630 "\x00\x00\x00\x00\x00\x00\x00\x00",
3631 .input = "\x44\x44\x44\x44\x44\x44\x44\x44"
3632 "\x44\x44\x44\x44\x44\x44\x44\x44"
3633 "\x44\x44\x44\x44\x44\x44\x44\x44"
3634 "\x44\x44\x44\x44\x44\x44\x44\x44",
3635 .ilen = 32,
3636 .result = "\xaf\x85\x33\x6b\x59\x7a\xfc\x1a"
3637 "\x90\x0b\x2e\xb2\x1e\xc9\x49\xd2"
3638 "\x92\xdf\x4c\x04\x7e\x0b\x21\x53"
3639 "\x21\x86\xa5\x97\x1a\x22\x7a\x89",
3640 .rlen = 32,
3641 }, { /* XTS-AES 4 */
3642 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
3643 "\x23\x53\x60\x28\x74\x71\x35\x26"
3644 "\x31\x41\x59\x26\x53\x58\x97\x93"
3645 "\x23\x84\x62\x64\x33\x83\x27\x95",
3646 .klen = 32,
3647 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3648 "\x00\x00\x00\x00\x00\x00\x00\x00",
3649 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
3650 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3651 "\x10\x11\x12\x13\x14\x15\x16\x17"
3652 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3653 "\x20\x21\x22\x23\x24\x25\x26\x27"
3654 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3655 "\x30\x31\x32\x33\x34\x35\x36\x37"
3656 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3657 "\x40\x41\x42\x43\x44\x45\x46\x47"
3658 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3659 "\x50\x51\x52\x53\x54\x55\x56\x57"
3660 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3661 "\x60\x61\x62\x63\x64\x65\x66\x67"
3662 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3663 "\x70\x71\x72\x73\x74\x75\x76\x77"
3664 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3665 "\x80\x81\x82\x83\x84\x85\x86\x87"
3666 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3667 "\x90\x91\x92\x93\x94\x95\x96\x97"
3668 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3669 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3670 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3671 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3672 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3673 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3674 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3675 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3676 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3677 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3678 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3679 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3680 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
3681 "\x00\x01\x02\x03\x04\x05\x06\x07"
3682 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3683 "\x10\x11\x12\x13\x14\x15\x16\x17"
3684 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3685 "\x20\x21\x22\x23\x24\x25\x26\x27"
3686 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3687 "\x30\x31\x32\x33\x34\x35\x36\x37"
3688 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3689 "\x40\x41\x42\x43\x44\x45\x46\x47"
3690 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3691 "\x50\x51\x52\x53\x54\x55\x56\x57"
3692 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3693 "\x60\x61\x62\x63\x64\x65\x66\x67"
3694 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3695 "\x70\x71\x72\x73\x74\x75\x76\x77"
3696 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3697 "\x80\x81\x82\x83\x84\x85\x86\x87"
3698 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3699 "\x90\x91\x92\x93\x94\x95\x96\x97"
3700 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3701 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3702 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3703 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3704 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3705 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3706 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3707 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3708 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3709 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3710 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3711 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3712 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
3713 .ilen = 512,
3714 .result = "\x27\xa7\x47\x9b\xef\xa1\xd4\x76"
3715 "\x48\x9f\x30\x8c\xd4\xcf\xa6\xe2"
3716 "\xa9\x6e\x4b\xbe\x32\x08\xff\x25"
3717 "\x28\x7d\xd3\x81\x96\x16\xe8\x9c"
3718 "\xc7\x8c\xf7\xf5\xe5\x43\x44\x5f"
3719 "\x83\x33\xd8\xfa\x7f\x56\x00\x00"
3720 "\x05\x27\x9f\xa5\xd8\xb5\xe4\xad"
3721 "\x40\xe7\x36\xdd\xb4\xd3\x54\x12"
3722 "\x32\x80\x63\xfd\x2a\xab\x53\xe5"
3723 "\xea\x1e\x0a\x9f\x33\x25\x00\xa5"
3724 "\xdf\x94\x87\xd0\x7a\x5c\x92\xcc"
3725 "\x51\x2c\x88\x66\xc7\xe8\x60\xce"
3726 "\x93\xfd\xf1\x66\xa2\x49\x12\xb4"
3727 "\x22\x97\x61\x46\xae\x20\xce\x84"
3728 "\x6b\xb7\xdc\x9b\xa9\x4a\x76\x7a"
3729 "\xae\xf2\x0c\x0d\x61\xad\x02\x65"
3730 "\x5e\xa9\x2d\xc4\xc4\xe4\x1a\x89"
3731 "\x52\xc6\x51\xd3\x31\x74\xbe\x51"
3732 "\xa1\x0c\x42\x11\x10\xe6\xd8\x15"
3733 "\x88\xed\xe8\x21\x03\xa2\x52\xd8"
3734 "\xa7\x50\xe8\x76\x8d\xef\xff\xed"
3735 "\x91\x22\x81\x0a\xae\xb9\x9f\x91"
3736 "\x72\xaf\x82\xb6\x04\xdc\x4b\x8e"
3737 "\x51\xbc\xb0\x82\x35\xa6\xf4\x34"
3738 "\x13\x32\xe4\xca\x60\x48\x2a\x4b"
3739 "\xa1\xa0\x3b\x3e\x65\x00\x8f\xc5"
3740 "\xda\x76\xb7\x0b\xf1\x69\x0d\xb4"
3741 "\xea\xe2\x9c\x5f\x1b\xad\xd0\x3c"
3742 "\x5c\xcf\x2a\x55\xd7\x05\xdd\xcd"
3743 "\x86\xd4\x49\x51\x1c\xeb\x7e\xc3"
3744 "\x0b\xf1\x2b\x1f\xa3\x5b\x91\x3f"
3745 "\x9f\x74\x7a\x8a\xfd\x1b\x13\x0e"
3746 "\x94\xbf\xf9\x4e\xff\xd0\x1a\x91"
3747 "\x73\x5c\xa1\x72\x6a\xcd\x0b\x19"
3748 "\x7c\x4e\x5b\x03\x39\x36\x97\xe1"
3749 "\x26\x82\x6f\xb6\xbb\xde\x8e\xcc"
3750 "\x1e\x08\x29\x85\x16\xe2\xc9\xed"
3751 "\x03\xff\x3c\x1b\x78\x60\xf6\xde"
3752 "\x76\xd4\xce\xcd\x94\xc8\x11\x98"
3753 "\x55\xef\x52\x97\xca\x67\xe9\xf3"
3754 "\xe7\xff\x72\xb1\xe9\x97\x85\xca"
3755 "\x0a\x7e\x77\x20\xc5\xb3\x6d\xc6"
3756 "\xd7\x2c\xac\x95\x74\xc8\xcb\xbc"
3757 "\x2f\x80\x1e\x23\xe5\x6f\xd3\x44"
3758 "\xb0\x7f\x22\x15\x4b\xeb\xa0\xf0"
3759 "\x8c\xe8\x89\x1e\x64\x3e\xd9\x95"
3760 "\xc9\x4d\x9a\x69\xc9\xf1\xb5\xf4"
3761 "\x99\x02\x7a\x78\x57\x2a\xee\xbd"
3762 "\x74\xd2\x0c\xc3\x98\x81\xc2\x13"
3763 "\xee\x77\x0b\x10\x10\xe4\xbe\xa7"
3764 "\x18\x84\x69\x77\xae\x11\x9f\x7a"
3765 "\x02\x3a\xb5\x8c\xca\x0a\xd7\x52"
3766 "\xaf\xe6\x56\xbb\x3c\x17\x25\x6a"
3767 "\x9f\x6e\x9b\xf1\x9f\xdd\x5a\x38"
3768 "\xfc\x82\xbb\xe8\x72\xc5\x53\x9e"
3769 "\xdb\x60\x9e\xf4\xf7\x9c\x20\x3e"
3770 "\xbb\x14\x0f\x2e\x58\x3c\xb2\xad"
3771 "\x15\xb4\xaa\x5b\x65\x50\x16\xa8"
3772 "\x44\x92\x77\xdb\xd4\x77\xef\x2c"
3773 "\x8d\x6c\x01\x7d\xb7\x38\xb1\x8d"
3774 "\xeb\x4a\x42\x7d\x19\x23\xce\x3f"
3775 "\xf2\x62\x73\x57\x79\xa4\x18\xf2"
3776 "\x0a\x28\x2d\xf9\x20\x14\x7b\xea"
3777 "\xbe\x42\x1e\xe5\x31\x9d\x05\x68",
3778 .rlen = 512,
3779 }
3780};
3781
3782static struct cipher_testvec aes_xts_dec_tv_template[] = {
3783 /* http://grouper.ieee.org/groups/1619/email/pdf00086.pdf */
3784 { /* XTS-AES 1 */
3785 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
3786 "\x00\x00\x00\x00\x00\x00\x00\x00"
3787 "\x00\x00\x00\x00\x00\x00\x00\x00"
3788 "\x00\x00\x00\x00\x00\x00\x00\x00",
3789 .klen = 32,
3790 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3791 "\x00\x00\x00\x00\x00\x00\x00\x00",
3792 .input = "\x91\x7c\xf6\x9e\xbd\x68\xb2\xec"
3793 "\x9b\x9f\xe9\xa3\xea\xdd\xa6\x92"
3794 "\xcd\x43\xd2\xf5\x95\x98\xed\x85"
3795 "\x8c\x02\xc2\x65\x2f\xbf\x92\x2e",
3796 .ilen = 32,
3797 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
3798 "\x00\x00\x00\x00\x00\x00\x00\x00"
3799 "\x00\x00\x00\x00\x00\x00\x00\x00"
3800 "\x00\x00\x00\x00\x00\x00\x00\x00",
3801 .rlen = 32,
3802 }, { /* XTS-AES 2 */
3803 .key = "\x11\x11\x11\x11\x11\x11\x11\x11"
3804 "\x11\x11\x11\x11\x11\x11\x11\x11"
3805 "\x22\x22\x22\x22\x22\x22\x22\x22"
3806 "\x22\x22\x22\x22\x22\x22\x22\x22",
3807 .klen = 32,
3808 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3809 "\x00\x00\x00\x00\x00\x00\x00\x00",
3810 .input = "\xc4\x54\x18\x5e\x6a\x16\x93\x6e"
3811 "\x39\x33\x40\x38\xac\xef\x83\x8b"
3812 "\xfb\x18\x6f\xff\x74\x80\xad\xc4"
3813 "\x28\x93\x82\xec\xd6\xd3\x94\xf0",
3814 .ilen = 32,
3815 .result = "\x44\x44\x44\x44\x44\x44\x44\x44"
3816 "\x44\x44\x44\x44\x44\x44\x44\x44"
3817 "\x44\x44\x44\x44\x44\x44\x44\x44"
3818 "\x44\x44\x44\x44\x44\x44\x44\x44",
3819 .rlen = 32,
3820 }, { /* XTS-AES 3 */
3821 .key = "\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8"
3822 "\xf7\xf6\xf5\xf4\xf3\xf2\xf1\xf0"
3823 "\x22\x22\x22\x22\x22\x22\x22\x22"
3824 "\x22\x22\x22\x22\x22\x22\x22\x22",
3825 .klen = 32,
3826 .iv = "\x33\x33\x33\x33\x33\x00\x00\x00"
3827 "\x00\x00\x00\x00\x00\x00\x00\x00",
3828 .input = "\xaf\x85\x33\x6b\x59\x7a\xfc\x1a"
3829 "\x90\x0b\x2e\xb2\x1e\xc9\x49\xd2"
3830 "\x92\xdf\x4c\x04\x7e\x0b\x21\x53"
3831 "\x21\x86\xa5\x97\x1a\x22\x7a\x89",
3832 .ilen = 32,
3833 .result = "\x44\x44\x44\x44\x44\x44\x44\x44"
3834 "\x44\x44\x44\x44\x44\x44\x44\x44"
3835 "\x44\x44\x44\x44\x44\x44\x44\x44"
3836 "\x44\x44\x44\x44\x44\x44\x44\x44",
3837 .rlen = 32,
3838 }, { /* XTS-AES 4 */
3839 .key = "\x27\x18\x28\x18\x28\x45\x90\x45"
3840 "\x23\x53\x60\x28\x74\x71\x35\x26"
3841 "\x31\x41\x59\x26\x53\x58\x97\x93"
3842 "\x23\x84\x62\x64\x33\x83\x27\x95",
3843 .klen = 32,
3844 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
3845 "\x00\x00\x00\x00\x00\x00\x00\x00",
3846 .input = "\x27\xa7\x47\x9b\xef\xa1\xd4\x76"
3847 "\x48\x9f\x30\x8c\xd4\xcf\xa6\xe2"
3848 "\xa9\x6e\x4b\xbe\x32\x08\xff\x25"
3849 "\x28\x7d\xd3\x81\x96\x16\xe8\x9c"
3850 "\xc7\x8c\xf7\xf5\xe5\x43\x44\x5f"
3851 "\x83\x33\xd8\xfa\x7f\x56\x00\x00"
3852 "\x05\x27\x9f\xa5\xd8\xb5\xe4\xad"
3853 "\x40\xe7\x36\xdd\xb4\xd3\x54\x12"
3854 "\x32\x80\x63\xfd\x2a\xab\x53\xe5"
3855 "\xea\x1e\x0a\x9f\x33\x25\x00\xa5"
3856 "\xdf\x94\x87\xd0\x7a\x5c\x92\xcc"
3857 "\x51\x2c\x88\x66\xc7\xe8\x60\xce"
3858 "\x93\xfd\xf1\x66\xa2\x49\x12\xb4"
3859 "\x22\x97\x61\x46\xae\x20\xce\x84"
3860 "\x6b\xb7\xdc\x9b\xa9\x4a\x76\x7a"
3861 "\xae\xf2\x0c\x0d\x61\xad\x02\x65"
3862 "\x5e\xa9\x2d\xc4\xc4\xe4\x1a\x89"
3863 "\x52\xc6\x51\xd3\x31\x74\xbe\x51"
3864 "\xa1\x0c\x42\x11\x10\xe6\xd8\x15"
3865 "\x88\xed\xe8\x21\x03\xa2\x52\xd8"
3866 "\xa7\x50\xe8\x76\x8d\xef\xff\xed"
3867 "\x91\x22\x81\x0a\xae\xb9\x9f\x91"
3868 "\x72\xaf\x82\xb6\x04\xdc\x4b\x8e"
3869 "\x51\xbc\xb0\x82\x35\xa6\xf4\x34"
3870 "\x13\x32\xe4\xca\x60\x48\x2a\x4b"
3871 "\xa1\xa0\x3b\x3e\x65\x00\x8f\xc5"
3872 "\xda\x76\xb7\x0b\xf1\x69\x0d\xb4"
3873 "\xea\xe2\x9c\x5f\x1b\xad\xd0\x3c"
3874 "\x5c\xcf\x2a\x55\xd7\x05\xdd\xcd"
3875 "\x86\xd4\x49\x51\x1c\xeb\x7e\xc3"
3876 "\x0b\xf1\x2b\x1f\xa3\x5b\x91\x3f"
3877 "\x9f\x74\x7a\x8a\xfd\x1b\x13\x0e"
3878 "\x94\xbf\xf9\x4e\xff\xd0\x1a\x91"
3879 "\x73\x5c\xa1\x72\x6a\xcd\x0b\x19"
3880 "\x7c\x4e\x5b\x03\x39\x36\x97\xe1"
3881 "\x26\x82\x6f\xb6\xbb\xde\x8e\xcc"
3882 "\x1e\x08\x29\x85\x16\xe2\xc9\xed"
3883 "\x03\xff\x3c\x1b\x78\x60\xf6\xde"
3884 "\x76\xd4\xce\xcd\x94\xc8\x11\x98"
3885 "\x55\xef\x52\x97\xca\x67\xe9\xf3"
3886 "\xe7\xff\x72\xb1\xe9\x97\x85\xca"
3887 "\x0a\x7e\x77\x20\xc5\xb3\x6d\xc6"
3888 "\xd7\x2c\xac\x95\x74\xc8\xcb\xbc"
3889 "\x2f\x80\x1e\x23\xe5\x6f\xd3\x44"
3890 "\xb0\x7f\x22\x15\x4b\xeb\xa0\xf0"
3891 "\x8c\xe8\x89\x1e\x64\x3e\xd9\x95"
3892 "\xc9\x4d\x9a\x69\xc9\xf1\xb5\xf4"
3893 "\x99\x02\x7a\x78\x57\x2a\xee\xbd"
3894 "\x74\xd2\x0c\xc3\x98\x81\xc2\x13"
3895 "\xee\x77\x0b\x10\x10\xe4\xbe\xa7"
3896 "\x18\x84\x69\x77\xae\x11\x9f\x7a"
3897 "\x02\x3a\xb5\x8c\xca\x0a\xd7\x52"
3898 "\xaf\xe6\x56\xbb\x3c\x17\x25\x6a"
3899 "\x9f\x6e\x9b\xf1\x9f\xdd\x5a\x38"
3900 "\xfc\x82\xbb\xe8\x72\xc5\x53\x9e"
3901 "\xdb\x60\x9e\xf4\xf7\x9c\x20\x3e"
3902 "\xbb\x14\x0f\x2e\x58\x3c\xb2\xad"
3903 "\x15\xb4\xaa\x5b\x65\x50\x16\xa8"
3904 "\x44\x92\x77\xdb\xd4\x77\xef\x2c"
3905 "\x8d\x6c\x01\x7d\xb7\x38\xb1\x8d"
3906 "\xeb\x4a\x42\x7d\x19\x23\xce\x3f"
3907 "\xf2\x62\x73\x57\x79\xa4\x18\xf2"
3908 "\x0a\x28\x2d\xf9\x20\x14\x7b\xea"
3909 "\xbe\x42\x1e\xe5\x31\x9d\x05\x68",
3910 .ilen = 512,
3911 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
3912 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3913 "\x10\x11\x12\x13\x14\x15\x16\x17"
3914 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3915 "\x20\x21\x22\x23\x24\x25\x26\x27"
3916 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3917 "\x30\x31\x32\x33\x34\x35\x36\x37"
3918 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3919 "\x40\x41\x42\x43\x44\x45\x46\x47"
3920 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3921 "\x50\x51\x52\x53\x54\x55\x56\x57"
3922 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3923 "\x60\x61\x62\x63\x64\x65\x66\x67"
3924 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3925 "\x70\x71\x72\x73\x74\x75\x76\x77"
3926 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3927 "\x80\x81\x82\x83\x84\x85\x86\x87"
3928 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3929 "\x90\x91\x92\x93\x94\x95\x96\x97"
3930 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3931 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3932 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3933 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3934 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3935 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3936 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3937 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3938 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3939 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3940 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3941 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3942 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
3943 "\x00\x01\x02\x03\x04\x05\x06\x07"
3944 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
3945 "\x10\x11\x12\x13\x14\x15\x16\x17"
3946 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
3947 "\x20\x21\x22\x23\x24\x25\x26\x27"
3948 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
3949 "\x30\x31\x32\x33\x34\x35\x36\x37"
3950 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
3951 "\x40\x41\x42\x43\x44\x45\x46\x47"
3952 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
3953 "\x50\x51\x52\x53\x54\x55\x56\x57"
3954 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
3955 "\x60\x61\x62\x63\x64\x65\x66\x67"
3956 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
3957 "\x70\x71\x72\x73\x74\x75\x76\x77"
3958 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
3959 "\x80\x81\x82\x83\x84\x85\x86\x87"
3960 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
3961 "\x90\x91\x92\x93\x94\x95\x96\x97"
3962 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
3963 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
3964 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
3965 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
3966 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
3967 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
3968 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
3969 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
3970 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
3971 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
3972 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
3973 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
3974 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff",
3975 .rlen = 512,
3976 }
3977};
3978
3979
3980static struct cipher_testvec aes_ctr_enc_tv_template[] = {
3981 { /* From RFC 3686 */
3982 .key = "\xae\x68\x52\xf8\x12\x10\x67\xcc"
3983 "\x4b\xf7\xa5\x76\x55\x77\xf3\x9e"
3984 "\x00\x00\x00\x30",
3985 .klen = 20,
3986 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
3987 .input = "Single block msg",
3988 .ilen = 16,
3989 .result = "\xe4\x09\x5d\x4f\xb7\xa7\xb3\x79"
3990 "\x2d\x61\x75\xa3\x26\x13\x11\xb8",
3991 .rlen = 16,
3992 }, {
3993 .key = "\x7e\x24\x06\x78\x17\xfa\xe0\xd7"
3994 "\x43\xd6\xce\x1f\x32\x53\x91\x63"
3995 "\x00\x6c\xb6\xdb",
3996 .klen = 20,
3997 .iv = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
3998 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
3999 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4000 "\x10\x11\x12\x13\x14\x15\x16\x17"
4001 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4002 .ilen = 32,
4003 .result = "\x51\x04\xa1\x06\x16\x8a\x72\xd9"
4004 "\x79\x0d\x41\xee\x8e\xda\xd3\x88"
4005 "\xeb\x2e\x1e\xfc\x46\xda\x57\xc8"
4006 "\xfc\xe6\x30\xdf\x91\x41\xbe\x28",
4007 .rlen = 32,
4008 }, {
4009 .key = "\x16\xaf\x5b\x14\x5f\xc9\xf5\x79"
4010 "\xc1\x75\xf9\x3e\x3b\xfb\x0e\xed"
4011 "\x86\x3d\x06\xcc\xfd\xb7\x85\x15"
4012 "\x00\x00\x00\x48",
4013 .klen = 28,
4014 .iv = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
4015 .input = "Single block msg",
4016 .ilen = 16,
4017 .result = "\x4b\x55\x38\x4f\xe2\x59\xc9\xc8"
4018 "\x4e\x79\x35\xa0\x03\xcb\xe9\x28",
4019 .rlen = 16,
4020 }, {
4021 .key = "\x7c\x5c\xb2\x40\x1b\x3d\xc3\x3c"
4022 "\x19\xe7\x34\x08\x19\xe0\xf6\x9c"
4023 "\x67\x8c\x3d\xb8\xe6\xf6\xa9\x1a"
4024 "\x00\x96\xb0\x3b",
4025 .klen = 28,
4026 .iv = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
4027 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
4028 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4029 "\x10\x11\x12\x13\x14\x15\x16\x17"
4030 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4031 .ilen = 32,
4032 .result = "\x45\x32\x43\xfc\x60\x9b\x23\x32"
4033 "\x7e\xdf\xaa\xfa\x71\x31\xcd\x9f"
4034 "\x84\x90\x70\x1c\x5a\xd4\xa7\x9c"
4035 "\xfc\x1f\xe0\xff\x42\xf4\xfb\x00",
4036 .rlen = 32,
4037 }, {
4038 .key = "\x77\x6b\xef\xf2\x85\x1d\xb0\x6f"
4039 "\x4c\x8a\x05\x42\xc8\x69\x6f\x6c"
4040 "\x6a\x81\xaf\x1e\xec\x96\xb4\xd3"
4041 "\x7f\xc1\xd6\x89\xe6\xc1\xc1\x04"
4042 "\x00\x00\x00\x60",
4043 .klen = 36,
4044 .iv = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
4045 .input = "Single block msg",
4046 .ilen = 16,
4047 .result = "\x14\x5a\xd0\x1d\xbf\x82\x4e\xc7"
4048 "\x56\x08\x63\xdc\x71\xe3\xe0\xc0",
4049 .rlen = 16,
4050 }, {
4051 .key = "\xf6\xd6\x6d\x6b\xd5\x2d\x59\xbb"
4052 "\x07\x96\x36\x58\x79\xef\xf8\x86"
4053 "\xc6\x6d\xd5\x1a\x5b\x6a\x99\x74"
4054 "\x4b\x50\x59\x0c\x87\xa2\x38\x84"
4055 "\x00\xfa\xac\x24",
4056 .klen = 36,
4057 .iv = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
4058 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
4059 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4060 "\x10\x11\x12\x13\x14\x15\x16\x17"
4061 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
4062 .ilen = 32,
4063 .result = "\xf0\x5e\x23\x1b\x38\x94\x61\x2c"
4064 "\x49\xee\x00\x0b\x80\x4e\xb2\xa9"
4065 "\xb8\x30\x6b\x50\x8f\x83\x9d\x6a"
4066 "\x55\x30\x83\x1d\x93\x44\xaf\x1c",
4067 .rlen = 32,
4068 }, {
4069 // generated using Crypto++
4070 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
4071 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4072 "\x10\x11\x12\x13\x14\x15\x16\x17"
4073 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
4074 "\x00\x00\x00\x00",
4075 .klen = 32 + 4,
4076 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
4077 .input =
4078 "\x00\x01\x02\x03\x04\x05\x06\x07"
4079 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
4080 "\x10\x11\x12\x13\x14\x15\x16\x17"
4081 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
4082 "\x20\x21\x22\x23\x24\x25\x26\x27"
4083 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
4084 "\x30\x31\x32\x33\x34\x35\x36\x37"
4085 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
4086 "\x40\x41\x42\x43\x44\x45\x46\x47"
4087 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
4088 "\x50\x51\x52\x53\x54\x55\x56\x57"
4089 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
4090 "\x60\x61\x62\x63\x64\x65\x66\x67"
4091 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
4092 "\x70\x71\x72\x73\x74\x75\x76\x77"
4093 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
4094 "\x80\x81\x82\x83\x84\x85\x86\x87"
4095 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
4096 "\x90\x91\x92\x93\x94\x95\x96\x97"
4097 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
4098 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
4099 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
4100 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
4101 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
4102 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
4103 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
4104 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
4105 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
4106 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
4107 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
4108 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
4109 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
4110 "\x00\x03\x06\x09\x0c\x0f\x12\x15"
4111 "\x18\x1b\x1e\x21\x24\x27\x2a\x2d"
4112 "\x30\x33\x36\x39\x3c\x3f\x42\x45"
4113 "\x48\x4b\x4e\x51\x54\x57\x5a\x5d"
4114 "\x60\x63\x66\x69\x6c\x6f\x72\x75"
4115 "\x78\x7b\x7e\x81\x84\x87\x8a\x8d"
4116 "\x90\x93\x96\x99\x9c\x9f\xa2\xa5"
4117 "\xa8\xab\xae\xb1\xb4\xb7\xba\xbd"
4118 "\xc0\xc3\xc6\xc9\xcc\xcf\xd2\xd5"
4119 "\xd8\xdb\xde\xe1\xe4\xe7\xea\xed"
4120 "\xf0\xf3\xf6\xf9\xfc\xff\x02\x05"
4121 "\x08\x0b\x0e\x11\x14\x17\x1a\x1d"
4122 "\x20\x23\x26\x29\x2c\x2f\x32\x35"
4123 "\x38\x3b\x3e\x41\x44\x47\x4a\x4d"
4124 "\x50\x53\x56\x59\x5c\x5f\x62\x65"
4125 "\x68\x6b\x6e\x71\x74\x77\x7a\x7d"
4126 "\x80\x83\x86\x89\x8c\x8f\x92\x95"
4127 "\x98\x9b\x9e\xa1\xa4\xa7\xaa\xad"
4128 "\xb0\xb3\xb6\xb9\xbc\xbf\xc2\xc5"
4129 "\xc8\xcb\xce\xd1\xd4\xd7\xda\xdd"
4130 "\xe0\xe3\xe6\xe9\xec\xef\xf2\xf5"
4131 "\xf8\xfb\xfe\x01\x04\x07\x0a\x0d"
4132 "\x10\x13\x16\x19\x1c\x1f\x22\x25"
4133 "\x28\x2b\x2e\x31\x34\x37\x3a\x3d"
4134 "\x40\x43\x46\x49\x4c\x4f\x52\x55"
4135 "\x58\x5b\x5e\x61\x64\x67\x6a\x6d"
4136 "\x70\x73\x76\x79\x7c\x7f\x82\x85"
4137 "\x88\x8b\x8e\x91\x94\x97\x9a\x9d"
4138 "\xa0\xa3\xa6\xa9\xac\xaf\xb2\xb5"
4139 "\xb8\xbb\xbe\xc1\xc4\xc7\xca\xcd"
4140 "\xd0\xd3\xd6\xd9\xdc\xdf\xe2\xe5"
4141 "\xe8\xeb\xee\xf1\xf4\xf7\xfa\xfd"
4142 "\x00\x05\x0a\x0f\x14\x19\x1e\x23"
4143 "\x28\x2d\x32\x37\x3c\x41\x46\x4b"
4144 "\x50\x55\x5a\x5f\x64\x69\x6e\x73"
4145 "\x78\x7d\x82\x87\x8c\x91\x96\x9b"
4146 "\xa0\xa5\xaa\xaf\xb4\xb9\xbe\xc3"
4147 "\xc8\xcd\xd2\xd7\xdc\xe1\xe6\xeb"
4148 "\xf0\xf5\xfa\xff\x04\x09\x0e\x13"
4149 "\x18\x1d\x22\x27\x2c\x31\x36\x3b"
4150 "\x40\x45\x4a\x4f\x54\x59\x5e\x63"
4151 "\x68\x6d\x72\x77\x7c\x81\x86\x8b"
4152 "\x90\x95\x9a\x9f\xa4\xa9\xae\xb3"
4153 "\xb8\xbd\xc2\xc7\xcc\xd1\xd6\xdb"
4154 "\xe0\xe5\xea\xef\xf4\xf9\xfe\x03"
4155 "\x08\x0d\x12\x17\x1c\x21\x26\x2b"
4156 "\x30\x35\x3a\x3f\x44\x49\x4e\x53"
4157 "\x58\x5d\x62\x67\x6c\x71\x76\x7b"
4158 "\x80\x85\x8a\x8f\x94\x99\x9e\xa3"
4159 "\xa8\xad\xb2\xb7\xbc\xc1\xc6\xcb"
4160 "\xd0\xd5\xda\xdf\xe4\xe9\xee\xf3"
4161 "\xf8\xfd\x02\x07\x0c\x11\x16\x1b"
4162 "\x20\x25\x2a\x2f\x34\x39\x3e\x43"
4163 "\x48\x4d\x52\x57\x5c\x61\x66\x6b"
4164 "\x70\x75\x7a\x7f\x84\x89\x8e\x93"
4165 "\x98\x9d\xa2\xa7\xac\xb1\xb6\xbb"
4166 "\xc0\xc5\xca\xcf\xd4\xd9\xde\xe3"
4167 "\xe8\xed\xf2\xf7\xfc\x01\x06\x0b"
4168 "\x10\x15\x1a\x1f\x24\x29\x2e\x33"
4169 "\x38\x3d\x42\x47\x4c\x51\x56\x5b"
4170 "\x60\x65\x6a\x6f\x74\x79\x7e\x83"
4171 "\x88\x8d\x92\x97\x9c\xa1\xa6\xab"
4172 "\xb0\xb5\xba\xbf\xc4\xc9\xce\xd3"
4173 "\xd8\xdd\xe2\xe7\xec\xf1\xf6\xfb"
4174 "\x00\x07\x0e\x15\x1c\x23\x2a\x31"
4175 "\x38\x3f\x46\x4d\x54\x5b\x62\x69"
4176 "\x70\x77\x7e\x85\x8c\x93\x9a\xa1"
4177 "\xa8\xaf\xb6\xbd\xc4\xcb\xd2\xd9"
4178 "\xe0\xe7\xee\xf5\xfc\x03\x0a\x11"
4179 "\x18\x1f\x26\x2d\x34\x3b\x42\x49"
4180 "\x50\x57\x5e\x65\x6c\x73\x7a\x81"
4181 "\x88\x8f\x96\x9d\xa4\xab\xb2\xb9"
4182 "\xc0\xc7\xce\xd5\xdc\xe3\xea\xf1"
4183 "\xf8\xff\x06\x0d\x14\x1b\x22\x29"
4184 "\x30\x37\x3e\x45\x4c\x53\x5a\x61"
4185 "\x68\x6f\x76\x7d\x84\x8b\x92\x99"
4186 "\xa0\xa7\xae\xb5\xbc\xc3\xca\xd1"
4187 "\xd8\xdf\xe6\xed\xf4\xfb\x02\x09"
4188 "\x10\x17\x1e\x25\x2c\x33\x3a\x41"
4189 "\x48\x4f\x56\x5d\x64\x6b\x72\x79"
4190 "\x80\x87\x8e\x95\x9c\xa3\xaa\xb1"
4191 "\xb8\xbf\xc6\xcd\xd4\xdb\xe2\xe9"
4192 "\xf0\xf7\xfe\x05\x0c\x13\x1a\x21"
4193 "\x28\x2f\x36\x3d\x44\x4b\x52\x59"
4194 "\x60\x67\x6e\x75\x7c\x83\x8a\x91"
4195 "\x98\x9f\xa6\xad\xb4\xbb\xc2\xc9"
4196 "\xd0\xd7\xde\xe5\xec\xf3\xfa\x01"
4197 "\x08\x0f\x16\x1d\x24\x2b\x32\x39"
4198 "\x40\x47\x4e\x55\x5c\x63\x6a\x71"
4199 "\x78\x7f\x86\x8d\x94\x9b\xa2\xa9"
4200 "\xb0\xb7\xbe\xc5\xcc\xd3\xda\xe1"
4201 "\xe8\xef\xf6\xfd\x04\x0b\x12\x19"
4202 "\x20\x27\x2e\x35\x3c\x43\x4a\x51"
4203 "\x58\x5f\x66\x6d\x74\x7b\x82\x89"
4204 "\x90\x97\x9e\xa5\xac\xb3\xba\xc1"
4205 "\xc8\xcf\xd6\xdd\xe4\xeb\xf2\xf9"
4206 "\x00\x09\x12\x1b\x24\x2d\x36\x3f"
4207 "\x48\x51\x5a\x63\x6c\x75\x7e\x87"
4208 "\x90\x99\xa2\xab\xb4\xbd\xc6\xcf"
4209 "\xd8\xe1\xea\xf3\xfc\x05\x0e\x17"
4210 "\x20\x29\x32\x3b\x44\x4d\x56\x5f"
4211 "\x68\x71\x7a\x83\x8c\x95\x9e\xa7"
4212 "\xb0\xb9\xc2\xcb\xd4\xdd\xe6\xef"
4213 "\xf8\x01\x0a\x13\x1c\x25\x2e\x37"
4214 "\x40\x49\x52\x5b\x64\x6d\x76\x7f"
4215 "\x88\x91\x9a\xa3\xac\xb5\xbe\xc7"
4216 "\xd0\xd9\xe2\xeb\xf4\xfd\x06\x0f"
4217 "\x18\x21\x2a\x33\x3c\x45\x4e\x57"
4218 "\x60\x69\x72\x7b\x84\x8d\x96\x9f"
4219 "\xa8\xb1\xba\xc3\xcc\xd5\xde\xe7"
4220 "\xf0\xf9\x02\x0b\x14\x1d\x26\x2f"
4221 "\x38\x41\x4a\x53\x5c\x65\x6e\x77"
4222 "\x80\x89\x92\x9b\xa4\xad\xb6\xbf"
4223 "\xc8\xd1\xda\xe3\xec\xf5\xfe\x07"
4224 "\x10\x19\x22\x2b\x34\x3d\x46\x4f"
4225 "\x58\x61\x6a\x73\x7c\x85\x8e\x97"
4226 "\xa0\xa9\xb2\xbb\xc4\xcd\xd6\xdf"
4227 "\xe8\xf1\xfa\x03\x0c\x15\x1e\x27"
4228 "\x30\x39\x42\x4b\x54\x5d\x66\x6f"
4229 "\x78\x81\x8a\x93\x9c\xa5\xae\xb7"
4230 "\xc0\xc9\xd2\xdb\xe4\xed\xf6\xff"
4231 "\x08\x11\x1a\x23\x2c\x35\x3e\x47"
4232 "\x50\x59\x62\x6b\x74\x7d\x86\x8f"
4233 "\x98\xa1\xaa\xb3\xbc\xc5\xce\xd7"
4234 "\xe0\xe9\xf2\xfb\x04\x0d\x16\x1f"
4235 "\x28\x31\x3a\x43\x4c\x55\x5e\x67"
4236 "\x70\x79\x82\x8b\x94\x9d\xa6\xaf"
4237 "\xb8\xc1\xca\xd3\xdc\xe5\xee\xf7"
4238 "\x00\x0b\x16\x21\x2c\x37\x42\x4d"
4239 "\x58\x63\x6e\x79\x84\x8f\x9a\xa5"
4240 "\xb0\xbb\xc6\xd1\xdc\xe7\xf2\xfd"
4241 "\x08\x13\x1e\x29\x34\x3f\x4a\x55"
4242 "\x60\x6b\x76\x81\x8c\x97\xa2\xad"
4243 "\xb8\xc3\xce\xd9\xe4\xef\xfa\x05"
4244 "\x10\x1b\x26\x31\x3c\x47\x52\x5d"
4245 "\x68\x73\x7e\x89\x94\x9f\xaa\xb5"
4246 "\xc0\xcb\xd6\xe1\xec\xf7\x02\x0d"
4247 "\x18\x23\x2e\x39\x44\x4f\x5a\x65"
4248 "\x70\x7b\x86\x91\x9c\xa7\xb2\xbd"
4249 "\xc8\xd3\xde\xe9\xf4\xff\x0a\x15"
4250 "\x20\x2b\x36\x41\x4c\x57\x62\x6d"
4251 "\x78\x83\x8e\x99\xa4\xaf\xba\xc5"
4252 "\xd0\xdb\xe6\xf1\xfc\x07\x12\x1d"
4253 "\x28\x33\x3e\x49\x54\x5f\x6a\x75"
4254 "\x80\x8b\x96\xa1\xac\xb7\xc2\xcd"
4255 "\xd8\xe3\xee\xf9\x04\x0f\x1a\x25"
4256 "\x30\x3b\x46\x51\x5c\x67\x72\x7d"
4257 "\x88\x93\x9e\xa9\xb4\xbf\xca\xd5"
4258 "\xe0\xeb\xf6\x01\x0c\x17\x22\x2d"
4259 "\x38\x43\x4e\x59\x64\x6f\x7a\x85"
4260 "\x90\x9b\xa6\xb1\xbc\xc7\xd2\xdd"
4261 "\xe8\xf3\xfe\x09\x14\x1f\x2a\x35"
4262 "\x40\x4b\x56\x61\x6c\x77\x82\x8d"
4263 "\x98\xa3\xae\xb9\xc4\xcf\xda\xe5"
4264 "\xf0\xfb\x06\x11\x1c\x27\x32\x3d"
4265 "\x48\x53\x5e\x69\x74\x7f\x8a\x95"
4266 "\xa0\xab\xb6\xc1\xcc\xd7\xe2\xed"
4267 "\xf8\x03\x0e\x19\x24\x2f\x3a\x45"
4268 "\x50\x5b\x66\x71\x7c\x87\x92\x9d"
4269 "\xa8\xb3\xbe\xc9\xd4\xdf\xea\xf5"
4270 "\x00\x0d\x1a\x27\x34\x41\x4e\x5b"
4271 "\x68\x75\x82\x8f\x9c\xa9\xb6\xc3"
4272 "\xd0\xdd\xea\xf7\x04\x11\x1e\x2b"
4273 "\x38\x45\x52\x5f\x6c\x79\x86\x93"
4274 "\xa0\xad\xba\xc7\xd4\xe1\xee\xfb"
4275 "\x08\x15\x22\x2f\x3c\x49\x56\x63"
4276 "\x70\x7d\x8a\x97\xa4\xb1\xbe\xcb"
4277 "\xd8\xe5\xf2\xff\x0c\x19\x26\x33"
4278 "\x40\x4d\x5a\x67\x74\x81\x8e\x9b"
4279 "\xa8\xb5\xc2\xcf\xdc\xe9\xf6\x03"
4280 "\x10\x1d\x2a\x37\x44\x51\x5e\x6b"
4281 "\x78\x85\x92\x9f\xac\xb9\xc6\xd3"
4282 "\xe0\xed\xfa\x07\x14\x21\x2e\x3b"
4283 "\x48\x55\x62\x6f\x7c\x89\x96\xa3"
4284 "\xb0\xbd\xca\xd7\xe4\xf1\xfe\x0b"
4285 "\x18\x25\x32\x3f\x4c\x59\x66\x73"
4286 "\x80\x8d\x9a\xa7\xb4\xc1\xce\xdb"
4287 "\xe8\xf5\x02\x0f\x1c\x29\x36\x43"
4288 "\x50\x5d\x6a\x77\x84\x91\x9e\xab"
4289 "\xb8\xc5\xd2\xdf\xec\xf9\x06\x13"
4290 "\x20\x2d\x3a\x47\x54\x61\x6e\x7b"
4291 "\x88\x95\xa2\xaf\xbc\xc9\xd6\xe3"
4292 "\xf0\xfd\x0a\x17\x24\x31\x3e\x4b"
4293 "\x58\x65\x72\x7f\x8c\x99\xa6\xb3"
4294 "\xc0\xcd\xda\xe7\xf4\x01\x0e\x1b"
4295 "\x28\x35\x42\x4f\x5c\x69\x76\x83"
4296 "\x90\x9d\xaa\xb7\xc4\xd1\xde\xeb"
4297 "\xf8\x05\x12\x1f\x2c\x39\x46\x53"
4298 "\x60\x6d\x7a\x87\x94\xa1\xae\xbb"
4299 "\xc8\xd5\xe2\xef\xfc\x09\x16\x23"
4300 "\x30\x3d\x4a\x57\x64\x71\x7e\x8b"
4301 "\x98\xa5\xb2\xbf\xcc\xd9\xe6\xf3"
4302 "\x00\x0f\x1e\x2d\x3c\x4b\x5a\x69"
4303 "\x78\x87\x96\xa5\xb4\xc3\xd2\xe1"
4304 "\xf0\xff\x0e\x1d\x2c\x3b\x4a\x59"
4305 "\x68\x77\x86\x95\xa4\xb3\xc2\xd1"
4306 "\xe0\xef\xfe\x0d\x1c\x2b\x3a\x49"
4307 "\x58\x67\x76\x85\x94\xa3\xb2\xc1"
4308 "\xd0\xdf\xee\xfd\x0c\x1b\x2a\x39"
4309 "\x48\x57\x66\x75\x84\x93\xa2\xb1"
4310 "\xc0\xcf\xde\xed\xfc\x0b\x1a\x29"
4311 "\x38\x47\x56\x65\x74\x83\x92\xa1"
4312 "\xb0\xbf\xce\xdd\xec\xfb\x0a\x19"
4313 "\x28\x37\x46\x55\x64\x73\x82\x91"
4314 "\xa0\xaf\xbe\xcd\xdc\xeb\xfa\x09"
4315 "\x18\x27\x36\x45\x54\x63\x72\x81"
4316 "\x90\x9f\xae\xbd\xcc\xdb\xea\xf9"
4317 "\x08\x17\x26\x35\x44\x53\x62\x71"
4318 "\x80\x8f\x9e\xad\xbc\xcb\xda\xe9"
4319 "\xf8\x07\x16\x25\x34\x43\x52\x61"
4320 "\x70\x7f\x8e\x9d\xac\xbb\xca\xd9"
4321 "\xe8\xf7\x06\x15\x24\x33\x42\x51"
4322 "\x60\x6f\x7e\x8d\x9c\xab\xba\xc9"
4323 "\xd8\xe7\xf6\x05\x14\x23\x32\x41"
4324 "\x50\x5f\x6e\x7d\x8c\x9b\xaa\xb9"
4325 "\xc8\xd7\xe6\xf5\x04\x13\x22\x31"
4326 "\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9"
4327 "\xb8\xc7\xd6\xe5\xf4\x03\x12\x21"
4328 "\x30\x3f\x4e\x5d\x6c\x7b\x8a\x99"
4329 "\xa8\xb7\xc6\xd5\xe4\xf3\x02\x11"
4330 "\x20\x2f\x3e\x4d\x5c\x6b\x7a\x89"
4331 "\x98\xa7\xb6\xc5\xd4\xe3\xf2\x01"
4332 "\x10\x1f\x2e\x3d\x4c\x5b\x6a\x79"
4333 "\x88\x97\xa6\xb5\xc4\xd3\xe2\xf1"
4334 "\x00\x11\x22\x33\x44\x55\x66\x77"
4335 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff"
4336 "\x10\x21\x32\x43\x54\x65\x76\x87"
4337 "\x98\xa9\xba\xcb\xdc\xed\xfe\x0f"
4338 "\x20\x31\x42\x53\x64\x75\x86\x97"
4339 "\xa8\xb9\xca\xdb\xec\xfd\x0e\x1f"
4340 "\x30\x41\x52\x63\x74\x85\x96\xa7"
4341 "\xb8\xc9\xda\xeb\xfc\x0d\x1e\x2f"
4342 "\x40\x51\x62\x73\x84\x95\xa6\xb7"
4343 "\xc8\xd9\xea\xfb\x0c\x1d\x2e\x3f"
4344 "\x50\x61\x72\x83\x94\xa5\xb6\xc7"
4345 "\xd8\xe9\xfa\x0b\x1c\x2d\x3e\x4f"
4346 "\x60\x71\x82\x93\xa4\xb5\xc6\xd7"
4347 "\xe8\xf9\x0a\x1b\x2c\x3d\x4e\x5f"
4348 "\x70\x81\x92\xa3\xb4\xc5\xd6\xe7"
4349 "\xf8\x09\x1a\x2b\x3c\x4d\x5e\x6f"
4350 "\x80\x91\xa2\xb3\xc4\xd5\xe6\xf7"
4351 "\x08\x19\x2a\x3b\x4c\x5d\x6e\x7f"
4352 "\x90\xa1\xb2\xc3\xd4\xe5\xf6\x07"
4353 "\x18\x29\x3a\x4b\x5c\x6d\x7e\x8f"
4354 "\xa0\xb1\xc2\xd3\xe4\xf5\x06\x17"
4355 "\x28\x39\x4a\x5b\x6c\x7d\x8e\x9f"
4356 "\xb0\xc1\xd2\xe3\xf4\x05\x16\x27"
4357 "\x38\x49\x5a\x6b\x7c\x8d\x9e\xaf"
4358 "\xc0\xd1\xe2\xf3\x04\x15\x26\x37"
4359 "\x48\x59\x6a\x7b\x8c\x9d\xae\xbf"
4360 "\xd0\xe1\xf2\x03\x14\x25\x36\x47"
4361 "\x58\x69\x7a\x8b\x9c\xad\xbe\xcf"
4362 "\xe0\xf1\x02\x13\x24\x35\x46\x57"
4363 "\x68\x79\x8a\x9b\xac\xbd\xce\xdf"
4364 "\xf0\x01\x12\x23\x34\x45\x56\x67"
4365 "\x78\x89\x9a\xab\xbc\xcd\xde\xef"
4366 "\x00\x13\x26\x39\x4c\x5f\x72\x85"
4367 "\x98\xab\xbe\xd1\xe4\xf7\x0a\x1d"
4368 "\x30\x43\x56\x69\x7c\x8f\xa2\xb5"
4369 "\xc8\xdb\xee\x01\x14\x27\x3a\x4d"
4370 "\x60\x73\x86\x99\xac\xbf\xd2\xe5"
4371 "\xf8\x0b\x1e\x31\x44\x57\x6a\x7d"
4372 "\x90\xa3\xb6\xc9\xdc\xef\x02\x15"
4373 "\x28\x3b\x4e\x61\x74\x87\x9a\xad"
4374 "\xc0\xd3\xe6\xf9\x0c\x1f\x32\x45"
4375 "\x58\x6b\x7e\x91\xa4\xb7\xca\xdd"
4376 "\xf0\x03\x16\x29\x3c\x4f\x62\x75"
4377 "\x88\x9b\xae\xc1\xd4\xe7\xfa\x0d"
4378 "\x20\x33\x46\x59\x6c\x7f\x92\xa5"
4379 "\xb8\xcb\xde\xf1\x04\x17\x2a\x3d"
4380 "\x50\x63\x76\x89\x9c\xaf\xc2\xd5"
4381 "\xe8\xfb\x0e\x21\x34\x47\x5a\x6d"
4382 "\x80\x93\xa6\xb9\xcc\xdf\xf2\x05"
4383 "\x18\x2b\x3e\x51\x64\x77\x8a\x9d"
4384 "\xb0\xc3\xd6\xe9\xfc\x0f\x22\x35"
4385 "\x48\x5b\x6e\x81\x94\xa7\xba\xcd"
4386 "\xe0\xf3\x06\x19\x2c\x3f\x52\x65"
4387 "\x78\x8b\x9e\xb1\xc4\xd7\xea\xfd"
4388 "\x10\x23\x36\x49\x5c\x6f\x82\x95"
4389 "\xa8\xbb\xce\xe1\xf4\x07\x1a\x2d"
4390 "\x40\x53\x66\x79\x8c\x9f\xb2\xc5"
4391 "\xd8\xeb\xfe\x11\x24\x37\x4a\x5d"
4392 "\x70\x83\x96\xa9\xbc\xcf\xe2\xf5"
4393 "\x08\x1b\x2e\x41\x54\x67\x7a\x8d"
4394 "\xa0\xb3\xc6\xd9\xec\xff\x12\x25"
4395 "\x38\x4b\x5e\x71\x84\x97\xaa\xbd"
4396 "\xd0\xe3\xf6\x09\x1c\x2f\x42\x55"
4397 "\x68\x7b\x8e\xa1\xb4\xc7\xda\xed"
4398 "\x00\x15\x2a\x3f\x54\x69\x7e\x93"
4399 "\xa8\xbd\xd2\xe7\xfc\x11\x26\x3b"
4400 "\x50\x65\x7a\x8f\xa4\xb9\xce\xe3"
4401 "\xf8\x0d\x22\x37\x4c\x61\x76\x8b"
4402 "\xa0\xb5\xca\xdf\xf4\x09\x1e\x33"
4403 "\x48\x5d\x72\x87\x9c\xb1\xc6\xdb"
4404 "\xf0\x05\x1a\x2f\x44\x59\x6e\x83"
4405 "\x98\xad\xc2\xd7\xec\x01\x16\x2b"
4406 "\x40\x55\x6a\x7f\x94\xa9\xbe\xd3"
4407 "\xe8\xfd\x12\x27\x3c\x51\x66\x7b"
4408 "\x90\xa5\xba\xcf\xe4\xf9\x0e\x23"
4409 "\x38\x4d\x62\x77\x8c\xa1\xb6\xcb"
4410 "\xe0\xf5\x0a\x1f\x34\x49\x5e\x73"
4411 "\x88\x9d\xb2\xc7\xdc\xf1\x06\x1b"
4412 "\x30\x45\x5a\x6f\x84\x99\xae\xc3"
4413 "\xd8\xed\x02\x17\x2c\x41\x56\x6b"
4414 "\x80\x95\xaa\xbf\xd4\xe9\xfe\x13"
4415 "\x28\x3d\x52\x67\x7c\x91\xa6\xbb"
4416 "\xd0\xe5\xfa\x0f\x24\x39\x4e\x63"
4417 "\x78\x8d\xa2\xb7\xcc\xe1\xf6\x0b"
4418 "\x20\x35\x4a\x5f\x74\x89\x9e\xb3"
4419 "\xc8\xdd\xf2\x07\x1c\x31\x46\x5b"
4420 "\x70\x85\x9a\xaf\xc4\xd9\xee\x03"
4421 "\x18\x2d\x42\x57\x6c\x81\x96\xab"
4422 "\xc0\xd5\xea\xff\x14\x29\x3e\x53"
4423 "\x68\x7d\x92\xa7\xbc\xd1\xe6\xfb"
4424 "\x10\x25\x3a\x4f\x64\x79\x8e\xa3"
4425 "\xb8\xcd\xe2\xf7\x0c\x21\x36\x4b"
4426 "\x60\x75\x8a\x9f\xb4\xc9\xde\xf3"
4427 "\x08\x1d\x32\x47\x5c\x71\x86\x9b"
4428 "\xb0\xc5\xda\xef\x04\x19\x2e\x43"
4429 "\x58\x6d\x82\x97\xac\xc1\xd6\xeb"
4430 "\x00\x17\x2e\x45\x5c\x73\x8a\xa1"
4431 "\xb8\xcf\xe6\xfd\x14\x2b\x42\x59"
4432 "\x70\x87\x9e\xb5\xcc\xe3\xfa\x11"
4433 "\x28\x3f\x56\x6d\x84\x9b\xb2\xc9"
4434 "\xe0\xf7\x0e\x25\x3c\x53\x6a\x81"
4435 "\x98\xaf\xc6\xdd\xf4\x0b\x22\x39"
4436 "\x50\x67\x7e\x95\xac\xc3\xda\xf1"
4437 "\x08\x1f\x36\x4d\x64\x7b\x92\xa9"
4438 "\xc0\xd7\xee\x05\x1c\x33\x4a\x61"
4439 "\x78\x8f\xa6\xbd\xd4\xeb\x02\x19"
4440 "\x30\x47\x5e\x75\x8c\xa3\xba\xd1"
4441 "\xe8\xff\x16\x2d\x44\x5b\x72\x89"
4442 "\xa0\xb7\xce\xe5\xfc\x13\x2a\x41"
4443 "\x58\x6f\x86\x9d\xb4\xcb\xe2\xf9"
4444 "\x10\x27\x3e\x55\x6c\x83\x9a\xb1"
4445 "\xc8\xdf\xf6\x0d\x24\x3b\x52\x69"
4446 "\x80\x97\xae\xc5\xdc\xf3\x0a\x21"
4447 "\x38\x4f\x66\x7d\x94\xab\xc2\xd9"
4448 "\xf0\x07\x1e\x35\x4c\x63\x7a\x91"
4449 "\xa8\xbf\xd6\xed\x04\x1b\x32\x49"
4450 "\x60\x77\x8e\xa5\xbc\xd3\xea\x01"
4451 "\x18\x2f\x46\x5d\x74\x8b\xa2\xb9"
4452 "\xd0\xe7\xfe\x15\x2c\x43\x5a\x71"
4453 "\x88\x9f\xb6\xcd\xe4\xfb\x12\x29"
4454 "\x40\x57\x6e\x85\x9c\xb3\xca\xe1"
4455 "\xf8\x0f\x26\x3d\x54\x6b\x82\x99"
4456 "\xb0\xc7\xde\xf5\x0c\x23\x3a\x51"
4457 "\x68\x7f\x96\xad\xc4\xdb\xf2\x09"
4458 "\x20\x37\x4e\x65\x7c\x93\xaa\xc1"
4459 "\xd8\xef\x06\x1d\x34\x4b\x62\x79"
4460 "\x90\xa7\xbe\xd5\xec\x03\x1a\x31"
4461 "\x48\x5f\x76\x8d\xa4\xbb\xd2\xe9"
4462 "\x00\x19\x32\x4b\x64\x7d\x96\xaf"
4463 "\xc8\xe1\xfa\x13\x2c\x45\x5e\x77"
4464 "\x90\xa9\xc2\xdb\xf4\x0d\x26\x3f"
4465 "\x58\x71\x8a\xa3\xbc\xd5\xee\x07"
4466 "\x20\x39\x52\x6b\x84\x9d\xb6\xcf"
4467 "\xe8\x01\x1a\x33\x4c\x65\x7e\x97"
4468 "\xb0\xc9\xe2\xfb\x14\x2d\x46\x5f"
4469 "\x78\x91\xaa\xc3\xdc\xf5\x0e\x27"
4470 "\x40\x59\x72\x8b\xa4\xbd\xd6\xef"
4471 "\x08\x21\x3a\x53\x6c\x85\x9e\xb7"
4472 "\xd0\xe9\x02\x1b\x34\x4d\x66\x7f"
4473 "\x98\xb1\xca\xe3\xfc\x15\x2e\x47"
4474 "\x60\x79\x92\xab\xc4\xdd\xf6\x0f"
4475 "\x28\x41\x5a\x73\x8c\xa5\xbe\xd7"
4476 "\xf0\x09\x22\x3b\x54\x6d\x86\x9f"
4477 "\xb8\xd1\xea\x03\x1c\x35\x4e\x67"
4478 "\x80\x99\xb2\xcb\xe4\xfd\x16\x2f"
4479 "\x48\x61\x7a\x93\xac\xc5\xde\xf7"
4480 "\x10\x29\x42\x5b\x74\x8d\xa6\xbf"
4481 "\xd8\xf1\x0a\x23\x3c\x55\x6e\x87"
4482 "\xa0\xb9\xd2\xeb\x04\x1d\x36\x4f"
4483 "\x68\x81\x9a\xb3\xcc\xe5\xfe\x17"
4484 "\x30\x49\x62\x7b\x94\xad\xc6\xdf"
4485 "\xf8\x11\x2a\x43\x5c\x75\x8e\xa7"
4486 "\xc0\xd9\xf2\x0b\x24\x3d\x56\x6f"
4487 "\x88\xa1\xba\xd3\xec\x05\x1e\x37"
4488 "\x50\x69\x82\x9b\xb4\xcd\xe6\xff"
4489 "\x18\x31\x4a\x63\x7c\x95\xae\xc7"
4490 "\xe0\xf9\x12\x2b\x44\x5d\x76\x8f"
4491 "\xa8\xc1\xda\xf3\x0c\x25\x3e\x57"
4492 "\x70\x89\xa2\xbb\xd4\xed\x06\x1f"
4493 "\x38\x51\x6a\x83\x9c\xb5\xce\xe7"
4494 "\x00\x1b\x36\x51\x6c\x87\xa2\xbd"
4495 "\xd8\xf3\x0e\x29\x44\x5f\x7a\x95"
4496 "\xb0\xcb\xe6\x01\x1c\x37\x52\x6d"
4497 "\x88\xa3\xbe\xd9\xf4\x0f\x2a\x45"
4498 "\x60\x7b\x96\xb1\xcc\xe7\x02\x1d"
4499 "\x38\x53\x6e\x89\xa4\xbf\xda\xf5"
4500 "\x10\x2b\x46\x61\x7c\x97\xb2\xcd"
4501 "\xe8\x03\x1e\x39\x54\x6f\x8a\xa5"
4502 "\xc0\xdb\xf6\x11\x2c\x47\x62\x7d"
4503 "\x98\xb3\xce\xe9\x04\x1f\x3a\x55"
4504 "\x70\x8b\xa6\xc1\xdc\xf7\x12\x2d"
4505 "\x48\x63\x7e\x99\xb4\xcf\xea\x05"
4506 "\x20\x3b\x56\x71\x8c\xa7\xc2\xdd"
4507 "\xf8\x13\x2e\x49\x64\x7f\x9a\xb5"
4508 "\xd0\xeb\x06\x21\x3c\x57\x72\x8d"
4509 "\xa8\xc3\xde\xf9\x14\x2f\x4a\x65"
4510 "\x80\x9b\xb6\xd1\xec\x07\x22\x3d"
4511 "\x58\x73\x8e\xa9\xc4\xdf\xfa\x15"
4512 "\x30\x4b\x66\x81\x9c\xb7\xd2\xed"
4513 "\x08\x23\x3e\x59\x74\x8f\xaa\xc5"
4514 "\xe0\xfb\x16\x31\x4c\x67\x82\x9d"
4515 "\xb8\xd3\xee\x09\x24\x3f\x5a\x75"
4516 "\x90\xab\xc6\xe1\xfc\x17\x32\x4d"
4517 "\x68\x83\x9e\xb9\xd4\xef\x0a\x25"
4518 "\x40\x5b\x76\x91\xac\xc7\xe2\xfd"
4519 "\x18\x33\x4e\x69\x84\x9f\xba\xd5"
4520 "\xf0\x0b\x26\x41\x5c\x77\x92\xad"
4521 "\xc8\xe3\xfe\x19\x34\x4f\x6a\x85"
4522 "\xa0\xbb\xd6\xf1\x0c\x27\x42\x5d"
4523 "\x78\x93\xae\xc9\xe4\xff\x1a\x35"
4524 "\x50\x6b\x86\xa1\xbc\xd7\xf2\x0d"
4525 "\x28\x43\x5e\x79\x94\xaf\xca\xe5"
4526 "\x00\x1d\x3a\x57\x74\x91\xae\xcb"
4527 "\xe8\x05\x22\x3f\x5c\x79\x96\xb3"
4528 "\xd0\xed\x0a\x27\x44\x61\x7e\x9b"
4529 "\xb8\xd5\xf2\x0f\x2c\x49\x66\x83"
4530 "\xa0\xbd\xda\xf7\x14\x31\x4e\x6b"
4531 "\x88\xa5\xc2\xdf\xfc\x19\x36\x53"
4532 "\x70\x8d\xaa\xc7\xe4\x01\x1e\x3b"
4533 "\x58\x75\x92\xaf\xcc\xe9\x06\x23"
4534 "\x40\x5d\x7a\x97\xb4\xd1\xee\x0b"
4535 "\x28\x45\x62\x7f\x9c\xb9\xd6\xf3"
4536 "\x10\x2d\x4a\x67\x84\xa1\xbe\xdb"
4537 "\xf8\x15\x32\x4f\x6c\x89\xa6\xc3"
4538 "\xe0\xfd\x1a\x37\x54\x71\x8e\xab"
4539 "\xc8\xe5\x02\x1f\x3c\x59\x76\x93"
4540 "\xb0\xcd\xea\x07\x24\x41\x5e\x7b"
4541 "\x98\xb5\xd2\xef\x0c\x29\x46\x63"
4542 "\x80\x9d\xba\xd7\xf4\x11\x2e\x4b"
4543 "\x68\x85\xa2\xbf\xdc\xf9\x16\x33"
4544 "\x50\x6d\x8a\xa7\xc4\xe1\xfe\x1b"
4545 "\x38\x55\x72\x8f\xac\xc9\xe6\x03"
4546 "\x20\x3d\x5a\x77\x94\xb1\xce\xeb"
4547 "\x08\x25\x42\x5f\x7c\x99\xb6\xd3"
4548 "\xf0\x0d\x2a\x47\x64\x81\x9e\xbb"
4549 "\xd8\xf5\x12\x2f\x4c\x69\x86\xa3"
4550 "\xc0\xdd\xfa\x17\x34\x51\x6e\x8b"
4551 "\xa8\xc5\xe2\xff\x1c\x39\x56\x73"
4552 "\x90\xad\xca\xe7\x04\x21\x3e\x5b"
4553 "\x78\x95\xb2\xcf\xec\x09\x26\x43"
4554 "\x60\x7d\x9a\xb7\xd4\xf1\x0e\x2b"
4555 "\x48\x65\x82\x9f\xbc\xd9\xf6\x13"
4556 "\x30\x4d\x6a\x87\xa4\xc1\xde\xfb"
4557 "\x18\x35\x52\x6f\x8c\xa9\xc6\xe3"
4558 "\x00\x1f\x3e\x5d\x7c\x9b\xba\xd9"
4559 "\xf8\x17\x36\x55\x74\x93\xb2\xd1"
4560 "\xf0\x0f\x2e\x4d\x6c\x8b\xaa\xc9"
4561 "\xe8\x07\x26\x45\x64\x83\xa2\xc1"
4562 "\xe0\xff\x1e\x3d\x5c\x7b\x9a\xb9"
4563 "\xd8\xf7\x16\x35\x54\x73\x92\xb1"
4564 "\xd0\xef\x0e\x2d\x4c\x6b\x8a\xa9"
4565 "\xc8\xe7\x06\x25\x44\x63\x82\xa1"
4566 "\xc0\xdf\xfe\x1d\x3c\x5b\x7a\x99"
4567 "\xb8\xd7\xf6\x15\x34\x53\x72\x91"
4568 "\xb0\xcf\xee\x0d\x2c\x4b\x6a\x89"
4569 "\xa8\xc7\xe6\x05\x24\x43\x62\x81"
4570 "\xa0\xbf\xde\xfd\x1c\x3b\x5a\x79"
4571 "\x98\xb7\xd6\xf5\x14\x33\x52\x71"
4572 "\x90\xaf\xce\xed\x0c\x2b\x4a\x69"
4573 "\x88\xa7\xc6\xe5\x04\x23\x42\x61"
4574 "\x80\x9f\xbe\xdd\xfc\x1b\x3a\x59"
4575 "\x78\x97\xb6\xd5\xf4\x13\x32\x51"
4576 "\x70\x8f\xae\xcd\xec\x0b\x2a\x49"
4577 "\x68\x87\xa6\xc5\xe4\x03\x22\x41"
4578 "\x60\x7f\x9e\xbd\xdc\xfb\x1a\x39"
4579 "\x58\x77\x96\xb5\xd4\xf3\x12\x31"
4580 "\x50\x6f\x8e\xad\xcc\xeb\x0a\x29"
4581 "\x48\x67\x86\xa5\xc4\xe3\x02\x21"
4582 "\x40\x5f\x7e\x9d\xbc\xdb\xfa\x19"
4583 "\x38\x57\x76\x95\xb4\xd3\xf2\x11"
4584 "\x30\x4f\x6e\x8d\xac\xcb\xea\x09"
4585 "\x28\x47\x66\x85\xa4\xc3\xe2\x01"
4586 "\x20\x3f\x5e\x7d\x9c\xbb\xda\xf9"
4587 "\x18\x37\x56\x75\x94\xb3\xd2\xf1"
4588 "\x10\x2f\x4e\x6d\x8c\xab\xca\xe9"
4589 "\x08\x27\x46\x65\x84\xa3\xc2\xe1"
4590 "\x00\x21\x42\x63",
4591 .ilen = 4100,
4592 .result =
4593 "\xf0\x5c\x74\xad\x4e\xbc\x99\xe2"
4594 "\xae\xff\x91\x3a\x44\xcf\x38\x32"
4595 "\x1e\xad\xa7\xcd\xa1\x39\x95\xaa"
4596 "\x10\xb1\xb3\x2e\x04\x31\x8f\x86"
4597 "\xf2\x62\x74\x70\x0c\xa4\x46\x08"
4598 "\xa8\xb7\x99\xa8\xe9\xd2\x73\x79"
4599 "\x7e\x6e\xd4\x8f\x1e\xc7\x8e\x31"
4600 "\x0b\xfa\x4b\xce\xfd\xf3\x57\x71"
4601 "\xe9\x46\x03\xa5\x3d\x34\x00\xe2"
4602 "\x18\xff\x75\x6d\x06\x2d\x00\xab"
4603 "\xb9\x3e\x6c\x59\xc5\x84\x06\xb5"
4604 "\x8b\xd0\x89\x9c\x4a\x79\x16\xc6"
4605 "\x3d\x74\x54\xfa\x44\xcd\x23\x26"
4606 "\x5c\xcf\x7e\x28\x92\x32\xbf\xdf"
4607 "\xa7\x20\x3c\x74\x58\x2a\x9a\xde"
4608 "\x61\x00\x1c\x4f\xff\x59\xc4\x22"
4609 "\xac\x3c\xd0\xe8\x6c\xf9\x97\x1b"
4610 "\x58\x9b\xad\x71\xe8\xa9\xb5\x0d"
4611 "\xee\x2f\x04\x1f\x7f\xbc\x99\xee"
4612 "\x84\xff\x42\x60\xdc\x3a\x18\xa5"
4613 "\x81\xf9\xef\xdc\x7a\x0f\x65\x41"
4614 "\x2f\xa3\xd3\xf9\xc2\xcb\xc0\x4d"
4615 "\x8f\xd3\x76\x96\xad\x49\x6d\x38"
4616 "\x3d\x39\x0b\x6c\x80\xb7\x54\x69"
4617 "\xf0\x2c\x90\x02\x29\x0d\x1c\x12"
4618 "\xad\x55\xc3\x8b\x68\xd9\xcc\xb3"
4619 "\xb2\x64\x33\x90\x5e\xca\x4b\xe2"
4620 "\xfb\x75\xdc\x63\xf7\x9f\x82\x74"
4621 "\xf0\xc9\xaa\x7f\xe9\x2a\x9b\x33"
4622 "\xbc\x88\x00\x7f\xca\xb2\x1f\x14"
4623 "\xdb\xc5\x8e\x7b\x11\x3c\x3e\x08"
4624 "\xf3\x83\xe8\xe0\x94\x86\x2e\x92"
4625 "\x78\x6b\x01\xc9\xc7\x83\xba\x21"
4626 "\x6a\x25\x15\x33\x4e\x45\x08\xec"
4627 "\x35\xdb\xe0\x6e\x31\x51\x79\xa9"
4628 "\x42\x44\x65\xc1\xa0\xf1\xf9\x2a"
4629 "\x70\xd5\xb6\xc6\xc1\x8c\x39\xfc"
4630 "\x25\xa6\x55\xd9\xdd\x2d\x4c\xec"
4631 "\x49\xc6\xeb\x0e\xa8\x25\x2a\x16"
4632 "\x1b\x66\x84\xda\xe2\x92\xe5\xc0"
4633 "\xc8\x53\x07\xaf\x80\x84\xec\xfd"
4634 "\xcd\xd1\x6e\xcd\x6f\x6a\xf5\x36"
4635 "\xc5\x15\xe5\x25\x7d\x77\xd1\x1a"
4636 "\x93\x36\xa9\xcf\x7c\xa4\x54\x4a"
4637 "\x06\x51\x48\x4e\xf6\x59\x87\xd2"
4638 "\x04\x02\xef\xd3\x44\xde\x76\x31"
4639 "\xb3\x34\x17\x1b\x9d\x66\x11\x9f"
4640 "\x1e\xcc\x17\xe9\xc7\x3c\x1b\xe7"
4641 "\xcb\x50\x08\xfc\xdc\x2b\x24\xdb"
4642 "\x65\x83\xd0\x3b\xe3\x30\xea\x94"
4643 "\x6c\xe7\xe8\x35\x32\xc7\xdb\x64"
4644 "\xb4\x01\xab\x36\x2c\x77\x13\xaf"
4645 "\xf8\x2b\x88\x3f\x54\x39\xc4\x44"
4646 "\xfe\xef\x6f\x68\x34\xbe\x0f\x05"
4647 "\x16\x6d\xf6\x0a\x30\xe7\xe3\xed"
4648 "\xc4\xde\x3c\x1b\x13\xd8\xdb\xfe"
4649 "\x41\x62\xe5\x28\xd4\x8d\xa3\xc7"
4650 "\x93\x97\xc6\x48\x45\x1d\x9f\x83"
4651 "\xdf\x4b\x40\x3e\x42\x25\x87\x80"
4652 "\x4c\x7d\xa8\xd4\x98\x23\x95\x75"
4653 "\x41\x8c\xda\x41\x9b\xd4\xa7\x06"
4654 "\xb5\xf1\x71\x09\x53\xbe\xca\xbf"
4655 "\x32\x03\xed\xf0\x50\x1c\x56\x39"
4656 "\x5b\xa4\x75\x18\xf7\x9b\x58\xef"
4657 "\x53\xfc\x2a\x38\x23\x15\x75\xcd"
4658 "\x45\xe5\x5a\x82\x55\xba\x21\xfa"
4659 "\xd4\xbd\xc6\x94\x7c\xc5\x80\x12"
4660 "\xf7\x4b\x32\xc4\x9a\x82\xd8\x28"
4661 "\x8f\xd9\xc2\x0f\x60\x03\xbe\x5e"
4662 "\x21\xd6\x5f\x58\xbf\x5c\xb1\x32"
4663 "\x82\x8d\xa9\xe5\xf2\x66\x1a\xc0"
4664 "\xa0\xbc\x58\x2f\x71\xf5\x2f\xed"
4665 "\xd1\x26\xb9\xd8\x49\x5a\x07\x19"
4666 "\x01\x7c\x59\xb0\xf8\xa4\xb7\xd3"
4667 "\x7b\x1a\x8c\x38\xf4\x50\xa4\x59"
4668 "\xb0\xcc\x41\x0b\x88\x7f\xe5\x31"
4669 "\xb3\x42\xba\xa2\x7e\xd4\x32\x71"
4670 "\x45\x87\x48\xa9\xc2\xf2\x89\xb3"
4671 "\xe4\xa7\x7e\x52\x15\x61\xfa\xfe"
4672 "\xc9\xdd\x81\xeb\x13\xab\xab\xc3"
4673 "\x98\x59\xd8\x16\x3d\x14\x7a\x1c"
4674 "\x3c\x41\x9a\x16\x16\x9b\xd2\xd2"
4675 "\x69\x3a\x29\x23\xac\x86\x32\xa5"
4676 "\x48\x9c\x9e\xf3\x47\x77\x81\x70"
4677 "\x24\xe8\x85\xd2\xf5\xb5\xfa\xff"
4678 "\x59\x6a\xd3\x50\x59\x43\x59\xde"
4679 "\xd9\xf1\x55\xa5\x0c\xc3\x1a\x1a"
4680 "\x18\x34\x0d\x1a\x63\x33\xed\x10"
4681 "\xe0\x1d\x2a\x18\xd2\xc0\x54\xa8"
4682 "\xca\xb5\x9a\xd3\xdd\xca\x45\x84"
4683 "\x50\xe7\x0f\xfe\xa4\x99\x5a\xbe"
4684 "\x43\x2d\x9a\xcb\x92\x3f\x5a\x1d"
4685 "\x85\xd8\xc9\xdf\x68\xc9\x12\x80"
4686 "\x56\x0c\xdc\x00\xdc\x3a\x7d\x9d"
4687 "\xa3\xa2\xe8\x4d\xbf\xf9\x70\xa0"
4688 "\xa4\x13\x4f\x6b\xaf\x0a\x89\x7f"
4689 "\xda\xf0\xbf\x9b\xc8\x1d\xe5\xf8"
4690 "\x2e\x8b\x07\xb5\x73\x1b\xcc\xa2"
4691 "\xa6\xad\x30\xbc\x78\x3c\x5b\x10"
4692 "\xfa\x5e\x62\x2d\x9e\x64\xb3\x33"
4693 "\xce\xf9\x1f\x86\xe7\x8b\xa2\xb8"
4694 "\xe8\x99\x57\x8c\x11\xed\x66\xd9"
4695 "\x3c\x72\xb9\xc3\xe6\x4e\x17\x3a"
4696 "\x6a\xcb\x42\x24\x06\xed\x3e\x4e"
4697 "\xa3\xe8\x6a\x94\xda\x0d\x4e\xd5"
4698 "\x14\x19\xcf\xb6\x26\xd8\x2e\xcc"
4699 "\x64\x76\x38\x49\x4d\xfe\x30\x6d"
4700 "\xe4\xc8\x8c\x7b\xc4\xe0\x35\xba"
4701 "\x22\x6e\x76\xe1\x1a\xf2\x53\xc3"
4702 "\x28\xa2\x82\x1f\x61\x69\xad\xc1"
4703 "\x7b\x28\x4b\x1e\x6c\x85\x95\x9b"
4704 "\x51\xb5\x17\x7f\x12\x69\x8c\x24"
4705 "\xd5\xc7\x5a\x5a\x11\x54\xff\x5a"
4706 "\xf7\x16\xc3\x91\xa6\xf0\xdc\x0a"
4707 "\xb6\xa7\x4a\x0d\x7a\x58\xfe\xa5"
4708 "\xf5\xcb\x8f\x7b\x0e\xea\x57\xe7"
4709 "\xbd\x79\xd6\x1c\x88\x23\x6c\xf2"
4710 "\x4d\x29\x77\x53\x35\x6a\x00\x8d"
4711 "\xcd\xa3\x58\xbe\x77\x99\x18\xf8"
4712 "\xe6\xe1\x8f\xe9\x37\x8f\xe3\xe2"
4713 "\x5a\x8a\x93\x25\xaf\xf3\x78\x80"
4714 "\xbe\xa6\x1b\xc6\xac\x8b\x1c\x91"
4715 "\x58\xe1\x9f\x89\x35\x9d\x1d\x21"
4716 "\x29\x9f\xf4\x99\x02\x27\x0f\xa8"
4717 "\x4f\x79\x94\x2b\x33\x2c\xda\xa2"
4718 "\x26\x39\x83\x94\xef\x27\xd8\x53"
4719 "\x8f\x66\x0d\xe4\x41\x7d\x34\xcd"
4720 "\x43\x7c\x95\x0a\x53\xef\x66\xda"
4721 "\x7e\x9b\xf3\x93\xaf\xd0\x73\x71"
4722 "\xba\x40\x9b\x74\xf8\xd7\xd7\x41"
4723 "\x6d\xaf\x72\x9c\x8d\x21\x87\x3c"
4724 "\xfd\x0a\x90\xa9\x47\x96\x9e\xd3"
4725 "\x88\xee\x73\xcf\x66\x2f\x52\x56"
4726 "\x6d\xa9\x80\x4c\xe2\x6f\x62\x88"
4727 "\x3f\x0e\x54\x17\x48\x80\x5d\xd3"
4728 "\xc3\xda\x25\x3d\xa1\xc8\xcb\x9f"
4729 "\x9b\x70\xb3\xa1\xeb\x04\x52\xa1"
4730 "\xf2\x22\x0f\xfc\xc8\x18\xfa\xf9"
4731 "\x85\x9c\xf1\xac\xeb\x0c\x02\x46"
4732 "\x75\xd2\xf5\x2c\xe3\xd2\x59\x94"
4733 "\x12\xf3\x3c\xfc\xd7\x92\xfa\x36"
4734 "\xba\x61\x34\x38\x7c\xda\x48\x3e"
4735 "\x08\xc9\x39\x23\x5e\x02\x2c\x1a"
4736 "\x18\x7e\xb4\xd9\xfd\x9e\x40\x02"
4737 "\xb1\x33\x37\x32\xe7\xde\xd6\xd0"
4738 "\x7c\x58\x65\x4b\xf8\x34\x27\x9c"
4739 "\x44\xb4\xbd\xe9\xe9\x4c\x78\x7d"
4740 "\x4b\x9f\xce\xb1\xcd\x47\xa5\x37"
4741 "\xe5\x6d\xbd\xb9\x43\x94\x0a\xd4"
4742 "\xd6\xf9\x04\x5f\xb5\x66\x6c\x1a"
4743 "\x35\x12\xe3\x36\x28\x27\x36\x58"
4744 "\x01\x2b\x79\xe4\xba\x6d\x10\x7d"
4745 "\x65\xdf\x84\x95\xf4\xd5\xb6\x8f"
4746 "\x2b\x9f\x96\x00\x86\x60\xf0\x21"
4747 "\x76\xa8\x6a\x8c\x28\x1c\xb3\x6b"
4748 "\x97\xd7\xb6\x53\x2a\xcc\xab\x40"
4749 "\x9d\x62\x79\x58\x52\xe6\x65\xb7"
4750 "\xab\x55\x67\x9c\x89\x7c\x03\xb0"
4751 "\x73\x59\xc5\x81\xf5\x18\x17\x5c"
4752 "\x89\xf3\x78\x35\x44\x62\x78\x72"
4753 "\xd0\x96\xeb\x31\xe7\x87\x77\x14"
4754 "\x99\x51\xf2\x59\x26\x9e\xb5\xa6"
4755 "\x45\xfe\x6e\xbd\x07\x4c\x94\x5a"
4756 "\xa5\x7d\xfc\xf1\x2b\x77\xe2\xfe"
4757 "\x17\xd4\x84\xa0\xac\xb5\xc7\xda"
4758 "\xa9\x1a\xb6\xf3\x74\x11\xb4\x9d"
4759 "\xfb\x79\x2e\x04\x2d\x50\x28\x83"
4760 "\xbf\xc6\x52\xd3\x34\xd6\xe8\x7a"
4761 "\xb6\xea\xe7\xa8\x6c\x15\x1e\x2c"
4762 "\x57\xbc\x48\x4e\x5f\x5c\xb6\x92"
4763 "\xd2\x49\x77\x81\x6d\x90\x70\xae"
4764 "\x98\xa1\x03\x0d\x6b\xb9\x77\x14"
4765 "\xf1\x4e\x23\xd3\xf8\x68\xbd\xc2"
4766 "\xfe\x04\xb7\x5c\xc5\x17\x60\x8f"
4767 "\x65\x54\xa4\x7a\x42\xdc\x18\x0d"
4768 "\xb5\xcf\x0f\xd3\xc7\x91\x66\x1b"
4769 "\x45\x42\x27\x75\x50\xe5\xee\xb8"
4770 "\x7f\x33\x2c\xba\x4a\x92\x4d\x2c"
4771 "\x3c\xe3\x0d\x80\x01\xba\x0d\x29"
4772 "\xd8\x3c\xe9\x13\x16\x57\xe6\xea"
4773 "\x94\x52\xe7\x00\x4d\x30\xb0\x0f"
4774 "\x35\xb8\xb8\xa7\xb1\xb5\x3b\x44"
4775 "\xe1\x2f\xfd\x88\xed\x43\xe7\x52"
4776 "\x10\x93\xb3\x8a\x30\x6b\x0a\xf7"
4777 "\x23\xc6\x50\x9d\x4a\xb0\xde\xc3"
4778 "\xdc\x9b\x2f\x01\x56\x36\x09\xc5"
4779 "\x2f\x6b\xfe\xf1\xd8\x27\x45\x03"
4780 "\x30\x5e\x5c\x5b\xb4\x62\x0e\x1a"
4781 "\xa9\x21\x2b\x92\x94\x87\x62\x57"
4782 "\x4c\x10\x74\x1a\xf1\x0a\xc5\x84"
4783 "\x3b\x9e\x72\x02\xd7\xcc\x09\x56"
4784 "\xbd\x54\xc1\xf0\xc3\xe3\xb3\xf8"
4785 "\xd2\x0d\x61\xcb\xef\xce\x0d\x05"
4786 "\xb0\x98\xd9\x8e\x4f\xf9\xbc\x93"
4787 "\xa6\xea\xc8\xcf\x10\x53\x4b\xf1"
4788 "\xec\xfc\x89\xf9\x64\xb0\x22\xbf"
4789 "\x9e\x55\x46\x9f\x7c\x50\x8e\x84"
4790 "\x54\x20\x98\xd7\x6c\x40\x1e\xdb"
4791 "\x69\x34\x78\x61\x24\x21\x9c\x8a"
4792 "\xb3\x62\x31\x8b\x6e\xf5\x2a\x35"
4793 "\x86\x13\xb1\x6c\x64\x2e\x41\xa5"
4794 "\x05\xf2\x42\xba\xd2\x3a\x0d\x8e"
4795 "\x8a\x59\x94\x3c\xcf\x36\x27\x82"
4796 "\xc2\x45\xee\x58\xcd\x88\xb4\xec"
4797 "\xde\xb2\x96\x0a\xaf\x38\x6f\x88"
4798 "\xd7\xd8\xe1\xdf\xb9\x96\xa9\x0a"
4799 "\xb1\x95\x28\x86\x20\xe9\x17\x49"
4800 "\xa2\x29\x38\xaa\xa5\xe9\x6e\xf1"
4801 "\x19\x27\xc0\xd5\x2a\x22\xc3\x0b"
4802 "\xdb\x7c\x73\x10\xb9\xba\x89\x76"
4803 "\x54\xae\x7d\x71\xb3\x93\xf6\x32"
4804 "\xe6\x47\x43\x55\xac\xa0\x0d\xc2"
4805 "\x93\x27\x4a\x8e\x0e\x74\x15\xc7"
4806 "\x0b\x85\xd9\x0c\xa9\x30\x7a\x3e"
4807 "\xea\x8f\x85\x6d\x3a\x12\x4f\x72"
4808 "\x69\x58\x7a\x80\xbb\xb5\x97\xf3"
4809 "\xcf\x70\xd2\x5d\xdd\x4d\x21\x79"
4810 "\x54\x4d\xe4\x05\xe8\xbd\xc2\x62"
4811 "\xb1\x3b\x77\x1c\xd6\x5c\xf3\xa0"
4812 "\x79\x00\xa8\x6c\x29\xd9\x18\x24"
4813 "\x36\xa2\x46\xc0\x96\x65\x7f\xbd"
4814 "\x2a\xed\x36\x16\x0c\xaa\x9f\xf4"
4815 "\xc5\xb4\xe2\x12\xed\x69\xed\x4f"
4816 "\x26\x2c\x39\x52\x89\x98\xe7\x2c"
4817 "\x99\xa4\x9e\xa3\x9b\x99\x46\x7a"
4818 "\x3a\xdc\xa8\x59\xa3\xdb\xc3\x3b"
4819 "\x95\x0d\x3b\x09\x6e\xee\x83\x5d"
4820 "\x32\x4d\xed\xab\xfa\x98\x14\x4e"
4821 "\xc3\x15\x45\x53\x61\xc4\x93\xbd"
4822 "\x90\xf4\x99\x95\x4c\xe6\x76\x92"
4823 "\x29\x90\x46\x30\x92\x69\x7d\x13"
4824 "\xf2\xa5\xcd\x69\x49\x44\xb2\x0f"
4825 "\x63\x40\x36\x5f\x09\xe2\x78\xf8"
4826 "\x91\xe3\xe2\xfa\x10\xf7\xc8\x24"
4827 "\xa8\x89\x32\x5c\x37\x25\x1d\xb2"
4828 "\xea\x17\x8a\x0a\xa9\x64\xc3\x7c"
4829 "\x3c\x7c\xbd\xc6\x79\x34\xe7\xe2"
4830 "\x85\x8e\xbf\xf8\xde\x92\xa0\xae"
4831 "\x20\xc4\xf6\xbb\x1f\x38\x19\x0e"
4832 "\xe8\x79\x9c\xa1\x23\xe9\x54\x7e"
4833 "\x37\x2f\xe2\x94\x32\xaf\xa0\x23"
4834 "\x49\xe4\xc0\xb3\xac\x00\x8f\x36"
4835 "\x05\xc4\xa6\x96\xec\x05\x98\x4f"
4836 "\x96\x67\x57\x1f\x20\x86\x1b\x2d"
4837 "\x69\xe4\x29\x93\x66\x5f\xaf\x6b"
4838 "\x88\x26\x2c\x67\x02\x4b\x52\xd0"
4839 "\x83\x7a\x43\x1f\xc0\x71\x15\x25"
4840 "\x77\x65\x08\x60\x11\x76\x4c\x8d"
4841 "\xed\xa9\x27\xc6\xb1\x2a\x2c\x6a"
4842 "\x4a\x97\xf5\xc6\xb7\x70\x42\xd3"
4843 "\x03\xd1\x24\x95\xec\x6d\xab\x38"
4844 "\x72\xce\xe2\x8b\x33\xd7\x51\x09"
4845 "\xdc\x45\xe0\x09\x96\x32\xf3\xc4"
4846 "\x84\xdc\x73\x73\x2d\x1b\x11\x98"
4847 "\xc5\x0e\x69\x28\x94\xc7\xb5\x4d"
4848 "\xc8\x8a\xd0\xaa\x13\x2e\x18\x74"
4849 "\xdd\xd1\x1e\xf3\x90\xe8\xfc\x9a"
4850 "\x72\x4a\x0e\xd1\xe4\xfb\x0d\x96"
4851 "\xd1\x0c\x79\x85\x1b\x1c\xfe\xe1"
4852 "\x62\x8f\x7a\x73\x32\xab\xc8\x18"
4853 "\x69\xe3\x34\x30\xdf\x13\xa6\xe5"
4854 "\xe8\x0e\x67\x7f\x81\x11\xb4\x60"
4855 "\xc7\xbd\x79\x65\x50\xdc\xc4\x5b"
4856 "\xde\x39\xa4\x01\x72\x63\xf3\xd1"
4857 "\x64\x4e\xdf\xfc\x27\x92\x37\x0d"
4858 "\x57\xcd\x11\x4f\x11\x04\x8e\x1d"
4859 "\x16\xf7\xcd\x92\x9a\x99\x30\x14"
4860 "\xf1\x7c\x67\x1b\x1f\x41\x0b\xe8"
4861 "\x32\xe8\xb8\xc1\x4f\x54\x86\x4f"
4862 "\xe5\x79\x81\x73\xcd\x43\x59\x68"
4863 "\x73\x02\x3b\x78\x21\x72\x43\x00"
4864 "\x49\x17\xf7\x00\xaf\x68\x24\x53"
4865 "\x05\x0a\xc3\x33\xe0\x33\x3f\x69"
4866 "\xd2\x84\x2f\x0b\xed\xde\x04\xf4"
4867 "\x11\x94\x13\x69\x51\x09\x28\xde"
4868 "\x57\x5c\xef\xdc\x9a\x49\x1c\x17"
4869 "\x97\xf3\x96\xc1\x7f\x5d\x2e\x7d"
4870 "\x55\xb8\xb3\x02\x09\xb3\x1f\xe7"
4871 "\xc9\x8d\xa3\x36\x34\x8a\x77\x13"
4872 "\x30\x63\x4c\xa5\xcd\xc3\xe0\x7e"
4873 "\x05\xa1\x7b\x0c\xcb\x74\x47\x31"
4874 "\x62\x03\x43\xf1\x87\xb4\xb0\x85"
4875 "\x87\x8e\x4b\x25\xc7\xcf\xae\x4b"
4876 "\x36\x46\x3e\x62\xbc\x6f\xeb\x5f"
4877 "\x73\xac\xe6\x07\xee\xc1\xa1\xd6"
4878 "\xc4\xab\xc9\xd6\x89\x45\xe1\xf1"
4879 "\x04\x4e\x1a\x6f\xbb\x4f\x3a\xa3"
4880 "\xa0\xcb\xa3\x0a\xd8\x71\x35\x55"
4881 "\xe4\xbc\x2e\x04\x06\xe6\xff\x5b"
4882 "\x1c\xc0\x11\x7c\xc5\x17\xf3\x38"
4883 "\xcf\xe9\xba\x0f\x0e\xef\x02\xc2"
4884 "\x8d\xc6\xbc\x4b\x67\x20\x95\xd7"
4885 "\x2c\x45\x5b\x86\x44\x8c\x6f\x2e"
4886 "\x7e\x9f\x1c\x77\xba\x6b\x0e\xa3"
4887 "\x69\xdc\xab\x24\x57\x60\x47\xc1"
4888 "\xd1\xa5\x9d\x23\xe6\xb1\x37\xfe"
4889 "\x93\xd2\x4c\x46\xf9\x0c\xc6\xfb"
4890 "\xd6\x9d\x99\x69\xab\x7a\x07\x0c"
4891 "\x65\xe7\xc4\x08\x96\xe2\xa5\x01"
4892 "\x3f\x46\x07\x05\x7e\xe8\x9a\x90"
4893 "\x50\xdc\xe9\x7a\xea\xa1\x39\x6e"
4894 "\x66\xe4\x6f\xa5\x5f\xb2\xd9\x5b"
4895 "\xf5\xdb\x2a\x32\xf0\x11\x6f\x7c"
4896 "\x26\x10\x8f\x3d\x80\xe9\x58\xf7"
4897 "\xe0\xa8\x57\xf8\xdb\x0e\xce\x99"
4898 "\x63\x19\x3d\xd5\xec\x1b\x77\x69"
4899 "\x98\xf6\xe4\x5f\x67\x17\x4b\x09"
4900 "\x85\x62\x82\x70\x18\xe2\x9a\x78"
4901 "\xe2\x62\xbd\xb4\xf1\x42\xc6\xfb"
4902 "\x08\xd0\xbd\xeb\x4e\x09\xf2\xc8"
4903 "\x1e\xdc\x3d\x32\x21\x56\x9c\x4f"
4904 "\x35\xf3\x61\x06\x72\x84\xc4\x32"
4905 "\xf2\xf1\xfa\x0b\x2f\xc3\xdb\x02"
4906 "\x04\xc2\xde\x57\x64\x60\x8d\xcf"
4907 "\xcb\x86\x5d\x97\x3e\xb1\x9c\x01"
4908 "\xd6\x28\x8f\x99\xbc\x46\xeb\x05"
4909 "\xaf\x7e\xb8\x21\x2a\x56\x85\x1c"
4910 "\xb3\x71\xa0\xde\xca\x96\xf1\x78"
4911 "\x49\xa2\x99\x81\x80\x5c\x01\xf5"
4912 "\xa0\xa2\x56\x63\xe2\x70\x07\xa5"
4913 "\x95\xd6\x85\xeb\x36\x9e\xa9\x51"
4914 "\x66\x56\x5f\x1d\x02\x19\xe2\xf6"
4915 "\x4f\x73\x38\x09\x75\x64\x48\xe0"
4916 "\xf1\x7e\x0e\xe8\x9d\xf9\xed\x94"
4917 "\xfe\x16\x26\x62\x49\x74\xf4\xb0"
4918 "\xd4\xa9\x6c\xb0\xfd\x53\xe9\x81"
4919 "\xe0\x7a\xbf\xcf\xb5\xc4\x01\x81"
4920 "\x79\x99\x77\x01\x3b\xe9\xa2\xb6"
4921 "\xe6\x6a\x8a\x9e\x56\x1c\x8d\x1e"
4922 "\x8f\x06\x55\x2c\x6c\xdc\x92\x87"
4923 "\x64\x3b\x4b\x19\xa1\x13\x64\x1d"
4924 "\x4a\xe9\xc0\x00\xb8\x95\xef\x6b"
4925 "\x1a\x86\x6d\x37\x52\x02\xc2\xe0"
4926 "\xc8\xbb\x42\x0c\x02\x21\x4a\xc9"
4927 "\xef\xa0\x54\xe4\x5e\x16\x53\x81"
4928 "\x70\x62\x10\xaf\xde\xb8\xb5\xd3"
4929 "\xe8\x5e\x6c\xc3\x8a\x3e\x18\x07"
4930 "\xf2\x2f\x7d\xa7\xe1\x3d\x4e\xb4"
4931 "\x26\xa7\xa3\x93\x86\xb2\x04\x1e"
4932 "\x53\x5d\x86\xd6\xde\x65\xca\xe3"
4933 "\x4e\xc1\xcf\xef\xc8\x70\x1b\x83"
4934 "\x13\xdd\x18\x8b\x0d\x76\xd2\xf6"
4935 "\x37\x7a\x93\x7a\x50\x11\x9f\x96"
4936 "\x86\x25\xfd\xac\xdc\xbe\x18\x93"
4937 "\x19\x6b\xec\x58\x4f\xb9\x75\xa7"
4938 "\xdd\x3f\x2f\xec\xc8\x5a\x84\xab"
4939 "\xd5\xe4\x8a\x07\xf6\x4d\x23\xd6"
4940 "\x03\xfb\x03\x6a\xea\x66\xbf\xd4"
4941 "\xb1\x34\xfb\x78\xe9\x55\xdc\x7c"
4942 "\x3d\x9c\xe5\x9a\xac\xc3\x7a\x80"
4943 "\x24\x6d\xa0\xef\x25\x7c\xb7\xea"
4944 "\xce\x4d\x5f\x18\x60\xce\x87\x22"
4945 "\x66\x2f\xd5\xdd\xdd\x02\x21\x75"
4946 "\x82\xa0\x1f\x58\xc6\xd3\x62\xf7"
4947 "\x32\xd8\xaf\x1e\x07\x77\x51\x96"
4948 "\xd5\x6b\x1e\x7e\x80\x02\xe8\x67"
4949 "\xea\x17\x0b\x10\xd2\x3f\x28\x25"
4950 "\x4f\x05\x77\x02\x14\x69\xf0\x2c"
4951 "\xbe\x0c\xf1\x74\x30\xd1\xb9\x9b"
4952 "\xfc\x8c\xbb\x04\x16\xd9\xba\xc3"
4953 "\xbc\x91\x8a\xc4\x30\xa4\xb0\x12"
4954 "\x4c\x21\x87\xcb\xc9\x1d\x16\x96"
4955 "\x07\x6f\x23\x54\xb9\x6f\x79\xe5"
4956 "\x64\xc0\x64\xda\xb1\xae\xdd\x60"
4957 "\x6c\x1a\x9d\xd3\x04\x8e\x45\xb0"
4958 "\x92\x61\xd0\x48\x81\xed\x5e\x1d"
4959 "\xa0\xc9\xa4\x33\xc7\x13\x51\x5d"
4960 "\x7f\x83\x73\xb6\x70\x18\x65\x3e"
4961 "\x2f\x0e\x7a\x12\x39\x98\xab\xd8"
4962 "\x7e\x6f\xa3\xd1\xba\x56\xad\xbd"
4963 "\xf0\x03\x01\x1c\x85\x35\x9f\xeb"
4964 "\x19\x63\xa1\xaf\xfe\x2d\x35\x50"
4965 "\x39\xa0\x65\x7c\x95\x7e\x6b\xfe"
4966 "\xc1\xac\x07\x7c\x98\x4f\xbe\x57"
4967 "\xa7\x22\xec\xe2\x7e\x29\x09\x53"
4968 "\xe8\xbf\xb4\x7e\x3f\x8f\xfc\x14"
4969 "\xce\x54\xf9\x18\x58\xb5\xff\x44"
4970 "\x05\x9d\xce\x1b\xb6\x82\x23\xc8"
4971 "\x2e\xbc\x69\xbb\x4a\x29\x0f\x65"
4972 "\x94\xf0\x63\x06\x0e\xef\x8c\xbd"
4973 "\xff\xfd\xb0\x21\x6e\x57\x05\x75"
4974 "\xda\xd5\xc4\xeb\x8d\x32\xf7\x50"
4975 "\xd3\x6f\x22\xed\x5f\x8e\xa2\x5b"
4976 "\x80\x8c\xc8\x78\x40\x24\x4b\x89"
4977 "\x30\xce\x7a\x97\x0e\xc4\xaf\xef"
4978 "\x9b\xb4\xcd\x66\x74\x14\x04\x2b"
4979 "\xf7\xce\x0b\x1c\x6e\xc2\x78\x8c"
4980 "\xca\xc5\xd0\x1c\x95\x4a\x91\x2d"
4981 "\xa7\x20\xeb\x86\x52\xb7\x67\xd8"
4982 "\x0c\xd6\x04\x14\xde\x51\x74\x75"
4983 "\xe7\x11\xb4\x87\xa3\x3d\x2d\xad"
4984 "\x4f\xef\xa0\x0f\x70\x00\x6d\x13"
4985 "\x19\x1d\x41\x50\xe9\xd8\xf0\x32"
4986 "\x71\xbc\xd3\x11\xf2\xac\xbe\xaf"
4987 "\x75\x46\x65\x4e\x07\x34\x37\xa3"
4988 "\x89\xfe\x75\xd4\x70\x4c\xc6\x3f"
4989 "\x69\x24\x0e\x38\x67\x43\x8c\xde"
4990 "\x06\xb5\xb8\xe7\xc4\xf0\x41\x8f"
4991 "\xf0\xbd\x2f\x0b\xb9\x18\xf8\xde"
4992 "\x64\xb1\xdb\xee\x00\x50\x77\xe1"
4993 "\xc7\xff\xa6\xfa\xdd\x70\xf4\xe3"
4994 "\x93\xe9\x77\x35\x3d\x4b\x2f\x2b"
4995 "\x6d\x55\xf0\xfc\x88\x54\x4e\x89"
4996 "\xc1\x8a\x23\x31\x2d\x14\x2a\xb8"
4997 "\x1b\x15\xdd\x9e\x6e\x7b\xda\x05"
4998 "\x91\x7d\x62\x64\x96\x72\xde\xfc"
4999 "\xc1\xec\xf0\x23\x51\x6f\xdb\x5b"
5000 "\x1d\x08\x57\xce\x09\xb8\xf6\xcd"
5001 "\x8d\x95\xf2\x20\xbf\x0f\x20\x57"
5002 "\x98\x81\x84\x4f\x15\x5c\x76\xe7"
5003 "\x3e\x0a\x3a\x6c\xc4\x8a\xbe\x78"
5004 "\x74\x77\xc3\x09\x4b\x5d\x48\xe4"
5005 "\xc8\xcb\x0b\xea\x17\x28\xcf\xcf"
5006 "\x31\x32\x44\xa4\xe5\x0e\x1a\x98"
5007 "\x94\xc4\xf0\xff\xae\x3e\x44\xe8"
5008 "\xa5\xb3\xb5\x37\x2f\xe8\xaf\x6f"
5009 "\x28\xc1\x37\x5f\x31\xd2\xb9\x33"
5010 "\xb1\xb2\x52\x94\x75\x2c\x29\x59"
5011 "\x06\xc2\x25\xe8\x71\x65\x4e\xed"
5012 "\xc0\x9c\xb1\xbb\x25\xdc\x6c\xe7"
5013 "\x4b\xa5\x7a\x54\x7a\x60\xff\x7a"
5014 "\xe0\x50\x40\x96\x35\x63\xe4\x0b"
5015 "\x76\xbd\xa4\x65\x00\x1b\x57\x88"
5016 "\xae\xed\x39\x88\x42\x11\x3c\xed"
5017 "\x85\x67\x7d\xb9\x68\x82\xe9\x43"
5018 "\x3c\x47\x53\xfa\xe8\xf8\x9f\x1f"
5019 "\x9f\xef\x0f\xf7\x30\xd9\x30\x0e"
5020 "\xb9\x9f\x69\x18\x2f\x7e\xf8\xf8"
5021 "\xf8\x8c\x0f\xd4\x02\x4d\xea\xcd"
5022 "\x0a\x9c\x6f\x71\x6d\x5a\x4c\x60"
5023 "\xce\x20\x56\x32\xc6\xc5\x99\x1f"
5024 "\x09\xe6\x4e\x18\x1a\x15\x13\xa8"
5025 "\x7d\xb1\x6b\xc0\xb2\x6d\xf8\x26"
5026 "\x66\xf8\x3d\x18\x74\x70\x66\x7a"
5027 "\x34\x17\xde\xba\x47\xf1\x06\x18"
5028 "\xcb\xaf\xeb\x4a\x1e\x8f\xa7\x77"
5029 "\xe0\x3b\x78\x62\x66\xc9\x10\xea"
5030 "\x1f\xb7\x29\x0a\x45\xa1\x1d\x1e"
5031 "\x1d\xe2\x65\x61\x50\x9c\xd7\x05"
5032 "\xf2\x0b\x5b\x12\x61\x02\xc8\xe5"
5033 "\x63\x4f\x20\x0c\x07\x17\x33\x5e"
5034 "\x03\x9a\x53\x0f\x2e\x55\xfe\x50"
5035 "\x43\x7d\xd0\xb6\x7e\x5a\xda\xae"
5036 "\x58\xef\x15\xa9\x83\xd9\x46\xb1"
5037 "\x42\xaa\xf5\x02\x6c\xce\x92\x06"
5038 "\x1b\xdb\x66\x45\x91\x79\xc2\x2d"
5039 "\xe6\x53\xd3\x14\xfd\xbb\x44\x63"
5040 "\xc6\xd7\x3d\x7a\x0c\x75\x78\x9d"
5041 "\x5c\xa6\x39\xb3\xe5\x63\xca\x8b"
5042 "\xfe\xd3\xef\x60\x83\xf6\x8e\x70"
5043 "\xb6\x67\xc7\x77\xed\x23\xef\x4c"
5044 "\xf0\xed\x2d\x07\x59\x6f\xc1\x01"
5045 "\x34\x37\x08\xab\xd9\x1f\x09\xb1"
5046 "\xce\x5b\x17\xff\x74\xf8\x9c\xd5"
5047 "\x2c\x56\x39\x79\x0f\x69\x44\x75"
5048 "\x58\x27\x01\xc4\xbf\xa7\xa1\x1d"
5049 "\x90\x17\x77\x86\x5a\x3f\xd9\xd1"
5050 "\x0e\xa0\x10\xf8\xec\x1e\xa5\x7f"
5051 "\x5e\x36\xd1\xe3\x04\x2c\x70\xf7"
5052 "\x8e\xc0\x98\x2f\x6c\x94\x2b\x41"
5053 "\xb7\x60\x00\xb7\x2e\xb8\x02\x8d"
5054 "\xb8\xb0\xd3\x86\xba\x1d\xd7\x90"
5055 "\xd6\xb6\xe1\xfc\xd7\xd8\x28\x06"
5056 "\x63\x9b\xce\x61\x24\x79\xc0\x70"
5057 "\x52\xd0\xb6\xd4\x28\x95\x24\x87"
5058 "\x03\x1f\xb7\x9a\xda\xa3\xfb\x52"
5059 "\x5b\x68\xe7\x4c\x8c\x24\xe1\x42"
5060 "\xf7\xd5\xfd\xad\x06\x32\x9f\xba"
5061 "\xc1\xfc\xdd\xc6\xfc\xfc\xb3\x38"
5062 "\x74\x56\x58\x40\x02\x37\x52\x2c"
5063 "\x55\xcc\xb3\x9e\x7a\xe9\xd4\x38"
5064 "\x41\x5e\x0c\x35\xe2\x11\xd1\x13"
5065 "\xf8\xb7\x8d\x72\x6b\x22\x2a\xb0"
5066 "\xdb\x08\xba\x35\xb9\x3f\xc8\xd3"
5067 "\x24\x90\xec\x58\xd2\x09\xc7\x2d"
5068 "\xed\x38\x80\x36\x72\x43\x27\x49"
5069 "\x4a\x80\x8a\xa2\xe8\xd3\xda\x30"
5070 "\x7d\xb6\x82\x37\x86\x92\x86\x3e"
5071 "\x08\xb2\x28\x5a\x55\x44\x24\x7d"
5072 "\x40\x48\x8a\xb6\x89\x58\x08\xa0"
5073 "\xd6\x6d\x3a\x17\xbf\xf6\x54\xa2"
5074 "\xf5\xd3\x8c\x0f\x78\x12\x57\x8b"
5075 "\xd5\xc2\xfd\x58\x5b\x7f\x38\xe3"
5076 "\xcc\xb7\x7c\x48\xb3\x20\xe8\x81"
5077 "\x14\x32\x45\x05\xe0\xdb\x9f\x75"
5078 "\x85\xb4\x6a\xfc\x95\xe3\x54\x22"
5079 "\x12\xee\x30\xfe\xd8\x30\xef\x34"
5080 "\x50\xab\x46\x30\x98\x2f\xb7\xc0"
5081 "\x15\xa2\x83\xb6\xf2\x06\x21\xa2"
5082 "\xc3\x26\x37\x14\xd1\x4d\xb5\x10"
5083 "\x52\x76\x4d\x6a\xee\xb5\x2b\x15"
5084 "\xb7\xf9\x51\xe8\x2a\xaf\xc7\xfa"
5085 "\x77\xaf\xb0\x05\x4d\xd1\x68\x8e"
5086 "\x74\x05\x9f\x9d\x93\xa5\x3e\x7f"
5087 "\x4e\x5f\x9d\xcb\x09\xc7\x83\xe3"
5088 "\x02\x9d\x27\x1f\xef\x85\x05\x8d"
5089 "\xec\x55\x88\x0f\x0d\x7c\x4c\xe8"
5090 "\xa1\x75\xa0\xd8\x06\x47\x14\xef"
5091 "\xaa\x61\xcf\x26\x15\xad\xd8\xa3"
5092 "\xaa\x75\xf2\x78\x4a\x5a\x61\xdf"
5093 "\x8b\xc7\x04\xbc\xb2\x32\xd2\x7e"
5094 "\x42\xee\xb4\x2f\x51\xff\x7b\x2e"
5095 "\xd3\x02\xe8\xdc\x5d\x0d\x50\xdc"
5096 "\xae\xb7\x46\xf9\xa8\xe6\xd0\x16"
5097 "\xcc\xe6\x2c\x81\xc7\xad\xe9\xf0"
5098 "\x05\x72\x6d\x3d\x0a\x7a\xa9\x02"
5099 "\xac\x82\x93\x6e\xb6\x1c\x28\xfc"
5100 "\x44\x12\xfb\x73\x77\xd4\x13\x39"
5101 "\x29\x88\x8a\xf3\x5c\xa6\x36\xa0"
5102 "\x2a\xed\x7e\xb1\x1d\xd6\x4c\x6b"
5103 "\x41\x01\x18\x5d\x5d\x07\x97\xa6"
5104 "\x4b\xef\x31\x18\xea\xac\xb1\x84"
5105 "\x21\xed\xda\x86",
5106 .rlen = 4100,
5107 .np = 2,
5108 .tap = { 4064, 36 },
5109 },
5110};
5111
5112static struct cipher_testvec aes_ctr_dec_tv_template[] = {
5113 { /* From RFC 3686 */
5114 .key = "\xae\x68\x52\xf8\x12\x10\x67\xcc"
5115 "\x4b\xf7\xa5\x76\x55\x77\xf3\x9e"
5116 "\x00\x00\x00\x30",
5117 .klen = 20,
5118 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
5119 .input = "\xe4\x09\x5d\x4f\xb7\xa7\xb3\x79"
5120 "\x2d\x61\x75\xa3\x26\x13\x11\xb8",
5121 .ilen = 16,
5122 .result = "Single block msg",
5123 .rlen = 16,
5124 }, {
5125 .key = "\x7e\x24\x06\x78\x17\xfa\xe0\xd7"
5126 "\x43\xd6\xce\x1f\x32\x53\x91\x63"
5127 "\x00\x6c\xb6\xdb",
5128 .klen = 20,
5129 .iv = "\xc0\x54\x3b\x59\xda\x48\xd9\x0b",
5130 .input = "\x51\x04\xa1\x06\x16\x8a\x72\xd9"
5131 "\x79\x0d\x41\xee\x8e\xda\xd3\x88"
5132 "\xeb\x2e\x1e\xfc\x46\xda\x57\xc8"
5133 "\xfc\xe6\x30\xdf\x91\x41\xbe\x28",
5134 .ilen = 32,
5135 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5136 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5137 "\x10\x11\x12\x13\x14\x15\x16\x17"
5138 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5139 .rlen = 32,
5140 }, {
5141 .key = "\x16\xaf\x5b\x14\x5f\xc9\xf5\x79"
5142 "\xc1\x75\xf9\x3e\x3b\xfb\x0e\xed"
5143 "\x86\x3d\x06\xcc\xfd\xb7\x85\x15"
5144 "\x00\x00\x00\x48",
5145 .klen = 28,
5146 .iv = "\x36\x73\x3c\x14\x7d\x6d\x93\xcb",
5147 .input = "\x4b\x55\x38\x4f\xe2\x59\xc9\xc8"
5148 "\x4e\x79\x35\xa0\x03\xcb\xe9\x28",
5149 .ilen = 16,
5150 .result = "Single block msg",
5151 .rlen = 16,
5152 }, {
5153 .key = "\x7c\x5c\xb2\x40\x1b\x3d\xc3\x3c"
5154 "\x19\xe7\x34\x08\x19\xe0\xf6\x9c"
5155 "\x67\x8c\x3d\xb8\xe6\xf6\xa9\x1a"
5156 "\x00\x96\xb0\x3b",
5157 .klen = 28,
5158 .iv = "\x02\x0c\x6e\xad\xc2\xcb\x50\x0d",
5159 .input = "\x45\x32\x43\xfc\x60\x9b\x23\x32"
5160 "\x7e\xdf\xaa\xfa\x71\x31\xcd\x9f"
5161 "\x84\x90\x70\x1c\x5a\xd4\xa7\x9c"
5162 "\xfc\x1f\xe0\xff\x42\xf4\xfb\x00",
5163 .ilen = 32,
5164 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5165 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5166 "\x10\x11\x12\x13\x14\x15\x16\x17"
5167 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5168 .rlen = 32,
5169 }, {
5170 .key = "\x77\x6b\xef\xf2\x85\x1d\xb0\x6f"
5171 "\x4c\x8a\x05\x42\xc8\x69\x6f\x6c"
5172 "\x6a\x81\xaf\x1e\xec\x96\xb4\xd3"
5173 "\x7f\xc1\xd6\x89\xe6\xc1\xc1\x04"
5174 "\x00\x00\x00\x60",
5175 .klen = 36,
5176 .iv = "\xdb\x56\x72\xc9\x7a\xa8\xf0\xb2",
5177 .input = "\x14\x5a\xd0\x1d\xbf\x82\x4e\xc7"
5178 "\x56\x08\x63\xdc\x71\xe3\xe0\xc0",
5179 .ilen = 16,
5180 .result = "Single block msg",
5181 .rlen = 16,
5182 }, {
5183 .key = "\xf6\xd6\x6d\x6b\xd5\x2d\x59\xbb"
5184 "\x07\x96\x36\x58\x79\xef\xf8\x86"
5185 "\xc6\x6d\xd5\x1a\x5b\x6a\x99\x74"
5186 "\x4b\x50\x59\x0c\x87\xa2\x38\x84"
5187 "\x00\xfa\xac\x24",
5188 .klen = 36,
5189 .iv = "\xc1\x58\x5e\xf1\x5a\x43\xd8\x75",
5190 .input = "\xf0\x5e\x23\x1b\x38\x94\x61\x2c"
5191 "\x49\xee\x00\x0b\x80\x4e\xb2\xa9"
5192 "\xb8\x30\x6b\x50\x8f\x83\x9d\x6a"
5193 "\x55\x30\x83\x1d\x93\x44\xaf\x1c",
5194 .ilen = 32,
5195 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
5196 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5197 "\x10\x11\x12\x13\x14\x15\x16\x17"
5198 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
5199 .rlen = 32,
5200 },
5201};
5202
5203static struct aead_testvec aes_gcm_enc_tv_template[] = {
5204 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
5205 .key = zeroed_string,
5206 .klen = 16,
5207 .result = "\x58\xe2\xfc\xce\xfa\x7e\x30\x61"
5208 "\x36\x7f\x1d\x57\xa4\xe7\x45\x5a",
5209 .rlen = 16,
5210 }, {
5211 .key = zeroed_string,
5212 .klen = 16,
5213 .input = zeroed_string,
5214 .ilen = 16,
5215 .result = "\x03\x88\xda\xce\x60\xb6\xa3\x92"
5216 "\xf3\x28\xc2\xb9\x71\xb2\xfe\x78"
5217 "\xab\x6e\x47\xd4\x2c\xec\x13\xbd"
5218 "\xf5\x3a\x67\xb2\x12\x57\xbd\xdf",
5219 .rlen = 32,
5220 }, {
5221 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5222 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5223 .klen = 16,
5224 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5225 "\xde\xca\xf8\x88",
5226 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5227 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5228 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5229 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5230 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5231 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5232 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5233 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5234 .ilen = 64,
5235 .result = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5236 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5237 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5238 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5239 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5240 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5241 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5242 "\x3d\x58\xe0\x91\x47\x3f\x59\x85"
5243 "\x4d\x5c\x2a\xf3\x27\xcd\x64\xa6"
5244 "\x2c\xf3\x5a\xbd\x2b\xa6\xfa\xb4",
5245 .rlen = 80,
5246 }, {
5247 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5248 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5249 .klen = 16,
5250 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5251 "\xde\xca\xf8\x88",
5252 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5253 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5254 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5255 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5256 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5257 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5258 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5259 "\xba\x63\x7b\x39",
5260 .ilen = 60,
5261 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5262 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5263 "\xab\xad\xda\xd2",
5264 .alen = 20,
5265 .result = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5266 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5267 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5268 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5269 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5270 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5271 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5272 "\x3d\x58\xe0\x91"
5273 "\x5b\xc9\x4f\xbc\x32\x21\xa5\xdb"
5274 "\x94\xfa\xe9\x5a\xe7\x12\x1a\x47",
5275 .rlen = 76,
5276 }, {
5277 .key = zeroed_string,
5278 .klen = 24,
5279 .result = "\xcd\x33\xb2\x8a\xc7\x73\xf7\x4b"
5280 "\xa0\x0e\xd1\xf3\x12\x57\x24\x35",
5281 .rlen = 16,
5282 }, {
5283 .key = zeroed_string,
5284 .klen = 24,
5285 .input = zeroed_string,
5286 .ilen = 16,
5287 .result = "\x98\xe7\x24\x7c\x07\xf0\xfe\x41"
5288 "\x1c\x26\x7e\x43\x84\xb0\xf6\x00"
5289 "\x2f\xf5\x8d\x80\x03\x39\x27\xab"
5290 "\x8e\xf4\xd4\x58\x75\x14\xf0\xfb",
5291 .rlen = 32,
5292 }, {
5293 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5294 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5295 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5296 .klen = 24,
5297 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5298 "\xde\xca\xf8\x88",
5299 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5300 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5301 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5302 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5303 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5304 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5305 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5306 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5307 .ilen = 64,
5308 .result = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5309 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5310 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5311 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5312 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5313 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5314 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5315 "\xcc\xda\x27\x10\xac\xad\xe2\x56"
5316 "\x99\x24\xa7\xc8\x58\x73\x36\xbf"
5317 "\xb1\x18\x02\x4d\xb8\x67\x4a\x14",
5318 .rlen = 80,
5319 }, {
5320 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5321 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5322 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5323 .klen = 24,
5324 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5325 "\xde\xca\xf8\x88",
5326 .input = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5327 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5328 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5329 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5330 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5331 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5332 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5333 "\xba\x63\x7b\x39",
5334 .ilen = 60,
5335 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5336 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5337 "\xab\xad\xda\xd2",
5338 .alen = 20,
5339 .result = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5340 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5341 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5342 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5343 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5344 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5345 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5346 "\xcc\xda\x27\x10"
5347 "\x25\x19\x49\x8e\x80\xf1\x47\x8f"
5348 "\x37\xba\x55\xbd\x6d\x27\x61\x8c",
5349 .rlen = 76,
5350 .np = 2,
5351 .tap = { 32, 28 },
5352 .anp = 2,
5353 .atap = { 8, 12 }
5354 }, {
5355 .key = zeroed_string,
5356 .klen = 32,
5357 .result = "\x53\x0f\x8a\xfb\xc7\x45\x36\xb9"
5358 "\xa9\x63\xb4\xf1\xc4\xcb\x73\x8b",
5359 .rlen = 16,
5360 }
5361};
5362
5363static struct aead_testvec aes_gcm_dec_tv_template[] = {
5364 { /* From McGrew & Viega - http://citeseer.ist.psu.edu/656989.html */
5365 .key = zeroed_string,
5366 .klen = 32,
5367 .input = "\xce\xa7\x40\x3d\x4d\x60\x6b\x6e"
5368 "\x07\x4e\xc5\xd3\xba\xf3\x9d\x18"
5369 "\xd0\xd1\xc8\xa7\x99\x99\x6b\xf0"
5370 "\x26\x5b\x98\xb5\xd4\x8a\xb9\x19",
5371 .ilen = 32,
5372 .result = zeroed_string,
5373 .rlen = 16,
5374 }, {
5375 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5376 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5377 "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5378 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5379 .klen = 32,
5380 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5381 "\xde\xca\xf8\x88",
5382 .input = "\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
5383 "\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
5384 "\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
5385 "\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
5386 "\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
5387 "\xa7\xb0\x8b\x10\x56\x82\x88\x38"
5388 "\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
5389 "\xbc\xc9\xf6\x62\x89\x80\x15\xad"
5390 "\xb0\x94\xda\xc5\xd9\x34\x71\xbd"
5391 "\xec\x1a\x50\x22\x70\xe3\xcc\x6c",
5392 .ilen = 80,
5393 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5394 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5395 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5396 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5397 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5398 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5399 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5400 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5401 .rlen = 64,
5402 }, {
5403 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5404 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5405 "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5406 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5407 .klen = 32,
5408 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5409 "\xde\xca\xf8\x88",
5410 .input = "\x52\x2d\xc1\xf0\x99\x56\x7d\x07"
5411 "\xf4\x7f\x37\xa3\x2a\x84\x42\x7d"
5412 "\x64\x3a\x8c\xdc\xbf\xe5\xc0\xc9"
5413 "\x75\x98\xa2\xbd\x25\x55\xd1\xaa"
5414 "\x8c\xb0\x8e\x48\x59\x0d\xbb\x3d"
5415 "\xa7\xb0\x8b\x10\x56\x82\x88\x38"
5416 "\xc5\xf6\x1e\x63\x93\xba\x7a\x0a"
5417 "\xbc\xc9\xf6\x62"
5418 "\x76\xfc\x6e\xce\x0f\x4e\x17\x68"
5419 "\xcd\xdf\x88\x53\xbb\x2d\x55\x1b",
5420 .ilen = 76,
5421 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5422 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5423 "\xab\xad\xda\xd2",
5424 .alen = 20,
5425 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5426 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5427 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5428 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5429 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5430 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5431 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5432 "\xba\x63\x7b\x39",
5433 .rlen = 60,
5434 .np = 2,
5435 .tap = { 48, 28 },
5436 .anp = 3,
5437 .atap = { 8, 8, 4 }
5438 }, {
5439 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5440 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5441 .klen = 16,
5442 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5443 "\xde\xca\xf8\x88",
5444 .input = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5445 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5446 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5447 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5448 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5449 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5450 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5451 "\x3d\x58\xe0\x91\x47\x3f\x59\x85"
5452 "\x4d\x5c\x2a\xf3\x27\xcd\x64\xa6"
5453 "\x2c\xf3\x5a\xbd\x2b\xa6\xfa\xb4",
5454 .ilen = 80,
5455 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5456 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5457 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5458 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5459 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5460 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5461 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5462 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5463 .rlen = 64,
5464 }, {
5465 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5466 "\x6d\x6a\x8f\x94\x67\x30\x83\x08",
5467 .klen = 16,
5468 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5469 "\xde\xca\xf8\x88",
5470 .input = "\x42\x83\x1e\xc2\x21\x77\x74\x24"
5471 "\x4b\x72\x21\xb7\x84\xd0\xd4\x9c"
5472 "\xe3\xaa\x21\x2f\x2c\x02\xa4\xe0"
5473 "\x35\xc1\x7e\x23\x29\xac\xa1\x2e"
5474 "\x21\xd5\x14\xb2\x54\x66\x93\x1c"
5475 "\x7d\x8f\x6a\x5a\xac\x84\xaa\x05"
5476 "\x1b\xa3\x0b\x39\x6a\x0a\xac\x97"
5477 "\x3d\x58\xe0\x91"
5478 "\x5b\xc9\x4f\xbc\x32\x21\xa5\xdb"
5479 "\x94\xfa\xe9\x5a\xe7\x12\x1a\x47",
5480 .ilen = 76,
5481 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5482 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5483 "\xab\xad\xda\xd2",
5484 .alen = 20,
5485 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5486 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5487 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5488 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5489 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5490 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5491 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5492 "\xba\x63\x7b\x39",
5493 .rlen = 60,
5494 }, {
5495 .key = zeroed_string,
5496 .klen = 24,
5497 .input = "\x98\xe7\x24\x7c\x07\xf0\xfe\x41"
5498 "\x1c\x26\x7e\x43\x84\xb0\xf6\x00"
5499 "\x2f\xf5\x8d\x80\x03\x39\x27\xab"
5500 "\x8e\xf4\xd4\x58\x75\x14\xf0\xfb",
5501 .ilen = 32,
5502 .result = zeroed_string,
5503 .rlen = 16,
5504 }, {
5505 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5506 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5507 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5508 .klen = 24,
5509 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5510 "\xde\xca\xf8\x88",
5511 .input = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5512 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5513 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5514 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5515 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5516 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5517 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5518 "\xcc\xda\x27\x10\xac\xad\xe2\x56"
5519 "\x99\x24\xa7\xc8\x58\x73\x36\xbf"
5520 "\xb1\x18\x02\x4d\xb8\x67\x4a\x14",
5521 .ilen = 80,
5522 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5523 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5524 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5525 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5526 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5527 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5528 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5529 "\xba\x63\x7b\x39\x1a\xaf\xd2\x55",
5530 .rlen = 64,
5531 }, {
5532 .key = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
5533 "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
5534 "\xfe\xff\xe9\x92\x86\x65\x73\x1c",
5535 .klen = 24,
5536 .iv = "\xca\xfe\xba\xbe\xfa\xce\xdb\xad"
5537 "\xde\xca\xf8\x88",
5538 .input = "\x39\x80\xca\x0b\x3c\x00\xe8\x41"
5539 "\xeb\x06\xfa\xc4\x87\x2a\x27\x57"
5540 "\x85\x9e\x1c\xea\xa6\xef\xd9\x84"
5541 "\x62\x85\x93\xb4\x0c\xa1\xe1\x9c"
5542 "\x7d\x77\x3d\x00\xc1\x44\xc5\x25"
5543 "\xac\x61\x9d\x18\xc8\x4a\x3f\x47"
5544 "\x18\xe2\x44\x8b\x2f\xe3\x24\xd9"
5545 "\xcc\xda\x27\x10"
5546 "\x25\x19\x49\x8e\x80\xf1\x47\x8f"
5547 "\x37\xba\x55\xbd\x6d\x27\x61\x8c",
5548 .ilen = 76,
5549 .assoc = "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5550 "\xfe\xed\xfa\xce\xde\xad\xbe\xef"
5551 "\xab\xad\xda\xd2",
5552 .alen = 20,
5553 .result = "\xd9\x31\x32\x25\xf8\x84\x06\xe5"
5554 "\xa5\x59\x09\xc5\xaf\xf5\x26\x9a"
5555 "\x86\xa7\xa9\x53\x15\x34\xf7\xda"
5556 "\x2e\x4c\x30\x3d\x8a\x31\x8a\x72"
5557 "\x1c\x3c\x0c\x95\x95\x68\x09\x53"
5558 "\x2f\xcf\x0e\x24\x49\xa6\xb5\x25"
5559 "\xb1\x6a\xed\xf5\xaa\x0d\xe6\x57"
5560 "\xba\x63\x7b\x39",
5561 .rlen = 60,
5562 }
5563};
5564
5565static struct aead_testvec aes_ccm_enc_tv_template[] = {
5566 { /* From RFC 3610 */
5567 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5568 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5569 .klen = 16,
5570 .iv = "\x01\x00\x00\x00\x03\x02\x01\x00"
5571 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5572 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5573 .alen = 8,
5574 .input = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5575 "\x10\x11\x12\x13\x14\x15\x16\x17"
5576 "\x18\x19\x1a\x1b\x1c\x1d\x1e",
5577 .ilen = 23,
5578 .result = "\x58\x8c\x97\x9a\x61\xc6\x63\xd2"
5579 "\xf0\x66\xd0\xc2\xc0\xf9\x89\x80"
5580 "\x6d\x5f\x6b\x61\xda\xc3\x84\x17"
5581 "\xe8\xd1\x2c\xfd\xf9\x26\xe0",
5582 .rlen = 31,
5583 }, {
5584 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5585 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5586 .klen = 16,
5587 .iv = "\x01\x00\x00\x00\x07\x06\x05\x04"
5588 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5589 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5590 "\x08\x09\x0a\x0b",
5591 .alen = 12,
5592 .input = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5593 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5594 "\x1c\x1d\x1e\x1f",
5595 .ilen = 20,
5596 .result = "\xdc\xf1\xfb\x7b\x5d\x9e\x23\xfb"
5597 "\x9d\x4e\x13\x12\x53\x65\x8a\xd8"
5598 "\x6e\xbd\xca\x3e\x51\xe8\x3f\x07"
5599 "\x7d\x9c\x2d\x93",
5600 .rlen = 28,
5601 }, {
5602 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5603 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5604 .klen = 16,
5605 .iv = "\x01\x00\x00\x00\x0b\x0a\x09\x08"
5606 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5607 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5608 .alen = 8,
5609 .input = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5610 "\x10\x11\x12\x13\x14\x15\x16\x17"
5611 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
5612 "\x20",
5613 .ilen = 25,
5614 .result = "\x82\x53\x1a\x60\xcc\x24\x94\x5a"
5615 "\x4b\x82\x79\x18\x1a\xb5\xc8\x4d"
5616 "\xf2\x1c\xe7\xf9\xb7\x3f\x42\xe1"
5617 "\x97\xea\x9c\x07\xe5\x6b\x5e\xb1"
5618 "\x7e\x5f\x4e",
5619 .rlen = 35,
5620 }, {
5621 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5622 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5623 .klen = 16,
5624 .iv = "\x01\x00\x00\x00\x0c\x0b\x0a\x09"
5625 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5626 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5627 "\x08\x09\x0a\x0b",
5628 .alen = 12,
5629 .input = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5630 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5631 "\x1c\x1d\x1e",
5632 .ilen = 19,
5633 .result = "\x07\x34\x25\x94\x15\x77\x85\x15"
5634 "\x2b\x07\x40\x98\x33\x0a\xbb\x14"
5635 "\x1b\x94\x7b\x56\x6a\xa9\x40\x6b"
5636 "\x4d\x99\x99\x88\xdd",
5637 .rlen = 29,
5638 }, {
5639 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5640 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5641 .klen = 16,
5642 .iv = "\x01\x00\x33\x56\x8e\xf7\xb2\x63"
5643 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5644 .assoc = "\x63\x01\x8f\x76\xdc\x8a\x1b\xcb",
5645 .alen = 8,
5646 .input = "\x90\x20\xea\x6f\x91\xbd\xd8\x5a"
5647 "\xfa\x00\x39\xba\x4b\xaf\xf9\xbf"
5648 "\xb7\x9c\x70\x28\x94\x9c\xd0\xec",
5649 .ilen = 24,
5650 .result = "\x4c\xcb\x1e\x7c\xa9\x81\xbe\xfa"
5651 "\xa0\x72\x6c\x55\xd3\x78\x06\x12"
5652 "\x98\xc8\x5c\x92\x81\x4a\xbc\x33"
5653 "\xc5\x2e\xe8\x1d\x7d\x77\xc0\x8a",
5654 .rlen = 32,
5655 }, {
5656 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5657 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5658 .klen = 16,
5659 .iv = "\x01\x00\xd5\x60\x91\x2d\x3f\x70"
5660 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5661 .assoc = "\xcd\x90\x44\xd2\xb7\x1f\xdb\x81"
5662 "\x20\xea\x60\xc0",
5663 .alen = 12,
5664 .input = "\x64\x35\xac\xba\xfb\x11\xa8\x2e"
5665 "\x2f\x07\x1d\x7c\xa4\xa5\xeb\xd9"
5666 "\x3a\x80\x3b\xa8\x7f",
5667 .ilen = 21,
5668 .result = "\x00\x97\x69\xec\xab\xdf\x48\x62"
5669 "\x55\x94\xc5\x92\x51\xe6\x03\x57"
5670 "\x22\x67\x5e\x04\xc8\x47\x09\x9e"
5671 "\x5a\xe0\x70\x45\x51",
5672 .rlen = 29,
5673 }, {
5674 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5675 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5676 .klen = 16,
5677 .iv = "\x01\x00\x42\xff\xf8\xf1\x95\x1c"
5678 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5679 .assoc = "\xd8\x5b\xc7\xe6\x9f\x94\x4f\xb8",
5680 .alen = 8,
5681 .input = "\x8a\x19\xb9\x50\xbc\xf7\x1a\x01"
5682 "\x8e\x5e\x67\x01\xc9\x17\x87\x65"
5683 "\x98\x09\xd6\x7d\xbe\xdd\x18",
5684 .ilen = 23,
5685 .result = "\xbc\x21\x8d\xaa\x94\x74\x27\xb6"
5686 "\xdb\x38\x6a\x99\xac\x1a\xef\x23"
5687 "\xad\xe0\xb5\x29\x39\xcb\x6a\x63"
5688 "\x7c\xf9\xbe\xc2\x40\x88\x97\xc6"
5689 "\xba",
5690 .rlen = 33,
5691 },
5692};
5693
5694static struct aead_testvec aes_ccm_dec_tv_template[] = {
5695 { /* From RFC 3610 */
5696 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5697 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5698 .klen = 16,
5699 .iv = "\x01\x00\x00\x00\x03\x02\x01\x00"
5700 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5701 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5702 .alen = 8,
5703 .input = "\x58\x8c\x97\x9a\x61\xc6\x63\xd2"
5704 "\xf0\x66\xd0\xc2\xc0\xf9\x89\x80"
5705 "\x6d\x5f\x6b\x61\xda\xc3\x84\x17"
5706 "\xe8\xd1\x2c\xfd\xf9\x26\xe0",
5707 .ilen = 31,
5708 .result = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5709 "\x10\x11\x12\x13\x14\x15\x16\x17"
5710 "\x18\x19\x1a\x1b\x1c\x1d\x1e",
5711 .rlen = 23,
5712 }, {
5713 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5714 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5715 .klen = 16,
5716 .iv = "\x01\x00\x00\x00\x07\x06\x05\x04"
5717 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5718 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5719 "\x08\x09\x0a\x0b",
5720 .alen = 12,
5721 .input = "\xdc\xf1\xfb\x7b\x5d\x9e\x23\xfb"
5722 "\x9d\x4e\x13\x12\x53\x65\x8a\xd8"
5723 "\x6e\xbd\xca\x3e\x51\xe8\x3f\x07"
5724 "\x7d\x9c\x2d\x93",
5725 .ilen = 28,
5726 .result = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5727 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5728 "\x1c\x1d\x1e\x1f",
5729 .rlen = 20,
5730 }, {
5731 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5732 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5733 .klen = 16,
5734 .iv = "\x01\x00\x00\x00\x0b\x0a\x09\x08"
5735 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5736 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07",
5737 .alen = 8,
5738 .input = "\x82\x53\x1a\x60\xcc\x24\x94\x5a"
5739 "\x4b\x82\x79\x18\x1a\xb5\xc8\x4d"
5740 "\xf2\x1c\xe7\xf9\xb7\x3f\x42\xe1"
5741 "\x97\xea\x9c\x07\xe5\x6b\x5e\xb1"
5742 "\x7e\x5f\x4e",
5743 .ilen = 35,
5744 .result = "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
5745 "\x10\x11\x12\x13\x14\x15\x16\x17"
5746 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
5747 "\x20",
5748 .rlen = 25,
5749 }, {
5750 .key = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
5751 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
5752 .klen = 16,
5753 .iv = "\x01\x00\x00\x00\x0c\x0b\x0a\x09"
5754 "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
5755 .assoc = "\x00\x01\x02\x03\x04\x05\x06\x07"
5756 "\x08\x09\x0a\x0b",
5757 .alen = 12,
5758 .input = "\x07\x34\x25\x94\x15\x77\x85\x15"
5759 "\x2b\x07\x40\x98\x33\x0a\xbb\x14"
5760 "\x1b\x94\x7b\x56\x6a\xa9\x40\x6b"
5761 "\x4d\x99\x99\x88\xdd",
5762 .ilen = 29,
5763 .result = "\x0c\x0d\x0e\x0f\x10\x11\x12\x13"
5764 "\x14\x15\x16\x17\x18\x19\x1a\x1b"
5765 "\x1c\x1d\x1e",
5766 .rlen = 19,
5767 }, {
5768 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5769 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5770 .klen = 16,
5771 .iv = "\x01\x00\x33\x56\x8e\xf7\xb2\x63"
5772 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5773 .assoc = "\x63\x01\x8f\x76\xdc\x8a\x1b\xcb",
5774 .alen = 8,
5775 .input = "\x4c\xcb\x1e\x7c\xa9\x81\xbe\xfa"
5776 "\xa0\x72\x6c\x55\xd3\x78\x06\x12"
5777 "\x98\xc8\x5c\x92\x81\x4a\xbc\x33"
5778 "\xc5\x2e\xe8\x1d\x7d\x77\xc0\x8a",
5779 .ilen = 32,
5780 .result = "\x90\x20\xea\x6f\x91\xbd\xd8\x5a"
5781 "\xfa\x00\x39\xba\x4b\xaf\xf9\xbf"
5782 "\xb7\x9c\x70\x28\x94\x9c\xd0\xec",
5783 .rlen = 24,
5784 }, {
5785 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5786 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5787 .klen = 16,
5788 .iv = "\x01\x00\xd5\x60\x91\x2d\x3f\x70"
5789 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5790 .assoc = "\xcd\x90\x44\xd2\xb7\x1f\xdb\x81"
5791 "\x20\xea\x60\xc0",
5792 .alen = 12,
5793 .input = "\x00\x97\x69\xec\xab\xdf\x48\x62"
5794 "\x55\x94\xc5\x92\x51\xe6\x03\x57"
5795 "\x22\x67\x5e\x04\xc8\x47\x09\x9e"
5796 "\x5a\xe0\x70\x45\x51",
5797 .ilen = 29,
5798 .result = "\x64\x35\xac\xba\xfb\x11\xa8\x2e"
5799 "\x2f\x07\x1d\x7c\xa4\xa5\xeb\xd9"
5800 "\x3a\x80\x3b\xa8\x7f",
5801 .rlen = 21,
5802 }, {
5803 .key = "\xd7\x82\x8d\x13\xb2\xb0\xbd\xc3"
5804 "\x25\xa7\x62\x36\xdf\x93\xcc\x6b",
5805 .klen = 16,
5806 .iv = "\x01\x00\x42\xff\xf8\xf1\x95\x1c"
5807 "\x3c\x96\x96\x76\x6c\xfa\x00\x00",
5808 .assoc = "\xd8\x5b\xc7\xe6\x9f\x94\x4f\xb8",
5809 .alen = 8,
5810 .input = "\xbc\x21\x8d\xaa\x94\x74\x27\xb6"
5811 "\xdb\x38\x6a\x99\xac\x1a\xef\x23"
5812 "\xad\xe0\xb5\x29\x39\xcb\x6a\x63"
5813 "\x7c\xf9\xbe\xc2\x40\x88\x97\xc6"
5814 "\xba",
5815 .ilen = 33,
5816 .result = "\x8a\x19\xb9\x50\xbc\xf7\x1a\x01"
5817 "\x8e\x5e\x67\x01\xc9\x17\x87\x65"
5818 "\x98\x09\xd6\x7d\xbe\xdd\x18",
5819 .rlen = 23,
5820 },
5821};
5822
5823/* Cast5 test vectors from RFC 2144 */
5824#define CAST5_ENC_TEST_VECTORS 3
5825#define CAST5_DEC_TEST_VECTORS 3
5826
5827static struct cipher_testvec cast5_enc_tv_template[] = {
5828 {
5829 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5830 "\x23\x45\x67\x89\x34\x56\x78\x9a",
5831 .klen = 16,
5832 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5833 .ilen = 8,
5834 .result = "\x23\x8b\x4f\xe5\x84\x7e\x44\xb2",
5835 .rlen = 8,
5836 }, {
5837 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5838 "\x23\x45",
5839 .klen = 10,
5840 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5841 .ilen = 8,
5842 .result = "\xeb\x6a\x71\x1a\x2c\x02\x27\x1b",
5843 .rlen = 8,
5844 }, {
5845 .key = "\x01\x23\x45\x67\x12",
5846 .klen = 5,
5847 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5848 .ilen = 8,
5849 .result = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e",
5850 .rlen = 8,
5851 },
5852};
5853
5854static struct cipher_testvec cast5_dec_tv_template[] = {
5855 {
5856 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5857 "\x23\x45\x67\x89\x34\x56\x78\x9a",
5858 .klen = 16,
5859 .input = "\x23\x8b\x4f\xe5\x84\x7e\x44\xb2",
5860 .ilen = 8,
5861 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5862 .rlen = 8,
5863 }, {
5864 .key = "\x01\x23\x45\x67\x12\x34\x56\x78"
5865 "\x23\x45",
5866 .klen = 10,
5867 .input = "\xeb\x6a\x71\x1a\x2c\x02\x27\x1b",
5868 .ilen = 8,
5869 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5870 .rlen = 8,
5871 }, {
5872 .key = "\x01\x23\x45\x67\x12",
5873 .klen = 5,
5874 .input = "\x7a\xc8\x16\xd1\x6e\x9b\x30\x2e",
5875 .ilen = 8,
5876 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5877 .rlen = 8,
5878 },
5879};
5880
5881/*
5882 * ARC4 test vectors from OpenSSL
5883 */
5884#define ARC4_ENC_TEST_VECTORS 7
5885#define ARC4_DEC_TEST_VECTORS 7
5886
5887static struct cipher_testvec arc4_enc_tv_template[] = {
5888 {
5889 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5890 .klen = 8,
5891 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5892 .ilen = 8,
5893 .result = "\x75\xb7\x87\x80\x99\xe0\xc5\x96",
5894 .rlen = 8,
5895 }, {
5896 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5897 .klen = 8,
5898 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
5899 .ilen = 8,
5900 .result = "\x74\x94\xc2\xe7\x10\x4b\x08\x79",
5901 .rlen = 8,
5902 }, {
5903 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
5904 .klen = 8,
5905 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
5906 .ilen = 8,
5907 .result = "\xde\x18\x89\x41\xa3\x37\x5d\x3a",
5908 .rlen = 8,
5909 }, {
5910 .key = "\xef\x01\x23\x45",
5911 .klen = 4,
5912 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
5913 "\x00\x00\x00\x00\x00\x00\x00\x00"
5914 "\x00\x00\x00\x00",
5915 .ilen = 20,
5916 .result = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5917 "\xbd\x61\x5a\x11\x62\xe1\xc7\xba"
5918 "\x36\xb6\x78\x58",
5919 .rlen = 20,
5920 }, {
5921 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5922 .klen = 8,
5923 .input = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5924 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5925 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5926 "\x12\x34\x56\x78",
5927 .ilen = 28,
5928 .result = "\x66\xa0\x94\x9f\x8a\xf7\xd6\x89"
5929 "\x1f\x7f\x83\x2b\xa8\x33\xc0\x0c"
5930 "\x89\x2e\xbe\x30\x14\x3c\xe2\x87"
5931 "\x40\x01\x1e\xcf",
5932 .rlen = 28,
5933 }, {
5934 .key = "\xef\x01\x23\x45",
5935 .klen = 4,
5936 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
5937 "\x00\x00",
5938 .ilen = 10,
5939 .result = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5940 "\xbd\x61",
5941 .rlen = 10,
5942 }, {
5943 .key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
5944 "\x00\x00\x00\x00\x00\x00\x00\x00",
5945 .klen = 16,
5946 .input = "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
5947 .ilen = 8,
5948 .result = "\x69\x72\x36\x59\x1B\x52\x42\xB1",
5949 .rlen = 8,
5950 },
5951};
5952
5953static struct cipher_testvec arc4_dec_tv_template[] = {
5954 {
5955 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5956 .klen = 8,
5957 .input = "\x75\xb7\x87\x80\x99\xe0\xc5\x96",
5958 .ilen = 8,
5959 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5960 .rlen = 8,
5961 }, {
5962 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5963 .klen = 8,
5964 .input = "\x74\x94\xc2\xe7\x10\x4b\x08\x79",
5965 .ilen = 8,
5966 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
5967 .rlen = 8,
5968 }, {
5969 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
5970 .klen = 8,
5971 .input = "\xde\x18\x89\x41\xa3\x37\x5d\x3a",
5972 .ilen = 8,
5973 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
5974 .rlen = 8,
5975 }, {
5976 .key = "\xef\x01\x23\x45",
5977 .klen = 4,
5978 .input = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
5979 "\xbd\x61\x5a\x11\x62\xe1\xc7\xba"
5980 "\x36\xb6\x78\x58",
5981 .ilen = 20,
5982 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
5983 "\x00\x00\x00\x00\x00\x00\x00\x00"
5984 "\x00\x00\x00\x00",
5985 .rlen = 20,
5986 }, {
5987 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef",
5988 .klen = 8,
5989 .input = "\x66\xa0\x94\x9f\x8a\xf7\xd6\x89"
5990 "\x1f\x7f\x83\x2b\xa8\x33\xc0\x0c"
5991 "\x89\x2e\xbe\x30\x14\x3c\xe2\x87"
5992 "\x40\x01\x1e\xcf",
5993 .ilen = 28,
5994 .result = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5995 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5996 "\x12\x34\x56\x78\x9A\xBC\xDE\xF0"
5997 "\x12\x34\x56\x78",
5998 .rlen = 28,
5999 }, {
6000 .key = "\xef\x01\x23\x45",
6001 .klen = 4,
6002 .input = "\xd6\xa1\x41\xa7\xec\x3c\x38\xdf"
6003 "\xbd\x61",
6004 .ilen = 10,
6005 .result = "\x00\x00\x00\x00\x00\x00\x00\x00"
6006 "\x00\x00",
6007 .rlen = 10,
6008 }, {
6009 .key = "\x01\x23\x45\x67\x89\xAB\xCD\xEF"
6010 "\x00\x00\x00\x00\x00\x00\x00\x00",
6011 .klen = 16,
6012 .input = "\x69\x72\x36\x59\x1B\x52\x42\xB1",
6013 .ilen = 8,
6014 .result = "\x01\x23\x45\x67\x89\xAB\xCD\xEF",
6015 .rlen = 8,
6016 },
6017};
6018
6019/*
6020 * TEA test vectors
6021 */
6022#define TEA_ENC_TEST_VECTORS 4
6023#define TEA_DEC_TEST_VECTORS 4
6024
6025static struct cipher_testvec tea_enc_tv_template[] = {
6026 {
6027 .key = zeroed_string,
6028 .klen = 16,
6029 .input = zeroed_string,
6030 .ilen = 8,
6031 .result = "\x0a\x3a\xea\x41\x40\xa9\xba\x94",
6032 .rlen = 8,
6033 }, {
6034 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6035 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6036 .klen = 16,
6037 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6038 .ilen = 8,
6039 .result = "\x77\x5d\x2a\x6a\xf6\xce\x92\x09",
6040 .rlen = 8,
6041 }, {
6042 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6043 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6044 .klen = 16,
6045 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6046 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6047 .ilen = 16,
6048 .result = "\xbe\x7a\xbb\x81\x95\x2d\x1f\x1e"
6049 "\xdd\x89\xa1\x25\x04\x21\xdf\x95",
6050 .rlen = 16,
6051 }, {
6052 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6053 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6054 .klen = 16,
6055 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6056 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6057 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6058 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6059 .ilen = 32,
6060 .result = "\xe0\x4d\x5d\x3c\xb7\x8c\x36\x47"
6061 "\x94\x18\x95\x91\xa9\xfc\x49\xf8"
6062 "\x44\xd1\x2d\xc2\x99\xb8\x08\x2a"
6063 "\x07\x89\x73\xc2\x45\x92\xc6\x90",
6064 .rlen = 32,
6065 }
6066};
6067
6068static struct cipher_testvec tea_dec_tv_template[] = {
6069 {
6070 .key = zeroed_string,
6071 .klen = 16,
6072 .input = "\x0a\x3a\xea\x41\x40\xa9\xba\x94",
6073 .ilen = 8,
6074 .result = zeroed_string,
6075 .rlen = 8,
6076 }, {
6077 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6078 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6079 .klen = 16,
6080 .input = "\x77\x5d\x2a\x6a\xf6\xce\x92\x09",
6081 .ilen = 8,
6082 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6083 .rlen = 8,
6084 }, {
6085 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6086 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6087 .klen = 16,
6088 .input = "\xbe\x7a\xbb\x81\x95\x2d\x1f\x1e"
6089 "\xdd\x89\xa1\x25\x04\x21\xdf\x95",
6090 .ilen = 16,
6091 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6092 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6093 .rlen = 16,
6094 }, {
6095 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6096 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6097 .klen = 16,
6098 .input = "\xe0\x4d\x5d\x3c\xb7\x8c\x36\x47"
6099 "\x94\x18\x95\x91\xa9\xfc\x49\xf8"
6100 "\x44\xd1\x2d\xc2\x99\xb8\x08\x2a"
6101 "\x07\x89\x73\xc2\x45\x92\xc6\x90",
6102 .ilen = 32,
6103 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6104 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6105 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6106 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6107 .rlen = 32,
6108 }
6109};
6110
6111/*
6112 * XTEA test vectors
6113 */
6114#define XTEA_ENC_TEST_VECTORS 4
6115#define XTEA_DEC_TEST_VECTORS 4
6116
6117static struct cipher_testvec xtea_enc_tv_template[] = {
6118 {
6119 .key = zeroed_string,
6120 .klen = 16,
6121 .input = zeroed_string,
6122 .ilen = 8,
6123 .result = "\xd8\xd4\xe9\xde\xd9\x1e\x13\xf7",
6124 .rlen = 8,
6125 }, {
6126 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6127 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6128 .klen = 16,
6129 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6130 .ilen = 8,
6131 .result = "\x94\xeb\xc8\x96\x84\x6a\x49\xa8",
6132 .rlen = 8,
6133 }, {
6134 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6135 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6136 .klen = 16,
6137 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6138 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6139 .ilen = 16,
6140 .result = "\x3e\xce\xae\x22\x60\x56\xa8\x9d"
6141 "\x77\x4d\xd4\xb4\x87\x24\xe3\x9a",
6142 .rlen = 16,
6143 }, {
6144 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6145 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6146 .klen = 16,
6147 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6148 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6149 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6150 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6151 .ilen = 32,
6152 .result = "\x99\x81\x9f\x5d\x6f\x4b\x31\x3a"
6153 "\x86\xff\x6f\xd0\xe3\x87\x70\x07"
6154 "\x4d\xb8\xcf\xf3\x99\x50\xb3\xd4"
6155 "\x73\xa2\xfa\xc9\x16\x59\x5d\x81",
6156 .rlen = 32,
6157 }
6158};
6159
6160static struct cipher_testvec xtea_dec_tv_template[] = {
6161 {
6162 .key = zeroed_string,
6163 .klen = 16,
6164 .input = "\xd8\xd4\xe9\xde\xd9\x1e\x13\xf7",
6165 .ilen = 8,
6166 .result = zeroed_string,
6167 .rlen = 8,
6168 }, {
6169 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6170 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6171 .klen = 16,
6172 .input = "\x94\xeb\xc8\x96\x84\x6a\x49\xa8",
6173 .ilen = 8,
6174 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6175 .rlen = 8,
6176 }, {
6177 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6178 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6179 .klen = 16,
6180 .input = "\x3e\xce\xae\x22\x60\x56\xa8\x9d"
6181 "\x77\x4d\xd4\xb4\x87\x24\xe3\x9a",
6182 .ilen = 16,
6183 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6184 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6185 .rlen = 16,
6186 }, {
6187 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6188 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6189 .klen = 16,
6190 .input = "\x99\x81\x9f\x5d\x6f\x4b\x31\x3a"
6191 "\x86\xff\x6f\xd0\xe3\x87\x70\x07"
6192 "\x4d\xb8\xcf\xf3\x99\x50\xb3\xd4"
6193 "\x73\xa2\xfa\xc9\x16\x59\x5d\x81",
6194 .ilen = 32,
6195 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6196 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6197 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6198 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6199 .rlen = 32,
6200 }
6201};
6202
6203/*
6204 * KHAZAD test vectors.
6205 */
6206#define KHAZAD_ENC_TEST_VECTORS 5
6207#define KHAZAD_DEC_TEST_VECTORS 5
6208
6209static struct cipher_testvec khazad_enc_tv_template[] = {
6210 {
6211 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
6212 "\x00\x00\x00\x00\x00\x00\x00\x00",
6213 .klen = 16,
6214 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
6215 .ilen = 8,
6216 .result = "\x49\xa4\xce\x32\xac\x19\x0e\x3f",
6217 .rlen = 8,
6218 }, {
6219 .key = "\x38\x38\x38\x38\x38\x38\x38\x38"
6220 "\x38\x38\x38\x38\x38\x38\x38\x38",
6221 .klen = 16,
6222 .input = "\x38\x38\x38\x38\x38\x38\x38\x38",
6223 .ilen = 8,
6224 .result = "\x7e\x82\x12\xa1\xd9\x5b\xe4\xf9",
6225 .rlen = 8,
6226 }, {
6227 .key = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2"
6228 "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6229 .klen = 16,
6230 .input = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6231 .ilen = 8,
6232 .result = "\xaa\xbe\xc1\x95\xc5\x94\x1a\x9c",
6233 .rlen = 8,
6234 }, {
6235 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6236 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6237 .klen = 16,
6238 .input = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6239 .ilen = 8,
6240 .result = "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6241 .rlen = 8,
6242 }, {
6243 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6244 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6245 .klen = 16,
6246 .input = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6247 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6248 .ilen = 16,
6249 .result = "\x04\x74\xf5\x70\x50\x16\xd3\xb8"
6250 "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6251 .rlen = 16,
6252 },
6253};
6254
6255static struct cipher_testvec khazad_dec_tv_template[] = {
6256 {
6257 .key = "\x80\x00\x00\x00\x00\x00\x00\x00"
6258 "\x00\x00\x00\x00\x00\x00\x00\x00",
6259 .klen = 16,
6260 .input = "\x49\xa4\xce\x32\xac\x19\x0e\x3f",
6261 .ilen = 8,
6262 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
6263 .rlen = 8,
6264 }, {
6265 .key = "\x38\x38\x38\x38\x38\x38\x38\x38"
6266 "\x38\x38\x38\x38\x38\x38\x38\x38",
6267 .klen = 16,
6268 .input = "\x7e\x82\x12\xa1\xd9\x5b\xe4\xf9",
6269 .ilen = 8,
6270 .result = "\x38\x38\x38\x38\x38\x38\x38\x38",
6271 .rlen = 8,
6272 }, {
6273 .key = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2"
6274 "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6275 .klen = 16,
6276 .input = "\xaa\xbe\xc1\x95\xc5\x94\x1a\x9c",
6277 .ilen = 8,
6278 .result = "\xa2\xa2\xa2\xa2\xa2\xa2\xa2\xa2",
6279 .rlen = 8,
6280 }, {
6281 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6282 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6283 .klen = 16,
6284 .input = "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6285 .ilen = 8,
6286 .result = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6287 .rlen = 8,
6288 }, {
6289 .key = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6290 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6291 .klen = 16,
6292 .input = "\x04\x74\xf5\x70\x50\x16\xd3\xb8"
6293 "\x04\x74\xf5\x70\x50\x16\xd3\xb8",
6294 .ilen = 16,
6295 .result = "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f"
6296 "\x2f\x2f\x2f\x2f\x2f\x2f\x2f\x2f",
6297 .rlen = 16,
6298 },
6299};
6300
6301/*
6302 * Anubis test vectors.
6303 */
6304
6305#define ANUBIS_ENC_TEST_VECTORS 5
6306#define ANUBIS_DEC_TEST_VECTORS 5
6307#define ANUBIS_CBC_ENC_TEST_VECTORS 2
6308#define ANUBIS_CBC_DEC_TEST_VECTORS 2
6309
6310static struct cipher_testvec anubis_enc_tv_template[] = {
6311 {
6312 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6313 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6314 .klen = 16,
6315 .input = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6316 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6317 .ilen = 16,
6318 .result = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6319 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90",
6320 .rlen = 16,
6321 }, {
6322
6323 .key = "\x03\x03\x03\x03\x03\x03\x03\x03"
6324 "\x03\x03\x03\x03\x03\x03\x03\x03"
6325 "\x03\x03\x03\x03",
6326 .klen = 20,
6327 .input = "\x03\x03\x03\x03\x03\x03\x03\x03"
6328 "\x03\x03\x03\x03\x03\x03\x03\x03",
6329 .ilen = 16,
6330 .result = "\xdb\xf1\x42\xf4\xd1\x8a\xc7\x49"
6331 "\x87\x41\x6f\x82\x0a\x98\x64\xae",
6332 .rlen = 16,
6333 }, {
6334 .key = "\x24\x24\x24\x24\x24\x24\x24\x24"
6335 "\x24\x24\x24\x24\x24\x24\x24\x24"
6336 "\x24\x24\x24\x24\x24\x24\x24\x24"
6337 "\x24\x24\x24\x24",
6338 .klen = 28,
6339 .input = "\x24\x24\x24\x24\x24\x24\x24\x24"
6340 "\x24\x24\x24\x24\x24\x24\x24\x24",
6341 .ilen = 16,
6342 .result = "\xfd\x1b\x4a\xe3\xbf\xf0\xad\x3d"
6343 "\x06\xd3\x61\x27\xfd\x13\x9e\xde",
6344 .rlen = 16,
6345 }, {
6346 .key = "\x25\x25\x25\x25\x25\x25\x25\x25"
6347 "\x25\x25\x25\x25\x25\x25\x25\x25"
6348 "\x25\x25\x25\x25\x25\x25\x25\x25"
6349 "\x25\x25\x25\x25\x25\x25\x25\x25",
6350 .klen = 32,
6351 .input = "\x25\x25\x25\x25\x25\x25\x25\x25"
6352 "\x25\x25\x25\x25\x25\x25\x25\x25",
6353 .ilen = 16,
6354 .result = "\x1a\x91\xfb\x2b\xb7\x78\x6b\xc4"
6355 "\x17\xd9\xff\x40\x3b\x0e\xe5\xfe",
6356 .rlen = 16,
6357 }, {
6358 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6359 "\x35\x35\x35\x35\x35\x35\x35\x35"
6360 "\x35\x35\x35\x35\x35\x35\x35\x35"
6361 "\x35\x35\x35\x35\x35\x35\x35\x35"
6362 "\x35\x35\x35\x35\x35\x35\x35\x35",
6363 .klen = 40,
6364 .input = "\x35\x35\x35\x35\x35\x35\x35\x35"
6365 "\x35\x35\x35\x35\x35\x35\x35\x35",
6366 .ilen = 16,
6367 .result = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6368 "\x9e\xc6\x84\x0f\x17\x21\x07\xee",
6369 .rlen = 16,
6370 },
6371};
6372
6373static struct cipher_testvec anubis_dec_tv_template[] = {
6374 {
6375 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6376 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6377 .klen = 16,
6378 .input = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6379 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90",
6380 .ilen = 16,
6381 .result = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6382 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6383 .rlen = 16,
6384 }, {
6385
6386 .key = "\x03\x03\x03\x03\x03\x03\x03\x03"
6387 "\x03\x03\x03\x03\x03\x03\x03\x03"
6388 "\x03\x03\x03\x03",
6389 .klen = 20,
6390 .input = "\xdb\xf1\x42\xf4\xd1\x8a\xc7\x49"
6391 "\x87\x41\x6f\x82\x0a\x98\x64\xae",
6392 .ilen = 16,
6393 .result = "\x03\x03\x03\x03\x03\x03\x03\x03"
6394 "\x03\x03\x03\x03\x03\x03\x03\x03",
6395 .rlen = 16,
6396 }, {
6397 .key = "\x24\x24\x24\x24\x24\x24\x24\x24"
6398 "\x24\x24\x24\x24\x24\x24\x24\x24"
6399 "\x24\x24\x24\x24\x24\x24\x24\x24"
6400 "\x24\x24\x24\x24",
6401 .klen = 28,
6402 .input = "\xfd\x1b\x4a\xe3\xbf\xf0\xad\x3d"
6403 "\x06\xd3\x61\x27\xfd\x13\x9e\xde",
6404 .ilen = 16,
6405 .result = "\x24\x24\x24\x24\x24\x24\x24\x24"
6406 "\x24\x24\x24\x24\x24\x24\x24\x24",
6407 .rlen = 16,
6408 }, {
6409 .key = "\x25\x25\x25\x25\x25\x25\x25\x25"
6410 "\x25\x25\x25\x25\x25\x25\x25\x25"
6411 "\x25\x25\x25\x25\x25\x25\x25\x25"
6412 "\x25\x25\x25\x25\x25\x25\x25\x25",
6413 .klen = 32,
6414 .input = "\x1a\x91\xfb\x2b\xb7\x78\x6b\xc4"
6415 "\x17\xd9\xff\x40\x3b\x0e\xe5\xfe",
6416 .ilen = 16,
6417 .result = "\x25\x25\x25\x25\x25\x25\x25\x25"
6418 "\x25\x25\x25\x25\x25\x25\x25\x25",
6419 .rlen = 16,
6420 }, {
6421 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6422 "\x35\x35\x35\x35\x35\x35\x35\x35"
6423 "\x35\x35\x35\x35\x35\x35\x35\x35"
6424 "\x35\x35\x35\x35\x35\x35\x35\x35"
6425 "\x35\x35\x35\x35\x35\x35\x35\x35",
6426 .input = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6427 "\x9e\xc6\x84\x0f\x17\x21\x07\xee",
6428 .klen = 40,
6429 .ilen = 16,
6430 .result = "\x35\x35\x35\x35\x35\x35\x35\x35"
6431 "\x35\x35\x35\x35\x35\x35\x35\x35",
6432 .rlen = 16,
6433 },
6434};
6435
6436static struct cipher_testvec anubis_cbc_enc_tv_template[] = {
6437 {
6438 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6439 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6440 .klen = 16,
6441 .input = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6442 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6443 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6444 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6445 .ilen = 32,
6446 .result = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6447 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90"
6448 "\x86\xd8\xb5\x6f\x98\x5e\x8a\x66"
6449 "\x4f\x1f\x78\xa1\xbb\x37\xf1\xbe",
6450 .rlen = 32,
6451 }, {
6452 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6453 "\x35\x35\x35\x35\x35\x35\x35\x35"
6454 "\x35\x35\x35\x35\x35\x35\x35\x35"
6455 "\x35\x35\x35\x35\x35\x35\x35\x35"
6456 "\x35\x35\x35\x35\x35\x35\x35\x35",
6457 .klen = 40,
6458 .input = "\x35\x35\x35\x35\x35\x35\x35\x35"
6459 "\x35\x35\x35\x35\x35\x35\x35\x35"
6460 "\x35\x35\x35\x35\x35\x35\x35\x35"
6461 "\x35\x35\x35\x35\x35\x35\x35\x35",
6462 .ilen = 32,
6463 .result = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6464 "\x9e\xc6\x84\x0f\x17\x21\x07\xee"
6465 "\xa2\xbc\x06\x98\xc6\x4b\xda\x75"
6466 "\x2e\xaa\xbe\x58\xce\x01\x5b\xc7",
6467 .rlen = 32,
6468 },
6469};
6470
6471static struct cipher_testvec anubis_cbc_dec_tv_template[] = {
6472 {
6473 .key = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6474 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6475 .klen = 16,
6476 .input = "\x6d\xc5\xda\xa2\x26\x7d\x62\x6f"
6477 "\x08\xb7\x52\x8e\x6e\x6e\x86\x90"
6478 "\x86\xd8\xb5\x6f\x98\x5e\x8a\x66"
6479 "\x4f\x1f\x78\xa1\xbb\x37\xf1\xbe",
6480 .ilen = 32,
6481 .result = "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6482 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6483 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
6484 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe",
6485 .rlen = 32,
6486 }, {
6487 .key = "\x35\x35\x35\x35\x35\x35\x35\x35"
6488 "\x35\x35\x35\x35\x35\x35\x35\x35"
6489 "\x35\x35\x35\x35\x35\x35\x35\x35"
6490 "\x35\x35\x35\x35\x35\x35\x35\x35"
6491 "\x35\x35\x35\x35\x35\x35\x35\x35",
6492 .klen = 40,
6493 .input = "\xa5\x2c\x85\x6f\x9c\xba\xa0\x97"
6494 "\x9e\xc6\x84\x0f\x17\x21\x07\xee"
6495 "\xa2\xbc\x06\x98\xc6\x4b\xda\x75"
6496 "\x2e\xaa\xbe\x58\xce\x01\x5b\xc7",
6497 .ilen = 32,
6498 .result = "\x35\x35\x35\x35\x35\x35\x35\x35"
6499 "\x35\x35\x35\x35\x35\x35\x35\x35"
6500 "\x35\x35\x35\x35\x35\x35\x35\x35"
6501 "\x35\x35\x35\x35\x35\x35\x35\x35",
6502 .rlen = 32,
6503 },
6504};
6505
6506/*
6507 * XETA test vectors
6508 */
6509#define XETA_ENC_TEST_VECTORS 4
6510#define XETA_DEC_TEST_VECTORS 4
6511
6512static struct cipher_testvec xeta_enc_tv_template[] = {
6513 {
6514 .key = zeroed_string,
6515 .klen = 16,
6516 .input = zeroed_string,
6517 .ilen = 8,
6518 .result = "\xaa\x22\x96\xe5\x6c\x61\xf3\x45",
6519 .rlen = 8,
6520 }, {
6521 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6522 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6523 .klen = 16,
6524 .input = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6525 .ilen = 8,
6526 .result = "\x82\x3e\xeb\x35\xdc\xdd\xd9\xc3",
6527 .rlen = 8,
6528 }, {
6529 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6530 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6531 .klen = 16,
6532 .input = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6533 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6534 .ilen = 16,
6535 .result = "\xe2\x04\xdb\xf2\x89\x85\x9e\xea"
6536 "\x61\x35\xaa\xed\xb5\xcb\x71\x2c",
6537 .rlen = 16,
6538 }, {
6539 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6540 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6541 .klen = 16,
6542 .input = "\x54\x65\x61\x20\x69\x73\x20\x67"
6543 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6544 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6545 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6546 .ilen = 32,
6547 .result = "\x0b\x03\xcd\x8a\xbe\x95\xfd\xb1"
6548 "\xc1\x44\x91\x0b\xa5\xc9\x1b\xb4"
6549 "\xa9\xda\x1e\x9e\xb1\x3e\x2a\x8f"
6550 "\xea\xa5\x6a\x85\xd1\xf4\xa8\xa5",
6551 .rlen = 32,
6552 }
6553};
6554
6555static struct cipher_testvec xeta_dec_tv_template[] = {
6556 {
6557 .key = zeroed_string,
6558 .klen = 16,
6559 .input = "\xaa\x22\x96\xe5\x6c\x61\xf3\x45",
6560 .ilen = 8,
6561 .result = zeroed_string,
6562 .rlen = 8,
6563 }, {
6564 .key = "\x2b\x02\x05\x68\x06\x14\x49\x76"
6565 "\x77\x5d\x0e\x26\x6c\x28\x78\x43",
6566 .klen = 16,
6567 .input = "\x82\x3e\xeb\x35\xdc\xdd\xd9\xc3",
6568 .ilen = 8,
6569 .result = "\x74\x65\x73\x74\x20\x6d\x65\x2e",
6570 .rlen = 8,
6571 }, {
6572 .key = "\x09\x65\x43\x11\x66\x44\x39\x25"
6573 "\x51\x3a\x16\x10\x0a\x08\x12\x6e",
6574 .klen = 16,
6575 .input = "\xe2\x04\xdb\xf2\x89\x85\x9e\xea"
6576 "\x61\x35\xaa\xed\xb5\xcb\x71\x2c",
6577 .ilen = 16,
6578 .result = "\x6c\x6f\x6e\x67\x65\x72\x5f\x74"
6579 "\x65\x73\x74\x5f\x76\x65\x63\x74",
6580 .rlen = 16,
6581 }, {
6582 .key = "\x4d\x76\x32\x17\x05\x3f\x75\x2c"
6583 "\x5d\x04\x16\x36\x15\x72\x63\x2f",
6584 .klen = 16,
6585 .input = "\x0b\x03\xcd\x8a\xbe\x95\xfd\xb1"
6586 "\xc1\x44\x91\x0b\xa5\xc9\x1b\xb4"
6587 "\xa9\xda\x1e\x9e\xb1\x3e\x2a\x8f"
6588 "\xea\xa5\x6a\x85\xd1\xf4\xa8\xa5",
6589 .ilen = 32,
6590 .result = "\x54\x65\x61\x20\x69\x73\x20\x67"
6591 "\x6f\x6f\x64\x20\x66\x6f\x72\x20"
6592 "\x79\x6f\x75\x21\x21\x21\x20\x72"
6593 "\x65\x61\x6c\x6c\x79\x21\x21\x21",
6594 .rlen = 32,
6595 }
6596};
6597
6598/*
6599 * FCrypt test vectors
6600 */
6601#define FCRYPT_ENC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_enc_tv_template)
6602#define FCRYPT_DEC_TEST_VECTORS ARRAY_SIZE(fcrypt_pcbc_dec_tv_template)
6603
6604static struct cipher_testvec fcrypt_pcbc_enc_tv_template[] = {
6605 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
6606 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
6607 .klen = 8,
6608 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6609 .input = "\x00\x00\x00\x00\x00\x00\x00\x00",
6610 .ilen = 8,
6611 .result = "\x0E\x09\x00\xC7\x3E\xF7\xED\x41",
6612 .rlen = 8,
6613 }, {
6614 .key = "\x11\x44\x77\xAA\xDD\x00\x33\x66",
6615 .klen = 8,
6616 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6617 .input = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0",
6618 .ilen = 8,
6619 .result = "\xD8\xED\x78\x74\x77\xEC\x06\x80",
6620 .rlen = 8,
6621 }, { /* From Arla */
6622 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6623 .klen = 8,
6624 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6625 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6626 .ilen = 48,
6627 .result = "\x00\xf0\x0e\x11\x75\xe6\x23\x82"
6628 "\xee\xac\x98\x62\x44\x51\xe4\x84"
6629 "\xc3\x59\xd8\xaa\x64\x60\xae\xf7"
6630 "\xd2\xd9\x13\x79\x72\xa3\x45\x03"
6631 "\x23\xb5\x62\xd7\x0c\xf5\x27\xd1"
6632 "\xf8\x91\x3c\xac\x44\x22\x92\xef",
6633 .rlen = 48,
6634 }, {
6635 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6636 .klen = 8,
6637 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6638 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6639 .ilen = 48,
6640 .result = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6641 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6642 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6643 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6644 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6645 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6646 .rlen = 48,
6647 }, { /* split-page version */
6648 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6649 .klen = 8,
6650 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6651 .input = "The quick brown fox jumps over the lazy dogs.\0\0",
6652 .ilen = 48,
6653 .result = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6654 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6655 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6656 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6657 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6658 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6659 .rlen = 48,
6660 .np = 2,
6661 .tap = { 20, 28 },
6662 }
6663};
6664
6665static struct cipher_testvec fcrypt_pcbc_dec_tv_template[] = {
6666 { /* http://www.openafs.org/pipermail/openafs-devel/2000-December/005320.html */
6667 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
6668 .klen = 8,
6669 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6670 .input = "\x0E\x09\x00\xC7\x3E\xF7\xED\x41",
6671 .ilen = 8,
6672 .result = "\x00\x00\x00\x00\x00\x00\x00\x00",
6673 .rlen = 8,
6674 }, {
6675 .key = "\x11\x44\x77\xAA\xDD\x00\x33\x66",
6676 .klen = 8,
6677 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6678 .input = "\xD8\xED\x78\x74\x77\xEC\x06\x80",
6679 .ilen = 8,
6680 .result = "\x12\x34\x56\x78\x9A\xBC\xDE\xF0",
6681 .rlen = 8,
6682 }, { /* From Arla */
6683 .key = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6684 .klen = 8,
6685 .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6686 .input = "\x00\xf0\x0e\x11\x75\xe6\x23\x82"
6687 "\xee\xac\x98\x62\x44\x51\xe4\x84"
6688 "\xc3\x59\xd8\xaa\x64\x60\xae\xf7"
6689 "\xd2\xd9\x13\x79\x72\xa3\x45\x03"
6690 "\x23\xb5\x62\xd7\x0c\xf5\x27\xd1"
6691 "\xf8\x91\x3c\xac\x44\x22\x92\xef",
6692 .ilen = 48,
6693 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6694 .rlen = 48,
6695 }, {
6696 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6697 .klen = 8,
6698 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6699 .input = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6700 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6701 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6702 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6703 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6704 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6705 .ilen = 48,
6706 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6707 .rlen = 48,
6708 }, { /* split-page version */
6709 .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6710 .klen = 8,
6711 .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87",
6712 .input = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c"
6713 "\x01\x88\x7f\x3e\x31\x6e\x62\x9d"
6714 "\xd8\xe0\x57\xa3\x06\x3a\x42\x58"
6715 "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0"
6716 "\x19\x89\x09\x1c\x2a\x8e\x8c\x94"
6717 "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f",
6718 .ilen = 48,
6719 .result = "The quick brown fox jumps over the lazy dogs.\0\0",
6720 .rlen = 48,
6721 .np = 2,
6722 .tap = { 20, 28 },
6723 }
6724};
6725
6726/*
6727 * CAMELLIA test vectors.
6728 */
6729#define CAMELLIA_ENC_TEST_VECTORS 3
6730#define CAMELLIA_DEC_TEST_VECTORS 3
6731#define CAMELLIA_CBC_ENC_TEST_VECTORS 2
6732#define CAMELLIA_CBC_DEC_TEST_VECTORS 2
6733
6734static struct cipher_testvec camellia_enc_tv_template[] = {
6735 {
6736 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6737 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6738 .klen = 16,
6739 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6740 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6741 .ilen = 16,
6742 .result = "\x67\x67\x31\x38\x54\x96\x69\x73"
6743 "\x08\x57\x06\x56\x48\xea\xbe\x43",
6744 .rlen = 16,
6745 }, {
6746 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6747 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6748 "\x00\x11\x22\x33\x44\x55\x66\x77",
6749 .klen = 24,
6750 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6751 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6752 .ilen = 16,
6753 .result = "\xb4\x99\x34\x01\xb3\xe9\x96\xf8"
6754 "\x4e\xe5\xce\xe7\xd7\x9b\x09\xb9",
6755 .rlen = 16,
6756 }, {
6757 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6758 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6759 "\x00\x11\x22\x33\x44\x55\x66\x77"
6760 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
6761 .klen = 32,
6762 .input = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6763 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6764 .ilen = 16,
6765 .result = "\x9a\xcc\x23\x7d\xff\x16\xd7\x6c"
6766 "\x20\xef\x7c\x91\x9e\x3a\x75\x09",
6767 .rlen = 16,
6768 },
6769};
6770
6771static struct cipher_testvec camellia_dec_tv_template[] = {
6772 {
6773 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6774 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6775 .klen = 16,
6776 .input = "\x67\x67\x31\x38\x54\x96\x69\x73"
6777 "\x08\x57\x06\x56\x48\xea\xbe\x43",
6778 .ilen = 16,
6779 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6780 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6781 .rlen = 16,
6782 }, {
6783 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6784 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6785 "\x00\x11\x22\x33\x44\x55\x66\x77",
6786 .klen = 24,
6787 .input = "\xb4\x99\x34\x01\xb3\xe9\x96\xf8"
6788 "\x4e\xe5\xce\xe7\xd7\x9b\x09\xb9",
6789 .ilen = 16,
6790 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6791 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6792 .rlen = 16,
6793 }, {
6794 .key = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6795 "\xfe\xdc\xba\x98\x76\x54\x32\x10"
6796 "\x00\x11\x22\x33\x44\x55\x66\x77"
6797 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff",
6798 .klen = 32,
6799 .input = "\x9a\xcc\x23\x7d\xff\x16\xd7\x6c"
6800 "\x20\xef\x7c\x91\x9e\x3a\x75\x09",
6801 .ilen = 16,
6802 .result = "\x01\x23\x45\x67\x89\xab\xcd\xef"
6803 "\xfe\xdc\xba\x98\x76\x54\x32\x10",
6804 .rlen = 16,
6805 },
6806};
6807
6808static struct cipher_testvec camellia_cbc_enc_tv_template[] = {
6809 {
6810 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
6811 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
6812 .klen = 16,
6813 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
6814 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
6815 .input = "Single block msg",
6816 .ilen = 16,
6817 .result = "\xea\x32\x12\x76\x3b\x50\x10\xe7"
6818 "\x18\xf6\xfd\x5d\xf6\x8f\x13\x51",
6819 .rlen = 16,
6820 }, {
6821 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
6822 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
6823 .klen = 16,
6824 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
6825 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
6826 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
6827 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
6828 "\x10\x11\x12\x13\x14\x15\x16\x17"
6829 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
6830 .ilen = 32,
6831 .result = "\xa5\xdf\x6e\x50\xda\x70\x6c\x01"
6832 "\x4a\xab\xf3\xf2\xd6\xfc\x6c\xfd"
6833 "\x19\xb4\x3e\x57\x1c\x02\x5e\xa0"
6834 "\x15\x78\xe0\x5e\xf2\xcb\x87\x16",
6835 .rlen = 32,
6836 },
6837};
6838
6839static struct cipher_testvec camellia_cbc_dec_tv_template[] = {
6840 {
6841 .key = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
6842 "\x51\x2e\x03\xd5\x34\x12\x00\x06",
6843 .klen = 16,
6844 .iv = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
6845 "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
6846 .input = "\xea\x32\x12\x76\x3b\x50\x10\xe7"
6847 "\x18\xf6\xfd\x5d\xf6\x8f\x13\x51",
6848 .ilen = 16,
6849 .result = "Single block msg",
6850 .rlen = 16,
6851 }, {
6852 .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
6853 "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
6854 .klen = 16,
6855 .iv = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
6856 "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
6857 .input = "\xa5\xdf\x6e\x50\xda\x70\x6c\x01"
6858 "\x4a\xab\xf3\xf2\xd6\xfc\x6c\xfd"
6859 "\x19\xb4\x3e\x57\x1c\x02\x5e\xa0"
6860 "\x15\x78\xe0\x5e\xf2\xcb\x87\x16",
6861 .ilen = 32,
6862 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
6863 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
6864 "\x10\x11\x12\x13\x14\x15\x16\x17"
6865 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
6866 .rlen = 32,
6867 },
6868};
6869
6870/*
6871 * SEED test vectors
6872 */
6873#define SEED_ENC_TEST_VECTORS 4
6874#define SEED_DEC_TEST_VECTORS 4
6875
6876static struct cipher_testvec seed_enc_tv_template[] = {
6877 {
6878 .key = zeroed_string,
6879 .klen = 16,
6880 .input = "\x00\x01\x02\x03\x04\x05\x06\x07"
6881 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6882 .ilen = 16,
6883 .result = "\x5e\xba\xc6\xe0\x05\x4e\x16\x68"
6884 "\x19\xaf\xf1\xcc\x6d\x34\x6c\xdb",
6885 .rlen = 16,
6886 }, {
6887 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6888 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6889 .klen = 16,
6890 .input = zeroed_string,
6891 .ilen = 16,
6892 .result = "\xc1\x1f\x22\xf2\x01\x40\x50\x50"
6893 "\x84\x48\x35\x97\xe4\x37\x0f\x43",
6894 .rlen = 16,
6895 }, {
6896 .key = "\x47\x06\x48\x08\x51\xe6\x1b\xe8"
6897 "\x5d\x74\xbf\xb3\xfd\x95\x61\x85",
6898 .klen = 16,
6899 .input = "\x83\xa2\xf8\xa2\x88\x64\x1f\xb9"
6900 "\xa4\xe9\xa5\xcc\x2f\x13\x1c\x7d",
6901 .ilen = 16,
6902 .result = "\xee\x54\xd1\x3e\xbc\xae\x70\x6d"
6903 "\x22\x6b\xc3\x14\x2c\xd4\x0d\x4a",
6904 .rlen = 16,
6905 }, {
6906 .key = "\x28\xdb\xc3\xbc\x49\xff\xd8\x7d"
6907 "\xcf\xa5\x09\xb1\x1d\x42\x2b\xe7",
6908 .klen = 16,
6909 .input = "\xb4\x1e\x6b\xe2\xeb\xa8\x4a\x14"
6910 "\x8e\x2e\xed\x84\x59\x3c\x5e\xc7",
6911 .ilen = 16,
6912 .result = "\x9b\x9b\x7b\xfc\xd1\x81\x3c\xb9"
6913 "\x5d\x0b\x36\x18\xf4\x0f\x51\x22",
6914 .rlen = 16,
6915 }
6916};
6917
6918static struct cipher_testvec seed_dec_tv_template[] = {
6919 {
6920 .key = zeroed_string,
6921 .klen = 16,
6922 .input = "\x5e\xba\xc6\xe0\x05\x4e\x16\x68"
6923 "\x19\xaf\xf1\xcc\x6d\x34\x6c\xdb",
6924 .ilen = 16,
6925 .result = "\x00\x01\x02\x03\x04\x05\x06\x07"
6926 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6927 .rlen = 16,
6928 }, {
6929 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6930 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
6931 .klen = 16,
6932 .input = "\xc1\x1f\x22\xf2\x01\x40\x50\x50"
6933 "\x84\x48\x35\x97\xe4\x37\x0f\x43",
6934 .ilen = 16,
6935 .result = zeroed_string,
6936 .rlen = 16,
6937 }, {
6938 .key = "\x47\x06\x48\x08\x51\xe6\x1b\xe8"
6939 "\x5d\x74\xbf\xb3\xfd\x95\x61\x85",
6940 .klen = 16,
6941 .input = "\xee\x54\xd1\x3e\xbc\xae\x70\x6d"
6942 "\x22\x6b\xc3\x14\x2c\xd4\x0d\x4a",
6943 .ilen = 16,
6944 .result = "\x83\xa2\xf8\xa2\x88\x64\x1f\xb9"
6945 "\xa4\xe9\xa5\xcc\x2f\x13\x1c\x7d",
6946 .rlen = 16,
6947 }, {
6948 .key = "\x28\xdb\xc3\xbc\x49\xff\xd8\x7d"
6949 "\xcf\xa5\x09\xb1\x1d\x42\x2b\xe7",
6950 .klen = 16,
6951 .input = "\x9b\x9b\x7b\xfc\xd1\x81\x3c\xb9"
6952 "\x5d\x0b\x36\x18\xf4\x0f\x51\x22",
6953 .ilen = 16,
6954 .result = "\xb4\x1e\x6b\xe2\xeb\xa8\x4a\x14"
6955 "\x8e\x2e\xed\x84\x59\x3c\x5e\xc7",
6956 .rlen = 16,
6957 }
6958};
6959
6960#define SALSA20_STREAM_ENC_TEST_VECTORS 5
6961static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
6962 /*
6963 * Testvectors from verified.test-vectors submitted to ECRYPT.
6964 * They are truncated to size 39, 64, 111, 129 to test a variety
6965 * of input length.
6966 */
6967 { /* Set 3, vector 0 */
6968 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
6969 "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
6970 .klen = 16,
6971 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
6972 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
6973 "\x00\x00\x00\x00\x00\x00\x00\x00"
6974 "\x00\x00\x00\x00\x00\x00\x00\x00"
6975 "\x00\x00\x00\x00\x00\x00\x00\x00"
6976 "\x00\x00\x00\x00\x00\x00\x00",
6977 .ilen = 39,
6978 .result = "\x2D\xD5\xC3\xF7\xBA\x2B\x20\xF7"
6979 "\x68\x02\x41\x0C\x68\x86\x88\x89"
6980 "\x5A\xD8\xC1\xBD\x4E\xA6\xC9\xB1"
6981 "\x40\xFB\x9B\x90\xE2\x10\x49\xBF"
6982 "\x58\x3F\x52\x79\x70\xEB\xC1",
6983 .rlen = 39,
6984 }, { /* Set 5, vector 0 */
6985 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
6986 "\x00\x00\x00\x00\x00\x00\x00\x00",
6987 .klen = 16,
6988 .iv = "\x80\x00\x00\x00\x00\x00\x00\x00",
6989 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
6990 "\x00\x00\x00\x00\x00\x00\x00\x00"
6991 "\x00\x00\x00\x00\x00\x00\x00\x00"
6992 "\x00\x00\x00\x00\x00\x00\x00\x00"
6993 "\x00\x00\x00\x00\x00\x00\x00\x00"
6994 "\x00\x00\x00\x00\x00\x00\x00\x00"
6995 "\x00\x00\x00\x00\x00\x00\x00\x00"
6996 "\x00\x00\x00\x00\x00\x00\x00\x00",
6997 .ilen = 64,
6998 .result = "\xB6\x6C\x1E\x44\x46\xDD\x95\x57"
6999 "\xE5\x78\xE2\x23\xB0\xB7\x68\x01"
7000 "\x7B\x23\xB2\x67\xBB\x02\x34\xAE"
7001 "\x46\x26\xBF\x44\x3F\x21\x97\x76"
7002 "\x43\x6F\xB1\x9F\xD0\xE8\x86\x6F"
7003 "\xCD\x0D\xE9\xA9\x53\x8F\x4A\x09"
7004 "\xCA\x9A\xC0\x73\x2E\x30\xBC\xF9"
7005 "\x8E\x4F\x13\xE4\xB9\xE2\x01\xD9",
7006 .rlen = 64,
7007 }, { /* Set 3, vector 27 */
7008 .key = "\x1B\x1C\x1D\x1E\x1F\x20\x21\x22"
7009 "\x23\x24\x25\x26\x27\x28\x29\x2A"
7010 "\x2B\x2C\x2D\x2E\x2F\x30\x31\x32"
7011 "\x33\x34\x35\x36\x37\x38\x39\x3A",
7012 .klen = 32,
7013 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00",
7014 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
7015 "\x00\x00\x00\x00\x00\x00\x00\x00"
7016 "\x00\x00\x00\x00\x00\x00\x00\x00"
7017 "\x00\x00\x00\x00\x00\x00\x00\x00"
7018 "\x00\x00\x00\x00\x00\x00\x00\x00"
7019 "\x00\x00\x00\x00\x00\x00\x00\x00"
7020 "\x00\x00\x00\x00\x00\x00\x00\x00"
7021 "\x00\x00\x00\x00\x00\x00\x00\x00"
7022 "\x00\x00\x00\x00\x00\x00\x00\x00"
7023 "\x00\x00\x00\x00\x00\x00\x00\x00"
7024 "\x00\x00\x00\x00\x00\x00\x00\x00"
7025 "\x00\x00\x00\x00\x00\x00\x00\x00"
7026 "\x00\x00\x00\x00\x00\x00\x00\x00"
7027 "\x00\x00\x00\x00\x00\x00\x00",
7028 .ilen = 111,
7029 .result = "\xAE\x39\x50\x8E\xAC\x9A\xEC\xE7"
7030 "\xBF\x97\xBB\x20\xB9\xDE\xE4\x1F"
7031 "\x87\xD9\x47\xF8\x28\x91\x35\x98"
7032 "\xDB\x72\xCC\x23\x29\x48\x56\x5E"
7033 "\x83\x7E\x0B\xF3\x7D\x5D\x38\x7B"
7034 "\x2D\x71\x02\xB4\x3B\xB5\xD8\x23"
7035 "\xB0\x4A\xDF\x3C\xEC\xB6\xD9\x3B"
7036 "\x9B\xA7\x52\xBE\xC5\xD4\x50\x59"
7037 "\x15\x14\xB4\x0E\x40\xE6\x53\xD1"
7038 "\x83\x9C\x5B\xA0\x92\x29\x6B\x5E"
7039 "\x96\x5B\x1E\x2F\xD3\xAC\xC1\x92"
7040 "\xB1\x41\x3F\x19\x2F\xC4\x3B\xC6"
7041 "\x95\x46\x45\x54\xE9\x75\x03\x08"
7042 "\x44\xAF\xE5\x8A\x81\x12\x09",
7043 .rlen = 111,
7044 }, { /* Set 5, vector 27 */
7045 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
7046 "\x00\x00\x00\x00\x00\x00\x00\x00"
7047 "\x00\x00\x00\x00\x00\x00\x00\x00"
7048 "\x00\x00\x00\x00\x00\x00\x00\x00",
7049 .klen = 32,
7050 .iv = "\x00\x00\x00\x10\x00\x00\x00\x00",
7051 .input = "\x00\x00\x00\x00\x00\x00\x00\x00"
7052 "\x00\x00\x00\x00\x00\x00\x00\x00"
7053 "\x00\x00\x00\x00\x00\x00\x00\x00"
7054 "\x00\x00\x00\x00\x00\x00\x00\x00"
7055 "\x00\x00\x00\x00\x00\x00\x00\x00"
7056 "\x00\x00\x00\x00\x00\x00\x00\x00"
7057 "\x00\x00\x00\x00\x00\x00\x00\x00"
7058 "\x00\x00\x00\x00\x00\x00\x00\x00"
7059 "\x00\x00\x00\x00\x00\x00\x00\x00"
7060 "\x00\x00\x00\x00\x00\x00\x00\x00"
7061 "\x00\x00\x00\x00\x00\x00\x00\x00"
7062 "\x00\x00\x00\x00\x00\x00\x00\x00"
7063 "\x00\x00\x00\x00\x00\x00\x00\x00"
7064 "\x00\x00\x00\x00\x00\x00\x00\x00"
7065 "\x00\x00\x00\x00\x00\x00\x00\x00"
7066 "\x00\x00\x00\x00\x00\x00\x00\x00"
7067 "\x00",
7068 .ilen = 129,
7069 .result = "\xD2\xDB\x1A\x5C\xF1\xC1\xAC\xDB"
7070 "\xE8\x1A\x7A\x43\x40\xEF\x53\x43"
7071 "\x5E\x7F\x4B\x1A\x50\x52\x3F\x8D"
7072 "\x28\x3D\xCF\x85\x1D\x69\x6E\x60"
7073 "\xF2\xDE\x74\x56\x18\x1B\x84\x10"
7074 "\xD4\x62\xBA\x60\x50\xF0\x61\xF2"
7075 "\x1C\x78\x7F\xC1\x24\x34\xAF\x58"
7076 "\xBF\x2C\x59\xCA\x90\x77\xF3\xB0"
7077 "\x5B\x4A\xDF\x89\xCE\x2C\x2F\xFC"
7078 "\x67\xF0\xE3\x45\xE8\xB3\xB3\x75"
7079 "\xA0\x95\x71\xA1\x29\x39\x94\xCA"
7080 "\x45\x2F\xBD\xCB\x10\xB6\xBE\x9F"
7081 "\x8E\xF9\xB2\x01\x0A\x5A\x0A\xB7"
7082 "\x6B\x9D\x70\x8E\x4B\xD6\x2F\xCD"
7083 "\x2E\x40\x48\x75\xE9\xE2\x21\x45"
7084 "\x0B\xC9\xB6\xB5\x66\xBC\x9A\x59"
7085 "\x5A",
7086 .rlen = 129,
7087 }, { /* large test vector generated using Crypto++ */
7088 .key = "\x00\x01\x02\x03\x04\x05\x06\x07"
7089 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
7090 "\x10\x11\x12\x13\x14\x15\x16\x17"
7091 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f",
7092 .klen = 32,
7093 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
7094 "\x00\x00\x00\x00\x00\x00\x00\x00",
7095 .input =
7096 "\x00\x01\x02\x03\x04\x05\x06\x07"
7097 "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
7098 "\x10\x11\x12\x13\x14\x15\x16\x17"
7099 "\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
7100 "\x20\x21\x22\x23\x24\x25\x26\x27"
7101 "\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
7102 "\x30\x31\x32\x33\x34\x35\x36\x37"
7103 "\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
7104 "\x40\x41\x42\x43\x44\x45\x46\x47"
7105 "\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
7106 "\x50\x51\x52\x53\x54\x55\x56\x57"
7107 "\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
7108 "\x60\x61\x62\x63\x64\x65\x66\x67"
7109 "\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
7110 "\x70\x71\x72\x73\x74\x75\x76\x77"
7111 "\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
7112 "\x80\x81\x82\x83\x84\x85\x86\x87"
7113 "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
7114 "\x90\x91\x92\x93\x94\x95\x96\x97"
7115 "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
7116 "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
7117 "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
7118 "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
7119 "\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
7120 "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
7121 "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
7122 "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
7123 "\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
7124 "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
7125 "\xe8\xe9\xea\xeb\xec\xed\xee\xef"
7126 "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
7127 "\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
7128 "\x00\x03\x06\x09\x0c\x0f\x12\x15"
7129 "\x18\x1b\x1e\x21\x24\x27\x2a\x2d"
7130 "\x30\x33\x36\x39\x3c\x3f\x42\x45"
7131 "\x48\x4b\x4e\x51\x54\x57\x5a\x5d"
7132 "\x60\x63\x66\x69\x6c\x6f\x72\x75"
7133 "\x78\x7b\x7e\x81\x84\x87\x8a\x8d"
7134 "\x90\x93\x96\x99\x9c\x9f\xa2\xa5"
7135 "\xa8\xab\xae\xb1\xb4\xb7\xba\xbd"
7136 "\xc0\xc3\xc6\xc9\xcc\xcf\xd2\xd5"
7137 "\xd8\xdb\xde\xe1\xe4\xe7\xea\xed"
7138 "\xf0\xf3\xf6\xf9\xfc\xff\x02\x05"
7139 "\x08\x0b\x0e\x11\x14\x17\x1a\x1d"
7140 "\x20\x23\x26\x29\x2c\x2f\x32\x35"
7141 "\x38\x3b\x3e\x41\x44\x47\x4a\x4d"
7142 "\x50\x53\x56\x59\x5c\x5f\x62\x65"
7143 "\x68\x6b\x6e\x71\x74\x77\x7a\x7d"
7144 "\x80\x83\x86\x89\x8c\x8f\x92\x95"
7145 "\x98\x9b\x9e\xa1\xa4\xa7\xaa\xad"
7146 "\xb0\xb3\xb6\xb9\xbc\xbf\xc2\xc5"
7147 "\xc8\xcb\xce\xd1\xd4\xd7\xda\xdd"
7148 "\xe0\xe3\xe6\xe9\xec\xef\xf2\xf5"
7149 "\xf8\xfb\xfe\x01\x04\x07\x0a\x0d"
7150 "\x10\x13\x16\x19\x1c\x1f\x22\x25"
7151 "\x28\x2b\x2e\x31\x34\x37\x3a\x3d"
7152 "\x40\x43\x46\x49\x4c\x4f\x52\x55"
7153 "\x58\x5b\x5e\x61\x64\x67\x6a\x6d"
7154 "\x70\x73\x76\x79\x7c\x7f\x82\x85"
7155 "\x88\x8b\x8e\x91\x94\x97\x9a\x9d"
7156 "\xa0\xa3\xa6\xa9\xac\xaf\xb2\xb5"
7157 "\xb8\xbb\xbe\xc1\xc4\xc7\xca\xcd"
7158 "\xd0\xd3\xd6\xd9\xdc\xdf\xe2\xe5"
7159 "\xe8\xeb\xee\xf1\xf4\xf7\xfa\xfd"
7160 "\x00\x05\x0a\x0f\x14\x19\x1e\x23"
7161 "\x28\x2d\x32\x37\x3c\x41\x46\x4b"
7162 "\x50\x55\x5a\x5f\x64\x69\x6e\x73"
7163 "\x78\x7d\x82\x87\x8c\x91\x96\x9b"
7164 "\xa0\xa5\xaa\xaf\xb4\xb9\xbe\xc3"
7165 "\xc8\xcd\xd2\xd7\xdc\xe1\xe6\xeb"
7166 "\xf0\xf5\xfa\xff\x04\x09\x0e\x13"
7167 "\x18\x1d\x22\x27\x2c\x31\x36\x3b"
7168 "\x40\x45\x4a\x4f\x54\x59\x5e\x63"
7169 "\x68\x6d\x72\x77\x7c\x81\x86\x8b"
7170 "\x90\x95\x9a\x9f\xa4\xa9\xae\xb3"
7171 "\xb8\xbd\xc2\xc7\xcc\xd1\xd6\xdb"
7172 "\xe0\xe5\xea\xef\xf4\xf9\xfe\x03"
7173 "\x08\x0d\x12\x17\x1c\x21\x26\x2b"
7174 "\x30\x35\x3a\x3f\x44\x49\x4e\x53"
7175 "\x58\x5d\x62\x67\x6c\x71\x76\x7b"
7176 "\x80\x85\x8a\x8f\x94\x99\x9e\xa3"
7177 "\xa8\xad\xb2\xb7\xbc\xc1\xc6\xcb"
7178 "\xd0\xd5\xda\xdf\xe4\xe9\xee\xf3"
7179 "\xf8\xfd\x02\x07\x0c\x11\x16\x1b"
7180 "\x20\x25\x2a\x2f\x34\x39\x3e\x43"
7181 "\x48\x4d\x52\x57\x5c\x61\x66\x6b"
7182 "\x70\x75\x7a\x7f\x84\x89\x8e\x93"
7183 "\x98\x9d\xa2\xa7\xac\xb1\xb6\xbb"
7184 "\xc0\xc5\xca\xcf\xd4\xd9\xde\xe3"
7185 "\xe8\xed\xf2\xf7\xfc\x01\x06\x0b"
7186 "\x10\x15\x1a\x1f\x24\x29\x2e\x33"
7187 "\x38\x3d\x42\x47\x4c\x51\x56\x5b"
7188 "\x60\x65\x6a\x6f\x74\x79\x7e\x83"
7189 "\x88\x8d\x92\x97\x9c\xa1\xa6\xab"
7190 "\xb0\xb5\xba\xbf\xc4\xc9\xce\xd3"
7191 "\xd8\xdd\xe2\xe7\xec\xf1\xf6\xfb"
7192 "\x00\x07\x0e\x15\x1c\x23\x2a\x31"
7193 "\x38\x3f\x46\x4d\x54\x5b\x62\x69"
7194 "\x70\x77\x7e\x85\x8c\x93\x9a\xa1"
7195 "\xa8\xaf\xb6\xbd\xc4\xcb\xd2\xd9"
7196 "\xe0\xe7\xee\xf5\xfc\x03\x0a\x11"
7197 "\x18\x1f\x26\x2d\x34\x3b\x42\x49"
7198 "\x50\x57\x5e\x65\x6c\x73\x7a\x81"
7199 "\x88\x8f\x96\x9d\xa4\xab\xb2\xb9"
7200 "\xc0\xc7\xce\xd5\xdc\xe3\xea\xf1"
7201 "\xf8\xff\x06\x0d\x14\x1b\x22\x29"
7202 "\x30\x37\x3e\x45\x4c\x53\x5a\x61"
7203 "\x68\x6f\x76\x7d\x84\x8b\x92\x99"
7204 "\xa0\xa7\xae\xb5\xbc\xc3\xca\xd1"
7205 "\xd8\xdf\xe6\xed\xf4\xfb\x02\x09"
7206 "\x10\x17\x1e\x25\x2c\x33\x3a\x41"
7207 "\x48\x4f\x56\x5d\x64\x6b\x72\x79"
7208 "\x80\x87\x8e\x95\x9c\xa3\xaa\xb1"
7209 "\xb8\xbf\xc6\xcd\xd4\xdb\xe2\xe9"
7210 "\xf0\xf7\xfe\x05\x0c\x13\x1a\x21"
7211 "\x28\x2f\x36\x3d\x44\x4b\x52\x59"
7212 "\x60\x67\x6e\x75\x7c\x83\x8a\x91"
7213 "\x98\x9f\xa6\xad\xb4\xbb\xc2\xc9"
7214 "\xd0\xd7\xde\xe5\xec\xf3\xfa\x01"
7215 "\x08\x0f\x16\x1d\x24\x2b\x32\x39"
7216 "\x40\x47\x4e\x55\x5c\x63\x6a\x71"
7217 "\x78\x7f\x86\x8d\x94\x9b\xa2\xa9"
7218 "\xb0\xb7\xbe\xc5\xcc\xd3\xda\xe1"
7219 "\xe8\xef\xf6\xfd\x04\x0b\x12\x19"
7220 "\x20\x27\x2e\x35\x3c\x43\x4a\x51"
7221 "\x58\x5f\x66\x6d\x74\x7b\x82\x89"
7222 "\x90\x97\x9e\xa5\xac\xb3\xba\xc1"
7223 "\xc8\xcf\xd6\xdd\xe4\xeb\xf2\xf9"
7224 "\x00\x09\x12\x1b\x24\x2d\x36\x3f"
7225 "\x48\x51\x5a\x63\x6c\x75\x7e\x87"
7226 "\x90\x99\xa2\xab\xb4\xbd\xc6\xcf"
7227 "\xd8\xe1\xea\xf3\xfc\x05\x0e\x17"
7228 "\x20\x29\x32\x3b\x44\x4d\x56\x5f"
7229 "\x68\x71\x7a\x83\x8c\x95\x9e\xa7"
7230 "\xb0\xb9\xc2\xcb\xd4\xdd\xe6\xef"
7231 "\xf8\x01\x0a\x13\x1c\x25\x2e\x37"
7232 "\x40\x49\x52\x5b\x64\x6d\x76\x7f"
7233 "\x88\x91\x9a\xa3\xac\xb5\xbe\xc7"
7234 "\xd0\xd9\xe2\xeb\xf4\xfd\x06\x0f"
7235 "\x18\x21\x2a\x33\x3c\x45\x4e\x57"
7236 "\x60\x69\x72\x7b\x84\x8d\x96\x9f"
7237 "\xa8\xb1\xba\xc3\xcc\xd5\xde\xe7"
7238 "\xf0\xf9\x02\x0b\x14\x1d\x26\x2f"
7239 "\x38\x41\x4a\x53\x5c\x65\x6e\x77"
7240 "\x80\x89\x92\x9b\xa4\xad\xb6\xbf"
7241 "\xc8\xd1\xda\xe3\xec\xf5\xfe\x07"
7242 "\x10\x19\x22\x2b\x34\x3d\x46\x4f"
7243 "\x58\x61\x6a\x73\x7c\x85\x8e\x97"
7244 "\xa0\xa9\xb2\xbb\xc4\xcd\xd6\xdf"
7245 "\xe8\xf1\xfa\x03\x0c\x15\x1e\x27"
7246 "\x30\x39\x42\x4b\x54\x5d\x66\x6f"
7247 "\x78\x81\x8a\x93\x9c\xa5\xae\xb7"
7248 "\xc0\xc9\xd2\xdb\xe4\xed\xf6\xff"
7249 "\x08\x11\x1a\x23\x2c\x35\x3e\x47"
7250 "\x50\x59\x62\x6b\x74\x7d\x86\x8f"
7251 "\x98\xa1\xaa\xb3\xbc\xc5\xce\xd7"
7252 "\xe0\xe9\xf2\xfb\x04\x0d\x16\x1f"
7253 "\x28\x31\x3a\x43\x4c\x55\x5e\x67"
7254 "\x70\x79\x82\x8b\x94\x9d\xa6\xaf"
7255 "\xb8\xc1\xca\xd3\xdc\xe5\xee\xf7"
7256 "\x00\x0b\x16\x21\x2c\x37\x42\x4d"
7257 "\x58\x63\x6e\x79\x84\x8f\x9a\xa5"
7258 "\xb0\xbb\xc6\xd1\xdc\xe7\xf2\xfd"
7259 "\x08\x13\x1e\x29\x34\x3f\x4a\x55"
7260 "\x60\x6b\x76\x81\x8c\x97\xa2\xad"
7261 "\xb8\xc3\xce\xd9\xe4\xef\xfa\x05"
7262 "\x10\x1b\x26\x31\x3c\x47\x52\x5d"
7263 "\x68\x73\x7e\x89\x94\x9f\xaa\xb5"
7264 "\xc0\xcb\xd6\xe1\xec\xf7\x02\x0d"
7265 "\x18\x23\x2e\x39\x44\x4f\x5a\x65"
7266 "\x70\x7b\x86\x91\x9c\xa7\xb2\xbd"
7267 "\xc8\xd3\xde\xe9\xf4\xff\x0a\x15"
7268 "\x20\x2b\x36\x41\x4c\x57\x62\x6d"
7269 "\x78\x83\x8e\x99\xa4\xaf\xba\xc5"
7270 "\xd0\xdb\xe6\xf1\xfc\x07\x12\x1d"
7271 "\x28\x33\x3e\x49\x54\x5f\x6a\x75"
7272 "\x80\x8b\x96\xa1\xac\xb7\xc2\xcd"
7273 "\xd8\xe3\xee\xf9\x04\x0f\x1a\x25"
7274 "\x30\x3b\x46\x51\x5c\x67\x72\x7d"
7275 "\x88\x93\x9e\xa9\xb4\xbf\xca\xd5"
7276 "\xe0\xeb\xf6\x01\x0c\x17\x22\x2d"
7277 "\x38\x43\x4e\x59\x64\x6f\x7a\x85"
7278 "\x90\x9b\xa6\xb1\xbc\xc7\xd2\xdd"
7279 "\xe8\xf3\xfe\x09\x14\x1f\x2a\x35"
7280 "\x40\x4b\x56\x61\x6c\x77\x82\x8d"
7281 "\x98\xa3\xae\xb9\xc4\xcf\xda\xe5"
7282 "\xf0\xfb\x06\x11\x1c\x27\x32\x3d"
7283 "\x48\x53\x5e\x69\x74\x7f\x8a\x95"
7284 "\xa0\xab\xb6\xc1\xcc\xd7\xe2\xed"
7285 "\xf8\x03\x0e\x19\x24\x2f\x3a\x45"
7286 "\x50\x5b\x66\x71\x7c\x87\x92\x9d"
7287 "\xa8\xb3\xbe\xc9\xd4\xdf\xea\xf5"
7288 "\x00\x0d\x1a\x27\x34\x41\x4e\x5b"
7289 "\x68\x75\x82\x8f\x9c\xa9\xb6\xc3"
7290 "\xd0\xdd\xea\xf7\x04\x11\x1e\x2b"
7291 "\x38\x45\x52\x5f\x6c\x79\x86\x93"
7292 "\xa0\xad\xba\xc7\xd4\xe1\xee\xfb"
7293 "\x08\x15\x22\x2f\x3c\x49\x56\x63"
7294 "\x70\x7d\x8a\x97\xa4\xb1\xbe\xcb"
7295 "\xd8\xe5\xf2\xff\x0c\x19\x26\x33"
7296 "\x40\x4d\x5a\x67\x74\x81\x8e\x9b"
7297 "\xa8\xb5\xc2\xcf\xdc\xe9\xf6\x03"
7298 "\x10\x1d\x2a\x37\x44\x51\x5e\x6b"
7299 "\x78\x85\x92\x9f\xac\xb9\xc6\xd3"
7300 "\xe0\xed\xfa\x07\x14\x21\x2e\x3b"
7301 "\x48\x55\x62\x6f\x7c\x89\x96\xa3"
7302 "\xb0\xbd\xca\xd7\xe4\xf1\xfe\x0b"
7303 "\x18\x25\x32\x3f\x4c\x59\x66\x73"
7304 "\x80\x8d\x9a\xa7\xb4\xc1\xce\xdb"
7305 "\xe8\xf5\x02\x0f\x1c\x29\x36\x43"
7306 "\x50\x5d\x6a\x77\x84\x91\x9e\xab"
7307 "\xb8\xc5\xd2\xdf\xec\xf9\x06\x13"
7308 "\x20\x2d\x3a\x47\x54\x61\x6e\x7b"
7309 "\x88\x95\xa2\xaf\xbc\xc9\xd6\xe3"
7310 "\xf0\xfd\x0a\x17\x24\x31\x3e\x4b"
7311 "\x58\x65\x72\x7f\x8c\x99\xa6\xb3"
7312 "\xc0\xcd\xda\xe7\xf4\x01\x0e\x1b"
7313 "\x28\x35\x42\x4f\x5c\x69\x76\x83"
7314 "\x90\x9d\xaa\xb7\xc4\xd1\xde\xeb"
7315 "\xf8\x05\x12\x1f\x2c\x39\x46\x53"
7316 "\x60\x6d\x7a\x87\x94\xa1\xae\xbb"
7317 "\xc8\xd5\xe2\xef\xfc\x09\x16\x23"
7318 "\x30\x3d\x4a\x57\x64\x71\x7e\x8b"
7319 "\x98\xa5\xb2\xbf\xcc\xd9\xe6\xf3"
7320 "\x00\x0f\x1e\x2d\x3c\x4b\x5a\x69"
7321 "\x78\x87\x96\xa5\xb4\xc3\xd2\xe1"
7322 "\xf0\xff\x0e\x1d\x2c\x3b\x4a\x59"
7323 "\x68\x77\x86\x95\xa4\xb3\xc2\xd1"
7324 "\xe0\xef\xfe\x0d\x1c\x2b\x3a\x49"
7325 "\x58\x67\x76\x85\x94\xa3\xb2\xc1"
7326 "\xd0\xdf\xee\xfd\x0c\x1b\x2a\x39"
7327 "\x48\x57\x66\x75\x84\x93\xa2\xb1"
7328 "\xc0\xcf\xde\xed\xfc\x0b\x1a\x29"
7329 "\x38\x47\x56\x65\x74\x83\x92\xa1"
7330 "\xb0\xbf\xce\xdd\xec\xfb\x0a\x19"
7331 "\x28\x37\x46\x55\x64\x73\x82\x91"
7332 "\xa0\xaf\xbe\xcd\xdc\xeb\xfa\x09"
7333 "\x18\x27\x36\x45\x54\x63\x72\x81"
7334 "\x90\x9f\xae\xbd\xcc\xdb\xea\xf9"
7335 "\x08\x17\x26\x35\x44\x53\x62\x71"
7336 "\x80\x8f\x9e\xad\xbc\xcb\xda\xe9"
7337 "\xf8\x07\x16\x25\x34\x43\x52\x61"
7338 "\x70\x7f\x8e\x9d\xac\xbb\xca\xd9"
7339 "\xe8\xf7\x06\x15\x24\x33\x42\x51"
7340 "\x60\x6f\x7e\x8d\x9c\xab\xba\xc9"
7341 "\xd8\xe7\xf6\x05\x14\x23\x32\x41"
7342 "\x50\x5f\x6e\x7d\x8c\x9b\xaa\xb9"
7343 "\xc8\xd7\xe6\xf5\x04\x13\x22\x31"
7344 "\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9"
7345 "\xb8\xc7\xd6\xe5\xf4\x03\x12\x21"
7346 "\x30\x3f\x4e\x5d\x6c\x7b\x8a\x99"
7347 "\xa8\xb7\xc6\xd5\xe4\xf3\x02\x11"
7348 "\x20\x2f\x3e\x4d\x5c\x6b\x7a\x89"
7349 "\x98\xa7\xb6\xc5\xd4\xe3\xf2\x01"
7350 "\x10\x1f\x2e\x3d\x4c\x5b\x6a\x79"
7351 "\x88\x97\xa6\xb5\xc4\xd3\xe2\xf1"
7352 "\x00\x11\x22\x33\x44\x55\x66\x77"
7353 "\x88\x99\xaa\xbb\xcc\xdd\xee\xff"
7354 "\x10\x21\x32\x43\x54\x65\x76\x87"
7355 "\x98\xa9\xba\xcb\xdc\xed\xfe\x0f"
7356 "\x20\x31\x42\x53\x64\x75\x86\x97"
7357 "\xa8\xb9\xca\xdb\xec\xfd\x0e\x1f"
7358 "\x30\x41\x52\x63\x74\x85\x96\xa7"
7359 "\xb8\xc9\xda\xeb\xfc\x0d\x1e\x2f"
7360 "\x40\x51\x62\x73\x84\x95\xa6\xb7"
7361 "\xc8\xd9\xea\xfb\x0c\x1d\x2e\x3f"
7362 "\x50\x61\x72\x83\x94\xa5\xb6\xc7"
7363 "\xd8\xe9\xfa\x0b\x1c\x2d\x3e\x4f"
7364 "\x60\x71\x82\x93\xa4\xb5\xc6\xd7"
7365 "\xe8\xf9\x0a\x1b\x2c\x3d\x4e\x5f"
7366 "\x70\x81\x92\xa3\xb4\xc5\xd6\xe7"
7367 "\xf8\x09\x1a\x2b\x3c\x4d\x5e\x6f"
7368 "\x80\x91\xa2\xb3\xc4\xd5\xe6\xf7"
7369 "\x08\x19\x2a\x3b\x4c\x5d\x6e\x7f"
7370 "\x90\xa1\xb2\xc3\xd4\xe5\xf6\x07"
7371 "\x18\x29\x3a\x4b\x5c\x6d\x7e\x8f"
7372 "\xa0\xb1\xc2\xd3\xe4\xf5\x06\x17"
7373 "\x28\x39\x4a\x5b\x6c\x7d\x8e\x9f"
7374 "\xb0\xc1\xd2\xe3\xf4\x05\x16\x27"
7375 "\x38\x49\x5a\x6b\x7c\x8d\x9e\xaf"
7376 "\xc0\xd1\xe2\xf3\x04\x15\x26\x37"
7377 "\x48\x59\x6a\x7b\x8c\x9d\xae\xbf"
7378 "\xd0\xe1\xf2\x03\x14\x25\x36\x47"
7379 "\x58\x69\x7a\x8b\x9c\xad\xbe\xcf"
7380 "\xe0\xf1\x02\x13\x24\x35\x46\x57"
7381 "\x68\x79\x8a\x9b\xac\xbd\xce\xdf"
7382 "\xf0\x01\x12\x23\x34\x45\x56\x67"
7383 "\x78\x89\x9a\xab\xbc\xcd\xde\xef"
7384 "\x00\x13\x26\x39\x4c\x5f\x72\x85"
7385 "\x98\xab\xbe\xd1\xe4\xf7\x0a\x1d"
7386 "\x30\x43\x56\x69\x7c\x8f\xa2\xb5"
7387 "\xc8\xdb\xee\x01\x14\x27\x3a\x4d"
7388 "\x60\x73\x86\x99\xac\xbf\xd2\xe5"
7389 "\xf8\x0b\x1e\x31\x44\x57\x6a\x7d"
7390 "\x90\xa3\xb6\xc9\xdc\xef\x02\x15"
7391 "\x28\x3b\x4e\x61\x74\x87\x9a\xad"
7392 "\xc0\xd3\xe6\xf9\x0c\x1f\x32\x45"
7393 "\x58\x6b\x7e\x91\xa4\xb7\xca\xdd"
7394 "\xf0\x03\x16\x29\x3c\x4f\x62\x75"
7395 "\x88\x9b\xae\xc1\xd4\xe7\xfa\x0d"
7396 "\x20\x33\x46\x59\x6c\x7f\x92\xa5"
7397 "\xb8\xcb\xde\xf1\x04\x17\x2a\x3d"
7398 "\x50\x63\x76\x89\x9c\xaf\xc2\xd5"
7399 "\xe8\xfb\x0e\x21\x34\x47\x5a\x6d"
7400 "\x80\x93\xa6\xb9\xcc\xdf\xf2\x05"
7401 "\x18\x2b\x3e\x51\x64\x77\x8a\x9d"
7402 "\xb0\xc3\xd6\xe9\xfc\x0f\x22\x35"
7403 "\x48\x5b\x6e\x81\x94\xa7\xba\xcd"
7404 "\xe0\xf3\x06\x19\x2c\x3f\x52\x65"
7405 "\x78\x8b\x9e\xb1\xc4\xd7\xea\xfd"
7406 "\x10\x23\x36\x49\x5c\x6f\x82\x95"
7407 "\xa8\xbb\xce\xe1\xf4\x07\x1a\x2d"
7408 "\x40\x53\x66\x79\x8c\x9f\xb2\xc5"
7409 "\xd8\xeb\xfe\x11\x24\x37\x4a\x5d"
7410 "\x70\x83\x96\xa9\xbc\xcf\xe2\xf5"
7411 "\x08\x1b\x2e\x41\x54\x67\x7a\x8d"
7412 "\xa0\xb3\xc6\xd9\xec\xff\x12\x25"
7413 "\x38\x4b\x5e\x71\x84\x97\xaa\xbd"
7414 "\xd0\xe3\xf6\x09\x1c\x2f\x42\x55"
7415 "\x68\x7b\x8e\xa1\xb4\xc7\xda\xed"
7416 "\x00\x15\x2a\x3f\x54\x69\x7e\x93"
7417 "\xa8\xbd\xd2\xe7\xfc\x11\x26\x3b"
7418 "\x50\x65\x7a\x8f\xa4\xb9\xce\xe3"
7419 "\xf8\x0d\x22\x37\x4c\x61\x76\x8b"
7420 "\xa0\xb5\xca\xdf\xf4\x09\x1e\x33"
7421 "\x48\x5d\x72\x87\x9c\xb1\xc6\xdb"
7422 "\xf0\x05\x1a\x2f\x44\x59\x6e\x83"
7423 "\x98\xad\xc2\xd7\xec\x01\x16\x2b"
7424 "\x40\x55\x6a\x7f\x94\xa9\xbe\xd3"
7425 "\xe8\xfd\x12\x27\x3c\x51\x66\x7b"
7426 "\x90\xa5\xba\xcf\xe4\xf9\x0e\x23"
7427 "\x38\x4d\x62\x77\x8c\xa1\xb6\xcb"
7428 "\xe0\xf5\x0a\x1f\x34\x49\x5e\x73"
7429 "\x88\x9d\xb2\xc7\xdc\xf1\x06\x1b"
7430 "\x30\x45\x5a\x6f\x84\x99\xae\xc3"
7431 "\xd8\xed\x02\x17\x2c\x41\x56\x6b"
7432 "\x80\x95\xaa\xbf\xd4\xe9\xfe\x13"
7433 "\x28\x3d\x52\x67\x7c\x91\xa6\xbb"
7434 "\xd0\xe5\xfa\x0f\x24\x39\x4e\x63"
7435 "\x78\x8d\xa2\xb7\xcc\xe1\xf6\x0b"
7436 "\x20\x35\x4a\x5f\x74\x89\x9e\xb3"
7437 "\xc8\xdd\xf2\x07\x1c\x31\x46\x5b"
7438 "\x70\x85\x9a\xaf\xc4\xd9\xee\x03"
7439 "\x18\x2d\x42\x57\x6c\x81\x96\xab"
7440 "\xc0\xd5\xea\xff\x14\x29\x3e\x53"
7441 "\x68\x7d\x92\xa7\xbc\xd1\xe6\xfb"
7442 "\x10\x25\x3a\x4f\x64\x79\x8e\xa3"
7443 "\xb8\xcd\xe2\xf7\x0c\x21\x36\x4b"
7444 "\x60\x75\x8a\x9f\xb4\xc9\xde\xf3"
7445 "\x08\x1d\x32\x47\x5c\x71\x86\x9b"
7446 "\xb0\xc5\xda\xef\x04\x19\x2e\x43"
7447 "\x58\x6d\x82\x97\xac\xc1\xd6\xeb"
7448 "\x00\x17\x2e\x45\x5c\x73\x8a\xa1"
7449 "\xb8\xcf\xe6\xfd\x14\x2b\x42\x59"
7450 "\x70\x87\x9e\xb5\xcc\xe3\xfa\x11"
7451 "\x28\x3f\x56\x6d\x84\x9b\xb2\xc9"
7452 "\xe0\xf7\x0e\x25\x3c\x53\x6a\x81"
7453 "\x98\xaf\xc6\xdd\xf4\x0b\x22\x39"
7454 "\x50\x67\x7e\x95\xac\xc3\xda\xf1"
7455 "\x08\x1f\x36\x4d\x64\x7b\x92\xa9"
7456 "\xc0\xd7\xee\x05\x1c\x33\x4a\x61"
7457 "\x78\x8f\xa6\xbd\xd4\xeb\x02\x19"
7458 "\x30\x47\x5e\x75\x8c\xa3\xba\xd1"
7459 "\xe8\xff\x16\x2d\x44\x5b\x72\x89"
7460 "\xa0\xb7\xce\xe5\xfc\x13\x2a\x41"
7461 "\x58\x6f\x86\x9d\xb4\xcb\xe2\xf9"
7462 "\x10\x27\x3e\x55\x6c\x83\x9a\xb1"
7463 "\xc8\xdf\xf6\x0d\x24\x3b\x52\x69"
7464 "\x80\x97\xae\xc5\xdc\xf3\x0a\x21"
7465 "\x38\x4f\x66\x7d\x94\xab\xc2\xd9"
7466 "\xf0\x07\x1e\x35\x4c\x63\x7a\x91"
7467 "\xa8\xbf\xd6\xed\x04\x1b\x32\x49"
7468 "\x60\x77\x8e\xa5\xbc\xd3\xea\x01"
7469 "\x18\x2f\x46\x5d\x74\x8b\xa2\xb9"
7470 "\xd0\xe7\xfe\x15\x2c\x43\x5a\x71"
7471 "\x88\x9f\xb6\xcd\xe4\xfb\x12\x29"
7472 "\x40\x57\x6e\x85\x9c\xb3\xca\xe1"
7473 "\xf8\x0f\x26\x3d\x54\x6b\x82\x99"
7474 "\xb0\xc7\xde\xf5\x0c\x23\x3a\x51"
7475 "\x68\x7f\x96\xad\xc4\xdb\xf2\x09"
7476 "\x20\x37\x4e\x65\x7c\x93\xaa\xc1"
7477 "\xd8\xef\x06\x1d\x34\x4b\x62\x79"
7478 "\x90\xa7\xbe\xd5\xec\x03\x1a\x31"
7479 "\x48\x5f\x76\x8d\xa4\xbb\xd2\xe9"
7480 "\x00\x19\x32\x4b\x64\x7d\x96\xaf"
7481 "\xc8\xe1\xfa\x13\x2c\x45\x5e\x77"
7482 "\x90\xa9\xc2\xdb\xf4\x0d\x26\x3f"
7483 "\x58\x71\x8a\xa3\xbc\xd5\xee\x07"
7484 "\x20\x39\x52\x6b\x84\x9d\xb6\xcf"
7485 "\xe8\x01\x1a\x33\x4c\x65\x7e\x97"
7486 "\xb0\xc9\xe2\xfb\x14\x2d\x46\x5f"
7487 "\x78\x91\xaa\xc3\xdc\xf5\x0e\x27"
7488 "\x40\x59\x72\x8b\xa4\xbd\xd6\xef"
7489 "\x08\x21\x3a\x53\x6c\x85\x9e\xb7"
7490 "\xd0\xe9\x02\x1b\x34\x4d\x66\x7f"
7491 "\x98\xb1\xca\xe3\xfc\x15\x2e\x47"
7492 "\x60\x79\x92\xab\xc4\xdd\xf6\x0f"
7493 "\x28\x41\x5a\x73\x8c\xa5\xbe\xd7"
7494 "\xf0\x09\x22\x3b\x54\x6d\x86\x9f"
7495 "\xb8\xd1\xea\x03\x1c\x35\x4e\x67"
7496 "\x80\x99\xb2\xcb\xe4\xfd\x16\x2f"
7497 "\x48\x61\x7a\x93\xac\xc5\xde\xf7"
7498 "\x10\x29\x42\x5b\x74\x8d\xa6\xbf"
7499 "\xd8\xf1\x0a\x23\x3c\x55\x6e\x87"
7500 "\xa0\xb9\xd2\xeb\x04\x1d\x36\x4f"
7501 "\x68\x81\x9a\xb3\xcc\xe5\xfe\x17"
7502 "\x30\x49\x62\x7b\x94\xad\xc6\xdf"
7503 "\xf8\x11\x2a\x43\x5c\x75\x8e\xa7"
7504 "\xc0\xd9\xf2\x0b\x24\x3d\x56\x6f"
7505 "\x88\xa1\xba\xd3\xec\x05\x1e\x37"
7506 "\x50\x69\x82\x9b\xb4\xcd\xe6\xff"
7507 "\x18\x31\x4a\x63\x7c\x95\xae\xc7"
7508 "\xe0\xf9\x12\x2b\x44\x5d\x76\x8f"
7509 "\xa8\xc1\xda\xf3\x0c\x25\x3e\x57"
7510 "\x70\x89\xa2\xbb\xd4\xed\x06\x1f"
7511 "\x38\x51\x6a\x83\x9c\xb5\xce\xe7"
7512 "\x00\x1b\x36\x51\x6c\x87\xa2\xbd"
7513 "\xd8\xf3\x0e\x29\x44\x5f\x7a\x95"
7514 "\xb0\xcb\xe6\x01\x1c\x37\x52\x6d"
7515 "\x88\xa3\xbe\xd9\xf4\x0f\x2a\x45"
7516 "\x60\x7b\x96\xb1\xcc\xe7\x02\x1d"
7517 "\x38\x53\x6e\x89\xa4\xbf\xda\xf5"
7518 "\x10\x2b\x46\x61\x7c\x97\xb2\xcd"
7519 "\xe8\x03\x1e\x39\x54\x6f\x8a\xa5"
7520 "\xc0\xdb\xf6\x11\x2c\x47\x62\x7d"
7521 "\x98\xb3\xce\xe9\x04\x1f\x3a\x55"
7522 "\x70\x8b\xa6\xc1\xdc\xf7\x12\x2d"
7523 "\x48\x63\x7e\x99\xb4\xcf\xea\x05"
7524 "\x20\x3b\x56\x71\x8c\xa7\xc2\xdd"
7525 "\xf8\x13\x2e\x49\x64\x7f\x9a\xb5"
7526 "\xd0\xeb\x06\x21\x3c\x57\x72\x8d"
7527 "\xa8\xc3\xde\xf9\x14\x2f\x4a\x65"
7528 "\x80\x9b\xb6\xd1\xec\x07\x22\x3d"
7529 "\x58\x73\x8e\xa9\xc4\xdf\xfa\x15"
7530 "\x30\x4b\x66\x81\x9c\xb7\xd2\xed"
7531 "\x08\x23\x3e\x59\x74\x8f\xaa\xc5"
7532 "\xe0\xfb\x16\x31\x4c\x67\x82\x9d"
7533 "\xb8\xd3\xee\x09\x24\x3f\x5a\x75"
7534 "\x90\xab\xc6\xe1\xfc\x17\x32\x4d"
7535 "\x68\x83\x9e\xb9\xd4\xef\x0a\x25"
7536 "\x40\x5b\x76\x91\xac\xc7\xe2\xfd"
7537 "\x18\x33\x4e\x69\x84\x9f\xba\xd5"
7538 "\xf0\x0b\x26\x41\x5c\x77\x92\xad"
7539 "\xc8\xe3\xfe\x19\x34\x4f\x6a\x85"
7540 "\xa0\xbb\xd6\xf1\x0c\x27\x42\x5d"
7541 "\x78\x93\xae\xc9\xe4\xff\x1a\x35"
7542 "\x50\x6b\x86\xa1\xbc\xd7\xf2\x0d"
7543 "\x28\x43\x5e\x79\x94\xaf\xca\xe5"
7544 "\x00\x1d\x3a\x57\x74\x91\xae\xcb"
7545 "\xe8\x05\x22\x3f\x5c\x79\x96\xb3"
7546 "\xd0\xed\x0a\x27\x44\x61\x7e\x9b"
7547 "\xb8\xd5\xf2\x0f\x2c\x49\x66\x83"
7548 "\xa0\xbd\xda\xf7\x14\x31\x4e\x6b"
7549 "\x88\xa5\xc2\xdf\xfc\x19\x36\x53"
7550 "\x70\x8d\xaa\xc7\xe4\x01\x1e\x3b"
7551 "\x58\x75\x92\xaf\xcc\xe9\x06\x23"
7552 "\x40\x5d\x7a\x97\xb4\xd1\xee\x0b"
7553 "\x28\x45\x62\x7f\x9c\xb9\xd6\xf3"
7554 "\x10\x2d\x4a\x67\x84\xa1\xbe\xdb"
7555 "\xf8\x15\x32\x4f\x6c\x89\xa6\xc3"
7556 "\xe0\xfd\x1a\x37\x54\x71\x8e\xab"
7557 "\xc8\xe5\x02\x1f\x3c\x59\x76\x93"
7558 "\xb0\xcd\xea\x07\x24\x41\x5e\x7b"
7559 "\x98\xb5\xd2\xef\x0c\x29\x46\x63"
7560 "\x80\x9d\xba\xd7\xf4\x11\x2e\x4b"
7561 "\x68\x85\xa2\xbf\xdc\xf9\x16\x33"
7562 "\x50\x6d\x8a\xa7\xc4\xe1\xfe\x1b"
7563 "\x38\x55\x72\x8f\xac\xc9\xe6\x03"
7564 "\x20\x3d\x5a\x77\x94\xb1\xce\xeb"
7565 "\x08\x25\x42\x5f\x7c\x99\xb6\xd3"
7566 "\xf0\x0d\x2a\x47\x64\x81\x9e\xbb"
7567 "\xd8\xf5\x12\x2f\x4c\x69\x86\xa3"
7568 "\xc0\xdd\xfa\x17\x34\x51\x6e\x8b"
7569 "\xa8\xc5\xe2\xff\x1c\x39\x56\x73"
7570 "\x90\xad\xca\xe7\x04\x21\x3e\x5b"
7571 "\x78\x95\xb2\xcf\xec\x09\x26\x43"
7572 "\x60\x7d\x9a\xb7\xd4\xf1\x0e\x2b"
7573 "\x48\x65\x82\x9f\xbc\xd9\xf6\x13"
7574 "\x30\x4d\x6a\x87\xa4\xc1\xde\xfb"
7575 "\x18\x35\x52\x6f\x8c\xa9\xc6\xe3"
7576 "\x00\x1f\x3e\x5d\x7c\x9b\xba\xd9"
7577 "\xf8\x17\x36\x55\x74\x93\xb2\xd1"
7578 "\xf0\x0f\x2e\x4d\x6c\x8b\xaa\xc9"
7579 "\xe8\x07\x26\x45\x64\x83\xa2\xc1"
7580 "\xe0\xff\x1e\x3d\x5c\x7b\x9a\xb9"
7581 "\xd8\xf7\x16\x35\x54\x73\x92\xb1"
7582 "\xd0\xef\x0e\x2d\x4c\x6b\x8a\xa9"
7583 "\xc8\xe7\x06\x25\x44\x63\x82\xa1"
7584 "\xc0\xdf\xfe\x1d\x3c\x5b\x7a\x99"
7585 "\xb8\xd7\xf6\x15\x34\x53\x72\x91"
7586 "\xb0\xcf\xee\x0d\x2c\x4b\x6a\x89"
7587 "\xa8\xc7\xe6\x05\x24\x43\x62\x81"
7588 "\xa0\xbf\xde\xfd\x1c\x3b\x5a\x79"
7589 "\x98\xb7\xd6\xf5\x14\x33\x52\x71"
7590 "\x90\xaf\xce\xed\x0c\x2b\x4a\x69"
7591 "\x88\xa7\xc6\xe5\x04\x23\x42\x61"
7592 "\x80\x9f\xbe\xdd\xfc\x1b\x3a\x59"
7593 "\x78\x97\xb6\xd5\xf4\x13\x32\x51"
7594 "\x70\x8f\xae\xcd\xec\x0b\x2a\x49"
7595 "\x68\x87\xa6\xc5\xe4\x03\x22\x41"
7596 "\x60\x7f\x9e\xbd\xdc\xfb\x1a\x39"
7597 "\x58\x77\x96\xb5\xd4\xf3\x12\x31"
7598 "\x50\x6f\x8e\xad\xcc\xeb\x0a\x29"
7599 "\x48\x67\x86\xa5\xc4\xe3\x02\x21"
7600 "\x40\x5f\x7e\x9d\xbc\xdb\xfa\x19"
7601 "\x38\x57\x76\x95\xb4\xd3\xf2\x11"
7602 "\x30\x4f\x6e\x8d\xac\xcb\xea\x09"
7603 "\x28\x47\x66\x85\xa4\xc3\xe2\x01"
7604 "\x20\x3f\x5e\x7d\x9c\xbb\xda\xf9"
7605 "\x18\x37\x56\x75\x94\xb3\xd2\xf1"
7606 "\x10\x2f\x4e\x6d\x8c\xab\xca\xe9"
7607 "\x08\x27\x46\x65\x84\xa3\xc2\xe1"
7608 "\x00\x21\x42\x63",
7609 .ilen = 4100,
7610 .result =
7611 "\xb5\x81\xf5\x64\x18\x73\xe3\xf0"
7612 "\x4c\x13\xf2\x77\x18\x60\x65\x5e"
7613 "\x29\x01\xce\x98\x55\x53\xf9\x0c"
7614 "\x2a\x08\xd5\x09\xb3\x57\x55\x56"
7615 "\xc5\xe9\x56\x90\xcb\x6a\xa3\xc0"
7616 "\xff\xc4\x79\xb4\xd2\x97\x5d\xc4"
7617 "\x43\xd1\xfe\x94\x7b\x88\x06\x5a"
7618 "\xb2\x9e\x2c\xfc\x44\x03\xb7\x90"
7619 "\xa0\xc1\xba\x6a\x33\xb8\xc7\xb2"
7620 "\x9d\xe1\x12\x4f\xc0\x64\xd4\x01"
7621 "\xfe\x8c\x7a\x66\xf7\xe6\x5a\x91"
7622 "\xbb\xde\x56\x86\xab\x65\x21\x30"
7623 "\x00\x84\x65\x24\xa5\x7d\x85\xb4"
7624 "\xe3\x17\xed\x3a\xb7\x6f\xb4\x0b"
7625 "\x0b\xaf\x15\xae\x5a\x8f\xf2\x0c"
7626 "\x2f\x27\xf4\x09\xd8\xd2\x96\xb7"
7627 "\x71\xf2\xc5\x99\x4d\x7e\x7f\x75"
7628 "\x77\x89\x30\x8b\x59\xdb\xa2\xb2"
7629 "\xa0\xf3\x19\x39\x2b\xc5\x7e\x3f"
7630 "\x4f\xd9\xd3\x56\x28\x97\x44\xdc"
7631 "\xc0\x8b\x77\x24\xd9\x52\xe7\xc5"
7632 "\xaf\xf6\x7d\x59\xb2\x44\x05\x1d"
7633 "\xb1\xb0\x11\xa5\x0f\xec\x33\xe1"
7634 "\x6d\x1b\x4e\x1f\xff\x57\x91\xb4"
7635 "\x5b\x9a\x96\xc5\x53\xbc\xae\x20"
7636 "\x3c\xbb\x14\xe2\xe8\x22\x33\xc1"
7637 "\x5e\x76\x9e\x46\x99\xf6\x2a\x15"
7638 "\xc6\x97\x02\xa0\x66\x43\xd1\xa6"
7639 "\x31\xa6\x9f\xfb\xf4\xd3\x69\xe5"
7640 "\xcd\x76\x95\xb8\x7a\x82\x7f\x21"
7641 "\x45\xff\x3f\xce\x55\xf6\x95\x10"
7642 "\x08\x77\x10\x43\xc6\xf3\x09\xe5"
7643 "\x68\xe7\x3c\xad\x00\x52\x45\x0d"
7644 "\xfe\x2d\xc6\xc2\x94\x8c\x12\x1d"
7645 "\xe6\x25\xae\x98\x12\x8e\x19\x9c"
7646 "\x81\x68\xb1\x11\xf6\x69\xda\xe3"
7647 "\x62\x08\x18\x7a\x25\x49\x28\xac"
7648 "\xba\x71\x12\x0b\xe4\xa2\xe5\xc7"
7649 "\x5d\x8e\xec\x49\x40\x21\xbf\x5a"
7650 "\x98\xf3\x02\x68\x55\x03\x7f\x8a"
7651 "\xe5\x94\x0c\x32\x5c\x07\x82\x63"
7652 "\xaf\x6f\x91\x40\x84\x8e\x52\x25"
7653 "\xd0\xb0\x29\x53\x05\xe2\x50\x7a"
7654 "\x34\xeb\xc9\x46\x20\xa8\x3d\xde"
7655 "\x7f\x16\x5f\x36\xc5\x2e\xdc\xd1"
7656 "\x15\x47\xc7\x50\x40\x6d\x91\xc5"
7657 "\xe7\x93\x95\x1a\xd3\x57\xbc\x52"
7658 "\x33\xee\x14\x19\x22\x52\x89\xa7"
7659 "\x4a\x25\x56\x77\x4b\xca\xcf\x0a"
7660 "\xe1\xf5\x35\x85\x30\x7e\x59\x4a"
7661 "\xbd\x14\x5b\xdf\xe3\x46\xcb\xac"
7662 "\x1f\x6c\x96\x0e\xf4\x81\xd1\x99"
7663 "\xca\x88\x63\x3d\x02\x58\x6b\xa9"
7664 "\xe5\x9f\xb3\x00\xb2\x54\xc6\x74"
7665 "\x1c\xbf\x46\xab\x97\xcc\xf8\x54"
7666 "\x04\x07\x08\x52\xe6\xc0\xda\x93"
7667 "\x74\x7d\x93\x99\x5d\x78\x68\xa6"
7668 "\x2e\x6b\xd3\x6a\x69\xcc\x12\x6b"
7669 "\xd4\xc7\xa5\xc6\xe7\xf6\x03\x04"
7670 "\x5d\xcd\x61\x5e\x17\x40\xdc\xd1"
7671 "\x5c\xf5\x08\xdf\x5c\x90\x85\xa4"
7672 "\xaf\xf6\x78\xbb\x0d\xf1\xf4\xa4"
7673 "\x54\x26\x72\x9e\x61\xfa\x86\xcf"
7674 "\xe8\x9e\xa1\xe0\xc7\x48\x23\xae"
7675 "\x5a\x90\xae\x75\x0a\x74\x18\x89"
7676 "\x05\xb1\x92\xb2\x7f\xd0\x1b\xa6"
7677 "\x62\x07\x25\x01\xc7\xc2\x4f\xf9"
7678 "\xe8\xfe\x63\x95\x80\x07\xb4\x26"
7679 "\xcc\xd1\x26\xb6\xc4\x3f\x9e\xcb"
7680 "\x8e\x3b\x2e\x44\x16\xd3\x10\x9a"
7681 "\x95\x08\xeb\xc8\xcb\xeb\xbf\x6f"
7682 "\x0b\xcd\x1f\xc8\xca\x86\xaa\xec"
7683 "\x33\xe6\x69\xf4\x45\x25\x86\x3a"
7684 "\x22\x94\x4f\x00\x23\x6a\x44\xc2"
7685 "\x49\x97\x33\xab\x36\x14\x0a\x70"
7686 "\x24\xc3\xbe\x04\x3b\x79\xa0\xf9"
7687 "\xb8\xe7\x76\x29\x22\x83\xd7\xf2"
7688 "\x94\xf4\x41\x49\xba\x5f\x7b\x07"
7689 "\xb5\xfb\xdb\x03\x1a\x9f\xb6\x4c"
7690 "\xc2\x2e\x37\x40\x49\xc3\x38\x16"
7691 "\xe2\x4f\x77\x82\xb0\x68\x4c\x71"
7692 "\x1d\x57\x61\x9c\xd9\x4e\x54\x99"
7693 "\x47\x13\x28\x73\x3c\xbb\x00\x90"
7694 "\xf3\x4d\xc9\x0e\xfd\xe7\xb1\x71"
7695 "\xd3\x15\x79\xbf\xcc\x26\x2f\xbd"
7696 "\xad\x6c\x50\x69\x6c\x3e\x6d\x80"
7697 "\x9a\xea\x78\xaf\x19\xb2\x0d\x4d"
7698 "\xad\x04\x07\xae\x22\x90\x4a\x93"
7699 "\x32\x0e\x36\x9b\x1b\x46\xba\x3b"
7700 "\xb4\xac\xc6\xd1\xa2\x31\x53\x3b"
7701 "\x2a\x3d\x45\xfe\x03\x61\x10\x85"
7702 "\x17\x69\xa6\x78\xcc\x6c\x87\x49"
7703 "\x53\xf9\x80\x10\xde\x80\xa2\x41"
7704 "\x6a\xc3\x32\x02\xad\x6d\x3c\x56"
7705 "\x00\x71\x51\x06\xa7\xbd\xfb\xef"
7706 "\x3c\xb5\x9f\xfc\x48\x7d\x53\x7c"
7707 "\x66\xb0\x49\x23\xc4\x47\x10\x0e"
7708 "\xe5\x6c\x74\x13\xe6\xc5\x3f\xaa"
7709 "\xde\xff\x07\x44\xdd\x56\x1b\xad"
7710 "\x09\x77\xfb\x5b\x12\xb8\x0d\x38"
7711 "\x17\x37\x35\x7b\x9b\xbc\xfe\xd4"
7712 "\x7e\x8b\xda\x7e\x5b\x04\xa7\x22"
7713 "\xa7\x31\xa1\x20\x86\xc7\x1b\x99"
7714 "\xdb\xd1\x89\xf4\x94\xa3\x53\x69"
7715 "\x8d\xe7\xe8\x74\x11\x8d\x74\xd6"
7716 "\x07\x37\x91\x9f\xfd\x67\x50\x3a"
7717 "\xc9\xe1\xf4\x36\xd5\xa0\x47\xd1"
7718 "\xf9\xe5\x39\xa3\x31\xac\x07\x36"
7719 "\x23\xf8\x66\x18\x14\x28\x34\x0f"
7720 "\xb8\xd0\xe7\x29\xb3\x04\x4b\x55"
7721 "\x01\x41\xb2\x75\x8d\xcb\x96\x85"
7722 "\x3a\xfb\xab\x2b\x9e\xfa\x58\x20"
7723 "\x44\x1f\xc0\x14\x22\x75\x61\xe8"
7724 "\xaa\x19\xcf\xf1\x82\x56\xf4\xd7"
7725 "\x78\x7b\x3d\x5f\xb3\x9e\x0b\x8a"
7726 "\x57\x50\xdb\x17\x41\x65\x4d\xa3"
7727 "\x02\xc9\x9c\x9c\x53\xfb\x39\x39"
7728 "\x9b\x1d\x72\x24\xda\xb7\x39\xbe"
7729 "\x13\x3b\xfa\x29\xda\x9e\x54\x64"
7730 "\x6e\xba\xd8\xa1\xcb\xb3\x36\xfa"
7731 "\xcb\x47\x85\xe9\x61\x38\xbc\xbe"
7732 "\xc5\x00\x38\x2a\x54\xf7\xc4\xb9"
7733 "\xb3\xd3\x7b\xa0\xa0\xf8\x72\x7f"
7734 "\x8c\x8e\x82\x0e\xc6\x1c\x75\x9d"
7735 "\xca\x8e\x61\x87\xde\xad\x80\xd2"
7736 "\xf5\xf9\x80\xef\x15\x75\xaf\xf5"
7737 "\x80\xfb\xff\x6d\x1e\x25\xb7\x40"
7738 "\x61\x6a\x39\x5a\x6a\xb5\x31\xab"
7739 "\x97\x8a\x19\x89\x44\x40\xc0\xa6"
7740 "\xb4\x4e\x30\x32\x7b\x13\xe7\x67"
7741 "\xa9\x8b\x57\x04\xc2\x01\xa6\xf4"
7742 "\x28\x99\xad\x2c\x76\xa3\x78\xc2"
7743 "\x4a\xe6\xca\x5c\x50\x6a\xc1\xb0"
7744 "\x62\x4b\x10\x8e\x7c\x17\x43\xb3"
7745 "\x17\x66\x1c\x3e\x8d\x69\xf0\x5a"
7746 "\x71\xf5\x97\xdc\xd1\x45\xdd\x28"
7747 "\xf3\x5d\xdf\x53\x7b\x11\xe5\xbc"
7748 "\x4c\xdb\x1b\x51\x6b\xe9\xfb\x3d"
7749 "\xc1\xc3\x2c\xb9\x71\xf5\xb6\xb2"
7750 "\x13\x36\x79\x80\x53\xe8\xd3\xa6"
7751 "\x0a\xaf\xfd\x56\x97\xf7\x40\x8e"
7752 "\x45\xce\xf8\xb0\x9e\x5c\x33\x82"
7753 "\xb0\x44\x56\xfc\x05\x09\xe9\x2a"
7754 "\xac\x26\x80\x14\x1d\xc8\x3a\x35"
7755 "\x4c\x82\x97\xfd\x76\xb7\xa9\x0a"
7756 "\x35\x58\x79\x8e\x0f\x66\xea\xaf"
7757 "\x51\x6c\x09\xa9\x6e\x9b\xcb\x9a"
7758 "\x31\x47\xa0\x2f\x7c\x71\xb4\x4a"
7759 "\x11\xaa\x8c\x66\xc5\x64\xe6\x3a"
7760 "\x54\xda\x24\x6a\xc4\x41\x65\x46"
7761 "\x82\xa0\x0a\x0f\x5f\xfb\x25\xd0"
7762 "\x2c\x91\xa7\xee\xc4\x81\x07\x86"
7763 "\x75\x5e\x33\x69\x97\xe4\x2c\xa8"
7764 "\x9d\x9f\x0b\x6a\xbe\xad\x98\xda"
7765 "\x6d\x94\x41\xda\x2c\x1e\x89\xc4"
7766 "\xc2\xaf\x1e\x00\x05\x0b\x83\x60"
7767 "\xbd\x43\xea\x15\x23\x7f\xb9\xac"
7768 "\xee\x4f\x2c\xaf\x2a\xf3\xdf\xd0"
7769 "\xf3\x19\x31\xbb\x4a\x74\x84\x17"
7770 "\x52\x32\x2c\x7d\x61\xe4\xcb\xeb"
7771 "\x80\x38\x15\x52\xcb\x6f\xea\xe5"
7772 "\x73\x9c\xd9\x24\x69\xc6\x95\x32"
7773 "\x21\xc8\x11\xe4\xdc\x36\xd7\x93"
7774 "\x38\x66\xfb\xb2\x7f\x3a\xb9\xaf"
7775 "\x31\xdd\x93\x75\x78\x8a\x2c\x94"
7776 "\x87\x1a\x58\xec\x9e\x7d\x4d\xba"
7777 "\xe1\xe5\x4d\xfc\xbc\xa4\x2a\x14"
7778 "\xef\xcc\xa7\xec\xab\x43\x09\x18"
7779 "\xd3\xab\x68\xd1\x07\x99\x44\x47"
7780 "\xd6\x83\x85\x3b\x30\xea\xa9\x6b"
7781 "\x63\xea\xc4\x07\xfb\x43\x2f\xa4"
7782 "\xaa\xb0\xab\x03\x89\xce\x3f\x8c"
7783 "\x02\x7c\x86\x54\xbc\x88\xaf\x75"
7784 "\xd2\xdc\x63\x17\xd3\x26\xf6\x96"
7785 "\xa9\x3c\xf1\x61\x8c\x11\x18\xcc"
7786 "\xd6\xea\x5b\xe2\xcd\xf0\xf1\xb2"
7787 "\xe5\x35\x90\x1f\x85\x4c\x76\x5b"
7788 "\x66\xce\x44\xa4\x32\x9f\xe6\x7b"
7789 "\x71\x6e\x9f\x58\x15\x67\x72\x87"
7790 "\x64\x8e\x3a\x44\x45\xd4\x76\xfa"
7791 "\xc2\xf6\xef\x85\x05\x18\x7a\x9b"
7792 "\xba\x41\x54\xac\xf0\xfc\x59\x12"
7793 "\x3f\xdf\xa0\xe5\x8a\x65\xfd\x3a"
7794 "\x62\x8d\x83\x2c\x03\xbe\x05\x76"
7795 "\x2e\x53\x49\x97\x94\x33\xae\x40"
7796 "\x81\x15\xdb\x6e\xad\xaa\xf5\x4b"
7797 "\xe3\x98\x70\xdf\xe0\x7c\xcd\xdb"
7798 "\x02\xd4\x7d\x2f\xc1\xe6\xb4\xf3"
7799 "\xd7\x0d\x7a\xd9\x23\x9e\x87\x2d"
7800 "\xce\x87\xad\xcc\x72\x05\x00\x29"
7801 "\xdc\x73\x7f\x64\xc1\x15\x0e\xc2"
7802 "\xdf\xa7\x5f\xeb\x41\xa1\xcd\xef"
7803 "\x5c\x50\x79\x2a\x56\x56\x71\x8c"
7804 "\xac\xc0\x79\x50\x69\xca\x59\x32"
7805 "\x65\xf2\x54\xe4\x52\x38\x76\xd1"
7806 "\x5e\xde\x26\x9e\xfb\x75\x2e\x11"
7807 "\xb5\x10\xf4\x17\x73\xf5\x89\xc7"
7808 "\x4f\x43\x5c\x8e\x7c\xb9\x05\x52"
7809 "\x24\x40\x99\xfe\x9b\x85\x0b\x6c"
7810 "\x22\x3e\x8b\xae\x86\xa1\xd2\x79"
7811 "\x05\x68\x6b\xab\xe3\x41\x49\xed"
7812 "\x15\xa1\x8d\x40\x2d\x61\xdf\x1a"
7813 "\x59\xc9\x26\x8b\xef\x30\x4c\x88"
7814 "\x4b\x10\xf8\x8d\xa6\x92\x9f\x4b"
7815 "\xf3\xc4\x53\x0b\x89\x5d\x28\x92"
7816 "\xcf\x78\xb2\xc0\x5d\xed\x7e\xfc"
7817 "\xc0\x12\x23\x5f\x5a\x78\x86\x43"
7818 "\x6e\x27\xf7\x5a\xa7\x6a\xed\x19"
7819 "\x04\xf0\xb3\x12\xd1\xbd\x0e\x89"
7820 "\x6e\xbc\x96\xa8\xd8\x49\x39\x9f"
7821 "\x7e\x67\xf0\x2e\x3e\x01\xa9\xba"
7822 "\xec\x8b\x62\x8e\xcb\x4a\x70\x43"
7823 "\xc7\xc2\xc4\xca\x82\x03\x73\xe9"
7824 "\x11\xdf\xcf\x54\xea\xc9\xb0\x95"
7825 "\x51\xc0\x13\x3d\x92\x05\xfa\xf4"
7826 "\xa9\x34\xc8\xce\x6c\x3d\x54\xcc"
7827 "\xc4\xaf\xf1\xdc\x11\x44\x26\xa2"
7828 "\xaf\xf1\x85\x75\x7d\x03\x61\x68"
7829 "\x4e\x78\xc6\x92\x7d\x86\x7d\x77"
7830 "\xdc\x71\x72\xdb\xc6\xae\xa1\xcb"
7831 "\x70\x9a\x0b\x19\xbe\x4a\x6c\x2a"
7832 "\xe2\xba\x6c\x64\x9a\x13\x28\xdf"
7833 "\x85\x75\xe6\x43\xf6\x87\x08\x68"
7834 "\x6e\xba\x6e\x79\x9f\x04\xbc\x23"
7835 "\x50\xf6\x33\x5c\x1f\x24\x25\xbe"
7836 "\x33\x47\x80\x45\x56\xa3\xa7\xd7"
7837 "\x7a\xb1\x34\x0b\x90\x3c\x9c\xad"
7838 "\x44\x5f\x9e\x0e\x9d\xd4\xbd\x93"
7839 "\x5e\xfa\x3c\xe0\xb0\xd9\xed\xf3"
7840 "\xd6\x2e\xff\x24\xd8\x71\x6c\xed"
7841 "\xaf\x55\xeb\x22\xac\x93\x68\x32"
7842 "\x05\x5b\x47\xdd\xc6\x4a\xcb\xc7"
7843 "\x10\xe1\x3c\x92\x1a\xf3\x23\x78"
7844 "\x2b\xa1\xd2\x80\xf4\x12\xb1\x20"
7845 "\x8f\xff\x26\x35\xdd\xfb\xc7\x4e"
7846 "\x78\xf1\x2d\x50\x12\x77\xa8\x60"
7847 "\x7c\x0f\xf5\x16\x2f\x63\x70\x2a"
7848 "\xc0\x96\x80\x4e\x0a\xb4\x93\x35"
7849 "\x5d\x1d\x3f\x56\xf7\x2f\xbb\x90"
7850 "\x11\x16\x8f\xa2\xec\x47\xbe\xac"
7851 "\x56\x01\x26\x56\xb1\x8c\xb2\x10"
7852 "\xf9\x1a\xca\xf5\xd1\xb7\x39\x20"
7853 "\x63\xf1\x69\x20\x4f\x13\x12\x1f"
7854 "\x5b\x65\xfc\x98\xf7\xc4\x7a\xbe"
7855 "\xf7\x26\x4d\x2b\x84\x7b\x42\xad"
7856 "\xd8\x7a\x0a\xb4\xd8\x74\xbf\xc1"
7857 "\xf0\x6e\xb4\x29\xa3\xbb\xca\x46"
7858 "\x67\x70\x6a\x2d\xce\x0e\xa2\x8a"
7859 "\xa9\x87\xbf\x05\xc4\xc1\x04\xa3"
7860 "\xab\xd4\x45\x43\x8c\xb6\x02\xb0"
7861 "\x41\xc8\xfc\x44\x3d\x59\xaa\x2e"
7862 "\x44\x21\x2a\x8d\x88\x9d\x57\xf4"
7863 "\xa0\x02\x77\xb8\xa6\xa0\xe6\x75"
7864 "\x5c\x82\x65\x3e\x03\x5c\x29\x8f"
7865 "\x38\x55\xab\x33\x26\xef\x9f\x43"
7866 "\x52\xfd\x68\xaf\x36\xb4\xbb\x9a"
7867 "\x58\x09\x09\x1b\xc3\x65\x46\x46"
7868 "\x1d\xa7\x94\x18\x23\x50\x2c\xca"
7869 "\x2c\x55\x19\x97\x01\x9d\x93\x3b"
7870 "\x63\x86\xf2\x03\x67\x45\xd2\x72"
7871 "\x28\x52\x6c\xf4\xe3\x1c\xb5\x11"
7872 "\x13\xf1\xeb\x21\xc7\xd9\x56\x82"
7873 "\x2b\x82\x39\xbd\x69\x54\xed\x62"
7874 "\xc3\xe2\xde\x73\xd4\x6a\x12\xae"
7875 "\x13\x21\x7f\x4b\x5b\xfc\xbf\xe8"
7876 "\x2b\xbe\x56\xba\x68\x8b\x9a\xb1"
7877 "\x6e\xfa\xbf\x7e\x5a\x4b\xf1\xac"
7878 "\x98\x65\x85\xd1\x93\x53\xd3\x7b"
7879 "\x09\xdd\x4b\x10\x6d\x84\xb0\x13"
7880 "\x65\xbd\xcf\x52\x09\xc4\x85\xe2"
7881 "\x84\x74\x15\x65\xb7\xf7\x51\xaf"
7882 "\x55\xad\xa4\xd1\x22\x54\x70\x94"
7883 "\xa0\x1c\x90\x41\xfd\x99\xd7\x5a"
7884 "\x31\xef\xaa\x25\xd0\x7f\x4f\xea"
7885 "\x1d\x55\x42\xe5\x49\xb0\xd0\x46"
7886 "\x62\x36\x43\xb2\x82\x15\x75\x50"
7887 "\xa4\x72\xeb\x54\x27\x1f\x8a\xe4"
7888 "\x7d\xe9\x66\xc5\xf1\x53\xa4\xd1"
7889 "\x0c\xeb\xb8\xf8\xbc\xd4\xe2\xe7"
7890 "\xe1\xf8\x4b\xcb\xa9\xa1\xaf\x15"
7891 "\x83\xcb\x72\xd0\x33\x79\x00\x2d"
7892 "\x9f\xd7\xf1\x2e\x1e\x10\xe4\x45"
7893 "\xc0\x75\x3a\x39\xea\x68\xf7\x5d"
7894 "\x1b\x73\x8f\xe9\x8e\x0f\x72\x47"
7895 "\xae\x35\x0a\x31\x7a\x14\x4d\x4a"
7896 "\x6f\x47\xf7\x7e\x91\x6e\x74\x8b"
7897 "\x26\x47\xf9\xc3\xf9\xde\x70\xf5"
7898 "\x61\xab\xa9\x27\x9f\x82\xe4\x9c"
7899 "\x89\x91\x3f\x2e\x6a\xfd\xb5\x49"
7900 "\xe9\xfd\x59\x14\x36\x49\x40\x6d"
7901 "\x32\xd8\x85\x42\xf3\xa5\xdf\x0c"
7902 "\xa8\x27\xd7\x54\xe2\x63\x2f\xf2"
7903 "\x7e\x8b\x8b\xe7\xf1\x9a\x95\x35"
7904 "\x43\xdc\x3a\xe4\xb6\xf4\xd0\xdf"
7905 "\x9c\xcb\x94\xf3\x21\xa0\x77\x50"
7906 "\xe2\xc6\xc4\xc6\x5f\x09\x64\x5b"
7907 "\x92\x90\xd8\xe1\xd1\xed\x4b\x42"
7908 "\xd7\x37\xaf\x65\x3d\x11\x39\xb6"
7909 "\x24\x8a\x60\xae\xd6\x1e\xbf\x0e"
7910 "\x0d\xd7\xdc\x96\x0e\x65\x75\x4e"
7911 "\x29\x06\x9d\xa4\x51\x3a\x10\x63"
7912 "\x8f\x17\x07\xd5\x8e\x3c\xf4\x28"
7913 "\x00\x5a\x5b\x05\x19\xd8\xc0\x6c"
7914 "\xe5\x15\xe4\x9c\x9d\x71\x9d\x5e"
7915 "\x94\x29\x1a\xa7\x80\xfa\x0e\x33"
7916 "\x03\xdd\xb7\x3e\x9a\xa9\x26\x18"
7917 "\x37\xa9\x64\x08\x4d\x94\x5a\x88"
7918 "\xca\x35\xce\x81\x02\xe3\x1f\x1b"
7919 "\x89\x1a\x77\x85\xe3\x41\x6d\x32"
7920 "\x42\x19\x23\x7d\xc8\x73\xee\x25"
7921 "\x85\x0d\xf8\x31\x25\x79\x1b\x6f"
7922 "\x79\x25\xd2\xd8\xd4\x23\xfd\xf7"
7923 "\x82\x36\x6a\x0c\x46\x22\x15\xe9"
7924 "\xff\x72\x41\x91\x91\x7d\x3a\xb7"
7925 "\xdd\x65\x99\x70\xf6\x8d\x84\xf8"
7926 "\x67\x15\x20\x11\xd6\xb2\x55\x7b"
7927 "\xdb\x87\xee\xef\x55\x89\x2a\x59"
7928 "\x2b\x07\x8f\x43\x8a\x59\x3c\x01"
7929 "\x8b\x65\x54\xa1\x66\xd5\x38\xbd"
7930 "\xc6\x30\xa9\xcc\x49\xb6\xa8\x1b"
7931 "\xb8\xc0\x0e\xe3\x45\x28\xe2\xff"
7932 "\x41\x9f\x7e\x7c\xd1\xae\x9e\x25"
7933 "\x3f\x4c\x7c\x7c\xf4\xa8\x26\x4d"
7934 "\x5c\xfd\x4b\x27\x18\xf9\x61\x76"
7935 "\x48\xba\x0c\x6b\xa9\x4d\xfc\xf5"
7936 "\x3b\x35\x7e\x2f\x4a\xa9\xc2\x9a"
7937 "\xae\xab\x86\x09\x89\xc9\xc2\x40"
7938 "\x39\x2c\x81\xb3\xb8\x17\x67\xc2"
7939 "\x0d\x32\x4a\x3a\x67\x81\xd7\x1a"
7940 "\x34\x52\xc5\xdb\x0a\xf5\x63\x39"
7941 "\xea\x1f\xe1\x7c\xa1\x9e\xc1\x35"
7942 "\xe3\xb1\x18\x45\x67\xf9\x22\x38"
7943 "\x95\xd9\x34\x34\x86\xc6\x41\x94"
7944 "\x15\xf9\x5b\x41\xa6\x87\x8b\xf8"
7945 "\xd5\xe1\x1b\xe2\x5b\xf3\x86\x10"
7946 "\xff\xe6\xae\x69\x76\xbc\x0d\xb4"
7947 "\x09\x90\x0c\xa2\x65\x0c\xad\x74"
7948 "\xf5\xd7\xff\xda\xc1\xce\x85\xbe"
7949 "\x00\xa7\xff\x4d\x2f\x65\xd3\x8c"
7950 "\x86\x2d\x05\xe8\xed\x3e\x6b\x8b"
7951 "\x0f\x3d\x83\x8c\xf1\x1d\x5b\x96"
7952 "\x2e\xb1\x9c\xc2\x98\xe1\x70\xb9"
7953 "\xba\x5c\x8a\x43\xd6\x34\xa7\x2d"
7954 "\xc9\x92\xae\xf2\xa5\x7b\x05\x49"
7955 "\xa7\x33\x34\x86\xca\xe4\x96\x23"
7956 "\x76\x5b\xf2\xc6\xf1\x51\x28\x42"
7957 "\x7b\xcc\x76\x8f\xfa\xa2\xad\x31"
7958 "\xd4\xd6\x7a\x6d\x25\x25\x54\xe4"
7959 "\x3f\x50\x59\xe1\x5c\x05\xb7\x27"
7960 "\x48\xbf\x07\xec\x1b\x13\xbe\x2b"
7961 "\xa1\x57\x2b\xd5\xab\xd7\xd0\x4c"
7962 "\x1e\xcb\x71\x9b\xc5\x90\x85\xd3"
7963 "\xde\x59\xec\x71\xeb\x89\xbb\xd0"
7964 "\x09\x50\xe1\x16\x3f\xfd\x1c\x34"
7965 "\xc3\x1c\xa1\x10\x77\x53\x98\xef"
7966 "\xf2\xfd\xa5\x01\x59\xc2\x9b\x26"
7967 "\xc7\x42\xd9\x49\xda\x58\x2b\x6e"
7968 "\x9f\x53\x19\x76\x7e\xd9\xc9\x0e"
7969 "\x68\xc8\x7f\x51\x22\x42\xef\x49"
7970 "\xa4\x55\xb6\x36\xac\x09\xc7\x31"
7971 "\x88\x15\x4b\x2e\x8f\x3a\x08\xf7"
7972 "\xd8\xf7\xa8\xc5\xa9\x33\xa6\x45"
7973 "\xe4\xc4\x94\x76\xf3\x0d\x8f\x7e"
7974 "\xc8\xf6\xbc\x23\x0a\xb6\x4c\xd3"
7975 "\x6a\xcd\x36\xc2\x90\x5c\x5c\x3c"
7976 "\x65\x7b\xc2\xd6\xcc\xe6\x0d\x87"
7977 "\x73\x2e\x71\x79\x16\x06\x63\x28"
7978 "\x09\x15\xd8\x89\x38\x38\x3d\xb5"
7979 "\x42\x1c\x08\x24\xf7\x2a\xd2\x9d"
7980 "\xc8\xca\xef\xf9\x27\xd8\x07\x86"
7981 "\xf7\x43\x0b\x55\x15\x3f\x9f\x83"
7982 "\xef\xdc\x49\x9d\x2a\xc1\x54\x62"
7983 "\xbd\x9b\x66\x55\x9f\xb7\x12\xf3"
7984 "\x1b\x4d\x9d\x2a\x5c\xed\x87\x75"
7985 "\x87\x26\xec\x61\x2c\xb4\x0f\x89"
7986 "\xb0\xfb\x2e\x68\x5d\x15\xc7\x8d"
7987 "\x2e\xc0\xd9\xec\xaf\x4f\xd2\x25"
7988 "\x29\xe8\xd2\x26\x2b\x67\xe9\xfc"
7989 "\x2b\xa8\x67\x96\x12\x1f\x5b\x96"
7990 "\xc6\x14\x53\xaf\x44\xea\xd6\xe2"
7991 "\x94\x98\xe4\x12\x93\x4c\x92\xe0"
7992 "\x18\xa5\x8d\x2d\xe4\x71\x3c\x47"
7993 "\x4c\xf7\xe6\x47\x9e\xc0\x68\xdf"
7994 "\xd4\xf5\x5a\x74\xb1\x2b\x29\x03"
7995 "\x19\x07\xaf\x90\x62\x5c\x68\x98"
7996 "\x48\x16\x11\x02\x9d\xee\xb4\x9b"
7997 "\xe5\x42\x7f\x08\xfd\x16\x32\x0b"
7998 "\xd0\xb3\xfa\x2b\xb7\x99\xf9\x29"
7999 "\xcd\x20\x45\x9f\xb3\x1a\x5d\xa2"
8000 "\xaf\x4d\xe0\xbd\x42\x0d\xbc\x74"
8001 "\x99\x9c\x8e\x53\x1a\xb4\x3e\xbd"
8002 "\xa2\x9a\x2d\xf7\xf8\x39\x0f\x67"
8003 "\x63\xfc\x6b\xc0\xaf\xb3\x4b\x4f"
8004 "\x55\xc4\xcf\xa7\xc8\x04\x11\x3e"
8005 "\x14\x32\xbb\x1b\x38\x77\xd6\x7f"
8006 "\x54\x4c\xdf\x75\xf3\x07\x2d\x33"
8007 "\x9b\xa8\x20\xe1\x7b\x12\xb5\xf3"
8008 "\xef\x2f\xce\x72\xe5\x24\x60\xc1"
8009 "\x30\xe2\xab\xa1\x8e\x11\x09\xa8"
8010 "\x21\x33\x44\xfe\x7f\x35\x32\x93"
8011 "\x39\xa7\xad\x8b\x79\x06\xb2\xcb"
8012 "\x4e\xa9\x5f\xc7\xba\x74\x29\xec"
8013 "\x93\xa0\x4e\x54\x93\xc0\xbc\x55"
8014 "\x64\xf0\x48\xe5\x57\x99\xee\x75"
8015 "\xd6\x79\x0f\x66\xb7\xc6\x57\x76"
8016 "\xf7\xb7\xf3\x9c\xc5\x60\xe8\x7f"
8017 "\x83\x76\xd6\x0e\xaa\xe6\x90\x39"
8018 "\x1d\xa6\x32\x6a\x34\xe3\x55\xf8"
8019 "\x58\xa0\x58\x7d\x33\xe0\x22\x39"
8020 "\x44\x64\x87\x86\x5a\x2f\xa7\x7e"
8021 "\x0f\x38\xea\xb0\x30\xcc\x61\xa5"
8022 "\x6a\x32\xae\x1e\xf7\xe9\xd0\xa9"
8023 "\x0c\x32\x4b\xb5\x49\x28\xab\x85"
8024 "\x2f\x8e\x01\x36\x38\x52\xd0\xba"
8025 "\xd6\x02\x78\xf8\x0e\x3e\x9c\x8b"
8026 "\x6b\x45\x99\x3f\x5c\xfe\x58\xf1"
8027 "\x5c\x94\x04\xe1\xf5\x18\x6d\x51"
8028 "\xb2\x5d\x18\x20\xb6\xc2\x9a\x42"
8029 "\x1d\xb3\xab\x3c\xb6\x3a\x13\x03"
8030 "\xb2\x46\x82\x4f\xfc\x64\xbc\x4f"
8031 "\xca\xfa\x9c\xc0\xd5\xa7\xbd\x11"
8032 "\xb7\xe4\x5a\xf6\x6f\x4d\x4d\x54"
8033 "\xea\xa4\x98\x66\xd4\x22\x3b\xd3"
8034 "\x8f\x34\x47\xd9\x7c\xf4\x72\x3b"
8035 "\x4d\x02\x77\xf6\xd6\xdd\x08\x0a"
8036 "\x81\xe1\x86\x89\x3e\x56\x10\x3c"
8037 "\xba\xd7\x81\x8c\x08\xbc\x8b\xe2"
8038 "\x53\xec\xa7\x89\xee\xc8\x56\xb5"
8039 "\x36\x2c\xb2\x03\xba\x99\xdd\x7c"
8040 "\x48\xa0\xb0\xbc\x91\x33\xe9\xa8"
8041 "\xcb\xcd\xcf\x59\x5f\x1f\x15\xe2"
8042 "\x56\xf5\x4e\x01\x35\x27\x45\x77"
8043 "\x47\xc8\xbc\xcb\x7e\x39\xc1\x97"
8044 "\x28\xd3\x84\xfc\x2c\x3e\xc8\xad"
8045 "\x9c\xf8\x8a\x61\x9c\x28\xaa\xc5"
8046 "\x99\x20\x43\x85\x9d\xa5\xe2\x8b"
8047 "\xb8\xae\xeb\xd0\x32\x0d\x52\x78"
8048 "\x09\x56\x3f\xc7\xd8\x7e\x26\xfc"
8049 "\x37\xfb\x6f\x04\xfc\xfa\x92\x10"
8050 "\xac\xf8\x3e\x21\xdc\x8c\x21\x16"
8051 "\x7d\x67\x6e\xf6\xcd\xda\xb6\x98"
8052 "\x23\xab\x23\x3c\xb2\x10\xa0\x53"
8053 "\x5a\x56\x9f\xc5\xd0\xff\xbb\xe4"
8054 "\x98\x3c\x69\x1e\xdb\x38\x8f\x7e"
8055 "\x0f\xd2\x98\x88\x81\x8b\x45\x67"
8056 "\xea\x33\xf1\xeb\xe9\x97\x55\x2e"
8057 "\xd9\xaa\xeb\x5a\xec\xda\xe1\x68"
8058 "\xa8\x9d\x3c\x84\x7c\x05\x3d\x62"
8059 "\x87\x8f\x03\x21\x28\x95\x0c\x89"
8060 "\x25\x22\x4a\xb0\x93\xa9\x50\xa2"
8061 "\x2f\x57\x6e\x18\x42\x19\x54\x0c"
8062 "\x55\x67\xc6\x11\x49\xf4\x5c\xd2"
8063 "\xe9\x3d\xdd\x8b\x48\x71\x21\x00"
8064 "\xc3\x9a\x6c\x85\x74\x28\x83\x4a"
8065 "\x1b\x31\x05\xe1\x06\x92\xe7\xda"
8066 "\x85\x73\x78\x45\x20\x7f\xae\x13"
8067 "\x7c\x33\x06\x22\xf4\x83\xf9\x35"
8068 "\x3f\x6c\x71\xa8\x4e\x48\xbe\x9b"
8069 "\xce\x8a\xba\xda\xbe\x28\x08\xf7"
8070 "\xe2\x14\x8c\x71\xea\x72\xf9\x33"
8071 "\xf2\x88\x3f\xd7\xbb\x69\x6c\x29"
8072 "\x19\xdc\x84\xce\x1f\x12\x4f\xc8"
8073 "\xaf\xa5\x04\xba\x5a\xab\xb0\xd9"
8074 "\x14\x1f\x6c\x68\x98\x39\x89\x7a"
8075 "\xd9\xd8\x2f\xdf\xa8\x47\x4a\x25"
8076 "\xe2\xfb\x33\xf4\x59\x78\xe1\x68"
8077 "\x85\xcf\xfe\x59\x20\xd4\x05\x1d"
8078 "\x80\x99\xae\xbc\xca\xae\x0f\x2f"
8079 "\x65\x43\x34\x8e\x7e\xac\xd3\x93"
8080 "\x2f\xac\x6d\x14\x3d\x02\x07\x70"
8081 "\x9d\xa4\xf3\x1b\x5c\x36\xfc\x01"
8082 "\x73\x34\x85\x0c\x6c\xd6\xf1\xbd"
8083 "\x3f\xdf\xee\xf5\xd9\xba\x56\xef"
8084 "\xf4\x9b\x6b\xee\x9f\x5a\x78\x6d"
8085 "\x32\x19\xf4\xf7\xf8\x4c\x69\x0b"
8086 "\x4b\xbc\xbb\xb7\xf2\x85\xaf\x70"
8087 "\x75\x24\x6c\x54\xa7\x0e\x4d\x1d"
8088 "\x01\xbf\x08\xac\xcf\x7f\x2c\xe3"
8089 "\x14\x89\x5e\x70\x5a\x99\x92\xcd"
8090 "\x01\x84\xc8\xd2\xab\xe5\x4f\x58"
8091 "\xe7\x0f\x2f\x0e\xff\x68\xea\xfd"
8092 "\x15\xb3\x17\xe6\xb0\xe7\x85\xd8"
8093 "\x23\x2e\x05\xc7\xc9\xc4\x46\x1f"
8094 "\xe1\x9e\x49\x20\x23\x24\x4d\x7e"
8095 "\x29\x65\xff\xf4\xb6\xfd\x1a\x85"
8096 "\xc4\x16\xec\xfc\xea\x7b\xd6\x2c"
8097 "\x43\xf8\xb7\xbf\x79\xc0\x85\xcd"
8098 "\xef\xe1\x98\xd3\xa5\xf7\x90\x8c"
8099 "\xe9\x7f\x80\x6b\xd2\xac\x4c\x30"
8100 "\xa7\xc6\x61\x6c\xd2\xf9\x2c\xff"
8101 "\x30\xbc\x22\x81\x7d\x93\x12\xe4"
8102 "\x0a\xcd\xaf\xdd\xe8\xab\x0a\x1e"
8103 "\x13\xa4\x27\xc3\x5f\xf7\x4b\xbb"
8104 "\x37\x09\x4b\x91\x6f\x92\x4f\xaf"
8105 "\x52\xee\xdf\xef\x09\x6f\xf7\x5c"
8106 "\x6e\x12\x17\x72\x63\x57\xc7\xba"
8107 "\x3b\x6b\x38\x32\x73\x1b\x9c\x80"
8108 "\xc1\x7a\xc6\xcf\xcd\x35\xc0\x6b"
8109 "\x31\x1a\x6b\xe9\xd8\x2c\x29\x3f"
8110 "\x96\xfb\xb6\xcd\x13\x91\x3b\xc2"
8111 "\xd2\xa3\x31\x8d\xa4\xcd\x57\xcd"
8112 "\x13\x3d\x64\xfd\x06\xce\xe6\xdc"
8113 "\x0c\x24\x43\x31\x40\x57\xf1\x72"
8114 "\x17\xe3\x3a\x63\x6d\x35\xcf\x5d"
8115 "\x97\x40\x59\xdd\xf7\x3c\x02\xf7"
8116 "\x1c\x7e\x05\xbb\xa9\x0d\x01\xb1"
8117 "\x8e\xc0\x30\xa9\x53\x24\xc9\x89"
8118 "\x84\x6d\xaa\xd0\xcd\x91\xc2\x4d"
8119 "\x91\xb0\x89\xe2\xbf\x83\x44\xaa"
8120 "\x28\x72\x23\xa0\xc2\xad\xad\x1c"
8121 "\xfc\x3f\x09\x7a\x0b\xdc\xc5\x1b"
8122 "\x87\x13\xc6\x5b\x59\x8d\xf2\xc8"
8123 "\xaf\xdf\x11\x95",
8124 .rlen = 4100,
8125 .np = 2,
8126 .tap = { 4064, 36 },
8127 },
8128};
8129
8130/*
8131 * CTS (Cipher Text Stealing) mode tests
8132 */
8133#define CTS_MODE_ENC_TEST_VECTORS 6
8134#define CTS_MODE_DEC_TEST_VECTORS 6
8135static struct cipher_testvec cts_mode_enc_tv_template[] = {
8136 { /* from rfc3962 */
8137 .klen = 16,
8138 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8139 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8140 .ilen = 17,
8141 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8142 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8143 "\x20",
8144 .rlen = 17,
8145 .result = "\xc6\x35\x35\x68\xf2\xbf\x8c\xb4"
8146 "\xd8\xa5\x80\x36\x2d\xa7\xff\x7f"
8147 "\x97",
8148 }, {
8149 .klen = 16,
8150 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8151 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8152 .ilen = 31,
8153 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8154 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8155 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8156 "\x20\x47\x61\x75\x27\x73\x20",
8157 .rlen = 31,
8158 .result = "\xfc\x00\x78\x3e\x0e\xfd\xb2\xc1"
8159 "\xd4\x45\xd4\xc8\xef\xf7\xed\x22"
8160 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8161 "\xc0\x7b\x25\xe2\x5e\xcf\xe5",
8162 }, {
8163 .klen = 16,
8164 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8165 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8166 .ilen = 32,
8167 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8168 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8169 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8170 "\x20\x47\x61\x75\x27\x73\x20\x43",
8171 .rlen = 32,
8172 .result = "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8173 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8174 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8175 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84",
8176 }, {
8177 .klen = 16,
8178 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8179 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8180 .ilen = 47,
8181 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8182 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8183 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8184 "\x20\x47\x61\x75\x27\x73\x20\x43"
8185 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8186 "\x70\x6c\x65\x61\x73\x65\x2c",
8187 .rlen = 47,
8188 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8189 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8190 "\xb3\xff\xfd\x94\x0c\x16\xa1\x8c"
8191 "\x1b\x55\x49\xd2\xf8\x38\x02\x9e"
8192 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8193 "\xbe\x7f\xcb\xcc\x98\xeb\xf5",
8194 }, {
8195 .klen = 16,
8196 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8197 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8198 .ilen = 48,
8199 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8200 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8201 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8202 "\x20\x47\x61\x75\x27\x73\x20\x43"
8203 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8204 "\x70\x6c\x65\x61\x73\x65\x2c\x20",
8205 .rlen = 48,
8206 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8207 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8208 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8209 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8"
8210 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8211 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8",
8212 }, {
8213 .klen = 16,
8214 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8215 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8216 .ilen = 64,
8217 .input = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8218 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8219 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8220 "\x20\x47\x61\x75\x27\x73\x20\x43"
8221 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8222 "\x70\x6c\x65\x61\x73\x65\x2c\x20"
8223 "\x61\x6e\x64\x20\x77\x6f\x6e\x74"
8224 "\x6f\x6e\x20\x73\x6f\x75\x70\x2e",
8225 .rlen = 64,
8226 .result = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8227 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8228 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8229 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8230 "\x48\x07\xef\xe8\x36\xee\x89\xa5"
8231 "\x26\x73\x0d\xbc\x2f\x7b\xc8\x40"
8232 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8233 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8",
8234 }
8235};
8236
8237static struct cipher_testvec cts_mode_dec_tv_template[] = {
8238 { /* from rfc3962 */
8239 .klen = 16,
8240 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8241 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8242 .rlen = 17,
8243 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8244 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8245 "\x20",
8246 .ilen = 17,
8247 .input = "\xc6\x35\x35\x68\xf2\xbf\x8c\xb4"
8248 "\xd8\xa5\x80\x36\x2d\xa7\xff\x7f"
8249 "\x97",
8250 }, {
8251 .klen = 16,
8252 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8253 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8254 .rlen = 31,
8255 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8256 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8257 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8258 "\x20\x47\x61\x75\x27\x73\x20",
8259 .ilen = 31,
8260 .input = "\xfc\x00\x78\x3e\x0e\xfd\xb2\xc1"
8261 "\xd4\x45\xd4\xc8\xef\xf7\xed\x22"
8262 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8263 "\xc0\x7b\x25\xe2\x5e\xcf\xe5",
8264 }, {
8265 .klen = 16,
8266 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8267 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8268 .rlen = 32,
8269 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8270 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8271 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8272 "\x20\x47\x61\x75\x27\x73\x20\x43",
8273 .ilen = 32,
8274 .input = "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8275 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8276 "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8277 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84",
8278 }, {
8279 .klen = 16,
8280 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8281 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8282 .rlen = 47,
8283 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8284 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8285 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8286 "\x20\x47\x61\x75\x27\x73\x20\x43"
8287 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8288 "\x70\x6c\x65\x61\x73\x65\x2c",
8289 .ilen = 47,
8290 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8291 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8292 "\xb3\xff\xfd\x94\x0c\x16\xa1\x8c"
8293 "\x1b\x55\x49\xd2\xf8\x38\x02\x9e"
8294 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8295 "\xbe\x7f\xcb\xcc\x98\xeb\xf5",
8296 }, {
8297 .klen = 16,
8298 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8299 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8300 .rlen = 48,
8301 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8302 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8303 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8304 "\x20\x47\x61\x75\x27\x73\x20\x43"
8305 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8306 "\x70\x6c\x65\x61\x73\x65\x2c\x20",
8307 .ilen = 48,
8308 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8309 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8310 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8311 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8"
8312 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8313 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8",
8314 }, {
8315 .klen = 16,
8316 .key = "\x63\x68\x69\x63\x6b\x65\x6e\x20"
8317 "\x74\x65\x72\x69\x79\x61\x6b\x69",
8318 .rlen = 64,
8319 .result = "\x49\x20\x77\x6f\x75\x6c\x64\x20"
8320 "\x6c\x69\x6b\x65\x20\x74\x68\x65"
8321 "\x20\x47\x65\x6e\x65\x72\x61\x6c"
8322 "\x20\x47\x61\x75\x27\x73\x20\x43"
8323 "\x68\x69\x63\x6b\x65\x6e\x2c\x20"
8324 "\x70\x6c\x65\x61\x73\x65\x2c\x20"
8325 "\x61\x6e\x64\x20\x77\x6f\x6e\x74"
8326 "\x6f\x6e\x20\x73\x6f\x75\x70\x2e",
8327 .ilen = 64,
8328 .input = "\x97\x68\x72\x68\xd6\xec\xcc\xc0"
8329 "\xc0\x7b\x25\xe2\x5e\xcf\xe5\x84"
8330 "\x39\x31\x25\x23\xa7\x86\x62\xd5"
8331 "\xbe\x7f\xcb\xcc\x98\xeb\xf5\xa8"
8332 "\x48\x07\xef\xe8\x36\xee\x89\xa5"
8333 "\x26\x73\x0d\xbc\x2f\x7b\xc8\x40"
8334 "\x9d\xad\x8b\xbb\x96\xc4\xcd\xc0"
8335 "\x3b\xc1\x03\xe1\xa1\x94\xbb\xd8",
8336 }
8337};
8338
8339/*
8340 * Compression stuff.
8341 */
8342#define COMP_BUF_SIZE 512
8343
8344struct comp_testvec {
8345 int inlen, outlen;
8346 char input[COMP_BUF_SIZE];
8347 char output[COMP_BUF_SIZE];
8348};
8349
8350/*
8351 * Deflate test vectors (null-terminated strings).
8352 * Params: winbits=11, Z_DEFAULT_COMPRESSION, MAX_MEM_LEVEL.
8353 */
8354#define DEFLATE_COMP_TEST_VECTORS 2
8355#define DEFLATE_DECOMP_TEST_VECTORS 2
8356
8357static struct comp_testvec deflate_comp_tv_template[] = {
8358 {
8359 .inlen = 70,
8360 .outlen = 38,
8361 .input = "Join us now and share the software "
8362 "Join us now and share the software ",
8363 .output = "\xf3\xca\xcf\xcc\x53\x28\x2d\x56"
8364 "\xc8\xcb\x2f\x57\x48\xcc\x4b\x51"
8365 "\x28\xce\x48\x2c\x4a\x55\x28\xc9"
8366 "\x48\x55\x28\xce\x4f\x2b\x29\x07"
8367 "\x71\xbc\x08\x2b\x01\x00",
8368 }, {
8369 .inlen = 191,
8370 .outlen = 122,
8371 .input = "This document describes a compression method based on the DEFLATE"
8372 "compression algorithm. This document defines the application of "
8373 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
8374 .output = "\x5d\x8d\x31\x0e\xc2\x30\x10\x04"
8375 "\xbf\xb2\x2f\xc8\x1f\x10\x04\x09"
8376 "\x89\xc2\x85\x3f\x70\xb1\x2f\xf8"
8377 "\x24\xdb\x67\xd9\x47\xc1\xef\x49"
8378 "\x68\x12\x51\xae\x76\x67\xd6\x27"
8379 "\x19\x88\x1a\xde\x85\xab\x21\xf2"
8380 "\x08\x5d\x16\x1e\x20\x04\x2d\xad"
8381 "\xf3\x18\xa2\x15\x85\x2d\x69\xc4"
8382 "\x42\x83\x23\xb6\x6c\x89\x71\x9b"
8383 "\xef\xcf\x8b\x9f\xcf\x33\xca\x2f"
8384 "\xed\x62\xa9\x4c\x80\xff\x13\xaf"
8385 "\x52\x37\xed\x0e\x52\x6b\x59\x02"
8386 "\xd9\x4e\xe8\x7a\x76\x1d\x02\x98"
8387 "\xfe\x8a\x87\x83\xa3\x4f\x56\x8a"
8388 "\xb8\x9e\x8e\x5c\x57\xd3\xa0\x79"
8389 "\xfa\x02",
8390 },
8391};
8392
8393static struct comp_testvec deflate_decomp_tv_template[] = {
8394 {
8395 .inlen = 122,
8396 .outlen = 191,
8397 .input = "\x5d\x8d\x31\x0e\xc2\x30\x10\x04"
8398 "\xbf\xb2\x2f\xc8\x1f\x10\x04\x09"
8399 "\x89\xc2\x85\x3f\x70\xb1\x2f\xf8"
8400 "\x24\xdb\x67\xd9\x47\xc1\xef\x49"
8401 "\x68\x12\x51\xae\x76\x67\xd6\x27"
8402 "\x19\x88\x1a\xde\x85\xab\x21\xf2"
8403 "\x08\x5d\x16\x1e\x20\x04\x2d\xad"
8404 "\xf3\x18\xa2\x15\x85\x2d\x69\xc4"
8405 "\x42\x83\x23\xb6\x6c\x89\x71\x9b"
8406 "\xef\xcf\x8b\x9f\xcf\x33\xca\x2f"
8407 "\xed\x62\xa9\x4c\x80\xff\x13\xaf"
8408 "\x52\x37\xed\x0e\x52\x6b\x59\x02"
8409 "\xd9\x4e\xe8\x7a\x76\x1d\x02\x98"
8410 "\xfe\x8a\x87\x83\xa3\x4f\x56\x8a"
8411 "\xb8\x9e\x8e\x5c\x57\xd3\xa0\x79"
8412 "\xfa\x02",
8413 .output = "This document describes a compression method based on the DEFLATE"
8414 "compression algorithm. This document defines the application of "
8415 "the DEFLATE algorithm to the IP Payload Compression Protocol.",
8416 }, {
8417 .inlen = 38,
8418 .outlen = 70,
8419 .input = "\xf3\xca\xcf\xcc\x53\x28\x2d\x56"
8420 "\xc8\xcb\x2f\x57\x48\xcc\x4b\x51"
8421 "\x28\xce\x48\x2c\x4a\x55\x28\xc9"
8422 "\x48\x55\x28\xce\x4f\x2b\x29\x07"
8423 "\x71\xbc\x08\x2b\x01\x00",
8424 .output = "Join us now and share the software "
8425 "Join us now and share the software ",
8426 },
8427};
8428
8429/*
8430 * LZO test vectors (null-terminated strings).
8431 */
8432#define LZO_COMP_TEST_VECTORS 2
8433#define LZO_DECOMP_TEST_VECTORS 2
8434
8435static struct comp_testvec lzo_comp_tv_template[] = {
8436 {
8437 .inlen = 70,
8438 .outlen = 46,
8439 .input = "Join us now and share the software "
8440 "Join us now and share the software ",
8441 .output = "\x00\x0d\x4a\x6f\x69\x6e\x20\x75"
8442 "\x73\x20\x6e\x6f\x77\x20\x61\x6e"
8443 "\x64\x20\x73\x68\x61\x72\x65\x20"
8444 "\x74\x68\x65\x20\x73\x6f\x66\x74"
8445 "\x77\x70\x01\x01\x4a\x6f\x69\x6e"
8446 "\x3d\x88\x00\x11\x00\x00",
8447 }, {
8448 .inlen = 159,
8449 .outlen = 133,
8450 .input = "This document describes a compression method based on the LZO "
8451 "compression algorithm. This document defines the application of "
8452 "the LZO algorithm used in UBIFS.",
8453 .output = "\x00\x2b\x54\x68\x69\x73\x20\x64"
8454 "\x6f\x63\x75\x6d\x65\x6e\x74\x20"
8455 "\x64\x65\x73\x63\x72\x69\x62\x65"
8456 "\x73\x20\x61\x20\x63\x6f\x6d\x70"
8457 "\x72\x65\x73\x73\x69\x6f\x6e\x20"
8458 "\x6d\x65\x74\x68\x6f\x64\x20\x62"
8459 "\x61\x73\x65\x64\x20\x6f\x6e\x20"
8460 "\x74\x68\x65\x20\x4c\x5a\x4f\x2b"
8461 "\x8c\x00\x0d\x61\x6c\x67\x6f\x72"
8462 "\x69\x74\x68\x6d\x2e\x20\x20\x54"
8463 "\x68\x69\x73\x2a\x54\x01\x02\x66"
8464 "\x69\x6e\x65\x73\x94\x06\x05\x61"
8465 "\x70\x70\x6c\x69\x63\x61\x74\x76"
8466 "\x0a\x6f\x66\x88\x02\x60\x09\x27"
8467 "\xf0\x00\x0c\x20\x75\x73\x65\x64"
8468 "\x20\x69\x6e\x20\x55\x42\x49\x46"
8469 "\x53\x2e\x11\x00\x00",
8470 },
8471};
8472
8473static struct comp_testvec lzo_decomp_tv_template[] = {
8474 {
8475 .inlen = 133,
8476 .outlen = 159,
8477 .input = "\x00\x2b\x54\x68\x69\x73\x20\x64"
8478 "\x6f\x63\x75\x6d\x65\x6e\x74\x20"
8479 "\x64\x65\x73\x63\x72\x69\x62\x65"
8480 "\x73\x20\x61\x20\x63\x6f\x6d\x70"
8481 "\x72\x65\x73\x73\x69\x6f\x6e\x20"
8482 "\x6d\x65\x74\x68\x6f\x64\x20\x62"
8483 "\x61\x73\x65\x64\x20\x6f\x6e\x20"
8484 "\x74\x68\x65\x20\x4c\x5a\x4f\x2b"
8485 "\x8c\x00\x0d\x61\x6c\x67\x6f\x72"
8486 "\x69\x74\x68\x6d\x2e\x20\x20\x54"
8487 "\x68\x69\x73\x2a\x54\x01\x02\x66"
8488 "\x69\x6e\x65\x73\x94\x06\x05\x61"
8489 "\x70\x70\x6c\x69\x63\x61\x74\x76"
8490 "\x0a\x6f\x66\x88\x02\x60\x09\x27"
8491 "\xf0\x00\x0c\x20\x75\x73\x65\x64"
8492 "\x20\x69\x6e\x20\x55\x42\x49\x46"
8493 "\x53\x2e\x11\x00\x00",
8494 .output = "This document describes a compression method based on the LZO "
8495 "compression algorithm. This document defines the application of "
8496 "the LZO algorithm used in UBIFS.",
8497 }, {
8498 .inlen = 46,
8499 .outlen = 70,
8500 .input = "\x00\x0d\x4a\x6f\x69\x6e\x20\x75"
8501 "\x73\x20\x6e\x6f\x77\x20\x61\x6e"
8502 "\x64\x20\x73\x68\x61\x72\x65\x20"
8503 "\x74\x68\x65\x20\x73\x6f\x66\x74"
8504 "\x77\x70\x01\x01\x4a\x6f\x69\x6e"
8505 "\x3d\x88\x00\x11\x00\x00",
8506 .output = "Join us now and share the software "
8507 "Join us now and share the software ",
8508 },
8509};
8510
8511/*
8512 * Michael MIC test vectors from IEEE 802.11i
8513 */
8514#define MICHAEL_MIC_TEST_VECTORS 6
8515
8516static struct hash_testvec michael_mic_tv_template[] = {
8517 {
8518 .key = "\x00\x00\x00\x00\x00\x00\x00\x00",
8519 .ksize = 8,
8520 .plaintext = zeroed_string,
8521 .psize = 0,
8522 .digest = "\x82\x92\x5c\x1c\xa1\xd1\x30\xb8",
8523 },
8524 {
8525 .key = "\x82\x92\x5c\x1c\xa1\xd1\x30\xb8",
8526 .ksize = 8,
8527 .plaintext = "M",
8528 .psize = 1,
8529 .digest = "\x43\x47\x21\xca\x40\x63\x9b\x3f",
8530 },
8531 {
8532 .key = "\x43\x47\x21\xca\x40\x63\x9b\x3f",
8533 .ksize = 8,
8534 .plaintext = "Mi",
8535 .psize = 2,
8536 .digest = "\xe8\xf9\xbe\xca\xe9\x7e\x5d\x29",
8537 },
8538 {
8539 .key = "\xe8\xf9\xbe\xca\xe9\x7e\x5d\x29",
8540 .ksize = 8,
8541 .plaintext = "Mic",
8542 .psize = 3,
8543 .digest = "\x90\x03\x8f\xc6\xcf\x13\xc1\xdb",
8544 },
8545 {
8546 .key = "\x90\x03\x8f\xc6\xcf\x13\xc1\xdb",
8547 .ksize = 8,
8548 .plaintext = "Mich",
8549 .psize = 4,
8550 .digest = "\xd5\x5e\x10\x05\x10\x12\x89\x86",
8551 },
8552 {
8553 .key = "\xd5\x5e\x10\x05\x10\x12\x89\x86",
8554 .ksize = 8,
8555 .plaintext = "Michael",
8556 .psize = 7,
8557 .digest = "\x0a\x94\x2b\x12\x4e\xca\xa5\x46",
8558 }
8559};
8560
8561/*
8562 * CRC32C test vectors
8563 */
8564#define CRC32C_TEST_VECTORS 14
8565
8566static struct hash_testvec crc32c_tv_template[] = {
8567 {
8568 .psize = 0,
8569 .digest = "\x00\x00\x00\x00",
8570 },
8571 {
8572 .key = "\x87\xa9\xcb\xed",
8573 .ksize = 4,
8574 .psize = 0,
8575 .digest = "\x78\x56\x34\x12",
8576 },
8577 {
8578 .key = "\xff\xff\xff\xff",
8579 .ksize = 4,
8580 .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
8581 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
8582 "\x11\x12\x13\x14\x15\x16\x17\x18"
8583 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
8584 "\x21\x22\x23\x24\x25\x26\x27\x28",
8585 .psize = 40,
8586 .digest = "\x7f\x15\x2c\x0e",
8587 },
8588 {
8589 .key = "\xff\xff\xff\xff",
8590 .ksize = 4,
8591 .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8592 "\x31\x32\x33\x34\x35\x36\x37\x38"
8593 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8594 "\x41\x42\x43\x44\x45\x46\x47\x48"
8595 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
8596 .psize = 40,
8597 .digest = "\xf6\xeb\x80\xe9",
8598 },
8599 {
8600 .key = "\xff\xff\xff\xff",
8601 .ksize = 4,
8602 .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
8603 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8604 "\x61\x62\x63\x64\x65\x66\x67\x68"
8605 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8606 "\x71\x72\x73\x74\x75\x76\x77\x78",
8607 .psize = 40,
8608 .digest = "\xed\xbd\x74\xde",
8609 },
8610 {
8611 .key = "\xff\xff\xff\xff",
8612 .ksize = 4,
8613 .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8614 "\x81\x82\x83\x84\x85\x86\x87\x88"
8615 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8616 "\x91\x92\x93\x94\x95\x96\x97\x98"
8617 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
8618 .psize = 40,
8619 .digest = "\x62\xc8\x79\xd5",
8620 },
8621 {
8622 .key = "\xff\xff\xff\xff",
8623 .ksize = 4,
8624 .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8625 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8626 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8627 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8628 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
8629 .psize = 40,
8630 .digest = "\xd0\x9a\x97\xba",
8631 },
8632 {
8633 .key = "\xff\xff\xff\xff",
8634 .ksize = 4,
8635 .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8636 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8637 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8638 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8639 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8640 .psize = 40,
8641 .digest = "\x13\xd9\x29\x2b",
8642 },
8643 {
8644 .key = "\x80\xea\xd3\xf1",
8645 .ksize = 4,
8646 .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8647 "\x31\x32\x33\x34\x35\x36\x37\x38"
8648 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8649 "\x41\x42\x43\x44\x45\x46\x47\x48"
8650 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
8651 .psize = 40,
8652 .digest = "\x0c\xb5\xe2\xa2",
8653 },
8654 {
8655 .key = "\xf3\x4a\x1d\x5d",
8656 .ksize = 4,
8657 .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
8658 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8659 "\x61\x62\x63\x64\x65\x66\x67\x68"
8660 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8661 "\x71\x72\x73\x74\x75\x76\x77\x78",
8662 .psize = 40,
8663 .digest = "\xd1\x7f\xfb\xa6",
8664 },
8665 {
8666 .key = "\x2e\x80\x04\x59",
8667 .ksize = 4,
8668 .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8669 "\x81\x82\x83\x84\x85\x86\x87\x88"
8670 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8671 "\x91\x92\x93\x94\x95\x96\x97\x98"
8672 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
8673 .psize = 40,
8674 .digest = "\x59\x33\xe6\x7a",
8675 },
8676 {
8677 .key = "\xa6\xcc\x19\x85",
8678 .ksize = 4,
8679 .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8680 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8681 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8682 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8683 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
8684 .psize = 40,
8685 .digest = "\xbe\x03\x01\xd2",
8686 },
8687 {
8688 .key = "\x41\xfc\xfe\x2d",
8689 .ksize = 4,
8690 .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8691 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8692 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8693 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8694 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8695 .psize = 40,
8696 .digest = "\x75\xd3\xc5\x24",
8697 },
8698 {
8699 .key = "\xff\xff\xff\xff",
8700 .ksize = 4,
8701 .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
8702 "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
8703 "\x11\x12\x13\x14\x15\x16\x17\x18"
8704 "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
8705 "\x21\x22\x23\x24\x25\x26\x27\x28"
8706 "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
8707 "\x31\x32\x33\x34\x35\x36\x37\x38"
8708 "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
8709 "\x41\x42\x43\x44\x45\x46\x47\x48"
8710 "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
8711 "\x51\x52\x53\x54\x55\x56\x57\x58"
8712 "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
8713 "\x61\x62\x63\x64\x65\x66\x67\x68"
8714 "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
8715 "\x71\x72\x73\x74\x75\x76\x77\x78"
8716 "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
8717 "\x81\x82\x83\x84\x85\x86\x87\x88"
8718 "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
8719 "\x91\x92\x93\x94\x95\x96\x97\x98"
8720 "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
8721 "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
8722 "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
8723 "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
8724 "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
8725 "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8"
8726 "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
8727 "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
8728 "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
8729 "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
8730 "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
8731 .psize = 240,
8732 .digest = "\x75\xd3\xc5\x24",
8733 .np = 2,
8734 .tap = { 31, 209 }
8735 },
8736};
8737
8738#endif /* _CRYPTO_TESTMGR_H */
diff --git a/include/crypto/internal/rng.h b/include/crypto/internal/rng.h
new file mode 100644
index 000000000000..896973369573
--- /dev/null
+++ b/include/crypto/internal/rng.h
@@ -0,0 +1,26 @@
1/*
2 * RNG: Random Number Generator algorithms under the crypto API
3 *
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 */
12
13#ifndef _CRYPTO_INTERNAL_RNG_H
14#define _CRYPTO_INTERNAL_RNG_H
15
16#include <crypto/algapi.h>
17#include <crypto/rng.h>
18
19extern const struct crypto_type crypto_rng_type;
20
21static inline void *crypto_rng_ctx(struct crypto_rng *tfm)
22{
23 return crypto_tfm_ctx(&tfm->base);
24}
25
26#endif
diff --git a/include/crypto/internal/skcipher.h b/include/crypto/internal/skcipher.h
index ccc32bad9a89..2ba42cd7d6aa 100644
--- a/include/crypto/internal/skcipher.h
+++ b/include/crypto/internal/skcipher.h
@@ -15,7 +15,6 @@
15 15
16#include <crypto/algapi.h> 16#include <crypto/algapi.h>
17#include <crypto/skcipher.h> 17#include <crypto/skcipher.h>
18#include <linux/init.h>
19#include <linux/types.h> 18#include <linux/types.h>
20 19
21struct rtattr; 20struct rtattr;
@@ -65,11 +64,6 @@ void skcipher_geniv_free(struct crypto_instance *inst);
65int skcipher_geniv_init(struct crypto_tfm *tfm); 64int skcipher_geniv_init(struct crypto_tfm *tfm);
66void skcipher_geniv_exit(struct crypto_tfm *tfm); 65void skcipher_geniv_exit(struct crypto_tfm *tfm);
67 66
68int __init eseqiv_module_init(void);
69void __exit eseqiv_module_exit(void);
70int __init chainiv_module_init(void);
71void chainiv_module_exit(void);
72
73static inline struct crypto_ablkcipher *skcipher_geniv_cipher( 67static inline struct crypto_ablkcipher *skcipher_geniv_cipher(
74 struct crypto_ablkcipher *geniv) 68 struct crypto_ablkcipher *geniv)
75{ 69{
diff --git a/include/crypto/rng.h b/include/crypto/rng.h
new file mode 100644
index 000000000000..c93f9b917925
--- /dev/null
+++ b/include/crypto/rng.h
@@ -0,0 +1,75 @@
1/*
2 * RNG: Random Number Generator algorithms under the crypto API
3 *
4 * Copyright (c) 2008 Neil Horman <nhorman@tuxdriver.com>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 *
11 */
12
13#ifndef _CRYPTO_RNG_H
14#define _CRYPTO_RNG_H
15
16#include <linux/crypto.h>
17
18extern struct crypto_rng *crypto_default_rng;
19
20int crypto_get_default_rng(void);
21void crypto_put_default_rng(void);
22
23static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm)
24{
25 return (struct crypto_rng *)tfm;
26}
27
28static inline struct crypto_rng *crypto_alloc_rng(const char *alg_name,
29 u32 type, u32 mask)
30{
31 type &= ~CRYPTO_ALG_TYPE_MASK;
32 type |= CRYPTO_ALG_TYPE_RNG;
33 mask |= CRYPTO_ALG_TYPE_MASK;
34
35 return __crypto_rng_cast(crypto_alloc_base(alg_name, type, mask));
36}
37
38static inline struct crypto_tfm *crypto_rng_tfm(struct crypto_rng *tfm)
39{
40 return &tfm->base;
41}
42
43static inline struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm)
44{
45 return &crypto_rng_tfm(tfm)->__crt_alg->cra_rng;
46}
47
48static inline struct rng_tfm *crypto_rng_crt(struct crypto_rng *tfm)
49{
50 return &crypto_rng_tfm(tfm)->crt_rng;
51}
52
53static inline void crypto_free_rng(struct crypto_rng *tfm)
54{
55 crypto_free_tfm(crypto_rng_tfm(tfm));
56}
57
58static inline int crypto_rng_get_bytes(struct crypto_rng *tfm,
59 u8 *rdata, unsigned int dlen)
60{
61 return crypto_rng_crt(tfm)->rng_gen_random(tfm, rdata, dlen);
62}
63
64static inline int crypto_rng_reset(struct crypto_rng *tfm,
65 u8 *seed, unsigned int slen)
66{
67 return crypto_rng_crt(tfm)->rng_reset(tfm, seed, slen);
68}
69
70static inline int crypto_rng_seedsize(struct crypto_rng *tfm)
71{
72 return crypto_rng_alg(tfm)->seedsize;
73}
74
75#endif
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index c43dc47fdf75..3d2317e4af2e 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -38,6 +38,7 @@
38#define CRYPTO_ALG_TYPE_DIGEST 0x00000008 38#define CRYPTO_ALG_TYPE_DIGEST 0x00000008
39#define CRYPTO_ALG_TYPE_HASH 0x00000009 39#define CRYPTO_ALG_TYPE_HASH 0x00000009
40#define CRYPTO_ALG_TYPE_AHASH 0x0000000a 40#define CRYPTO_ALG_TYPE_AHASH 0x0000000a
41#define CRYPTO_ALG_TYPE_RNG 0x0000000c
41 42
42#define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e 43#define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e
43#define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c 44#define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c
@@ -61,6 +62,14 @@
61#define CRYPTO_ALG_GENIV 0x00000200 62#define CRYPTO_ALG_GENIV 0x00000200
62 63
63/* 64/*
65 * Set if the algorithm has passed automated run-time testing. Note that
66 * if there is no run-time testing for a given algorithm it is considered
67 * to have passed.
68 */
69
70#define CRYPTO_ALG_TESTED 0x00000400
71
72/*
64 * Transform masks and values (for crt_flags). 73 * Transform masks and values (for crt_flags).
65 */ 74 */
66#define CRYPTO_TFM_REQ_MASK 0x000fff00 75#define CRYPTO_TFM_REQ_MASK 0x000fff00
@@ -105,6 +114,7 @@ struct crypto_aead;
105struct crypto_blkcipher; 114struct crypto_blkcipher;
106struct crypto_hash; 115struct crypto_hash;
107struct crypto_ahash; 116struct crypto_ahash;
117struct crypto_rng;
108struct crypto_tfm; 118struct crypto_tfm;
109struct crypto_type; 119struct crypto_type;
110struct aead_givcrypt_request; 120struct aead_givcrypt_request;
@@ -290,6 +300,15 @@ struct compress_alg {
290 unsigned int slen, u8 *dst, unsigned int *dlen); 300 unsigned int slen, u8 *dst, unsigned int *dlen);
291}; 301};
292 302
303struct rng_alg {
304 int (*rng_make_random)(struct crypto_rng *tfm, u8 *rdata,
305 unsigned int dlen);
306 int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen);
307
308 unsigned int seedsize;
309};
310
311
293#define cra_ablkcipher cra_u.ablkcipher 312#define cra_ablkcipher cra_u.ablkcipher
294#define cra_aead cra_u.aead 313#define cra_aead cra_u.aead
295#define cra_blkcipher cra_u.blkcipher 314#define cra_blkcipher cra_u.blkcipher
@@ -298,6 +317,7 @@ struct compress_alg {
298#define cra_hash cra_u.hash 317#define cra_hash cra_u.hash
299#define cra_ahash cra_u.ahash 318#define cra_ahash cra_u.ahash
300#define cra_compress cra_u.compress 319#define cra_compress cra_u.compress
320#define cra_rng cra_u.rng
301 321
302struct crypto_alg { 322struct crypto_alg {
303 struct list_head cra_list; 323 struct list_head cra_list;
@@ -325,6 +345,7 @@ struct crypto_alg {
325 struct hash_alg hash; 345 struct hash_alg hash;
326 struct ahash_alg ahash; 346 struct ahash_alg ahash;
327 struct compress_alg compress; 347 struct compress_alg compress;
348 struct rng_alg rng;
328 } cra_u; 349 } cra_u;
329 350
330 int (*cra_init)(struct crypto_tfm *tfm); 351 int (*cra_init)(struct crypto_tfm *tfm);
@@ -430,6 +451,12 @@ struct compress_tfm {
430 u8 *dst, unsigned int *dlen); 451 u8 *dst, unsigned int *dlen);
431}; 452};
432 453
454struct rng_tfm {
455 int (*rng_gen_random)(struct crypto_rng *tfm, u8 *rdata,
456 unsigned int dlen);
457 int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen);
458};
459
433#define crt_ablkcipher crt_u.ablkcipher 460#define crt_ablkcipher crt_u.ablkcipher
434#define crt_aead crt_u.aead 461#define crt_aead crt_u.aead
435#define crt_blkcipher crt_u.blkcipher 462#define crt_blkcipher crt_u.blkcipher
@@ -437,6 +464,7 @@ struct compress_tfm {
437#define crt_hash crt_u.hash 464#define crt_hash crt_u.hash
438#define crt_ahash crt_u.ahash 465#define crt_ahash crt_u.ahash
439#define crt_compress crt_u.compress 466#define crt_compress crt_u.compress
467#define crt_rng crt_u.rng
440 468
441struct crypto_tfm { 469struct crypto_tfm {
442 470
@@ -450,6 +478,7 @@ struct crypto_tfm {
450 struct hash_tfm hash; 478 struct hash_tfm hash;
451 struct ahash_tfm ahash; 479 struct ahash_tfm ahash;
452 struct compress_tfm compress; 480 struct compress_tfm compress;
481 struct rng_tfm rng;
453 } crt_u; 482 } crt_u;
454 483
455 struct crypto_alg *__crt_alg; 484 struct crypto_alg *__crt_alg;
@@ -481,6 +510,10 @@ struct crypto_hash {
481 struct crypto_tfm base; 510 struct crypto_tfm base;
482}; 511};
483 512
513struct crypto_rng {
514 struct crypto_tfm base;
515};
516
484enum { 517enum {
485 CRYPTOA_UNSPEC, 518 CRYPTOA_UNSPEC,
486 CRYPTOA_ALG, 519 CRYPTOA_ALG,
@@ -515,6 +548,8 @@ struct crypto_tfm *crypto_alloc_tfm(const char *alg_name, u32 tfm_flags);
515struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); 548struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask);
516void crypto_free_tfm(struct crypto_tfm *tfm); 549void crypto_free_tfm(struct crypto_tfm *tfm);
517 550
551int alg_test(const char *driver, const char *alg, u32 type, u32 mask);
552
518/* 553/*
519 * Transform helpers which query the underlying algorithm. 554 * Transform helpers which query the underlying algorithm.
520 */ 555 */