printk: guard the amount written per line by devkmsg_read()
[deliverable/linux.git] / crypto / testmgr.h
index 60031439f8d311a826bfcd0711e734f170b0baec..868edf11704142deec8e05c44a2edfb37661ad27 100644 (file)
@@ -46,6 +46,24 @@ 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;
@@ -107,8 +125,195 @@ 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\x88" /* sequence of 136 bytes */
+       "\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",
+       .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 = 139,
+       .m_size = 8,
+       .c_size = 64,
+       }, {
+       .key =
+       "\x30\x82\x01\x0B" /* sequence of 267 bytes */
+       "\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",
+       .key_len = 271,
+       .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\x0D" /* sequence of 525 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 */
+       "\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",
+       .key_len = 529,
+       .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
  */
@@ -3025,6 +3230,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.
  */
@@ -13686,8 +14139,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
@@ -19846,6 +20299,428 @@ 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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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,
        }
 };
 
@@ -20021,7 +20896,428 @@ static struct aead_testvec aes_gcm_rfc4106_dec_tv_template[] = {
                           "\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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 8,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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",
+               .alen   = 12,
+               .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,
        }
 };
 
@@ -20032,8 +21328,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"
@@ -20062,8 +21359,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"
@@ -20088,8 +21386,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"
@@ -20760,6 +22059,454 @@ static struct aead_testvec aes_ccm_rfc4309_dec_tv_template[] = {
        },
 };
 
+/*
+ * 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",
+               .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 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",
+               .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,
+       },
+};
+
 /*
  * ANSI X9.31 Continuous Pseudo-Random Number Generator (AES mode)
  * test vectors, taken from Appendix B.2.9 and B.2.10:
@@ -28427,6 +30174,183 @@ static struct cipher_testvec salsa20_stream_enc_tv_template[] = {
        },
 };
 
+#define CHACHA20_ENC_TEST_VECTORS 3
+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,
+       },
+};
+
 /*
  * CTS (Cipher Text Stealing) mode tests
  */
This page took 0.055139 seconds and 5 git commands to generate.