diff options
-rw-r--r-- | arch/x86/crypto/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/crypto/crc32c-intel.c | 197 | ||||
-rw-r--r-- | crypto/Kconfig | 127 | ||||
-rw-r--r-- | crypto/Makefile | 12 | ||||
-rw-r--r-- | crypto/algapi.c | 147 | ||||
-rw-r--r-- | crypto/algboss.c (renamed from crypto/cryptomgr.c) | 92 | ||||
-rw-r--r-- | crypto/ansi_cprng.c | 417 | ||||
-rw-r--r-- | crypto/api.c | 81 | ||||
-rw-r--r-- | crypto/blkcipher.c | 29 | ||||
-rw-r--r-- | crypto/chainiv.c | 44 | ||||
-rw-r--r-- | crypto/eseqiv.c | 35 | ||||
-rw-r--r-- | crypto/fips.c | 27 | ||||
-rw-r--r-- | crypto/internal.h | 18 | ||||
-rw-r--r-- | crypto/krng.c | 66 | ||||
-rw-r--r-- | crypto/proc.c | 57 | ||||
-rw-r--r-- | crypto/rng.c | 126 | ||||
-rw-r--r-- | crypto/seqiv.c | 27 | ||||
-rw-r--r-- | crypto/tcrypt.c | 1347 | ||||
-rw-r--r-- | crypto/tcrypt.h | 8709 | ||||
-rw-r--r-- | crypto/testmgr.c | 1868 | ||||
-rw-r--r-- | crypto/testmgr.h | 8738 | ||||
-rw-r--r-- | include/crypto/internal/rng.h | 26 | ||||
-rw-r--r-- | include/crypto/internal/skcipher.h | 6 | ||||
-rw-r--r-- | include/crypto/rng.h | 75 | ||||
-rw-r--r-- | include/linux/crypto.h | 35 |
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 | |||
10 | obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o | 10 | obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o |
11 | obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o | 11 | obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o |
12 | 12 | ||
13 | obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o | ||
14 | |||
13 | aes-i586-y := aes-i586-asm_32.o aes_glue.o | 15 | aes-i586-y := aes-i586-asm_32.o aes_glue.o |
14 | twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o | 16 | twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o |
15 | salsa20-i586-y := salsa20-i586-asm_32.o salsa20_glue.o | 17 | salsa20-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 | |||
37 | static 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 | |||
51 | static 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 | */ | ||
78 | static 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 | |||
91 | static 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 | |||
101 | static 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 | |||
116 | static 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 | |||
124 | static 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 | |||
139 | static 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 | |||
150 | static 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 | |||
175 | static 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 | |||
183 | static void __exit crc32c_intel_mod_fini(void) | ||
184 | { | ||
185 | crypto_unregister_alg(&alg); | ||
186 | } | ||
187 | |||
188 | module_init(crc32c_intel_mod_init); | ||
189 | module_exit(crc32c_intel_mod_fini); | ||
190 | |||
191 | MODULE_AUTHOR("Austin Zhang <austin.zhang@intel.com>, Kent Liu <kent.liu@intel.com>"); | ||
192 | MODULE_DESCRIPTION("CRC32c (Castagnoli) optimization using Intel Hardware."); | ||
193 | MODULE_LICENSE("GPL"); | ||
194 | |||
195 | MODULE_ALIAS("crc32c"); | ||
196 | MODULE_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 | ||
22 | comment "Crypto core or helper" | 22 | comment "Crypto core or helper" |
23 | 23 | ||
24 | config 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 | |||
24 | config CRYPTO_ALGAPI | 32 | config CRYPTO_ALGAPI |
25 | tristate | 33 | tristate |
26 | help | 34 | help |
@@ -33,14 +41,21 @@ config CRYPTO_AEAD | |||
33 | config CRYPTO_BLKCIPHER | 41 | config CRYPTO_BLKCIPHER |
34 | tristate | 42 | tristate |
35 | select CRYPTO_ALGAPI | 43 | select CRYPTO_ALGAPI |
44 | select CRYPTO_RNG | ||
36 | 45 | ||
37 | config CRYPTO_HASH | 46 | config CRYPTO_HASH |
38 | tristate | 47 | tristate |
39 | select CRYPTO_ALGAPI | 48 | select CRYPTO_ALGAPI |
40 | 49 | ||
50 | config CRYPTO_RNG | ||
51 | tristate | ||
52 | select CRYPTO_ALGAPI | ||
53 | |||
41 | config CRYPTO_MANAGER | 54 | config 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 | |||
85 | config CRYPTO_TEST | 100 | config 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 | |||
238 | config 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 | ||
224 | config CRYPTO_MD4 | 250 | config 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 | ||
245 | config CRYPTO_RMD128 | 271 | config 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 | ||
258 | config CRYPTO_RMD160 | 284 | config 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 | ||
274 | config CRYPTO_RMD256 | 301 | config 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 | ||
285 | config CRYPTO_RMD320 | 313 | config 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 | ||
296 | config CRYPTO_SHA1 | 325 | config 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 | ||
314 | config CRYPTO_SHA512 | 343 | config 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 | ||
698 | comment "Random Number Generation" | ||
699 | |||
700 | config 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 | |||
669 | source "drivers/crypto/Kconfig" | 710 | source "drivers/crypto/Kconfig" |
670 | 711 | ||
671 | endif # if CRYPTO | 712 | endif # if CRYPTO |
diff --git a/crypto/Makefile b/crypto/Makefile index d4f3ed857df0..5862b807334e 100644 --- a/crypto/Makefile +++ b/crypto/Makefile | |||
@@ -5,6 +5,8 @@ | |||
5 | obj-$(CONFIG_CRYPTO) += crypto.o | 5 | obj-$(CONFIG_CRYPTO) += crypto.o |
6 | crypto-objs := api.o cipher.o digest.o compress.o | 6 | crypto-objs := api.o cipher.o digest.o compress.o |
7 | 7 | ||
8 | obj-$(CONFIG_CRYPTO_FIPS) += fips.o | ||
9 | |||
8 | crypto_algapi-$(CONFIG_PROC_FS) += proc.o | 10 | crypto_algapi-$(CONFIG_PROC_FS) += proc.o |
9 | crypto_algapi-objs := algapi.o scatterwalk.o $(crypto_algapi-y) | 11 | crypto_algapi-objs := algapi.o scatterwalk.o $(crypto_algapi-y) |
10 | obj-$(CONFIG_CRYPTO_ALGAPI) += crypto_algapi.o | 12 | obj-$(CONFIG_CRYPTO_ALGAPI) += crypto_algapi.o |
@@ -13,15 +15,17 @@ obj-$(CONFIG_CRYPTO_AEAD) += aead.o | |||
13 | 15 | ||
14 | crypto_blkcipher-objs := ablkcipher.o | 16 | crypto_blkcipher-objs := ablkcipher.o |
15 | crypto_blkcipher-objs += blkcipher.o | 17 | crypto_blkcipher-objs += blkcipher.o |
16 | crypto_blkcipher-objs += chainiv.o | ||
17 | crypto_blkcipher-objs += eseqiv.o | ||
18 | obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o | 18 | obj-$(CONFIG_CRYPTO_BLKCIPHER) += crypto_blkcipher.o |
19 | obj-$(CONFIG_CRYPTO_BLKCIPHER) += chainiv.o | ||
20 | obj-$(CONFIG_CRYPTO_BLKCIPHER) += eseqiv.o | ||
19 | obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o | 21 | obj-$(CONFIG_CRYPTO_SEQIV) += seqiv.o |
20 | 22 | ||
21 | crypto_hash-objs := hash.o | 23 | crypto_hash-objs := hash.o |
22 | crypto_hash-objs += ahash.o | 24 | crypto_hash-objs += ahash.o |
23 | obj-$(CONFIG_CRYPTO_HASH) += crypto_hash.o | 25 | obj-$(CONFIG_CRYPTO_HASH) += crypto_hash.o |
24 | 26 | ||
27 | cryptomgr-objs := algboss.o testmgr.o | ||
28 | |||
25 | obj-$(CONFIG_CRYPTO_MANAGER) += cryptomgr.o | 29 | obj-$(CONFIG_CRYPTO_MANAGER) += cryptomgr.o |
26 | obj-$(CONFIG_CRYPTO_HMAC) += hmac.o | 30 | obj-$(CONFIG_CRYPTO_HMAC) += hmac.o |
27 | obj-$(CONFIG_CRYPTO_XCBC) += xcbc.o | 31 | obj-$(CONFIG_CRYPTO_XCBC) += xcbc.o |
@@ -69,7 +73,9 @@ obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o | |||
69 | obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o | 73 | obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o |
70 | obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o | 74 | obj-$(CONFIG_CRYPTO_AUTHENC) += authenc.o |
71 | obj-$(CONFIG_CRYPTO_LZO) += lzo.o | 75 | obj-$(CONFIG_CRYPTO_LZO) += lzo.o |
72 | 76 | obj-$(CONFIG_CRYPTO_RNG) += rng.o | |
77 | obj-$(CONFIG_CRYPTO_RNG) += krng.o | ||
78 | obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o | ||
73 | obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o | 79 | obj-$(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 | ||
24 | static void crypto_remove_final(struct list_head *list); | ||
25 | |||
24 | static LIST_HEAD(crypto_template_list); | 26 | static LIST_HEAD(crypto_template_list); |
25 | 27 | ||
26 | void crypto_larval_error(const char *name, u32 type, u32 mask) | 28 | void 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 | ||
131 | static int __crypto_register_alg(struct crypto_alg *alg, | 131 | static 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 | |||
181 | out: | ||
182 | return larval; | ||
183 | |||
184 | free_larval: | ||
185 | kfree(larval); | ||
186 | err: | ||
187 | larval = ERR_PTR(ret); | ||
188 | goto out; | ||
189 | } | ||
190 | |||
191 | void 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 | |||
212 | found: | ||
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); | 260 | complete: |
189 | ret = 0; | 261 | complete_all(&test->completion); |
190 | 262 | ||
191 | out: | 263 | unlock: |
192 | return ret; | 264 | up_write(&crypto_alg_sem); |
265 | |||
266 | crypto_remove_final(&list); | ||
193 | } | 267 | } |
268 | EXPORT_SYMBOL_GPL(crypto_alg_tested); | ||
194 | 269 | ||
195 | static void crypto_remove_final(struct list_head *list) | 270 | static 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 | ||
281 | static 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 | |||
295 | out: | ||
296 | crypto_larval_kill(&larval->alg); | ||
297 | } | ||
298 | |||
206 | int crypto_register_alg(struct crypto_alg *alg) | 299 | int 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 | } |
222 | EXPORT_SYMBOL_GPL(crypto_register_alg); | 318 | EXPORT_SYMBOL_GPL(crypto_register_alg); |
223 | 319 | ||
@@ -335,8 +431,8 @@ EXPORT_SYMBOL_GPL(crypto_lookup_template); | |||
335 | int crypto_register_instance(struct crypto_template *tmpl, | 431 | int 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, | |||
356 | unlock: | 452 | unlock: |
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 | ||
361 | err: | 462 | err: |
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 | |||
53 | struct crypto_test_param { | ||
54 | char driver[CRYPTO_MAX_ALG_NAME]; | ||
55 | char alg[CRYPTO_MAX_ALG_NAME]; | ||
56 | u32 type; | ||
48 | }; | 57 | }; |
49 | 58 | ||
50 | static int cryptomgr_probe(void *data) | 59 | static int cryptomgr_probe(void *data) |
@@ -76,8 +85,7 @@ out: | |||
76 | module_put_and_exit(0); | 85 | module_put_and_exit(0); |
77 | 86 | ||
78 | err: | 87 | err: |
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] = ¶m->type.attr; | 182 | param->tb[0] = ¶m->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 | |||
195 | err_free_param: | ||
196 | kfree(param); | ||
197 | err_put_module: | ||
198 | module_put(THIS_MODULE); | ||
199 | err: | ||
200 | return NOTIFY_OK; | ||
201 | } | ||
202 | |||
203 | static 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 | |||
215 | skiptest: | ||
216 | crypto_alg_tested(param->driver, err); | ||
217 | |||
218 | kfree(param); | ||
219 | module_put_and_exit(0); | ||
220 | } | ||
221 | |||
222 | static 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 | ||
207 | static int __init cryptomgr_init(void) | 269 | static 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 | |||
283 | free_testmgr: | ||
284 | testmgr_exit(); | ||
285 | return err; | ||
210 | } | 286 | } |
211 | 287 | ||
212 | static void __exit cryptomgr_exit(void) | 288 | static 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 | ||
218 | module_init(cryptomgr_init); | 296 | subsys_initcall(cryptomgr_init); |
219 | module_exit(cryptomgr_exit); | 297 | module_exit(cryptomgr_exit); |
220 | 298 | ||
221 | MODULE_LICENSE("GPL"); | 299 | MODULE_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 | |||
46 | struct 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 | |||
58 | static int dbg; | ||
59 | |||
60 | static 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 {\ | ||
71 | if (dbg)\ | ||
72 | printk(format, ##args);\ | ||
73 | } while (0) | ||
74 | |||
75 | static 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 | */ | ||
88 | static 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 */ | ||
182 | static 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 | |||
216 | remainder: | ||
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 | |||
259 | done: | ||
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 | |||
266 | static void free_prng_context(struct prng_context *ctx) | ||
267 | { | ||
268 | crypto_free_cipher(ctx->tfm); | ||
269 | } | ||
270 | |||
271 | static 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; | ||
323 | out: | ||
324 | spin_unlock(&ctx->prng_lock); | ||
325 | |||
326 | return rc; | ||
327 | |||
328 | } | ||
329 | |||
330 | static 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 | |||
339 | static void cprng_exit(struct crypto_tfm *tfm) | ||
340 | { | ||
341 | free_prng_context(crypto_tfm_ctx(tfm)); | ||
342 | } | ||
343 | |||
344 | static 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 | |||
352 | static 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 | |||
367 | static 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 */ | ||
389 | static 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; | ||
400 | out: | ||
401 | return 0; | ||
402 | } | ||
403 | |||
404 | static void __exit prng_mod_fini(void) | ||
405 | { | ||
406 | crypto_unregister_alg(&rng_alg); | ||
407 | return; | ||
408 | } | ||
409 | |||
410 | MODULE_LICENSE("GPL"); | ||
411 | MODULE_DESCRIPTION("Software Pseudo Random Number Generator"); | ||
412 | MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>"); | ||
413 | module_param(dbg, int, 0); | ||
414 | MODULE_PARM_DESC(dbg, "Boolean to enable debugging (0/1 == off/on)"); | ||
415 | module_init(prng_mod_init); | ||
416 | module_exit(prng_mod_fini); | ||
417 | MODULE_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 | } |
56 | EXPORT_SYMBOL_GPL(crypto_mod_put); | 56 | EXPORT_SYMBOL_GPL(crypto_mod_put); |
57 | 57 | ||
58 | struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask) | 58 | static inline int crypto_is_test_larval(struct crypto_larval *larval) |
59 | { | ||
60 | return larval->alg.cra_driver_name[0]; | ||
61 | } | ||
62 | |||
63 | static 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 | } |
95 | EXPORT_SYMBOL_GPL(__crypto_alg_lookup); | ||
96 | 102 | ||
97 | static void crypto_larval_destroy(struct crypto_alg *alg) | 103 | static 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 | ||
107 | static struct crypto_alg *crypto_larval_alloc(const char *name, u32 type, | 113 | struct 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 | } | ||
131 | EXPORT_SYMBOL_GPL(crypto_larval_alloc); | ||
132 | |||
133 | static 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); | |||
152 | static struct crypto_alg *crypto_larval_wait(struct crypto_alg *alg) | 171 | static 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 | ||
168 | static struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, | 196 | struct 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 | } |
206 | EXPORT_SYMBOL_GPL(crypto_alg_lookup); | ||
179 | 207 | ||
180 | struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask) | 208 | struct 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 | } |
197 | EXPORT_SYMBOL_GPL(crypto_larval_lookup); | 225 | EXPORT_SYMBOL_GPL(crypto_larval_lookup); |
198 | 226 | ||
227 | int 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 | } | ||
239 | EXPORT_SYMBOL_GPL(crypto_probing_notify); | ||
240 | |||
199 | struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask) | 241 | struct 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 | } |
697 | EXPORT_SYMBOL_GPL(skcipher_geniv_exit); | 697 | EXPORT_SYMBOL_GPL(skcipher_geniv_exit); |
698 | 698 | ||
699 | static 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 | |||
711 | out: | ||
712 | return err; | ||
713 | |||
714 | eseqiv_err: | ||
715 | chainiv_module_exit(); | ||
716 | goto out; | ||
717 | } | ||
718 | |||
719 | static void __exit blkcipher_module_exit(void) | ||
720 | { | ||
721 | eseqiv_module_exit(); | ||
722 | chainiv_module_exit(); | ||
723 | } | ||
724 | |||
725 | module_init(blkcipher_module_init); | ||
726 | module_exit(blkcipher_module_exit); | ||
727 | |||
728 | MODULE_LICENSE("GPL"); | 699 | MODULE_LICENSE("GPL"); |
729 | MODULE_DESCRIPTION("Generic block chaining cipher type"); | 700 | MODULE_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 | ||
95 | unlock: | 97 | unlock: |
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 | ||
217 | unlock: | 224 | unlock: |
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 | |||
220 | out: | 230 | out: |
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 | ||
312 | out: | 326 | out: |
313 | return inst; | 327 | return inst; |
328 | |||
329 | put_rng: | ||
330 | crypto_put_default_rng(); | ||
331 | goto out; | ||
332 | } | ||
333 | |||
334 | static void chainiv_free(struct crypto_instance *inst) | ||
335 | { | ||
336 | skcipher_geniv_free(inst); | ||
337 | crypto_put_default_rng(); | ||
314 | } | 338 | } |
315 | 339 | ||
316 | static struct crypto_template chainiv_tmpl = { | 340 | static 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 | ||
323 | int __init chainiv_module_init(void) | 347 | static 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 | ||
328 | void chainiv_module_exit(void) | 352 | static void chainiv_module_exit(void) |
329 | { | 353 | { |
330 | crypto_unregister_template(&chainiv_tmpl); | 354 | crypto_unregister_template(&chainiv_tmpl); |
331 | } | 355 | } |
356 | |||
357 | module_init(chainiv_module_init); | ||
358 | module_exit(chainiv_module_exit); | ||
359 | |||
360 | MODULE_LICENSE("GPL"); | ||
361 | MODULE_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 | ||
174 | unlock: | 176 | unlock: |
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: | |||
238 | free_inst: | 247 | free_inst: |
239 | skcipher_geniv_free(inst); | 248 | skcipher_geniv_free(inst); |
240 | inst = ERR_PTR(err); | 249 | inst = ERR_PTR(err); |
250 | put_rng: | ||
251 | crypto_put_default_rng(); | ||
241 | goto out; | 252 | goto out; |
242 | } | 253 | } |
243 | 254 | ||
255 | static void eseqiv_free(struct crypto_instance *inst) | ||
256 | { | ||
257 | skcipher_geniv_free(inst); | ||
258 | crypto_put_default_rng(); | ||
259 | } | ||
260 | |||
244 | static struct crypto_template eseqiv_tmpl = { | 261 | static 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 | ||
251 | int __init eseqiv_module_init(void) | 268 | static 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 | ||
256 | void __exit eseqiv_module_exit(void) | 273 | static void __exit eseqiv_module_exit(void) |
257 | { | 274 | { |
258 | crypto_unregister_template(&eseqiv_tmpl); | 275 | crypto_unregister_template(&eseqiv_tmpl); |
259 | } | 276 | } |
277 | |||
278 | module_init(eseqiv_module_init); | ||
279 | module_exit(eseqiv_module_exit); | ||
280 | |||
281 | MODULE_LICENSE("GPL"); | ||
282 | MODULE_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 | |||
15 | int fips_enabled; | ||
16 | EXPORT_SYMBOL_GPL(fips_enabled); | ||
17 | |||
18 | /* Process kernel command-line parameter at boot time. fips=0 or fips=1 */ | ||
19 | static 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 | ||
30 | extern int fips_enabled; | ||
31 | #else | ||
32 | #define fips_enabled 0 | ||
33 | #endif | ||
34 | |||
29 | /* Crypto notification events. */ | 35 | /* Crypto notification events. */ |
30 | enum { | 36 | enum { |
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 | ||
84 | struct crypto_alg *crypto_mod_get(struct crypto_alg *alg); | 90 | struct crypto_alg *crypto_mod_get(struct crypto_alg *alg); |
85 | struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type, u32 mask); | 91 | struct crypto_alg *crypto_alg_lookup(const char *name, u32 type, u32 mask); |
86 | struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask); | 92 | struct crypto_alg *crypto_alg_mod_lookup(const char *name, u32 type, u32 mask); |
87 | 93 | ||
88 | int crypto_init_digest_ops(struct crypto_tfm *tfm); | 94 | int crypto_init_digest_ops(struct crypto_tfm *tfm); |
@@ -94,9 +100,11 @@ void crypto_exit_digest_ops(struct crypto_tfm *tfm); | |||
94 | void crypto_exit_cipher_ops(struct crypto_tfm *tfm); | 100 | void crypto_exit_cipher_ops(struct crypto_tfm *tfm); |
95 | void crypto_exit_compress_ops(struct crypto_tfm *tfm); | 101 | void crypto_exit_compress_ops(struct crypto_tfm *tfm); |
96 | 102 | ||
103 | struct crypto_larval *crypto_larval_alloc(const char *name, u32 type, u32 mask); | ||
97 | void crypto_larval_kill(struct crypto_alg *alg); | 104 | void crypto_larval_kill(struct crypto_alg *alg); |
98 | struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask); | 105 | struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask); |
99 | void crypto_larval_error(const char *name, u32 type, u32 mask); | 106 | void crypto_larval_error(const char *name, u32 type, u32 mask); |
107 | void crypto_alg_tested(const char *name, int err); | ||
100 | 108 | ||
101 | void crypto_shoot_alg(struct crypto_alg *alg); | 109 | void crypto_shoot_alg(struct crypto_alg *alg); |
102 | struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type, | 110 | struct 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 | ||
108 | int crypto_register_notifier(struct notifier_block *nb); | 116 | int crypto_register_notifier(struct notifier_block *nb); |
109 | int crypto_unregister_notifier(struct notifier_block *nb); | 117 | int crypto_unregister_notifier(struct notifier_block *nb); |
118 | int crypto_probing_notify(unsigned long val, void *v); | ||
119 | |||
120 | int __init testmgr_init(void); | ||
121 | void testmgr_exit(void); | ||
110 | 122 | ||
111 | static inline void crypto_alg_put(struct crypto_alg *alg) | 123 | static 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 | ||
142 | static inline int crypto_notify(unsigned long val, void *v) | 154 | static 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 | |||
19 | static 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 | |||
25 | static int krng_reset(struct crypto_rng *tfm, u8 *seed, unsigned int slen) | ||
26 | { | ||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | static 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 */ | ||
50 | static int __init krng_mod_init(void) | ||
51 | { | ||
52 | return crypto_register_alg(&krng_alg); | ||
53 | } | ||
54 | |||
55 | static void __exit krng_mod_fini(void) | ||
56 | { | ||
57 | crypto_unregister_alg(&krng_alg); | ||
58 | return; | ||
59 | } | ||
60 | |||
61 | module_init(krng_mod_init); | ||
62 | module_exit(krng_mod_fini); | ||
63 | |||
64 | MODULE_LICENSE("GPL"); | ||
65 | MODULE_DESCRIPTION("Kernel Random Number Generator"); | ||
66 | MODULE_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 | ||
26 | static 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 | |||
40 | static 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 | |||
52 | static struct ctl_table_header *crypto_sysctls; | ||
53 | |||
54 | static void crypto_proc_fips_init(void) | ||
55 | { | ||
56 | crypto_sysctls = register_sysctl_table(crypto_dir_table); | ||
57 | } | ||
58 | |||
59 | static 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 | |||
24 | static void *c_start(struct seq_file *m, loff_t *pos) | 69 | static 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 = { | |||
100 | void __init crypto_init_proc(void) | 151 | void __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 | ||
105 | void __exit crypto_exit_proc(void) | 157 | void __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 | |||
24 | static DEFINE_MUTEX(crypto_default_rng_lock); | ||
25 | struct crypto_rng *crypto_default_rng; | ||
26 | EXPORT_SYMBOL_GPL(crypto_default_rng); | ||
27 | static int crypto_default_rng_refcnt; | ||
28 | |||
29 | static 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 | |||
49 | static 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 | |||
60 | static void crypto_rng_show(struct seq_file *m, struct crypto_alg *alg) | ||
61 | __attribute__ ((unused)); | ||
62 | static 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 | |||
68 | static unsigned int crypto_rng_ctxsize(struct crypto_alg *alg, u32 type, | ||
69 | u32 mask) | ||
70 | { | ||
71 | return alg->cra_ctxsize; | ||
72 | } | ||
73 | |||
74 | const 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 | }; | ||
81 | EXPORT_SYMBOL_GPL(crypto_rng_type); | ||
82 | |||
83 | int 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 | |||
107 | unlock: | ||
108 | mutex_unlock(&crypto_default_rng_lock); | ||
109 | |||
110 | return err; | ||
111 | } | ||
112 | EXPORT_SYMBOL_GPL(crypto_get_default_rng); | ||
113 | |||
114 | void 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 | } | ||
123 | EXPORT_SYMBOL_GPL(crypto_put_default_rng); | ||
124 | |||
125 | MODULE_LICENSE("GPL"); | ||
126 | MODULE_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 | ||
200 | unlock: | 202 | unlock: |
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 | ||
218 | unlock: | 225 | unlock: |
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 | ||
312 | out: | 326 | out: |
313 | return inst; | 327 | return inst; |
328 | |||
329 | put_rng: | ||
330 | crypto_put_default_rng(); | ||
331 | goto out; | ||
314 | } | 332 | } |
315 | 333 | ||
316 | static void seqiv_free(struct crypto_instance *inst) | 334 | static 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 | ||
324 | static struct crypto_template seqiv_tmpl = { | 343 | static 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 | ||
57 | struct tcrypt_result { | ||
58 | struct completion completion; | ||
59 | int err; | ||
60 | }; | ||
61 | |||
62 | static 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 | */ |
67 | static unsigned int sec; | 45 | static unsigned int sec; |
68 | 46 | ||
69 | static int mode; | 47 | static int mode; |
70 | static char *xbuf; | 48 | static char *tvmem[TVMEMSIZE]; |
71 | static char *axbuf; | ||
72 | static char *tvmem; | ||
73 | 49 | ||
74 | static char *check[] = { | 50 | static 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 | ||
83 | static void hexdump(unsigned char *buf, unsigned int len) | 59 | static 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 | |||
90 | static 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 | |||
101 | static 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 | |||
244 | out: | ||
245 | ahash_request_free(req); | ||
246 | out_noreq: | ||
247 | crypto_free_ahash(tfm); | ||
248 | } | ||
249 | |||
250 | static 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"); | ||
385 | next_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 | |||
516 | out: | ||
517 | crypto_free_aead(tfm); | ||
518 | aead_request_free(req); | ||
519 | } | ||
520 | |||
521 | static 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 | } | ||
717 | out: | ||
718 | crypto_free_ablkcipher(tfm); | ||
719 | ablkcipher_request_free(req); | ||
720 | } | ||
721 | |||
722 | static 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 | ||
748 | static int test_cipher_cycles(struct blkcipher_desc *desc, int enc, char *p, | 82 | static 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 | ||
800 | static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 }; | 131 | static u32 block_sizes[] = { 16, 64, 256, 1024, 8192, 0 }; |
801 | 132 | ||
802 | static void test_cipher_speed(char *algo, int enc, unsigned int sec, | 133 | static 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 | ||
889 | static int test_hash_jiffies_digest(struct hash_desc *desc, char *p, int blen, | 231 | static 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 | ||
913 | static int test_hash_jiffies(struct hash_desc *desc, char *p, int blen, | 252 | static 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 | ||
949 | static int test_hash_cycles_digest(struct hash_desc *desc, char *p, int blen, | 284 | static 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 | ||
999 | static int test_hash_cycles(struct hash_desc *desc, char *p, int blen, | 329 | static 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 | ||
1068 | static void test_hash_speed(char *algo, unsigned int sec, | 393 | static 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 | ||
1125 | static 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 | } | ||
1188 | out: | ||
1189 | crypto_free_comp(tfm); | ||
1190 | } | ||
1191 | |||
1192 | static void test_available(void) | 455 | static 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 | ||
1204 | static void do_test(void) | 467 | static inline int tcrypt_test(const char *alg) |
1205 | { | 468 | { |
1206 | switch (mode) { | 469 | return alg_test(alg, alg, 0, 0); |
470 | } | ||
471 | |||
472 | static 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 | ||
1917 | static int __init tcrypt_mod_init(void) | 863 | static 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); | 884 | err_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 | 20 | struct 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 | |||
26 | struct 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 | |||
37 | struct 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 | |||
51 | struct 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 | ||
69 | struct hash_speed { | 25 | struct 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 | ||
74 | static char zeroed_string[48]; | ||
75 | |||
76 | /* | ||
77 | * MD4 test vectors from RFC1320 | ||
78 | */ | ||
79 | #define MD4_TEST_VECTORS 7 | ||
80 | |||
81 | static 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 | |||
127 | static 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 | |||
173 | static 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 | |||
237 | static 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 | |||
301 | static 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 | |||
369 | static 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 | |||
437 | static 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 | |||
459 | static 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 | |||
485 | static 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 | |||
510 | static 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 | |||
559 | static 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 | |||
619 | static 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 | |||
717 | static 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 | |||
799 | static 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 | |||
868 | static 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 | |||
913 | static 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 | |||
958 | static 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 | |||
1001 | static 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 | |||
1083 | static 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 | |||
1164 | static 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 | |||
1245 | static 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 | |||
1328 | static 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 | |||
1443 | static 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 | |||
1580 | static 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 | |||
1652 | static 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 | |||
1752 | static 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 | |||
1869 | static 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 | |||
1973 | static 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 | |||
2013 | static 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 | |||
2068 | static 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 | |||
2106 | static 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 | |||
2137 | static 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 | |||
2168 | static 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 | |||
2212 | static 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 | |||
2264 | static 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 | |||
2319 | static 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 | |||
2374 | static 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 | |||
2393 | static 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 | |||
2420 | static 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 | ||
2453 | static struct cipher_testvec tf_dec_tv_template[] = { | 35 | static 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 | |||
2486 | static 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 | |||
2532 | static 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 | |||
2588 | static 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 | |||
2629 | static 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 | |||
2679 | static 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 | |||
2720 | static 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 | |||
2766 | static 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 | |||
2800 | static 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 | |||
2853 | static 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 | |||
2890 | static 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 | |||
2927 | static 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 | |||
3009 | static 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 | |||
3091 | static 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 | |||
3341 | static 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 | |||
3592 | static 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 | |||
3789 | static 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 | |||
3987 | static 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 | |||
5117 | static 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 | |||
5208 | static 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 | |||
5368 | static 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 | |||
5570 | static 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 | |||
5699 | static 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 | |||
5832 | static 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 | |||
5859 | static 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 | |||
5892 | static 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 | |||
5958 | static 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 | |||
6030 | static 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 | |||
6073 | static 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 | |||
6122 | static 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 | |||
6165 | static 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 | |||
6214 | static 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 | |||
6260 | static 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 | |||
6315 | static 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 | |||
6378 | static 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 | |||
6441 | static 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 | |||
6476 | static 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 | |||
6517 | static 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 | |||
6560 | static 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 | |||
6609 | static 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 | |||
6670 | static 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 | |||
6739 | static 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 | |||
6776 | static 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 | |||
6813 | static 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 | |||
6844 | static 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 | |||
6881 | static 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 | ||
6923 | static 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 | ||
6966 | static 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 | ||
8138 | static 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 | |||
8240 | static 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 | |||
8347 | struct 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 | |||
8360 | static 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 | |||
8396 | static 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 | |||
8438 | static 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 | |||
8476 | static 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 | |||
8519 | static 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 | |||
8569 | static 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 | |||
49 | struct tcrypt_result { | ||
50 | struct completion completion; | ||
51 | int err; | ||
52 | }; | ||
53 | |||
54 | struct aead_test_suite { | ||
55 | struct { | ||
56 | struct aead_testvec *vecs; | ||
57 | unsigned int count; | ||
58 | } enc, dec; | ||
59 | }; | ||
60 | |||
61 | struct cipher_test_suite { | ||
62 | struct { | ||
63 | struct cipher_testvec *vecs; | ||
64 | unsigned int count; | ||
65 | } enc, dec; | ||
66 | }; | ||
67 | |||
68 | struct comp_test_suite { | ||
69 | struct { | ||
70 | struct comp_testvec *vecs; | ||
71 | unsigned int count; | ||
72 | } comp, decomp; | ||
73 | }; | ||
74 | |||
75 | struct hash_test_suite { | ||
76 | struct hash_testvec *vecs; | ||
77 | unsigned int count; | ||
78 | }; | ||
79 | |||
80 | struct 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 | |||
93 | static unsigned int IDX[8] = { IDX1, IDX2, IDX3, IDX4, IDX5, IDX6, IDX7, IDX8 }; | ||
94 | |||
95 | static char *xbuf[XBUFSIZE]; | ||
96 | static char *axbuf[XBUFSIZE]; | ||
97 | |||
98 | static 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 | |||
105 | static 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 | |||
116 | static 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 | |||
257 | out: | ||
258 | ahash_request_free(req); | ||
259 | out_noreq: | ||
260 | return ret; | ||
261 | } | ||
262 | |||
263 | static 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 | |||
539 | out: | ||
540 | aead_request_free(req); | ||
541 | return ret; | ||
542 | } | ||
543 | |||
544 | static 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 | |||
605 | out: | ||
606 | return ret; | ||
607 | } | ||
608 | |||
609 | static 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 | |||
818 | out: | ||
819 | ablkcipher_request_free(req); | ||
820 | return ret; | ||
821 | } | ||
822 | |||
823 | static 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 | |||
881 | out: | ||
882 | return ret; | ||
883 | } | ||
884 | |||
885 | static 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 | |||
909 | out: | ||
910 | crypto_free_aead(tfm); | ||
911 | return err; | ||
912 | } | ||
913 | |||
914 | static 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 | |||
938 | out: | ||
939 | crypto_free_cipher(tfm); | ||
940 | return err; | ||
941 | } | ||
942 | |||
943 | static 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 | |||
967 | out: | ||
968 | crypto_free_ablkcipher(tfm); | ||
969 | return err; | ||
970 | } | ||
971 | |||
972 | static 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 | |||
994 | static 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. */ | ||
1014 | static 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 | |||
1776 | static 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 | |||
1801 | int 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 | |||
1826 | notest: | ||
1827 | printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver); | ||
1828 | return 0; | ||
1829 | } | ||
1830 | EXPORT_SYMBOL_GPL(alg_test); | ||
1831 | |||
1832 | int __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 | |||
1850 | err_free_axbuf: | ||
1851 | for (i = 0; i < XBUFSIZE && axbuf[i]; i++) | ||
1852 | free_page((unsigned long)axbuf[i]); | ||
1853 | err_free_xbuf: | ||
1854 | for (i = 0; i < XBUFSIZE && xbuf[i]; i++) | ||
1855 | free_page((unsigned long)xbuf[i]); | ||
1856 | |||
1857 | return -ENOMEM; | ||
1858 | } | ||
1859 | |||
1860 | void 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 | |||
24 | struct 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 | |||
35 | struct 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 | |||
49 | struct 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 | |||
67 | static char zeroed_string[48]; | ||
68 | |||
69 | /* | ||
70 | * MD4 test vectors from RFC1320 | ||
71 | */ | ||
72 | #define MD4_TEST_VECTORS 7 | ||
73 | |||
74 | static 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 | |||
120 | static 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 | |||
166 | static 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 | |||
230 | static 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 | |||
294 | static 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 | |||
362 | static 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 | |||
430 | static 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 | |||
452 | static 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 | |||
478 | static 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 | |||
503 | static 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 | |||
552 | static 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 | |||
612 | static 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 | |||
710 | static 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 | |||
792 | static 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 | |||
861 | static 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 | |||
906 | static 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 | |||
951 | static 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 | |||
994 | static 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 | |||
1076 | static 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 | |||
1157 | static 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 | |||
1238 | static 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 | |||
1321 | static 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 | |||
1436 | static 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 | |||
1573 | static 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 | |||
1645 | static 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 | |||
1745 | static 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 | |||
1862 | static 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 | |||
1966 | static 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 | |||
2006 | static 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 | |||
2061 | static 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 | |||
2099 | static 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 | |||
2130 | static 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 | |||
2161 | static 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 | |||
2205 | static 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 | |||
2257 | static 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 | |||
2312 | static 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 | |||
2367 | static 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 | |||
2386 | static 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 | |||
2413 | static 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 | |||
2446 | static 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 | |||
2479 | static 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 | |||
2525 | static 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 | |||
2581 | static 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 | |||
2622 | static 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 | |||
2672 | static 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 | |||
2713 | static 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 | |||
2759 | static 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 | |||
2793 | static 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 | |||
2846 | static 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 | |||
2883 | static 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 | |||
2920 | static 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 | |||
3002 | static 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 | |||
3084 | static 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 | |||
3334 | static 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 | |||
3585 | static 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 | |||
3782 | static 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 | |||
3980 | static 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 | |||
5112 | static 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 | |||
5203 | static 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 | |||
5363 | static 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 | |||
5565 | static 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 | |||
5694 | static 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 | |||
5827 | static 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 | |||
5854 | static 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 | |||
5887 | static 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 | |||
5953 | static 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 | |||
6025 | static 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 | |||
6068 | static 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 | |||
6117 | static 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 | |||
6160 | static 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 | |||
6209 | static 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 | |||
6255 | static 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 | |||
6310 | static 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 | |||
6373 | static 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 | |||
6436 | static 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 | |||
6471 | static 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 | |||
6512 | static 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 | |||
6555 | static 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 | |||
6604 | static 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 | |||
6665 | static 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 | |||
6734 | static 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 | |||
6771 | static 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 | |||
6808 | static 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 | |||
6839 | static 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 | |||
6876 | static 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 | |||
6918 | static 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 | ||
6961 | static 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 | ||
8135 | static 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 | |||
8237 | static 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 | |||
8344 | struct 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 | |||
8357 | static 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 | |||
8393 | static 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 | |||
8435 | static 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 | |||
8473 | static 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 | |||
8516 | static 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 | |||
8566 | static 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 | |||
19 | extern const struct crypto_type crypto_rng_type; | ||
20 | |||
21 | static 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 | ||
21 | struct rtattr; | 20 | struct rtattr; |
@@ -65,11 +64,6 @@ void skcipher_geniv_free(struct crypto_instance *inst); | |||
65 | int skcipher_geniv_init(struct crypto_tfm *tfm); | 64 | int skcipher_geniv_init(struct crypto_tfm *tfm); |
66 | void skcipher_geniv_exit(struct crypto_tfm *tfm); | 65 | void skcipher_geniv_exit(struct crypto_tfm *tfm); |
67 | 66 | ||
68 | int __init eseqiv_module_init(void); | ||
69 | void __exit eseqiv_module_exit(void); | ||
70 | int __init chainiv_module_init(void); | ||
71 | void chainiv_module_exit(void); | ||
72 | |||
73 | static inline struct crypto_ablkcipher *skcipher_geniv_cipher( | 67 | static 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 | |||
18 | extern struct crypto_rng *crypto_default_rng; | ||
19 | |||
20 | int crypto_get_default_rng(void); | ||
21 | void crypto_put_default_rng(void); | ||
22 | |||
23 | static inline struct crypto_rng *__crypto_rng_cast(struct crypto_tfm *tfm) | ||
24 | { | ||
25 | return (struct crypto_rng *)tfm; | ||
26 | } | ||
27 | |||
28 | static 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 | |||
38 | static inline struct crypto_tfm *crypto_rng_tfm(struct crypto_rng *tfm) | ||
39 | { | ||
40 | return &tfm->base; | ||
41 | } | ||
42 | |||
43 | static inline struct rng_alg *crypto_rng_alg(struct crypto_rng *tfm) | ||
44 | { | ||
45 | return &crypto_rng_tfm(tfm)->__crt_alg->cra_rng; | ||
46 | } | ||
47 | |||
48 | static inline struct rng_tfm *crypto_rng_crt(struct crypto_rng *tfm) | ||
49 | { | ||
50 | return &crypto_rng_tfm(tfm)->crt_rng; | ||
51 | } | ||
52 | |||
53 | static inline void crypto_free_rng(struct crypto_rng *tfm) | ||
54 | { | ||
55 | crypto_free_tfm(crypto_rng_tfm(tfm)); | ||
56 | } | ||
57 | |||
58 | static 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 | |||
64 | static 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 | |||
70 | static 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; | |||
105 | struct crypto_blkcipher; | 114 | struct crypto_blkcipher; |
106 | struct crypto_hash; | 115 | struct crypto_hash; |
107 | struct crypto_ahash; | 116 | struct crypto_ahash; |
117 | struct crypto_rng; | ||
108 | struct crypto_tfm; | 118 | struct crypto_tfm; |
109 | struct crypto_type; | 119 | struct crypto_type; |
110 | struct aead_givcrypt_request; | 120 | struct 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 | ||
303 | struct 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 | ||
302 | struct crypto_alg { | 322 | struct 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 | ||
454 | struct 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 | ||
441 | struct crypto_tfm { | 469 | struct 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 | ||
513 | struct crypto_rng { | ||
514 | struct crypto_tfm base; | ||
515 | }; | ||
516 | |||
484 | enum { | 517 | enum { |
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); | |||
515 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); | 548 | struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); |
516 | void crypto_free_tfm(struct crypto_tfm *tfm); | 549 | void crypto_free_tfm(struct crypto_tfm *tfm); |
517 | 550 | ||
551 | int 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 | */ |