aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2018-11-16 20:26:20 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2018-11-20 01:26:55 -0500
commitde61d7ae5d3789dcba3749a418f76613fbee8414 (patch)
treed447d7f0f0e97c070b74dfe2ccfd4e8e2090a08c /crypto
parent5e04542a0e0763294e9fced73a149c38c4e0cee5 (diff)
crypto: chacha20-generic - add XChaCha20 support
Add support for the XChaCha20 stream cipher. XChaCha20 is the application of the XSalsa20 construction (https://cr.yp.to/snuffle/xsalsa-20081128.pdf) to ChaCha20 rather than to Salsa20. XChaCha20 extends ChaCha20's nonce length from 64 bits (or 96 bits, depending on convention) to 192 bits, while provably retaining ChaCha20's security. XChaCha20 uses the ChaCha20 permutation to map the key and first 128 nonce bits to a 256-bit subkey. Then, it does the ChaCha20 stream cipher with the subkey and remaining 64 bits of nonce. We need XChaCha support in order to add support for the Adiantum encryption mode. Note that to meet our performance requirements, we actually plan to primarily use the variant XChaCha12. But we believe it's wise to first add XChaCha20 as a baseline with a higher security margin, in case there are any situations where it can be used. Supporting both variants is straightforward. Since XChaCha20's subkey differs for each request, XChaCha20 can't be a template that wraps ChaCha20; that would require re-keying the underlying ChaCha20 for every request, which wouldn't be thread-safe. Instead, we make XChaCha20 its own top-level algorithm which calls the ChaCha20 streaming implementation internally. Similar to the existing ChaCha20 implementation, we define the IV to be the nonce and stream position concatenated together. This allows users to seek to any position in the stream. I considered splitting the code into separate chacha20-common, chacha20, and xchacha20 modules, so that chacha20 and xchacha20 could be enabled/disabled independently. However, since nearly all the code is shared anyway, I ultimately decided there would have been little benefit to the added complexity of separate modules. Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Martin Willi <martin@strongswan.org> Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/Kconfig14
-rw-r--r--crypto/chacha20_generic.c120
-rw-r--r--crypto/testmgr.c6
-rw-r--r--crypto/testmgr.h577
4 files changed, 676 insertions, 41 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig
index 62dbd1a99fa3..75ebd1a2746c 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -1403,18 +1403,22 @@ config CRYPTO_SALSA20
1403 Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html> 1403 Bernstein <djb@cr.yp.to>. See <http://cr.yp.to/snuffle.html>
1404 1404
1405config CRYPTO_CHACHA20 1405config CRYPTO_CHACHA20
1406 tristate "ChaCha20 cipher algorithm" 1406 tristate "ChaCha20 stream cipher algorithms"
1407 select CRYPTO_BLKCIPHER 1407 select CRYPTO_BLKCIPHER
1408 help 1408 help
1409 ChaCha20 cipher algorithm, RFC7539. 1409 The ChaCha20 and XChaCha20 stream cipher algorithms.
1410 1410
1411 ChaCha20 is a 256-bit high-speed stream cipher designed by Daniel J. 1411 ChaCha20 is a 256-bit high-speed stream cipher designed by Daniel J.
1412 Bernstein and further specified in RFC7539 for use in IETF protocols. 1412 Bernstein and further specified in RFC7539 for use in IETF protocols.
1413 This is the portable C implementation of ChaCha20. 1413 This is the portable C implementation of ChaCha20. See also:
1414
1415 See also:
1416 <http://cr.yp.to/chacha/chacha-20080128.pdf> 1414 <http://cr.yp.to/chacha/chacha-20080128.pdf>
1417 1415
1416 XChaCha20 is the application of the XSalsa20 construction to ChaCha20
1417 rather than to Salsa20. XChaCha20 extends ChaCha20's nonce length
1418 from 64 bits (or 96 bits using the RFC7539 convention) to 192 bits,
1419 while provably retaining ChaCha20's security. See also:
1420 <https://cr.yp.to/snuffle/xsalsa-20081128.pdf>
1421
1418config CRYPTO_CHACHA20_X86_64 1422config CRYPTO_CHACHA20_X86_64
1419 tristate "ChaCha20 cipher algorithm (x86_64/SSSE3/AVX2)" 1423 tristate "ChaCha20 cipher algorithm (x86_64/SSSE3/AVX2)"
1420 depends on X86 && 64BIT 1424 depends on X86 && 64BIT
diff --git a/crypto/chacha20_generic.c b/crypto/chacha20_generic.c
index 3529521d72a4..4305b1b62b16 100644
--- a/crypto/chacha20_generic.c
+++ b/crypto/chacha20_generic.c
@@ -1,7 +1,8 @@
1/* 1/*
2 * ChaCha20 256-bit cipher algorithm, RFC7539 2 * ChaCha20 (RFC7539) and XChaCha20 stream cipher algorithms
3 * 3 *
4 * Copyright (C) 2015 Martin Willi 4 * Copyright (C) 2015 Martin Willi
5 * Copyright (C) 2018 Google LLC
5 * 6 *
6 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -36,6 +37,31 @@ static void chacha20_docrypt(u32 *state, u8 *dst, const u8 *src,
36 } 37 }
37} 38}
38 39
40static int chacha20_stream_xor(struct skcipher_request *req,
41 struct chacha20_ctx *ctx, u8 *iv)
42{
43 struct skcipher_walk walk;
44 u32 state[16];
45 int err;
46
47 err = skcipher_walk_virt(&walk, req, false);
48
49 crypto_chacha20_init(state, ctx, iv);
50
51 while (walk.nbytes > 0) {
52 unsigned int nbytes = walk.nbytes;
53
54 if (nbytes < walk.total)
55 nbytes = round_down(nbytes, walk.stride);
56
57 chacha20_docrypt(state, walk.dst.virt.addr, walk.src.virt.addr,
58 nbytes);
59 err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
60 }
61
62 return err;
63}
64
39void crypto_chacha20_init(u32 *state, struct chacha20_ctx *ctx, u8 *iv) 65void crypto_chacha20_init(u32 *state, struct chacha20_ctx *ctx, u8 *iv)
40{ 66{
41 state[0] = 0x61707865; /* "expa" */ 67 state[0] = 0x61707865; /* "expa" */
@@ -77,54 +103,74 @@ int crypto_chacha20_crypt(struct skcipher_request *req)
77{ 103{
78 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); 104 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
79 struct chacha20_ctx *ctx = crypto_skcipher_ctx(tfm); 105 struct chacha20_ctx *ctx = crypto_skcipher_ctx(tfm);
80 struct skcipher_walk walk;
81 u32 state[16];
82 int err;
83
84 err = skcipher_walk_virt(&walk, req, false);
85 106
86 crypto_chacha20_init(state, ctx, walk.iv); 107 return chacha20_stream_xor(req, ctx, req->iv);
108}
109EXPORT_SYMBOL_GPL(crypto_chacha20_crypt);
87 110
88 while (walk.nbytes > 0) { 111int crypto_xchacha20_crypt(struct skcipher_request *req)
89 unsigned int nbytes = walk.nbytes; 112{
113 struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
114 struct chacha20_ctx *ctx = crypto_skcipher_ctx(tfm);
115 struct chacha20_ctx subctx;
116 u32 state[16];
117 u8 real_iv[16];
90 118
91 if (nbytes < walk.total) 119 /* Compute the subkey given the original key and first 128 nonce bits */
92 nbytes = round_down(nbytes, walk.stride); 120 crypto_chacha20_init(state, ctx, req->iv);
121 hchacha20_block(state, subctx.key);
93 122
94 chacha20_docrypt(state, walk.dst.virt.addr, walk.src.virt.addr, 123 /* Build the real IV */
95 nbytes); 124 memcpy(&real_iv[0], req->iv + 24, 8); /* stream position */
96 err = skcipher_walk_done(&walk, walk.nbytes - nbytes); 125 memcpy(&real_iv[8], req->iv + 16, 8); /* remaining 64 nonce bits */
97 }
98 126
99 return err; 127 /* Generate the stream and XOR it with the data */
128 return chacha20_stream_xor(req, &subctx, real_iv);
100} 129}
101EXPORT_SYMBOL_GPL(crypto_chacha20_crypt); 130EXPORT_SYMBOL_GPL(crypto_xchacha20_crypt);
102 131
103static struct skcipher_alg alg = { 132static struct skcipher_alg algs[] = {
104 .base.cra_name = "chacha20", 133 {
105 .base.cra_driver_name = "chacha20-generic", 134 .base.cra_name = "chacha20",
106 .base.cra_priority = 100, 135 .base.cra_driver_name = "chacha20-generic",
107 .base.cra_blocksize = 1, 136 .base.cra_priority = 100,
108 .base.cra_ctxsize = sizeof(struct chacha20_ctx), 137 .base.cra_blocksize = 1,
109 .base.cra_module = THIS_MODULE, 138 .base.cra_ctxsize = sizeof(struct chacha20_ctx),
110 139 .base.cra_module = THIS_MODULE,
111 .min_keysize = CHACHA20_KEY_SIZE, 140
112 .max_keysize = CHACHA20_KEY_SIZE, 141 .min_keysize = CHACHA20_KEY_SIZE,
113 .ivsize = CHACHA20_IV_SIZE, 142 .max_keysize = CHACHA20_KEY_SIZE,
114 .chunksize = CHACHA20_BLOCK_SIZE, 143 .ivsize = CHACHA20_IV_SIZE,
115 .setkey = crypto_chacha20_setkey, 144 .chunksize = CHACHA20_BLOCK_SIZE,
116 .encrypt = crypto_chacha20_crypt, 145 .setkey = crypto_chacha20_setkey,
117 .decrypt = crypto_chacha20_crypt, 146 .encrypt = crypto_chacha20_crypt,
147 .decrypt = crypto_chacha20_crypt,
148 }, {
149 .base.cra_name = "xchacha20",
150 .base.cra_driver_name = "xchacha20-generic",
151 .base.cra_priority = 100,
152 .base.cra_blocksize = 1,
153 .base.cra_ctxsize = sizeof(struct chacha20_ctx),
154 .base.cra_module = THIS_MODULE,
155
156 .min_keysize = CHACHA20_KEY_SIZE,
157 .max_keysize = CHACHA20_KEY_SIZE,
158 .ivsize = XCHACHA20_IV_SIZE,
159 .chunksize = CHACHA20_BLOCK_SIZE,
160 .setkey = crypto_chacha20_setkey,
161 .encrypt = crypto_xchacha20_crypt,
162 .decrypt = crypto_xchacha20_crypt,
163 }
118}; 164};
119 165
120static int __init chacha20_generic_mod_init(void) 166static int __init chacha20_generic_mod_init(void)
121{ 167{
122 return crypto_register_skcipher(&alg); 168 return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
123} 169}
124 170
125static void __exit chacha20_generic_mod_fini(void) 171static void __exit chacha20_generic_mod_fini(void)
126{ 172{
127 crypto_unregister_skcipher(&alg); 173 crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
128} 174}
129 175
130module_init(chacha20_generic_mod_init); 176module_init(chacha20_generic_mod_init);
@@ -132,6 +178,8 @@ module_exit(chacha20_generic_mod_fini);
132 178
133MODULE_LICENSE("GPL"); 179MODULE_LICENSE("GPL");
134MODULE_AUTHOR("Martin Willi <martin@strongswan.org>"); 180MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
135MODULE_DESCRIPTION("chacha20 cipher algorithm"); 181MODULE_DESCRIPTION("ChaCha20 and XChaCha20 stream ciphers (generic)");
136MODULE_ALIAS_CRYPTO("chacha20"); 182MODULE_ALIAS_CRYPTO("chacha20");
137MODULE_ALIAS_CRYPTO("chacha20-generic"); 183MODULE_ALIAS_CRYPTO("chacha20-generic");
184MODULE_ALIAS_CRYPTO("xchacha20");
185MODULE_ALIAS_CRYPTO("xchacha20-generic");
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 379794a259a7..11f5c8b0f4dc 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -3577,6 +3577,12 @@ static const struct alg_test_desc alg_test_descs[] = {
3577 .hash = __VECS(aes_xcbc128_tv_template) 3577 .hash = __VECS(aes_xcbc128_tv_template)
3578 } 3578 }
3579 }, { 3579 }, {
3580 .alg = "xchacha20",
3581 .test = alg_test_skcipher,
3582 .suite = {
3583 .cipher = __VECS(xchacha20_tv_template)
3584 },
3585 }, {
3580 .alg = "xts(aes)", 3586 .alg = "xts(aes)",
3581 .test = alg_test_skcipher, 3587 .test = alg_test_skcipher,
3582 .fips_allowed = 1, 3588 .fips_allowed = 1,
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index fc1b6c0e9ed2..df0dc44a9b7b 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -30994,6 +30994,583 @@ static const struct cipher_testvec chacha20_tv_template[] = {
30994 }, 30994 },
30995}; 30995};
30996 30996
30997static const struct cipher_testvec xchacha20_tv_template[] = {
30998 { /* from libsodium test/default/xchacha20.c */
30999 .key = "\x79\xc9\x97\x98\xac\x67\x30\x0b"
31000 "\xbb\x27\x04\xc9\x5c\x34\x1e\x32"
31001 "\x45\xf3\xdc\xb2\x17\x61\xb9\x8e"
31002 "\x52\xff\x45\xb2\x4f\x30\x4f\xc4",
31003 .klen = 32,
31004 .iv = "\xb3\x3f\xfd\x30\x96\x47\x9b\xcf"
31005 "\xbc\x9a\xee\x49\x41\x76\x88\xa0"
31006 "\xa2\x55\x4f\x8d\x95\x38\x94\x19"
31007 "\x00\x00\x00\x00\x00\x00\x00\x00",
31008 .ptext = "\x00\x00\x00\x00\x00\x00\x00\x00"
31009 "\x00\x00\x00\x00\x00\x00\x00\x00"
31010 "\x00\x00\x00\x00\x00\x00\x00\x00"
31011 "\x00\x00\x00\x00\x00",
31012 .ctext = "\xc6\xe9\x75\x81\x60\x08\x3a\xc6"
31013 "\x04\xef\x90\xe7\x12\xce\x6e\x75"
31014 "\xd7\x79\x75\x90\x74\x4e\x0c\xf0"
31015 "\x60\xf0\x13\x73\x9c",
31016 .len = 29,
31017 }, { /* from libsodium test/default/xchacha20.c */
31018 .key = "\x9d\x23\xbd\x41\x49\xcb\x97\x9c"
31019 "\xcf\x3c\x5c\x94\xdd\x21\x7e\x98"
31020 "\x08\xcb\x0e\x50\xcd\x0f\x67\x81"
31021 "\x22\x35\xea\xaf\x60\x1d\x62\x32",
31022 .klen = 32,
31023 .iv = "\xc0\x47\x54\x82\x66\xb7\xc3\x70"
31024 "\xd3\x35\x66\xa2\x42\x5c\xbf\x30"
31025 "\xd8\x2d\x1e\xaf\x52\x94\x10\x9e"
31026 "\x00\x00\x00\x00\x00\x00\x00\x00",
31027 .ptext = "\x00\x00\x00\x00\x00\x00\x00\x00"
31028 "\x00\x00\x00\x00\x00\x00\x00\x00"
31029 "\x00\x00\x00\x00\x00\x00\x00\x00"
31030 "\x00\x00\x00\x00\x00\x00\x00\x00"
31031 "\x00\x00\x00\x00\x00\x00\x00\x00"
31032 "\x00\x00\x00\x00\x00\x00\x00\x00"
31033 "\x00\x00\x00\x00\x00\x00\x00\x00"
31034 "\x00\x00\x00\x00\x00\x00\x00\x00"
31035 "\x00\x00\x00\x00\x00\x00\x00\x00"
31036 "\x00\x00\x00\x00\x00\x00\x00\x00"
31037 "\x00\x00\x00\x00\x00\x00\x00\x00"
31038 "\x00\x00\x00",
31039 .ctext = "\xa2\x12\x09\x09\x65\x94\xde\x8c"
31040 "\x56\x67\xb1\xd1\x3a\xd9\x3f\x74"
31041 "\x41\x06\xd0\x54\xdf\x21\x0e\x47"
31042 "\x82\xcd\x39\x6f\xec\x69\x2d\x35"
31043 "\x15\xa2\x0b\xf3\x51\xee\xc0\x11"
31044 "\xa9\x2c\x36\x78\x88\xbc\x46\x4c"
31045 "\x32\xf0\x80\x7a\xcd\x6c\x20\x3a"
31046 "\x24\x7e\x0d\xb8\x54\x14\x84\x68"
31047 "\xe9\xf9\x6b\xee\x4c\xf7\x18\xd6"
31048 "\x8d\x5f\x63\x7c\xbd\x5a\x37\x64"
31049 "\x57\x78\x8e\x6f\xae\x90\xfc\x31"
31050 "\x09\x7c\xfc",
31051 .len = 91,
31052 }, { /* Taken from the ChaCha20 test vectors, appended 16 random bytes
31053 to nonce, and recomputed the ciphertext with libsodium */
31054 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
31055 "\x00\x00\x00\x00\x00\x00\x00\x00"
31056 "\x00\x00\x00\x00\x00\x00\x00\x00"
31057 "\x00\x00\x00\x00\x00\x00\x00\x00",
31058 .klen = 32,
31059 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
31060 "\x00\x00\x00\x00\x67\xc6\x69\x73"
31061 "\x51\xff\x4a\xec\x29\xcd\xba\xab"
31062 "\x00\x00\x00\x00\x00\x00\x00\x00",
31063 .ptext = "\x00\x00\x00\x00\x00\x00\x00\x00"
31064 "\x00\x00\x00\x00\x00\x00\x00\x00"
31065 "\x00\x00\x00\x00\x00\x00\x00\x00"
31066 "\x00\x00\x00\x00\x00\x00\x00\x00"
31067 "\x00\x00\x00\x00\x00\x00\x00\x00"
31068 "\x00\x00\x00\x00\x00\x00\x00\x00"
31069 "\x00\x00\x00\x00\x00\x00\x00\x00"
31070 "\x00\x00\x00\x00\x00\x00\x00\x00",
31071 .ctext = "\x9c\x49\x2a\xe7\x8a\x2f\x93\xc7"
31072 "\xb3\x33\x6f\x82\x17\xd8\xc4\x1e"
31073 "\xad\x80\x11\x11\x1d\x4c\x16\x18"
31074 "\x07\x73\x9b\x4f\xdb\x7c\xcb\x47"
31075 "\xfd\xef\x59\x74\xfa\x3f\xe5\x4c"
31076 "\x9b\xd0\xea\xbc\xba\x56\xad\x32"
31077 "\x03\xdc\xf8\x2b\xc1\xe1\x75\x67"
31078 "\x23\x7b\xe6\xfc\xd4\x03\x86\x54",
31079 .len = 64,
31080 }, { /* Taken from the ChaCha20 test vectors, appended 16 random bytes
31081 to nonce, and recomputed the ciphertext with libsodium */
31082 .key = "\x00\x00\x00\x00\x00\x00\x00\x00"
31083 "\x00\x00\x00\x00\x00\x00\x00\x00"
31084 "\x00\x00\x00\x00\x00\x00\x00\x00"
31085 "\x00\x00\x00\x00\x00\x00\x00\x01",
31086 .klen = 32,
31087 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
31088 "\x00\x00\x00\x02\xf2\xfb\xe3\x46"
31089 "\x7c\xc2\x54\xf8\x1b\xe8\xe7\x8d"
31090 "\x01\x00\x00\x00\x00\x00\x00\x00",
31091 .ptext = "\x41\x6e\x79\x20\x73\x75\x62\x6d"
31092 "\x69\x73\x73\x69\x6f\x6e\x20\x74"
31093 "\x6f\x20\x74\x68\x65\x20\x49\x45"
31094 "\x54\x46\x20\x69\x6e\x74\x65\x6e"
31095 "\x64\x65\x64\x20\x62\x79\x20\x74"
31096 "\x68\x65\x20\x43\x6f\x6e\x74\x72"
31097 "\x69\x62\x75\x74\x6f\x72\x20\x66"
31098 "\x6f\x72\x20\x70\x75\x62\x6c\x69"
31099 "\x63\x61\x74\x69\x6f\x6e\x20\x61"
31100 "\x73\x20\x61\x6c\x6c\x20\x6f\x72"
31101 "\x20\x70\x61\x72\x74\x20\x6f\x66"
31102 "\x20\x61\x6e\x20\x49\x45\x54\x46"
31103 "\x20\x49\x6e\x74\x65\x72\x6e\x65"
31104 "\x74\x2d\x44\x72\x61\x66\x74\x20"
31105 "\x6f\x72\x20\x52\x46\x43\x20\x61"
31106 "\x6e\x64\x20\x61\x6e\x79\x20\x73"
31107 "\x74\x61\x74\x65\x6d\x65\x6e\x74"
31108 "\x20\x6d\x61\x64\x65\x20\x77\x69"
31109 "\x74\x68\x69\x6e\x20\x74\x68\x65"
31110 "\x20\x63\x6f\x6e\x74\x65\x78\x74"
31111 "\x20\x6f\x66\x20\x61\x6e\x20\x49"
31112 "\x45\x54\x46\x20\x61\x63\x74\x69"
31113 "\x76\x69\x74\x79\x20\x69\x73\x20"
31114 "\x63\x6f\x6e\x73\x69\x64\x65\x72"
31115 "\x65\x64\x20\x61\x6e\x20\x22\x49"
31116 "\x45\x54\x46\x20\x43\x6f\x6e\x74"
31117 "\x72\x69\x62\x75\x74\x69\x6f\x6e"
31118 "\x22\x2e\x20\x53\x75\x63\x68\x20"
31119 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
31120 "\x74\x73\x20\x69\x6e\x63\x6c\x75"
31121 "\x64\x65\x20\x6f\x72\x61\x6c\x20"
31122 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
31123 "\x74\x73\x20\x69\x6e\x20\x49\x45"
31124 "\x54\x46\x20\x73\x65\x73\x73\x69"
31125 "\x6f\x6e\x73\x2c\x20\x61\x73\x20"
31126 "\x77\x65\x6c\x6c\x20\x61\x73\x20"
31127 "\x77\x72\x69\x74\x74\x65\x6e\x20"
31128 "\x61\x6e\x64\x20\x65\x6c\x65\x63"
31129 "\x74\x72\x6f\x6e\x69\x63\x20\x63"
31130 "\x6f\x6d\x6d\x75\x6e\x69\x63\x61"
31131 "\x74\x69\x6f\x6e\x73\x20\x6d\x61"
31132 "\x64\x65\x20\x61\x74\x20\x61\x6e"
31133 "\x79\x20\x74\x69\x6d\x65\x20\x6f"
31134 "\x72\x20\x70\x6c\x61\x63\x65\x2c"
31135 "\x20\x77\x68\x69\x63\x68\x20\x61"
31136 "\x72\x65\x20\x61\x64\x64\x72\x65"
31137 "\x73\x73\x65\x64\x20\x74\x6f",
31138 .ctext = "\xf9\xab\x7a\x4a\x60\xb8\x5f\xa0"
31139 "\x50\xbb\x57\xce\xef\x8c\xc1\xd9"
31140 "\x24\x15\xb3\x67\x5e\x7f\x01\xf6"
31141 "\x1c\x22\xf6\xe5\x71\xb1\x43\x64"
31142 "\x63\x05\xd5\xfc\x5c\x3d\xc0\x0e"
31143 "\x23\xef\xd3\x3b\xd9\xdc\x7f\xa8"
31144 "\x58\x26\xb3\xd0\xc2\xd5\x04\x3f"
31145 "\x0a\x0e\x8f\x17\xe4\xcd\xf7\x2a"
31146 "\xb4\x2c\x09\xe4\x47\xec\x8b\xfb"
31147 "\x59\x37\x7a\xa1\xd0\x04\x7e\xaa"
31148 "\xf1\x98\x5f\x24\x3d\x72\x9a\x43"
31149 "\xa4\x36\x51\x92\x22\x87\xff\x26"
31150 "\xce\x9d\xeb\x59\x78\x84\x5e\x74"
31151 "\x97\x2e\x63\xc0\xef\x29\xf7\x8a"
31152 "\xb9\xee\x35\x08\x77\x6a\x35\x9a"
31153 "\x3e\xe6\x4f\x06\x03\x74\x1b\xc1"
31154 "\x5b\xb3\x0b\x89\x11\x07\xd3\xb7"
31155 "\x53\xd6\x25\x04\xd9\x35\xb4\x5d"
31156 "\x4c\x33\x5a\xc2\x42\x4c\xe6\xa4"
31157 "\x97\x6e\x0e\xd2\xb2\x8b\x2f\x7f"
31158 "\x28\xe5\x9f\xac\x4b\x2e\x02\xab"
31159 "\x85\xfa\xa9\x0d\x7c\x2d\x10\xe6"
31160 "\x91\xab\x55\x63\xf0\xde\x3a\x94"
31161 "\x25\x08\x10\x03\xc2\x68\xd1\xf4"
31162 "\xaf\x7d\x9c\x99\xf7\x86\x96\x30"
31163 "\x60\xfc\x0b\xe6\xa8\x80\x15\xb0"
31164 "\x81\xb1\x0c\xbe\xb9\x12\x18\x25"
31165 "\xe9\x0e\xb1\xe7\x23\xb2\xef\x4a"
31166 "\x22\x8f\xc5\x61\x89\xd4\xe7\x0c"
31167 "\x64\x36\x35\x61\xb6\x34\x60\xf7"
31168 "\x7b\x61\x37\x37\x12\x10\xa2\xf6"
31169 "\x7e\xdb\x7f\x39\x3f\xb6\x8e\x89"
31170 "\x9e\xf3\xfe\x13\x98\xbb\x66\x5a"
31171 "\xec\xea\xab\x3f\x9c\x87\xc4\x8c"
31172 "\x8a\x04\x18\x49\xfc\x77\x11\x50"
31173 "\x16\xe6\x71\x2b\xee\xc0\x9c\xb6"
31174 "\x87\xfd\x80\xff\x0b\x1d\x73\x38"
31175 "\xa4\x1d\x6f\xae\xe4\x12\xd7\x93"
31176 "\x9d\xcd\x38\x26\x09\x40\x52\xcd"
31177 "\x67\x01\x67\x26\xe0\x3e\x98\xa8"
31178 "\xe8\x1a\x13\x41\xbb\x90\x4d\x87"
31179 "\xbb\x42\x82\x39\xce\x3a\xd0\x18"
31180 "\x6d\x7b\x71\x8f\xbb\x2c\x6a\xd1"
31181 "\xbd\xf5\xc7\x8a\x7e\xe1\x1e\x0f"
31182 "\x0d\x0d\x13\x7c\xd9\xd8\x3c\x91"
31183 "\xab\xff\x1f\x12\xc3\xee\xe5\x65"
31184 "\x12\x8d\x7b\x61\xe5\x1f\x98",
31185 .len = 375,
31186 .also_non_np = 1,
31187 .np = 3,
31188 .tap = { 375 - 20, 4, 16 },
31189
31190 }, { /* Taken from the ChaCha20 test vectors, appended 16 random bytes
31191 to nonce, and recomputed the ciphertext with libsodium */
31192 .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
31193 "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
31194 "\x47\x39\x17\xc1\x40\x2b\x80\x09"
31195 "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
31196 .klen = 32,
31197 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
31198 "\x00\x00\x00\x02\x76\x5a\x2e\x63"
31199 "\x33\x9f\xc9\x9a\x66\x32\x0d\xb7"
31200 "\x2a\x00\x00\x00\x00\x00\x00\x00",
31201 .ptext = "\x27\x54\x77\x61\x73\x20\x62\x72"
31202 "\x69\x6c\x6c\x69\x67\x2c\x20\x61"
31203 "\x6e\x64\x20\x74\x68\x65\x20\x73"
31204 "\x6c\x69\x74\x68\x79\x20\x74\x6f"
31205 "\x76\x65\x73\x0a\x44\x69\x64\x20"
31206 "\x67\x79\x72\x65\x20\x61\x6e\x64"
31207 "\x20\x67\x69\x6d\x62\x6c\x65\x20"
31208 "\x69\x6e\x20\x74\x68\x65\x20\x77"
31209 "\x61\x62\x65\x3a\x0a\x41\x6c\x6c"
31210 "\x20\x6d\x69\x6d\x73\x79\x20\x77"
31211 "\x65\x72\x65\x20\x74\x68\x65\x20"
31212 "\x62\x6f\x72\x6f\x67\x6f\x76\x65"
31213 "\x73\x2c\x0a\x41\x6e\x64\x20\x74"
31214 "\x68\x65\x20\x6d\x6f\x6d\x65\x20"
31215 "\x72\x61\x74\x68\x73\x20\x6f\x75"
31216 "\x74\x67\x72\x61\x62\x65\x2e",
31217 .ctext = "\x95\xb9\x51\xe7\x8f\xb4\xa4\x03"
31218 "\xca\x37\xcc\xde\x60\x1d\x8c\xe2"
31219 "\xf1\xbb\x8a\x13\x7f\x61\x85\xcc"
31220 "\xad\xf4\xf0\xdc\x86\xa6\x1e\x10"
31221 "\xbc\x8e\xcb\x38\x2b\xa5\xc8\x8f"
31222 "\xaa\x03\x3d\x53\x4a\x42\xb1\x33"
31223 "\xfc\xd3\xef\xf0\x8e\x7e\x10\x9c"
31224 "\x6f\x12\x5e\xd4\x96\xfe\x5b\x08"
31225 "\xb6\x48\xf0\x14\x74\x51\x18\x7c"
31226 "\x07\x92\xfc\xac\x9d\xf1\x94\xc0"
31227 "\xc1\x9d\xc5\x19\x43\x1f\x1d\xbb"
31228 "\x07\xf0\x1b\x14\x25\x45\xbb\xcb"
31229 "\x5c\xe2\x8b\x28\xf3\xcf\x47\x29"
31230 "\x27\x79\x67\x24\xa6\x87\xc2\x11"
31231 "\x65\x03\xfa\x45\xf7\x9e\x53\x7a"
31232 "\x99\xf1\x82\x25\x4f\x8d\x07",
31233 .len = 127,
31234 }, { /* Taken from the ChaCha20 test vectors, appended 16 random bytes
31235 to nonce, and recomputed the ciphertext with libsodium */
31236 .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
31237 "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
31238 "\x47\x39\x17\xc1\x40\x2b\x80\x09"
31239 "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
31240 .klen = 32,
31241 .iv = "\x00\x00\x00\x00\x00\x00\x00\x00"
31242 "\x00\x00\x00\x01\x31\x58\xa3\x5a"
31243 "\x25\x5d\x05\x17\x58\xe9\x5e\xd4"
31244 "\x1c\x00\x00\x00\x00\x00\x00\x00",
31245 .ptext = "\x49\xee\xe0\xdc\x24\x90\x40\xcd"
31246 "\xc5\x40\x8f\x47\x05\xbc\xdd\x81"
31247 "\x47\xc6\x8d\xe6\xb1\x8f\xd7\xcb"
31248 "\x09\x0e\x6e\x22\x48\x1f\xbf\xb8"
31249 "\x5c\xf7\x1e\x8a\xc1\x23\xf2\xd4"
31250 "\x19\x4b\x01\x0f\x4e\xa4\x43\xce"
31251 "\x01\xc6\x67\xda\x03\x91\x18\x90"
31252 "\xa5\xa4\x8e\x45\x03\xb3\x2d\xac"
31253 "\x74\x92\xd3\x53\x47\xc8\xdd\x25"
31254 "\x53\x6c\x02\x03\x87\x0d\x11\x0c"
31255 "\x58\xe3\x12\x18\xfd\x2a\x5b\x40"
31256 "\x0c\x30\xf0\xb8\x3f\x43\xce\xae"
31257 "\x65\x3a\x7d\x7c\xf4\x54\xaa\xcc"
31258 "\x33\x97\xc3\x77\xba\xc5\x70\xde"
31259 "\xd7\xd5\x13\xa5\x65\xc4\x5f\x0f"
31260 "\x46\x1a\x0d\x97\xb5\xf3\xbb\x3c"
31261 "\x84\x0f\x2b\xc5\xaa\xea\xf2\x6c"
31262 "\xc9\xb5\x0c\xee\x15\xf3\x7d\xbe"
31263 "\x9f\x7b\x5a\xa6\xae\x4f\x83\xb6"
31264 "\x79\x49\x41\xf4\x58\x18\xcb\x86"
31265 "\x7f\x30\x0e\xf8\x7d\x44\x36\xea"
31266 "\x75\xeb\x88\x84\x40\x3c\xad\x4f"
31267 "\x6f\x31\x6b\xaa\x5d\xe5\xa5\xc5"
31268 "\x21\x66\xe9\xa7\xe3\xb2\x15\x88"
31269 "\x78\xf6\x79\xa1\x59\x47\x12\x4e"
31270 "\x9f\x9f\x64\x1a\xa0\x22\x5b\x08"
31271 "\xbe\x7c\x36\xc2\x2b\x66\x33\x1b"
31272 "\xdd\x60\x71\xf7\x47\x8c\x61\xc3"
31273 "\xda\x8a\x78\x1e\x16\xfa\x1e\x86"
31274 "\x81\xa6\x17\x2a\xa7\xb5\xc2\xe7"
31275 "\xa4\xc7\x42\xf1\xcf\x6a\xca\xb4"
31276 "\x45\xcf\xf3\x93\xf0\xe7\xea\xf6"
31277 "\xf4\xe6\x33\x43\x84\x93\xa5\x67"
31278 "\x9b\x16\x58\x58\x80\x0f\x2b\x5c"
31279 "\x24\x74\x75\x7f\x95\x81\xb7\x30"
31280 "\x7a\x33\xa7\xf7\x94\x87\x32\x27"
31281 "\x10\x5d\x14\x4c\x43\x29\xdd\x26"
31282 "\xbd\x3e\x3c\x0e\xfe\x0e\xa5\x10"
31283 "\xea\x6b\x64\xfd\x73\xc6\xed\xec"
31284 "\xa8\xc9\xbf\xb3\xba\x0b\x4d\x07"
31285 "\x70\xfc\x16\xfd\x79\x1e\xd7\xc5"
31286 "\x49\x4e\x1c\x8b\x8d\x79\x1b\xb1"
31287 "\xec\xca\x60\x09\x4c\x6a\xd5\x09"
31288 "\x49\x46\x00\x88\x22\x8d\xce\xea"
31289 "\xb1\x17\x11\xde\x42\xd2\x23\xc1"
31290 "\x72\x11\xf5\x50\x73\x04\x40\x47"
31291 "\xf9\x5d\xe7\xa7\x26\xb1\x7e\xb0"
31292 "\x3f\x58\xc1\x52\xab\x12\x67\x9d"
31293 "\x3f\x43\x4b\x68\xd4\x9c\x68\x38"
31294 "\x07\x8a\x2d\x3e\xf3\xaf\x6a\x4b"
31295 "\xf9\xe5\x31\x69\x22\xf9\xa6\x69"
31296 "\xc6\x9c\x96\x9a\x12\x35\x95\x1d"
31297 "\x95\xd5\xdd\xbe\xbf\x93\x53\x24"
31298 "\xfd\xeb\xc2\x0a\x64\xb0\x77\x00"
31299 "\x6f\x88\xc4\x37\x18\x69\x7c\xd7"
31300 "\x41\x92\x55\x4c\x03\xa1\x9a\x4b"
31301 "\x15\xe5\xdf\x7f\x37\x33\x72\xc1"
31302 "\x8b\x10\x67\xa3\x01\x57\x94\x25"
31303 "\x7b\x38\x71\x7e\xdd\x1e\xcc\x73"
31304 "\x55\xd2\x8e\xeb\x07\xdd\xf1\xda"
31305 "\x58\xb1\x47\x90\xfe\x42\x21\x72"
31306 "\xa3\x54\x7a\xa0\x40\xec\x9f\xdd"
31307 "\xc6\x84\x6e\xca\xae\xe3\x68\xb4"
31308 "\x9d\xe4\x78\xff\x57\xf2\xf8\x1b"
31309 "\x03\xa1\x31\xd9\xde\x8d\xf5\x22"
31310 "\x9c\xdd\x20\xa4\x1e\x27\xb1\x76"
31311 "\x4f\x44\x55\xe2\x9b\xa1\x9c\xfe"
31312 "\x54\xf7\x27\x1b\xf4\xde\x02\xf5"
31313 "\x1b\x55\x48\x5c\xdc\x21\x4b\x9e"
31314 "\x4b\x6e\xed\x46\x23\xdc\x65\xb2"
31315 "\xcf\x79\x5f\x28\xe0\x9e\x8b\xe7"
31316 "\x4c\x9d\x8a\xff\xc1\xa6\x28\xb8"
31317 "\x65\x69\x8a\x45\x29\xef\x74\x85"
31318 "\xde\x79\xc7\x08\xae\x30\xb0\xf4"
31319 "\xa3\x1d\x51\x41\xab\xce\xcb\xf6"
31320 "\xb5\xd8\x6d\xe0\x85\xe1\x98\xb3"
31321 "\x43\xbb\x86\x83\x0a\xa0\xf5\xb7"
31322 "\x04\x0b\xfa\x71\x1f\xb0\xf6\xd9"
31323 "\x13\x00\x15\xf0\xc7\xeb\x0d\x5a"
31324 "\x9f\xd7\xb9\x6c\x65\x14\x22\x45"
31325 "\x6e\x45\x32\x3e\x7e\x60\x1a\x12"
31326 "\x97\x82\x14\xfb\xaa\x04\x22\xfa"
31327 "\xa0\xe5\x7e\x8c\x78\x02\x48\x5d"
31328 "\x78\x33\x5a\x7c\xad\xdb\x29\xce"
31329 "\xbb\x8b\x61\xa4\xb7\x42\xe2\xac"
31330 "\x8b\x1a\xd9\x2f\x0b\x8b\x62\x21"
31331 "\x83\x35\x7e\xad\x73\xc2\xb5\x6c"
31332 "\x10\x26\x38\x07\xe5\xc7\x36\x80"
31333 "\xe2\x23\x12\x61\xf5\x48\x4b\x2b"
31334 "\xc5\xdf\x15\xd9\x87\x01\xaa\xac"
31335 "\x1e\x7c\xad\x73\x78\x18\x63\xe0"
31336 "\x8b\x9f\x81\xd8\x12\x6a\x28\x10"
31337 "\xbe\x04\x68\x8a\x09\x7c\x1b\x1c"
31338 "\x83\x66\x80\x47\x80\xe8\xfd\x35"
31339 "\x1c\x97\x6f\xae\x49\x10\x66\xcc"
31340 "\xc6\xd8\xcc\x3a\x84\x91\x20\x77"
31341 "\x72\xe4\x24\xd2\x37\x9f\xc5\xc9"
31342 "\x25\x94\x10\x5f\x40\x00\x64\x99"
31343 "\xdc\xae\xd7\x21\x09\x78\x50\x15"
31344 "\xac\x5f\xc6\x2c\xa2\x0b\xa9\x39"
31345 "\x87\x6e\x6d\xab\xde\x08\x51\x16"
31346 "\xc7\x13\xe9\xea\xed\x06\x8e\x2c"
31347 "\xf8\x37\x8c\xf0\xa6\x96\x8d\x43"
31348 "\xb6\x98\x37\xb2\x43\xed\xde\xdf"
31349 "\x89\x1a\xe7\xeb\x9d\xa1\x7b\x0b"
31350 "\x77\xb0\xe2\x75\xc0\xf1\x98\xd9"
31351 "\x80\x55\xc9\x34\x91\xd1\x59\xe8"
31352 "\x4b\x0f\xc1\xa9\x4b\x7a\x84\x06"
31353 "\x20\xa8\x5d\xfa\xd1\xde\x70\x56"
31354 "\x2f\x9e\x91\x9c\x20\xb3\x24\xd8"
31355 "\x84\x3d\xe1\x8c\x7e\x62\x52\xe5"
31356 "\x44\x4b\x9f\xc2\x93\x03\xea\x2b"
31357 "\x59\xc5\xfa\x3f\x91\x2b\xbb\x23"
31358 "\xf5\xb2\x7b\xf5\x38\xaf\xb3\xee"
31359 "\x63\xdc\x7b\xd1\xff\xaa\x8b\xab"
31360 "\x82\x6b\x37\x04\xeb\x74\xbe\x79"
31361 "\xb9\x83\x90\xef\x20\x59\x46\xff"
31362 "\xe9\x97\x3e\x2f\xee\xb6\x64\x18"
31363 "\x38\x4c\x7a\x4a\xf9\x61\xe8\x9a"
31364 "\xa1\xb5\x01\xa6\x47\xd3\x11\xd4"
31365 "\xce\xd3\x91\x49\x88\xc7\xb8\x4d"
31366 "\xb1\xb9\x07\x6d\x16\x72\xae\x46"
31367 "\x5e\x03\xa1\x4b\xb6\x02\x30\xa8"
31368 "\x3d\xa9\x07\x2a\x7c\x19\xe7\x62"
31369 "\x87\xe3\x82\x2f\x6f\xe1\x09\xd9"
31370 "\x94\x97\xea\xdd\x58\x9e\xae\x76"
31371 "\x7e\x35\xe5\xb4\xda\x7e\xf4\xde"
31372 "\xf7\x32\x87\xcd\x93\xbf\x11\x56"
31373 "\x11\xbe\x08\x74\xe1\x69\xad\xe2"
31374 "\xd7\xf8\x86\x75\x8a\x3c\xa4\xbe"
31375 "\x70\xa7\x1b\xfc\x0b\x44\x2a\x76"
31376 "\x35\xea\x5d\x85\x81\xaf\x85\xeb"
31377 "\xa0\x1c\x61\xc2\xf7\x4f\xa5\xdc"
31378 "\x02\x7f\xf6\x95\x40\x6e\x8a\x9a"
31379 "\xf3\x5d\x25\x6e\x14\x3a\x22\xc9"
31380 "\x37\x1c\xeb\x46\x54\x3f\xa5\x91"
31381 "\xc2\xb5\x8c\xfe\x53\x08\x97\x32"
31382 "\x1b\xb2\x30\x27\xfe\x25\x5d\xdc"
31383 "\x08\x87\xd0\xe5\x94\x1a\xd4\xf1"
31384 "\xfe\xd6\xb4\xa3\xe6\x74\x81\x3c"
31385 "\x1b\xb7\x31\xa7\x22\xfd\xd4\xdd"
31386 "\x20\x4e\x7c\x51\xb0\x60\x73\xb8"
31387 "\x9c\xac\x91\x90\x7e\x01\xb0\xe1"
31388 "\x8a\x2f\x75\x1c\x53\x2a\x98\x2a"
31389 "\x06\x52\x95\x52\xb2\xe9\x25\x2e"
31390 "\x4c\xe2\x5a\x00\xb2\x13\x81\x03"
31391 "\x77\x66\x0d\xa5\x99\xda\x4e\x8c"
31392 "\xac\xf3\x13\x53\x27\x45\xaf\x64"
31393 "\x46\xdc\xea\x23\xda\x97\xd1\xab"
31394 "\x7d\x6c\x30\x96\x1f\xbc\x06\x34"
31395 "\x18\x0b\x5e\x21\x35\x11\x8d\x4c"
31396 "\xe0\x2d\xe9\x50\x16\x74\x81\xa8"
31397 "\xb4\x34\xb9\x72\x42\xa6\xcc\xbc"
31398 "\xca\x34\x83\x27\x10\x5b\x68\x45"
31399 "\x8f\x52\x22\x0c\x55\x3d\x29\x7c"
31400 "\xe3\xc0\x66\x05\x42\x91\x5f\x58"
31401 "\xfe\x4a\x62\xd9\x8c\xa9\x04\x19"
31402 "\x04\xa9\x08\x4b\x57\xfc\x67\x53"
31403 "\x08\x7c\xbc\x66\x8a\xb0\xb6\x9f"
31404 "\x92\xd6\x41\x7c\x5b\x2a\x00\x79"
31405 "\x72",
31406 .ctext = "\x3a\x92\xee\x53\x31\xaf\x2b\x60"
31407 "\x5f\x55\x8d\x00\x5d\xfc\x74\x97"
31408 "\x28\x54\xf4\xa5\x75\xf1\x9b\x25"
31409 "\x62\x1c\xc0\xe0\x13\xc8\x87\x53"
31410 "\xd0\xf3\xa7\x97\x1f\x3b\x1e\xea"
31411 "\xe0\xe5\x2a\xd1\xdd\xa4\x3b\x50"
31412 "\x45\xa3\x0d\x7e\x1b\xc9\xa0\xad"
31413 "\xb9\x2c\x54\xa6\xc7\x55\x16\xd0"
31414 "\xc5\x2e\x02\x44\x35\xd0\x7e\x67"
31415 "\xf2\xc4\x9b\xcd\x95\x10\xcc\x29"
31416 "\x4b\xfa\x86\x87\xbe\x40\x36\xbe"
31417 "\xe1\xa3\x52\x89\x55\x20\x9b\xc2"
31418 "\xab\xf2\x31\x34\x16\xad\xc8\x17"
31419 "\x65\x24\xc0\xff\x12\x37\xfe\x5a"
31420 "\x62\x3b\x59\x47\x6c\x5f\x3a\x8e"
31421 "\x3b\xd9\x30\xc8\x7f\x2f\x88\xda"
31422 "\x80\xfd\x02\xda\x7f\x9a\x7a\x73"
31423 "\x59\xc5\x34\x09\x9a\x11\xcb\xa7"
31424 "\xfc\xf6\xa1\xa0\x60\xfb\x43\xbb"
31425 "\xf1\xe9\xd7\xc6\x79\x27\x4e\xff"
31426 "\x22\xb4\x24\xbf\x76\xee\x47\xb9"
31427 "\x6d\x3f\x8b\xb0\x9c\x3c\x43\xdd"
31428 "\xff\x25\x2e\x6d\xa4\x2b\xfb\x5d"
31429 "\x1b\x97\x6c\x55\x0a\x82\x7a\x7b"
31430 "\x94\x34\xc2\xdb\x2f\x1f\xc1\xea"
31431 "\xd4\x4d\x17\x46\x3b\x51\x69\x09"
31432 "\xe4\x99\x32\x25\xfd\x94\xaf\xfb"
31433 "\x10\xf7\x4f\xdd\x0b\x3c\x8b\x41"
31434 "\xb3\x6a\xb7\xd1\x33\xa8\x0c\x2f"
31435 "\x62\x4c\x72\x11\xd7\x74\xe1\x3b"
31436 "\x38\x43\x66\x7b\x6c\x36\x48\xe7"
31437 "\xe3\xe7\x9d\xb9\x42\x73\x7a\x2a"
31438 "\x89\x20\x1a\x41\x80\x03\xf7\x8f"
31439 "\x61\x78\x13\xbf\xfe\x50\xf5\x04"
31440 "\x52\xf9\xac\x47\xf8\x62\x4b\xb2"
31441 "\x24\xa9\xbf\x64\xb0\x18\x69\xd2"
31442 "\xf5\xe4\xce\xc8\xb1\x87\x75\xd6"
31443 "\x2c\x24\x79\x00\x7d\x26\xfb\x44"
31444 "\xe7\x45\x7a\xee\x58\xa5\x83\xc1"
31445 "\xb4\x24\xab\x23\x2f\x4d\xd7\x4f"
31446 "\x1c\xc7\xaa\xa9\x50\xf4\xa3\x07"
31447 "\x12\x13\x89\x74\xdc\x31\x6a\xb2"
31448 "\xf5\x0f\x13\x8b\xb9\xdb\x85\x1f"
31449 "\xf5\xbc\x88\xd9\x95\xea\x31\x6c"
31450 "\x36\x60\xb6\x49\xdc\xc4\xf7\x55"
31451 "\x3f\x21\xc1\xb5\x92\x18\x5e\xbc"
31452 "\x9f\x87\x7f\xe7\x79\x25\x40\x33"
31453 "\xd6\xb9\x33\xd5\x50\xb3\xc7\x89"
31454 "\x1b\x12\xa0\x46\xdd\xa7\xd8\x3e"
31455 "\x71\xeb\x6f\x66\xa1\x26\x0c\x67"
31456 "\xab\xb2\x38\x58\x17\xd8\x44\x3b"
31457 "\x16\xf0\x8e\x62\x8d\x16\x10\x00"
31458 "\x32\x8b\xef\xb9\x28\xd3\xc5\xad"
31459 "\x0a\x19\xa2\xe4\x03\x27\x7d\x94"
31460 "\x06\x18\xcd\xd6\x27\x00\xf9\x1f"
31461 "\xb6\xb3\xfe\x96\x35\x5f\xc4\x1c"
31462 "\x07\x62\x10\x79\x68\x50\xf1\x7e"
31463 "\x29\xe7\xc4\xc4\xe7\xee\x54\xd6"
31464 "\x58\x76\x84\x6d\x8d\xe4\x59\x31"
31465 "\xe9\xf4\xdc\xa1\x1f\xe5\x1a\xd6"
31466 "\xe6\x64\x46\xf5\x77\x9c\x60\x7a"
31467 "\x5e\x62\xe3\x0a\xd4\x9f\x7a\x2d"
31468 "\x7a\xa5\x0a\x7b\x29\x86\x7a\x74"
31469 "\x74\x71\x6b\xca\x7d\x1d\xaa\xba"
31470 "\x39\x84\x43\x76\x35\xfe\x4f\x9b"
31471 "\xbb\xbb\xb5\x6a\x32\xb5\x5d\x41"
31472 "\x51\xf0\x5b\x68\x03\x47\x4b\x8a"
31473 "\xca\x88\xf6\x37\xbd\x73\x51\x70"
31474 "\x66\xfe\x9e\x5f\x21\x9c\xf3\xdd"
31475 "\xc3\xea\x27\xf9\x64\x94\xe1\x19"
31476 "\xa0\xa9\xab\x60\xe0\x0e\xf7\x78"
31477 "\x70\x86\xeb\xe0\xd1\x5c\x05\xd3"
31478 "\xd7\xca\xe0\xc0\x47\x47\x34\xee"
31479 "\x11\xa3\xa3\x54\x98\xb7\x49\x8e"
31480 "\x84\x28\x70\x2c\x9e\xfb\x55\x54"
31481 "\x4d\xf8\x86\xf7\x85\x7c\xbd\xf3"
31482 "\x17\xd8\x47\xcb\xac\xf4\x20\x85"
31483 "\x34\x66\xad\x37\x2d\x5e\x52\xda"
31484 "\x8a\xfe\x98\x55\x30\xe7\x2d\x2b"
31485 "\x19\x10\x8e\x7b\x66\x5e\xdc\xe0"
31486 "\x45\x1f\x7b\xb4\x08\xfb\x8f\xf6"
31487 "\x8c\x89\x21\x34\x55\x27\xb2\x76"
31488 "\xb2\x07\xd9\xd6\x68\x9b\xea\x6b"
31489 "\x2d\xb4\xc4\x35\xdd\xd2\x79\xae"
31490 "\xc7\xd6\x26\x7f\x12\x01\x8c\xa7"
31491 "\xe3\xdb\xa8\xf4\xf7\x2b\xec\x99"
31492 "\x11\x00\xf1\x35\x8c\xcf\xd5\xc9"
31493 "\xbd\x91\x36\x39\x70\xcf\x7d\x70"
31494 "\x47\x1a\xfc\x6b\x56\xe0\x3f\x9c"
31495 "\x60\x49\x01\x72\xa9\xaf\x2c\x9c"
31496 "\xe8\xab\xda\x8c\x14\x19\xf3\x75"
31497 "\x07\x17\x9d\x44\x67\x7a\x2e\xef"
31498 "\xb7\x83\x35\x4a\xd1\x3d\x1c\x84"
31499 "\x32\xdd\xaa\xea\xca\x1d\xdc\x72"
31500 "\x2c\xcc\x43\xcd\x5d\xe3\x21\xa4"
31501 "\xd0\x8a\x4b\x20\x12\xa3\xd5\x86"
31502 "\x76\x96\xff\x5f\x04\x57\x0f\xe6"
31503 "\xba\xe8\x76\x50\x0c\x64\x1d\x83"
31504 "\x9c\x9b\x9a\x9a\x58\x97\x9c\x5c"
31505 "\xb4\xa4\xa6\x3e\x19\xeb\x8f\x5a"
31506 "\x61\xb2\x03\x7b\x35\x19\xbe\xa7"
31507 "\x63\x0c\xfd\xdd\xf9\x90\x6c\x08"
31508 "\x19\x11\xd3\x65\x4a\xf5\x96\x92"
31509 "\x59\xaa\x9c\x61\x0c\x29\xa7\xf8"
31510 "\x14\x39\x37\xbf\x3c\xf2\x16\x72"
31511 "\x02\xfa\xa2\xf3\x18\x67\x5d\xcb"
31512 "\xdc\x4d\xbb\x96\xff\x70\x08\x2d"
31513 "\xc2\xa8\x52\xe1\x34\x5f\x72\xfe"
31514 "\x64\xbf\xca\xa7\x74\x38\xfb\x74"
31515 "\x55\x9c\xfa\x8a\xed\xfb\x98\xeb"
31516 "\x58\x2e\x6c\xe1\x52\x76\x86\xd7"
31517 "\xcf\xa1\xa4\xfc\xb2\x47\x41\x28"
31518 "\xa3\xc1\xe5\xfd\x53\x19\x28\x2b"
31519 "\x37\x04\x65\x96\x99\x7a\x28\x0f"
31520 "\x07\x68\x4b\xc7\x52\x0a\x55\x35"
31521 "\x40\x19\x95\x61\xe8\x59\x40\x1f"
31522 "\x9d\xbf\x78\x7d\x8f\x84\xff\x6f"
31523 "\xd0\xd5\x63\xd2\x22\xbd\xc8\x4e"
31524 "\xfb\xe7\x9f\x06\xe6\xe7\x39\x6d"
31525 "\x6a\x96\x9f\xf0\x74\x7e\xc9\x35"
31526 "\xb7\x26\xb8\x1c\x0a\xa6\x27\x2c"
31527 "\xa2\x2b\xfe\xbe\x0f\x07\x73\xae"
31528 "\x7f\x7f\x54\xf5\x7c\x6a\x0a\x56"
31529 "\x49\xd4\x81\xe5\x85\x53\x99\x1f"
31530 "\x95\x05\x13\x58\x8d\x0e\x1b\x90"
31531 "\xc3\x75\x48\x64\x58\x98\x67\x84"
31532 "\xae\xe2\x21\xa2\x8a\x04\x0a\x0b"
31533 "\x61\xaa\xb0\xd4\x28\x60\x7a\xf8"
31534 "\xbc\x52\xfb\x24\x7f\xed\x0d\x2a"
31535 "\x0a\xb2\xf9\xc6\x95\xb5\x11\xc9"
31536 "\xf4\x0f\x26\x11\xcf\x2a\x57\x87"
31537 "\x7a\xf3\xe7\x94\x65\xc2\xb5\xb3"
31538 "\xab\x98\xe3\xc1\x2b\x59\x19\x7c"
31539 "\xd6\xf3\xf9\xbf\xff\x6d\xc6\x82"
31540 "\x13\x2f\x4a\x2e\xcd\x26\xfe\x2d"
31541 "\x01\x70\xf4\xc2\x7f\x1f\x4c\xcb"
31542 "\x47\x77\x0c\xa0\xa3\x03\xec\xda"
31543 "\xa9\xbf\x0d\x2d\xae\xe4\xb8\x7b"
31544 "\xa9\xbc\x08\xb4\x68\x2e\xc5\x60"
31545 "\x8d\x87\x41\x2b\x0f\x69\xf0\xaf"
31546 "\x5f\xba\x72\x20\x0f\x33\xcd\x6d"
31547 "\x36\x7d\x7b\xd5\x05\xf1\x4b\x05"
31548 "\xc4\xfc\x7f\x80\xb9\x4d\xbd\xf7"
31549 "\x7c\x84\x07\x01\xc2\x40\x66\x5b"
31550 "\x98\xc7\x2c\xe3\x97\xfa\xdf\x87"
31551 "\xa0\x1f\xe9\x21\x42\x0f\x3b\xeb"
31552 "\x89\x1c\x3b\xca\x83\x61\x77\x68"
31553 "\x84\xbb\x60\x87\x38\x2e\x25\xd5"
31554 "\x9e\x04\x41\x70\xac\xda\xc0\x9c"
31555 "\x9c\x69\xea\x8d\x4e\x55\x2a\x29"
31556 "\xed\x05\x4b\x7b\x73\x71\x90\x59"
31557 "\x4d\xc8\xd8\x44\xf0\x4c\xe1\x5e"
31558 "\x84\x47\x55\xcc\x32\x3f\xe7\x97"
31559 "\x42\xc6\x32\xac\x40\xe5\xa5\xc7"
31560 "\x8b\xed\xdb\xf7\x83\xd6\xb1\xc2"
31561 "\x52\x5e\x34\xb7\xeb\x6e\xd9\xfc"
31562 "\xe5\x93\x9a\x97\x3e\xb0\xdc\xd9"
31563 "\xd7\x06\x10\xb6\x1d\x80\x59\xdd"
31564 "\x0d\xfe\x64\x35\xcd\x5d\xec\xf0"
31565 "\xba\xd0\x34\xc9\x2d\x91\xc5\x17"
31566 "\x11",
31567 .len = 1281,
31568 .also_non_np = 1,
31569 .np = 3,
31570 .tap = { 1200, 1, 80 },
31571 },
31572};
31573
30997/* 31574/*
30998 * CTS (Cipher Text Stealing) mode tests 31575 * CTS (Cipher Text Stealing) mode tests
30999 */ 31576 */