These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / crypto / testmgr.h
index 62e2485..da0a8fd 100644 (file)
@@ -46,15 +46,34 @@ struct hash_testvec {
        unsigned char ksize;
 };
 
+/*
+ * cipher_testvec:     structure to describe a cipher test
+ * @key:       A pointer to a key used by the test
+ * @klen:      The length of @key
+ * @iv:                A pointer to the IV used by the test
+ * @input:     A pointer to data used as input
+ * @ilen       The length of data in @input
+ * @result:    A pointer to what the test need to produce
+ * @rlen:      The length of data in @result
+ * @fail:      If set to one, the test need to fail
+ * @wk:                Does the test need CRYPTO_TFM_REQ_WEAK_KEY
+ *             ( e.g. test needs to fail due to a weak key )
+ * @np:        numbers of SG to distribute data in (from 1 to MAX_TAP)
+ * @tap:       How to distribute data in @np SGs
+ * @also_non_np:       if set to 1, the test will be also done without
+ *                     splitting data in @np SGs
+ */
+
 struct cipher_testvec {
        char *key;
        char *iv;
+       char *iv_out;
        char *input;
        char *result;
        unsigned short tap[MAX_TAP];
        int np;
        unsigned char also_non_np;
-       unsigned char fail;
+       bool fail;
        unsigned char wk; /* weak key flag */
        unsigned char klen;
        unsigned short ilen;
@@ -71,7 +90,7 @@ struct aead_testvec {
        unsigned char atap[MAX_TAP];
        int np;
        int anp;
-       unsigned char fail;
+       bool fail;
        unsigned char novrfy;   /* ccm dec verification failure expected */
        unsigned char wk; /* weak key flag */
        unsigned char klen;
@@ -107,8 +126,213 @@ struct drbg_testvec {
        size_t expectedlen;
 };
 
+struct akcipher_testvec {
+       unsigned char *key;
+       unsigned char *m;
+       unsigned char *c;
+       unsigned int key_len;
+       unsigned int m_size;
+       unsigned int c_size;
+       bool public_key_vec;
+};
+
 static char zeroed_string[48];
 
+/*
+ * RSA test vectors. Borrowed from openSSL.
+ */
+#ifdef CONFIG_CRYPTO_FIPS
+#define RSA_TEST_VECTORS       2
+#else
+#define RSA_TEST_VECTORS       4
+#endif
+static struct akcipher_testvec rsa_tv_template[] = {
+       {
+#ifndef CONFIG_CRYPTO_FIPS
+       .key =
+       "\x30\x81\x9A" /* sequence of 154 bytes */
+       "\x02\x01\x01" /* version - integer of 1 byte */
+       "\x02\x41" /* modulus - integer of 65 bytes */
+       "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F"
+       "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5"
+       "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93"
+       "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1"
+       "\xF5"
+       "\x02\x01\x11" /* public key - integer of 1 byte */
+       "\x02\x40" /* private key - integer of 64 bytes */
+       "\x0A\x03\x37\x48\x62\x64\x87\x69\x5F\x5F\x30\xBC\x38\xB9\x8B\x44"
+       "\xC2\xCD\x2D\xFF\x43\x40\x98\xCD\x20\xD8\xA1\x38\xD0\x90\xBF\x64"
+       "\x79\x7C\x3F\xA7\xA2\xCD\xCB\x3C\xD1\xE0\xBD\xBA\x26\x54\xB4\xF9"
+       "\xDF\x8E\x8A\xE5\x9D\x73\x3D\x9F\x33\xB3\x01\x62\x4A\xFD\x1D\x51"
+       "\x02\x01\x00" /* prime1 - integer of 1 byte */
+       "\x02\x01\x00" /* prime2 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent1 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent2 - integer of 1 byte */
+       "\x02\x01\x00", /* coefficient - integer of 1 byte */
+       .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a",
+       .c =
+       "\x63\x1c\xcd\x7b\xe1\x7e\xe4\xde\xc9\xa8\x89\xa1\x74\xcb\x3c\x63"
+       "\x7d\x24\xec\x83\xc3\x15\xe4\x7f\x73\x05\x34\xd1\xec\x22\xbb\x8a"
+       "\x5e\x32\x39\x6d\xc1\x1d\x7d\x50\x3b\x9f\x7a\xad\xf0\x2e\x25\x53"
+       "\x9f\x6e\xbd\x4c\x55\x84\x0c\x9b\xcf\x1a\x4b\x51\x1e\x9e\x0c\x06",
+       .key_len = 157,
+       .m_size = 8,
+       .c_size = 64,
+       }, {
+       .key =
+       "\x30\x82\x01\x1D" /* sequence of 285 bytes */
+       "\x02\x01\x01" /* version - integer of 1 byte */
+       "\x02\x81\x81" /* modulus - integer of 129 bytes */
+       "\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71"
+       "\xF7\x36\x8D\x07\xEE\xD4\x10\x43\xA4\x40\xD6\xB6\xF0\x74\x54\xF5"
+       "\x1F\xB8\xDF\xBA\xAF\x03\x5C\x02\xAB\x61\xEA\x48\xCE\xEB\x6F\xCD"
+       "\x48\x76\xED\x52\x0D\x60\xE1\xEC\x46\x19\x71\x9D\x8A\x5B\x8B\x80"
+       "\x7F\xAF\xB8\xE0\xA3\xDF\xC7\x37\x72\x3E\xE6\xB4\xB7\xD9\x3A\x25"
+       "\x84\xEE\x6A\x64\x9D\x06\x09\x53\x74\x88\x34\xB2\x45\x45\x98\x39"
+       "\x4E\xE0\xAA\xB1\x2D\x7B\x61\xA5\x1F\x52\x7A\x9A\x41\xF6\xC1\x68"
+       "\x7F\xE2\x53\x72\x98\xCA\x2A\x8F\x59\x46\xF8\xE5\xFD\x09\x1D\xBD"
+       "\xCB"
+       "\x02\x01\x11" /* public key - integer of 1 byte */
+       "\x02\x81\x81"  /* private key - integer of 129 bytes */
+       "\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD"
+       "\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41"
+       "\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69"
+       "\xD6\x87\x0D\xA2\xC0\x82\xA9\x39\xE3\x7F\xDC\xB8\x2E\xC9\x3E\xDA"
+       "\xC9\x7F\xF3\xAD\x59\x50\xAC\xCF\xBC\x11\x1C\x76\xF1\xA9\x52\x94"
+       "\x44\xE5\x6A\xAF\x68\xC5\x6C\x09\x2C\xD3\x8D\xC3\xBE\xF5\xD2\x0A"
+       "\x93\x99\x26\xED\x4F\x74\xA1\x3E\xDD\xFB\xE1\xA1\xCE\xCC\x48\x94"
+       "\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3"
+       "\xC1"
+       "\x02\x01\x00" /* prime1 - integer of 1 byte */
+       "\x02\x01\x00" /* prime2 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent1 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent2 - integer of 1 byte */
+       "\x02\x01\x00", /* coefficient - integer of 1 byte */
+       .key_len = 289,
+       .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a",
+       .c =
+       "\x74\x1b\x55\xac\x47\xb5\x08\x0a\x6e\x2b\x2d\xf7\x94\xb8\x8a\x95"
+       "\xed\xa3\x6b\xc9\x29\xee\xb2\x2c\x80\xc3\x39\x3b\x8c\x62\x45\x72"
+       "\xc2\x7f\x74\x81\x91\x68\x44\x48\x5a\xdc\xa0\x7e\xa7\x0b\x05\x7f"
+       "\x0e\xa0\x6c\xe5\x8f\x19\x4d\xce\x98\x47\x5f\xbd\x5f\xfe\xe5\x34"
+       "\x59\x89\xaf\xf0\xba\x44\xd7\xf1\x1a\x50\x72\xef\x5e\x4a\xb6\xb7"
+       "\x54\x34\xd1\xc4\x83\x09\xdf\x0f\x91\x5f\x7d\x91\x70\x2f\xd4\x13"
+       "\xcc\x5e\xa4\x6c\xc3\x4d\x28\xef\xda\xaf\xec\x14\x92\xfc\xa3\x75"
+       "\x13\xb4\xc1\xa1\x11\xfc\x40\x2f\x4c\x9d\xdf\x16\x76\x11\x20\x6b",
+       .m_size = 8,
+       .c_size = 128,
+       }, {
+#endif
+       .key =
+       "\x30\x82\x02\x1F" /* sequence of 543 bytes */
+       "\x02\x01\x01" /* version - integer of 1 byte */
+       "\x02\x82\x01\x00" /* modulus - integer of 256 bytes */
+       "\xDB\x10\x1A\xC2\xA3\xF1\xDC\xFF\x13\x6B\xED\x44\xDF\xF0\x02\x6D"
+       "\x13\xC7\x88\xDA\x70\x6B\x54\xF1\xE8\x27\xDC\xC3\x0F\x99\x6A\xFA"
+       "\xC6\x67\xFF\x1D\x1E\x3C\x1D\xC1\xB5\x5F\x6C\xC0\xB2\x07\x3A\x6D"
+       "\x41\xE4\x25\x99\xAC\xFC\xD2\x0F\x02\xD3\xD1\x54\x06\x1A\x51\x77"
+       "\xBD\xB6\xBF\xEA\xA7\x5C\x06\xA9\x5D\x69\x84\x45\xD7\xF5\x05\xBA"
+       "\x47\xF0\x1B\xD7\x2B\x24\xEC\xCB\x9B\x1B\x10\x8D\x81\xA0\xBE\xB1"
+       "\x8C\x33\xE4\x36\xB8\x43\xEB\x19\x2A\x81\x8D\xDE\x81\x0A\x99\x48"
+       "\xB6\xF6\xBC\xCD\x49\x34\x3A\x8F\x26\x94\xE3\x28\x82\x1A\x7C\x8F"
+       "\x59\x9F\x45\xE8\x5D\x1A\x45\x76\x04\x56\x05\xA1\xD0\x1B\x8C\x77"
+       "\x6D\xAF\x53\xFA\x71\xE2\x67\xE0\x9A\xFE\x03\xA9\x85\xD2\xC9\xAA"
+       "\xBA\x2A\xBC\xF4\xA0\x08\xF5\x13\x98\x13\x5D\xF0\xD9\x33\x34\x2A"
+       "\x61\xC3\x89\x55\xF0\xAE\x1A\x9C\x22\xEE\x19\x05\x8D\x32\xFE\xEC"
+       "\x9C\x84\xBA\xB7\xF9\x6C\x3A\x4F\x07\xFC\x45\xEB\x12\xE5\x7B\xFD"
+       "\x55\xE6\x29\x69\xD1\xC2\xE8\xB9\x78\x59\xF6\x79\x10\xC6\x4E\xEB"
+       "\x6A\x5E\xB9\x9A\xC7\xC4\x5B\x63\xDA\xA3\x3F\x5E\x92\x7A\x81\x5E"
+       "\xD6\xB0\xE2\x62\x8F\x74\x26\xC2\x0C\xD3\x9A\x17\x47\xE6\x8E\xAB"
+       "\x02\x03\x01\x00\x01" /* public key - integer of 3 bytes */
+       "\x02\x82\x01\x00" /* private key - integer of 256 bytes */
+       "\x52\x41\xF4\xDA\x7B\xB7\x59\x55\xCA\xD4\x2F\x0F\x3A\xCB\xA4\x0D"
+       "\x93\x6C\xCC\x9D\xC1\xB2\xFB\xFD\xAE\x40\x31\xAC\x69\x52\x21\x92"
+       "\xB3\x27\xDF\xEA\xEE\x2C\x82\xBB\xF7\x40\x32\xD5\x14\xC4\x94\x12"
+       "\xEC\xB8\x1F\xCA\x59\xE3\xC1\x78\xF3\x85\xD8\x47\xA5\xD7\x02\x1A"
+       "\x65\x79\x97\x0D\x24\xF4\xF0\x67\x6E\x75\x2D\xBF\x10\x3D\xA8\x7D"
+       "\xEF\x7F\x60\xE4\xE6\x05\x82\x89\x5D\xDF\xC6\xD2\x6C\x07\x91\x33"
+       "\x98\x42\xF0\x02\x00\x25\x38\xC5\x85\x69\x8A\x7D\x2F\x95\x6C\x43"
+       "\x9A\xB8\x81\xE2\xD0\x07\x35\xAA\x05\x41\xC9\x1E\xAF\xE4\x04\x3B"
+       "\x19\xB8\x73\xA2\xAC\x4B\x1E\x66\x48\xD8\x72\x1F\xAC\xF6\xCB\xBC"
+       "\x90\x09\xCA\xEC\x0C\xDC\xF9\x2C\xD7\xEB\xAE\xA3\xA4\x47\xD7\x33"
+       "\x2F\x8A\xCA\xBC\x5E\xF0\x77\xE4\x97\x98\x97\xC7\x10\x91\x7D\x2A"
+       "\xA6\xFF\x46\x83\x97\xDE\xE9\xE2\x17\x03\x06\x14\xE2\xD7\xB1\x1D"
+       "\x77\xAF\x51\x27\x5B\x5E\x69\xB8\x81\xE6\x11\xC5\x43\x23\x81\x04"
+       "\x62\xFF\xE9\x46\xB8\xD8\x44\xDB\xA5\xCC\x31\x54\x34\xCE\x3E\x82"
+       "\xD6\xBF\x7A\x0B\x64\x21\x6D\x88\x7E\x5B\x45\x12\x1E\x63\x8D\x49"
+       "\xA7\x1D\xD9\x1E\x06\xCD\xE8\xBA\x2C\x8C\x69\x32\xEA\xBE\x60\x71"
+       "\x02\x01\x00" /* prime1 - integer of 1 byte */
+       "\x02\x01\x00" /* prime2 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent1 - integer of 1 byte */
+       "\x02\x01\x00" /* exponent2 - integer of 1 byte */
+       "\x02\x01\x00", /* coefficient - integer of 1 byte */
+       .key_len = 547,
+       .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a",
+       .c =
+       "\xb2\x97\x76\xb4\xae\x3e\x38\x3c\x7e\x64\x1f\xcc\xa2\x7f\xf6\xbe"
+       "\xcf\x49\xbc\x48\xd3\x6c\x8f\x0a\x0e\xc1\x73\xbd\x7b\x55\x79\x36"
+       "\x0e\xa1\x87\x88\xb9\x2c\x90\xa6\x53\x5e\xe9\xef\xc4\xe2\x4d\xdd"
+       "\xf7\xa6\x69\x82\x3f\x56\xa4\x7b\xfb\x62\xe0\xae\xb8\xd3\x04\xb3"
+       "\xac\x5a\x15\x2a\xe3\x19\x9b\x03\x9a\x0b\x41\xda\x64\xec\x0a\x69"
+       "\xfc\xf2\x10\x92\xf3\xc1\xbf\x84\x7f\xfd\x2c\xae\xc8\xb5\xf6\x41"
+       "\x70\xc5\x47\x03\x8a\xf8\xff\x6f\x3f\xd2\x6f\x09\xb4\x22\xf3\x30"
+       "\xbe\xa9\x85\xcb\x9c\x8d\xf9\x8f\xeb\x32\x91\xa2\x25\x84\x8f\xf5"
+       "\xdc\xc7\x06\x9c\x2d\xe5\x11\x2c\x09\x09\x87\x09\xa9\xf6\x33\x73"
+       "\x90\xf1\x60\xf2\x65\xdd\x30\xa5\x66\xce\x62\x7b\xd0\xf8\x2d\x3d"
+       "\x19\x82\x77\xe3\x0a\x5f\x75\x2f\x8e\xb1\xe5\xe8\x91\x35\x1b\x3b"
+       "\x33\xb7\x66\x92\xd1\xf2\x8e\x6f\xe5\x75\x0c\xad\x36\xfb\x4e\xd0"
+       "\x66\x61\xbd\x49\xfe\xf4\x1a\xa2\x2b\x49\xfe\x03\x4c\x74\x47\x8d"
+       "\x9a\x66\xb2\x49\x46\x4d\x77\xea\x33\x4d\x6b\x3c\xb4\x49\x4a\xc6"
+       "\x7d\x3d\xb5\xb9\x56\x41\x15\x67\x0f\x94\x3c\x93\x65\x27\xe0\x21"
+       "\x5d\x59\xc3\x62\xd5\xa6\xda\x38\x26\x22\x5e\x34\x1c\x94\xaf\x98",
+       .m_size = 8,
+       .c_size = 256,
+       }, {
+       .key =
+       "\x30\x82\x01\x09" /* sequence of 265 bytes */
+       "\x02\x82\x01\x00" /* modulus - integer of 256 bytes */
+       "\xDB\x10\x1A\xC2\xA3\xF1\xDC\xFF\x13\x6B\xED\x44\xDF\xF0\x02\x6D"
+       "\x13\xC7\x88\xDA\x70\x6B\x54\xF1\xE8\x27\xDC\xC3\x0F\x99\x6A\xFA"
+       "\xC6\x67\xFF\x1D\x1E\x3C\x1D\xC1\xB5\x5F\x6C\xC0\xB2\x07\x3A\x6D"
+       "\x41\xE4\x25\x99\xAC\xFC\xD2\x0F\x02\xD3\xD1\x54\x06\x1A\x51\x77"
+       "\xBD\xB6\xBF\xEA\xA7\x5C\x06\xA9\x5D\x69\x84\x45\xD7\xF5\x05\xBA"
+       "\x47\xF0\x1B\xD7\x2B\x24\xEC\xCB\x9B\x1B\x10\x8D\x81\xA0\xBE\xB1"
+       "\x8C\x33\xE4\x36\xB8\x43\xEB\x19\x2A\x81\x8D\xDE\x81\x0A\x99\x48"
+       "\xB6\xF6\xBC\xCD\x49\x34\x3A\x8F\x26\x94\xE3\x28\x82\x1A\x7C\x8F"
+       "\x59\x9F\x45\xE8\x5D\x1A\x45\x76\x04\x56\x05\xA1\xD0\x1B\x8C\x77"
+       "\x6D\xAF\x53\xFA\x71\xE2\x67\xE0\x9A\xFE\x03\xA9\x85\xD2\xC9\xAA"
+       "\xBA\x2A\xBC\xF4\xA0\x08\xF5\x13\x98\x13\x5D\xF0\xD9\x33\x34\x2A"
+       "\x61\xC3\x89\x55\xF0\xAE\x1A\x9C\x22\xEE\x19\x05\x8D\x32\xFE\xEC"
+       "\x9C\x84\xBA\xB7\xF9\x6C\x3A\x4F\x07\xFC\x45\xEB\x12\xE5\x7B\xFD"
+       "\x55\xE6\x29\x69\xD1\xC2\xE8\xB9\x78\x59\xF6\x79\x10\xC6\x4E\xEB"
+       "\x6A\x5E\xB9\x9A\xC7\xC4\x5B\x63\xDA\xA3\x3F\x5E\x92\x7A\x81\x5E"
+       "\xD6\xB0\xE2\x62\x8F\x74\x26\xC2\x0C\xD3\x9A\x17\x47\xE6\x8E\xAB"
+       "\x02\x03\x01\x00\x01", /* public key - integer of 3 bytes */
+       .key_len = 269,
+       .m = "\x54\x85\x9b\x34\x2c\x49\xea\x2a",
+       .c =
+       "\xb2\x97\x76\xb4\xae\x3e\x38\x3c\x7e\x64\x1f\xcc\xa2\x7f\xf6\xbe"
+       "\xcf\x49\xbc\x48\xd3\x6c\x8f\x0a\x0e\xc1\x73\xbd\x7b\x55\x79\x36"
+       "\x0e\xa1\x87\x88\xb9\x2c\x90\xa6\x53\x5e\xe9\xef\xc4\xe2\x4d\xdd"
+       "\xf7\xa6\x69\x82\x3f\x56\xa4\x7b\xfb\x62\xe0\xae\xb8\xd3\x04\xb3"
+       "\xac\x5a\x15\x2a\xe3\x19\x9b\x03\x9a\x0b\x41\xda\x64\xec\x0a\x69"
+       "\xfc\xf2\x10\x92\xf3\xc1\xbf\x84\x7f\xfd\x2c\xae\xc8\xb5\xf6\x41"
+       "\x70\xc5\x47\x03\x8a\xf8\xff\x6f\x3f\xd2\x6f\x09\xb4\x22\xf3\x30"
+       "\xbe\xa9\x85\xcb\x9c\x8d\xf9\x8f\xeb\x32\x91\xa2\x25\x84\x8f\xf5"
+       "\xdc\xc7\x06\x9c\x2d\xe5\x11\x2c\x09\x09\x87\x09\xa9\xf6\x33\x73"
+       "\x90\xf1\x60\xf2\x65\xdd\x30\xa5\x66\xce\x62\x7b\xd0\xf8\x2d\x3d"
+       "\x19\x82\x77\xe3\x0a\x5f\x75\x2f\x8e\xb1\xe5\xe8\x91\x35\x1b\x3b"
+       "\x33\xb7\x66\x92\xd1\xf2\x8e\x6f\xe5\x75\x0c\xad\x36\xfb\x4e\xd0"
+       "\x66\x61\xbd\x49\xfe\xf4\x1a\xa2\x2b\x49\xfe\x03\x4c\x74\x47\x8d"
+       "\x9a\x66\xb2\x49\x46\x4d\x77\xea\x33\x4d\x6b\x3c\xb4\x49\x4a\xc6"
+       "\x7d\x3d\xb5\xb9\x56\x41\x15\x67\x0f\x94\x3c\x93\x65\x27\xe0\x21"
+       "\x5d\x59\xc3\x62\xd5\xa6\xda\x38\x26\x22\x5e\x34\x1c\x94\xaf\x98",
+       .m_size = 8,
+       .c_size = 256,
+       .public_key_vec = true,
+       }
+};
+
 /*
  * MD4 test vectors from RFC1320
  */
@@ -1822,7 +2046,7 @@ static struct hash_testvec tgr128_tv_template[] = {
        },
 };
 
-#define GHASH_TEST_VECTORS 5
+#define GHASH_TEST_VECTORS 6
 
 static struct hash_testvec ghash_tv_template[] =
 {
@@ -1875,6 +2099,63 @@ static struct hash_testvec ghash_tv_template[] =
                .psize  = 20,
                .digest = "\xf8\x94\x87\x2a\x4b\x63\x99\x28"
                          "\x23\xf7\x93\xf7\x19\xf5\x96\xd9",
+       }, {
+               .key    = "\x0a\x1b\x2c\x3d\x4e\x5f\x64\x71"
+                       "\x82\x93\xa4\xb5\xc6\xd7\xe8\xf9",
+               .ksize  = 16,
+               .plaintext = "\x56\x6f\x72\x20\x6c\x61\x75\x74"
+                       "\x65\x72\x20\x4c\x61\x75\x73\x63"
+                       "\x68\x65\x6e\x20\x75\x6e\x64\x20"
+                       "\x53\x74\x61\x75\x6e\x65\x6e\x20"
+                       "\x73\x65\x69\x20\x73\x74\x69\x6c"
+                       "\x6c\x2c\x0a\x64\x75\x20\x6d\x65"
+                       "\x69\x6e\x20\x74\x69\x65\x66\x74"
+                       "\x69\x65\x66\x65\x73\x20\x4c\x65"
+                       "\x62\x65\x6e\x3b\x0a\x64\x61\x73"
+                       "\x73\x20\x64\x75\x20\x77\x65\x69"
+                       "\xc3\x9f\x74\x20\x77\x61\x73\x20"
+                       "\x64\x65\x72\x20\x57\x69\x6e\x64"
+                       "\x20\x64\x69\x72\x20\x77\x69\x6c"
+                       "\x6c\x2c\x0a\x65\x68\x20\x6e\x6f"
+                       "\x63\x68\x20\x64\x69\x65\x20\x42"
+                       "\x69\x72\x6b\x65\x6e\x20\x62\x65"
+                       "\x62\x65\x6e\x2e\x0a\x0a\x55\x6e"
+                       "\x64\x20\x77\x65\x6e\x6e\x20\x64"
+                       "\x69\x72\x20\x65\x69\x6e\x6d\x61"
+                       "\x6c\x20\x64\x61\x73\x20\x53\x63"
+                       "\x68\x77\x65\x69\x67\x65\x6e\x20"
+                       "\x73\x70\x72\x61\x63\x68\x2c\x0a"
+                       "\x6c\x61\x73\x73\x20\x64\x65\x69"
+                       "\x6e\x65\x20\x53\x69\x6e\x6e\x65"
+                       "\x20\x62\x65\x73\x69\x65\x67\x65"
+                       "\x6e\x2e\x0a\x4a\x65\x64\x65\x6d"
+                       "\x20\x48\x61\x75\x63\x68\x65\x20"
+                       "\x67\x69\x62\x74\x20\x64\x69\x63"
+                       "\x68\x2c\x20\x67\x69\x62\x20\x6e"
+                       "\x61\x63\x68\x2c\x0a\x65\x72\x20"
+                       "\x77\x69\x72\x64\x20\x64\x69\x63"
+                       "\x68\x20\x6c\x69\x65\x62\x65\x6e"
+                       "\x20\x75\x6e\x64\x20\x77\x69\x65"
+                       "\x67\x65\x6e\x2e\x0a\x0a\x55\x6e"
+                       "\x64\x20\x64\x61\x6e\x6e\x20\x6d"
+                       "\x65\x69\x6e\x65\x20\x53\x65\x65"
+                       "\x6c\x65\x20\x73\x65\x69\x74\x20"
+                       "\x77\x65\x69\x74\x2c\x20\x73\x65"
+                       "\x69\x20\x77\x65\x69\x74\x2c\x0a"
+                       "\x64\x61\x73\x73\x20\x64\x69\x72"
+                       "\x20\x64\x61\x73\x20\x4c\x65\x62"
+                       "\x65\x6e\x20\x67\x65\x6c\x69\x6e"
+                       "\x67\x65\x2c\x0a\x62\x72\x65\x69"
+                       "\x74\x65\x20\x64\x69\x63\x68\x20"
+                       "\x77\x69\x65\x20\x65\x69\x6e\x20"
+                       "\x46\x65\x69\x65\x72\x6b\x6c\x65"
+                       "\x69\x64\x0a\xc3\xbc\x62\x65\x72"
+                       "\x20\x64\x69\x65\x20\x73\x69\x6e"
+                       "\x6e\x65\x6e\x64\x65\x6e\x20\x44"
+                       "\x69\x6e\x67\x65\x2e\x2e\x2e\x0a",
+               .psize  = 400,
+               .digest = "\xad\xb1\xc1\xe9\x56\x70\x31\x1d"
+                       "\xbb\x5b\xdf\x5e\x70\x72\x1a\x57",
        },
 };
 
@@ -2968,6 +3249,254 @@ static struct hash_testvec hmac_sha512_tv_template[] = {
        },
 };
 
+/*
+ * Poly1305 test vectors from RFC7539 A.3.
+ */
+
+#define POLY1305_TEST_VECTORS  11
+
+static struct hash_testvec poly1305_tv_template[] = {
+       { /* Test Vector #1 */
+               .plaintext      = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .psize          = 96,
+               .digest         = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #2 */
+               .plaintext      = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x36\xe5\xf6\xb5\xc5\xe0\x60\x70"
+                                 "\xf0\xef\xca\x96\x22\x7a\x86\x3e"
+                                 "\x41\x6e\x79\x20\x73\x75\x62\x6d"
+                                 "\x69\x73\x73\x69\x6f\x6e\x20\x74"
+                                 "\x6f\x20\x74\x68\x65\x20\x49\x45"
+                                 "\x54\x46\x20\x69\x6e\x74\x65\x6e"
+                                 "\x64\x65\x64\x20\x62\x79\x20\x74"
+                                 "\x68\x65\x20\x43\x6f\x6e\x74\x72"
+                                 "\x69\x62\x75\x74\x6f\x72\x20\x66"
+                                 "\x6f\x72\x20\x70\x75\x62\x6c\x69"
+                                 "\x63\x61\x74\x69\x6f\x6e\x20\x61"
+                                 "\x73\x20\x61\x6c\x6c\x20\x6f\x72"
+                                 "\x20\x70\x61\x72\x74\x20\x6f\x66"
+                                 "\x20\x61\x6e\x20\x49\x45\x54\x46"
+                                 "\x20\x49\x6e\x74\x65\x72\x6e\x65"
+                                 "\x74\x2d\x44\x72\x61\x66\x74\x20"
+                                 "\x6f\x72\x20\x52\x46\x43\x20\x61"
+                                 "\x6e\x64\x20\x61\x6e\x79\x20\x73"
+                                 "\x74\x61\x74\x65\x6d\x65\x6e\x74"
+                                 "\x20\x6d\x61\x64\x65\x20\x77\x69"
+                                 "\x74\x68\x69\x6e\x20\x74\x68\x65"
+                                 "\x20\x63\x6f\x6e\x74\x65\x78\x74"
+                                 "\x20\x6f\x66\x20\x61\x6e\x20\x49"
+                                 "\x45\x54\x46\x20\x61\x63\x74\x69"
+                                 "\x76\x69\x74\x79\x20\x69\x73\x20"
+                                 "\x63\x6f\x6e\x73\x69\x64\x65\x72"
+                                 "\x65\x64\x20\x61\x6e\x20\x22\x49"
+                                 "\x45\x54\x46\x20\x43\x6f\x6e\x74"
+                                 "\x72\x69\x62\x75\x74\x69\x6f\x6e"
+                                 "\x22\x2e\x20\x53\x75\x63\x68\x20"
+                                 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                                 "\x74\x73\x20\x69\x6e\x63\x6c\x75"
+                                 "\x64\x65\x20\x6f\x72\x61\x6c\x20"
+                                 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                                 "\x74\x73\x20\x69\x6e\x20\x49\x45"
+                                 "\x54\x46\x20\x73\x65\x73\x73\x69"
+                                 "\x6f\x6e\x73\x2c\x20\x61\x73\x20"
+                                 "\x77\x65\x6c\x6c\x20\x61\x73\x20"
+                                 "\x77\x72\x69\x74\x74\x65\x6e\x20"
+                                 "\x61\x6e\x64\x20\x65\x6c\x65\x63"
+                                 "\x74\x72\x6f\x6e\x69\x63\x20\x63"
+                                 "\x6f\x6d\x6d\x75\x6e\x69\x63\x61"
+                                 "\x74\x69\x6f\x6e\x73\x20\x6d\x61"
+                                 "\x64\x65\x20\x61\x74\x20\x61\x6e"
+                                 "\x79\x20\x74\x69\x6d\x65\x20\x6f"
+                                 "\x72\x20\x70\x6c\x61\x63\x65\x2c"
+                                 "\x20\x77\x68\x69\x63\x68\x20\x61"
+                                 "\x72\x65\x20\x61\x64\x64\x72\x65"
+                                 "\x73\x73\x65\x64\x20\x74\x6f",
+               .psize          = 407,
+               .digest         = "\x36\xe5\xf6\xb5\xc5\xe0\x60\x70"
+                                 "\xf0\xef\xca\x96\x22\x7a\x86\x3e",
+       }, { /* Test Vector #3 */
+               .plaintext      = "\x36\xe5\xf6\xb5\xc5\xe0\x60\x70"
+                                 "\xf0\xef\xca\x96\x22\x7a\x86\x3e"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x41\x6e\x79\x20\x73\x75\x62\x6d"
+                                 "\x69\x73\x73\x69\x6f\x6e\x20\x74"
+                                 "\x6f\x20\x74\x68\x65\x20\x49\x45"
+                                 "\x54\x46\x20\x69\x6e\x74\x65\x6e"
+                                 "\x64\x65\x64\x20\x62\x79\x20\x74"
+                                 "\x68\x65\x20\x43\x6f\x6e\x74\x72"
+                                 "\x69\x62\x75\x74\x6f\x72\x20\x66"
+                                 "\x6f\x72\x20\x70\x75\x62\x6c\x69"
+                                 "\x63\x61\x74\x69\x6f\x6e\x20\x61"
+                                 "\x73\x20\x61\x6c\x6c\x20\x6f\x72"
+                                 "\x20\x70\x61\x72\x74\x20\x6f\x66"
+                                 "\x20\x61\x6e\x20\x49\x45\x54\x46"
+                                 "\x20\x49\x6e\x74\x65\x72\x6e\x65"
+                                 "\x74\x2d\x44\x72\x61\x66\x74\x20"
+                                 "\x6f\x72\x20\x52\x46\x43\x20\x61"
+                                 "\x6e\x64\x20\x61\x6e\x79\x20\x73"
+                                 "\x74\x61\x74\x65\x6d\x65\x6e\x74"
+                                 "\x20\x6d\x61\x64\x65\x20\x77\x69"
+                                 "\x74\x68\x69\x6e\x20\x74\x68\x65"
+                                 "\x20\x63\x6f\x6e\x74\x65\x78\x74"
+                                 "\x20\x6f\x66\x20\x61\x6e\x20\x49"
+                                 "\x45\x54\x46\x20\x61\x63\x74\x69"
+                                 "\x76\x69\x74\x79\x20\x69\x73\x20"
+                                 "\x63\x6f\x6e\x73\x69\x64\x65\x72"
+                                 "\x65\x64\x20\x61\x6e\x20\x22\x49"
+                                 "\x45\x54\x46\x20\x43\x6f\x6e\x74"
+                                 "\x72\x69\x62\x75\x74\x69\x6f\x6e"
+                                 "\x22\x2e\x20\x53\x75\x63\x68\x20"
+                                 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                                 "\x74\x73\x20\x69\x6e\x63\x6c\x75"
+                                 "\x64\x65\x20\x6f\x72\x61\x6c\x20"
+                                 "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                                 "\x74\x73\x20\x69\x6e\x20\x49\x45"
+                                 "\x54\x46\x20\x73\x65\x73\x73\x69"
+                                 "\x6f\x6e\x73\x2c\x20\x61\x73\x20"
+                                 "\x77\x65\x6c\x6c\x20\x61\x73\x20"
+                                 "\x77\x72\x69\x74\x74\x65\x6e\x20"
+                                 "\x61\x6e\x64\x20\x65\x6c\x65\x63"
+                                 "\x74\x72\x6f\x6e\x69\x63\x20\x63"
+                                 "\x6f\x6d\x6d\x75\x6e\x69\x63\x61"
+                                 "\x74\x69\x6f\x6e\x73\x20\x6d\x61"
+                                 "\x64\x65\x20\x61\x74\x20\x61\x6e"
+                                 "\x79\x20\x74\x69\x6d\x65\x20\x6f"
+                                 "\x72\x20\x70\x6c\x61\x63\x65\x2c"
+                                 "\x20\x77\x68\x69\x63\x68\x20\x61"
+                                 "\x72\x65\x20\x61\x64\x64\x72\x65"
+                                 "\x73\x73\x65\x64\x20\x74\x6f",
+               .psize          = 407,
+               .digest         = "\xf3\x47\x7e\x7c\xd9\x54\x17\xaf"
+                                 "\x89\xa6\xb8\x79\x4c\x31\x0c\xf0",
+       }, { /* Test Vector #4 */
+               .plaintext      = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                                 "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                                 "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                                 "\x9d\xca\x5c\xbc\x20\x70\x75\xc0"
+                                 "\x27\x54\x77\x61\x73\x20\x62\x72"
+                                 "\x69\x6c\x6c\x69\x67\x2c\x20\x61"
+                                 "\x6e\x64\x20\x74\x68\x65\x20\x73"
+                                 "\x6c\x69\x74\x68\x79\x20\x74\x6f"
+                                 "\x76\x65\x73\x0a\x44\x69\x64\x20"
+                                 "\x67\x79\x72\x65\x20\x61\x6e\x64"
+                                 "\x20\x67\x69\x6d\x62\x6c\x65\x20"
+                                 "\x69\x6e\x20\x74\x68\x65\x20\x77"
+                                 "\x61\x62\x65\x3a\x0a\x41\x6c\x6c"
+                                 "\x20\x6d\x69\x6d\x73\x79\x20\x77"
+                                 "\x65\x72\x65\x20\x74\x68\x65\x20"
+                                 "\x62\x6f\x72\x6f\x67\x6f\x76\x65"
+                                 "\x73\x2c\x0a\x41\x6e\x64\x20\x74"
+                                 "\x68\x65\x20\x6d\x6f\x6d\x65\x20"
+                                 "\x72\x61\x74\x68\x73\x20\x6f\x75"
+                                 "\x74\x67\x72\x61\x62\x65\x2e",
+               .psize          = 159,
+               .digest         = "\x45\x41\x66\x9a\x7e\xaa\xee\x61"
+                                 "\xe7\x08\xdc\x7c\xbc\xc5\xeb\x62",
+       }, { /* Test Vector #5 */
+               .plaintext      = "\x02\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .psize          = 48,
+               .digest         = "\x03\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #6 */
+               .plaintext      = "\x02\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\x02\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .psize          = 48,
+               .digest         = "\x03\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #7 */
+               .plaintext      = "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xf0\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\x11\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .psize          = 80,
+               .digest         = "\x05\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #8 */
+               .plaintext      = "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xfb\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
+                                 "\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe"
+                                 "\x01\x01\x01\x01\x01\x01\x01\x01"
+                                 "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .psize          = 80,
+               .digest         = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #9 */
+               .plaintext      = "\x02\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xfd\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .psize          = 48,
+               .digest         = "\xfa\xff\xff\xff\xff\xff\xff\xff"
+                                 "\xff\xff\xff\xff\xff\xff\xff\xff",
+       }, { /* Test Vector #10 */
+               .plaintext      = "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x04\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xe3\x35\x94\xd7\x50\x5e\x43\xb9"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x33\x94\xd7\x50\x5e\x43\x79\xcd"
+                                 "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .psize          = 96,
+               .digest         = "\x14\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x55\x00\x00\x00\x00\x00\x00\x00",
+       }, { /* Test Vector #11 */
+               .plaintext      = "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x04\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\xe3\x35\x94\xd7\x50\x5e\x43\xb9"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x33\x94\xd7\x50\x5e\x43\x79\xcd"
+                                 "\x01\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .psize          = 80,
+               .digest         = "\x13\x00\x00\x00\x00\x00\x00\x00"
+                                 "\x00\x00\x00\x00\x00\x00\x00\x00",
+       },
+};
+
 /*
  * DES test vectors.
  */
@@ -3018,7 +3547,7 @@ static struct cipher_testvec des_enc_tv_template[] = {
                          "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90",
                .rlen   = 24,
        }, { /* Weak key */
-               .fail   = 1,
+               .fail   = true,
                .wk     = 1,
                .key    = "\x01\x01\x01\x01\x01\x01\x01\x01",
                .klen   = 8,
@@ -13629,8 +14158,8 @@ static struct cipher_testvec cast6_xts_dec_tv_template[] = {
 #define AES_CTR_3686_DEC_TEST_VECTORS 6
 #define AES_GCM_ENC_TEST_VECTORS 9
 #define AES_GCM_DEC_TEST_VECTORS 8
-#define AES_GCM_4106_ENC_TEST_VECTORS 7
-#define AES_GCM_4106_DEC_TEST_VECTORS 7
+#define AES_GCM_4106_ENC_TEST_VECTORS 23
+#define AES_GCM_4106_DEC_TEST_VECTORS 23
 #define AES_GCM_4543_ENC_TEST_VECTORS 1
 #define AES_GCM_4543_DEC_TEST_VECTORS 2
 #define AES_CCM_ENC_TEST_VECTORS 8
@@ -13994,6 +14523,9 @@ static struct cipher_testvec aes_cbc_enc_tv_template[] = {
                .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
                          "\x27\x08\x94\x2d\xbe\x77\x18\x1a",
                .rlen   = 16,
+               .also_non_np = 1,
+               .np     = 8,
+               .tap    = { 3, 2, 3, 2, 3, 1, 1, 1 },
        }, {
                .key    = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
                          "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
@@ -14213,6 +14745,9 @@ static struct cipher_testvec aes_cbc_dec_tv_template[] = {
                .ilen   = 16,
                .result = "Single block msg",
                .rlen   = 16,
+               .also_non_np = 1,
+               .np     = 8,
+               .tap    = { 3, 2, 3, 2, 3, 1, 1, 1 },
        }, {
                .key    = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0"
                          "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a",
@@ -14522,6 +15057,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 16,
                .iv     = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
                          "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .assoc  = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
+                         "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .alen   = 16,
                .input  = "Single block msg",
                .ilen   = 16,
                .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
@@ -14547,6 +15085,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 16,
                .iv     = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
                          "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .assoc  = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
+                         "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .alen   = 16,
                .input  = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
                          "\x10\x11\x12\x13\x14\x15\x16\x17"
@@ -14577,6 +15118,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 16,
                .iv     = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
                          "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .assoc  = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
+                         "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .alen   = 16,
                .input  = "This is a 48-byte message (exactly 3 AES blocks)",
                .ilen   = 48,
                .result = "\xd0\xa0\x2b\x38\x36\x45\x17\x53"
@@ -14606,6 +15150,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 16,
                .iv     = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
                          "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .assoc  = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
+                         "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .alen   = 16,
                .input  = "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
                          "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
                          "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
@@ -14644,8 +15191,10 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 16,
                .iv     = "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
                          "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
+                         "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
+               .alen   = 24,
                .input  = "\x08\x00\x0e\xbd\xa7\x0a\x00\x00"
                          "\x8e\x9c\x08\x3d\xb9\x5b\x07\x00"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
@@ -14689,6 +15238,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 24,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -14729,6 +15281,9 @@ static struct aead_testvec hmac_sha1_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 20 + 32,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -14864,6 +15419,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 16,
                .iv     = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
                          "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .assoc  = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
+                         "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .alen   = 16,
                .input  = "Single block msg",
                .ilen   = 16,
                .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
@@ -14891,6 +15449,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 16,
                .iv     = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
                          "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .assoc  = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
+                         "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .alen   = 16,
                .input  = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
                          "\x10\x11\x12\x13\x14\x15\x16\x17"
@@ -14923,6 +15484,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 16,
                .iv     = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
                          "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .assoc  = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
+                         "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .alen   = 16,
                .input  = "This is a 48-byte message (exactly 3 AES blocks)",
                .ilen   = 48,
                .result = "\xd0\xa0\x2b\x38\x36\x45\x17\x53"
@@ -14954,6 +15518,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 16,
                .iv     = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
                          "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .assoc  = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
+                         "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .alen   = 16,
                .input  = "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
                          "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
                          "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
@@ -14994,8 +15561,10 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 16,
                .iv     = "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
                          "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
+                         "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
+               .alen   = 24,
                .input  = "\x08\x00\x0e\xbd\xa7\x0a\x00\x00"
                          "\x8e\x9c\x08\x3d\xb9\x5b\x07\x00"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
@@ -15041,6 +15610,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 24,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -15083,6 +15655,9 @@ static struct aead_testvec hmac_sha256_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 32 + 32,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -15131,6 +15706,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 16,
                .iv     = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
                          "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .assoc  = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
+                         "\xb4\x22\xda\x80\x2c\x9f\xac\x41",
+               .alen   = 16,
                .input  = "Single block msg",
                .ilen   = 16,
                .result = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
@@ -15166,6 +15744,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 16,
                .iv     = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
                          "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .assoc  = "\x56\x2e\x17\x99\x6d\x09\x3d\x28"
+                         "\xdd\xb3\xba\x69\x5a\x2e\x6f\x58",
+               .alen   = 16,
                .input  = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
                          "\x10\x11\x12\x13\x14\x15\x16\x17"
@@ -15206,6 +15787,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 16,
                .iv     = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
                          "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .assoc  = "\xc7\x82\xdc\x4c\x09\x8c\x66\xcb"
+                         "\xd9\xcd\x27\xd8\x25\x68\x2c\x81",
+               .alen   = 16,
                .input  = "This is a 48-byte message (exactly 3 AES blocks)",
                .ilen   = 48,
                .result = "\xd0\xa0\x2b\x38\x36\x45\x17\x53"
@@ -15245,6 +15829,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 16,
                .iv     = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
                          "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .assoc  = "\x8c\xe8\x2e\xef\xbe\xa0\xda\x3c"
+                         "\x44\x69\x9e\xd7\xdb\x51\xb7\xd9",
+               .alen   = 16,
                .input  = "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
                          "\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
                          "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
@@ -15293,8 +15880,10 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 16,
                .iv     = "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
                          "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\xe9\x6e\x8c\x08\xab\x46\x57\x63"
+                         "\xfd\x09\x8d\x45\xdd\x3f\xf8\x93",
+               .alen   = 24,
                .input  = "\x08\x00\x0e\xbd\xa7\x0a\x00\x00"
                          "\x8e\x9c\x08\x3d\xb9\x5b\x07\x00"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
@@ -15348,6 +15937,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 24,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -15398,6 +15990,9 @@ static struct aead_testvec hmac_sha512_aes_cbc_enc_tv_temp[] = {
                .klen   = 8 + 64 + 32,
                .iv     = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
+               .alen   = 16,
                .input  = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96"
                          "\xe9\x3d\x7e\x11\x73\x93\x17\x2a"
                          "\xae\x2d\x8a\x57\x1e\x03\xac\x9c"
@@ -15445,8 +16040,9 @@ static struct aead_testvec hmac_sha1_des_cbc_enc_tv_temp[] = {
                          "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24",
                .klen   = 8 + 20 + 8,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15505,8 +16101,9 @@ static struct aead_testvec hmac_sha224_des_cbc_enc_tv_temp[] = {
                          "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24",
                .klen   = 8 + 24 + 8,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15566,8 +16163,9 @@ static struct aead_testvec hmac_sha256_des_cbc_enc_tv_temp[] = {
                          "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24",
                .klen   = 8 + 32 + 8,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15630,8 +16228,9 @@ static struct aead_testvec hmac_sha384_des_cbc_enc_tv_temp[] = {
                          "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24",
                .klen   = 8 + 48 + 8,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15698,8 +16297,9 @@ static struct aead_testvec hmac_sha512_des_cbc_enc_tv_temp[] = {
                          "\xE9\xC0\xFF\x2E\x76\x0B\x64\x24",
                .klen   = 8 + 64 + 8,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15765,8 +16365,9 @@ static struct aead_testvec hmac_sha1_des3_ede_cbc_enc_tv_temp[] = {
                          "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
                .klen   = 8 + 20 + 24,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                  "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15827,8 +16428,9 @@ static struct aead_testvec hmac_sha224_des3_ede_cbc_enc_tv_temp[] = {
                          "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
                .klen   = 8 + 24 + 24,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15890,8 +16492,9 @@ static struct aead_testvec hmac_sha256_des3_ede_cbc_enc_tv_temp[] = {
                          "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
                .klen   = 8 + 32 + 24,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -15956,8 +16559,9 @@ static struct aead_testvec hmac_sha384_des3_ede_cbc_enc_tv_temp[] = {
                          "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
                .klen   = 8 + 48 + 24,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-       .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -16026,8 +16630,9 @@ static struct aead_testvec hmac_sha512_des3_ede_cbc_enc_tv_temp[] = {
                          "\xEA\xC2\x84\xE8\x14\x95\xDB\xE8",
                .klen   = 8 + 64 + 24,
                .iv     = "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x01"
+                         "\x7D\x33\x88\x93\x0F\x93\xB2\x42",
+               .alen   = 16,
                .input  = "\x6f\x54\x20\x6f\x61\x4d\x79\x6e"
                          "\x53\x20\x63\x65\x65\x72\x73\x74"
                          "\x54\x20\x6f\x6f\x4d\x20\x6e\x61"
@@ -19619,149 +20224,150 @@ static struct aead_testvec aes_gcm_dec_tv_template[] = {
 };
 
 static struct aead_testvec aes_gcm_rfc4106_enc_tv_template[] = {
-        { /* Generated using Crypto++ */
+       { /* Generated using Crypto++ */
                .key    = zeroed_string,
                .klen   = 20,
-                .iv     = zeroed_string,
-                .input  = zeroed_string,
-                .ilen   = 16,
-                .assoc  = zeroed_string,
-                .alen   = 8,
+               .iv     = zeroed_string,
+               .input  = zeroed_string,
+               .ilen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
                .result = "\x03\x88\xDA\xCE\x60\xB6\xA3\x92"
-                          "\xF3\x28\xC2\xB9\x71\xB2\xFE\x78"
-                          "\x97\xFE\x4C\x23\x37\x42\x01\xE0"
-                          "\x81\x9F\x8D\xC5\xD7\x41\xA0\x1B",
+                         "\xF3\x28\xC2\xB9\x71\xB2\xFE\x78"
+                         "\x97\xFE\x4C\x23\x37\x42\x01\xE0"
+                         "\x81\x9F\x8D\xC5\xD7\x41\xA0\x1B",
                .rlen   = 32,
-        },{
+       },{
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
-                .input  = zeroed_string,
-                .ilen   = 16,
-                .assoc  = zeroed_string,
-                .alen   = 8,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = zeroed_string,
+               .ilen   = 16,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
                .result = "\xC0\x0D\x8B\x42\x0F\x8F\x34\x18"
-                          "\x88\xB1\xC5\xBC\xC5\xB6\xD6\x28"
-                          "\x6A\x9D\xDF\x11\x5E\xFE\x5E\x9D"
-                          "\x2F\x70\x44\x92\xF7\xF2\xE3\xEF",
+                         "\x88\xB1\xC5\xBC\xC5\xB6\xD6\x28"
+                         "\x6A\x9D\xDF\x11\x5E\xFE\x5E\x9D"
+                         "\x2F\x70\x44\x92\xF7\xF2\xE3\xEF",
                .rlen   = 32,
 
-        }, {
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = zeroed_string,
-                .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .ilen   = 16,
-                .assoc  = zeroed_string,
-                .alen   = 8,
+               .iv     = zeroed_string,
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
                .result = "\x4B\xB1\xB5\xE3\x25\x71\x70\xDE"
-                          "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
-                          "\x0B\x8F\x88\x69\x17\xE6\xB4\x3C"
-                          "\xB1\x68\xFD\x14\x52\x64\x61\xB2",
+                         "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
+                         "\x0B\x8F\x88\x69\x17\xE6\xB4\x3C"
+                         "\xB1\x68\xFD\x14\x52\x64\x61\xB2",
                .rlen   = 32,
-        }, {
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = zeroed_string,
-                .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .ilen   = 16,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
+               .iv     = zeroed_string,
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
                .result = "\x4B\xB1\xB5\xE3\x25\x71\x70\xDE"
-                          "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
-                          "\x90\x92\xB7\xE3\x5F\xA3\x9A\x63"
-                          "\x7E\xD7\x1F\xD8\xD3\x7C\x4B\xF5",
+                         "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
+                         "\x90\x92\xB7\xE3\x5F\xA3\x9A\x63"
+                         "\x7E\xD7\x1F\xD8\xD3\x7C\x4B\xF5",
                .rlen   = 32,
-        }, {
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
-                .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .ilen   = 16,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
                .result = "\xC1\x0C\x8A\x43\x0E\x8E\x35\x19"
-                          "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
-                          "\x64\x50\xF9\x32\x13\xFB\x74\x61"
-                          "\xF4\xED\x52\xD3\xC5\x10\x55\x3C",
+                         "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
+                         "\x64\x50\xF9\x32\x13\xFB\x74\x61"
+                         "\xF4\xED\x52\xD3\xC5\x10\x55\x3C",
                .rlen   = 32,
-        }, {
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
-                .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .ilen   = 64,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 64,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
                .result = "\xC1\x0C\x8A\x43\x0E\x8E\x35\x19"
-                          "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
-                          "\x98\x14\xA1\x42\x37\x80\xFD\x90"
-                          "\x68\x12\x01\xA8\x91\x89\xB9\x83"
-                          "\x5B\x11\x77\x12\x9B\xFF\x24\x89"
-                          "\x94\x5F\x18\x12\xBA\x27\x09\x39"
-                          "\x99\x96\x76\x42\x15\x1C\xCD\xCB"
-                          "\xDC\xD3\xDA\x65\x73\xAF\x80\xCD"
-                          "\xD2\xB6\xC2\x4A\x76\xC2\x92\x85"
-                          "\xBD\xCF\x62\x98\x58\x14\xE5\xBD",
+                         "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
+                         "\x98\x14\xA1\x42\x37\x80\xFD\x90"
+                         "\x68\x12\x01\xA8\x91\x89\xB9\x83"
+                         "\x5B\x11\x77\x12\x9B\xFF\x24\x89"
+                         "\x94\x5F\x18\x12\xBA\x27\x09\x39"
+                         "\x99\x96\x76\x42\x15\x1C\xCD\xCB"
+                         "\xDC\xD3\xDA\x65\x73\xAF\x80\xCD"
+                         "\xD2\xB6\xC2\x4A\x76\xC2\x92\x85"
+                         "\xBD\xCF\x62\x98\x58\x14\xE5\xBD",
                .rlen   = 80,
-        }, {
+       }, {
                .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef"
-                          "\x00\x00\x00\x00",
-                .input  = "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff",
-                .ilen   = 192,
-                .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-                          "\xaa\xaa\xaa\xaa",
-                .alen   = 12,
+               .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef",
+               .input  = "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .ilen   = 192,
+               .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+                         "\xaa\xaa\xaa\xaa\x00\x00\x45\x67"
+                         "\x89\xab\xcd\xef",
+               .alen   = 20,
                .result = "\xC1\x76\x33\x85\xE2\x9B\x5F\xDE"
                          "\xDE\x89\x3D\x42\xE7\xC9\x69\x8A"
                          "\x44\x6D\xC3\x88\x46\x2E\xC2\x01"
@@ -19789,126 +20395,564 @@ static struct aead_testvec aes_gcm_rfc4106_enc_tv_template[] = {
                          "\x37\x08\x1C\xCF\xBA\x5D\x71\x46"
                          "\x80\x72\xB0\x4C\x82\x0D\x60\x3C",
                .rlen   = 208,
+       }, { /* From draft-mcgrew-gcm-test-01 */
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x2E\x44\x3B\x68",
+               .klen   = 20,
+               .iv     = "\x49\x56\xED\x7E\x3B\x24\x4C\xFE",
+               .input  = "\x45\x00\x00\x48\x69\x9A\x00\x00"
+                         "\x80\x11\x4D\xB7\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x9B\xF1\x56"
+                         "\x38\xD3\x01\x00\x00\x01\x00\x00"
+                         "\x00\x00\x00\x00\x04\x5F\x73\x69"
+                         "\x70\x04\x5F\x75\x64\x70\x03\x73"
+                         "\x69\x70\x09\x63\x79\x62\x65\x72"
+                         "\x63\x69\x74\x79\x02\x64\x6B\x00"
+                         "\x00\x21\x00\x01\x01\x02\x02\x01",
+               .ilen   = 72,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x00\x49\x56\xED\x7E"
+                         "\x3B\x24\x4C\xFE",
+               .alen   = 20,
+               .result = "\xFE\xCF\x53\x7E\x72\x9D\x5B\x07"
+                         "\xDC\x30\xDF\x52\x8D\xD2\x2B\x76"
+                         "\x8D\x1B\x98\x73\x66\x96\xA6\xFD"
+                         "\x34\x85\x09\xFA\x13\xCE\xAC\x34"
+                         "\xCF\xA2\x43\x6F\x14\xA3\xF3\xCF"
+                         "\x65\x92\x5B\xF1\xF4\xA1\x3C\x5D"
+                         "\x15\xB2\x1E\x18\x84\xF5\xFF\x62"
+                         "\x47\xAE\xAB\xB7\x86\xB9\x3B\xCE"
+                         "\x61\xBC\x17\xD7\x68\xFD\x97\x32"
+                         "\x45\x90\x18\x14\x8F\x6C\xBE\x72"
+                         "\x2F\xD0\x47\x96\x56\x2D\xFD\xB4",
+               .rlen   = 88,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xCA\xFE\xBA\xBE",
+               .klen   = 20,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .input  = "\x45\x00\x00\x3E\x69\x8F\x00\x00"
+                         "\x80\x11\x4D\xCC\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x98\x00\x35"
+                         "\x00\x2A\x23\x43\xB2\xD0\x01\x00"
+                         "\x00\x01\x00\x00\x00\x00\x00\x00"
+                         "\x03\x73\x69\x70\x09\x63\x79\x62"
+                         "\x65\x72\x63\x69\x74\x79\x02\x64"
+                         "\x6B\x00\x00\x01\x00\x01\x00\x01",
+               .ilen   = 64,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .result = "\xDE\xB2\x2C\xD9\xB0\x7C\x72\xC1"
+                         "\x6E\x3A\x65\xBE\xEB\x8D\xF3\x04"
+                         "\xA5\xA5\x89\x7D\x33\xAE\x53\x0F"
+                         "\x1B\xA7\x6D\x5D\x11\x4D\x2A\x5C"
+                         "\x3D\xE8\x18\x27\xC1\x0E\x9A\x4F"
+                         "\x51\x33\x0D\x0E\xEC\x41\x66\x42"
+                         "\xCF\xBB\x85\xA5\xB4\x7E\x48\xA4"
+                         "\xEC\x3B\x9B\xA9\x5D\x91\x8B\xD1"
+                         "\x83\xB7\x0D\x3A\xA8\xBC\x6E\xE4"
+                         "\xC3\x09\xE9\xD8\x5A\x41\xAD\x4A",
+               .rlen   = 80,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x11\x22\x33\x44",
+               .klen   = 36,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .input  = "\x45\x00\x00\x30\x69\xA6\x40\x00"
+                         "\x80\x06\x26\x90\xC0\xA8\x01\x02"
+                         "\x93\x89\x15\x5E\x0A\x9E\x00\x8B"
+                         "\x2D\xC5\x7E\xE0\x00\x00\x00\x00"
+                         "\x70\x02\x40\x00\x20\xBF\x00\x00"
+                         "\x02\x04\x05\xB4\x01\x01\x04\x02"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x4A\x2C\xBF\xE3\x00\x00\x00\x02"
+                         "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .alen   = 16,
+               .result = "\xFF\x42\x5C\x9B\x72\x45\x99\xDF"
+                         "\x7A\x3B\xCD\x51\x01\x94\xE0\x0D"
+                         "\x6A\x78\x10\x7F\x1B\x0B\x1C\xBF"
+                         "\x06\xEF\xAE\x9D\x65\xA5\xD7\x63"
+                         "\x74\x8A\x63\x79\x85\x77\x1D\x34"
+                         "\x7F\x05\x45\x65\x9F\x14\xE9\x9D"
+                         "\xEF\x84\x2D\x8E\xB3\x35\xF4\xEE"
+                         "\xCF\xDB\xF8\x31\x82\x4B\x4C\x49"
+                         "\x15\x95\x6C\x96",
+               .rlen   = 68,
+       }, {
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00",
+               .klen   = 20,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .input  = "\x45\x00\x00\x3C\x99\xC5\x00\x00"
+                         "\x80\x01\xCB\x7A\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x07\x5C"
+                         "\x02\x00\x44\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .ilen   = 64,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
+               .result = "\x46\x88\xDA\xF2\xF9\x73\xA3\x92"
+                         "\x73\x29\x09\xC3\x31\xD5\x6D\x60"
+                         "\xF6\x94\xAB\xAA\x41\x4B\x5E\x7F"
+                         "\xF5\xFD\xCD\xFF\xF5\xE9\xA2\x84"
+                         "\x45\x64\x76\x49\x27\x19\xFF\xB6"
+                         "\x4D\xE7\xD9\xDC\xA1\xE1\xD8\x94"
+                         "\xBC\x3B\xD5\x78\x73\xED\x4D\x18"
+                         "\x1D\x19\xD4\xD5\xC8\xC1\x8A\xF3"
+                         "\xF8\x21\xD4\x96\xEE\xB0\x96\xE9"
+                         "\x8A\xD2\xB6\x9E\x47\x99\xC7\x1D",
+               .rlen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x3C\x99\xC3\x00\x00"
+                         "\x80\x01\xCB\x7C\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x08\x5C"
+                         "\x02\x00\x43\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .ilen   = 64,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\xFB\xA2\xCA\xA4\x85\x3C\xF9\xF0"
+                         "\xF2\x2C\xB1\x0D\x86\xDD\x83\xB0"
+                         "\xFE\xC7\x56\x91\xCF\x1A\x04\xB0"
+                         "\x0D\x11\x38\xEC\x9C\x35\x79\x17"
+                         "\x65\xAC\xBD\x87\x01\xAD\x79\x84"
+                         "\x5B\xF9\xFE\x3F\xBA\x48\x7B\xC9"
+                         "\x17\x55\xE6\x66\x2B\x4C\x8D\x0D"
+                         "\x1F\x5E\x22\x73\x95\x30\x32\x0A"
+                         "\xE0\xD7\x31\xCC\x97\x8E\xCA\xFA"
+                         "\xEA\xE8\x8F\x00\xE8\x0D\x6E\x48",
+               .rlen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x1C\x42\xA2\x00\x00"
+                         "\x80\x01\x44\x1F\x40\x67\x93\xB6"
+                         "\xE0\x00\x00\x02\x0A\x00\xF5\xFF"
+                         "\x01\x02\x02\x01",
+               .ilen   = 28,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\xFB\xA2\xCA\x84\x5E\x5D\xF9\xF0"
+                         "\xF2\x2C\x3E\x6E\x86\xDD\x83\x1E"
+                         "\x1F\xC6\x57\x92\xCD\x1A\xF9\x13"
+                         "\x0E\x13\x79\xED\x36\x9F\x07\x1F"
+                         "\x35\xE0\x34\xBE\x95\xF1\x12\xE4"
+                         "\xE7\xD0\x5D\x35",
+               .rlen   = 44,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\xCA\xFE\xBA\xBE",
+               .klen   = 28,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .input  = "\x45\x00\x00\x28\xA4\xAD\x40\x00"
+                         "\x40\x06\x78\x80\x0A\x01\x03\x8F"
+                         "\x0A\x01\x06\x12\x80\x23\x06\xB8"
+                         "\xCB\x71\x26\x02\xDD\x6B\xB0\x3E"
+                         "\x50\x10\x16\xD0\x75\x68\x00\x01",
+               .ilen   = 40,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .result = "\xA5\xB1\xF8\x06\x60\x29\xAE\xA4"
+                         "\x0E\x59\x8B\x81\x22\xDE\x02\x42"
+                         "\x09\x38\xB3\xAB\x33\xF8\x28\xE6"
+                         "\x87\xB8\x85\x8B\x5B\xFB\xDB\xD0"
+                         "\x31\x5B\x27\x45\x21\x44\xCC\x77"
+                         "\x95\x45\x7B\x96\x52\x03\x7F\x53"
+                         "\x18\x02\x7B\x5B\x4C\xD7\xA6\x36",
+               .rlen   = 56,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8\x88",
+               .klen   = 20,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .input  = "\x45\x00\x00\x49\x33\xBA\x00\x00"
+                         "\x7F\x11\x91\x06\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xDD\x7B\x80\x03\x02\xD5"
+                         "\x00\x00\x4E\x20\x00\x1E\x8C\x18"
+                         "\xD7\x5B\x81\xDC\x91\xBA\xA0\x47"
+                         "\x6B\x91\xB9\x24\xB2\x80\x38\x9D"
+                         "\x92\xC9\x63\xBA\xC0\x46\xEC\x95"
+                         "\x9B\x62\x66\xC0\x47\x22\xB1\x49"
+                         "\x23\x01\x01\x01",
+               .ilen   = 76,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .result = "\x18\xA6\xFD\x42\xF7\x2C\xBF\x4A"
+                         "\xB2\xA2\xEA\x90\x1F\x73\xD8\x14"
+                         "\xE3\xE7\xF2\x43\xD9\x54\x12\xE1"
+                         "\xC3\x49\xC1\xD2\xFB\xEC\x16\x8F"
+                         "\x91\x90\xFE\xEB\xAF\x2C\xB0\x19"
+                         "\x84\xE6\x58\x63\x96\x5D\x74\x72"
+                         "\xB7\x9D\xA3\x45\xE0\xE7\x80\x19"
+                         "\x1F\x0D\x2F\x0E\x0F\x49\x6C\x22"
+                         "\x6F\x21\x27\xB2\x7D\xB3\x57\x24"
+                         "\xE7\x84\x5D\x68\x65\x1F\x57\xE6"
+                         "\x5F\x35\x4F\x75\xFF\x17\x01\x57"
+                         "\x69\x62\x34\x36",
+               .rlen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C\x74",
+               .klen   = 36,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .input  = "\x45\x08\x00\x28\x73\x2C\x00\x00"
+                         "\x40\x06\xE9\xF9\x0A\x01\x06\x12"
+                         "\x0A\x01\x03\x8F\x06\xB8\x80\x23"
+                         "\xDD\x6B\xAF\xBE\xCB\x71\x26\x02"
+                         "\x50\x10\x1F\x64\x6D\x54\x00\x01",
+               .ilen   = 40,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .result = "\xF2\xD6\x9E\xCD\xBD\x5A\x0D\x5B"
+                         "\x8D\x5E\xF3\x8B\xAD\x4D\xA5\x8D"
+                         "\x1F\x27\x8F\xDE\x98\xEF\x67\x54"
+                         "\x9D\x52\x4A\x30\x18\xD9\xA5\x7F"
+                         "\xF4\xD3\xA3\x1C\xE6\x73\x11\x9E"
+                         "\x45\x16\x26\xC2\x41\x57\x71\xE3"
+                         "\xB7\xEE\xBC\xA6\x14\xC8\x9B\x35",
+               .rlen   = 56,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x49\x33\x3E\x00\x00"
+                         "\x7F\x11\x91\x82\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xCB\x45\x80\x03\x02\x5B"
+                         "\x00\x00\x01\xE0\x00\x1E\x8C\x18"
+                         "\xD6\x57\x59\xD5\x22\x84\xA0\x35"
+                         "\x2C\x71\x47\x5C\x88\x80\x39\x1C"
+                         "\x76\x4D\x6E\x5E\xE0\x49\x6B\x32"
+                         "\x5A\xE2\x70\xC0\x38\x99\x49\x39"
+                         "\x15\x01\x01\x01",
+               .ilen   = 76,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\xFB\xA2\xCA\xD1\x2F\xC1\xF9\xF0"
+                         "\x0D\x3C\xEB\xF3\x05\x41\x0D\xB8"
+                         "\x3D\x77\x84\xB6\x07\x32\x3D\x22"
+                         "\x0F\x24\xB0\xA9\x7D\x54\x18\x28"
+                         "\x00\xCA\xDB\x0F\x68\xD9\x9E\xF0"
+                         "\xE0\xC0\xC8\x9A\xE9\xBE\xA8\x88"
+                         "\x4E\x52\xD6\x5B\xC1\xAF\xD0\x74"
+                         "\x0F\x74\x24\x44\x74\x7B\x5B\x39"
+                         "\xAB\x53\x31\x63\xAA\xD4\x55\x0E"
+                         "\xE5\x16\x09\x75\xCD\xB6\x08\xC5"
+                         "\x76\x91\x89\x60\x97\x63\xB8\xE1"
+                         "\x8C\xAA\x81\xE2",
+               .rlen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C\x74",
+               .klen   = 36,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .input  = "\x63\x69\x73\x63\x6F\x01\x72\x75"
+                         "\x6C\x65\x73\x01\x74\x68\x65\x01"
+                         "\x6E\x65\x74\x77\x65\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x01\x74\x68\x65"
+                         "\x74\x65\x63\x68\x6E\x6F\x6C\x6F"
+                         "\x67\x69\x65\x73\x01\x74\x68\x61"
+                         "\x74\x77\x69\x6C\x6C\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x74\x6F\x6D\x6F"
+                         "\x72\x72\x6F\x77\x01\x02\x02\x01",
+               .ilen   = 72,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .result = "\xD4\xB7\xED\x86\xA1\x77\x7F\x2E"
+                         "\xA1\x3D\x69\x73\xD3\x24\xC6\x9E"
+                         "\x7B\x43\xF8\x26\xFB\x56\x83\x12"
+                         "\x26\x50\x8B\xEB\xD2\xDC\xEB\x18"
+                         "\xD0\xA6\xDF\x10\xE5\x48\x7D\xF0"
+                         "\x74\x11\x3E\x14\xC6\x41\x02\x4E"
+                         "\x3E\x67\x73\xD9\x1A\x62\xEE\x42"
+                         "\x9B\x04\x3A\x10\xE3\xEF\xE6\xB0"
+                         "\x12\xA4\x93\x63\x41\x23\x64\xF8"
+                         "\xC0\xCA\xC5\x87\xF2\x49\xE5\x6B"
+                         "\x11\xE2\x4F\x30\xE4\x4C\xCC\x76",
+               .rlen   = 88,
+       }, {
+               .key    = "\x7D\x77\x3D\x00\xC1\x44\xC5\x25"
+                         "\xAC\x61\x9D\x18\xC8\x4A\x3F\x47"
+                         "\xD9\x66\x42\x67",
+               .klen   = 20,
+               .iv     = "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .input  = "\x01\x02\x02\x01",
+               .ilen   = 4,
+               .assoc  = "\x33\x54\x67\xAE\xFF\xFF\xFF\xFF"
+                         "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .alen   = 16,
+               .result = "\x43\x7F\x86\x6B\xCB\x3F\x69\x9F"
+                         "\xE9\xB0\x82\x2B\xAC\x96\x1C\x45"
+                         "\x04\xBE\xF2\x70",
+               .rlen   = 20,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8\x88",
+               .klen   = 20,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .input  = "\x74\x6F\x01\x62\x65\x01\x6F\x72"
+                         "\x01\x6E\x6F\x74\x01\x74\x6F\x01"
+                         "\x62\x65\x00\x01",
+               .ilen   = 20,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .result = "\x29\xC9\xFC\x69\xA1\x97\xD0\x38"
+                         "\xCC\xDD\x14\xE2\xDD\xFC\xAA\x05"
+                         "\x43\x33\x21\x64\x41\x25\x03\x52"
+                         "\x43\x03\xED\x3C\x6C\x5F\x28\x38"
+                         "\x43\xAF\x8C\x3E",
+               .rlen   = 36,
+       }, {
+               .key    = "\x6C\x65\x67\x61\x6C\x69\x7A\x65"
+                         "\x6D\x61\x72\x69\x6A\x75\x61\x6E"
+                         "\x61\x61\x6E\x64\x64\x6F\x69\x74"
+                         "\x62\x65\x66\x6F\x72\x65\x69\x61"
+                         "\x74\x75\x72\x6E",
+               .klen   = 36,
+               .iv     = "\x33\x30\x21\x69\x67\x65\x74\x6D",
+               .input  = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x79\x6B\x69\x63\xFF\xFF\xFF\xFF"
+                         "\xFF\xFF\xFF\xFF\x33\x30\x21\x69"
+                         "\x67\x65\x74\x6D",
+               .alen   = 20,
+               .result = "\xF9\x7A\xB2\xAA\x35\x6D\x8E\xDC"
+                         "\xE1\x76\x44\xAC\x8C\x78\xE2\x5D"
+                         "\xD2\x4D\xED\xBB\x29\xEB\xF1\xB6"
+                         "\x4A\x27\x4B\x39\xB4\x9C\x3A\x86"
+                         "\x4C\xD3\xD7\x8C\xA4\xAE\x68\xA3"
+                         "\x2B\x42\x45\x8F\xB5\x7D\xBE\x82"
+                         "\x1D\xCC\x63\xB9\xD0\x93\x7B\xA2"
+                         "\x94\x5F\x66\x93\x68\x66\x1A\x32"
+                         "\x9F\xB4\xC0\x53",
+               .rlen   = 68,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x3F\x7E\xF6\x42\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\xFB\xA2\xCA\xA8\xC6\xC5\xF9\xF0"
+                         "\xF2\x2C\xA5\x4A\x06\x12\x10\xAD"
+                         "\x3F\x6E\x57\x91\xCF\x1A\xCA\x21"
+                         "\x0D\x11\x7C\xEC\x9C\x35\x79\x17"
+                         "\x65\xAC\xBD\x87\x01\xAD\x79\x84"
+                         "\x5B\xF9\xFE\x3F\xBA\x48\x7B\xC9"
+                         "\x63\x21\x93\x06\x84\xEE\xCA\xDB"
+                         "\x56\x91\x25\x46\xE7\xA9\x5C\x97"
+                         "\x40\xD7\xCB\x05",
+               .rlen   = 68,
+       }, {
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x22\x43\x3C\x64",
+               .klen   = 20,
+               .iv     = "\x48\x55\xEC\x7D\x3A\x23\x4B\xFD",
+               .input  = "\x08\x00\xC6\xCD\x02\x00\x07\x00"
+                         "\x61\x62\x63\x64\x65\x66\x67\x68"
+                         "\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70"
+                         "\x71\x72\x73\x74\x01\x02\x02\x01",
+               .ilen   = 32,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x07\x48\x55\xEC\x7D"
+                         "\x3A\x23\x4B\xFD",
+               .alen   = 20,
+               .result = "\x74\x75\x2E\x8A\xEB\x5D\x87\x3C"
+                         "\xD7\xC0\xF4\xAC\xC3\x6C\x4B\xFF"
+                         "\x84\xB7\xD7\xB9\x8F\x0C\xA8\xB6"
+                         "\xAC\xDA\x68\x94\xBC\x61\x90\x69"
+                         "\xEF\x9C\xBC\x28\xFE\x1B\x56\xA7"
+                         "\xC4\xE0\xD5\x8C\x86\xCD\x2B\xC0",
+               .rlen   = 48,
        }
 };
 
 static struct aead_testvec aes_gcm_rfc4106_dec_tv_template[] = {
-        { /* Generated using Crypto++ */
+       { /* Generated using Crypto++ */
                .key    = zeroed_string,
                .klen   = 20,
-                .iv     = zeroed_string,
+               .iv     = zeroed_string,
                .input  = "\x03\x88\xDA\xCE\x60\xB6\xA3\x92"
-                          "\xF3\x28\xC2\xB9\x71\xB2\xFE\x78"
-                          "\x97\xFE\x4C\x23\x37\x42\x01\xE0"
-                          "\x81\x9F\x8D\xC5\xD7\x41\xA0\x1B",
+                         "\xF3\x28\xC2\xB9\x71\xB2\xFE\x78"
+                         "\x97\xFE\x4C\x23\x37\x42\x01\xE0"
+                         "\x81\x9F\x8D\xC5\xD7\x41\xA0\x1B",
                .ilen   = 32,
-                .assoc  = zeroed_string,
-                .alen   = 8,
-                .result = zeroed_string,
-                .rlen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .result = zeroed_string,
+               .rlen   = 16,
 
-        },{
+       },{
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
                .input  = "\xC0\x0D\x8B\x42\x0F\x8F\x34\x18"
-                          "\x88\xB1\xC5\xBC\xC5\xB6\xD6\x28"
-                          "\x6A\x9D\xDF\x11\x5E\xFE\x5E\x9D"
-                          "\x2F\x70\x44\x92\xF7\xF2\xE3\xEF",
+                         "\x88\xB1\xC5\xBC\xC5\xB6\xD6\x28"
+                         "\x6A\x9D\xDF\x11\x5E\xFE\x5E\x9D"
+                         "\x2F\x70\x44\x92\xF7\xF2\xE3\xEF",
                .ilen   = 32,
-                .assoc  = zeroed_string,
-                .alen   = 8,
-                .result = zeroed_string,
-                .rlen   = 16,
-        }, {
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = zeroed_string,
+               .rlen   = 16,
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = zeroed_string,
+               .iv     = zeroed_string,
                .input  = "\x4B\xB1\xB5\xE3\x25\x71\x70\xDE"
-                          "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
-                          "\x0B\x8F\x88\x69\x17\xE6\xB4\x3C"
-                          "\xB1\x68\xFD\x14\x52\x64\x61\xB2",
+                         "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
+                         "\x0B\x8F\x88\x69\x17\xE6\xB4\x3C"
+                         "\xB1\x68\xFD\x14\x52\x64\x61\xB2",
                .ilen   = 32,
-                .assoc  = zeroed_string,
-                .alen   = 8,
-                .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .rlen   = 16,
-        }, {
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 16,
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = zeroed_string,
+               .iv     = zeroed_string,
                .input  = "\x4B\xB1\xB5\xE3\x25\x71\x70\xDE"
-                          "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
-                          "\x90\x92\xB7\xE3\x5F\xA3\x9A\x63"
-                          "\x7E\xD7\x1F\xD8\xD3\x7C\x4B\xF5",
+                         "\x7F\xC9\x9C\xA5\x14\x19\xF2\xAC"
+                         "\x90\x92\xB7\xE3\x5F\xA3\x9A\x63"
+                         "\x7E\xD7\x1F\xD8\xD3\x7C\x4B\xF5",
                .ilen   = 32,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
-                .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .rlen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 16,
 
-        }, {
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
                .input  = "\xC1\x0C\x8A\x43\x0E\x8E\x35\x19"
-                          "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
-                          "\x64\x50\xF9\x32\x13\xFB\x74\x61"
-                          "\xF4\xED\x52\xD3\xC5\x10\x55\x3C",
+                         "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
+                         "\x64\x50\xF9\x32\x13\xFB\x74\x61"
+                         "\xF4\xED\x52\xD3\xC5\x10\x55\x3C",
                .ilen   = 32,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
-                .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .rlen   = 16,
-        }, {
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 16,
+       }, {
                .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
                          "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01"
-                          "\x00\x00\x00\x00",
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
                .input  = "\xC1\x0C\x8A\x43\x0E\x8E\x35\x19"
-                          "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
-                          "\x98\x14\xA1\x42\x37\x80\xFD\x90"
-                          "\x68\x12\x01\xA8\x91\x89\xB9\x83"
-                          "\x5B\x11\x77\x12\x9B\xFF\x24\x89"
-                          "\x94\x5F\x18\x12\xBA\x27\x09\x39"
-                          "\x99\x96\x76\x42\x15\x1C\xCD\xCB"
-                          "\xDC\xD3\xDA\x65\x73\xAF\x80\xCD"
-                          "\xD2\xB6\xC2\x4A\x76\xC2\x92\x85"
-                          "\xBD\xCF\x62\x98\x58\x14\xE5\xBD",
+                         "\x89\xB0\xC4\xBD\xC4\xB7\xD7\x29"
+                         "\x98\x14\xA1\x42\x37\x80\xFD\x90"
+                         "\x68\x12\x01\xA8\x91\x89\xB9\x83"
+                         "\x5B\x11\x77\x12\x9B\xFF\x24\x89"
+                         "\x94\x5F\x18\x12\xBA\x27\x09\x39"
+                         "\x99\x96\x76\x42\x15\x1C\xCD\xCB"
+                         "\xDC\xD3\xDA\x65\x73\xAF\x80\xCD"
+                         "\xD2\xB6\xC2\x4A\x76\xC2\x92\x85"
+                         "\xBD\xCF\x62\x98\x58\x14\xE5\xBD",
                .ilen   = 80,
-                .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .alen   = 8,
-                .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01"
-                          "\x01\x01\x01\x01\x01\x01\x01\x01",
-                .rlen   = 64,
-        }, {
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 64,
+       }, {
                .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
                          "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
-                          "\x00\x00\x00\x00",
+                         "\x00\x00\x00\x00",
                .klen   = 20,
-                .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef"
-                          "\x00\x00\x00\x00",
+               .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef",
                .input  = "\xC1\x76\x33\x85\xE2\x9B\x5F\xDE"
                          "\xDE\x89\x3D\x42\xE7\xC9\x69\x8A"
                          "\x44\x6D\xC3\x88\x46\x2E\xC2\x01"
@@ -19936,35 +20980,473 @@ static struct aead_testvec aes_gcm_rfc4106_dec_tv_template[] = {
                          "\x37\x08\x1C\xCF\xBA\x5D\x71\x46"
                          "\x80\x72\xB0\x4C\x82\x0D\x60\x3C",
                .ilen   = 208,
-                .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
-                          "\xaa\xaa\xaa\xaa",
-                .alen   = 12,
-                .result = "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff"
-                          "\xff\xff\xff\xff\xff\xff\xff\xff",
-                .rlen   = 192,
-
+               .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+                         "\xaa\xaa\xaa\xaa\x00\x00\x45\x67"
+                         "\x89\xab\xcd\xef",
+               .alen   = 20,
+               .result = "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .rlen   = 192,
+       }, {
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x2E\x44\x3B\x68",
+               .klen   = 20,
+               .iv     = "\x49\x56\xED\x7E\x3B\x24\x4C\xFE",
+               .result = "\x45\x00\x00\x48\x69\x9A\x00\x00"
+                         "\x80\x11\x4D\xB7\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x9B\xF1\x56"
+                         "\x38\xD3\x01\x00\x00\x01\x00\x00"
+                         "\x00\x00\x00\x00\x04\x5F\x73\x69"
+                         "\x70\x04\x5F\x75\x64\x70\x03\x73"
+                         "\x69\x70\x09\x63\x79\x62\x65\x72"
+                         "\x63\x69\x74\x79\x02\x64\x6B\x00"
+                         "\x00\x21\x00\x01\x01\x02\x02\x01",
+               .rlen   = 72,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x00\x49\x56\xED\x7E"
+                         "\x3B\x24\x4C\xFE",
+               .alen   = 20,
+               .input  = "\xFE\xCF\x53\x7E\x72\x9D\x5B\x07"
+                         "\xDC\x30\xDF\x52\x8D\xD2\x2B\x76"
+                         "\x8D\x1B\x98\x73\x66\x96\xA6\xFD"
+                         "\x34\x85\x09\xFA\x13\xCE\xAC\x34"
+                         "\xCF\xA2\x43\x6F\x14\xA3\xF3\xCF"
+                         "\x65\x92\x5B\xF1\xF4\xA1\x3C\x5D"
+                         "\x15\xB2\x1E\x18\x84\xF5\xFF\x62"
+                         "\x47\xAE\xAB\xB7\x86\xB9\x3B\xCE"
+                         "\x61\xBC\x17\xD7\x68\xFD\x97\x32"
+                         "\x45\x90\x18\x14\x8F\x6C\xBE\x72"
+                         "\x2F\xD0\x47\x96\x56\x2D\xFD\xB4",
+               .ilen   = 88,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xCA\xFE\xBA\xBE",
+               .klen   = 20,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .result = "\x45\x00\x00\x3E\x69\x8F\x00\x00"
+                         "\x80\x11\x4D\xCC\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x98\x00\x35"
+                         "\x00\x2A\x23\x43\xB2\xD0\x01\x00"
+                         "\x00\x01\x00\x00\x00\x00\x00\x00"
+                         "\x03\x73\x69\x70\x09\x63\x79\x62"
+                         "\x65\x72\x63\x69\x74\x79\x02\x64"
+                         "\x6B\x00\x00\x01\x00\x01\x00\x01",
+               .rlen   = 64,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .input  = "\xDE\xB2\x2C\xD9\xB0\x7C\x72\xC1"
+                         "\x6E\x3A\x65\xBE\xEB\x8D\xF3\x04"
+                         "\xA5\xA5\x89\x7D\x33\xAE\x53\x0F"
+                         "\x1B\xA7\x6D\x5D\x11\x4D\x2A\x5C"
+                         "\x3D\xE8\x18\x27\xC1\x0E\x9A\x4F"
+                         "\x51\x33\x0D\x0E\xEC\x41\x66\x42"
+                         "\xCF\xBB\x85\xA5\xB4\x7E\x48\xA4"
+                         "\xEC\x3B\x9B\xA9\x5D\x91\x8B\xD1"
+                         "\x83\xB7\x0D\x3A\xA8\xBC\x6E\xE4"
+                         "\xC3\x09\xE9\xD8\x5A\x41\xAD\x4A",
+               .ilen   = 80,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x11\x22\x33\x44",
+               .klen   = 36,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .result = "\x45\x00\x00\x30\x69\xA6\x40\x00"
+                         "\x80\x06\x26\x90\xC0\xA8\x01\x02"
+                         "\x93\x89\x15\x5E\x0A\x9E\x00\x8B"
+                         "\x2D\xC5\x7E\xE0\x00\x00\x00\x00"
+                         "\x70\x02\x40\x00\x20\xBF\x00\x00"
+                         "\x02\x04\x05\xB4\x01\x01\x04\x02"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x4A\x2C\xBF\xE3\x00\x00\x00\x02"
+                         "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .alen   = 16,
+               .input  = "\xFF\x42\x5C\x9B\x72\x45\x99\xDF"
+                         "\x7A\x3B\xCD\x51\x01\x94\xE0\x0D"
+                         "\x6A\x78\x10\x7F\x1B\x0B\x1C\xBF"
+                         "\x06\xEF\xAE\x9D\x65\xA5\xD7\x63"
+                         "\x74\x8A\x63\x79\x85\x77\x1D\x34"
+                         "\x7F\x05\x45\x65\x9F\x14\xE9\x9D"
+                         "\xEF\x84\x2D\x8E\xB3\x35\xF4\xEE"
+                         "\xCF\xDB\xF8\x31\x82\x4B\x4C\x49"
+                         "\x15\x95\x6C\x96",
+               .ilen   = 68,
+       }, {
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00",
+               .klen   = 20,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .result = "\x45\x00\x00\x3C\x99\xC5\x00\x00"
+                         "\x80\x01\xCB\x7A\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x07\x5C"
+                         "\x02\x00\x44\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .rlen   = 64,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
+               .input  = "\x46\x88\xDA\xF2\xF9\x73\xA3\x92"
+                         "\x73\x29\x09\xC3\x31\xD5\x6D\x60"
+                         "\xF6\x94\xAB\xAA\x41\x4B\x5E\x7F"
+                         "\xF5\xFD\xCD\xFF\xF5\xE9\xA2\x84"
+                         "\x45\x64\x76\x49\x27\x19\xFF\xB6"
+                         "\x4D\xE7\xD9\xDC\xA1\xE1\xD8\x94"
+                         "\xBC\x3B\xD5\x78\x73\xED\x4D\x18"
+                         "\x1D\x19\xD4\xD5\xC8\xC1\x8A\xF3"
+                         "\xF8\x21\xD4\x96\xEE\xB0\x96\xE9"
+                         "\x8A\xD2\xB6\x9E\x47\x99\xC7\x1D",
+               .ilen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x3C\x99\xC3\x00\x00"
+                         "\x80\x01\xCB\x7C\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x08\x5C"
+                         "\x02\x00\x43\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .rlen   = 64,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\xFB\xA2\xCA\xA4\x85\x3C\xF9\xF0"
+                         "\xF2\x2C\xB1\x0D\x86\xDD\x83\xB0"
+                         "\xFE\xC7\x56\x91\xCF\x1A\x04\xB0"
+                         "\x0D\x11\x38\xEC\x9C\x35\x79\x17"
+                         "\x65\xAC\xBD\x87\x01\xAD\x79\x84"
+                         "\x5B\xF9\xFE\x3F\xBA\x48\x7B\xC9"
+                         "\x17\x55\xE6\x66\x2B\x4C\x8D\x0D"
+                         "\x1F\x5E\x22\x73\x95\x30\x32\x0A"
+                         "\xE0\xD7\x31\xCC\x97\x8E\xCA\xFA"
+                         "\xEA\xE8\x8F\x00\xE8\x0D\x6E\x48",
+               .ilen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x1C\x42\xA2\x00\x00"
+                         "\x80\x01\x44\x1F\x40\x67\x93\xB6"
+                         "\xE0\x00\x00\x02\x0A\x00\xF5\xFF"
+                         "\x01\x02\x02\x01",
+               .rlen   = 28,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\xFB\xA2\xCA\x84\x5E\x5D\xF9\xF0"
+                         "\xF2\x2C\x3E\x6E\x86\xDD\x83\x1E"
+                         "\x1F\xC6\x57\x92\xCD\x1A\xF9\x13"
+                         "\x0E\x13\x79\xED\x36\x9F\x07\x1F"
+                         "\x35\xE0\x34\xBE\x95\xF1\x12\xE4"
+                         "\xE7\xD0\x5D\x35",
+               .ilen   = 44,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\xCA\xFE\xBA\xBE",
+               .klen   = 28,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .result = "\x45\x00\x00\x28\xA4\xAD\x40\x00"
+                         "\x40\x06\x78\x80\x0A\x01\x03\x8F"
+                         "\x0A\x01\x06\x12\x80\x23\x06\xB8"
+                         "\xCB\x71\x26\x02\xDD\x6B\xB0\x3E"
+                         "\x50\x10\x16\xD0\x75\x68\x00\x01",
+               .rlen   = 40,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .input  = "\xA5\xB1\xF8\x06\x60\x29\xAE\xA4"
+                         "\x0E\x59\x8B\x81\x22\xDE\x02\x42"
+                         "\x09\x38\xB3\xAB\x33\xF8\x28\xE6"
+                         "\x87\xB8\x85\x8B\x5B\xFB\xDB\xD0"
+                         "\x31\x5B\x27\x45\x21\x44\xCC\x77"
+                         "\x95\x45\x7B\x96\x52\x03\x7F\x53"
+                         "\x18\x02\x7B\x5B\x4C\xD7\xA6\x36",
+               .ilen   = 56,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8\x88",
+               .klen   = 20,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .result = "\x45\x00\x00\x49\x33\xBA\x00\x00"
+                         "\x7F\x11\x91\x06\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xDD\x7B\x80\x03\x02\xD5"
+                         "\x00\x00\x4E\x20\x00\x1E\x8C\x18"
+                         "\xD7\x5B\x81\xDC\x91\xBA\xA0\x47"
+                         "\x6B\x91\xB9\x24\xB2\x80\x38\x9D"
+                         "\x92\xC9\x63\xBA\xC0\x46\xEC\x95"
+                         "\x9B\x62\x66\xC0\x47\x22\xB1\x49"
+                         "\x23\x01\x01\x01",
+               .rlen   = 76,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .input  = "\x18\xA6\xFD\x42\xF7\x2C\xBF\x4A"
+                         "\xB2\xA2\xEA\x90\x1F\x73\xD8\x14"
+                         "\xE3\xE7\xF2\x43\xD9\x54\x12\xE1"
+                         "\xC3\x49\xC1\xD2\xFB\xEC\x16\x8F"
+                         "\x91\x90\xFE\xEB\xAF\x2C\xB0\x19"
+                         "\x84\xE6\x58\x63\x96\x5D\x74\x72"
+                         "\xB7\x9D\xA3\x45\xE0\xE7\x80\x19"
+                         "\x1F\x0D\x2F\x0E\x0F\x49\x6C\x22"
+                         "\x6F\x21\x27\xB2\x7D\xB3\x57\x24"
+                         "\xE7\x84\x5D\x68\x65\x1F\x57\xE6"
+                         "\x5F\x35\x4F\x75\xFF\x17\x01\x57"
+                         "\x69\x62\x34\x36",
+               .ilen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C\x74",
+               .klen   = 36,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .result = "\x45\x08\x00\x28\x73\x2C\x00\x00"
+                         "\x40\x06\xE9\xF9\x0A\x01\x06\x12"
+                         "\x0A\x01\x03\x8F\x06\xB8\x80\x23"
+                         "\xDD\x6B\xAF\xBE\xCB\x71\x26\x02"
+                         "\x50\x10\x1F\x64\x6D\x54\x00\x01",
+               .rlen   = 40,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .input  = "\xF2\xD6\x9E\xCD\xBD\x5A\x0D\x5B"
+                         "\x8D\x5E\xF3\x8B\xAD\x4D\xA5\x8D"
+                         "\x1F\x27\x8F\xDE\x98\xEF\x67\x54"
+                         "\x9D\x52\x4A\x30\x18\xD9\xA5\x7F"
+                         "\xF4\xD3\xA3\x1C\xE6\x73\x11\x9E"
+                         "\x45\x16\x26\xC2\x41\x57\x71\xE3"
+                         "\xB7\xEE\xBC\xA6\x14\xC8\x9B\x35",
+               .ilen   = 56,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x49\x33\x3E\x00\x00"
+                         "\x7F\x11\x91\x82\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xCB\x45\x80\x03\x02\x5B"
+                         "\x00\x00\x01\xE0\x00\x1E\x8C\x18"
+                         "\xD6\x57\x59\xD5\x22\x84\xA0\x35"
+                         "\x2C\x71\x47\x5C\x88\x80\x39\x1C"
+                         "\x76\x4D\x6E\x5E\xE0\x49\x6B\x32"
+                         "\x5A\xE2\x70\xC0\x38\x99\x49\x39"
+                         "\x15\x01\x01\x01",
+               .rlen   = 76,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\xFB\xA2\xCA\xD1\x2F\xC1\xF9\xF0"
+                         "\x0D\x3C\xEB\xF3\x05\x41\x0D\xB8"
+                         "\x3D\x77\x84\xB6\x07\x32\x3D\x22"
+                         "\x0F\x24\xB0\xA9\x7D\x54\x18\x28"
+                         "\x00\xCA\xDB\x0F\x68\xD9\x9E\xF0"
+                         "\xE0\xC0\xC8\x9A\xE9\xBE\xA8\x88"
+                         "\x4E\x52\xD6\x5B\xC1\xAF\xD0\x74"
+                         "\x0F\x74\x24\x44\x74\x7B\x5B\x39"
+                         "\xAB\x53\x31\x63\xAA\xD4\x55\x0E"
+                         "\xE5\x16\x09\x75\xCD\xB6\x08\xC5"
+                         "\x76\x91\x89\x60\x97\x63\xB8\xE1"
+                         "\x8C\xAA\x81\xE2",
+               .ilen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C\x74",
+               .klen   = 36,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .result = "\x63\x69\x73\x63\x6F\x01\x72\x75"
+                         "\x6C\x65\x73\x01\x74\x68\x65\x01"
+                         "\x6E\x65\x74\x77\x65\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x01\x74\x68\x65"
+                         "\x74\x65\x63\x68\x6E\x6F\x6C\x6F"
+                         "\x67\x69\x65\x73\x01\x74\x68\x61"
+                         "\x74\x77\x69\x6C\x6C\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x74\x6F\x6D\x6F"
+                         "\x72\x72\x6F\x77\x01\x02\x02\x01",
+               .rlen   = 72,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .input  = "\xD4\xB7\xED\x86\xA1\x77\x7F\x2E"
+                         "\xA1\x3D\x69\x73\xD3\x24\xC6\x9E"
+                         "\x7B\x43\xF8\x26\xFB\x56\x83\x12"
+                         "\x26\x50\x8B\xEB\xD2\xDC\xEB\x18"
+                         "\xD0\xA6\xDF\x10\xE5\x48\x7D\xF0"
+                         "\x74\x11\x3E\x14\xC6\x41\x02\x4E"
+                         "\x3E\x67\x73\xD9\x1A\x62\xEE\x42"
+                         "\x9B\x04\x3A\x10\xE3\xEF\xE6\xB0"
+                         "\x12\xA4\x93\x63\x41\x23\x64\xF8"
+                         "\xC0\xCA\xC5\x87\xF2\x49\xE5\x6B"
+                         "\x11\xE2\x4F\x30\xE4\x4C\xCC\x76",
+               .ilen   = 88,
+       }, {
+               .key    = "\x7D\x77\x3D\x00\xC1\x44\xC5\x25"
+                         "\xAC\x61\x9D\x18\xC8\x4A\x3F\x47"
+                         "\xD9\x66\x42\x67",
+               .klen   = 20,
+               .iv     = "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .result = "\x01\x02\x02\x01",
+               .rlen   = 4,
+               .assoc  = "\x33\x54\x67\xAE\xFF\xFF\xFF\xFF"
+                         "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .alen   = 16,
+               .input  = "\x43\x7F\x86\x6B\xCB\x3F\x69\x9F"
+                         "\xE9\xB0\x82\x2B\xAC\x96\x1C\x45"
+                         "\x04\xBE\xF2\x70",
+               .ilen   = 20,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8\x88",
+               .klen   = 20,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .result = "\x74\x6F\x01\x62\x65\x01\x6F\x72"
+                         "\x01\x6E\x6F\x74\x01\x74\x6F\x01"
+                         "\x62\x65\x00\x01",
+               .rlen   = 20,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .input  = "\x29\xC9\xFC\x69\xA1\x97\xD0\x38"
+                         "\xCC\xDD\x14\xE2\xDD\xFC\xAA\x05"
+                         "\x43\x33\x21\x64\x41\x25\x03\x52"
+                         "\x43\x03\xED\x3C\x6C\x5F\x28\x38"
+                         "\x43\xAF\x8C\x3E",
+               .ilen   = 36,
+       }, {
+               .key    = "\x6C\x65\x67\x61\x6C\x69\x7A\x65"
+                         "\x6D\x61\x72\x69\x6A\x75\x61\x6E"
+                         "\x61\x61\x6E\x64\x64\x6F\x69\x74"
+                         "\x62\x65\x66\x6F\x72\x65\x69\x61"
+                         "\x74\x75\x72\x6E",
+               .klen   = 36,
+               .iv     = "\x33\x30\x21\x69\x67\x65\x74\x6D",
+               .result = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x79\x6B\x69\x63\xFF\xFF\xFF\xFF"
+                         "\xFF\xFF\xFF\xFF\x33\x30\x21\x69"
+                         "\x67\x65\x74\x6D",
+               .alen   = 20,
+               .input  = "\xF9\x7A\xB2\xAA\x35\x6D\x8E\xDC"
+                         "\xE1\x76\x44\xAC\x8C\x78\xE2\x5D"
+                         "\xD2\x4D\xED\xBB\x29\xEB\xF1\xB6"
+                         "\x4A\x27\x4B\x39\xB4\x9C\x3A\x86"
+                         "\x4C\xD3\xD7\x8C\xA4\xAE\x68\xA3"
+                         "\x2B\x42\x45\x8F\xB5\x7D\xBE\x82"
+                         "\x1D\xCC\x63\xB9\xD0\x93\x7B\xA2"
+                         "\x94\x5F\x66\x93\x68\x66\x1A\x32"
+                         "\x9F\xB4\xC0\x53",
+               .ilen   = 68,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E\x43",
+               .klen   = 20,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x3F\x7E\xF6\x42\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\xFB\xA2\xCA\xA8\xC6\xC5\xF9\xF0"
+                         "\xF2\x2C\xA5\x4A\x06\x12\x10\xAD"
+                         "\x3F\x6E\x57\x91\xCF\x1A\xCA\x21"
+                         "\x0D\x11\x7C\xEC\x9C\x35\x79\x17"
+                         "\x65\xAC\xBD\x87\x01\xAD\x79\x84"
+                         "\x5B\xF9\xFE\x3F\xBA\x48\x7B\xC9"
+                         "\x63\x21\x93\x06\x84\xEE\xCA\xDB"
+                         "\x56\x91\x25\x46\xE7\xA9\x5C\x97"
+                         "\x40\xD7\xCB\x05",
+               .ilen   = 68,
+       }, {
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x22\x43\x3C\x64",
+               .klen   = 20,
+               .iv     = "\x48\x55\xEC\x7D\x3A\x23\x4B\xFD",
+               .result = "\x08\x00\xC6\xCD\x02\x00\x07\x00"
+                         "\x61\x62\x63\x64\x65\x66\x67\x68"
+                         "\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70"
+                         "\x71\x72\x73\x74\x01\x02\x02\x01",
+               .rlen   = 32,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x07\x48\x55\xEC\x7D"
+                         "\x3A\x23\x4B\xFD",
+               .alen   = 20,
+               .input  = "\x74\x75\x2E\x8A\xEB\x5D\x87\x3C"
+                         "\xD7\xC0\xF4\xAC\xC3\x6C\x4B\xFF"
+                         "\x84\xB7\xD7\xB9\x8F\x0C\xA8\xB6"
+                         "\xAC\xDA\x68\x94\xBC\x61\x90\x69"
+                         "\xEF\x9C\xBC\x28\xFE\x1B\x56\xA7"
+                         "\xC4\xE0\xD5\x8C\x86\xCD\x2B\xC0",
+               .ilen   = 48,
        }
 };
 
@@ -19975,8 +21457,9 @@ static struct aead_testvec aes_gcm_rfc4543_enc_tv_template[] = {
                          "\x22\x43\x3c\x64",
                .klen   = 20,
                .iv     = zeroed_string,
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
                .input  = "\x45\x00\x00\x30\xda\x3a\x00\x00"
                          "\x80\x01\xdf\x3b\xc0\xa8\x00\x05"
                          "\xc0\xa8\x00\x01\x08\x00\xc6\xcd"
@@ -20005,8 +21488,9 @@ static struct aead_testvec aes_gcm_rfc4543_dec_tv_template[] = {
                          "\x22\x43\x3c\x64",
                .klen   = 20,
                .iv     = zeroed_string,
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
                .input  = "\x45\x00\x00\x30\xda\x3a\x00\x00"
                          "\x80\x01\xdf\x3b\xc0\xa8\x00\x05"
                          "\xc0\xa8\x00\x01\x08\x00\xc6\xcd"
@@ -20031,8 +21515,9 @@ static struct aead_testvec aes_gcm_rfc4543_dec_tv_template[] = {
                          "\x22\x43\x3c\x64",
                .klen   = 20,
                .iv     = zeroed_string,
-               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07",
-               .alen   = 8,
+               .assoc  = "\x00\x00\x43\x21\x00\x00\x00\x07"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
                .input  = "\x45\x00\x00\x30\xda\x3a\x00\x00"
                          "\x80\x01\xdf\x3b\xc0\xa8\x00\x05"
                          "\xc0\xa8\x00\x01\x08\x00\xc6\xcd"
@@ -20182,10 +21667,7 @@ static struct aead_testvec aes_ccm_enc_tv_template[] = {
                          "\xba",
                .rlen   = 33,
        }, {
-               /*
-                * This is the same vector as aes_ccm_rfc4309_enc_tv_template[0]
-                * below but rewritten to use the ccm algorithm directly.
-                */
+               /* This is taken from FIPS CAVS. */
                .key    = "\x83\xac\x54\x66\xc2\xeb\xe5\x05"
                          "\x2e\x01\xd1\xfc\x5d\x82\x66\x2e",
                .klen   = 16,
@@ -20203,16 +21685,152 @@ static struct aead_testvec aes_ccm_enc_tv_template[] = {
                          "\xda\x24\xea\xd9\xa1\x39\x98\xfd"
                          "\xa4\xbe\xd9\xf2\x1a\x6d\x22\xa8",
                .rlen   = 48,
-       }
-};
-
-static struct aead_testvec aes_ccm_dec_tv_template[] = {
-       { /* From RFC 3610 */
-               .key    = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
-                         "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
+       }, {
+               .key    = "\x1e\x2c\x7e\x01\x41\x9a\xef\xc0"
+                         "\x0d\x58\x96\x6e\x5c\xa2\x4b\xd3",
                .klen   = 16,
-               .iv     = "\x01\x00\x00\x00\x03\x02\x01\x00"
-                         "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
+               .iv     = "\x03\x4f\xa3\x19\xd3\x01\x5a\xd8"
+                         "\x30\x60\x15\x56\x00\x00\x00\x00",
+               .assoc  = "\xda\xe6\x28\x9c\x45\x2d\xfd\x63"
+                         "\x5e\xda\x4c\xb6\xe6\xfc\xf9\xb7"
+                         "\x0c\x56\xcb\xe4\xe0\x05\x7a\xe1"
+                         "\x0a\x63\x09\x78\xbc\x2c\x55\xde",
+               .alen   = 32,
+               .input  = "\x87\xa3\x36\xfd\x96\xb3\x93\x78"
+                         "\xa9\x28\x63\xba\x12\xa3\x14\x85"
+                         "\x57\x1e\x06\xc9\x7b\x21\xef\x76"
+                         "\x7f\x38\x7e\x8e\x29\xa4\x3e\x7e",
+               .ilen   = 32,
+               .result = "\x8a\x1e\x11\xf0\x02\x6b\xe2\x19"
+                         "\xfc\x70\xc4\x6d\x8e\xb7\x99\xab"
+                         "\xc5\x4b\xa2\xac\xd3\xf3\x48\xff"
+                         "\x3b\xb5\xce\x53\xef\xde\xbb\x02"
+                         "\xa9\x86\x15\x6c\x13\xfe\xda\x0a"
+                         "\x22\xb8\x29\x3d\xd8\x39\x9a\x23",
+               .rlen   = 48,
+       }, {
+               .key    = "\xf4\x6b\xc2\x75\x62\xfe\xb4\xe1"
+                         "\xa3\xf0\xff\xdd\x4e\x4b\x12\x75"
+                         "\x53\x14\x73\x66\x8d\x88\xf6\x80",
+               .klen   = 24,
+               .iv     = "\x03\xa0\x20\x35\x26\xf2\x21\x8d"
+                         "\x50\x20\xda\xe2\x00\x00\x00\x00",
+               .assoc  = "\x5b\x9e\x13\x67\x02\x5e\xef\xc1"
+                         "\x6c\xf9\xd7\x1e\x52\x8f\x7a\x47"
+                         "\xe9\xd4\xcf\x20\x14\x6e\xf0\x2d"
+                         "\xd8\x9e\x2b\x56\x10\x23\x56\xe7",
+               .alen   = 32,
+               .result = "\x36\xea\x7a\x70\x08\xdc\x6a\xbc"
+                         "\xad\x0c\x7a\x63\xf6\x61\xfd\x9b",
+               .rlen   = 16,
+       }, {
+               .key    = "\x56\xdf\x5c\x8f\x26\x3f\x0e\x42"
+                         "\xef\x7a\xd3\xce\xfc\x84\x60\x62"
+                         "\xca\xb4\x40\xaf\x5f\xc9\xc9\x01",
+               .klen   = 24,
+               .iv     = "\x03\xd6\x3c\x8c\x86\x84\xb6\xcd"
+                         "\xef\x09\x2e\x94\x00\x00\x00\x00",
+               .assoc  = "\x02\x65\x78\x3c\xe9\x21\x30\x91"
+                         "\xb1\xb9\xda\x76\x9a\x78\x6d\x95"
+                         "\xf2\x88\x32\xa3\xf2\x50\xcb\x4c"
+                         "\xe3\x00\x73\x69\x84\x69\x87\x79",
+               .alen   = 32,
+               .input  = "\x9f\xd2\x02\x4b\x52\x49\x31\x3c"
+                         "\x43\x69\x3a\x2d\x8e\x70\xad\x7e"
+                         "\xe0\xe5\x46\x09\x80\x89\x13\xb2"
+                         "\x8c\x8b\xd9\x3f\x86\xfb\xb5\x6b",
+               .ilen   = 32,
+               .result = "\x39\xdf\x7c\x3c\x5a\x29\xb9\x62"
+                         "\x5d\x51\xc2\x16\xd8\xbd\x06\x9f"
+                         "\x9b\x6a\x09\x70\xc1\x51\x83\xc2"
+                         "\x66\x88\x1d\x4f\x9a\xda\xe0\x1e"
+                         "\xc7\x79\x11\x58\xe5\x6b\x20\x40"
+                         "\x7a\xea\x46\x42\x8b\xe4\x6f\xe1",
+               .rlen   = 48,
+       }, {
+               .key    = "\xe0\x8d\x99\x71\x60\xd7\x97\x1a"
+                         "\xbd\x01\x99\xd5\x8a\xdf\x71\x3a"
+                         "\xd3\xdf\x24\x4b\x5e\x3d\x4b\x4e"
+                         "\x30\x7a\xb9\xd8\x53\x0a\x5e\x2b",
+               .klen   = 32,
+               .iv     = "\x03\x1e\x29\x91\xad\x8e\xc1\x53"
+                         "\x0a\xcf\x2d\xbe\x00\x00\x00\x00",
+               .assoc  = "\x19\xb6\x1f\x57\xc4\xf3\xf0\x8b"
+                         "\x78\x2b\x94\x02\x29\x0f\x42\x27"
+                         "\x6b\x75\xcb\x98\x34\x08\x7e\x79"
+                         "\xe4\x3e\x49\x0d\x84\x8b\x22\x87",
+               .alen   = 32,
+               .input  = "\xe1\xd9\xd8\x13\xeb\x3a\x75\x3f"
+                         "\x9d\xbd\x5f\x66\xbe\xdc\xbb\x66"
+                         "\xbf\x17\x99\x62\x4a\x39\x27\x1f"
+                         "\x1d\xdc\x24\xae\x19\x2f\x98\x4c",
+               .ilen   = 32,
+               .result = "\x19\xb8\x61\x33\x45\x2b\x43\x96"
+                         "\x6f\x51\xd0\x20\x30\x7d\x9b\xc6"
+                         "\x26\x3d\xf8\xc9\x65\x16\xa8\x9f"
+                         "\xf0\x62\x17\x34\xf2\x1e\x8d\x75"
+                         "\x4e\x13\xcc\xc0\xc3\x2a\x54\x2d",
+               .rlen   = 40,
+       }, {
+               .key    = "\x7c\xc8\x18\x3b\x8d\x99\xe0\x7c"
+                         "\x45\x41\xb8\xbd\x5c\xa7\xc2\x32"
+                         "\x8a\xb8\x02\x59\xa4\xfe\xa9\x2c"
+                         "\x09\x75\x9a\x9b\x3c\x9b\x27\x39",
+               .klen   = 32,
+               .iv     = "\x03\xf9\xd9\x4e\x63\xb5\x3d\x9d"
+                         "\x43\xf6\x1e\x50",
+               .assoc  = "\x57\xf5\x6b\x8b\x57\x5c\x3d\x3b"
+                         "\x13\x02\x01\x0c\x83\x4c\x96\x35"
+                         "\x8e\xd6\x39\xcf\x7d\x14\x9b\x94"
+                         "\xb0\x39\x36\xe6\x8f\x57\xe0\x13",
+               .alen   = 32,
+               .input  = "\x3b\x6c\x29\x36\xb6\xef\x07\xa6"
+                         "\x83\x72\x07\x4f\xcf\xfa\x66\x89"
+                         "\x5f\xca\xb1\xba\xd5\x8f\x2c\x27"
+                         "\x30\xdb\x75\x09\x93\xd4\x65\xe4",
+               .ilen   = 32,
+               .result = "\xb0\x88\x5a\x33\xaa\xe5\xc7\x1d"
+                         "\x85\x23\xc7\xc6\x2f\xf4\x1e\x3d"
+                         "\xcc\x63\x44\x25\x07\x78\x4f\x9e"
+                         "\x96\xb8\x88\xeb\xbc\x48\x1f\x06"
+                         "\x39\xaf\x39\xac\xd8\x4a\x80\x39"
+                         "\x7b\x72\x8a\xf7",
+               .rlen   = 44,
+       }, {
+               .key    = "\xab\xd0\xe9\x33\x07\x26\xe5\x83"
+                         "\x8c\x76\x95\xd4\xb6\xdc\xf3\x46"
+                         "\xf9\x8f\xad\xe3\x02\x13\x83\x77"
+                         "\x3f\xb0\xf1\xa1\xa1\x22\x0f\x2b",
+               .klen   = 32,
+               .iv     = "\x03\x24\xa7\x8b\x07\xcb\xcc\x0e"
+                         "\xe6\x33\xbf\xf5\x00\x00\x00\x00",
+               .assoc  = "\xd4\xdb\x30\x1d\x03\xfe\xfd\x5f"
+                         "\x87\xd4\x8c\xb6\xb6\xf1\x7a\x5d"
+                         "\xab\x90\x65\x8d\x8e\xca\x4d\x4f"
+                         "\x16\x0c\x40\x90\x4b\xc7\x36\x73",
+               .alen   = 32,
+               .input  = "\xf5\xc6\x7d\x48\xc1\xb7\xe6\x92"
+                         "\x97\x5a\xca\xc4\xa9\x6d\xf9\x3d"
+                         "\x6c\xde\xbc\xf1\x90\xea\x6a\xb2"
+                         "\x35\x86\x36\xaf\x5c\xfe\x4b\x3a",
+               .ilen   = 32,
+               .result = "\x83\x6f\x40\x87\x72\xcf\xc1\x13"
+                         "\xef\xbb\x80\x21\x04\x6c\x58\x09"
+                         "\x07\x1b\xfc\xdf\xc0\x3f\x5b\xc7"
+                         "\xe0\x79\xa8\x6e\x71\x7c\x3f\xcf"
+                         "\x5c\xda\xb2\x33\xe5\x13\xe2\x0d"
+                         "\x74\xd1\xef\xb5\x0f\x3a\xb5\xf8",
+               .rlen   = 48,
+       }
+};
+
+static struct aead_testvec aes_ccm_dec_tv_template[] = {
+       { /* From RFC 3610 */
+               .key    = "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
+                         "\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
+               .klen   = 16,
+               .iv     = "\x01\x00\x00\x00\x03\x02\x01\x00"
+                         "\xa0\xa1\xa2\xa3\xa4\xa5\x00\x00",
                .assoc  = "\x00\x01\x02\x03\x04\x05\x06\x07",
                .alen   = 8,
                .input  = "\x58\x8c\x97\x9a\x61\xc6\x63\xd2"
@@ -20332,257 +21950,84 @@ static struct aead_testvec aes_ccm_dec_tv_template[] = {
                          "\x8e\x5e\x67\x01\xc9\x17\x87\x65"
                          "\x98\x09\xd6\x7d\xbe\xdd\x18",
                .rlen   = 23,
-       },
-};
-
-/*
- * rfc4309 refers to section 8 of rfc3610 for test vectors, but they all
- * use a 13-byte nonce, we only support an 11-byte nonce. Similarly, all of
- * Special Publication 800-38C's test vectors also use nonce lengths our
- * implementation doesn't support. The following are taken from fips cavs
- * fax files on hand at Red Hat.
- *
- * nb: actual key lengths are (klen - 3), the last 3 bytes are actually
- * part of the nonce which combine w/the iv, but need to be input this way.
- */
-static struct aead_testvec aes_ccm_rfc4309_enc_tv_template[] = {
-       {
-               .key    = "\x83\xac\x54\x66\xc2\xeb\xe5\x05"
-                         "\x2e\x01\xd1\xfc\x5d\x82\x66\x2e"
-                         "\x96\xac\x59",
-               .klen   = 19,
-               .iv     = "\x30\x07\xa1\xe2\xa2\xc7\x55\x24",
+       }, {
+               /* This is taken from FIPS CAVS. */
+               .key    = "\xab\x2f\x8a\x74\xb7\x1c\xd2\xb1"
+                         "\xff\x80\x2e\x48\x7d\x82\xf8\xb9",
+               .klen   = 16,
+               .iv     = "\x03\xc6\xfb\x7d\x80\x0d\x13\xab"
+                         "\xd8\xa6\xb2\xd8\x00\x00\x00\x00",
                .alen   = 0,
-               .input  = "\x19\xc8\x81\xf6\xe9\x86\xff\x93"
-                         "\x0b\x78\x67\xe5\xbb\xb7\xfc\x6e"
-                         "\x83\x77\xb3\xa6\x0c\x8c\x9f\x9c"
-                         "\x35\x2e\xad\xe0\x62\xf9\x91\xa1",
-               .ilen   = 32,
-               .result = "\xab\x6f\xe1\x69\x1d\x19\x99\xa8"
-                         "\x92\xa0\xc4\x6f\x7e\xe2\x8b\xb1"
-                         "\x70\xbb\x8c\xa6\x4c\x6e\x97\x8a"
-                         "\x57\x2b\xbe\x5d\x98\xa6\xb1\x32"
-                         "\xda\x24\xea\xd9\xa1\x39\x98\xfd"
-                         "\xa4\xbe\xd9\xf2\x1a\x6d\x22\xa8",
-               .rlen   = 48,
+               .input  = "\xd5\xe8\x93\x9f\xc7\x89\x2e\x2b",
+               .ilen   = 8,
+               .result = "\x00",
+               .rlen   = 0,
+               .novrfy = 1,
        }, {
-               .key    = "\x1e\x2c\x7e\x01\x41\x9a\xef\xc0"
-                         "\x0d\x58\x96\x6e\x5c\xa2\x4b\xd3"
-                         "\x4f\xa3\x19",
-               .klen   = 19,
-               .iv     = "\xd3\x01\x5a\xd8\x30\x60\x15\x56",
-               .assoc  = "\xda\xe6\x28\x9c\x45\x2d\xfd\x63"
-                         "\x5e\xda\x4c\xb6\xe6\xfc\xf9\xb7"
-                         "\x0c\x56\xcb\xe4\xe0\x05\x7a\xe1"
-                         "\x0a\x63\x09\x78\xbc\x2c\x55\xde",
-               .alen   = 32,
-               .input  = "\x87\xa3\x36\xfd\x96\xb3\x93\x78"
-                         "\xa9\x28\x63\xba\x12\xa3\x14\x85"
-                         "\x57\x1e\x06\xc9\x7b\x21\xef\x76"
-                         "\x7f\x38\x7e\x8e\x29\xa4\x3e\x7e",
-               .ilen   = 32,
-               .result = "\x8a\x1e\x11\xf0\x02\x6b\xe2\x19"
-                         "\xfc\x70\xc4\x6d\x8e\xb7\x99\xab"
-                         "\xc5\x4b\xa2\xac\xd3\xf3\x48\xff"
-                         "\x3b\xb5\xce\x53\xef\xde\xbb\x02"
-                         "\xa9\x86\x15\x6c\x13\xfe\xda\x0a"
-                         "\x22\xb8\x29\x3d\xd8\x39\x9a\x23",
-               .rlen   = 48,
+               .key    = "\xab\x2f\x8a\x74\xb7\x1c\xd2\xb1"
+                         "\xff\x80\x2e\x48\x7d\x82\xf8\xb9",
+               .klen   = 16,
+               .iv     = "\x03\xaf\x94\x87\x78\x35\x82\x81"
+                         "\x7f\x88\x94\x68\x00\x00\x00\x00",
+               .alen   = 0,
+               .input  = "\x41\x3c\xb8\x87\x73\xcb\xf3\xf3",
+               .ilen   = 8,
+               .result = "\x00",
+               .rlen   = 0,
        }, {
-               .key    = "\xf4\x6b\xc2\x75\x62\xfe\xb4\xe1"
-                         "\xa3\xf0\xff\xdd\x4e\x4b\x12\x75"
-                         "\x53\x14\x73\x66\x8d\x88\xf6\x80"
-                         "\xa0\x20\x35",
-               .klen   = 27,
-               .iv     = "\x26\xf2\x21\x8d\x50\x20\xda\xe2",
-               .assoc  = "\x5b\x9e\x13\x67\x02\x5e\xef\xc1"
-                         "\x6c\xf9\xd7\x1e\x52\x8f\x7a\x47"
-                         "\xe9\xd4\xcf\x20\x14\x6e\xf0\x2d"
-                         "\xd8\x9e\x2b\x56\x10\x23\x56\xe7",
+               .key    = "\x61\x0e\x8c\xae\xe3\x23\xb6\x38"
+                         "\x76\x1c\xf6\x3a\x67\xa3\x9c\xd8",
+               .klen   = 16,
+               .iv     = "\x03\xc6\xfb\x7d\x80\x0d\x13\xab"
+                         "\xd8\xa6\xb2\xd8\x00\x00\x00\x00",
+               .assoc  = "\xf3\x94\x87\x78\x35\x82\x81\x7f"
+                         "\x88\x94\x68\xb1\x78\x6b\x2b\xd6"
+                         "\x04\x1f\x4e\xed\x78\xd5\x33\x66"
+                         "\xd8\x94\x99\x91\x81\x54\x62\x57",
                .alen   = 32,
-               .ilen   = 0,
-               .result = "\x36\xea\x7a\x70\x08\xdc\x6a\xbc"
-                         "\xad\x0c\x7a\x63\xf6\x61\xfd\x9b",
-               .rlen   = 16,
+               .input  = "\xf0\x7c\x29\x02\xae\x1c\x2f\x55"
+                         "\xd0\xd1\x3d\x1a\xa3\x6d\xe4\x0a"
+                         "\x86\xb0\x87\x6b\x62\x33\x8c\x34"
+                         "\xce\xab\x57\xcc\x79\x0b\xe0\x6f"
+                         "\x5c\x3e\x48\x1f\x6c\x46\xf7\x51"
+                         "\x8b\x84\x83\x2a\xc1\x05\xb8\xc5",
+               .ilen   = 48,
+               .result = "\x50\x82\x3e\x07\xe2\x1e\xb6\xfb"
+                         "\x33\xe4\x73\xce\xd2\xfb\x95\x79"
+                         "\xe8\xb4\xb5\x77\x11\x10\x62\x6f"
+                         "\x6a\x82\xd1\x13\xec\xf5\xd0\x48",
+               .rlen   = 32,
+               .novrfy = 1,
        }, {
-               .key    = "\x56\xdf\x5c\x8f\x26\x3f\x0e\x42"
-                         "\xef\x7a\xd3\xce\xfc\x84\x60\x62"
-                         "\xca\xb4\x40\xaf\x5f\xc9\xc9\x01"
-                         "\xd6\x3c\x8c",
-               .klen   = 27,
-               .iv     = "\x86\x84\xb6\xcd\xef\x09\x2e\x94",
-               .assoc  = "\x02\x65\x78\x3c\xe9\x21\x30\x91"
-                         "\xb1\xb9\xda\x76\x9a\x78\x6d\x95"
-                         "\xf2\x88\x32\xa3\xf2\x50\xcb\x4c"
-                         "\xe3\x00\x73\x69\x84\x69\x87\x79",
+               .key    = "\x61\x0e\x8c\xae\xe3\x23\xb6\x38"
+                         "\x76\x1c\xf6\x3a\x67\xa3\x9c\xd8",
+               .klen   = 16,
+               .iv     = "\x03\x05\xe0\xc9\x0f\xed\x34\xea"
+                         "\x97\xd4\x3b\xdf\x00\x00\x00\x00",
+               .assoc  = "\x49\x5c\x50\x1f\x1d\x94\xcc\x81"
+                         "\xba\xb7\xb6\x03\xaf\xa5\xc1\xa1"
+                         "\xd8\x5c\x42\x68\xe0\x6c\xda\x89"
+                         "\x05\xac\x56\xac\x1b\x2a\xd3\x86",
                .alen   = 32,
-               .input  = "\x9f\xd2\x02\x4b\x52\x49\x31\x3c"
-                         "\x43\x69\x3a\x2d\x8e\x70\xad\x7e"
-                         "\xe0\xe5\x46\x09\x80\x89\x13\xb2"
-                         "\x8c\x8b\xd9\x3f\x86\xfb\xb5\x6b",
-               .ilen   = 32,
-               .result = "\x39\xdf\x7c\x3c\x5a\x29\xb9\x62"
-                         "\x5d\x51\xc2\x16\xd8\xbd\x06\x9f"
-                         "\x9b\x6a\x09\x70\xc1\x51\x83\xc2"
-                         "\x66\x88\x1d\x4f\x9a\xda\xe0\x1e"
-                         "\xc7\x79\x11\x58\xe5\x6b\x20\x40"
-                         "\x7a\xea\x46\x42\x8b\xe4\x6f\xe1",
-               .rlen   = 48,
-       }, {
-               .key    = "\xe0\x8d\x99\x71\x60\xd7\x97\x1a"
-                         "\xbd\x01\x99\xd5\x8a\xdf\x71\x3a"
-                         "\xd3\xdf\x24\x4b\x5e\x3d\x4b\x4e"
-                         "\x30\x7a\xb9\xd8\x53\x0a\x5e\x2b"
-                         "\x1e\x29\x91",
-               .klen   = 35,
-               .iv     = "\xad\x8e\xc1\x53\x0a\xcf\x2d\xbe",
-               .assoc  = "\x19\xb6\x1f\x57\xc4\xf3\xf0\x8b"
-                         "\x78\x2b\x94\x02\x29\x0f\x42\x27"
-                         "\x6b\x75\xcb\x98\x34\x08\x7e\x79"
-                         "\xe4\x3e\x49\x0d\x84\x8b\x22\x87",
-               .alen   = 32,
-               .input  = "\xe1\xd9\xd8\x13\xeb\x3a\x75\x3f"
-                         "\x9d\xbd\x5f\x66\xbe\xdc\xbb\x66"
-                         "\xbf\x17\x99\x62\x4a\x39\x27\x1f"
-                         "\x1d\xdc\x24\xae\x19\x2f\x98\x4c",
-               .ilen   = 32,
-               .result = "\x19\xb8\x61\x33\x45\x2b\x43\x96"
-                         "\x6f\x51\xd0\x20\x30\x7d\x9b\xc6"
-                         "\x26\x3d\xf8\xc9\x65\x16\xa8\x9f"
-                         "\xf0\x62\x17\x34\xf2\x1e\x8d\x75"
-                         "\x4e\x13\xcc\xc0\xc3\x2a\x54\x2d",
-               .rlen   = 40,
-       }, {
-               .key    = "\x7c\xc8\x18\x3b\x8d\x99\xe0\x7c"
-                         "\x45\x41\xb8\xbd\x5c\xa7\xc2\x32"
-                         "\x8a\xb8\x02\x59\xa4\xfe\xa9\x2c"
-                         "\x09\x75\x9a\x9b\x3c\x9b\x27\x39"
-                         "\xf9\xd9\x4e",
-               .klen   = 35,
-               .iv     = "\x63\xb5\x3d\x9d\x43\xf6\x1e\x50",
-               .assoc  = "\x57\xf5\x6b\x8b\x57\x5c\x3d\x3b"
-                         "\x13\x02\x01\x0c\x83\x4c\x96\x35"
-                         "\x8e\xd6\x39\xcf\x7d\x14\x9b\x94"
-                         "\xb0\x39\x36\xe6\x8f\x57\xe0\x13",
-               .alen   = 32,
-               .input  = "\x3b\x6c\x29\x36\xb6\xef\x07\xa6"
-                         "\x83\x72\x07\x4f\xcf\xfa\x66\x89"
-                         "\x5f\xca\xb1\xba\xd5\x8f\x2c\x27"
-                         "\x30\xdb\x75\x09\x93\xd4\x65\xe4",
-               .ilen   = 32,
-               .result = "\xb0\x88\x5a\x33\xaa\xe5\xc7\x1d"
-                         "\x85\x23\xc7\xc6\x2f\xf4\x1e\x3d"
-                         "\xcc\x63\x44\x25\x07\x78\x4f\x9e"
-                         "\x96\xb8\x88\xeb\xbc\x48\x1f\x06"
-                         "\x39\xaf\x39\xac\xd8\x4a\x80\x39"
-                         "\x7b\x72\x8a\xf7",
-               .rlen   = 44,
-       }, {
-               .key    = "\xab\xd0\xe9\x33\x07\x26\xe5\x83"
-                         "\x8c\x76\x95\xd4\xb6\xdc\xf3\x46"
-                         "\xf9\x8f\xad\xe3\x02\x13\x83\x77"
-                         "\x3f\xb0\xf1\xa1\xa1\x22\x0f\x2b"
-                         "\x24\xa7\x8b",
-               .klen   = 35,
-               .iv     = "\x07\xcb\xcc\x0e\xe6\x33\xbf\xf5",
-               .assoc  = "\xd4\xdb\x30\x1d\x03\xfe\xfd\x5f"
-                         "\x87\xd4\x8c\xb6\xb6\xf1\x7a\x5d"
-                         "\xab\x90\x65\x8d\x8e\xca\x4d\x4f"
-                         "\x16\x0c\x40\x90\x4b\xc7\x36\x73",
-               .alen   = 32,
-               .input  = "\xf5\xc6\x7d\x48\xc1\xb7\xe6\x92"
-                         "\x97\x5a\xca\xc4\xa9\x6d\xf9\x3d"
-                         "\x6c\xde\xbc\xf1\x90\xea\x6a\xb2"
-                         "\x35\x86\x36\xaf\x5c\xfe\x4b\x3a",
-               .ilen   = 32,
-               .result = "\x83\x6f\x40\x87\x72\xcf\xc1\x13"
-                         "\xef\xbb\x80\x21\x04\x6c\x58\x09"
-                         "\x07\x1b\xfc\xdf\xc0\x3f\x5b\xc7"
-                         "\xe0\x79\xa8\x6e\x71\x7c\x3f\xcf"
-                         "\x5c\xda\xb2\x33\xe5\x13\xe2\x0d"
-                         "\x74\xd1\xef\xb5\x0f\x3a\xb5\xf8",
-               .rlen   = 48,
-       },
-};
-
-static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
-       {
-               .key    = "\xab\x2f\x8a\x74\xb7\x1c\xd2\xb1"
-                         "\xff\x80\x2e\x48\x7d\x82\xf8\xb9"
-                         "\xc6\xfb\x7d",
-               .klen   = 19,
-               .iv     = "\x80\x0d\x13\xab\xd8\xa6\xb2\xd8",
-               .alen   = 0,
-               .input  = "\xd5\xe8\x93\x9f\xc7\x89\x2e\x2b",
-               .ilen   = 8,
-               .result = "\x00",
-               .rlen   = 0,
-               .novrfy = 1,
-       }, {
-               .key    = "\xab\x2f\x8a\x74\xb7\x1c\xd2\xb1"
-                         "\xff\x80\x2e\x48\x7d\x82\xf8\xb9"
-                         "\xaf\x94\x87",
-               .klen   = 19,
-               .iv     = "\x78\x35\x82\x81\x7f\x88\x94\x68",
-               .alen   = 0,
-               .input  = "\x41\x3c\xb8\x87\x73\xcb\xf3\xf3",
-               .ilen   = 8,
-               .result = "\x00",
-               .rlen   = 0,
-       }, {
-               .key    = "\x61\x0e\x8c\xae\xe3\x23\xb6\x38"
-                         "\x76\x1c\xf6\x3a\x67\xa3\x9c\xd8"
-                         "\xc6\xfb\x7d",
-               .klen   = 19,
-               .iv     = "\x80\x0d\x13\xab\xd8\xa6\xb2\xd8",
-               .assoc  = "\xf3\x94\x87\x78\x35\x82\x81\x7f"
-                         "\x88\x94\x68\xb1\x78\x6b\x2b\xd6"
-                         "\x04\x1f\x4e\xed\x78\xd5\x33\x66"
-                         "\xd8\x94\x99\x91\x81\x54\x62\x57",
-               .alen   = 32,
-               .input  = "\xf0\x7c\x29\x02\xae\x1c\x2f\x55"
-                         "\xd0\xd1\x3d\x1a\xa3\x6d\xe4\x0a"
-                         "\x86\xb0\x87\x6b\x62\x33\x8c\x34"
-                         "\xce\xab\x57\xcc\x79\x0b\xe0\x6f"
-                         "\x5c\x3e\x48\x1f\x6c\x46\xf7\x51"
-                         "\x8b\x84\x83\x2a\xc1\x05\xb8\xc5",
-               .ilen   = 48,
-               .result = "\x50\x82\x3e\x07\xe2\x1e\xb6\xfb"
-                         "\x33\xe4\x73\xce\xd2\xfb\x95\x79"
-                         "\xe8\xb4\xb5\x77\x11\x10\x62\x6f"
-                         "\x6a\x82\xd1\x13\xec\xf5\xd0\x48",
-               .rlen   = 32,
-               .novrfy = 1,
-       }, {
-               .key    = "\x61\x0e\x8c\xae\xe3\x23\xb6\x38"
-                         "\x76\x1c\xf6\x3a\x67\xa3\x9c\xd8"
-                         "\x05\xe0\xc9",
-               .klen   = 19,
-               .iv     = "\x0f\xed\x34\xea\x97\xd4\x3b\xdf",
-               .assoc  = "\x49\x5c\x50\x1f\x1d\x94\xcc\x81"
-                         "\xba\xb7\xb6\x03\xaf\xa5\xc1\xa1"
-                         "\xd8\x5c\x42\x68\xe0\x6c\xda\x89"
-                         "\x05\xac\x56\xac\x1b\x2a\xd3\x86",
-               .alen   = 32,
-               .input  = "\x39\xbe\x7d\x15\x62\x77\xf3\x3c"
-                         "\xad\x83\x52\x6d\x71\x03\x25\x1c"
-                         "\xed\x81\x3a\x9a\x16\x7d\x19\x80"
-                         "\x72\x04\x72\xd0\xf6\xff\x05\x0f"
-                         "\xb7\x14\x30\x00\x32\x9e\xa0\xa6"
-                         "\x9e\x5a\x18\xa1\xb8\xfe\xdb\xd3",
-               .ilen   = 48,
-               .result = "\x75\x05\xbe\xc2\xd9\x1e\xde\x60"
-                         "\x47\x3d\x8c\x7d\xbd\xb5\xd9\xb7"
-                         "\xf2\xae\x61\x05\x8f\x82\x24\x3f"
-                         "\x9c\x67\x91\xe1\x38\x4f\xe4\x0c",
-               .rlen   = 32,
+               .input  = "\x39\xbe\x7d\x15\x62\x77\xf3\x3c"
+                         "\xad\x83\x52\x6d\x71\x03\x25\x1c"
+                         "\xed\x81\x3a\x9a\x16\x7d\x19\x80"
+                         "\x72\x04\x72\xd0\xf6\xff\x05\x0f"
+                         "\xb7\x14\x30\x00\x32\x9e\xa0\xa6"
+                         "\x9e\x5a\x18\xa1\xb8\xfe\xdb\xd3",
+               .ilen   = 48,
+               .result = "\x75\x05\xbe\xc2\xd9\x1e\xde\x60"
+                         "\x47\x3d\x8c\x7d\xbd\xb5\xd9\xb7"
+                         "\xf2\xae\x61\x05\x8f\x82\x24\x3f"
+                         "\x9c\x67\x91\xe1\x38\x4f\xe4\x0c",
+               .rlen   = 32,
        }, {
                .key    = "\x39\xbb\xa7\xbe\x59\x97\x9e\x73"
                          "\xa2\xbc\x6b\x98\xd7\x75\x7f\xe3"
-                         "\xa4\x48\x93\x39\x26\x71\x4a\xc6"
-                         "\xee\x49\x83",
-               .klen   = 27,
-               .iv     = "\xe9\xa9\xff\xe9\x57\xba\xfd\x9e",
+                         "\xa4\x48\x93\x39\x26\x71\x4a\xc6",
+               .klen   = 24,
+               .iv     = "\x03\xee\x49\x83\xe9\xa9\xff\xe9"
+                         "\x57\xba\xfd\x9e\x00\x00\x00\x00",
                .assoc  = "\x44\xa6\x2c\x05\xe9\xe1\x43\xb1"
                          "\x58\x7c\xf2\x5c\x6d\x39\x0a\x64"
                          "\xa4\xf0\x13\x05\xd1\x77\x99\x67"
@@ -20595,10 +22040,10 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
        }, {
                .key    = "\x58\x5d\xa0\x96\x65\x1a\x04\xd7"
                          "\x96\xe5\xc5\x68\xaa\x95\x35\xe0"
-                         "\x29\xa0\xba\x9e\x48\x78\xd1\xba"
-                         "\xee\x49\x83",
-               .klen   = 27,
-               .iv     = "\xe9\xa9\xff\xe9\x57\xba\xfd\x9e",
+                         "\x29\xa0\xba\x9e\x48\x78\xd1\xba",
+               .klen   = 24,
+               .iv     = "\x03\xee\x49\x83\xe9\xa9\xff\xe9"
+                         "\x57\xba\xfd\x9e\x00\x00\x00\x00",
                .assoc  = "\x44\xa6\x2c\x05\xe9\xe1\x43\xb1"
                          "\x58\x7c\xf2\x5c\x6d\x39\x0a\x64"
                          "\xa4\xf0\x13\x05\xd1\x77\x99\x67"
@@ -20618,10 +22063,10 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
        }, {
                .key    = "\x58\x5d\xa0\x96\x65\x1a\x04\xd7"
                          "\x96\xe5\xc5\x68\xaa\x95\x35\xe0"
-                         "\x29\xa0\xba\x9e\x48\x78\xd1\xba"
-                         "\xd1\xfc\x57",
-               .klen   = 27,
-               .iv     = "\x9c\xfe\xb8\x9c\xad\x71\xaa\x1f",
+                         "\x29\xa0\xba\x9e\x48\x78\xd1\xba",
+               .klen   = 24,
+               .iv     = "\x03\xd1\xfc\x57\x9c\xfe\xb8\x9c"
+                         "\xad\x71\xaa\x1f\x00\x00\x00\x00",
                .assoc  = "\x86\x67\xa5\xa9\x14\x5f\x0d\xc6"
                          "\xff\x14\xc7\x44\xbf\x6c\x3a\xc3"
                          "\xff\xb6\x81\xbd\xe2\xd5\x06\xc7"
@@ -20644,10 +22089,10 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
                .key    = "\xa4\x4b\x54\x29\x0a\xb8\x6d\x01"
                          "\x5b\x80\x2a\xcf\x25\xc4\xb7\x5c"
                          "\x20\x2c\xad\x30\xc2\x2b\x41\xfb"
-                         "\x0e\x85\xbc\x33\xad\x0f\x2b\xff"
-                         "\xee\x49\x83",
-               .klen   = 35,
-               .iv     = "\xe9\xa9\xff\xe9\x57\xba\xfd\x9e",
+                         "\x0e\x85\xbc\x33\xad\x0f\x2b\xff",
+               .klen   = 32,
+               .iv     = "\x03\xee\x49\x83\xe9\xa9\xff\xe9"
+                         "\x57\xba\xfd\x9e\x00\x00\x00\x00",
                .alen   = 0,
                .input  = "\x1f\xb8\x8f\xa3\xdd\x54\x00\xf2",
                .ilen   = 8,
@@ -20657,10 +22102,10 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
                .key    = "\x39\xbb\xa7\xbe\x59\x97\x9e\x73"
                          "\xa2\xbc\x6b\x98\xd7\x75\x7f\xe3"
                          "\xa4\x48\x93\x39\x26\x71\x4a\xc6"
-                         "\xae\x8f\x11\x4c\xc2\x9c\x4a\xbb"
-                         "\x85\x34\x66",
-               .klen   = 35,
-               .iv     = "\x42\xc8\x92\x0f\x36\x58\xe0\x6b",
+                         "\xae\x8f\x11\x4c\xc2\x9c\x4a\xbb",
+               .klen   = 32,
+               .iv     = "\x03\x85\x34\x66\x42\xc8\x92\x0f"
+                         "\x36\x58\xe0\x6b\x00\x00\x00\x00",
                .alen   = 0,
                .input  = "\x48\x01\x5e\x02\x24\x04\x66\x47"
                          "\xa1\xea\x6f\xaf\xe8\xfc\xfb\xdd"
@@ -20679,10 +22124,10 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
                .key    = "\x58\x5d\xa0\x96\x65\x1a\x04\xd7"
                          "\x96\xe5\xc5\x68\xaa\x95\x35\xe0"
                          "\x29\xa0\xba\x9e\x48\x78\xd1\xba"
-                         "\x0d\x1a\x53\x3b\xb5\xe3\xf8\x8b"
-                         "\xcf\x76\x3f",
-               .klen   = 35,
-               .iv     = "\xd9\x95\x75\x8f\x44\x89\x40\x7b",
+                         "\x0d\x1a\x53\x3b\xb5\xe3\xf8\x8b",
+               .klen   = 32,
+               .iv     = "\x03\xcf\x76\x3f\xd9\x95\x75\x8f"
+                         "\x44\x89\x40\x7b\x00\x00\x00\x00",
                .assoc  = "\x8f\x86\x6c\x4d\x1d\xc5\x39\x88"
                          "\xc8\xf3\x5c\x52\x10\x63\x6f\x2b"
                          "\x8a\x2a\xc5\x6f\x30\x23\x58\x7b"
@@ -20704,114 +22149,1838 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
 };
 
 /*
- * ANSI X9.31 Continuous Pseudo-Random Number Generator (AES mode)
- * test vectors, taken from Appendix B.2.9 and B.2.10:
- *     http://csrc.nist.gov/groups/STM/cavp/documents/rng/RNGVS.pdf
- * Only AES-128 is supported at this time.
+ * rfc4309 refers to section 8 of rfc3610 for test vectors, but they all
+ * use a 13-byte nonce, we only support an 11-byte nonce.  Worse,
+ * they use AD lengths which are not valid ESP header lengths.
+ *
+ * These vectors are copied/generated from the ones for rfc4106 with
+ * the key truncated by one byte..
  */
-#define ANSI_CPRNG_AES_TEST_VECTORS    6
+static struct aead_testvec aes_ccm_rfc4309_enc_tv_template[] = {
+       { /* Generated using Crypto++ */
+               .key    = zeroed_string,
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .input  = zeroed_string,
+               .ilen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .result = "\x2E\x9A\xCA\x6B\xDA\x54\xFC\x6F"
+                         "\x12\x50\xE8\xDE\x81\x3C\x63\x08"
+                         "\x1A\x22\xBA\x75\xEE\xD4\xD5\xB5"
+                         "\x27\x50\x01\xAC\x03\x33\x39\xFB",
+               .rlen   = 32,
+       },{
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = zeroed_string,
+               .ilen   = 16,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = "\xCF\xB9\x99\x17\xC8\x86\x0E\x7F"
+                         "\x7E\x76\xF8\xE6\xF8\xCC\x1F\x17"
+                         "\x6A\xE0\x53\x9F\x4B\x73\x7E\xDA"
+                         "\x08\x09\x4E\xC4\x1E\xAD\xC6\xB0",
+               .rlen   = 32,
 
-static struct cprng_testvec ansi_cprng_aes_tv_template[] = {
-       {
-               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
-                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
-               .klen   = 16,
-               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
-                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xf9",
-               .dtlen  = 16,
-               .v      = "\x80\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .vlen   = 16,
-               .result = "\x59\x53\x1e\xd1\x3b\xb0\xc0\x55"
-                         "\x84\x79\x66\x85\xc1\x2f\x76\x41",
-               .rlen   = 16,
-               .loops  = 1,
        }, {
-               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
-                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
-               .klen   = 16,
-               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
-                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfa",
-               .dtlen  = 16,
-               .v      = "\xc0\x00\x00\x00\x00\x00\x00\x00"
-                         "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .vlen   = 16,
-               .result = "\x7c\x22\x2c\xf4\xca\x8f\xa2\x4c"
-                         "\x1c\x9c\xb6\x41\xa9\xf3\x22\x0d",
-               .rlen   = 16,
-               .loops  = 1,
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .result = "\x33\xDE\x73\xBC\xA6\xCE\x4E\xA6"
+                         "\x61\xF4\xF5\x41\x03\x4A\xE3\x86"
+                         "\xA1\xE2\xC2\x42\x2B\x81\x70\x40"
+                         "\xFD\x7F\x76\xD1\x03\x07\xBB\x0C",
+               .rlen   = 32,
        }, {
-               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
-                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
-               .klen   = 16,
-               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
-                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfb",
-               .dtlen  = 16,
-               .v      = "\xe0\x00\x00\x00\x00\x00\x00\x00"
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
                          "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .vlen   = 16,
-               .result = "\x8a\xaa\x00\x39\x66\x67\x5b\xe5"
-                         "\x29\x14\x28\x81\xa9\x4d\x4e\xc7",
-               .rlen   = 16,
-               .loops  = 1,
+               .alen   = 16,
+               .result = "\x33\xDE\x73\xBC\xA6\xCE\x4E\xA6"
+                         "\x61\xF4\xF5\x41\x03\x4A\xE3\x86"
+                         "\x5B\xC0\x73\xE0\x2B\x73\x68\xC9"
+                         "\x2D\x8C\x58\xC2\x90\x3D\xB0\x3E",
+               .rlen   = 32,
        }, {
-               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
-                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
-               .klen   = 16,
-               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
-                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfc",
-               .dtlen  = 16,
-               .v      = "\xf0\x00\x00\x00\x00\x00\x00\x00"
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = "\xCE\xB8\x98\x16\xC9\x87\x0F\x7E"
+                         "\x7F\x77\xF9\xE7\xF9\xCD\x1E\x16"
+                         "\x43\x8E\x76\x57\x3B\xB4\x05\xE8"
+                         "\xA9\x9B\xBF\x25\xE0\x4F\xC0\xED",
+               .rlen   = 32,
+       }, {
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .ilen   = 64,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .result = "\xCE\xB8\x98\x16\xC9\x87\x0F\x7E"
+                         "\x7F\x77\xF9\xE7\xF9\xCD\x1E\x16"
+                         "\x9C\xA4\x97\x83\x3F\x01\xA5\xF4"
+                         "\x43\x09\xE7\xB8\xE9\xD1\xD7\x02"
+                         "\x9B\xAB\x39\x18\xEB\x94\x34\x36"
+                         "\xE6\xC5\xC8\x9B\x00\x81\x9E\x49"
+                         "\x1D\x78\xE1\x48\xE3\xE9\xEA\x8E"
+                         "\x3A\x2B\x67\x5D\x35\x6A\x0F\xDB"
+                         "\x02\x73\xDD\xE7\x30\x4A\x30\x54"
+                         "\x1A\x9D\x09\xCA\xC8\x1C\x32\x5F",
+               .rlen   = 80,
+       }, {
+               .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef",
+               .input  = "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .ilen   = 192,
+               .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+                         "\xaa\xaa\xaa\xaa\x00\x00\x45\x67"
+                         "\x89\xab\xcd\xef",
+               .alen   = 20,
+               .result = "\x64\x17\xDC\x24\x9D\x92\xBA\x5E"
+                         "\x7C\x64\x6D\x33\x46\x77\xAC\xB1"
+                         "\x5C\x9E\xE2\xC7\x27\x11\x3E\x95"
+                         "\x7D\xBE\x28\xC8\xC1\xCA\x5E\x8C"
+                         "\xB4\xE2\xDE\x9F\x53\x59\x26\xDB"
+                         "\x0C\xD4\xE4\x07\x9A\xE6\x3E\x01"
+                         "\x58\x0D\x3E\x3D\xD5\x21\xEB\x04"
+                         "\x06\x9D\x5F\xB9\x02\x49\x1A\x2B"
+                         "\xBA\xF0\x4E\x3B\x85\x50\x5B\x09"
+                         "\xFE\xEC\xFC\x54\xEC\x0C\xE2\x79"
+                         "\x8A\x2F\x5F\xD7\x05\x5D\xF1\x6D"
+                         "\x22\xEB\xD1\x09\x80\x3F\x5A\x70"
+                         "\xB2\xB9\xD3\x63\x99\xC2\x4D\x1B"
+                         "\x36\x12\x00\x89\xAA\x5D\x55\xDA"
+                         "\x1D\x5B\xD8\x3C\x5F\x09\xD2\xE6"
+                         "\x39\x41\x5C\xF0\xBE\x26\x4E\x5F"
+                         "\x2B\x50\x44\x52\xC2\x10\x7D\x38"
+                         "\x82\x64\x83\x0C\xAE\x49\xD0\xE5"
+                         "\x4F\xE5\x66\x4C\x58\x7A\xEE\x43"
+                         "\x3B\x51\xFE\xBA\x24\x8A\xFE\xDC"
+                         "\x19\x6D\x60\x66\x61\xF9\x9A\x3F"
+                         "\x75\xFC\x38\x53\x5B\xB5\xCD\x52"
+                         "\x4F\xE5\xE4\xC9\xFE\x10\xCB\x98"
+                         "\xF0\x06\x5B\x07\xAB\xBB\xF4\x0E"
+                         "\x2D\xC2\xDD\x5D\xDD\x22\x9A\xCC"
+                         "\x39\xAB\x63\xA5\x3D\x9C\x51\x8A",
+               .rlen   = 208,
+       }, { /* From draft-mcgrew-gcm-test-01 */
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x2E\x44\x3B",
+               .klen   = 19,
+               .iv     = "\x49\x56\xED\x7E\x3B\x24\x4C\xFE",
+               .input  = "\x45\x00\x00\x48\x69\x9A\x00\x00"
+                         "\x80\x11\x4D\xB7\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x9B\xF1\x56"
+                         "\x38\xD3\x01\x00\x00\x01\x00\x00"
+                         "\x00\x00\x00\x00\x04\x5F\x73\x69"
+                         "\x70\x04\x5F\x75\x64\x70\x03\x73"
+                         "\x69\x70\x09\x63\x79\x62\x65\x72"
+                         "\x63\x69\x74\x79\x02\x64\x6B\x00"
+                         "\x00\x21\x00\x01\x01\x02\x02\x01",
+               .ilen   = 72,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x00\x49\x56\xED\x7E"
+                         "\x3B\x24\x4C\xFE",
+               .alen   = 20,
+               .result = "\x89\xBA\x3E\xEF\xE6\xD6\xCF\xDB"
+                         "\x83\x60\xF5\xBA\x3A\x56\x79\xE6"
+                         "\x7E\x0C\x53\xCF\x9E\x87\xE0\x4E"
+                         "\x1A\x26\x01\x24\xC7\x2E\x3D\xBF"
+                         "\x29\x2C\x91\xC1\xB8\xA8\xCF\xE0"
+                         "\x39\xF8\x53\x6D\x31\x22\x2B\xBF"
+                         "\x98\x81\xFC\x34\xEE\x85\x36\xCD"
+                         "\x26\xDB\x6C\x7A\x0C\x77\x8A\x35"
+                         "\x18\x85\x54\xB2\xBC\xDD\x3F\x43"
+                         "\x61\x06\x8A\xDF\x86\x3F\xB4\xAC"
+                         "\x97\xDC\xBD\xFD\x92\x10\xC5\xFF",
+               .rlen   = 88,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xCA\xFE\xBA",
+               .klen   = 19,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .input  = "\x45\x00\x00\x3E\x69\x8F\x00\x00"
+                         "\x80\x11\x4D\xCC\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x98\x00\x35"
+                         "\x00\x2A\x23\x43\xB2\xD0\x01\x00"
+                         "\x00\x01\x00\x00\x00\x00\x00\x00"
+                         "\x03\x73\x69\x70\x09\x63\x79\x62"
+                         "\x65\x72\x63\x69\x74\x79\x02\x64"
+                         "\x6B\x00\x00\x01\x00\x01\x00\x01",
+               .ilen   = 64,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .result = "\x4B\xC2\x70\x60\x64\xD2\xF3\xC8"
+                         "\xE5\x26\x8A\xDE\xB8\x7E\x7D\x16"
+                         "\x56\xC7\xD2\x88\xBA\x8D\x58\xAF"
+                         "\xF5\x71\xB6\x37\x84\xA7\xB1\x99"
+                         "\x51\x5C\x0D\xA0\x27\xDE\xE7\x2D"
+                         "\xEF\x25\x88\x1F\x1D\x77\x11\xFF"
+                         "\xDB\xED\xEE\x56\x16\xC5\x5C\x9B"
+                         "\x00\x62\x1F\x68\x4E\x7C\xA0\x97"
+                         "\x10\x72\x7E\x53\x13\x3B\x68\xE4"
+                         "\x30\x99\x91\x79\x09\xEA\xFF\x6A",
+               .rlen   = 80,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x11\x22\x33",
+               .klen   = 35,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .input  = "\x45\x00\x00\x30\x69\xA6\x40\x00"
+                         "\x80\x06\x26\x90\xC0\xA8\x01\x02"
+                         "\x93\x89\x15\x5E\x0A\x9E\x00\x8B"
+                         "\x2D\xC5\x7E\xE0\x00\x00\x00\x00"
+                         "\x70\x02\x40\x00\x20\xBF\x00\x00"
+                         "\x02\x04\x05\xB4\x01\x01\x04\x02"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x4A\x2C\xBF\xE3\x00\x00\x00\x02"
+                         "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .alen   = 16,
+               .result = "\xD6\x31\x0D\x2B\x3D\x6F\xBD\x2F"
+                         "\x58\x41\x7E\xFF\x9A\x9E\x09\xB4"
+                         "\x1A\xF7\xF6\x42\x31\xCD\xBF\xAD"
+                         "\x27\x0E\x2C\xF2\xDB\x10\xDF\x55"
+                         "\x8F\x0D\xD7\xAC\x23\xBD\x42\x10"
+                         "\xD0\xB2\xAF\xD8\x37\xAC\x6B\x0B"
+                         "\x11\xD4\x0B\x12\xEC\xB4\xB1\x92"
+                         "\x23\xA6\x10\xB0\x26\xD6\xD9\x26"
+                         "\x5A\x48\x6A\x3E",
+               .rlen   = 68,
+       }, {
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .input  = "\x45\x00\x00\x3C\x99\xC5\x00\x00"
+                         "\x80\x01\xCB\x7A\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x07\x5C"
+                         "\x02\x00\x44\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .ilen   = 64,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x01"
                          "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .vlen   = 16,
-               .result = "\x88\xdd\xa4\x56\x30\x24\x23\xe5"
-                         "\xf6\x9d\xa5\x7e\x7b\x95\xc7\x3a",
-               .rlen   = 16,
-               .loops  = 1,
+               .alen   = 16,
+               .result = "\x6B\x9A\xCA\x57\x43\x91\xFC\x6F"
+                         "\x92\x51\x23\xA4\xC1\x5B\xF0\x10"
+                         "\xF3\x13\xF4\xF8\xA1\x9A\xB4\xDC"
+                         "\x89\xC8\xF8\x42\x62\x95\xB7\xCB"
+                         "\xB8\xF5\x0F\x1B\x2E\x94\xA2\xA7"
+                         "\xBF\xFB\x8A\x92\x13\x63\xD1\x3C"
+                         "\x08\xF5\xE8\xA6\xAA\xF6\x34\xF9"
+                         "\x42\x05\xAF\xB3\xE7\x9A\xFC\xEE"
+                         "\x36\x25\xC1\x10\x12\x1C\xCA\x82"
+                         "\xEA\xE6\x63\x5A\x57\x28\xA9\x9A",
+               .rlen   = 80,
        }, {
-               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
-                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
-               .klen   = 16,
-               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
-                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfd",
-               .dtlen  = 16,
-               .v      = "\xf8\x00\x00\x00\x00\x00\x00\x00"
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x3C\x99\xC3\x00\x00"
+                         "\x80\x01\xCB\x7C\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x08\x5C"
+                         "\x02\x00\x43\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .ilen   = 64,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\x6A\x6B\x45\x2B\x7C\x67\x52\xF6"
+                         "\x10\x60\x40\x62\x6B\x4F\x97\x8E"
+                         "\x0B\xB2\x22\x97\xCB\x21\xE0\x90"
+                         "\xA2\xE7\xD1\x41\x30\xE4\x4B\x1B"
+                         "\x79\x01\x58\x50\x01\x06\xE1\xE0"
+                         "\x2C\x83\x79\xD3\xDE\x46\x97\x1A"
+                         "\x30\xB8\xE5\xDF\xD7\x12\x56\x75"
+                         "\xD0\x95\xB7\xB8\x91\x42\xF7\xFD"
+                         "\x97\x57\xCA\xC1\x20\xD0\x86\xB9"
+                         "\x66\x9D\xB4\x2B\x96\x22\xAC\x67",
+               .rlen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x1C\x42\xA2\x00\x00"
+                         "\x80\x01\x44\x1F\x40\x67\x93\xB6"
+                         "\xE0\x00\x00\x02\x0A\x00\xF5\xFF"
+                         "\x01\x02\x02\x01",
+               .ilen   = 28,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\x6A\x6B\x45\x0B\xA7\x06\x52\xF6"
+                         "\x10\x60\xCF\x01\x6B\x4F\x97\x20"
+                         "\xEA\xB3\x23\x94\xC9\x21\x1D\x33"
+                         "\xA1\xE5\x90\x40\x05\x37\x45\x70"
+                         "\xB5\xD6\x09\x0A\x23\x73\x33\xF9"
+                         "\x08\xB4\x22\xE4",
+               .rlen   = 44,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\xCA\xFE\xBA",
+               .klen   = 27,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .input  = "\x45\x00\x00\x28\xA4\xAD\x40\x00"
+                         "\x40\x06\x78\x80\x0A\x01\x03\x8F"
+                         "\x0A\x01\x06\x12\x80\x23\x06\xB8"
+                         "\xCB\x71\x26\x02\xDD\x6B\xB0\x3E"
+                         "\x50\x10\x16\xD0\x75\x68\x00\x01",
+               .ilen   = 40,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .result = "\x05\x22\x15\xD1\x52\x56\x85\x04"
+                         "\xA8\x5C\x5D\x6D\x7E\x6E\xF5\xFA"
+                         "\xEA\x16\x37\x50\xF3\xDF\x84\x3B"
+                         "\x2F\x32\x18\x57\x34\x2A\x8C\x23"
+                         "\x67\xDF\x6D\x35\x7B\x54\x0D\xFB"
+                         "\x34\xA5\x9F\x6C\x48\x30\x1E\x22"
+                         "\xFE\xB1\x22\x17\x17\x8A\xB9\x5B",
+               .rlen   = 56,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8",
+               .klen   = 19,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .input  = "\x45\x00\x00\x49\x33\xBA\x00\x00"
+                         "\x7F\x11\x91\x06\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xDD\x7B\x80\x03\x02\xD5"
+                         "\x00\x00\x4E\x20\x00\x1E\x8C\x18"
+                         "\xD7\x5B\x81\xDC\x91\xBA\xA0\x47"
+                         "\x6B\x91\xB9\x24\xB2\x80\x38\x9D"
+                         "\x92\xC9\x63\xBA\xC0\x46\xEC\x95"
+                         "\x9B\x62\x66\xC0\x47\x22\xB1\x49"
+                         "\x23\x01\x01\x01",
+               .ilen   = 76,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .result = "\x92\xD0\x53\x79\x33\x38\xD5\xF3"
+                         "\x7D\xE4\x7A\x8E\x86\x03\xC9\x90"
+                         "\x96\x35\xAB\x9C\xFB\xE8\xA3\x76"
+                         "\xE9\xE9\xE2\xD1\x2E\x11\x0E\x00"
+                         "\xFA\xCE\xB5\x9E\x02\xA7\x7B\xEA"
+                         "\x71\x9A\x58\xFB\xA5\x8A\xE1\xB7"
+                         "\x9C\x39\x9D\xE3\xB5\x6E\x69\xE6"
+                         "\x63\xC9\xDB\x05\x69\x51\x12\xAD"
+                         "\x3E\x00\x32\x73\x86\xF2\xEE\xF5"
+                         "\x0F\xE8\x81\x7E\x84\xD3\xC0\x0D"
+                         "\x76\xD6\x55\xC6\xB4\xC2\x34\xC7"
+                         "\x12\x25\x0B\xF9",
+               .rlen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C",
+               .klen   = 35,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .input  = "\x45\x08\x00\x28\x73\x2C\x00\x00"
+                         "\x40\x06\xE9\xF9\x0A\x01\x06\x12"
+                         "\x0A\x01\x03\x8F\x06\xB8\x80\x23"
+                         "\xDD\x6B\xAF\xBE\xCB\x71\x26\x02"
+                         "\x50\x10\x1F\x64\x6D\x54\x00\x01",
+               .ilen   = 40,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .result = "\xCC\x74\xB7\xD3\xB0\x38\x50\x42"
+                         "\x2C\x64\x87\x46\x1E\x34\x10\x05"
+                         "\x29\x6B\xBB\x36\xE9\x69\xAD\x92"
+                         "\x82\xA1\x10\x6A\xEB\x0F\xDC\x7D"
+                         "\x08\xBA\xF3\x91\xCA\xAA\x61\xDA"
+                         "\x62\xF4\x14\x61\x5C\x9D\xB5\xA7"
+                         "\xEE\xD7\xB9\x7E\x87\x99\x9B\x7D",
+               .rlen   = 56,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x49\x33\x3E\x00\x00"
+                         "\x7F\x11\x91\x82\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xCB\x45\x80\x03\x02\x5B"
+                         "\x00\x00\x01\xE0\x00\x1E\x8C\x18"
+                         "\xD6\x57\x59\xD5\x22\x84\xA0\x35"
+                         "\x2C\x71\x47\x5C\x88\x80\x39\x1C"
+                         "\x76\x4D\x6E\x5E\xE0\x49\x6B\x32"
+                         "\x5A\xE2\x70\xC0\x38\x99\x49\x39"
+                         "\x15\x01\x01\x01",
+               .ilen   = 76,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\x6A\x6B\x45\x5E\xD6\x9A\x52\xF6"
+                         "\xEF\x70\x1A\x9C\xE8\xD3\x19\x86"
+                         "\xC8\x02\xF0\xB0\x03\x09\xD9\x02"
+                         "\xA0\xD2\x59\x04\xD1\x85\x2A\x24"
+                         "\x1C\x67\x3E\xD8\x68\x72\x06\x94"
+                         "\x97\xBA\x4F\x76\x8D\xB0\x44\x5B"
+                         "\x69\xBF\xD5\xE2\x3D\xF1\x0B\x0C"
+                         "\xC0\xBF\xB1\x8F\x70\x09\x9E\xCE"
+                         "\xA5\xF2\x55\x58\x84\xFA\xF9\xB5"
+                         "\x23\xF4\x84\x40\x74\x14\x8A\x6B"
+                         "\xDB\xD7\x67\xED\xA4\x93\xF3\x47"
+                         "\xCC\xF7\x46\x6F",
+               .rlen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C",
+               .klen   = 35,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .input  = "\x63\x69\x73\x63\x6F\x01\x72\x75"
+                         "\x6C\x65\x73\x01\x74\x68\x65\x01"
+                         "\x6E\x65\x74\x77\x65\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x01\x74\x68\x65"
+                         "\x74\x65\x63\x68\x6E\x6F\x6C\x6F"
+                         "\x67\x69\x65\x73\x01\x74\x68\x61"
+                         "\x74\x77\x69\x6C\x6C\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x74\x6F\x6D\x6F"
+                         "\x72\x72\x6F\x77\x01\x02\x02\x01",
+               .ilen   = 72,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .result = "\xEA\x15\xC4\x98\xAC\x15\x22\x37"
+                         "\x00\x07\x1D\xBE\x60\x5D\x73\x16"
+                         "\x4D\x0F\xCC\xCE\x8A\xD0\x49\xD4"
+                         "\x39\xA3\xD1\xB1\x21\x0A\x92\x1A"
+                         "\x2C\xCF\x8F\x9D\xC9\x91\x0D\xB4"
+                         "\x15\xFC\xBC\xA5\xC5\xBF\x54\xE5"
+                         "\x1C\xC7\x32\x41\x07\x7B\x2C\xB6"
+                         "\x5C\x23\x7C\x93\xEA\xEF\x23\x1C"
+                         "\x73\xF4\xE7\x12\x84\x4C\x37\x0A"
+                         "\x4A\x8F\x06\x37\x48\xF9\xF9\x05"
+                         "\x55\x13\x40\xC3\xD5\x55\x3A\x3D",
+               .rlen   = 88,
+       }, {
+               .key    = "\x7D\x77\x3D\x00\xC1\x44\xC5\x25"
+                         "\xAC\x61\x9D\x18\xC8\x4A\x3F\x47"
+                         "\xD9\x66\x42",
+               .klen   = 19,
+               .iv     = "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .input  = "\x01\x02\x02\x01",
+               .ilen   = 4,
+               .assoc  = "\x33\x54\x67\xAE\xFF\xFF\xFF\xFF"
+                         "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .alen   = 16,
+               .result = "\x4C\x72\x63\x30\x2F\xE6\x56\xDD"
+                         "\xD0\xD8\x60\x9D\x8B\xEF\x85\x90"
+                         "\xF7\x61\x24\x62",
+               .rlen   = 20,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8",
+               .klen   = 19,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .input  = "\x74\x6F\x01\x62\x65\x01\x6F\x72"
+                         "\x01\x6E\x6F\x74\x01\x74\x6F\x01"
+                         "\x62\x65\x00\x01",
+               .ilen   = 20,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .result = "\xA3\xBF\x52\x52\x65\x83\xBA\x81"
+                         "\x03\x9B\x84\xFC\x44\x8C\xBB\x81"
+                         "\x36\xE1\x78\xBB\xA5\x49\x3A\xD0"
+                         "\xF0\x6B\x21\xAF\x98\xC0\x34\xDC"
+                         "\x17\x17\x65\xAD",
+               .rlen   = 36,
+       }, {
+               .key    = "\x6C\x65\x67\x61\x6C\x69\x7A\x65"
+                         "\x6D\x61\x72\x69\x6A\x75\x61\x6E"
+                         "\x61\x61\x6E\x64\x64\x6F\x69\x74"
+                         "\x62\x65\x66\x6F\x72\x65\x69\x61"
+                         "\x74\x75\x72",
+               .klen   = 35,
+               .iv     = "\x33\x30\x21\x69\x67\x65\x74\x6D",
+               .input  = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x79\x6B\x69\x63\xFF\xFF\xFF\xFF"
+                         "\xFF\xFF\xFF\xFF\x33\x30\x21\x69"
+                         "\x67\x65\x74\x6D",
+               .alen   = 20,
+               .result = "\x96\xFD\x86\xF8\xD1\x98\xFF\x10"
+                         "\xAB\x8C\xDA\x8A\x5A\x08\x38\x1A"
+                         "\x48\x59\x80\x18\x1A\x18\x1A\x04"
+                         "\xC9\x0D\xE3\xE7\x0E\xA4\x0B\x75"
+                         "\x92\x9C\x52\x5C\x0B\xFB\xF8\xAF"
+                         "\x16\xC3\x35\xA8\xE7\xCE\x84\x04"
+                         "\xEB\x40\x6B\x7A\x8E\x75\xBB\x42"
+                         "\xE0\x63\x4B\x21\x44\xA2\x2B\x2B"
+                         "\x39\xDB\xC8\xDC",
+               .rlen   = 68,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .input  = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .ilen   = 52,
+               .assoc  = "\x3F\x7E\xF6\x42\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .result = "\x6A\x6B\x45\x27\x3F\x9E\x52\xF6"
+                         "\x10\x60\x54\x25\xEB\x80\x04\x93"
+                         "\xCA\x1B\x23\x97\xCB\x21\x2E\x01"
+                         "\xA2\xE7\x95\x41\x30\xE4\x4B\x1B"
+                         "\x79\x01\x58\x50\x01\x06\xE1\xE0"
+                         "\x2C\x83\x79\xD3\xDE\x46\x97\x1A"
+                         "\x44\xCC\x90\xBF\x00\x94\x94\x92"
+                         "\x20\x17\x0C\x1B\x55\xDE\x7E\x68"
+                         "\xF4\x95\x5D\x4F",
+               .rlen   = 68,
+       }, {
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x22\x43\x3C",
+               .klen   = 19,
+               .iv     = "\x48\x55\xEC\x7D\x3A\x23\x4B\xFD",
+               .input  = "\x08\x00\xC6\xCD\x02\x00\x07\x00"
+                         "\x61\x62\x63\x64\x65\x66\x67\x68"
+                         "\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70"
+                         "\x71\x72\x73\x74\x01\x02\x02\x01",
+               .ilen   = 32,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x07\x48\x55\xEC\x7D"
+                         "\x3A\x23\x4B\xFD",
+               .alen   = 20,
+               .result = "\x67\xE9\x28\xB3\x1C\xA4\x6D\x02"
+                         "\xF0\xB5\x37\xB6\x6B\x2F\xF5\x4F"
+                         "\xF8\xA3\x4C\x53\xB8\x12\x09\xBF"
+                         "\x58\x7D\xCF\x29\xA3\x41\x68\x6B"
+                         "\xCE\xE8\x79\x85\x3C\xB0\x3A\x8F"
+                         "\x16\xB0\xA1\x26\xC9\xBC\xBC\xA6",
+               .rlen   = 48,
+       }
+};
+
+static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[]   = {
+       { /* Generated using Crypto++ */
+               .key    = zeroed_string,
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .result = zeroed_string,
+               .rlen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .input  = "\x2E\x9A\xCA\x6B\xDA\x54\xFC\x6F"
+                         "\x12\x50\xE8\xDE\x81\x3C\x63\x08"
+                         "\x1A\x22\xBA\x75\xEE\xD4\xD5\xB5"
+                         "\x27\x50\x01\xAC\x03\x33\x39\xFB",
+               .ilen   = 32,
+       },{
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .result = zeroed_string,
+               .rlen   = 16,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .input  = "\xCF\xB9\x99\x17\xC8\x86\x0E\x7F"
+                         "\x7E\x76\xF8\xE6\xF8\xCC\x1F\x17"
+                         "\x6A\xE0\x53\x9F\x4B\x73\x7E\xDA"
+                         "\x08\x09\x4E\xC4\x1E\xAD\xC6\xB0",
+               .ilen   = 32,
+
+       }, {
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 16,
+               .assoc  = zeroed_string,
+               .alen   = 16,
+               .input  = "\x33\xDE\x73\xBC\xA6\xCE\x4E\xA6"
+                         "\x61\xF4\xF5\x41\x03\x4A\xE3\x86"
+                         "\xA1\xE2\xC2\x42\x2B\x81\x70\x40"
+                         "\xFD\x7F\x76\xD1\x03\x07\xBB\x0C",
+               .ilen   = 32,
+       }, {
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = zeroed_string,
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 16,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
                          "\x00\x00\x00\x00\x00\x00\x00\x00",
-               .vlen   = 16,
-               .result = "\x05\x25\x92\x46\x61\x79\xd2\xcb"
-                         "\x78\xc4\x0b\x14\x0a\x5a\x9a\xc8",
+               .alen   = 16,
+               .input  = "\x33\xDE\x73\xBC\xA6\xCE\x4E\xA6"
+                         "\x61\xF4\xF5\x41\x03\x4A\xE3\x86"
+                         "\x5B\xC0\x73\xE0\x2B\x73\x68\xC9"
+                         "\x2D\x8C\x58\xC2\x90\x3D\xB0\x3E",
+               .ilen   = 32,
+       }, {
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
                .rlen   = 16,
-               .loops  = 1,
-       }, {    /* Monte Carlo Test */
-               .key    = "\x9f\x5b\x51\x20\x0b\xf3\x34\xb5"
-                         "\xd8\x2b\xe8\xc3\x72\x55\xc8\x48",
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .input  = "\xCE\xB8\x98\x16\xC9\x87\x0F\x7E"
+                         "\x7F\x77\xF9\xE7\xF9\xCD\x1E\x16"
+                         "\x43\x8E\x76\x57\x3B\xB4\x05\xE8"
+                         "\xA9\x9B\xBF\x25\xE0\x4F\xC0\xED",
+               .ilen   = 32,
+       }, {
+               .key    = "\xfe\xff\xe9\x92\x86\x65\x73\x1c"
+                         "\x6d\x6a\x8f\x94\x67\x30\x83\x08"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .result = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x01\x01\x01\x01\x01\x01\x01\x01",
+               .rlen   = 64,
+               .assoc  = "\x01\x01\x01\x01\x01\x01\x01\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .alen   = 16,
+               .input  = "\xCE\xB8\x98\x16\xC9\x87\x0F\x7E"
+                         "\x7F\x77\xF9\xE7\xF9\xCD\x1E\x16"
+                         "\x9C\xA4\x97\x83\x3F\x01\xA5\xF4"
+                         "\x43\x09\xE7\xB8\xE9\xD1\xD7\x02"
+                         "\x9B\xAB\x39\x18\xEB\x94\x34\x36"
+                         "\xE6\xC5\xC8\x9B\x00\x81\x9E\x49"
+                         "\x1D\x78\xE1\x48\xE3\xE9\xEA\x8E"
+                         "\x3A\x2B\x67\x5D\x35\x6A\x0F\xDB"
+                         "\x02\x73\xDD\xE7\x30\x4A\x30\x54"
+                         "\x1A\x9D\x09\xCA\xC8\x1C\x32\x5F",
+               .ilen   = 80,
+       }, {
+               .key    = "\x00\x01\x02\x03\x04\x05\x06\x07"
+                         "\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x45\x67\x89\xab\xcd\xef",
+               .result = "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff"
+                         "\xff\xff\xff\xff\xff\xff\xff\xff",
+               .rlen   = 192,
+               .assoc  = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
+                         "\xaa\xaa\xaa\xaa\x00\x00\x45\x67"
+                         "\x89\xab\xcd\xef",
+               .alen   = 20,
+               .input  = "\x64\x17\xDC\x24\x9D\x92\xBA\x5E"
+                         "\x7C\x64\x6D\x33\x46\x77\xAC\xB1"
+                         "\x5C\x9E\xE2\xC7\x27\x11\x3E\x95"
+                         "\x7D\xBE\x28\xC8\xC1\xCA\x5E\x8C"
+                         "\xB4\xE2\xDE\x9F\x53\x59\x26\xDB"
+                         "\x0C\xD4\xE4\x07\x9A\xE6\x3E\x01"
+                         "\x58\x0D\x3E\x3D\xD5\x21\xEB\x04"
+                         "\x06\x9D\x5F\xB9\x02\x49\x1A\x2B"
+                         "\xBA\xF0\x4E\x3B\x85\x50\x5B\x09"
+                         "\xFE\xEC\xFC\x54\xEC\x0C\xE2\x79"
+                         "\x8A\x2F\x5F\xD7\x05\x5D\xF1\x6D"
+                         "\x22\xEB\xD1\x09\x80\x3F\x5A\x70"
+                         "\xB2\xB9\xD3\x63\x99\xC2\x4D\x1B"
+                         "\x36\x12\x00\x89\xAA\x5D\x55\xDA"
+                         "\x1D\x5B\xD8\x3C\x5F\x09\xD2\xE6"
+                         "\x39\x41\x5C\xF0\xBE\x26\x4E\x5F"
+                         "\x2B\x50\x44\x52\xC2\x10\x7D\x38"
+                         "\x82\x64\x83\x0C\xAE\x49\xD0\xE5"
+                         "\x4F\xE5\x66\x4C\x58\x7A\xEE\x43"
+                         "\x3B\x51\xFE\xBA\x24\x8A\xFE\xDC"
+                         "\x19\x6D\x60\x66\x61\xF9\x9A\x3F"
+                         "\x75\xFC\x38\x53\x5B\xB5\xCD\x52"
+                         "\x4F\xE5\xE4\xC9\xFE\x10\xCB\x98"
+                         "\xF0\x06\x5B\x07\xAB\xBB\xF4\x0E"
+                         "\x2D\xC2\xDD\x5D\xDD\x22\x9A\xCC"
+                         "\x39\xAB\x63\xA5\x3D\x9C\x51\x8A",
+               .ilen   = 208,
+       }, { /* From draft-mcgrew-gcm-test-01 */
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x2E\x44\x3B",
+               .klen   = 19,
+               .iv     = "\x49\x56\xED\x7E\x3B\x24\x4C\xFE",
+               .result = "\x45\x00\x00\x48\x69\x9A\x00\x00"
+                         "\x80\x11\x4D\xB7\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x9B\xF1\x56"
+                         "\x38\xD3\x01\x00\x00\x01\x00\x00"
+                         "\x00\x00\x00\x00\x04\x5F\x73\x69"
+                         "\x70\x04\x5F\x75\x64\x70\x03\x73"
+                         "\x69\x70\x09\x63\x79\x62\x65\x72"
+                         "\x63\x69\x74\x79\x02\x64\x6B\x00"
+                         "\x00\x21\x00\x01\x01\x02\x02\x01",
+               .rlen   = 72,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x00\x49\x56\xED\x7E"
+                         "\x3B\x24\x4C\xFE",
+               .alen   = 20,
+               .input  = "\x89\xBA\x3E\xEF\xE6\xD6\xCF\xDB"
+                         "\x83\x60\xF5\xBA\x3A\x56\x79\xE6"
+                         "\x7E\x0C\x53\xCF\x9E\x87\xE0\x4E"
+                         "\x1A\x26\x01\x24\xC7\x2E\x3D\xBF"
+                         "\x29\x2C\x91\xC1\xB8\xA8\xCF\xE0"
+                         "\x39\xF8\x53\x6D\x31\x22\x2B\xBF"
+                         "\x98\x81\xFC\x34\xEE\x85\x36\xCD"
+                         "\x26\xDB\x6C\x7A\x0C\x77\x8A\x35"
+                         "\x18\x85\x54\xB2\xBC\xDD\x3F\x43"
+                         "\x61\x06\x8A\xDF\x86\x3F\xB4\xAC"
+                         "\x97\xDC\xBD\xFD\x92\x10\xC5\xFF",
+               .ilen   = 88,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xCA\xFE\xBA",
+               .klen   = 19,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .result = "\x45\x00\x00\x3E\x69\x8F\x00\x00"
+                         "\x80\x11\x4D\xCC\xC0\xA8\x01\x02"
+                         "\xC0\xA8\x01\x01\x0A\x98\x00\x35"
+                         "\x00\x2A\x23\x43\xB2\xD0\x01\x00"
+                         "\x00\x01\x00\x00\x00\x00\x00\x00"
+                         "\x03\x73\x69\x70\x09\x63\x79\x62"
+                         "\x65\x72\x63\x69\x74\x79\x02\x64"
+                         "\x6B\x00\x00\x01\x00\x01\x00\x01",
+               .rlen   = 64,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .input  = "\x4B\xC2\x70\x60\x64\xD2\xF3\xC8"
+                         "\xE5\x26\x8A\xDE\xB8\x7E\x7D\x16"
+                         "\x56\xC7\xD2\x88\xBA\x8D\x58\xAF"
+                         "\xF5\x71\xB6\x37\x84\xA7\xB1\x99"
+                         "\x51\x5C\x0D\xA0\x27\xDE\xE7\x2D"
+                         "\xEF\x25\x88\x1F\x1D\x77\x11\xFF"
+                         "\xDB\xED\xEE\x56\x16\xC5\x5C\x9B"
+                         "\x00\x62\x1F\x68\x4E\x7C\xA0\x97"
+                         "\x10\x72\x7E\x53\x13\x3B\x68\xE4"
+                         "\x30\x99\x91\x79\x09\xEA\xFF\x6A",
+               .ilen   = 80,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x11\x22\x33",
+               .klen   = 35,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .result = "\x45\x00\x00\x30\x69\xA6\x40\x00"
+                         "\x80\x06\x26\x90\xC0\xA8\x01\x02"
+                         "\x93\x89\x15\x5E\x0A\x9E\x00\x8B"
+                         "\x2D\xC5\x7E\xE0\x00\x00\x00\x00"
+                         "\x70\x02\x40\x00\x20\xBF\x00\x00"
+                         "\x02\x04\x05\xB4\x01\x01\x04\x02"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x4A\x2C\xBF\xE3\x00\x00\x00\x02"
+                         "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .alen   = 16,
+               .input  = "\xD6\x31\x0D\x2B\x3D\x6F\xBD\x2F"
+                         "\x58\x41\x7E\xFF\x9A\x9E\x09\xB4"
+                         "\x1A\xF7\xF6\x42\x31\xCD\xBF\xAD"
+                         "\x27\x0E\x2C\xF2\xDB\x10\xDF\x55"
+                         "\x8F\x0D\xD7\xAC\x23\xBD\x42\x10"
+                         "\xD0\xB2\xAF\xD8\x37\xAC\x6B\x0B"
+                         "\x11\xD4\x0B\x12\xEC\xB4\xB1\x92"
+                         "\x23\xA6\x10\xB0\x26\xD6\xD9\x26"
+                         "\x5A\x48\x6A\x3E",
+               .ilen   = 68,
+       }, {
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00",
+               .klen   = 19,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .result = "\x45\x00\x00\x3C\x99\xC5\x00\x00"
+                         "\x80\x01\xCB\x7A\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x07\x5C"
+                         "\x02\x00\x44\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .rlen   = 64,
+               .assoc  = "\x00\x00\x00\x00\x00\x00\x00\x01"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .alen   = 16,
+               .input  = "\x6B\x9A\xCA\x57\x43\x91\xFC\x6F"
+                         "\x92\x51\x23\xA4\xC1\x5B\xF0\x10"
+                         "\xF3\x13\xF4\xF8\xA1\x9A\xB4\xDC"
+                         "\x89\xC8\xF8\x42\x62\x95\xB7\xCB"
+                         "\xB8\xF5\x0F\x1B\x2E\x94\xA2\xA7"
+                         "\xBF\xFB\x8A\x92\x13\x63\xD1\x3C"
+                         "\x08\xF5\xE8\xA6\xAA\xF6\x34\xF9"
+                         "\x42\x05\xAF\xB3\xE7\x9A\xFC\xEE"
+                         "\x36\x25\xC1\x10\x12\x1C\xCA\x82"
+                         "\xEA\xE6\x63\x5A\x57\x28\xA9\x9A",
+               .ilen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x3C\x99\xC3\x00\x00"
+                         "\x80\x01\xCB\x7C\x40\x67\x93\x18"
+                         "\x01\x01\x01\x01\x08\x00\x08\x5C"
+                         "\x02\x00\x43\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x75\x76\x77\x61\x62\x63\x64\x65"
+                         "\x66\x67\x68\x69\x01\x02\x02\x01",
+               .rlen   = 64,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\x6A\x6B\x45\x2B\x7C\x67\x52\xF6"
+                         "\x10\x60\x40\x62\x6B\x4F\x97\x8E"
+                         "\x0B\xB2\x22\x97\xCB\x21\xE0\x90"
+                         "\xA2\xE7\xD1\x41\x30\xE4\x4B\x1B"
+                         "\x79\x01\x58\x50\x01\x06\xE1\xE0"
+                         "\x2C\x83\x79\xD3\xDE\x46\x97\x1A"
+                         "\x30\xB8\xE5\xDF\xD7\x12\x56\x75"
+                         "\xD0\x95\xB7\xB8\x91\x42\xF7\xFD"
+                         "\x97\x57\xCA\xC1\x20\xD0\x86\xB9"
+                         "\x66\x9D\xB4\x2B\x96\x22\xAC\x67",
+               .ilen   = 80,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x1C\x42\xA2\x00\x00"
+                         "\x80\x01\x44\x1F\x40\x67\x93\xB6"
+                         "\xE0\x00\x00\x02\x0A\x00\xF5\xFF"
+                         "\x01\x02\x02\x01",
+               .rlen   = 28,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\x6A\x6B\x45\x0B\xA7\x06\x52\xF6"
+                         "\x10\x60\xCF\x01\x6B\x4F\x97\x20"
+                         "\xEA\xB3\x23\x94\xC9\x21\x1D\x33"
+                         "\xA1\xE5\x90\x40\x05\x37\x45\x70"
+                         "\xB5\xD6\x09\x0A\x23\x73\x33\xF9"
+                         "\x08\xB4\x22\xE4",
+               .ilen   = 44,
+       }, {
+               .key    = "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\x6D\x6A\x8F\x94\x67\x30\x83\x08"
+                         "\xFE\xFF\xE9\x92\x86\x65\x73\x1C"
+                         "\xCA\xFE\xBA",
+               .klen   = 27,
+               .iv     = "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .result = "\x45\x00\x00\x28\xA4\xAD\x40\x00"
+                         "\x40\x06\x78\x80\x0A\x01\x03\x8F"
+                         "\x0A\x01\x06\x12\x80\x23\x06\xB8"
+                         "\xCB\x71\x26\x02\xDD\x6B\xB0\x3E"
+                         "\x50\x10\x16\xD0\x75\x68\x00\x01",
+               .rlen   = 40,
+               .assoc  = "\x00\x00\xA5\xF8\x00\x00\x00\x0A"
+                         "\xFA\xCE\xDB\xAD\xDE\xCA\xF8\x88",
+               .alen   = 16,
+               .input  = "\x05\x22\x15\xD1\x52\x56\x85\x04"
+                         "\xA8\x5C\x5D\x6D\x7E\x6E\xF5\xFA"
+                         "\xEA\x16\x37\x50\xF3\xDF\x84\x3B"
+                         "\x2F\x32\x18\x57\x34\x2A\x8C\x23"
+                         "\x67\xDF\x6D\x35\x7B\x54\x0D\xFB"
+                         "\x34\xA5\x9F\x6C\x48\x30\x1E\x22"
+                         "\xFE\xB1\x22\x17\x17\x8A\xB9\x5B",
+               .ilen   = 56,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8",
+               .klen   = 19,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .result = "\x45\x00\x00\x49\x33\xBA\x00\x00"
+                         "\x7F\x11\x91\x06\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xDD\x7B\x80\x03\x02\xD5"
+                         "\x00\x00\x4E\x20\x00\x1E\x8C\x18"
+                         "\xD7\x5B\x81\xDC\x91\xBA\xA0\x47"
+                         "\x6B\x91\xB9\x24\xB2\x80\x38\x9D"
+                         "\x92\xC9\x63\xBA\xC0\x46\xEC\x95"
+                         "\x9B\x62\x66\xC0\x47\x22\xB1\x49"
+                         "\x23\x01\x01\x01",
+               .rlen   = 76,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .input  = "\x92\xD0\x53\x79\x33\x38\xD5\xF3"
+                         "\x7D\xE4\x7A\x8E\x86\x03\xC9\x90"
+                         "\x96\x35\xAB\x9C\xFB\xE8\xA3\x76"
+                         "\xE9\xE9\xE2\xD1\x2E\x11\x0E\x00"
+                         "\xFA\xCE\xB5\x9E\x02\xA7\x7B\xEA"
+                         "\x71\x9A\x58\xFB\xA5\x8A\xE1\xB7"
+                         "\x9C\x39\x9D\xE3\xB5\x6E\x69\xE6"
+                         "\x63\xC9\xDB\x05\x69\x51\x12\xAD"
+                         "\x3E\x00\x32\x73\x86\xF2\xEE\xF5"
+                         "\x0F\xE8\x81\x7E\x84\xD3\xC0\x0D"
+                         "\x76\xD6\x55\xC6\xB4\xC2\x34\xC7"
+                         "\x12\x25\x0B\xF9",
+               .ilen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C",
+               .klen   = 35,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .result = "\x45\x08\x00\x28\x73\x2C\x00\x00"
+                         "\x40\x06\xE9\xF9\x0A\x01\x06\x12"
+                         "\x0A\x01\x03\x8F\x06\xB8\x80\x23"
+                         "\xDD\x6B\xAF\xBE\xCB\x71\x26\x02"
+                         "\x50\x10\x1F\x64\x6D\x54\x00\x01",
+               .rlen   = 40,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .input  = "\xCC\x74\xB7\xD3\xB0\x38\x50\x42"
+                         "\x2C\x64\x87\x46\x1E\x34\x10\x05"
+                         "\x29\x6B\xBB\x36\xE9\x69\xAD\x92"
+                         "\x82\xA1\x10\x6A\xEB\x0F\xDC\x7D"
+                         "\x08\xBA\xF3\x91\xCA\xAA\x61\xDA"
+                         "\x62\xF4\x14\x61\x5C\x9D\xB5\xA7"
+                         "\xEE\xD7\xB9\x7E\x87\x99\x9B\x7D",
+               .ilen   = 56,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x49\x33\x3E\x00\x00"
+                         "\x7F\x11\x91\x82\xC3\xFB\x1D\x10"
+                         "\xC2\xB1\xD3\x26\xC0\x28\x31\xCE"
+                         "\x00\x35\xCB\x45\x80\x03\x02\x5B"
+                         "\x00\x00\x01\xE0\x00\x1E\x8C\x18"
+                         "\xD6\x57\x59\xD5\x22\x84\xA0\x35"
+                         "\x2C\x71\x47\x5C\x88\x80\x39\x1C"
+                         "\x76\x4D\x6E\x5E\xE0\x49\x6B\x32"
+                         "\x5A\xE2\x70\xC0\x38\x99\x49\x39"
+                         "\x15\x01\x01\x01",
+               .rlen   = 76,
+               .assoc  = "\x42\xF6\x7E\x3F\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\x6A\x6B\x45\x5E\xD6\x9A\x52\xF6"
+                         "\xEF\x70\x1A\x9C\xE8\xD3\x19\x86"
+                         "\xC8\x02\xF0\xB0\x03\x09\xD9\x02"
+                         "\xA0\xD2\x59\x04\xD1\x85\x2A\x24"
+                         "\x1C\x67\x3E\xD8\x68\x72\x06\x94"
+                         "\x97\xBA\x4F\x76\x8D\xB0\x44\x5B"
+                         "\x69\xBF\xD5\xE2\x3D\xF1\x0B\x0C"
+                         "\xC0\xBF\xB1\x8F\x70\x09\x9E\xCE"
+                         "\xA5\xF2\x55\x58\x84\xFA\xF9\xB5"
+                         "\x23\xF4\x84\x40\x74\x14\x8A\x6B"
+                         "\xDB\xD7\x67\xED\xA4\x93\xF3\x47"
+                         "\xCC\xF7\x46\x6F",
+               .ilen   = 92,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\x73\x61\x6C",
+               .klen   = 35,
+               .iv     = "\x61\x6E\x64\x01\x69\x76\x65\x63",
+               .result = "\x63\x69\x73\x63\x6F\x01\x72\x75"
+                         "\x6C\x65\x73\x01\x74\x68\x65\x01"
+                         "\x6E\x65\x74\x77\x65\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x01\x74\x68\x65"
+                         "\x74\x65\x63\x68\x6E\x6F\x6C\x6F"
+                         "\x67\x69\x65\x73\x01\x74\x68\x61"
+                         "\x74\x77\x69\x6C\x6C\x01\x64\x65"
+                         "\x66\x69\x6E\x65\x74\x6F\x6D\x6F"
+                         "\x72\x72\x6F\x77\x01\x02\x02\x01",
+               .rlen   = 72,
+               .assoc  = "\x17\x40\x5E\x67\x15\x6F\x31\x26"
+                         "\xDD\x0D\xB9\x9B\x61\x6E\x64\x01"
+                         "\x69\x76\x65\x63",
+               .alen   = 20,
+               .input  = "\xEA\x15\xC4\x98\xAC\x15\x22\x37"
+                         "\x00\x07\x1D\xBE\x60\x5D\x73\x16"
+                         "\x4D\x0F\xCC\xCE\x8A\xD0\x49\xD4"
+                         "\x39\xA3\xD1\xB1\x21\x0A\x92\x1A"
+                         "\x2C\xCF\x8F\x9D\xC9\x91\x0D\xB4"
+                         "\x15\xFC\xBC\xA5\xC5\xBF\x54\xE5"
+                         "\x1C\xC7\x32\x41\x07\x7B\x2C\xB6"
+                         "\x5C\x23\x7C\x93\xEA\xEF\x23\x1C"
+                         "\x73\xF4\xE7\x12\x84\x4C\x37\x0A"
+                         "\x4A\x8F\x06\x37\x48\xF9\xF9\x05"
+                         "\x55\x13\x40\xC3\xD5\x55\x3A\x3D",
+               .ilen   = 88,
+       }, {
+               .key    = "\x7D\x77\x3D\x00\xC1\x44\xC5\x25"
+                         "\xAC\x61\x9D\x18\xC8\x4A\x3F\x47"
+                         "\xD9\x66\x42",
+               .klen   = 19,
+               .iv     = "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .result = "\x01\x02\x02\x01",
+               .rlen   = 4,
+               .assoc  = "\x33\x54\x67\xAE\xFF\xFF\xFF\xFF"
+                         "\x43\x45\x7E\x91\x82\x44\x3B\xC6",
+               .alen   = 16,
+               .input  = "\x4C\x72\x63\x30\x2F\xE6\x56\xDD"
+                         "\xD0\xD8\x60\x9D\x8B\xEF\x85\x90"
+                         "\xF7\x61\x24\x62",
+               .ilen   = 20,
+       }, {
+               .key    = "\xAB\xBC\xCD\xDE\xF0\x01\x12\x23"
+                         "\x34\x45\x56\x67\x78\x89\x9A\xAB"
+                         "\xDE\xCA\xF8",
+               .klen   = 19,
+               .iv     = "\xCA\xFE\xDE\xBA\xCE\xFA\xCE\x74",
+               .result = "\x74\x6F\x01\x62\x65\x01\x6F\x72"
+                         "\x01\x6E\x6F\x74\x01\x74\x6F\x01"
+                         "\x62\x65\x00\x01",
+               .rlen   = 20,
+               .assoc  = "\x00\x00\x01\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x01\xCA\xFE\xDE\xBA"
+                         "\xCE\xFA\xCE\x74",
+               .alen   = 20,
+               .input  = "\xA3\xBF\x52\x52\x65\x83\xBA\x81"
+                         "\x03\x9B\x84\xFC\x44\x8C\xBB\x81"
+                         "\x36\xE1\x78\xBB\xA5\x49\x3A\xD0"
+                         "\xF0\x6B\x21\xAF\x98\xC0\x34\xDC"
+                         "\x17\x17\x65\xAD",
+               .ilen   = 36,
+       }, {
+               .key    = "\x6C\x65\x67\x61\x6C\x69\x7A\x65"
+                         "\x6D\x61\x72\x69\x6A\x75\x61\x6E"
+                         "\x61\x61\x6E\x64\x64\x6F\x69\x74"
+                         "\x62\x65\x66\x6F\x72\x65\x69\x61"
+                         "\x74\x75\x72",
+               .klen   = 35,
+               .iv     = "\x33\x30\x21\x69\x67\x65\x74\x6D",
+               .result = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x79\x6B\x69\x63\xFF\xFF\xFF\xFF"
+                         "\xFF\xFF\xFF\xFF\x33\x30\x21\x69"
+                         "\x67\x65\x74\x6D",
+               .alen   = 20,
+               .input  = "\x96\xFD\x86\xF8\xD1\x98\xFF\x10"
+                         "\xAB\x8C\xDA\x8A\x5A\x08\x38\x1A"
+                         "\x48\x59\x80\x18\x1A\x18\x1A\x04"
+                         "\xC9\x0D\xE3\xE7\x0E\xA4\x0B\x75"
+                         "\x92\x9C\x52\x5C\x0B\xFB\xF8\xAF"
+                         "\x16\xC3\x35\xA8\xE7\xCE\x84\x04"
+                         "\xEB\x40\x6B\x7A\x8E\x75\xBB\x42"
+                         "\xE0\x63\x4B\x21\x44\xA2\x2B\x2B"
+                         "\x39\xDB\xC8\xDC",
+               .ilen   = 68,
+       }, {
+               .key    = "\x3D\xE0\x98\x74\xB3\x88\xE6\x49"
+                         "\x19\x88\xD0\xC3\x60\x7E\xAE\x1F"
+                         "\x57\x69\x0E",
+               .klen   = 19,
+               .iv     = "\x4E\x28\x00\x00\xA2\xFC\xA1\xA3",
+               .result = "\x45\x00\x00\x30\xDA\x3A\x00\x00"
+                         "\x80\x01\xDF\x3B\xC0\xA8\x00\x05"
+                         "\xC0\xA8\x00\x01\x08\x00\xC6\xCD"
+                         "\x02\x00\x07\x00\x61\x62\x63\x64"
+                         "\x65\x66\x67\x68\x69\x6A\x6B\x6C"
+                         "\x6D\x6E\x6F\x70\x71\x72\x73\x74"
+                         "\x01\x02\x02\x01",
+               .rlen   = 52,
+               .assoc  = "\x3F\x7E\xF6\x42\x10\x10\x10\x10"
+                         "\x10\x10\x10\x10\x4E\x28\x00\x00"
+                         "\xA2\xFC\xA1\xA3",
+               .alen   = 20,
+               .input  = "\x6A\x6B\x45\x27\x3F\x9E\x52\xF6"
+                         "\x10\x60\x54\x25\xEB\x80\x04\x93"
+                         "\xCA\x1B\x23\x97\xCB\x21\x2E\x01"
+                         "\xA2\xE7\x95\x41\x30\xE4\x4B\x1B"
+                         "\x79\x01\x58\x50\x01\x06\xE1\xE0"
+                         "\x2C\x83\x79\xD3\xDE\x46\x97\x1A"
+                         "\x44\xCC\x90\xBF\x00\x94\x94\x92"
+                         "\x20\x17\x0C\x1B\x55\xDE\x7E\x68"
+                         "\xF4\x95\x5D\x4F",
+               .ilen   = 68,
+       }, {
+               .key    = "\x4C\x80\xCD\xEF\xBB\x5D\x10\xDA"
+                         "\x90\x6A\xC7\x3C\x36\x13\xA6\x34"
+                         "\x22\x43\x3C",
+               .klen   = 19,
+               .iv     = "\x48\x55\xEC\x7D\x3A\x23\x4B\xFD",
+               .result = "\x08\x00\xC6\xCD\x02\x00\x07\x00"
+                         "\x61\x62\x63\x64\x65\x66\x67\x68"
+                         "\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70"
+                         "\x71\x72\x73\x74\x01\x02\x02\x01",
+               .rlen   = 32,
+               .assoc  = "\x00\x00\x43\x21\x87\x65\x43\x21"
+                         "\x00\x00\x00\x07\x48\x55\xEC\x7D"
+                         "\x3A\x23\x4B\xFD",
+               .alen   = 20,
+               .input  = "\x67\xE9\x28\xB3\x1C\xA4\x6D\x02"
+                         "\xF0\xB5\x37\xB6\x6B\x2F\xF5\x4F"
+                         "\xF8\xA3\x4C\x53\xB8\x12\x09\xBF"
+                         "\x58\x7D\xCF\x29\xA3\x41\x68\x6B"
+                         "\xCE\xE8\x79\x85\x3C\xB0\x3A\x8F"
+                         "\x16\xB0\xA1\x26\xC9\xBC\xBC\xA6",
+               .ilen   = 48,
+       }
+};
+
+/*
+ * ChaCha20-Poly1305 AEAD test vectors from RFC7539 2.8.2./A.5.
+ */
+#define RFC7539_ENC_TEST_VECTORS 2
+#define RFC7539_DEC_TEST_VECTORS 2
+static struct aead_testvec rfc7539_enc_tv_template[] = {
+       {
+               .key    = "\x80\x81\x82\x83\x84\x85\x86\x87"
+                         "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+                         "\x90\x91\x92\x93\x94\x95\x96\x97"
+                         "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+               .klen   = 32,
+               .iv     = "\x07\x00\x00\x00\x40\x41\x42\x43"
+                         "\x44\x45\x46\x47",
+               .assoc  = "\x50\x51\x52\x53\xc0\xc1\xc2\xc3"
+                         "\xc4\xc5\xc6\xc7",
+               .alen   = 12,
+               .input  = "\x4c\x61\x64\x69\x65\x73\x20\x61"
+                         "\x6e\x64\x20\x47\x65\x6e\x74\x6c"
+                         "\x65\x6d\x65\x6e\x20\x6f\x66\x20"
+                         "\x74\x68\x65\x20\x63\x6c\x61\x73"
+                         "\x73\x20\x6f\x66\x20\x27\x39\x39"
+                         "\x3a\x20\x49\x66\x20\x49\x20\x63"
+                         "\x6f\x75\x6c\x64\x20\x6f\x66\x66"
+                         "\x65\x72\x20\x79\x6f\x75\x20\x6f"
+                         "\x6e\x6c\x79\x20\x6f\x6e\x65\x20"
+                         "\x74\x69\x70\x20\x66\x6f\x72\x20"
+                         "\x74\x68\x65\x20\x66\x75\x74\x75"
+                         "\x72\x65\x2c\x20\x73\x75\x6e\x73"
+                         "\x63\x72\x65\x65\x6e\x20\x77\x6f"
+                         "\x75\x6c\x64\x20\x62\x65\x20\x69"
+                         "\x74\x2e",
+               .ilen   = 114,
+               .result = "\xd3\x1a\x8d\x34\x64\x8e\x60\xdb"
+                         "\x7b\x86\xaf\xbc\x53\xef\x7e\xc2"
+                         "\xa4\xad\xed\x51\x29\x6e\x08\xfe"
+                         "\xa9\xe2\xb5\xa7\x36\xee\x62\xd6"
+                         "\x3d\xbe\xa4\x5e\x8c\xa9\x67\x12"
+                         "\x82\xfa\xfb\x69\xda\x92\x72\x8b"
+                         "\x1a\x71\xde\x0a\x9e\x06\x0b\x29"
+                         "\x05\xd6\xa5\xb6\x7e\xcd\x3b\x36"
+                         "\x92\xdd\xbd\x7f\x2d\x77\x8b\x8c"
+                         "\x98\x03\xae\xe3\x28\x09\x1b\x58"
+                         "\xfa\xb3\x24\xe4\xfa\xd6\x75\x94"
+                         "\x55\x85\x80\x8b\x48\x31\xd7\xbc"
+                         "\x3f\xf4\xde\xf0\x8e\x4b\x7a\x9d"
+                         "\xe5\x76\xd2\x65\x86\xce\xc6\x4b"
+                         "\x61\x16\x1a\xe1\x0b\x59\x4f\x09"
+                         "\xe2\x6a\x7e\x90\x2e\xcb\xd0\x60"
+                         "\x06\x91",
+               .rlen   = 130,
+       }, {
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
+               .klen   = 32,
+               .iv     = "\x00\x00\x00\x00\x01\x02\x03\x04"
+                         "\x05\x06\x07\x08",
+               .assoc  = "\xf3\x33\x88\x86\x00\x00\x00\x00"
+                         "\x00\x00\x4e\x91",
+               .alen   = 12,
+               .input  = "\x49\x6e\x74\x65\x72\x6e\x65\x74"
+                         "\x2d\x44\x72\x61\x66\x74\x73\x20"
+                         "\x61\x72\x65\x20\x64\x72\x61\x66"
+                         "\x74\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x76\x61\x6c\x69"
+                         "\x64\x20\x66\x6f\x72\x20\x61\x20"
+                         "\x6d\x61\x78\x69\x6d\x75\x6d\x20"
+                         "\x6f\x66\x20\x73\x69\x78\x20\x6d"
+                         "\x6f\x6e\x74\x68\x73\x20\x61\x6e"
+                         "\x64\x20\x6d\x61\x79\x20\x62\x65"
+                         "\x20\x75\x70\x64\x61\x74\x65\x64"
+                         "\x2c\x20\x72\x65\x70\x6c\x61\x63"
+                         "\x65\x64\x2c\x20\x6f\x72\x20\x6f"
+                         "\x62\x73\x6f\x6c\x65\x74\x65\x64"
+                         "\x20\x62\x79\x20\x6f\x74\x68\x65"
+                         "\x72\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x61\x74\x20\x61"
+                         "\x6e\x79\x20\x74\x69\x6d\x65\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x69"
+                         "\x6e\x61\x70\x70\x72\x6f\x70\x72"
+                         "\x69\x61\x74\x65\x20\x74\x6f\x20"
+                         "\x75\x73\x65\x20\x49\x6e\x74\x65"
+                         "\x72\x6e\x65\x74\x2d\x44\x72\x61"
+                         "\x66\x74\x73\x20\x61\x73\x20\x72"
+                         "\x65\x66\x65\x72\x65\x6e\x63\x65"
+                         "\x20\x6d\x61\x74\x65\x72\x69\x61"
+                         "\x6c\x20\x6f\x72\x20\x74\x6f\x20"
+                         "\x63\x69\x74\x65\x20\x74\x68\x65"
+                         "\x6d\x20\x6f\x74\x68\x65\x72\x20"
+                         "\x74\x68\x61\x6e\x20\x61\x73\x20"
+                         "\x2f\xe2\x80\x9c\x77\x6f\x72\x6b"
+                         "\x20\x69\x6e\x20\x70\x72\x6f\x67"
+                         "\x72\x65\x73\x73\x2e\x2f\xe2\x80"
+                         "\x9d",
+               .ilen   = 265,
+               .result = "\x64\xa0\x86\x15\x75\x86\x1a\xf4"
+                         "\x60\xf0\x62\xc7\x9b\xe6\x43\xbd"
+                         "\x5e\x80\x5c\xfd\x34\x5c\xf3\x89"
+                         "\xf1\x08\x67\x0a\xc7\x6c\x8c\xb2"
+                         "\x4c\x6c\xfc\x18\x75\x5d\x43\xee"
+                         "\xa0\x9e\xe9\x4e\x38\x2d\x26\xb0"
+                         "\xbd\xb7\xb7\x3c\x32\x1b\x01\x00"
+                         "\xd4\xf0\x3b\x7f\x35\x58\x94\xcf"
+                         "\x33\x2f\x83\x0e\x71\x0b\x97\xce"
+                         "\x98\xc8\xa8\x4a\xbd\x0b\x94\x81"
+                         "\x14\xad\x17\x6e\x00\x8d\x33\xbd"
+                         "\x60\xf9\x82\xb1\xff\x37\xc8\x55"
+                         "\x97\x97\xa0\x6e\xf4\xf0\xef\x61"
+                         "\xc1\x86\x32\x4e\x2b\x35\x06\x38"
+                         "\x36\x06\x90\x7b\x6a\x7c\x02\xb0"
+                         "\xf9\xf6\x15\x7b\x53\xc8\x67\xe4"
+                         "\xb9\x16\x6c\x76\x7b\x80\x4d\x46"
+                         "\xa5\x9b\x52\x16\xcd\xe7\xa4\xe9"
+                         "\x90\x40\xc5\xa4\x04\x33\x22\x5e"
+                         "\xe2\x82\xa1\xb0\xa0\x6c\x52\x3e"
+                         "\xaf\x45\x34\xd7\xf8\x3f\xa1\x15"
+                         "\x5b\x00\x47\x71\x8c\xbc\x54\x6a"
+                         "\x0d\x07\x2b\x04\xb3\x56\x4e\xea"
+                         "\x1b\x42\x22\x73\xf5\x48\x27\x1a"
+                         "\x0b\xb2\x31\x60\x53\xfa\x76\x99"
+                         "\x19\x55\xeb\xd6\x31\x59\x43\x4e"
+                         "\xce\xbb\x4e\x46\x6d\xae\x5a\x10"
+                         "\x73\xa6\x72\x76\x27\x09\x7a\x10"
+                         "\x49\xe6\x17\xd9\x1d\x36\x10\x94"
+                         "\xfa\x68\xf0\xff\x77\x98\x71\x30"
+                         "\x30\x5b\xea\xba\x2e\xda\x04\xdf"
+                         "\x99\x7b\x71\x4d\x6c\x6f\x2c\x29"
+                         "\xa6\xad\x5c\xb4\x02\x2b\x02\x70"
+                         "\x9b\xee\xad\x9d\x67\x89\x0c\xbb"
+                         "\x22\x39\x23\x36\xfe\xa1\x85\x1f"
+                         "\x38",
+               .rlen   = 281,
+       },
+};
+
+static struct aead_testvec rfc7539_dec_tv_template[] = {
+       {
+               .key    = "\x80\x81\x82\x83\x84\x85\x86\x87"
+                         "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+                         "\x90\x91\x92\x93\x94\x95\x96\x97"
+                         "\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f",
+               .klen   = 32,
+               .iv     = "\x07\x00\x00\x00\x40\x41\x42\x43"
+                         "\x44\x45\x46\x47",
+               .assoc  = "\x50\x51\x52\x53\xc0\xc1\xc2\xc3"
+                         "\xc4\xc5\xc6\xc7",
+               .alen   = 12,
+               .input  = "\xd3\x1a\x8d\x34\x64\x8e\x60\xdb"
+                         "\x7b\x86\xaf\xbc\x53\xef\x7e\xc2"
+                         "\xa4\xad\xed\x51\x29\x6e\x08\xfe"
+                         "\xa9\xe2\xb5\xa7\x36\xee\x62\xd6"
+                         "\x3d\xbe\xa4\x5e\x8c\xa9\x67\x12"
+                         "\x82\xfa\xfb\x69\xda\x92\x72\x8b"
+                         "\x1a\x71\xde\x0a\x9e\x06\x0b\x29"
+                         "\x05\xd6\xa5\xb6\x7e\xcd\x3b\x36"
+                         "\x92\xdd\xbd\x7f\x2d\x77\x8b\x8c"
+                         "\x98\x03\xae\xe3\x28\x09\x1b\x58"
+                         "\xfa\xb3\x24\xe4\xfa\xd6\x75\x94"
+                         "\x55\x85\x80\x8b\x48\x31\xd7\xbc"
+                         "\x3f\xf4\xde\xf0\x8e\x4b\x7a\x9d"
+                         "\xe5\x76\xd2\x65\x86\xce\xc6\x4b"
+                         "\x61\x16\x1a\xe1\x0b\x59\x4f\x09"
+                         "\xe2\x6a\x7e\x90\x2e\xcb\xd0\x60"
+                         "\x06\x91",
+               .ilen   = 130,
+               .result = "\x4c\x61\x64\x69\x65\x73\x20\x61"
+                         "\x6e\x64\x20\x47\x65\x6e\x74\x6c"
+                         "\x65\x6d\x65\x6e\x20\x6f\x66\x20"
+                         "\x74\x68\x65\x20\x63\x6c\x61\x73"
+                         "\x73\x20\x6f\x66\x20\x27\x39\x39"
+                         "\x3a\x20\x49\x66\x20\x49\x20\x63"
+                         "\x6f\x75\x6c\x64\x20\x6f\x66\x66"
+                         "\x65\x72\x20\x79\x6f\x75\x20\x6f"
+                         "\x6e\x6c\x79\x20\x6f\x6e\x65\x20"
+                         "\x74\x69\x70\x20\x66\x6f\x72\x20"
+                         "\x74\x68\x65\x20\x66\x75\x74\x75"
+                         "\x72\x65\x2c\x20\x73\x75\x6e\x73"
+                         "\x63\x72\x65\x65\x6e\x20\x77\x6f"
+                         "\x75\x6c\x64\x20\x62\x65\x20\x69"
+                         "\x74\x2e",
+               .rlen   = 114,
+       }, {
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
+               .klen   = 32,
+               .iv     = "\x00\x00\x00\x00\x01\x02\x03\x04"
+                         "\x05\x06\x07\x08",
+               .assoc  = "\xf3\x33\x88\x86\x00\x00\x00\x00"
+                         "\x00\x00\x4e\x91",
+               .alen   = 12,
+               .input  = "\x64\xa0\x86\x15\x75\x86\x1a\xf4"
+                         "\x60\xf0\x62\xc7\x9b\xe6\x43\xbd"
+                         "\x5e\x80\x5c\xfd\x34\x5c\xf3\x89"
+                         "\xf1\x08\x67\x0a\xc7\x6c\x8c\xb2"
+                         "\x4c\x6c\xfc\x18\x75\x5d\x43\xee"
+                         "\xa0\x9e\xe9\x4e\x38\x2d\x26\xb0"
+                         "\xbd\xb7\xb7\x3c\x32\x1b\x01\x00"
+                         "\xd4\xf0\x3b\x7f\x35\x58\x94\xcf"
+                         "\x33\x2f\x83\x0e\x71\x0b\x97\xce"
+                         "\x98\xc8\xa8\x4a\xbd\x0b\x94\x81"
+                         "\x14\xad\x17\x6e\x00\x8d\x33\xbd"
+                         "\x60\xf9\x82\xb1\xff\x37\xc8\x55"
+                         "\x97\x97\xa0\x6e\xf4\xf0\xef\x61"
+                         "\xc1\x86\x32\x4e\x2b\x35\x06\x38"
+                         "\x36\x06\x90\x7b\x6a\x7c\x02\xb0"
+                         "\xf9\xf6\x15\x7b\x53\xc8\x67\xe4"
+                         "\xb9\x16\x6c\x76\x7b\x80\x4d\x46"
+                         "\xa5\x9b\x52\x16\xcd\xe7\xa4\xe9"
+                         "\x90\x40\xc5\xa4\x04\x33\x22\x5e"
+                         "\xe2\x82\xa1\xb0\xa0\x6c\x52\x3e"
+                         "\xaf\x45\x34\xd7\xf8\x3f\xa1\x15"
+                         "\x5b\x00\x47\x71\x8c\xbc\x54\x6a"
+                         "\x0d\x07\x2b\x04\xb3\x56\x4e\xea"
+                         "\x1b\x42\x22\x73\xf5\x48\x27\x1a"
+                         "\x0b\xb2\x31\x60\x53\xfa\x76\x99"
+                         "\x19\x55\xeb\xd6\x31\x59\x43\x4e"
+                         "\xce\xbb\x4e\x46\x6d\xae\x5a\x10"
+                         "\x73\xa6\x72\x76\x27\x09\x7a\x10"
+                         "\x49\xe6\x17\xd9\x1d\x36\x10\x94"
+                         "\xfa\x68\xf0\xff\x77\x98\x71\x30"
+                         "\x30\x5b\xea\xba\x2e\xda\x04\xdf"
+                         "\x99\x7b\x71\x4d\x6c\x6f\x2c\x29"
+                         "\xa6\xad\x5c\xb4\x02\x2b\x02\x70"
+                         "\x9b\xee\xad\x9d\x67\x89\x0c\xbb"
+                         "\x22\x39\x23\x36\xfe\xa1\x85\x1f"
+                         "\x38",
+               .ilen   = 281,
+               .result = "\x49\x6e\x74\x65\x72\x6e\x65\x74"
+                         "\x2d\x44\x72\x61\x66\x74\x73\x20"
+                         "\x61\x72\x65\x20\x64\x72\x61\x66"
+                         "\x74\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x76\x61\x6c\x69"
+                         "\x64\x20\x66\x6f\x72\x20\x61\x20"
+                         "\x6d\x61\x78\x69\x6d\x75\x6d\x20"
+                         "\x6f\x66\x20\x73\x69\x78\x20\x6d"
+                         "\x6f\x6e\x74\x68\x73\x20\x61\x6e"
+                         "\x64\x20\x6d\x61\x79\x20\x62\x65"
+                         "\x20\x75\x70\x64\x61\x74\x65\x64"
+                         "\x2c\x20\x72\x65\x70\x6c\x61\x63"
+                         "\x65\x64\x2c\x20\x6f\x72\x20\x6f"
+                         "\x62\x73\x6f\x6c\x65\x74\x65\x64"
+                         "\x20\x62\x79\x20\x6f\x74\x68\x65"
+                         "\x72\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x61\x74\x20\x61"
+                         "\x6e\x79\x20\x74\x69\x6d\x65\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x69"
+                         "\x6e\x61\x70\x70\x72\x6f\x70\x72"
+                         "\x69\x61\x74\x65\x20\x74\x6f\x20"
+                         "\x75\x73\x65\x20\x49\x6e\x74\x65"
+                         "\x72\x6e\x65\x74\x2d\x44\x72\x61"
+                         "\x66\x74\x73\x20\x61\x73\x20\x72"
+                         "\x65\x66\x65\x72\x65\x6e\x63\x65"
+                         "\x20\x6d\x61\x74\x65\x72\x69\x61"
+                         "\x6c\x20\x6f\x72\x20\x74\x6f\x20"
+                         "\x63\x69\x74\x65\x20\x74\x68\x65"
+                         "\x6d\x20\x6f\x74\x68\x65\x72\x20"
+                         "\x74\x68\x61\x6e\x20\x61\x73\x20"
+                         "\x2f\xe2\x80\x9c\x77\x6f\x72\x6b"
+                         "\x20\x69\x6e\x20\x70\x72\x6f\x67"
+                         "\x72\x65\x73\x73\x2e\x2f\xe2\x80"
+                         "\x9d",
+               .rlen   = 265,
+       },
+};
+
+/*
+ * draft-irtf-cfrg-chacha20-poly1305
+ */
+#define RFC7539ESP_DEC_TEST_VECTORS 1
+#define RFC7539ESP_ENC_TEST_VECTORS 1
+static struct aead_testvec rfc7539esp_enc_tv_template[] = {
+       {
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0"
+                         "\x00\x00\x00\x00",
+               .klen   = 36,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .assoc  = "\xf3\x33\x88\x86\x00\x00\x00\x00"
+                         "\x00\x00\x4e\x91\x01\x02\x03\x04"
+                         "\x05\x06\x07\x08",
+               .alen   = 20,
+               .input  = "\x49\x6e\x74\x65\x72\x6e\x65\x74"
+                         "\x2d\x44\x72\x61\x66\x74\x73\x20"
+                         "\x61\x72\x65\x20\x64\x72\x61\x66"
+                         "\x74\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x76\x61\x6c\x69"
+                         "\x64\x20\x66\x6f\x72\x20\x61\x20"
+                         "\x6d\x61\x78\x69\x6d\x75\x6d\x20"
+                         "\x6f\x66\x20\x73\x69\x78\x20\x6d"
+                         "\x6f\x6e\x74\x68\x73\x20\x61\x6e"
+                         "\x64\x20\x6d\x61\x79\x20\x62\x65"
+                         "\x20\x75\x70\x64\x61\x74\x65\x64"
+                         "\x2c\x20\x72\x65\x70\x6c\x61\x63"
+                         "\x65\x64\x2c\x20\x6f\x72\x20\x6f"
+                         "\x62\x73\x6f\x6c\x65\x74\x65\x64"
+                         "\x20\x62\x79\x20\x6f\x74\x68\x65"
+                         "\x72\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x61\x74\x20\x61"
+                         "\x6e\x79\x20\x74\x69\x6d\x65\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x69"
+                         "\x6e\x61\x70\x70\x72\x6f\x70\x72"
+                         "\x69\x61\x74\x65\x20\x74\x6f\x20"
+                         "\x75\x73\x65\x20\x49\x6e\x74\x65"
+                         "\x72\x6e\x65\x74\x2d\x44\x72\x61"
+                         "\x66\x74\x73\x20\x61\x73\x20\x72"
+                         "\x65\x66\x65\x72\x65\x6e\x63\x65"
+                         "\x20\x6d\x61\x74\x65\x72\x69\x61"
+                         "\x6c\x20\x6f\x72\x20\x74\x6f\x20"
+                         "\x63\x69\x74\x65\x20\x74\x68\x65"
+                         "\x6d\x20\x6f\x74\x68\x65\x72\x20"
+                         "\x74\x68\x61\x6e\x20\x61\x73\x20"
+                         "\x2f\xe2\x80\x9c\x77\x6f\x72\x6b"
+                         "\x20\x69\x6e\x20\x70\x72\x6f\x67"
+                         "\x72\x65\x73\x73\x2e\x2f\xe2\x80"
+                         "\x9d",
+               .ilen   = 265,
+               .result = "\x64\xa0\x86\x15\x75\x86\x1a\xf4"
+                         "\x60\xf0\x62\xc7\x9b\xe6\x43\xbd"
+                         "\x5e\x80\x5c\xfd\x34\x5c\xf3\x89"
+                         "\xf1\x08\x67\x0a\xc7\x6c\x8c\xb2"
+                         "\x4c\x6c\xfc\x18\x75\x5d\x43\xee"
+                         "\xa0\x9e\xe9\x4e\x38\x2d\x26\xb0"
+                         "\xbd\xb7\xb7\x3c\x32\x1b\x01\x00"
+                         "\xd4\xf0\x3b\x7f\x35\x58\x94\xcf"
+                         "\x33\x2f\x83\x0e\x71\x0b\x97\xce"
+                         "\x98\xc8\xa8\x4a\xbd\x0b\x94\x81"
+                         "\x14\xad\x17\x6e\x00\x8d\x33\xbd"
+                         "\x60\xf9\x82\xb1\xff\x37\xc8\x55"
+                         "\x97\x97\xa0\x6e\xf4\xf0\xef\x61"
+                         "\xc1\x86\x32\x4e\x2b\x35\x06\x38"
+                         "\x36\x06\x90\x7b\x6a\x7c\x02\xb0"
+                         "\xf9\xf6\x15\x7b\x53\xc8\x67\xe4"
+                         "\xb9\x16\x6c\x76\x7b\x80\x4d\x46"
+                         "\xa5\x9b\x52\x16\xcd\xe7\xa4\xe9"
+                         "\x90\x40\xc5\xa4\x04\x33\x22\x5e"
+                         "\xe2\x82\xa1\xb0\xa0\x6c\x52\x3e"
+                         "\xaf\x45\x34\xd7\xf8\x3f\xa1\x15"
+                         "\x5b\x00\x47\x71\x8c\xbc\x54\x6a"
+                         "\x0d\x07\x2b\x04\xb3\x56\x4e\xea"
+                         "\x1b\x42\x22\x73\xf5\x48\x27\x1a"
+                         "\x0b\xb2\x31\x60\x53\xfa\x76\x99"
+                         "\x19\x55\xeb\xd6\x31\x59\x43\x4e"
+                         "\xce\xbb\x4e\x46\x6d\xae\x5a\x10"
+                         "\x73\xa6\x72\x76\x27\x09\x7a\x10"
+                         "\x49\xe6\x17\xd9\x1d\x36\x10\x94"
+                         "\xfa\x68\xf0\xff\x77\x98\x71\x30"
+                         "\x30\x5b\xea\xba\x2e\xda\x04\xdf"
+                         "\x99\x7b\x71\x4d\x6c\x6f\x2c\x29"
+                         "\xa6\xad\x5c\xb4\x02\x2b\x02\x70"
+                         "\x9b\xee\xad\x9d\x67\x89\x0c\xbb"
+                         "\x22\x39\x23\x36\xfe\xa1\x85\x1f"
+                         "\x38",
+               .rlen   = 281,
+       },
+};
+
+static struct aead_testvec rfc7539esp_dec_tv_template[] = {
+       {
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0"
+                         "\x00\x00\x00\x00",
+               .klen   = 36,
+               .iv     = "\x01\x02\x03\x04\x05\x06\x07\x08",
+               .assoc  = "\xf3\x33\x88\x86\x00\x00\x00\x00"
+                         "\x00\x00\x4e\x91\x01\x02\x03\x04"
+                         "\x05\x06\x07\x08",
+               .alen   = 20,
+               .input  = "\x64\xa0\x86\x15\x75\x86\x1a\xf4"
+                         "\x60\xf0\x62\xc7\x9b\xe6\x43\xbd"
+                         "\x5e\x80\x5c\xfd\x34\x5c\xf3\x89"
+                         "\xf1\x08\x67\x0a\xc7\x6c\x8c\xb2"
+                         "\x4c\x6c\xfc\x18\x75\x5d\x43\xee"
+                         "\xa0\x9e\xe9\x4e\x38\x2d\x26\xb0"
+                         "\xbd\xb7\xb7\x3c\x32\x1b\x01\x00"
+                         "\xd4\xf0\x3b\x7f\x35\x58\x94\xcf"
+                         "\x33\x2f\x83\x0e\x71\x0b\x97\xce"
+                         "\x98\xc8\xa8\x4a\xbd\x0b\x94\x81"
+                         "\x14\xad\x17\x6e\x00\x8d\x33\xbd"
+                         "\x60\xf9\x82\xb1\xff\x37\xc8\x55"
+                         "\x97\x97\xa0\x6e\xf4\xf0\xef\x61"
+                         "\xc1\x86\x32\x4e\x2b\x35\x06\x38"
+                         "\x36\x06\x90\x7b\x6a\x7c\x02\xb0"
+                         "\xf9\xf6\x15\x7b\x53\xc8\x67\xe4"
+                         "\xb9\x16\x6c\x76\x7b\x80\x4d\x46"
+                         "\xa5\x9b\x52\x16\xcd\xe7\xa4\xe9"
+                         "\x90\x40\xc5\xa4\x04\x33\x22\x5e"
+                         "\xe2\x82\xa1\xb0\xa0\x6c\x52\x3e"
+                         "\xaf\x45\x34\xd7\xf8\x3f\xa1\x15"
+                         "\x5b\x00\x47\x71\x8c\xbc\x54\x6a"
+                         "\x0d\x07\x2b\x04\xb3\x56\x4e\xea"
+                         "\x1b\x42\x22\x73\xf5\x48\x27\x1a"
+                         "\x0b\xb2\x31\x60\x53\xfa\x76\x99"
+                         "\x19\x55\xeb\xd6\x31\x59\x43\x4e"
+                         "\xce\xbb\x4e\x46\x6d\xae\x5a\x10"
+                         "\x73\xa6\x72\x76\x27\x09\x7a\x10"
+                         "\x49\xe6\x17\xd9\x1d\x36\x10\x94"
+                         "\xfa\x68\xf0\xff\x77\x98\x71\x30"
+                         "\x30\x5b\xea\xba\x2e\xda\x04\xdf"
+                         "\x99\x7b\x71\x4d\x6c\x6f\x2c\x29"
+                         "\xa6\xad\x5c\xb4\x02\x2b\x02\x70"
+                         "\x9b\xee\xad\x9d\x67\x89\x0c\xbb"
+                         "\x22\x39\x23\x36\xfe\xa1\x85\x1f"
+                         "\x38",
+               .ilen   = 281,
+               .result = "\x49\x6e\x74\x65\x72\x6e\x65\x74"
+                         "\x2d\x44\x72\x61\x66\x74\x73\x20"
+                         "\x61\x72\x65\x20\x64\x72\x61\x66"
+                         "\x74\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x76\x61\x6c\x69"
+                         "\x64\x20\x66\x6f\x72\x20\x61\x20"
+                         "\x6d\x61\x78\x69\x6d\x75\x6d\x20"
+                         "\x6f\x66\x20\x73\x69\x78\x20\x6d"
+                         "\x6f\x6e\x74\x68\x73\x20\x61\x6e"
+                         "\x64\x20\x6d\x61\x79\x20\x62\x65"
+                         "\x20\x75\x70\x64\x61\x74\x65\x64"
+                         "\x2c\x20\x72\x65\x70\x6c\x61\x63"
+                         "\x65\x64\x2c\x20\x6f\x72\x20\x6f"
+                         "\x62\x73\x6f\x6c\x65\x74\x65\x64"
+                         "\x20\x62\x79\x20\x6f\x74\x68\x65"
+                         "\x72\x20\x64\x6f\x63\x75\x6d\x65"
+                         "\x6e\x74\x73\x20\x61\x74\x20\x61"
+                         "\x6e\x79\x20\x74\x69\x6d\x65\x2e"
+                         "\x20\x49\x74\x20\x69\x73\x20\x69"
+                         "\x6e\x61\x70\x70\x72\x6f\x70\x72"
+                         "\x69\x61\x74\x65\x20\x74\x6f\x20"
+                         "\x75\x73\x65\x20\x49\x6e\x74\x65"
+                         "\x72\x6e\x65\x74\x2d\x44\x72\x61"
+                         "\x66\x74\x73\x20\x61\x73\x20\x72"
+                         "\x65\x66\x65\x72\x65\x6e\x63\x65"
+                         "\x20\x6d\x61\x74\x65\x72\x69\x61"
+                         "\x6c\x20\x6f\x72\x20\x74\x6f\x20"
+                         "\x63\x69\x74\x65\x20\x74\x68\x65"
+                         "\x6d\x20\x6f\x74\x68\x65\x72\x20"
+                         "\x74\x68\x61\x6e\x20\x61\x73\x20"
+                         "\x2f\xe2\x80\x9c\x77\x6f\x72\x6b"
+                         "\x20\x69\x6e\x20\x70\x72\x6f\x67"
+                         "\x72\x65\x73\x73\x2e\x2f\xe2\x80"
+                         "\x9d",
+               .rlen   = 265,
+       },
+};
+
+/*
+ * All key wrapping test vectors taken from
+ * http://csrc.nist.gov/groups/STM/cavp/documents/mac/kwtestvectors.zip
+ *
+ * Note: as documented in keywrap.c, the ivout for encryption is the first
+ * semiblock of the ciphertext from the test vector. For decryption, iv is
+ * the first semiblock of the ciphertext.
+ */
+static struct cipher_testvec aes_kw_enc_tv_template[] = {
+       {
+               .key    = "\x75\x75\xda\x3a\x93\x60\x7c\xc2"
+                         "\xbf\xd8\xce\xc7\xaa\xdf\xd9\xa6",
                .klen   = 16,
-               .dt     = "\x63\x76\xbb\xe5\x29\x02\xba\x3b"
-                         "\x67\xc9\x25\xfa\x70\x1f\x11\xac",
-               .dtlen  = 16,
-               .v      = "\x57\x2c\x8e\x76\x87\x26\x47\x97"
-                         "\x7e\x74\xfb\xdd\xc4\x95\x01\xd1",
-               .vlen   = 16,
-               .result = "\x48\xe9\xbd\x0d\x06\xee\x18\xfb"
-                         "\xe4\x57\x90\xd5\xc3\xfc\x9b\x73",
+               .input  = "\x42\x13\x6d\x3c\x38\x4a\x3e\xea"
+                         "\xc9\x5a\x06\x6f\xd2\x8f\xed\x3f",
+               .ilen   = 16,
+               .result = "\xf6\x85\x94\x81\x6f\x64\xca\xa3"
+                         "\xf5\x6f\xab\xea\x25\x48\xf5\xfb",
                .rlen   = 16,
-               .loops  = 10000,
+               .iv_out = "\x03\x1f\x6b\xd7\xe6\x1e\x64\x3d",
+       },
+};
+
+static struct cipher_testvec aes_kw_dec_tv_template[] = {
+       {
+               .key    = "\x80\xaa\x99\x73\x27\xa4\x80\x6b"
+                         "\x6a\x7a\x41\xa5\x2b\x86\xc3\x71"
+                         "\x03\x86\xf9\x32\x78\x6e\xf7\x96"
+                         "\x76\xfa\xfb\x90\xb8\x26\x3c\x5f",
+               .klen   = 32,
+               .input  = "\xd3\x3d\x3d\x97\x7b\xf0\xa9\x15"
+                         "\x59\xf9\x9c\x8a\xcd\x29\x3d\x43",
+               .ilen   = 16,
+               .result = "\x0a\x25\x6b\xa7\x5c\xfa\x03\xaa"
+                         "\xa0\x2b\xa9\x42\x03\xf1\x5b\xaa",
+               .rlen   = 16,
+               .iv     = "\x42\x3c\x96\x0d\x8a\x2a\xc4\xc1",
        },
 };
 
 /*
- * SP800-90A DRBG Test vectors from
- * http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip
- *
- * Test vectors for DRBG with prediction resistance. All types of DRBGs
- * (Hash, HMAC, CTR) are tested with all permutations of use cases (w/ and
- * w/o personalization string, w/ and w/o additional input string).
+ * ANSI X9.31 Continuous Pseudo-Random Number Generator (AES mode)
+ * test vectors, taken from Appendix B.2.9 and B.2.10:
+ *     http://csrc.nist.gov/groups/STM/cavp/documents/rng/RNGVS.pdf
+ * Only AES-128 is supported at this time.
  */
-static struct drbg_testvec drbg_pr_sha256_tv_template[] = {
+#define ANSI_CPRNG_AES_TEST_VECTORS    6
+
+static struct cprng_testvec ansi_cprng_aes_tv_template[] = {
        {
-               .entropy = (unsigned char *)
-                       "\x72\x88\x4c\xcd\x6c\x85\x57\x70\xf7\x0b\x8b\x86"
-                       "\xc1\xeb\xd2\x4e\x36\x14\xab\x18\xc4\x9c\xc9\xcf"
+               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
+                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
+               .klen   = 16,
+               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
+                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xf9",
+               .dtlen  = 16,
+               .v      = "\x80\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .vlen   = 16,
+               .result = "\x59\x53\x1e\xd1\x3b\xb0\xc0\x55"
+                         "\x84\x79\x66\x85\xc1\x2f\x76\x41",
+               .rlen   = 16,
+               .loops  = 1,
+       }, {
+               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
+                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
+               .klen   = 16,
+               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
+                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfa",
+               .dtlen  = 16,
+               .v      = "\xc0\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .vlen   = 16,
+               .result = "\x7c\x22\x2c\xf4\xca\x8f\xa2\x4c"
+                         "\x1c\x9c\xb6\x41\xa9\xf3\x22\x0d",
+               .rlen   = 16,
+               .loops  = 1,
+       }, {
+               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
+                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
+               .klen   = 16,
+               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
+                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfb",
+               .dtlen  = 16,
+               .v      = "\xe0\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .vlen   = 16,
+               .result = "\x8a\xaa\x00\x39\x66\x67\x5b\xe5"
+                         "\x29\x14\x28\x81\xa9\x4d\x4e\xc7",
+               .rlen   = 16,
+               .loops  = 1,
+       }, {
+               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
+                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
+               .klen   = 16,
+               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
+                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfc",
+               .dtlen  = 16,
+               .v      = "\xf0\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .vlen   = 16,
+               .result = "\x88\xdd\xa4\x56\x30\x24\x23\xe5"
+                         "\xf6\x9d\xa5\x7e\x7b\x95\xc7\x3a",
+               .rlen   = 16,
+               .loops  = 1,
+       }, {
+               .key    = "\xf3\xb1\x66\x6d\x13\x60\x72\x42"
+                         "\xed\x06\x1c\xab\xb8\xd4\x62\x02",
+               .klen   = 16,
+               .dt     = "\xe6\xb3\xbe\x78\x2a\x23\xfa\x62"
+                         "\xd7\x1d\x4a\xfb\xb0\xe9\x22\xfd",
+               .dtlen  = 16,
+               .v      = "\xf8\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .vlen   = 16,
+               .result = "\x05\x25\x92\x46\x61\x79\xd2\xcb"
+                         "\x78\xc4\x0b\x14\x0a\x5a\x9a\xc8",
+               .rlen   = 16,
+               .loops  = 1,
+       }, {    /* Monte Carlo Test */
+               .key    = "\x9f\x5b\x51\x20\x0b\xf3\x34\xb5"
+                         "\xd8\x2b\xe8\xc3\x72\x55\xc8\x48",
+               .klen   = 16,
+               .dt     = "\x63\x76\xbb\xe5\x29\x02\xba\x3b"
+                         "\x67\xc9\x25\xfa\x70\x1f\x11\xac",
+               .dtlen  = 16,
+               .v      = "\x57\x2c\x8e\x76\x87\x26\x47\x97"
+                         "\x7e\x74\xfb\xdd\xc4\x95\x01\xd1",
+               .vlen   = 16,
+               .result = "\x48\xe9\xbd\x0d\x06\xee\x18\xfb"
+                         "\xe4\x57\x90\xd5\xc3\xfc\x9b\x73",
+               .rlen   = 16,
+               .loops  = 10000,
+       },
+};
+
+/*
+ * SP800-90A DRBG Test vectors from
+ * http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip
+ *
+ * Test vectors for DRBG with prediction resistance. All types of DRBGs
+ * (Hash, HMAC, CTR) are tested with all permutations of use cases (w/ and
+ * w/o personalization string, w/ and w/o additional input string).
+ */
+static struct drbg_testvec drbg_pr_sha256_tv_template[] = {
+       {
+               .entropy = (unsigned char *)
+                       "\x72\x88\x4c\xcd\x6c\x85\x57\x70\xf7\x0b\x8b\x86"
+                       "\xc1\xeb\xd2\x4e\x36\x14\xab\x18\xc4\x9c\xc9\xcf"
                        "\x1a\xe8\xf7\x7b\x02\x49\x73\xd7\xf1\x42\x7d\xc6"
                        "\x3f\x29\x2d\xec\xd3\x66\x51\x3f\x1d\x8d\x5b\x4e",
                .entropylen = 48,
@@ -28370,6 +31539,515 @@ static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
        },
 };
 
+#define CHACHA20_ENC_TEST_VECTORS 4
+static struct cipher_testvec chacha20_enc_tv_template[] = {
+       { /* RFC7539 A.2. Test Vector #1 */
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .klen   = 32,
+               .iv     = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .input  = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00",
+               .ilen   = 64,
+               .result = "\x76\xb8\xe0\xad\xa0\xf1\x3d\x90"
+                         "\x40\x5d\x6a\xe5\x53\x86\xbd\x28"
+                         "\xbd\xd2\x19\xb8\xa0\x8d\xed\x1a"
+                         "\xa8\x36\xef\xcc\x8b\x77\x0d\xc7"
+                         "\xda\x41\x59\x7c\x51\x57\x48\x8d"
+                         "\x77\x24\xe0\x3f\xb8\xd8\x4a\x37"
+                         "\x6a\x43\xb8\xf4\x15\x18\xa1\x1c"
+                         "\xc3\x87\xb6\x69\xb2\xee\x65\x86",
+               .rlen   = 64,
+       }, { /* RFC7539 A.2. Test Vector #2 */
+               .key    = "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .klen   = 32,
+               .iv     = "\x01\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x02",
+               .input  = "\x41\x6e\x79\x20\x73\x75\x62\x6d"
+                         "\x69\x73\x73\x69\x6f\x6e\x20\x74"
+                         "\x6f\x20\x74\x68\x65\x20\x49\x45"
+                         "\x54\x46\x20\x69\x6e\x74\x65\x6e"
+                         "\x64\x65\x64\x20\x62\x79\x20\x74"
+                         "\x68\x65\x20\x43\x6f\x6e\x74\x72"
+                         "\x69\x62\x75\x74\x6f\x72\x20\x66"
+                         "\x6f\x72\x20\x70\x75\x62\x6c\x69"
+                         "\x63\x61\x74\x69\x6f\x6e\x20\x61"
+                         "\x73\x20\x61\x6c\x6c\x20\x6f\x72"
+                         "\x20\x70\x61\x72\x74\x20\x6f\x66"
+                         "\x20\x61\x6e\x20\x49\x45\x54\x46"
+                         "\x20\x49\x6e\x74\x65\x72\x6e\x65"
+                         "\x74\x2d\x44\x72\x61\x66\x74\x20"
+                         "\x6f\x72\x20\x52\x46\x43\x20\x61"
+                         "\x6e\x64\x20\x61\x6e\x79\x20\x73"
+                         "\x74\x61\x74\x65\x6d\x65\x6e\x74"
+                         "\x20\x6d\x61\x64\x65\x20\x77\x69"
+                         "\x74\x68\x69\x6e\x20\x74\x68\x65"
+                         "\x20\x63\x6f\x6e\x74\x65\x78\x74"
+                         "\x20\x6f\x66\x20\x61\x6e\x20\x49"
+                         "\x45\x54\x46\x20\x61\x63\x74\x69"
+                         "\x76\x69\x74\x79\x20\x69\x73\x20"
+                         "\x63\x6f\x6e\x73\x69\x64\x65\x72"
+                         "\x65\x64\x20\x61\x6e\x20\x22\x49"
+                         "\x45\x54\x46\x20\x43\x6f\x6e\x74"
+                         "\x72\x69\x62\x75\x74\x69\x6f\x6e"
+                         "\x22\x2e\x20\x53\x75\x63\x68\x20"
+                         "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                         "\x74\x73\x20\x69\x6e\x63\x6c\x75"
+                         "\x64\x65\x20\x6f\x72\x61\x6c\x20"
+                         "\x73\x74\x61\x74\x65\x6d\x65\x6e"
+                         "\x74\x73\x20\x69\x6e\x20\x49\x45"
+                         "\x54\x46\x20\x73\x65\x73\x73\x69"
+                         "\x6f\x6e\x73\x2c\x20\x61\x73\x20"
+                         "\x77\x65\x6c\x6c\x20\x61\x73\x20"
+                         "\x77\x72\x69\x74\x74\x65\x6e\x20"
+                         "\x61\x6e\x64\x20\x65\x6c\x65\x63"
+                         "\x74\x72\x6f\x6e\x69\x63\x20\x63"
+                         "\x6f\x6d\x6d\x75\x6e\x69\x63\x61"
+                         "\x74\x69\x6f\x6e\x73\x20\x6d\x61"
+                         "\x64\x65\x20\x61\x74\x20\x61\x6e"
+                         "\x79\x20\x74\x69\x6d\x65\x20\x6f"
+                         "\x72\x20\x70\x6c\x61\x63\x65\x2c"
+                         "\x20\x77\x68\x69\x63\x68\x20\x61"
+                         "\x72\x65\x20\x61\x64\x64\x72\x65"
+                         "\x73\x73\x65\x64\x20\x74\x6f",
+               .ilen   = 375,
+               .result = "\xa3\xfb\xf0\x7d\xf3\xfa\x2f\xde"
+                         "\x4f\x37\x6c\xa2\x3e\x82\x73\x70"
+                         "\x41\x60\x5d\x9f\x4f\x4f\x57\xbd"
+                         "\x8c\xff\x2c\x1d\x4b\x79\x55\xec"
+                         "\x2a\x97\x94\x8b\xd3\x72\x29\x15"
+                         "\xc8\xf3\xd3\x37\xf7\xd3\x70\x05"
+                         "\x0e\x9e\x96\xd6\x47\xb7\xc3\x9f"
+                         "\x56\xe0\x31\xca\x5e\xb6\x25\x0d"
+                         "\x40\x42\xe0\x27\x85\xec\xec\xfa"
+                         "\x4b\x4b\xb5\xe8\xea\xd0\x44\x0e"
+                         "\x20\xb6\xe8\xdb\x09\xd8\x81\xa7"
+                         "\xc6\x13\x2f\x42\x0e\x52\x79\x50"
+                         "\x42\xbd\xfa\x77\x73\xd8\xa9\x05"
+                         "\x14\x47\xb3\x29\x1c\xe1\x41\x1c"
+                         "\x68\x04\x65\x55\x2a\xa6\xc4\x05"
+                         "\xb7\x76\x4d\x5e\x87\xbe\xa8\x5a"
+                         "\xd0\x0f\x84\x49\xed\x8f\x72\xd0"
+                         "\xd6\x62\xab\x05\x26\x91\xca\x66"
+                         "\x42\x4b\xc8\x6d\x2d\xf8\x0e\xa4"
+                         "\x1f\x43\xab\xf9\x37\xd3\x25\x9d"
+                         "\xc4\xb2\xd0\xdf\xb4\x8a\x6c\x91"
+                         "\x39\xdd\xd7\xf7\x69\x66\xe9\x28"
+                         "\xe6\x35\x55\x3b\xa7\x6c\x5c\x87"
+                         "\x9d\x7b\x35\xd4\x9e\xb2\xe6\x2b"
+                         "\x08\x71\xcd\xac\x63\x89\x39\xe2"
+                         "\x5e\x8a\x1e\x0e\xf9\xd5\x28\x0f"
+                         "\xa8\xca\x32\x8b\x35\x1c\x3c\x76"
+                         "\x59\x89\xcb\xcf\x3d\xaa\x8b\x6c"
+                         "\xcc\x3a\xaf\x9f\x39\x79\xc9\x2b"
+                         "\x37\x20\xfc\x88\xdc\x95\xed\x84"
+                         "\xa1\xbe\x05\x9c\x64\x99\xb9\xfd"
+                         "\xa2\x36\xe7\xe8\x18\xb0\x4b\x0b"
+                         "\xc3\x9c\x1e\x87\x6b\x19\x3b\xfe"
+                         "\x55\x69\x75\x3f\x88\x12\x8c\xc0"
+                         "\x8a\xaa\x9b\x63\xd1\xa1\x6f\x80"
+                         "\xef\x25\x54\xd7\x18\x9c\x41\x1f"
+                         "\x58\x69\xca\x52\xc5\xb8\x3f\xa3"
+                         "\x6f\xf2\x16\xb9\xc1\xd3\x00\x62"
+                         "\xbe\xbc\xfd\x2d\xc5\xbc\xe0\x91"
+                         "\x19\x34\xfd\xa7\x9a\x86\xf6\xe6"
+                         "\x98\xce\xd7\x59\xc3\xff\x9b\x64"
+                         "\x77\x33\x8f\x3d\xa4\xf9\xcd\x85"
+                         "\x14\xea\x99\x82\xcc\xaf\xb3\x41"
+                         "\xb2\x38\x4d\xd9\x02\xf3\xd1\xab"
+                         "\x7a\xc6\x1d\xd2\x9c\x6f\x21\xba"
+                         "\x5b\x86\x2f\x37\x30\xe3\x7c\xfd"
+                         "\xc4\xfd\x80\x6c\x22\xf2\x21",
+               .rlen   = 375,
+       }, { /* RFC7539 A.2. Test Vector #3 */
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
+               .klen   = 32,
+               .iv     = "\x2a\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x02",
+               .input  = "\x27\x54\x77\x61\x73\x20\x62\x72"
+                         "\x69\x6c\x6c\x69\x67\x2c\x20\x61"
+                         "\x6e\x64\x20\x74\x68\x65\x20\x73"
+                         "\x6c\x69\x74\x68\x79\x20\x74\x6f"
+                         "\x76\x65\x73\x0a\x44\x69\x64\x20"
+                         "\x67\x79\x72\x65\x20\x61\x6e\x64"
+                         "\x20\x67\x69\x6d\x62\x6c\x65\x20"
+                         "\x69\x6e\x20\x74\x68\x65\x20\x77"
+                         "\x61\x62\x65\x3a\x0a\x41\x6c\x6c"
+                         "\x20\x6d\x69\x6d\x73\x79\x20\x77"
+                         "\x65\x72\x65\x20\x74\x68\x65\x20"
+                         "\x62\x6f\x72\x6f\x67\x6f\x76\x65"
+                         "\x73\x2c\x0a\x41\x6e\x64\x20\x74"
+                         "\x68\x65\x20\x6d\x6f\x6d\x65\x20"
+                         "\x72\x61\x74\x68\x73\x20\x6f\x75"
+                         "\x74\x67\x72\x61\x62\x65\x2e",
+               .ilen   = 127,
+               .result = "\x62\xe6\x34\x7f\x95\xed\x87\xa4"
+                         "\x5f\xfa\xe7\x42\x6f\x27\xa1\xdf"
+                         "\x5f\xb6\x91\x10\x04\x4c\x0d\x73"
+                         "\x11\x8e\xff\xa9\x5b\x01\xe5\xcf"
+                         "\x16\x6d\x3d\xf2\xd7\x21\xca\xf9"
+                         "\xb2\x1e\x5f\xb1\x4c\x61\x68\x71"
+                         "\xfd\x84\xc5\x4f\x9d\x65\xb2\x83"
+                         "\x19\x6c\x7f\xe4\xf6\x05\x53\xeb"
+                         "\xf3\x9c\x64\x02\xc4\x22\x34\xe3"
+                         "\x2a\x35\x6b\x3e\x76\x43\x12\xa6"
+                         "\x1a\x55\x32\x05\x57\x16\xea\xd6"
+                         "\x96\x25\x68\xf8\x7d\x3f\x3f\x77"
+                         "\x04\xc6\xa8\xd1\xbc\xd1\xbf\x4d"
+                         "\x50\xd6\x15\x4b\x6d\xa7\x31\xb1"
+                         "\x87\xb5\x8d\xfd\x72\x8a\xfa\x36"
+                         "\x75\x7a\x79\x7a\xc1\x88\xd1",
+               .rlen   = 127,
+       }, { /* Self-made test vector for long data */
+               .key    = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a"
+                         "\xf3\x33\x88\x86\x04\xf6\xb5\xf0"
+                         "\x47\x39\x17\xc1\x40\x2b\x80\x09"
+                         "\x9d\xca\x5c\xbc\x20\x70\x75\xc0",
+               .klen   = 32,
+               .iv     = "\x1c\x00\x00\x00\x00\x00\x00\x00"
+                         "\x00\x00\x00\x00\x00\x00\x00\x01",
+               .input  = "\x49\xee\xe0\xdc\x24\x90\x40\xcd"
+                         "\xc5\x40\x8f\x47\x05\xbc\xdd\x81"
+                         "\x47\xc6\x8d\xe6\xb1\x8f\xd7\xcb"
+                         "\x09\x0e\x6e\x22\x48\x1f\xbf\xb8"
+                         "\x5c\xf7\x1e\x8a\xc1\x23\xf2\xd4"
+                         "\x19\x4b\x01\x0f\x4e\xa4\x43\xce"
+                         "\x01\xc6\x67\xda\x03\x91\x18\x90"
+                         "\xa5\xa4\x8e\x45\x03\xb3\x2d\xac"
+                         "\x74\x92\xd3\x53\x47\xc8\xdd\x25"
+                         "\x53\x6c\x02\x03\x87\x0d\x11\x0c"
+                         "\x58\xe3\x12\x18\xfd\x2a\x5b\x40"
+                         "\x0c\x30\xf0\xb8\x3f\x43\xce\xae"
+                         "\x65\x3a\x7d\x7c\xf4\x54\xaa\xcc"
+                         "\x33\x97\xc3\x77\xba\xc5\x70\xde"
+                         "\xd7\xd5\x13\xa5\x65\xc4\x5f\x0f"
+                         "\x46\x1a\x0d\x97\xb5\xf3\xbb\x3c"
+                         "\x84\x0f\x2b\xc5\xaa\xea\xf2\x6c"
+                         "\xc9\xb5\x0c\xee\x15\xf3\x7d\xbe"
+                         "\x9f\x7b\x5a\xa6\xae\x4f\x83\xb6"
+                         "\x79\x49\x41\xf4\x58\x18\xcb\x86"
+                         "\x7f\x30\x0e\xf8\x7d\x44\x36\xea"
+                         "\x75\xeb\x88\x84\x40\x3c\xad\x4f"
+                         "\x6f\x31\x6b\xaa\x5d\xe5\xa5\xc5"
+                         "\x21\x66\xe9\xa7\xe3\xb2\x15\x88"
+                         "\x78\xf6\x79\xa1\x59\x47\x12\x4e"
+                         "\x9f\x9f\x64\x1a\xa0\x22\x5b\x08"
+                         "\xbe\x7c\x36\xc2\x2b\x66\x33\x1b"
+                         "\xdd\x60\x71\xf7\x47\x8c\x61\xc3"
+                         "\xda\x8a\x78\x1e\x16\xfa\x1e\x86"
+                         "\x81\xa6\x17\x2a\xa7\xb5\xc2\xe7"
+                         "\xa4\xc7\x42\xf1\xcf\x6a\xca\xb4"
+                         "\x45\xcf\xf3\x93\xf0\xe7\xea\xf6"
+                         "\xf4\xe6\x33\x43\x84\x93\xa5\x67"
+                         "\x9b\x16\x58\x58\x80\x0f\x2b\x5c"
+                         "\x24\x74\x75\x7f\x95\x81\xb7\x30"
+                         "\x7a\x33\xa7\xf7\x94\x87\x32\x27"
+                         "\x10\x5d\x14\x4c\x43\x29\xdd\x26"
+                         "\xbd\x3e\x3c\x0e\xfe\x0e\xa5\x10"
+                         "\xea\x6b\x64\xfd\x73\xc6\xed\xec"
+                         "\xa8\xc9\xbf\xb3\xba\x0b\x4d\x07"
+                         "\x70\xfc\x16\xfd\x79\x1e\xd7\xc5"
+                         "\x49\x4e\x1c\x8b\x8d\x79\x1b\xb1"
+                         "\xec\xca\x60\x09\x4c\x6a\xd5\x09"
+                         "\x49\x46\x00\x88\x22\x8d\xce\xea"
+                         "\xb1\x17\x11\xde\x42\xd2\x23\xc1"
+                         "\x72\x11\xf5\x50\x73\x04\x40\x47"
+                         "\xf9\x5d\xe7\xa7\x26\xb1\x7e\xb0"
+                         "\x3f\x58\xc1\x52\xab\x12\x67\x9d"
+                         "\x3f\x43\x4b\x68\xd4\x9c\x68\x38"
+                         "\x07\x8a\x2d\x3e\xf3\xaf\x6a\x4b"
+                         "\xf9\xe5\x31\x69\x22\xf9\xa6\x69"
+                         "\xc6\x9c\x96\x9a\x12\x35\x95\x1d"
+                         "\x95\xd5\xdd\xbe\xbf\x93\x53\x24"
+                         "\xfd\xeb\xc2\x0a\x64\xb0\x77\x00"
+                         "\x6f\x88\xc4\x37\x18\x69\x7c\xd7"
+                         "\x41\x92\x55\x4c\x03\xa1\x9a\x4b"
+                         "\x15\xe5\xdf\x7f\x37\x33\x72\xc1"
+                         "\x8b\x10\x67\xa3\x01\x57\x94\x25"
+                         "\x7b\x38\x71\x7e\xdd\x1e\xcc\x73"
+                         "\x55\xd2\x8e\xeb\x07\xdd\xf1\xda"
+                         "\x58\xb1\x47\x90\xfe\x42\x21\x72"
+                         "\xa3\x54\x7a\xa0\x40\xec\x9f\xdd"
+                         "\xc6\x84\x6e\xca\xae\xe3\x68\xb4"
+                         "\x9d\xe4\x78\xff\x57\xf2\xf8\x1b"
+                         "\x03\xa1\x31\xd9\xde\x8d\xf5\x22"
+                         "\x9c\xdd\x20\xa4\x1e\x27\xb1\x76"
+                         "\x4f\x44\x55\xe2\x9b\xa1\x9c\xfe"
+                         "\x54\xf7\x27\x1b\xf4\xde\x02\xf5"
+                         "\x1b\x55\x48\x5c\xdc\x21\x4b\x9e"
+                         "\x4b\x6e\xed\x46\x23\xdc\x65\xb2"
+                         "\xcf\x79\x5f\x28\xe0\x9e\x8b\xe7"
+                         "\x4c\x9d\x8a\xff\xc1\xa6\x28\xb8"
+                         "\x65\x69\x8a\x45\x29\xef\x74\x85"
+                         "\xde\x79\xc7\x08\xae\x30\xb0\xf4"
+                         "\xa3\x1d\x51\x41\xab\xce\xcb\xf6"
+                         "\xb5\xd8\x6d\xe0\x85\xe1\x98\xb3"
+                         "\x43\xbb\x86\x83\x0a\xa0\xf5\xb7"
+                         "\x04\x0b\xfa\x71\x1f\xb0\xf6\xd9"
+                         "\x13\x00\x15\xf0\xc7\xeb\x0d\x5a"
+                         "\x9f\xd7\xb9\x6c\x65\x14\x22\x45"
+                         "\x6e\x45\x32\x3e\x7e\x60\x1a\x12"
+                         "\x97\x82\x14\xfb\xaa\x04\x22\xfa"
+                         "\xa0\xe5\x7e\x8c\x78\x02\x48\x5d"
+                         "\x78\x33\x5a\x7c\xad\xdb\x29\xce"
+                         "\xbb\x8b\x61\xa4\xb7\x42\xe2\xac"
+                         "\x8b\x1a\xd9\x2f\x0b\x8b\x62\x21"
+                         "\x83\x35\x7e\xad\x73\xc2\xb5\x6c"
+                         "\x10\x26\x38\x07\xe5\xc7\x36\x80"
+                         "\xe2\x23\x12\x61\xf5\x48\x4b\x2b"
+                         "\xc5\xdf\x15\xd9\x87\x01\xaa\xac"
+                         "\x1e\x7c\xad\x73\x78\x18\x63\xe0"
+                         "\x8b\x9f\x81\xd8\x12\x6a\x28\x10"
+                         "\xbe\x04\x68\x8a\x09\x7c\x1b\x1c"
+                         "\x83\x66\x80\x47\x80\xe8\xfd\x35"
+                         "\x1c\x97\x6f\xae\x49\x10\x66\xcc"
+                         "\xc6\xd8\xcc\x3a\x84\x91\x20\x77"
+                         "\x72\xe4\x24\xd2\x37\x9f\xc5\xc9"
+                         "\x25\x94\x10\x5f\x40\x00\x64\x99"
+                         "\xdc\xae\xd7\x21\x09\x78\x50\x15"
+                         "\xac\x5f\xc6\x2c\xa2\x0b\xa9\x39"
+                         "\x87\x6e\x6d\xab\xde\x08\x51\x16"
+                         "\xc7\x13\xe9\xea\xed\x06\x8e\x2c"
+                         "\xf8\x37\x8c\xf0\xa6\x96\x8d\x43"
+                         "\xb6\x98\x37\xb2\x43\xed\xde\xdf"
+                         "\x89\x1a\xe7\xeb\x9d\xa1\x7b\x0b"
+                         "\x77\xb0\xe2\x75\xc0\xf1\x98\xd9"
+                         "\x80\x55\xc9\x34\x91\xd1\x59\xe8"
+                         "\x4b\x0f\xc1\xa9\x4b\x7a\x84\x06"
+                         "\x20\xa8\x5d\xfa\xd1\xde\x70\x56"
+                         "\x2f\x9e\x91\x9c\x20\xb3\x24\xd8"
+                         "\x84\x3d\xe1\x8c\x7e\x62\x52\xe5"
+                         "\x44\x4b\x9f\xc2\x93\x03\xea\x2b"
+                         "\x59\xc5\xfa\x3f\x91\x2b\xbb\x23"
+                         "\xf5\xb2\x7b\xf5\x38\xaf\xb3\xee"
+                         "\x63\xdc\x7b\xd1\xff\xaa\x8b\xab"
+                         "\x82\x6b\x37\x04\xeb\x74\xbe\x79"
+                         "\xb9\x83\x90\xef\x20\x59\x46\xff"
+                         "\xe9\x97\x3e\x2f\xee\xb6\x64\x18"
+                         "\x38\x4c\x7a\x4a\xf9\x61\xe8\x9a"
+                         "\xa1\xb5\x01\xa6\x47\xd3\x11\xd4"
+                         "\xce\xd3\x91\x49\x88\xc7\xb8\x4d"
+                         "\xb1\xb9\x07\x6d\x16\x72\xae\x46"
+                         "\x5e\x03\xa1\x4b\xb6\x02\x30\xa8"
+                         "\x3d\xa9\x07\x2a\x7c\x19\xe7\x62"
+                         "\x87\xe3\x82\x2f\x6f\xe1\x09\xd9"
+                         "\x94\x97\xea\xdd\x58\x9e\xae\x76"
+                         "\x7e\x35\xe5\xb4\xda\x7e\xf4\xde"
+                         "\xf7\x32\x87\xcd\x93\xbf\x11\x56"
+                         "\x11\xbe\x08\x74\xe1\x69\xad\xe2"
+                         "\xd7\xf8\x86\x75\x8a\x3c\xa4\xbe"
+                         "\x70\xa7\x1b\xfc\x0b\x44\x2a\x76"
+                         "\x35\xea\x5d\x85\x81\xaf\x85\xeb"
+                         "\xa0\x1c\x61\xc2\xf7\x4f\xa5\xdc"
+                         "\x02\x7f\xf6\x95\x40\x6e\x8a\x9a"
+                         "\xf3\x5d\x25\x6e\x14\x3a\x22\xc9"
+                         "\x37\x1c\xeb\x46\x54\x3f\xa5\x91"
+                         "\xc2\xb5\x8c\xfe\x53\x08\x97\x32"
+                         "\x1b\xb2\x30\x27\xfe\x25\x5d\xdc"
+                         "\x08\x87\xd0\xe5\x94\x1a\xd4\xf1"
+                         "\xfe\xd6\xb4\xa3\xe6\x74\x81\x3c"
+                         "\x1b\xb7\x31\xa7\x22\xfd\xd4\xdd"
+                         "\x20\x4e\x7c\x51\xb0\x60\x73\xb8"
+                         "\x9c\xac\x91\x90\x7e\x01\xb0\xe1"
+                         "\x8a\x2f\x75\x1c\x53\x2a\x98\x2a"
+                         "\x06\x52\x95\x52\xb2\xe9\x25\x2e"
+                         "\x4c\xe2\x5a\x00\xb2\x13\x81\x03"
+                         "\x77\x66\x0d\xa5\x99\xda\x4e\x8c"
+                         "\xac\xf3\x13\x53\x27\x45\xaf\x64"
+                         "\x46\xdc\xea\x23\xda\x97\xd1\xab"
+                         "\x7d\x6c\x30\x96\x1f\xbc\x06\x34"
+                         "\x18\x0b\x5e\x21\x35\x11\x8d\x4c"
+                         "\xe0\x2d\xe9\x50\x16\x74\x81\xa8"
+                         "\xb4\x34\xb9\x72\x42\xa6\xcc\xbc"
+                         "\xca\x34\x83\x27\x10\x5b\x68\x45"
+                         "\x8f\x52\x22\x0c\x55\x3d\x29\x7c"
+                         "\xe3\xc0\x66\x05\x42\x91\x5f\x58"
+                         "\xfe\x4a\x62\xd9\x8c\xa9\x04\x19"
+                         "\x04\xa9\x08\x4b\x57\xfc\x67\x53"
+                         "\x08\x7c\xbc\x66\x8a\xb0\xb6\x9f"
+                         "\x92\xd6\x41\x7c\x5b\x2a\x00\x79"
+                         "\x72",
+               .ilen   = 1281,
+               .result = "\x45\xe8\xe0\xb6\x9c\xca\xfd\x87"
+                         "\xe8\x1d\x37\x96\x8a\xe3\x40\x35"
+                         "\xcf\x5e\x3a\x46\x3d\xfb\xd0\x69"
+                         "\xde\xaf\x7a\xd5\x0d\xe9\x52\xec"
+                         "\xc2\x82\xe5\x3e\x7d\xb2\x4a\xd9"
+                         "\xbb\xc3\x9f\xc0\x5d\xac\x93\x8d"
+                         "\x0e\x6f\xd3\xd7\xfb\x6a\x0d\xce"
+                         "\x92\x2c\xf7\xbb\x93\x57\xcc\xee"
+                         "\x42\x72\x6f\xc8\x4b\xd2\x76\xbf"
+                         "\xa0\xe3\x7a\x39\xf9\x5c\x8e\xfd"
+                         "\xa1\x1d\x41\xe5\x08\xc1\x1c\x11"
+                         "\x92\xfd\x39\x5c\x51\xd0\x2f\x66"
+                         "\x33\x4a\x71\x15\xfe\xee\x12\x54"
+                         "\x8c\x8f\x34\xd8\x50\x3c\x18\xa6"
+                         "\xc5\xe1\x46\x8a\xfb\x5f\x7e\x25"
+                         "\x9b\xe2\xc3\x66\x41\x2b\xb3\xa5"
+                         "\x57\x0e\x94\x17\x26\x39\xbb\x54"
+                         "\xae\x2e\x6f\x42\xfb\x4d\x89\x6f"
+                         "\x9d\xf1\x16\x2e\xe3\xe7\xfc\xe3"
+                         "\xb2\x4b\x2b\xa6\x7c\x04\x69\x3a"
+                         "\x70\x5a\xa7\xf1\x31\x64\x19\xca"
+                         "\x45\x79\xd8\x58\x23\x61\xaf\xc2"
+                         "\x52\x05\xc3\x0b\xc1\x64\x7c\x81"
+                         "\xd9\x11\xcf\xff\x02\x3d\x51\x84"
+                         "\x01\xac\xc6\x2e\x34\x2b\x09\x3a"
+                         "\xa8\x5d\x98\x0e\x89\xd9\xef\x8f"
+                         "\xd9\xd7\x7d\xdd\x63\x47\x46\x7d"
+                         "\xa1\xda\x0b\x53\x7d\x79\xcd\xc9"
+                         "\x86\xdd\x6b\x13\xa1\x9a\x70\xdd"
+                         "\x5c\xa1\x69\x3c\xe4\x5d\xe3\x8c"
+                         "\xe5\xf4\x87\x9c\x10\xcf\x0f\x0b"
+                         "\xc8\x43\xdc\xf8\x1d\x62\x5e\x5b"
+                         "\xe2\x03\x06\xc5\x71\xb6\x48\xa5"
+                         "\xf0\x0f\x2d\xd5\xa2\x73\x55\x8f"
+                         "\x01\xa7\x59\x80\x5f\x11\x6c\x40"
+                         "\xff\xb1\xf2\xc6\x7e\x01\xbb\x1c"
+                         "\x69\x9c\xc9\x3f\x71\x5f\x07\x7e"
+                         "\xdf\x6f\x99\xca\x9c\xfd\xf9\xb9"
+                         "\x49\xe7\xcc\x91\xd5\x9b\x8f\x03"
+                         "\xae\xe7\x61\x32\xef\x41\x6c\x75"
+                         "\x84\x9b\x8c\xce\x1d\x6b\x93\x21"
+                         "\x41\xec\xc6\xad\x8e\x0c\x48\xa8"
+                         "\xe2\xf5\x57\xde\xf7\x38\xfd\x4a"
+                         "\x6f\xa7\x4a\xf9\xac\x7d\xb1\x85"
+                         "\x7d\x6c\x95\x0a\x5a\xcf\x68\xd2"
+                         "\xe0\x7a\x26\xd9\xc1\x6d\x3e\xc6"
+                         "\x37\xbd\xbe\x24\x36\x77\x9f\x1b"
+                         "\xc1\x22\xf3\x79\xae\x95\x78\x66"
+                         "\x97\x11\xc0\x1a\xf1\xe8\x0d\x38"
+                         "\x09\xc2\xee\xb7\xd3\x46\x7b\x59"
+                         "\x77\x23\xe8\xb4\x92\x3d\x78\xbe"
+                         "\xe2\x25\x63\xa5\x2a\x06\x70\x92"
+                         "\x32\x63\xf9\x19\x21\x68\xe1\x0b"
+                         "\x9a\xd0\xee\x21\xdb\x1f\xe0\xde"
+                         "\x3e\x64\x02\x4d\x0e\xe0\x0a\xa9"
+                         "\xed\x19\x8c\xa8\xbf\xe3\x2e\x75"
+                         "\x24\x2b\xb0\xe5\x82\x6a\x1e\x6f"
+                         "\x71\x2a\x3a\x60\xed\x06\x0d\x17"
+                         "\xa2\xdb\x29\x1d\xae\xb2\xc4\xfb"
+                         "\x94\x04\xd8\x58\xfc\xc4\x04\x4e"
+                         "\xee\xc7\xc1\x0f\xe9\x9b\x63\x2d"
+                         "\x02\x3e\x02\x67\xe5\xd8\xbb\x79"
+                         "\xdf\xd2\xeb\x50\xe9\x0a\x02\x46"
+                         "\xdf\x68\xcf\xe7\x2b\x0a\x56\xd6"
+                         "\xf7\xbc\x44\xad\xb8\xb5\x5f\xeb"
+                         "\xbc\x74\x6b\xe8\x7e\xb0\x60\xc6"
+                         "\x0d\x96\x09\xbb\x19\xba\xe0\x3c"
+                         "\xc4\x6c\xbf\x0f\x58\xc0\x55\x62"
+                         "\x23\xa0\xff\xb5\x1c\xfd\x18\xe1"
+                         "\xcf\x6d\xd3\x52\xb4\xce\xa6\xfa"
+                         "\xaa\xfb\x1b\x0b\x42\x6d\x79\x42"
+                         "\x48\x70\x5b\x0e\xdd\x3a\xc9\x69"
+                         "\x8b\x73\x67\xf6\x95\xdb\x8c\xfb"
+                         "\xfd\xb5\x08\x47\x42\x84\x9a\xfa"
+                         "\xcc\x67\xb2\x3c\xb6\xfd\xd8\x32"
+                         "\xd6\x04\xb6\x4a\xea\x53\x4b\xf5"
+                         "\x94\x16\xad\xf0\x10\x2e\x2d\xb4"
+                         "\x8b\xab\xe5\x89\xc7\x39\x12\xf3"
+                         "\x8d\xb5\x96\x0b\x87\x5d\xa7\x7c"
+                         "\xb0\xc2\xf6\x2e\x57\x97\x2c\xdc"
+                         "\x54\x1c\x34\x72\xde\x0c\x68\x39"
+                         "\x9d\x32\xa5\x75\x92\x13\x32\xea"
+                         "\x90\x27\xbd\x5b\x1d\xb9\x21\x02"
+                         "\x1c\xcc\xba\x97\x5e\x49\x58\xe8"
+                         "\xac\x8b\xf3\xce\x3c\xf0\x00\xe9"
+                         "\x6c\xae\xe9\x77\xdf\xf4\x02\xcd"
+                         "\x55\x25\x89\x9e\x90\xf3\x6b\x8f"
+                         "\xb7\xd6\x47\x98\x26\x2f\x31\x2f"
+                         "\x8d\xbf\x54\xcd\x99\xeb\x80\xd7"
+                         "\xac\xc3\x08\xc2\xa6\x32\xf1\x24"
+                         "\x76\x7c\x4f\x78\x53\x55\xfb\x00"
+                         "\x8a\xd6\x52\x53\x25\x45\xfb\x0a"
+                         "\x6b\xb9\xbe\x3c\x5e\x11\xcc\x6a"
+                         "\xdd\xfc\xa7\xc4\x79\x4d\xbd\xfb"
+                         "\xce\x3a\xf1\x7a\xda\xeb\xfe\x64"
+                         "\x28\x3d\x0f\xee\x80\xba\x0c\xf8"
+                         "\xe9\x5b\x3a\xd4\xae\xc9\xf3\x0e"
+                         "\xe8\x5d\xc5\x5c\x0b\x20\x20\xee"
+                         "\x40\x0d\xde\x07\xa7\x14\xb4\x90"
+                         "\xb6\xbd\x3b\xae\x7d\x2b\xa7\xc7"
+                         "\xdc\x0b\x4c\x5d\x65\xb0\xd2\xc5"
+                         "\x79\x61\x23\xe0\xa2\x99\x73\x55"
+                         "\xad\xc6\xfb\xc7\x54\xb5\x98\x1f"
+                         "\x8c\x86\xc2\x3f\xbe\x5e\xea\x64"
+                         "\xa3\x60\x18\x9f\x80\xaf\x52\x74"
+                         "\x1a\xfe\x22\xc2\x92\x67\x40\x02"
+                         "\x08\xee\x67\x5b\x67\xe0\x3d\xde"
+                         "\x7a\xaf\x8e\x28\xf3\x5e\x0e\xf4"
+                         "\x48\x56\xaa\x85\x22\xd8\x36\xed"
+                         "\x3b\x3d\x68\x69\x30\xbc\x71\x23"
+                         "\xb1\x6e\x61\x03\x89\x44\x03\xf4"
+                         "\x32\xaa\x4c\x40\x9f\x69\xfb\x70"
+                         "\x91\xcc\x1f\x11\xbd\x76\x67\xe6"
+                         "\x10\x8b\x29\x39\x68\xea\x4e\x6d"
+                         "\xae\xfb\x40\xcf\xe2\xd0\x0d\x8d"
+                         "\x6f\xed\x9b\x8d\x64\x7a\x94\x8e"
+                         "\x32\x38\x78\xeb\x7d\x5f\xf9\x4d"
+                         "\x13\xbe\x21\xea\x16\xe7\x5c\xee"
+                         "\xcd\xf6\x5f\xc6\x45\xb2\x8f\x2b"
+                         "\xb5\x93\x3e\x45\xdb\xfd\xa2\x6a"
+                         "\xec\x83\x92\x99\x87\x47\xe0\x7c"
+                         "\xa2\x7b\xc4\x2a\xcd\xc0\x81\x03"
+                         "\x98\xb0\x87\xb6\x86\x13\x64\x33"
+                         "\x4c\xd7\x99\xbf\xdb\x7b\x6e\xaa"
+                         "\x76\xcc\xa0\x74\x1b\xa3\x6e\x83"
+                         "\xd4\xba\x7a\x84\x9d\x91\x71\xcd"
+                         "\x60\x2d\x56\xfd\x26\x35\xcb\xeb"
+                         "\xac\xe9\xee\xa4\xfc\x18\x5b\x91"
+                         "\xd5\xfe\x84\x45\xe0\xc7\xfd\x11"
+                         "\xe9\x00\xb6\x54\xdf\xe1\x94\xde"
+                         "\x2b\x70\x9f\x94\x7f\x15\x0e\x83"
+                         "\x63\x10\xb3\xf5\xea\xd3\xe8\xd1"
+                         "\xa5\xfc\x17\x19\x68\x9a\xbc\x17"
+                         "\x30\x43\x0a\x1a\x33\x92\xd4\x2a"
+                         "\x2e\x68\x99\xbc\x49\xf0\x68\xe3"
+                         "\xf0\x1f\xcb\xcc\xfa\xbb\x05\x56"
+                         "\x46\x84\x8b\x69\x83\x64\xc5\xe0"
+                         "\xc5\x52\x99\x07\x3c\xa6\x5c\xaf"
+                         "\xa3\xde\xd7\xdb\x43\xe6\xb7\x76"
+                         "\x4e\x4d\xd6\x71\x60\x63\x4a\x0c"
+                         "\x5f\xae\x25\x84\x22\x90\x5f\x26"
+                         "\x61\x4d\x8f\xaf\xc9\x22\xf2\x05"
+                         "\xcf\xc1\xdc\x68\xe5\x57\x8e\x24"
+                         "\x1b\x30\x59\xca\xd7\x0d\xc3\xd3"
+                         "\x52\x9e\x09\x3e\x0e\xaf\xdb\x5f"
+                         "\xc7\x2b\xde\x3a\xfd\xad\x93\x04"
+                         "\x74\x06\x89\x0e\x90\xeb\x85\xff"
+                         "\xe6\x3c\x12\x42\xf4\xfa\x80\x75"
+                         "\x5e\x4e\xd7\x2f\x93\x0b\x34\x41"
+                         "\x02\x85\x68\xd0\x03\x12\xde\x92"
+                         "\x54\x7a\x7e\xfb\x55\xe7\x88\xfb"
+                         "\xa4\xa9\xf2\xd1\xc6\x70\x06\x37"
+                         "\x25\xee\xa7\x6e\xd9\x89\x86\x50"
+                         "\x2e\x07\xdb\xfb\x2a\x86\x45\x0e"
+                         "\x91\xf4\x7c\xbb\x12\x60\xe8\x3f"
+                         "\x71\xbe\x8f\x9d\x26\xef\xd9\x89"
+                         "\xc4\x8f\xd8\xc5\x73\xd8\x84\xaa"
+                         "\x2f\xad\x22\x1e\x7e\xcf\xa2\x08"
+                         "\x23\x45\x89\x42\xa0\x30\xeb\xbf"
+                         "\xa1\xed\xad\xd5\x76\xfa\x24\x8f"
+                         "\x98",
+               .rlen   = 1281,
+       },
+};
+
 /*
  * CTS (Cipher Text Stealing) mode tests
  */
@@ -28591,7 +32269,7 @@ struct comp_testvec {
 };
 
 struct pcomp_testvec {
-       void *params;
+       const void *params;
        unsigned int paramsize;
        int inlen, outlen;
        char input[COMP_BUF_SIZE];
@@ -28945,6 +32623,440 @@ static struct hash_testvec michael_mic_tv_template[] = {
        }
 };
 
+/*
+ * CRC32 test vectors
+ */
+#define CRC32_TEST_VECTORS 14
+
+static struct hash_testvec crc32_tv_template[] = {
+       {
+               .key = "\x87\xa9\xcb\xed",
+               .ksize = 4,
+               .psize = 0,
+               .digest = "\x87\xa9\xcb\xed",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
+                            "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+                            "\x11\x12\x13\x14\x15\x16\x17\x18"
+                            "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
+                            "\x21\x22\x23\x24\x25\x26\x27\x28",
+               .psize = 40,
+               .digest = "\x3a\xdf\x4b\xb0",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
+                            "\x31\x32\x33\x34\x35\x36\x37\x38"
+                            "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
+                            "\x41\x42\x43\x44\x45\x46\x47\x48"
+                            "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
+               .psize = 40,
+               .digest = "\xa9\x7a\x7f\x7b",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
+                            "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
+                            "\x61\x62\x63\x64\x65\x66\x67\x68"
+                            "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
+                            "\x71\x72\x73\x74\x75\x76\x77\x78",
+               .psize = 40,
+               .digest = "\xba\xd3\xf8\x1c",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
+                            "\x81\x82\x83\x84\x85\x86\x87\x88"
+                            "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
+                            "\x91\x92\x93\x94\x95\x96\x97\x98"
+                            "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
+               .psize = 40,
+               .digest = "\xa8\xa9\xc2\x02",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
+                            "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
+                            "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
+                            "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
+                            "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
+               .psize = 40,
+               .digest = "\x27\xf0\x57\xe2",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
+                            "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
+                            "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
+                            "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
+                            "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
+               .psize = 40,
+               .digest = "\x49\x78\x10\x08",
+       },
+       {
+               .key = "\x80\xea\xd3\xf1",
+               .ksize = 4,
+               .plaintext = "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
+                            "\x31\x32\x33\x34\x35\x36\x37\x38"
+                            "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
+                            "\x41\x42\x43\x44\x45\x46\x47\x48"
+                            "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50",
+               .psize = 40,
+               .digest = "\x9a\xb1\xdc\xf0",
+       },
+       {
+               .key = "\xf3\x4a\x1d\x5d",
+               .ksize = 4,
+               .plaintext = "\x51\x52\x53\x54\x55\x56\x57\x58"
+                            "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
+                            "\x61\x62\x63\x64\x65\x66\x67\x68"
+                            "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
+                            "\x71\x72\x73\x74\x75\x76\x77\x78",
+               .psize = 40,
+               .digest = "\xb4\x97\xcc\xd4",
+       },
+       {
+               .key = "\x2e\x80\x04\x59",
+               .ksize = 4,
+               .plaintext = "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
+                            "\x81\x82\x83\x84\x85\x86\x87\x88"
+                            "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
+                            "\x91\x92\x93\x94\x95\x96\x97\x98"
+                            "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0",
+               .psize = 40,
+               .digest = "\x67\x9b\xfa\x79",
+       },
+       {
+               .key = "\xa6\xcc\x19\x85",
+               .ksize = 4,
+               .plaintext = "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
+                            "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
+                            "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
+                            "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
+                            "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8",
+               .psize = 40,
+               .digest = "\x24\xb5\x16\xef",
+       },
+       {
+               .key = "\x41\xfc\xfe\x2d",
+               .ksize = 4,
+               .plaintext = "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
+                            "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
+                            "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
+                            "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
+                            "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
+               .psize = 40,
+               .digest = "\x15\x94\x80\x39",
+       },
+       {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08"
+                            "\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
+                            "\x11\x12\x13\x14\x15\x16\x17\x18"
+                            "\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
+                            "\x21\x22\x23\x24\x25\x26\x27\x28"
+                            "\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
+                            "\x31\x32\x33\x34\x35\x36\x37\x38"
+                            "\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
+                            "\x41\x42\x43\x44\x45\x46\x47\x48"
+                            "\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
+                            "\x51\x52\x53\x54\x55\x56\x57\x58"
+                            "\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
+                            "\x61\x62\x63\x64\x65\x66\x67\x68"
+                            "\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
+                            "\x71\x72\x73\x74\x75\x76\x77\x78"
+                            "\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
+                            "\x81\x82\x83\x84\x85\x86\x87\x88"
+                            "\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
+                            "\x91\x92\x93\x94\x95\x96\x97\x98"
+                            "\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
+                            "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8"
+                            "\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
+                            "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8"
+                            "\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
+                            "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8"
+                            "\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
+                            "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8"
+                            "\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
+                            "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
+                            "\xe9\xea\xeb\xec\xed\xee\xef\xf0",
+               .psize = 240,
+               .digest = "\x6c\xc6\x56\xde",
+               .np = 2,
+               .tap = { 31, 209 }
+       }, {
+               .key = "\xff\xff\xff\xff",
+               .ksize = 4,
+               .plaintext =    "\x6e\x05\x79\x10\xa7\x1b\xb2\x49"
+                               "\xe0\x54\xeb\x82\x19\x8d\x24\xbb"
+                               "\x2f\xc6\x5d\xf4\x68\xff\x96\x0a"
+                               "\xa1\x38\xcf\x43\xda\x71\x08\x7c"
+                               "\x13\xaa\x1e\xb5\x4c\xe3\x57\xee"
+                               "\x85\x1c\x90\x27\xbe\x32\xc9\x60"
+                               "\xf7\x6b\x02\x99\x0d\xa4\x3b\xd2"
+                               "\x46\xdd\x74\x0b\x7f\x16\xad\x21"
+                               "\xb8\x4f\xe6\x5a\xf1\x88\x1f\x93"
+                               "\x2a\xc1\x35\xcc\x63\xfa\x6e\x05"
+                               "\x9c\x10\xa7\x3e\xd5\x49\xe0\x77"
+                               "\x0e\x82\x19\xb0\x24\xbb\x52\xe9"
+                               "\x5d\xf4\x8b\x22\x96\x2d\xc4\x38"
+                               "\xcf\x66\xfd\x71\x08\x9f\x13\xaa"
+                               "\x41\xd8\x4c\xe3\x7a\x11\x85\x1c"
+                               "\xb3\x27\xbe\x55\xec\x60\xf7\x8e"
+                               "\x02\x99\x30\xc7\x3b\xd2\x69\x00"
+                               "\x74\x0b\xa2\x16\xad\x44\xdb\x4f"
+                               "\xe6\x7d\x14\x88\x1f\xb6\x2a\xc1"
+                               "\x58\xef\x63\xfa\x91\x05\x9c\x33"
+                               "\xca\x3e\xd5\x6c\x03\x77\x0e\xa5"
+                               "\x19\xb0\x47\xde\x52\xe9\x80\x17"
+                               "\x8b\x22\xb9\x2d\xc4\x5b\xf2\x66"
+                               "\xfd\x94\x08\x9f\x36\xcd\x41\xd8"
+                               "\x6f\x06\x7a\x11\xa8\x1c\xb3\x4a"
+                               "\xe1\x55\xec\x83\x1a\x8e\x25\xbc"
+                               "\x30\xc7\x5e\xf5\x69\x00\x97\x0b"
+                               "\xa2\x39\xd0\x44\xdb\x72\x09\x7d"
+                               "\x14\xab\x1f\xb6\x4d\xe4\x58\xef"
+                               "\x86\x1d\x91\x28\xbf\x33\xca\x61"
+                               "\xf8\x6c\x03\x9a\x0e\xa5\x3c\xd3"
+                               "\x47\xde\x75\x0c\x80\x17\xae\x22"
+                               "\xb9\x50\xe7\x5b\xf2\x89\x20\x94"
+                               "\x2b\xc2\x36\xcd\x64\xfb\x6f\x06"
+                               "\x9d\x11\xa8\x3f\xd6\x4a\xe1\x78"
+                               "\x0f\x83\x1a\xb1\x25\xbc\x53\xea"
+                               "\x5e\xf5\x8c\x00\x97\x2e\xc5\x39"
+                               "\xd0\x67\xfe\x72\x09\xa0\x14\xab"
+                               "\x42\xd9\x4d\xe4\x7b\x12\x86\x1d"
+                               "\xb4\x28\xbf\x56\xed\x61\xf8\x8f"
+                               "\x03\x9a\x31\xc8\x3c\xd3\x6a\x01"
+                               "\x75\x0c\xa3\x17\xae\x45\xdc\x50"
+                               "\xe7\x7e\x15\x89\x20\xb7\x2b\xc2"
+                               "\x59\xf0\x64\xfb\x92\x06\x9d\x34"
+                               "\xcb\x3f\xd6\x6d\x04\x78\x0f\xa6"
+                               "\x1a\xb1\x48\xdf\x53\xea\x81\x18"
+                               "\x8c\x23\xba\x2e\xc5\x5c\xf3\x67"
+                               "\xfe\x95\x09\xa0\x37\xce\x42\xd9"
+                               "\x70\x07\x7b\x12\xa9\x1d\xb4\x4b"
+                               "\xe2\x56\xed\x84\x1b\x8f\x26\xbd"
+                               "\x31\xc8\x5f\xf6\x6a\x01\x98\x0c"
+                               "\xa3\x3a\xd1\x45\xdc\x73\x0a\x7e"
+                               "\x15\xac\x20\xb7\x4e\xe5\x59\xf0"
+                               "\x87\x1e\x92\x29\xc0\x34\xcb\x62"
+                               "\xf9\x6d\x04\x9b\x0f\xa6\x3d\xd4"
+                               "\x48\xdf\x76\x0d\x81\x18\xaf\x23"
+                               "\xba\x51\xe8\x5c\xf3\x8a\x21\x95"
+                               "\x2c\xc3\x37\xce\x65\xfc\x70\x07"
+                               "\x9e\x12\xa9\x40\xd7\x4b\xe2\x79"
+                               "\x10\x84\x1b\xb2\x26\xbd\x54\xeb"
+                               "\x5f\xf6\x8d\x01\x98\x2f\xc6\x3a"
+                               "\xd1\x68\xff\x73\x0a\xa1\x15\xac"
+                               "\x43\xda\x4e\xe5\x7c\x13\x87\x1e"
+                               "\xb5\x29\xc0\x57\xee\x62\xf9\x90"
+                               "\x04\x9b\x32\xc9\x3d\xd4\x6b\x02"
+                               "\x76\x0d\xa4\x18\xaf\x46\xdd\x51"
+                               "\xe8\x7f\x16\x8a\x21\xb8\x2c\xc3"
+                               "\x5a\xf1\x65\xfc\x93\x07\x9e\x35"
+                               "\xcc\x40\xd7\x6e\x05\x79\x10\xa7"
+                               "\x1b\xb2\x49\xe0\x54\xeb\x82\x19"
+                               "\x8d\x24\xbb\x2f\xc6\x5d\xf4\x68"
+                               "\xff\x96\x0a\xa1\x38\xcf\x43\xda"
+                               "\x71\x08\x7c\x13\xaa\x1e\xb5\x4c"
+                               "\xe3\x57\xee\x85\x1c\x90\x27\xbe"
+                               "\x32\xc9\x60\xf7\x6b\x02\x99\x0d"
+                               "\xa4\x3b\xd2\x46\xdd\x74\x0b\x7f"
+                               "\x16\xad\x21\xb8\x4f\xe6\x5a\xf1"
+                               "\x88\x1f\x93\x2a\xc1\x35\xcc\x63"
+                               "\xfa\x6e\x05\x9c\x10\xa7\x3e\xd5"
+                               "\x49\xe0\x77\x0e\x82\x19\xb0\x24"
+                               "\xbb\x52\xe9\x5d\xf4\x8b\x22\x96"
+                               "\x2d\xc4\x38\xcf\x66\xfd\x71\x08"
+                               "\x9f\x13\xaa\x41\xd8\x4c\xe3\x7a"
+                               "\x11\x85\x1c\xb3\x27\xbe\x55\xec"
+                               "\x60\xf7\x8e\x02\x99\x30\xc7\x3b"
+                               "\xd2\x69\x00\x74\x0b\xa2\x16\xad"
+                               "\x44\xdb\x4f\xe6\x7d\x14\x88\x1f"
+                               "\xb6\x2a\xc1\x58\xef\x63\xfa\x91"
+                               "\x05\x9c\x33\xca\x3e\xd5\x6c\x03"
+                               "\x77\x0e\xa5\x19\xb0\x47\xde\x52"
+                               "\xe9\x80\x17\x8b\x22\xb9\x2d\xc4"
+                               "\x5b\xf2\x66\xfd\x94\x08\x9f\x36"
+                               "\xcd\x41\xd8\x6f\x06\x7a\x11\xa8"
+                               "\x1c\xb3\x4a\xe1\x55\xec\x83\x1a"
+                               "\x8e\x25\xbc\x30\xc7\x5e\xf5\x69"
+                               "\x00\x97\x0b\xa2\x39\xd0\x44\xdb"
+                               "\x72\x09\x7d\x14\xab\x1f\xb6\x4d"
+                               "\xe4\x58\xef\x86\x1d\x91\x28\xbf"
+                               "\x33\xca\x61\xf8\x6c\x03\x9a\x0e"
+                               "\xa5\x3c\xd3\x47\xde\x75\x0c\x80"
+                               "\x17\xae\x22\xb9\x50\xe7\x5b\xf2"
+                               "\x89\x20\x94\x2b\xc2\x36\xcd\x64"
+                               "\xfb\x6f\x06\x9d\x11\xa8\x3f\xd6"
+                               "\x4a\xe1\x78\x0f\x83\x1a\xb1\x25"
+                               "\xbc\x53\xea\x5e\xf5\x8c\x00\x97"
+                               "\x2e\xc5\x39\xd0\x67\xfe\x72\x09"
+                               "\xa0\x14\xab\x42\xd9\x4d\xe4\x7b"
+                               "\x12\x86\x1d\xb4\x28\xbf\x56\xed"
+                               "\x61\xf8\x8f\x03\x9a\x31\xc8\x3c"
+                               "\xd3\x6a\x01\x75\x0c\xa3\x17\xae"
+                               "\x45\xdc\x50\xe7\x7e\x15\x89\x20"
+                               "\xb7\x2b\xc2\x59\xf0\x64\xfb\x92"
+                               "\x06\x9d\x34\xcb\x3f\xd6\x6d\x04"
+                               "\x78\x0f\xa6\x1a\xb1\x48\xdf\x53"
+                               "\xea\x81\x18\x8c\x23\xba\x2e\xc5"
+                               "\x5c\xf3\x67\xfe\x95\x09\xa0\x37"
+                               "\xce\x42\xd9\x70\x07\x7b\x12\xa9"
+                               "\x1d\xb4\x4b\xe2\x56\xed\x84\x1b"
+                               "\x8f\x26\xbd\x31\xc8\x5f\xf6\x6a"
+                               "\x01\x98\x0c\xa3\x3a\xd1\x45\xdc"
+                               "\x73\x0a\x7e\x15\xac\x20\xb7\x4e"
+                               "\xe5\x59\xf0\x87\x1e\x92\x29\xc0"
+                               "\x34\xcb\x62\xf9\x6d\x04\x9b\x0f"
+                               "\xa6\x3d\xd4\x48\xdf\x76\x0d\x81"
+                               "\x18\xaf\x23\xba\x51\xe8\x5c\xf3"
+                               "\x8a\x21\x95\x2c\xc3\x37\xce\x65"
+                               "\xfc\x70\x07\x9e\x12\xa9\x40\xd7"
+                               "\x4b\xe2\x79\x10\x84\x1b\xb2\x26"
+                               "\xbd\x54\xeb\x5f\xf6\x8d\x01\x98"
+                               "\x2f\xc6\x3a\xd1\x68\xff\x73\x0a"
+                               "\xa1\x15\xac\x43\xda\x4e\xe5\x7c"
+                               "\x13\x87\x1e\xb5\x29\xc0\x57\xee"
+                               "\x62\xf9\x90\x04\x9b\x32\xc9\x3d"
+                               "\xd4\x6b\x02\x76\x0d\xa4\x18\xaf"
+                               "\x46\xdd\x51\xe8\x7f\x16\x8a\x21"
+                               "\xb8\x2c\xc3\x5a\xf1\x65\xfc\x93"
+                               "\x07\x9e\x35\xcc\x40\xd7\x6e\x05"
+                               "\x79\x10\xa7\x1b\xb2\x49\xe0\x54"
+                               "\xeb\x82\x19\x8d\x24\xbb\x2f\xc6"
+                               "\x5d\xf4\x68\xff\x96\x0a\xa1\x38"
+                               "\xcf\x43\xda\x71\x08\x7c\x13\xaa"
+                               "\x1e\xb5\x4c\xe3\x57\xee\x85\x1c"
+                               "\x90\x27\xbe\x32\xc9\x60\xf7\x6b"
+                               "\x02\x99\x0d\xa4\x3b\xd2\x46\xdd"
+                               "\x74\x0b\x7f\x16\xad\x21\xb8\x4f"
+                               "\xe6\x5a\xf1\x88\x1f\x93\x2a\xc1"
+                               "\x35\xcc\x63\xfa\x6e\x05\x9c\x10"
+                               "\xa7\x3e\xd5\x49\xe0\x77\x0e\x82"
+                               "\x19\xb0\x24\xbb\x52\xe9\x5d\xf4"
+                               "\x8b\x22\x96\x2d\xc4\x38\xcf\x66"
+                               "\xfd\x71\x08\x9f\x13\xaa\x41\xd8"
+                               "\x4c\xe3\x7a\x11\x85\x1c\xb3\x27"
+                               "\xbe\x55\xec\x60\xf7\x8e\x02\x99"
+                               "\x30\xc7\x3b\xd2\x69\x00\x74\x0b"
+                               "\xa2\x16\xad\x44\xdb\x4f\xe6\x7d"
+                               "\x14\x88\x1f\xb6\x2a\xc1\x58\xef"
+                               "\x63\xfa\x91\x05\x9c\x33\xca\x3e"
+                               "\xd5\x6c\x03\x77\x0e\xa5\x19\xb0"
+                               "\x47\xde\x52\xe9\x80\x17\x8b\x22"
+                               "\xb9\x2d\xc4\x5b\xf2\x66\xfd\x94"
+                               "\x08\x9f\x36\xcd\x41\xd8\x6f\x06"
+                               "\x7a\x11\xa8\x1c\xb3\x4a\xe1\x55"
+                               "\xec\x83\x1a\x8e\x25\xbc\x30\xc7"
+                               "\x5e\xf5\x69\x00\x97\x0b\xa2\x39"
+                               "\xd0\x44\xdb\x72\x09\x7d\x14\xab"
+                               "\x1f\xb6\x4d\xe4\x58\xef\x86\x1d"
+                               "\x91\x28\xbf\x33\xca\x61\xf8\x6c"
+                               "\x03\x9a\x0e\xa5\x3c\xd3\x47\xde"
+                               "\x75\x0c\x80\x17\xae\x22\xb9\x50"
+                               "\xe7\x5b\xf2\x89\x20\x94\x2b\xc2"
+                               "\x36\xcd\x64\xfb\x6f\x06\x9d\x11"
+                               "\xa8\x3f\xd6\x4a\xe1\x78\x0f\x83"
+                               "\x1a\xb1\x25\xbc\x53\xea\x5e\xf5"
+                               "\x8c\x00\x97\x2e\xc5\x39\xd0\x67"
+                               "\xfe\x72\x09\xa0\x14\xab\x42\xd9"
+                               "\x4d\xe4\x7b\x12\x86\x1d\xb4\x28"
+                               "\xbf\x56\xed\x61\xf8\x8f\x03\x9a"
+                               "\x31\xc8\x3c\xd3\x6a\x01\x75\x0c"
+                               "\xa3\x17\xae\x45\xdc\x50\xe7\x7e"
+                               "\x15\x89\x20\xb7\x2b\xc2\x59\xf0"
+                               "\x64\xfb\x92\x06\x9d\x34\xcb\x3f"
+                               "\xd6\x6d\x04\x78\x0f\xa6\x1a\xb1"
+                               "\x48\xdf\x53\xea\x81\x18\x8c\x23"
+                               "\xba\x2e\xc5\x5c\xf3\x67\xfe\x95"
+                               "\x09\xa0\x37\xce\x42\xd9\x70\x07"
+                               "\x7b\x12\xa9\x1d\xb4\x4b\xe2\x56"
+                               "\xed\x84\x1b\x8f\x26\xbd\x31\xc8"
+                               "\x5f\xf6\x6a\x01\x98\x0c\xa3\x3a"
+                               "\xd1\x45\xdc\x73\x0a\x7e\x15\xac"
+                               "\x20\xb7\x4e\xe5\x59\xf0\x87\x1e"
+                               "\x92\x29\xc0\x34\xcb\x62\xf9\x6d"
+                               "\x04\x9b\x0f\xa6\x3d\xd4\x48\xdf"
+                               "\x76\x0d\x81\x18\xaf\x23\xba\x51"
+                               "\xe8\x5c\xf3\x8a\x21\x95\x2c\xc3"
+                               "\x37\xce\x65\xfc\x70\x07\x9e\x12"
+                               "\xa9\x40\xd7\x4b\xe2\x79\x10\x84"
+                               "\x1b\xb2\x26\xbd\x54\xeb\x5f\xf6"
+                               "\x8d\x01\x98\x2f\xc6\x3a\xd1\x68"
+                               "\xff\x73\x0a\xa1\x15\xac\x43\xda"
+                               "\x4e\xe5\x7c\x13\x87\x1e\xb5\x29"
+                               "\xc0\x57\xee\x62\xf9\x90\x04\x9b"
+                               "\x32\xc9\x3d\xd4\x6b\x02\x76\x0d"
+                               "\xa4\x18\xaf\x46\xdd\x51\xe8\x7f"
+                               "\x16\x8a\x21\xb8\x2c\xc3\x5a\xf1"
+                               "\x65\xfc\x93\x07\x9e\x35\xcc\x40"
+                               "\xd7\x6e\x05\x79\x10\xa7\x1b\xb2"
+                               "\x49\xe0\x54\xeb\x82\x19\x8d\x24"
+                               "\xbb\x2f\xc6\x5d\xf4\x68\xff\x96"
+                               "\x0a\xa1\x38\xcf\x43\xda\x71\x08"
+                               "\x7c\x13\xaa\x1e\xb5\x4c\xe3\x57"
+                               "\xee\x85\x1c\x90\x27\xbe\x32\xc9"
+                               "\x60\xf7\x6b\x02\x99\x0d\xa4\x3b"
+                               "\xd2\x46\xdd\x74\x0b\x7f\x16\xad"
+                               "\x21\xb8\x4f\xe6\x5a\xf1\x88\x1f"
+                               "\x93\x2a\xc1\x35\xcc\x63\xfa\x6e"
+                               "\x05\x9c\x10\xa7\x3e\xd5\x49\xe0"
+                               "\x77\x0e\x82\x19\xb0\x24\xbb\x52"
+                               "\xe9\x5d\xf4\x8b\x22\x96\x2d\xc4"
+                               "\x38\xcf\x66\xfd\x71\x08\x9f\x13"
+                               "\xaa\x41\xd8\x4c\xe3\x7a\x11\x85"
+                               "\x1c\xb3\x27\xbe\x55\xec\x60\xf7"
+                               "\x8e\x02\x99\x30\xc7\x3b\xd2\x69"
+                               "\x00\x74\x0b\xa2\x16\xad\x44\xdb"
+                               "\x4f\xe6\x7d\x14\x88\x1f\xb6\x2a"
+                               "\xc1\x58\xef\x63\xfa\x91\x05\x9c"
+                               "\x33\xca\x3e\xd5\x6c\x03\x77\x0e"
+                               "\xa5\x19\xb0\x47\xde\x52\xe9\x80"
+                               "\x17\x8b\x22\xb9\x2d\xc4\x5b\xf2"
+                               "\x66\xfd\x94\x08\x9f\x36\xcd\x41"
+                               "\xd8\x6f\x06\x7a\x11\xa8\x1c\xb3"
+                               "\x4a\xe1\x55\xec\x83\x1a\x8e\x25"
+                               "\xbc\x30\xc7\x5e\xf5\x69\x00\x97"
+                               "\x0b\xa2\x39\xd0\x44\xdb\x72\x09"
+                               "\x7d\x14\xab\x1f\xb6\x4d\xe4\x58"
+                               "\xef\x86\x1d\x91\x28\xbf\x33\xca"
+                               "\x61\xf8\x6c\x03\x9a\x0e\xa5\x3c"
+                               "\xd3\x47\xde\x75\x0c\x80\x17\xae"
+                               "\x22\xb9\x50\xe7\x5b\xf2\x89\x20"
+                               "\x94\x2b\xc2\x36\xcd\x64\xfb\x6f"
+                               "\x06\x9d\x11\xa8\x3f\xd6\x4a\xe1"
+                               "\x78\x0f\x83\x1a\xb1\x25\xbc\x53"
+                               "\xea\x5e\xf5\x8c\x00\x97\x2e\xc5"
+                               "\x39\xd0\x67\xfe\x72\x09\xa0\x14"
+                               "\xab\x42\xd9\x4d\xe4\x7b\x12\x86"
+                               "\x1d\xb4\x28\xbf\x56\xed\x61\xf8"
+                               "\x8f\x03\x9a\x31\xc8\x3c\xd3\x6a"
+                               "\x01\x75\x0c\xa3\x17\xae\x45\xdc"
+                               "\x50\xe7\x7e\x15\x89\x20\xb7\x2b"
+                               "\xc2\x59\xf0\x64\xfb\x92\x06\x9d"
+                               "\x34\xcb\x3f\xd6\x6d\x04\x78\x0f"
+                               "\xa6\x1a\xb1\x48\xdf\x53\xea\x81"
+                               "\x18\x8c\x23\xba\x2e\xc5\x5c\xf3"
+                               "\x67\xfe\x95\x09\xa0\x37\xce\x42"
+                               "\xd9\x70\x07\x7b\x12\xa9\x1d\xb4"
+                               "\x4b\xe2\x56\xed\x84\x1b\x8f\x26"
+                               "\xbd\x31\xc8\x5f\xf6\x6a\x01\x98",
+               .psize = 2048,
+               .digest = "\xfb\x3a\x7a\xda",
+       }
+};
+
 /*
  * CRC32C test vectors
  */