Hi all, I am learning CryptoAPI by porting stream ciphers into it (particularly eSTREAM candidates at <http://www.ecrypt.eu.org/stream/>). As eSTREAM ciphers manipulates IV differently depending on algorithm design, it seems that standard block modes cannot be used: ECB has no IV; CBC and CTR don't let ciphers control how the IV is processed. So I derived stream.c from Herbert's cbc.c and Joy's ctr.c. It wraps around any cipher exporting cia_ivsize and cia_setiv_crypt() from "struct cipher_alg". As a test case, I've used Daniel Bernstein's Salsa20 implementation at <http://cr.yp.to/snuffle.html> as the cipher. My patch against Herbert's cryptodev-2.6 git is attached. Some questions come to mind: 1. Is this the way to go for general stream ciphers? 2. Would a separate "struct stream_alg" be better than hijacking "struct cipher_alg"? 3. Currently cia_setiv_crypt() does setiv() and inplace encryption; is this a good design? 4. Should the blocksize be 1 for the stream template? Please feel free to discuss the patch so that it can be improved. Regards, Swee Heng
diff --git a/crypto/Kconfig b/crypto/Kconfig index 1f32071..6b72952 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig @@ -204,6 +204,16 @@ config CRYPTO_CTR CTR: Counter mode This block cipher algorithm is required for IPSec. +config CRYPTO_STREAM + tristate "STREAM: Stream cipher support (EXPERIMENTAL)" + depends on EXPERIMENTAL + select CRYPTO_BLKCIPHER + select CRYPTO_MANAGER + default m + help + STREAM: Stream cipher wrapper + This wrapper is used by stream ciphers submitted to eSTREAM. + config CRYPTO_CRYPTD tristate "Software async crypto daemon" select CRYPTO_ABLKCIPHER @@ -450,6 +460,19 @@ config CRYPTO_SEED See also: <http://www.kisa.or.kr/kisa/seed/jsp/seed_eng.jsp> +config CRYPTO_SALSA20 + tristate "Salsa20 stream cipher algorithm (EXPERIMENTAL)" + depends on EXPERIMENTAL + select CRYPTO_ALGAPI + help + Salsa20 stream cipher algorithm. + + Salsa20 is a stream cipher submitted to eSTREAM, the ECRYPT + Stream Cipher Project. See <http://www.ecrypt.eu.org/stream/> + + The Salsa20 stream cipher algorithm is designed by Daniel J. + Bernstein <djb@xxxxxxxx>. See <http://cr.yp.to/snuffle.html> + config CRYPTO_DEFLATE tristate "Deflate compression algorithm" diff --git a/crypto/Makefile b/crypto/Makefile index 1f87db2..3026907 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -33,6 +33,7 @@ obj-$(CONFIG_CRYPTO_PCBC) += pcbc.o obj-$(CONFIG_CRYPTO_LRW) += lrw.o obj-$(CONFIG_CRYPTO_XTS) += xts.o obj-$(CONFIG_CRYPTO_CTR) += ctr.o +obj-$(CONFIG_CRYPTO_STREAM) += stream.o obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o obj-$(CONFIG_CRYPTO_DES) += des_generic.o obj-$(CONFIG_CRYPTO_FCRYPT) += fcrypt.o @@ -49,6 +50,7 @@ obj-$(CONFIG_CRYPTO_TEA) += tea.o obj-$(CONFIG_CRYPTO_KHAZAD) += khazad.o obj-$(CONFIG_CRYPTO_ANUBIS) += anubis.o obj-$(CONFIG_CRYPTO_SEED) += seed.o +obj-$(CONFIG_CRYPTO_SALSA20) += salsa20.o obj-$(CONFIG_CRYPTO_DEFLATE) += deflate.o obj-$(CONFIG_CRYPTO_MICHAEL_MIC) += michael_mic.o obj-$(CONFIG_CRYPTO_CRC32C) += crc32c.o diff --git a/crypto/salsa20.c b/crypto/salsa20.c new file mode 100644 index 0000000..8575b55 --- /dev/null +++ b/crypto/salsa20.c @@ -0,0 +1,240 @@ +/* + * Salsa20: Salsa20 stream cipher algorithm + * + * Salsa20 is a stream cipher submitted to eSTREAM, the ECRYPT Stream Cipher + * Project, by Daniel J. Bernstein <djb@xxxxxxxx>. More information about + * eSTREAM and Salsa20 can be found here: + * http://www.ecrypt.eu.org/stream/ + * http://cr.yp.to/snuffle.html + * + * The following work is derived from the specifications and C code that + * Bernstein released in the public domain. It has been modified to suit + * our requirements. + * + * Copyright (c) 2007 Tan Swee Heng <thesweeheng@xxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ + +#include <linux/init.h> +#include <linux/module.h> +#include <linux/errno.h> +#include <linux/crypto.h> +#include <linux/types.h> +#include <asm/byteorder.h> + +#define SALSA20_IV_SIZE 8 +#define SALSA20_BLOCK_SIZE 64 +#define SALSA20_MIN_KEY_SIZE 16 +#define SALSA20_MAX_KEY_SIZE 32 + +static void xor_byte(u8 *a, const u8 *b, unsigned int bs) +{ + for (; bs; bs--) + *a++ ^= *b++; +} + +static void xor_quad(u8 *dst, const u8 *src, unsigned int bs) +{ + u32 *a = (u32 *)dst; + u32 *b = (u32 *)src; + + for (; bs >= 4; bs -= 4) + *a++ ^= *b++; + + xor_byte((u8 *)a, (u8 *)b, bs); +} + +//========================================================================= +// Start of code taken from D. J. Bernstein's reference implementation. +// With some modifications made to suit our needs. +// ======================================================================== + +/* +salsa20-ref.c version 20051118 +D. J. Bernstein +Public domain. +*/ + +#define ROTATE(v,n) (((v) << (n)) | ((v) >> (32 - (n)))) +#define XOR(v,w) ((v) ^ (w)) +#define PLUS(v,w) (((v) + (w))) +#define PLUSONE(v) (PLUS((v),1)) +#define U32TO8_LITTLE(p, v) \ + { (p)[0] = (v >> 0) & 0xff; (p)[1] = (v >> 8) & 0xff; \ + (p)[2] = (v >> 16) & 0xff; (p)[3] = (v >> 24) & 0xff; } +#define U8TO32_LITTLE(p) \ + (((u32)((p)[0]) ) | ((u32)((p)[1]) << 8) | \ + ((u32)((p)[2]) << 16) | ((u32)((p)[3]) << 24) ) + +struct salsa20_ctx +{ + u32 input[16]; +}; + +static void salsa20_wordtobyte(u8 output[64], const u32 input[16]) +{ + u32 x[16]; + int i; + + memcpy(x, input, sizeof(x)); + for (i = 20;i > 0;i -= 2) { + x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 0],x[12]), 7)); + x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[ 4],x[ 0]), 9)); + x[12] = XOR(x[12],ROTATE(PLUS(x[ 8],x[ 4]),13)); + x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[12],x[ 8]),18)); + x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 5],x[ 1]), 7)); + x[13] = XOR(x[13],ROTATE(PLUS(x[ 9],x[ 5]), 9)); + x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[13],x[ 9]),13)); + x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 1],x[13]),18)); + x[14] = XOR(x[14],ROTATE(PLUS(x[10],x[ 6]), 7)); + x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[14],x[10]), 9)); + x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 2],x[14]),13)); + x[10] = XOR(x[10],ROTATE(PLUS(x[ 6],x[ 2]),18)); + x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[15],x[11]), 7)); + x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 3],x[15]), 9)); + x[11] = XOR(x[11],ROTATE(PLUS(x[ 7],x[ 3]),13)); + x[15] = XOR(x[15],ROTATE(PLUS(x[11],x[ 7]),18)); + x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[ 0],x[ 3]), 7)); + x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[ 1],x[ 0]), 9)); + x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[ 2],x[ 1]),13)); + x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[ 3],x[ 2]),18)); + x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 5],x[ 4]), 7)); + x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 6],x[ 5]), 9)); + x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 7],x[ 6]),13)); + x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 4],x[ 7]),18)); + x[11] = XOR(x[11],ROTATE(PLUS(x[10],x[ 9]), 7)); + x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[11],x[10]), 9)); + x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 8],x[11]),13)); + x[10] = XOR(x[10],ROTATE(PLUS(x[ 9],x[ 8]),18)); + x[12] = XOR(x[12],ROTATE(PLUS(x[15],x[14]), 7)); + x[13] = XOR(x[13],ROTATE(PLUS(x[12],x[15]), 9)); + x[14] = XOR(x[14],ROTATE(PLUS(x[13],x[12]),13)); + x[15] = XOR(x[15],ROTATE(PLUS(x[14],x[13]),18)); + } + for (i = 0;i < 16;++i) x[i] = PLUS(x[i], input[i]); + for (i = 0;i < 16;++i) U32TO8_LITTLE(output + 4 * i,x[i]); +} + +static const char sigma[16] = "expand 32-byte k"; +static const char tau[16] = "expand 16-byte k"; + +static void salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, u32 kbytes) +{ + const char *constants; + + ctx->input[1] = U8TO32_LITTLE(k + 0); + ctx->input[2] = U8TO32_LITTLE(k + 4); + ctx->input[3] = U8TO32_LITTLE(k + 8); + ctx->input[4] = U8TO32_LITTLE(k + 12); + if (kbytes == 32) { /* recommended */ + k += 16; + constants = sigma; + } else { /* kbytes == 16 */ + constants = tau; + } + ctx->input[11] = U8TO32_LITTLE(k + 0); + ctx->input[12] = U8TO32_LITTLE(k + 4); + ctx->input[13] = U8TO32_LITTLE(k + 8); + ctx->input[14] = U8TO32_LITTLE(k + 12); + ctx->input[0] = U8TO32_LITTLE(constants + 0); + ctx->input[5] = U8TO32_LITTLE(constants + 4); + ctx->input[10] = U8TO32_LITTLE(constants + 8); + ctx->input[15] = U8TO32_LITTLE(constants + 12); +} + +static void salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv) +{ + ctx->input[6] = U8TO32_LITTLE(iv + 0); + ctx->input[7] = U8TO32_LITTLE(iv + 4); + ctx->input[8] = 0; + ctx->input[9] = 0; +} + +static void salsa20_encrypt_bytes(struct salsa20_ctx *ctx, u8 *dst, u32 bytes) +{ + u8 keystream[64]; + + if (!bytes) + return; + + for (;;) { + salsa20_wordtobyte(keystream, ctx->input); + ctx->input[8] = PLUSONE(ctx->input[8]); + if (!ctx->input[8]) { + ctx->input[9] = PLUSONE(ctx->input[9]); + // stopping at 2^70 bytes per nonce is user's responsibility + } + if (bytes <= 64) { + xor_quad(dst, keystream, bytes); + return; + } + xor_quad(dst, keystream, 64); + bytes -= 64; + dst += 64; + } +} + +//========================================================================= +// End of code taken from D. J. Bernstein's reference implementation. +// ======================================================================== + +static int salsa20_setkey(struct crypto_tfm *tfm, + const u8 *key, unsigned int key_len) +{ + struct salsa20_ctx *ctx = crypto_tfm_ctx(tfm); + salsa20_keysetup(ctx, key, key_len); + return 0; +} + +static void salsa20_setiv_crypt(struct crypto_tfm *tfm, u8 *dst, + const u8 *iv, unsigned int nbytes) +{ + struct salsa20_ctx *ctx = crypto_tfm_ctx(tfm); + salsa20_ivsetup(ctx, iv); + salsa20_encrypt_bytes(ctx, dst, nbytes); +} + +static struct crypto_alg alg = { + .cra_name = "salsa20", + .cra_driver_name = "salsa20-generic", + .cra_priority = 100, + .cra_flags = CRYPTO_ALG_TYPE_CIPHER, + .cra_blocksize = SALSA20_BLOCK_SIZE, + .cra_ctxsize = sizeof(struct salsa20_ctx), + .cra_alignmask = 3, + .cra_module = THIS_MODULE, + .cra_list = LIST_HEAD_INIT(alg.cra_list), + .cra_u = { + .cipher = { + .cia_min_keysize = SALSA20_MIN_KEY_SIZE, + .cia_max_keysize = SALSA20_MAX_KEY_SIZE, + .cia_setkey = salsa20_setkey, + .cia_encrypt = NULL, + .cia_decrypt = NULL, + .cia_ivsize = SALSA20_IV_SIZE, + .cia_setiv_crypt = salsa20_setiv_crypt, + } + } +}; + +static int __init init(void) +{ + return crypto_register_alg(&alg); +} + +static void __exit fini(void) +{ + crypto_unregister_alg(&alg); +} + +module_init(init); +module_exit(fini); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION ("Salsa20 Stream Cipher Algorithm"); + diff --git a/crypto/stream.c b/crypto/stream.c new file mode 100644 index 0000000..2804001 --- /dev/null +++ b/crypto/stream.c @@ -0,0 +1,179 @@ +/* + * STR: Stream cipher wrapper + * + * Stream ciphers submitted to eSTREAM, the ECRYPT Stream Cipher Project, + * uses both a key and IV to generate an encrypted keystream. The following + * code provides a wrapper mechanism to call such stream ciphers. + * + * This work is derived from the implementation of cbc.c by Herbert Xu and + * ctr.c by Joy Latten. + * + * Copyright (c) 2007 Tan Swee Heng <thesweeheng@xxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + */ + +#include <crypto/algapi.h> +#include <linux/err.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/scatterlist.h> +#include <linux/slab.h> + +struct crypto_stream_ctx { + struct crypto_cipher *child; +}; + +static int crypto_stream_setkey(struct crypto_tfm *parent, const u8 *key, + unsigned int keylen) +{ + struct crypto_stream_ctx *ctx = crypto_tfm_ctx(parent); + struct crypto_cipher *child = ctx->child; + int err; + + crypto_cipher_clear_flags(child, CRYPTO_TFM_REQ_MASK); + crypto_cipher_set_flags(child, crypto_tfm_get_flags(parent) & + CRYPTO_TFM_REQ_MASK); + err = crypto_cipher_setkey(child, key, keylen); + crypto_tfm_set_flags(parent, crypto_cipher_get_flags(child) & + CRYPTO_TFM_RES_MASK); + return err; +} + +static int crypto_stream_crypt_walk(struct blkcipher_walk *walk, + struct crypto_cipher *tfm) +{ + void (*fn)(struct crypto_tfm *, u8 *, const u8 *, u32) = + crypto_cipher_alg(tfm)->cia_setiv_crypt; + unsigned int nbytes = walk->nbytes; + u8 *src = walk->src.virt.addr; + u8 *dst = walk->dst.virt.addr; + u8 *iv = walk->iv; + + if(dst != src) + memcpy(dst, src, nbytes); + fn(crypto_cipher_tfm(tfm), dst, iv, nbytes); + return 0; +} + +static int crypto_stream_crypt(struct blkcipher_desc *desc, + struct scatterlist *dst, struct scatterlist *src, + unsigned int nbytes) +{ + struct blkcipher_walk walk; + struct crypto_blkcipher *tfm = desc->tfm; + struct crypto_stream_ctx *ctx = crypto_blkcipher_ctx(tfm); + struct crypto_cipher *child = ctx->child; + int err; + + blkcipher_walk_init(&walk, dst, src, nbytes); + err = blkcipher_walk_virt(desc, &walk); + + while (walk.nbytes) { + nbytes = crypto_stream_crypt_walk(&walk, child); + err = blkcipher_walk_done(desc, &walk, nbytes); + } + + return err; +} + + +static int crypto_stream_init_tfm(struct crypto_tfm *tfm) +{ + struct crypto_instance *inst = (void *)tfm->__crt_alg; + struct crypto_spawn *spawn = crypto_instance_ctx(inst); + struct crypto_stream_ctx *ctx = crypto_tfm_ctx(tfm); + struct crypto_cipher *cipher; + + cipher = crypto_spawn_cipher(spawn); + if (IS_ERR(cipher)) + return PTR_ERR(cipher); + + ctx->child = cipher; + return 0; +} + +static void crypto_stream_exit_tfm(struct crypto_tfm *tfm) +{ + struct crypto_stream_ctx *ctx = crypto_tfm_ctx(tfm); + crypto_free_cipher(ctx->child); +} + +static struct crypto_instance *crypto_stream_alloc(struct rtattr **tb) +{ + struct crypto_instance *inst; + struct crypto_alg *alg; + int err; + + err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_BLKCIPHER); + if (err) + return ERR_PTR(err); + + alg = crypto_get_attr_alg(tb, CRYPTO_ALG_TYPE_CIPHER, + CRYPTO_ALG_TYPE_MASK); + if (IS_ERR(alg)) + return ERR_PTR(PTR_ERR(alg)); + + inst = crypto_alloc_instance("stream", alg); + if (IS_ERR(inst)) + goto out_put_alg; + + inst->alg.cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER; + inst->alg.cra_priority = alg->cra_priority; + inst->alg.cra_blocksize = alg->cra_blocksize; + inst->alg.cra_alignmask = 3; + inst->alg.cra_type = &crypto_blkcipher_type; + + if (!(alg->cra_blocksize % 4)) + inst->alg.cra_alignmask |= 3; + inst->alg.cra_blkcipher.ivsize = alg->cra_cipher.cia_ivsize; + inst->alg.cra_blkcipher.min_keysize = alg->cra_cipher.cia_min_keysize; + inst->alg.cra_blkcipher.max_keysize = alg->cra_cipher.cia_max_keysize; + + inst->alg.cra_ctxsize = sizeof(struct crypto_stream_ctx); + + inst->alg.cra_init = crypto_stream_init_tfm; + inst->alg.cra_exit = crypto_stream_exit_tfm; + + inst->alg.cra_blkcipher.setkey = crypto_stream_setkey; + inst->alg.cra_blkcipher.encrypt = crypto_stream_crypt; + inst->alg.cra_blkcipher.decrypt = crypto_stream_crypt; + +out_put_alg: + crypto_mod_put(alg); + return inst; +} + +static void crypto_stream_free(struct crypto_instance *inst) +{ + crypto_drop_spawn(crypto_instance_ctx(inst)); + kfree(inst); +} + +static struct crypto_template crypto_stream_tmpl = { + .name = "stream", + .alloc = crypto_stream_alloc, + .free = crypto_stream_free, + .module = THIS_MODULE, +}; + +static int __init crypto_stream_module_init(void) +{ + return crypto_register_template(&crypto_stream_tmpl); +} + +static void __exit crypto_stream_module_exit(void) +{ + crypto_unregister_template(&crypto_stream_tmpl); +} + +module_init(crypto_stream_module_init); +module_exit(crypto_stream_module_exit); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Stream cipher wrapper"); diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c index 91ff892..515c151 100644 --- a/crypto/tcrypt.c +++ b/crypto/tcrypt.c @@ -78,7 +78,7 @@ static char *check[] = { "twofish", "serpent", "sha384", "sha512", "md4", "aes", "cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea", "khazad", "wp512", "wp384", "wp256", "tnepres", "xeta", "fcrypt", - "camellia", "seed", NULL + "camellia", "seed", "salsa20", NULL }; static void hexdump(unsigned char *buf, unsigned int len) @@ -1290,6 +1290,12 @@ static void do_test(void) CAMELLIA_CBC_DEC_TEST_VECTORS); break; + case 34: + test_cipher("stream(salsa20)", ENCRYPT, + salsa20_stream_enc_tv_template, + SALSA20_STREAM_ENC_TEST_VECTORS); + break; + case 100: test_hash("hmac(md5)", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS); diff --git a/crypto/tcrypt.h b/crypto/tcrypt.h index f7f9b23..22ac754 100644 --- a/crypto/tcrypt.h +++ b/crypto/tcrypt.h @@ -4502,6 +4502,581 @@ static struct cipher_testvec seed_dec_tv_template[] = { } }; +#define SALSA20_STREAM_ENC_TEST_VECTORS 4 +static struct cipher_testvec salsa20_stream_enc_tv_template[] = { + /* Testvectors from verified.test-vectors submitted to ECRYPT */ + { /* Set 3, vector 0 */ + .key = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F + }, + .klen = 16, + .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .input = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + .ilen = 512, + .result = { + 0x2D, 0xD5, 0xC3, 0xF7, 0xBA, 0x2B, 0x20, 0xF7, + 0x68, 0x02, 0x41, 0x0C, 0x68, 0x86, 0x88, 0x89, + 0x5A, 0xD8, 0xC1, 0xBD, 0x4E, 0xA6, 0xC9, 0xB1, + 0x40, 0xFB, 0x9B, 0x90, 0xE2, 0x10, 0x49, 0xBF, + 0x58, 0x3F, 0x52, 0x79, 0x70, 0xEB, 0xC1, 0xA4, + 0xC4, 0xC5, 0xAF, 0x11, 0x7A, 0x59, 0x40, 0xD9, + 0x2B, 0x98, 0x89, 0x5B, 0x19, 0x02, 0xF0, 0x2B, + 0xF6, 0xE9, 0xBE, 0xF8, 0xD6, 0xB4, 0xCC, 0xBE, + 0xAE, 0x17, 0xCC, 0x18, 0x7C, 0x9B, 0x82, 0x60, + 0xF4, 0x6A, 0x62, 0xD4, 0x40, 0xC8, 0x45, 0x97, + 0x0D, 0x9D, 0xAD, 0x1E, 0xDB, 0x8D, 0x85, 0x75, + 0xDC, 0xAE, 0x00, 0x6A, 0xCD, 0xF6, 0xAF, 0x2F, + 0x13, 0x73, 0xDF, 0xF1, 0x26, 0x3A, 0x06, 0xB3, + 0xD0, 0x63, 0xF4, 0x6D, 0x6F, 0x5E, 0x6E, 0x01, + 0x37, 0x59, 0x02, 0x14, 0x19, 0xD2, 0x9D, 0xB0, + 0x3A, 0x99, 0x2B, 0x2F, 0xD1, 0xC6, 0xA0, 0xCB, + 0xE1, 0xA6, 0x14, 0x59, 0x8A, 0xEC, 0x9D, 0x8A, + 0x4E, 0xA9, 0x91, 0x3F, 0xC2, 0x51, 0xED, 0x3E, + 0xD3, 0x29, 0xDF, 0xC5, 0x09, 0xEB, 0xDE, 0x5B, + 0x27, 0xE8, 0x75, 0x02, 0xB4, 0x3A, 0xEA, 0x4D, + 0xE0, 0xAE, 0xC5, 0x41, 0xBC, 0xC5, 0x27, 0x6E, + 0x8F, 0xF6, 0x88, 0x40, 0x13, 0x67, 0x18, 0x16, + 0xA9, 0x17, 0x19, 0x6F, 0x80, 0xFA, 0x37, 0x0A, + 0x2A, 0x2E, 0x0D, 0xF1, 0xA8, 0xC5, 0x0D, 0x50, + 0xAB, 0x56, 0xCC, 0x2C, 0x5B, 0xFF, 0xEF, 0x17, + 0x4B, 0xBE, 0x28, 0xC4, 0x8A, 0x17, 0x03, 0x9E, + 0xCB, 0x79, 0x5F, 0x4C, 0x25, 0x41, 0xE2, 0xF4, + 0xAE, 0x5C, 0x69, 0xCA, 0x7F, 0xC2, 0xDE, 0xD4, + 0xD3, 0x9B, 0x2C, 0x7B, 0x93, 0x6A, 0xCD, 0x5C, + 0x2E, 0xCD, 0x47, 0x19, 0xFD, 0x6A, 0x31, 0x88, + 0x32, 0x3A, 0x14, 0x49, 0x02, 0x81, 0xCB, 0xE8, + 0xDA, 0xC4, 0x8E, 0x46, 0x64, 0xFF, 0x3D, 0x3B, + 0x9A, 0x18, 0xE8, 0x27, 0xC3, 0x36, 0x33, 0xE9, + 0x32, 0xFC, 0x43, 0x1D, 0x69, 0x7F, 0x07, 0x75, + 0xB4, 0xC5, 0xB0, 0xAD, 0x26, 0xD1, 0xAC, 0xD5, + 0xA6, 0x43, 0xE3, 0xA0, 0x1A, 0x06, 0x58, 0x21, + 0x42, 0xA4, 0x3F, 0x48, 0xE5, 0xD3, 0xD9, 0xA9, + 0x18, 0x58, 0x88, 0x73, 0x10, 0xD3, 0x99, 0x69, + 0xD6, 0x5E, 0x7D, 0xB7, 0x88, 0xAF, 0xE2, 0x7D, + 0x03, 0xCD, 0x98, 0x56, 0x41, 0x96, 0x73, 0x57, + 0xDB, 0x31, 0x55, 0x06, 0x79, 0xF1, 0x79, 0x86, + 0xC1, 0x4F, 0xAC, 0x7F, 0x6C, 0x57, 0xCA, 0x38, + 0xC0, 0x40, 0x24, 0x65, 0x3C, 0x7B, 0x2B, 0xA5, + 0x38, 0x19, 0x7F, 0x5A, 0x24, 0xBC, 0x61, 0xEC, + 0xCE, 0xCE, 0x1B, 0xF5, 0x60, 0xC1, 0x2B, 0x58, + 0xB5, 0x15, 0xE6, 0xBF, 0x49, 0xAF, 0x42, 0xAD, + 0xEF, 0x89, 0x8C, 0x90, 0xF1, 0x47, 0x9E, 0x09, + 0x64, 0x23, 0x82, 0x77, 0x0E, 0xB9, 0xF8, 0x63, + 0x0E, 0x84, 0xC9, 0x74, 0x8B, 0xF3, 0x99, 0x4D, + 0x4E, 0x2F, 0x24, 0x5B, 0xC7, 0xF7, 0x75, 0x5B, + 0xE0, 0xFC, 0x55, 0x2C, 0xCE, 0xAA, 0x4F, 0x81, + 0x6A, 0xA0, 0x7D, 0x6F, 0x67, 0x10, 0x36, 0x52, + 0x6F, 0xDD, 0x42, 0xFC, 0xE9, 0xCA, 0x5E, 0x6B, + 0x1B, 0x22, 0xC0, 0xA1, 0xC1, 0x5F, 0x60, 0xA0, + 0x36, 0xCB, 0x75, 0x24, 0xC1, 0x69, 0xB2, 0x8F, + 0xA4, 0x8A, 0xD0, 0x18, 0xD7, 0x0E, 0xDC, 0xF1, + 0x75, 0x23, 0x57, 0x19, 0x1E, 0x80, 0x41, 0xAB, + 0xB8, 0xB5, 0x76, 0x1F, 0xAF, 0x9C, 0xB9, 0xD7, + 0x30, 0x72, 0xE1, 0x0B, 0x4A, 0x3E, 0xD8, 0xC6, + 0xAD, 0xA2, 0xB0, 0x5C, 0xBB, 0xAC, 0x29, 0x8F, + 0x2E, 0xD6, 0x44, 0x83, 0x60, 0xF6, 0x3A, 0x51, + 0xE0, 0x73, 0xDE, 0x02, 0x33, 0x8D, 0xBA, 0xF2, + 0xA8, 0x38, 0x41, 0x57, 0x32, 0x9B, 0xC3, 0x1A, + 0x10, 0x36, 0xBB, 0xB4, 0xCB, 0xFE, 0xE6, 0x60, + }, + .rlen = 512, + }, { /* Set 5, vector 0 */ + .key = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + .klen = 16, + .iv = { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .input = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + .ilen = 512, + .result = { + 0xB6, 0x6C, 0x1E, 0x44, 0x46, 0xDD, 0x95, 0x57, + 0xE5, 0x78, 0xE2, 0x23, 0xB0, 0xB7, 0x68, 0x01, + 0x7B, 0x23, 0xB2, 0x67, 0xBB, 0x02, 0x34, 0xAE, + 0x46, 0x26, 0xBF, 0x44, 0x3F, 0x21, 0x97, 0x76, + 0x43, 0x6F, 0xB1, 0x9F, 0xD0, 0xE8, 0x86, 0x6F, + 0xCD, 0x0D, 0xE9, 0xA9, 0x53, 0x8F, 0x4A, 0x09, + 0xCA, 0x9A, 0xC0, 0x73, 0x2E, 0x30, 0xBC, 0xF9, + 0x8E, 0x4F, 0x13, 0xE4, 0xB9, 0xE2, 0x01, 0xD9, + 0xA7, 0xD9, 0x20, 0x8C, 0x0A, 0x87, 0x0E, 0x7B, + 0x67, 0xAF, 0x02, 0x04, 0xA7, 0xC8, 0x85, 0x04, + 0x8C, 0x32, 0x14, 0x7E, 0x40, 0x99, 0x19, 0x8A, + 0xC0, 0x53, 0x47, 0xD9, 0xDB, 0xF5, 0x3E, 0xE1, + 0xDC, 0xAC, 0x73, 0x11, 0x86, 0x3C, 0xB4, 0xE3, + 0x16, 0xF8, 0xB5, 0xF2, 0x93, 0x80, 0xA9, 0x2C, + 0x5A, 0xA8, 0xB2, 0x13, 0x18, 0x51, 0xD1, 0x4D, + 0x69, 0xD7, 0xEE, 0x4A, 0xBF, 0x9C, 0x4F, 0x56, + 0xD7, 0xDA, 0x4F, 0x9F, 0x54, 0x70, 0xFD, 0x2B, + 0x9B, 0x37, 0x8A, 0x91, 0x18, 0x74, 0x8B, 0x3F, + 0x6B, 0x85, 0xC3, 0x2F, 0x3F, 0x50, 0xF9, 0x28, + 0xBD, 0xA9, 0x8A, 0x76, 0x7E, 0x56, 0x24, 0xC5, + 0xC3, 0x18, 0x87, 0xF4, 0x66, 0xC6, 0x4D, 0x2D, + 0x9A, 0xA9, 0xC7, 0x77, 0x85, 0x1B, 0x31, 0xD6, + 0xEE, 0xAE, 0x77, 0x00, 0x39, 0x58, 0x9A, 0xF0, + 0xAA, 0x4D, 0xC9, 0x49, 0xDB, 0x32, 0xD9, 0x73, + 0x46, 0x29, 0x20, 0x04, 0x1C, 0x55, 0x43, 0x95, + 0x4D, 0x62, 0x30, 0xC5, 0x31, 0x04, 0x2B, 0x99, + 0x9A, 0x28, 0x95, 0x42, 0xFE, 0xB3, 0xC1, 0x29, + 0xC5, 0x28, 0x6E, 0x1A, 0x4B, 0x4C, 0xF1, 0x18, + 0x74, 0x47, 0x95, 0x97, 0x85, 0x43, 0x4B, 0xEF, + 0x0D, 0x05, 0xC6, 0xEC, 0x89, 0x50, 0xE4, 0x69, + 0xBB, 0xA6, 0x64, 0x75, 0x71, 0xDD, 0xD0, 0x49, + 0xC7, 0x2D, 0x81, 0xAC, 0x8B, 0x75, 0xD0, 0x27, + 0xDD, 0x84, 0xE3, 0xF6, 0x31, 0xAD, 0xDC, 0x44, + 0x50, 0xB9, 0x81, 0x37, 0x29, 0xBD, 0x8E, 0x7C, + 0xC8, 0x90, 0x9A, 0x1E, 0x02, 0x3E, 0xE5, 0x39, + 0xF1, 0x26, 0x46, 0xCF, 0xEC, 0x03, 0x23, 0x9A, + 0x68, 0xF3, 0x00, 0x8F, 0x17, 0x1C, 0xDA, 0xE5, + 0x14, 0xD2, 0x0B, 0xCD, 0x58, 0x4D, 0xFD, 0x44, + 0xCB, 0xF2, 0x5C, 0x05, 0xD0, 0x28, 0xE5, 0x18, + 0x70, 0x72, 0x9E, 0x40, 0x87, 0xAA, 0x02, 0x5B, + 0x55, 0xD2, 0x52, 0xBF, 0x1A, 0x9F, 0xF7, 0xF0, + 0x9F, 0x7C, 0x63, 0xE1, 0xC0, 0x22, 0x7E, 0xB2, + 0x6C, 0x7F, 0xAF, 0x17, 0xF1, 0x94, 0x5A, 0x68, + 0x1F, 0xD5, 0x3E, 0x98, 0x71, 0xC9, 0xF3, 0x06, + 0xBA, 0xED, 0xCD, 0x33, 0xBB, 0x07, 0x5F, 0x49, + 0xC1, 0x67, 0xE3, 0xCB, 0x9A, 0x1D, 0x90, 0xE3, + 0x25, 0x2F, 0x73, 0x1B, 0x02, 0x70, 0x45, 0xCA, + 0xFC, 0x73, 0xEC, 0x08, 0x94, 0x05, 0x4D, 0xD0, + 0x42, 0x9E, 0x9E, 0x8B, 0x40, 0xA8, 0x6B, 0x3B, + 0xF7, 0x74, 0x43, 0x10, 0xC3, 0xD1, 0x5C, 0xF1, + 0xA7, 0x7D, 0xC4, 0x25, 0x47, 0x8B, 0x74, 0x29, + 0x07, 0xC5, 0x25, 0xD3, 0x7B, 0x6C, 0x3B, 0x70, + 0xEB, 0xAF, 0xE6, 0x09, 0xD3, 0x8B, 0x33, 0x3B, + 0x74, 0x0A, 0xD7, 0x8A, 0x37, 0xEB, 0x74, 0xF3, + 0xF6, 0x16, 0x18, 0x9B, 0x31, 0x2B, 0x80, 0x60, + 0xE6, 0x4A, 0xAE, 0xFF, 0x64, 0x2B, 0x47, 0x35, + 0x5A, 0xC8, 0x47, 0x48, 0x99, 0xB9, 0xE2, 0x82, + 0x11, 0xCC, 0x71, 0x37, 0xBD, 0x0D, 0xF2, 0x90, + 0xD3, 0xE9, 0x26, 0xEB, 0x32, 0xD8, 0xF9, 0xC9, + 0x2D, 0x0F, 0xB1, 0xDE, 0x4D, 0xBE, 0x45, 0x2D, + 0xE3, 0x80, 0x0E, 0x55, 0x4B, 0x34, 0x8E, 0x8A, + 0x3D, 0x1B, 0x9C, 0x59, 0xB9, 0xC7, 0x7B, 0x09, + 0x0B, 0x8E, 0x3A, 0x0B, 0xDA, 0xC5, 0x20, 0xE9, + 0x76, 0x50, 0x19, 0x58, 0x46, 0x19, 0x8E, 0x9D, + }, + .rlen = 512, + }, { /* Set 3, vector 27 */ + .key = { + 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, + 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A + }, + .klen = 32, + .iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .input = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + .ilen = 512, + .result = { + 0xAE, 0x39, 0x50, 0x8E, 0xAC, 0x9A, 0xEC, 0xE7, + 0xBF, 0x97, 0xBB, 0x20, 0xB9, 0xDE, 0xE4, 0x1F, + 0x87, 0xD9, 0x47, 0xF8, 0x28, 0x91, 0x35, 0x98, + 0xDB, 0x72, 0xCC, 0x23, 0x29, 0x48, 0x56, 0x5E, + 0x83, 0x7E, 0x0B, 0xF3, 0x7D, 0x5D, 0x38, 0x7B, + 0x2D, 0x71, 0x02, 0xB4, 0x3B, 0xB5, 0xD8, 0x23, + 0xB0, 0x4A, 0xDF, 0x3C, 0xEC, 0xB6, 0xD9, 0x3B, + 0x9B, 0xA7, 0x52, 0xBE, 0xC5, 0xD4, 0x50, 0x59, + 0x15, 0x14, 0xB4, 0x0E, 0x40, 0xE6, 0x53, 0xD1, + 0x83, 0x9C, 0x5B, 0xA0, 0x92, 0x29, 0x6B, 0x5E, + 0x96, 0x5B, 0x1E, 0x2F, 0xD3, 0xAC, 0xC1, 0x92, + 0xB1, 0x41, 0x3F, 0x19, 0x2F, 0xC4, 0x3B, 0xC6, + 0x95, 0x46, 0x45, 0x54, 0xE9, 0x75, 0x03, 0x08, + 0x44, 0xAF, 0xE5, 0x8A, 0x81, 0x12, 0x09, 0x9B, + 0x86, 0x66, 0x3A, 0x09, 0x5D, 0xC4, 0xD5, 0x80, + 0x3B, 0x7B, 0xDC, 0x0B, 0x2B, 0xB1, 0x64, 0x0B, + 0x20, 0x10, 0x33, 0xA1, 0x3A, 0x94, 0xBE, 0xE6, + 0x38, 0xD1, 0x9C, 0x68, 0x92, 0x2F, 0xCA, 0x48, + 0xE1, 0xB7, 0x13, 0x5D, 0xA8, 0x82, 0x29, 0x9E, + 0xC0, 0x71, 0x17, 0x9A, 0x9F, 0x08, 0x90, 0x48, + 0xBB, 0x14, 0xE2, 0xC8, 0xE4, 0x2C, 0x18, 0x8E, + 0x25, 0x6C, 0x9D, 0xED, 0x1A, 0x89, 0xEA, 0x18, + 0x00, 0xB8, 0x53, 0xF4, 0x58, 0x45, 0xB9, 0x4B, + 0xD6, 0x04, 0x92, 0x67, 0x1D, 0xDF, 0xB7, 0x7F, + 0xCF, 0x7F, 0x36, 0x73, 0x4A, 0x7A, 0xD1, 0xEF, + 0x4D, 0x9A, 0x4A, 0xA5, 0x18, 0xA9, 0x1C, 0x14, + 0x64, 0x18, 0x46, 0x88, 0xF3, 0x1E, 0x5E, 0x77, + 0x5E, 0x87, 0x9E, 0x01, 0xE8, 0x2F, 0xB4, 0x2E, + 0xAE, 0xE8, 0xF3, 0x82, 0xAA, 0x07, 0x01, 0xD5, + 0x4A, 0xF5, 0xDB, 0x78, 0x88, 0x58, 0xCC, 0xDF, + 0x80, 0x1D, 0xED, 0x1E, 0x18, 0xBA, 0x41, 0x95, + 0x01, 0x9A, 0xA3, 0x11, 0x1B, 0xA1, 0x11, 0xAC, + 0xAB, 0x84, 0xE6, 0x43, 0xD2, 0x14, 0xE8, 0xDE, + 0x92, 0x74, 0x72, 0x0A, 0x15, 0x57, 0xA1, 0xE0, + 0x47, 0x1F, 0x00, 0x39, 0x49, 0x34, 0xA8, 0x3A, + 0x32, 0x4D, 0x42, 0x70, 0x94, 0x9B, 0xD4, 0x48, + 0xA7, 0xBB, 0x6B, 0x5D, 0x5F, 0xA4, 0x0E, 0x98, + 0x31, 0xAE, 0x5B, 0x4E, 0xA7, 0xD8, 0xD3, 0x4E, + 0x07, 0x1E, 0xB5, 0x6E, 0xFD, 0x84, 0xF1, 0x27, + 0xC8, 0xE3, 0x4D, 0xA9, 0xBF, 0x63, 0x3B, 0x46, + 0xD7, 0x7E, 0xB5, 0xA6, 0xC8, 0x45, 0x0A, 0xA9, + 0x14, 0x30, 0xA7, 0x5A, 0x05, 0x9A, 0x4A, 0x46, + 0x6F, 0xDC, 0xD0, 0x46, 0x7C, 0x35, 0x80, 0x63, + 0xCC, 0x1E, 0x23, 0xCB, 0x99, 0x3B, 0x94, 0xD8, + 0x70, 0x5F, 0xE9, 0x2A, 0x35, 0x48, 0x05, 0x04, + 0x9C, 0xA8, 0x2F, 0x08, 0xB3, 0x29, 0x86, 0xA5, + 0x6A, 0xF2, 0x12, 0xB5, 0xCC, 0xFE, 0x33, 0xCC, + 0xE8, 0x53, 0xA0, 0x93, 0x71, 0x8C, 0xD9, 0x45, + 0x13, 0x1D, 0xA5, 0x69, 0x23, 0x7D, 0x06, 0x3B, + 0xF1, 0x56, 0xE0, 0xAF, 0xC4, 0x0F, 0x39, 0x2A, + 0x36, 0x1B, 0x97, 0x83, 0x90, 0x71, 0xFF, 0xAD, + 0xF4, 0x50, 0x02, 0x08, 0x95, 0x85, 0xC2, 0x85, + 0x60, 0xE6, 0x99, 0xFD, 0xA9, 0x7A, 0xC8, 0xBB, + 0xCF, 0x1C, 0xC2, 0x0C, 0xD7, 0x34, 0xB6, 0x71, + 0x95, 0xA1, 0x63, 0xD6, 0xC5, 0xFF, 0xF2, 0x05, + 0x3A, 0xB3, 0xA3, 0x5B, 0x27, 0xA8, 0x75, 0x90, + 0xE7, 0x57, 0xCA, 0x95, 0x77, 0x97, 0xD6, 0x41, + 0x6E, 0x17, 0xF8, 0x52, 0xAF, 0xFB, 0xF1, 0x91, + 0xAF, 0x98, 0xEB, 0x8C, 0xF7, 0x3D, 0xCB, 0xBA, + 0x0B, 0xCE, 0x8E, 0xFA, 0x29, 0xB9, 0x58, 0xE3, + 0x9C, 0x00, 0x85, 0xF0, 0x07, 0x6E, 0x0B, 0x4E, + 0x31, 0x28, 0x9A, 0x4F, 0x2D, 0xF3, 0x58, 0x55, + 0xAD, 0xD6, 0xBB, 0xEC, 0x72, 0x5F, 0xC2, 0x86, + 0x0D, 0x4F, 0x49, 0xAB, 0x4E, 0xEA, 0x6C, 0x87, + }, + .rlen = 512, + + }, { /* Set 5, vector 27 */ + .key = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + .klen = 32, + .iv = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00 }, + .input = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + .ilen = 512, + .result = { + 0xD2, 0xDB, 0x1A, 0x5C, 0xF1, 0xC1, 0xAC, 0xDB, + 0xE8, 0x1A, 0x7A, 0x43, 0x40, 0xEF, 0x53, 0x43, + 0x5E, 0x7F, 0x4B, 0x1A, 0x50, 0x52, 0x3F, 0x8D, + 0x28, 0x3D, 0xCF, 0x85, 0x1D, 0x69, 0x6E, 0x60, + 0xF2, 0xDE, 0x74, 0x56, 0x18, 0x1B, 0x84, 0x10, + 0xD4, 0x62, 0xBA, 0x60, 0x50, 0xF0, 0x61, 0xF2, + 0x1C, 0x78, 0x7F, 0xC1, 0x24, 0x34, 0xAF, 0x58, + 0xBF, 0x2C, 0x59, 0xCA, 0x90, 0x77, 0xF3, 0xB0, + 0x5B, 0x4A, 0xDF, 0x89, 0xCE, 0x2C, 0x2F, 0xFC, + 0x67, 0xF0, 0xE3, 0x45, 0xE8, 0xB3, 0xB3, 0x75, + 0xA0, 0x95, 0x71, 0xA1, 0x29, 0x39, 0x94, 0xCA, + 0x45, 0x2F, 0xBD, 0xCB, 0x10, 0xB6, 0xBE, 0x9F, + 0x8E, 0xF9, 0xB2, 0x01, 0x0A, 0x5A, 0x0A, 0xB7, + 0x6B, 0x9D, 0x70, 0x8E, 0x4B, 0xD6, 0x2F, 0xCD, + 0x2E, 0x40, 0x48, 0x75, 0xE9, 0xE2, 0x21, 0x45, + 0x0B, 0xC9, 0xB6, 0xB5, 0x66, 0xBC, 0x9A, 0x59, + 0x5A, 0x7F, 0x6A, 0x0A, 0xD9, 0x0A, 0xC5, 0xD7, + 0x3D, 0x75, 0x98, 0xFB, 0x4C, 0xAA, 0x46, 0x7E, + 0xBD, 0xC4, 0x28, 0xD2, 0x41, 0x77, 0x2E, 0x38, + 0x58, 0x6B, 0x3F, 0x5A, 0x51, 0x75, 0x32, 0xF0, + 0xB3, 0x01, 0xCA, 0xBF, 0x2A, 0x5F, 0xDD, 0xD4, + 0x98, 0x5E, 0x56, 0xC1, 0xD1, 0x25, 0x08, 0x22, + 0xF9, 0xE1, 0x83, 0x4B, 0x2C, 0x7F, 0xC1, 0x2C, + 0xA9, 0xE3, 0xFD, 0xA7, 0xCC, 0x05, 0x0E, 0x23, + 0x6C, 0xE0, 0x20, 0xB3, 0xE8, 0x37, 0x65, 0xA1, + 0x1F, 0x9A, 0xE1, 0x57, 0xAD, 0x2D, 0x07, 0xD1, + 0xEA, 0x4E, 0x9F, 0xBB, 0xF3, 0x86, 0xC8, 0x3F, + 0xEF, 0x54, 0x31, 0x97, 0x46, 0xE5, 0xF9, 0x97, + 0xD3, 0x5B, 0xE9, 0xF7, 0x3B, 0x99, 0x77, 0x2D, + 0xA9, 0x70, 0x54, 0xFF, 0x07, 0x30, 0x13, 0x14, + 0x3F, 0xF9, 0xE5, 0xB4, 0x7C, 0x61, 0x96, 0x6D, + 0x85, 0x25, 0xF1, 0x72, 0x65, 0xF4, 0x8D, 0x08, + 0xFF, 0xEA, 0xB1, 0x6E, 0xEA, 0x5C, 0x43, 0xBF, + 0xD0, 0x8D, 0x25, 0x91, 0xF9, 0xA4, 0x02, 0x93, + 0x24, 0xCD, 0xDC, 0x83, 0xA8, 0x40, 0xB2, 0xC1, + 0x36, 0xB7, 0xCE, 0x99, 0xAF, 0x3A, 0x66, 0xCB, + 0x30, 0x84, 0xE4, 0xE2, 0xCA, 0x6F, 0x44, 0xAC, + 0x5C, 0xEA, 0xF7, 0xA1, 0x15, 0x7B, 0xE2, 0x67, + 0x3D, 0xF6, 0x88, 0xB4, 0x3B, 0xD5, 0x1B, 0x9A, + 0x84, 0x44, 0xCE, 0x19, 0x4E, 0x3C, 0xA7, 0xF2, + 0x42, 0xAA, 0x47, 0xB9, 0x19, 0xC6, 0x09, 0xEB, + 0x00, 0xBD, 0xA9, 0x23, 0x6B, 0xCA, 0x15, 0x5E, + 0x79, 0xA4, 0x30, 0xBC, 0xF6, 0xD0, 0xC4, 0x82, + 0x23, 0xAF, 0x97, 0xB8, 0x25, 0xB8, 0xC5, 0x76, + 0x34, 0x72, 0x5B, 0xE6, 0x00, 0x0E, 0x77, 0x8E, + 0x22, 0x5E, 0x12, 0x27, 0x1A, 0x39, 0xB3, 0xF6, + 0x4B, 0x5B, 0xFE, 0xDD, 0x8D, 0x17, 0xE6, 0x73, + 0x1A, 0x34, 0xE5, 0xDE, 0xD5, 0x91, 0x1D, 0x29, + 0x8C, 0xFF, 0x6A, 0x20, 0x80, 0x9D, 0x18, 0x8F, + 0xB1, 0x00, 0xF3, 0xDE, 0x22, 0x78, 0xE7, 0x67, + 0x2B, 0xFF, 0xB1, 0x34, 0x48, 0x50, 0xB0, 0x9E, + 0x4A, 0x95, 0x5D, 0x0B, 0xEE, 0xCF, 0x89, 0xEA, + 0x8C, 0xC5, 0x85, 0xC2, 0x40, 0x0C, 0xB0, 0x8F, + 0x09, 0xFC, 0x94, 0x7A, 0x60, 0xCB, 0xF1, 0x59, + 0x6F, 0x2C, 0x3E, 0xAB, 0x67, 0xDF, 0x14, 0xEB, + 0xF7, 0xB1, 0xC5, 0x69, 0x5E, 0xCC, 0x63, 0xA4, + 0x0D, 0x38, 0x73, 0xFD, 0x47, 0xA7, 0xB3, 0x40, + 0x01, 0x15, 0xC4, 0x05, 0x74, 0x46, 0x9D, 0x21, + 0x5B, 0xCE, 0x06, 0x79, 0xED, 0x5C, 0xF9, 0xE3, + 0x74, 0xE4, 0x73, 0xB4, 0x42, 0x7D, 0xE4, 0x98, + 0x58, 0x04, 0xDD, 0x75, 0x15, 0x1D, 0x72, 0xEE, + 0x36, 0x7A, 0x3F, 0x06, 0x6E, 0x64, 0x1B, 0x7F, + 0x5C, 0xF2, 0x8A, 0x67, 0x21, 0x5B, 0x74, 0xDD, + 0x80, 0xEB, 0x3F, 0xC0, 0x2E, 0x12, 0xA3, 0x08, + }, + .rlen = 512, + } +}; + /* * Compression stuff. */ diff --git a/include/linux/crypto.h b/include/linux/crypto.h index fc32694..fdfc6c8 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h @@ -214,6 +214,10 @@ struct cipher_alg { unsigned int keylen); void (*cia_encrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); void (*cia_decrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); + + unsigned int cia_ivsize; + void (*cia_setiv_crypt)(struct crypto_tfm *tfm, u8 *dst, + const u8 *iv, u32 nbytes); }; struct digest_alg {