Patch to support stream ciphers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 {

[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux