Add AEAD Wycheproof drivers.

Change-Id: I840863c445fd9dac3fd60ac4b1c572ea7d924c9c
Reviewed-on: https://boringssl-review.googlesource.com/27826
Reviewed-by: Steven Valdez <svaldez@google.com>
Commit-Queue: Steven Valdez <svaldez@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/cipher_extra/aead_test.cc b/crypto/cipher_extra/aead_test.cc
index b5bbe88..c9d0e9a 100644
--- a/crypto/cipher_extra/aead_test.cc
+++ b/crypto/cipher_extra/aead_test.cc
@@ -27,6 +27,7 @@
 #include "../internal.h"
 #include "../test/file_test.h"
 #include "../test/test_util.h"
+#include "../test/wycheproof_util.h"
 
 
 struct KnownAEAD {
@@ -691,3 +692,126 @@
   ASSERT_EQ(out_len, kPlaintext.size());
   EXPECT_EQ(Bytes(kPlaintext), Bytes(out.data(), kPlaintext.size()));
 }
+
+static void RunWycheproofTestCase(FileTest *t, const EVP_AEAD *aead) {
+  t->IgnoreInstruction("ivSize");
+
+  std::vector<uint8_t> aad, ct, iv, key, msg, tag;
+  ASSERT_TRUE(t->GetBytes(&aad, "aad"));
+  ASSERT_TRUE(t->GetBytes(&ct, "ct"));
+  ASSERT_TRUE(t->GetBytes(&iv, "iv"));
+  ASSERT_TRUE(t->GetBytes(&key, "key"));
+  ASSERT_TRUE(t->GetBytes(&msg, "msg"));
+  ASSERT_TRUE(t->GetBytes(&tag, "tag"));
+  std::string tag_size_str;
+  ASSERT_TRUE(t->GetInstruction(&tag_size_str, "tagSize"));
+  size_t tag_size = static_cast<size_t>(atoi(tag_size_str.c_str()));
+  ASSERT_EQ(0u, tag_size % 8);
+  tag_size /= 8;
+  WycheproofResult result;
+  ASSERT_TRUE(GetWycheproofResult(t, &result));
+
+  std::vector<uint8_t> ct_and_tag = ct;
+  ct_and_tag.insert(ct_and_tag.end(), tag.begin(), tag.end());
+
+  bssl::ScopedEVP_AEAD_CTX ctx;
+  ASSERT_TRUE(EVP_AEAD_CTX_init(ctx.get(), aead, key.data(), key.size(),
+                                tag_size, nullptr));
+  std::vector<uint8_t> out(msg.size());
+  size_t out_len;
+  // Wycheproof tags small AES-GCM IVs as "acceptable" and otherwise does not
+  // use it in AEADs. Any AES-GCM IV that isn't 96 bits is absurd, but our API
+  // supports those, so we treat "acceptable" as "valid" here.
+  if (result != WycheproofResult::kInvalid) {
+    // Decryption should succeed.
+    ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
+                                  iv.data(), iv.size(), ct_and_tag.data(),
+                                  ct_and_tag.size(), aad.data(), aad.size()));
+    EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len));
+
+    // Decryption in-place should succeed.
+    out = ct_and_tag;
+    ASSERT_TRUE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
+                                  iv.data(), iv.size(), out.data(), out.size(),
+                                  aad.data(), aad.size()));
+    EXPECT_EQ(Bytes(msg), Bytes(out.data(), out_len));
+
+    // AEADs are deterministic, so encryption should produce the same result.
+    out.resize(ct_and_tag.size());
+    ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
+                                  iv.data(), iv.size(), msg.data(), msg.size(),
+                                  aad.data(), aad.size()));
+    EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len));
+
+    // Encrypt in-place.
+    out = msg;
+    out.resize(ct_and_tag.size());
+    ASSERT_TRUE(EVP_AEAD_CTX_seal(ctx.get(), out.data(), &out_len, out.size(),
+                                  iv.data(), iv.size(), out.data(), msg.size(),
+                                  aad.data(), aad.size()));
+    EXPECT_EQ(Bytes(ct_and_tag), Bytes(out.data(), out_len));
+  } else {
+    // Decryption should fail.
+    EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
+                                   iv.data(), iv.size(), ct_and_tag.data(),
+                                   ct_and_tag.size(), aad.data(), aad.size()));
+
+    // Decryption in-place should also fail.
+    out = ct_and_tag;
+    EXPECT_FALSE(EVP_AEAD_CTX_open(ctx.get(), out.data(), &out_len, out.size(),
+                                   iv.data(), iv.size(), out.data(), out.size(),
+                                   aad.data(), aad.size()));
+  }
+}
+
+TEST(AEADTest, WycheproofAESGCMSIV) {
+  FileTestGTest("third_party/wycheproof/aes_gcm_siv_test.txt", [](FileTest *t) {
+    std::string key_size_str;
+    ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize"));
+    const EVP_AEAD *aead;
+    switch (atoi(key_size_str.c_str())) {
+      case 128:
+        aead = EVP_aead_aes_128_gcm_siv();
+        break;
+      case 256:
+        aead = EVP_aead_aes_256_gcm_siv();
+        break;
+      default:
+        FAIL() << "Unknown key size: " << key_size_str;
+    }
+
+    RunWycheproofTestCase(t, aead);
+  });
+}
+
+TEST(AEADTest, WycheproofAESGCM) {
+  FileTestGTest("third_party/wycheproof/aes_gcm_test.txt", [](FileTest *t) {
+    std::string key_size_str;
+    ASSERT_TRUE(t->GetInstruction(&key_size_str, "keySize"));
+    const EVP_AEAD *aead;
+    switch (atoi(key_size_str.c_str())) {
+      case 128:
+        aead = EVP_aead_aes_128_gcm();
+        break;
+      case 192:
+        // Skip AES-192-GCM tests.
+        t->SkipCurrent();
+        return;
+      case 256:
+        aead = EVP_aead_aes_256_gcm();
+        break;
+      default:
+        FAIL() << "Unknown key size: " << key_size_str;
+    }
+
+    RunWycheproofTestCase(t, aead);
+  });
+}
+
+TEST(AEADTest, WycheproofChaCha20Poly1305) {
+  FileTestGTest("third_party/wycheproof/chacha20_poly1305_test.txt",
+                [](FileTest *t) {
+    t->IgnoreInstruction("keySize");
+    RunWycheproofTestCase(t, EVP_aead_chacha20_poly1305());
+  });
+}
diff --git a/crypto/test/file_test.cc b/crypto/test/file_test.cc
index 2ad49d3..ae2f4c3 100644
--- a/crypto/test/file_test.cc
+++ b/crypto/test/file_test.cc
@@ -332,6 +332,7 @@
   parameter_.clear();
   attributes_.clear();
   unused_attributes_.clear();
+  unused_instructions_.clear();
   current_test_ = "";
 }
 
diff --git a/sources.cmake b/sources.cmake
index d252d98..f192698 100644
--- a/sources.cmake
+++ b/sources.cmake
@@ -59,6 +59,9 @@
   crypto/x509/some_names1.pem
   crypto/x509/some_names2.pem
   crypto/x509/some_names3.pem
+  third_party/wycheproof/aes_gcm_siv_test.txt
+  third_party/wycheproof/aes_gcm_test.txt
+  third_party/wycheproof/chacha20_poly1305_test.txt
   third_party/wycheproof/dsa_test.txt
   third_party/wycheproof/ecdsa_secp224r1_sha224_test.txt
   third_party/wycheproof/ecdsa_secp224r1_sha256_test.txt
diff --git a/third_party/wycheproof/aes_gcm_siv_test.txt b/third_party/wycheproof/aes_gcm_siv_test.txt
new file mode 100644
index 0000000..ee506d0
--- /dev/null
+++ b/third_party/wycheproof/aes_gcm_siv_test.txt
@@ -0,0 +1,1293 @@
+# Imported from Wycheproof's aes_gcm_siv_test.json.
+# This file is generated by convert_wycheproof.go. Do not edit by hand.
+#
+# Algorithm: AES-GCM
+# Generator version: 0.4
+
+[ivSize = 96]
+[keySize = 128]
+[tagSize = 128]
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 
+result = valid
+tag = dc20e2d83f25705bb49e439eca56de25
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = b5d839330ac7b786
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 0100000000000000
+result = valid
+tag = 578782fff6013b815b287c22493a364c
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 7323ea61d05932260047d942
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 010000000000000000000000
+result = valid
+tag = a4978db357391a0bc4fdec8b0d106639
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 743f7c8077ab25f8624e2e948579cf77
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 01000000000000000000000000000000
+result = valid
+tag = 303aaf90f6fe21199c6068577437a0c4
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 84e07e62ba83a6585417245d7ec413a9fe427d6315c09b57ce45f2e3936a9445
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 0100000000000000000000000000000002000000000000000000000000000000
+result = valid
+tag = 1a8e45dcd4578c667cd86847bf6155ff
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 3fd24ce1f5a67b75bf2351f181a475c7b800a5b4d3dcf70106b1eea82fa1d64df42bf7226122fa92e17a40eeaac1201b
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000
+result = valid
+tag = 5e6e311dbf395d35b0fe39c2714388f8
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 2433668f1058190f6d43e360f4f35cd8e475127cfca7028ea8ab5c20f7ab2af02516a2bdcbc08d521be37ff28c152bba36697f25b4cd169c6590d1dd39566d3f
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
+result = valid
+tag = 8a263dd317aa88d56bdf3936dba75bb8
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 1e6daba35669f427
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 0200000000000000
+result = valid
+tag = 3b0a1a2560969cdf790d99759abd1508
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 296c7889fd99f41917f44620
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 020000000000000000000000
+result = valid
+tag = 08299c5102745aaa3a0c469fad9e075a
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = e2b0c5da79a901c1745f700525cb335b
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 02000000000000000000000000000000
+result = valid
+tag = 8f8936ec039e4e4bb97ebd8c4457441f
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 620048ef3c1e73e57e02bb8562c416a319e73e4caac8e96a1ecb2933145a1d71
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 0200000000000000000000000000000003000000000000000000000000000000
+result = valid
+tag = e6af6a7f87287da059a71684ed3498e1
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 50c8303ea93925d64090d07bd109dfd9515a5a33431019c17d93465999a8b0053201d723120a8562b838cdff25bf9d1e
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
+result = valid
+tag = 6a8cc3865f76897c2e4b245cf31c51f2
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 2f5c64059db55ee0fb847ed513003746aca4e61c711b5de2e7a77ffd02da42feec601910d3467bb8b36ebbaebce5fba30d36c95f48a3e7980f0e7ac299332a80
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000
+result = valid
+tag = cdc46ae475563de037001ef84ae21744
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 010000000000000000000000
+ct = a8fe3e87
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 02000000
+result = valid
+tag = 07eb1f84fb28f8cb73de8e99e2f48a14
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 010000000000000000000000000000000200
+ct = 6bb0fecf5ded9b77f902c7d5da236a4391dd0297
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 0300000000000000000000000000000004000000
+result = valid
+tag = 24afc9805e976f451e6d87f6fe106514
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 0100000000000000000000000000000002000000
+ct = 44d0aaf6fb2f1f34add5e8064e83e12a2ada
+iv = 030000000000000000000000
+key = 01000000000000000000000000000000
+msg = 030000000000000000000000000000000400
+result = valid
+tag = bff9b2ef00fb47920cc72a0c0f13b9fd
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 
+iv = f46e44bb3da0015c94f70887
+key = e66021d5eb8e4f4066d4adb9c33560e4
+msg = 
+result = valid
+tag = a4194b79071b01a87d65f706e3949578
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 46bb91c3c5
+ct = af60eb
+iv = bae8e37fc83441b16034566b
+key = 36864200e0eaf5284d884a0e77d31646
+msg = 7a806c
+result = valid
+tag = 711bd85bc1e4d3e0a462e074eea428a8
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = fc880c94a95198874296
+ct = bb93a3e34d3c
+iv = afc0577e34699b9e671fdd4f
+key = aedb64a6c590bc84d1a5e269e4b47801
+msg = bdc66f146545
+result = valid
+tag = d6a9c45545cfc11f03ad743dba20f966
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 046787f3ea22c127aaf195d1894728
+ct = 4f37281f7ad12949d0
+iv = 275d1ab32f6d1f0434d8848c
+key = d5cc1fd161320b6920ce07787f86743b
+msg = 1177441f195495860f
+result = valid
+tag = 1d02fd0cd174c84fc5dae2f60f52fd2b
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = c9882e5386fd9f92ec489c8fde2be2cf97e74e93
+ct = f54673c5ddf710c745641c8b
+iv = 9e9ad8780c8d63d0ab4149c0
+key = b3fed1473c528b8426a582995929a149
+msg = 9f572c614b4745914474e7c7
+result = valid
+tag = c1dc2f871fb7561da1286e655e24b7b0
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 2950a70d5a1db2316fd568378da107b52b0da55210cc1c1b0a
+ct = c9ff545e07b88a015f05b274540aa1
+iv = ac80e6f61455bfac8308a2d4
+key = 2d4ed87da44102952ef94b02b805249b
+msg = 0d8c8451178082355c9e940fea2f58
+result = valid
+tag = 83b3449b9f39552de99dc214a1190b0b
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 1860f762ebfbd08284e421702de0de18baa9c9596291b08466f37de21c7f
+ct = 6298b296e24e8cc35dce0bed484b7f30d580
+iv = ae06556fb6aa7890bebc18fe
+key = bde3b2f204d1e9f8b06bc47f9745b3d1
+msg = 6b3db4da3d57aa94842b9803a96e07fb6de7
+result = valid
+tag = 3e377094f04709f64d7b985310a4db84
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 7576f7028ec6eb5ea7e298342a94d4b202b370ef9768ec6561c4fe6b7e7296fa859c21
+ct = 391cc328d484a4f46406181bcd62efd9b3ee197d05
+iv = 6245709fb18853f68d833640
+key = f901cfe8a69615a93fdf7a98cad48179
+msg = e42a3c02c25b64869e146d7b233987bddfc240871d
+result = valid
+tag = 2d15506c84a9edd65e13e9d24a2a6e70
+
+aad = 
+ct = 
+iv = 438a547a94ea88dce46c6c85
+key = bedcfb5a011ebc84600fcb296c15af0d
+msg = 
+result = valid
+tag = 596d0538e48526be1c991e40cc031073
+
+aad = 
+ct = 4f
+iv = b30c084727ad1c592ac21d12
+key = 384ea416ac3c2f51a76e7d8226346d4e
+msg = 35
+result = valid
+tag = 8b2b805fc0885e2b470d9dbe6cb15ed3
+
+aad = 
+ct = 04c7a55f97846e54
+iv = b5e006ded553110e6dc56529
+key = cae31cd9f55526eb038241fc44cac1e5
+msg = d10989f2c52e94ad
+result = valid
+tag = 48168ff846356c33032c719b518f18a8
+
+aad = 
+ct = fd9521041b0397a15b0070b93f48a9
+iv = ecb0c42f7000ef0e6f95f24d
+key = dd6197cd63c963919cf0c273ef6b28bf
+msg = 4dcc1485365866e25ac3f2ca6aba97
+result = valid
+tag = 09df91414578f7faf757d04ee26ab901
+
+aad = 
+ct = 6eb905287ddfafc32f6b1c10046c089f
+iv = 0e1666f2dc652f7708fb8f0d
+key = ffdf4228361ea1f8165852136b3480f7
+msg = 25b12e28ac0ef6ead0226a3b2288c800
+result = valid
+tag = 4ff9f939a77c34b0cb1ee75fcb0dd29a
+
+aad = 
+ct = 6f62bd09d4f36f73e289ab6dd114727fe3
+iv = 965ff6643116ac1443a2dec7
+key = c15ed227dd2e237ecd087eaaaad19ea4
+msg = fee62fde973fe025ad6b322dcdf3c63fc7
+result = valid
+tag = ea727c084db2bc948de0928edddd7fcf
+
+aad = 
+ct = 80133a4bea7311f0d3c9835144c37c4ef0ef20c8f2e36be1
+iv = fbbc04fd6e025b7193eb57f6
+key = a8ee11b26d7ceb7f17eaa1e4b83a2cf6
+msg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf
+result = valid
+tag = b92f47c1af6713e14fbdf60efebb50c6
+
+aad = 
+ct = 778b308e4ca17607df36c0b94695bc64603173b814701a9f69147b42478a0b1f
+iv = a2dbe708db51c68ef02994a6
+key = 7519588f30f7f08ff98e1beee6a2a783
+msg = 1851956319256ebb0f9ccaf325a24abfc5c3e90b055e57cdc0c7ab2165ae03b1
+result = valid
+tag = b75c98952c0aa11958a55c9c2ecf33f5
+
+aad = 30
+ct = 173ba6370171be47dbb6163a63a3b725
+iv = 4bad10c6d84fd43fd13ad36f
+key = a5b5b6bae45b741fe4663890098f326a
+msg = 127b150080ec0bc7704e26f4ab11abb6
+result = valid
+tag = 53aefed6e971d5a1f435f0730a6dd0fd
+
+aad = 743e
+ct = 959f0ff12481dedc4302ad7a904f9486
+iv = 2186a3091237adae83540e24
+key = 0cecb9f512932d68e2c7c0bc4bd621c8
+msg = 437aeb94d842283ba57bb758e3d229f0
+result = valid
+tag = 0215be2ab9b0672a7b82893891057c9c
+
+aad = 25591707c004f506f4b51e85e29f6a
+ct = 8ae3a16a237f1358ac8cfeb5f4cc2818
+iv = 0c908e58cddad69dea1a32c3
+key = 55e04c122780be52ed9328928039008c
+msg = 26eb70672eef03667b34cc7d0df05872
+result = valid
+tag = 28f5aa8a34a9f7c01c17759d142b1bae
+
+aad = c07092d799dac2b4c05fbddd04743c34
+ct = d5220f6a49d1e4c10d38c77c8156ebd0
+iv = c30968c967e53505621628db
+key = 5f0a1b5f8f8673d566ec7f54e7dca4f2
+msg = f6538476daf04524cf134309dd84e187
+result = valid
+tag = 80b50f526286dad22d40984636f0e9ce
+
+aad = 3ea12d80f40f34f812479d2ecc13d2d6df
+ct = 3e771b9376e1d1cde3d9b73349c958bc
+iv = a51c37f467893c1608e56274
+key = 671a70e883fb0611dffd0b1dd9b8cca2
+msg = 3baf3edf04dc0c97aae081cdeb08021d
+result = valid
+tag = ebd3ea678a1e87839a4356584ea89bac
+
+aad = 5189ea6f39b2a78c0202fdff146c5cc6bdc7491d4786f80c6c6aef65634c05da
+ct = 05b568a589d0a77a8ee9c6f06415c6b6
+iv = 52c20979cdaaade573dba650
+key = 63f03172505d90e94900125cb8a4b0dd
+msg = 602c98997ee03fd11ce00e92de193977
+result = valid
+tag = 91ba5089dffb7538199c441728d5f84a
+
+# Testing for ctr overflow
+aad = 395f4091b410c373073bcdc79e02d3af
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 010101010101010101010101
+key = 00112233445566778899aabbccddeeff
+msg = 43488548d88e6f774bcd2d52c18fbcc933a4e9a9613ff3edbe959ec59522adc098b3133b8d17b9e9dad631ad33752c95
+result = valid
+tag = 00000000000000000000000000000000
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 616b2dff4d665e5f7ab890723dd981b1
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = f012c6a7eb0e8af5bc45e015e7680a693dc709b95383f6a94babec1bc36e4be3cf4f55a31a94f11c6c3f90eed99682bc
+result = valid
+tag = ffffffffffffffffffffffffffffffff
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 387a8997605fd04ae8951c4759087864
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 030303030303030303030303
+key = 00112233445566778899aabbccddeeff
+msg = 71ceee58179d6fb968521e9594dbf98cc0040f6aa38fe873c32a9b122d6cbfd51aa4778b3f4f37be7348690d97e2468b
+result = valid
+tag = fefffffffefffffffefffffffeffffff
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 6783b0d5e9d8a2a7274065797097d1ae
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 060606060606060606060606
+key = 00112233445566778899aabbccddeeff
+msg = 2e14f9e9a09ea204557367898a80dcad117af3666bea25762b70633a9f3614fbe631ba617c371fd5566d5e613496e69f
+result = valid
+tag = ffffff7f00112233445566778899aabb
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 2933810c146f4f7dd146dd43f35199c6
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 010101010101010101010101
+key = 00112233445566778899aabbccddeeff
+msg = 27fac75879c9d87cd52a0793137ba792f6f145148158eb538f2081e09cd0315986a7025045ecbb2ca1bb18a17bfcd567
+result = valid
+tag = ffffffffffffff7f0011223344556677
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Flipped bit 0 in tag
+aad = 27dd62060507dae87c4f93f391ba15f9
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 0 in tag
+aad = 9ea3371e258288d5a01b15384e2c99ee
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 0 in tag
+aad = ce24e3ec0fe7b8550d621b71fdb5d0eb
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 7 in tag
+aad = 1471f354b359c235117febba854a823b
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 7 in tag
+aad = 11f820294fc9d13f1895d2fb5509913b
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 8 in tag
+aad = 45e7257b814f09de44177b27b914822f
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 8 in tag
+aad = 4c49780b5438c4a7ea9795b9856fdae1
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 8 in tag
+aad = ecc2f2f4142837a34f9cd1fa030a5d7f
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 31 in tag
+aad = 69c7f5605da8e0684990b087411f8cf5
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 31 in tag
+aad = 20b346be60e7e97588bf504ce707ce0b
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 63 in tag
+aad = 19b298f3a061a73cb774da927ce11ca2
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 63 in tag
+aad = bff8c631e61c18a050a523ad4a750a20
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 64 in tag
+aad = 7b6171302b689c926852163e310f08d4
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 97 in tag
+aad = 555036128fa18ecadd090cb772ac0bf3
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 97 in tag
+aad = a5b43b8e1dbb2bfbda1b625fee4064a7
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 120 in tag
+aad = ae47cc5d7681dd480c23469c5519b647
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 120 in tag
+aad = d53dd677184702eaa660f1349195fc04
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 120 in tag
+aad = dc78584e4599dd4b2fb333db2f9ccb95
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 121 in tag
+aad = 0bfd9271e79153a8afdb7f3d96fe446f
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 121 in tag
+aad = 1e0537a95b7200134d0b440657d50fd1
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 121 in tag
+aad = 7633155df35857258d23b0651d60847c
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 126 in tag
+aad = ab0a064b473de43598adf81ee297d856
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 0fed395814f1750a
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 127 in tag
+aad = f62bdc3f4fcb699ee12f6e87dcc704cb
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 127 in tag
+aad = 1320051031807b8f44e9d2cb1ec6aa92
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 03c0e39b77bd62d32568f4c86c90bfdb
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 127 in tag
+aad = 329b813d3ae2225d3e15f97a28037bcc
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 0..127 in tag
+aad = edc723bedd0078696acdea005c74b841
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = 63995888995b338c
+result = invalid
+tag = 00000000000000000000000000000000
+
+[ivSize = 96]
+[keySize = 256]
+[tagSize = 128]
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 
+result = valid
+tag = 07f5f4169bbf55a8400cd47ea6fd400f
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = c2ef328e5c71c83b
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 0100000000000000
+result = valid
+tag = 843122130f7364b761e0b97427e3df28
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 9aab2aeb3faa0a34aea8e2b1
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 010000000000000000000000
+result = valid
+tag = 8ca50da9ae6559e48fd10f6e5c9ca17e
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 85a01b63025ba19b7fd3ddfc033b3e76
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 01000000000000000000000000000000
+result = valid
+tag = c9eac6fa700942702e90862383c6c366
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 4a6a9db4c8c6549201b9edb53006cba821ec9cf850948a7c86c68ac7539d027f
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 0100000000000000000000000000000002000000000000000000000000000000
+result = valid
+tag = e819e63abcd020b006a976397632eb5d
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = c00d121893a9fa603f48ccc1ca3c57ce7499245ea0046db16c53c7c66fe717e39cf6c748837b61f6ee3adcee17534ed5
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 010000000000000000000000000000000200000000000000000000000000000003000000000000000000000000000000
+result = valid
+tag = 790bc96880a99ba804bd12c0e6a22cc4
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = c2d5160a1f8683834910acdafc41fbb1632d4a353e8b905ec9a5499ac34f96c7e1049eb080883891a4db8caaa1f99dd004d80487540735234e3744512c6f90ce
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 01000000000000000000000000000000020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
+result = valid
+tag = 112864c269fc0d9d88c61fa47e39aa08
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 1de22967237a8132
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 0200000000000000
+result = valid
+tag = 91213f267e3b452f02d01ae33e4ec854
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 163d6f9cc1b346cd453a2e4c
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 020000000000000000000000
+result = valid
+tag = c1a4a19ae800941ccdc57cc8413c277f
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = c91545823cc24f17dbb0e9e807d5ec17
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 02000000000000000000000000000000
+result = valid
+tag = b292d28ff61189e8e49f3875ef91aff7
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 07dad364bfc2b9da89116d7bef6daaaf6f255510aa654f920ac81b94e8bad365
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 0200000000000000000000000000000003000000000000000000000000000000
+result = valid
+tag = aea1bad12702e1965604374aab96dbbc
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = c67a1f0f567a5198aa1fcc8e3f21314336f7f51ca8b1af61feac35a86416fa47fbca3b5f749cdf564527f2314f42fe25
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 020000000000000000000000000000000300000000000000000000000000000004000000000000000000000000000000
+result = valid
+tag = 03332742b228c647173616cfd44c54eb
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 01
+ct = 67fd45e126bfb9a79930c43aad2d36967d3f0e4d217c1e551f59727870beefc98cb933a8fce9de887b1e40799988db1fc3f91880ed405b2dd298318858467c89
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 02000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000005000000000000000000000000000000
+result = valid
+tag = 5bde0285037c5de81e5b570a049b62a0
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 010000000000000000000000
+ct = 22b3f4cd
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 02000000
+result = valid
+tag = 1835e517741dfddccfa07fa4661b74cf
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 010000000000000000000000000000000200
+ct = 43dd0163cdb48f9fe3212bf61b201976067f342b
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 0300000000000000000000000000000004000000
+result = valid
+tag = b879ad976d8242acc188ab59cabfe307
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 0100000000000000000000000000000002000000
+ct = 462401724b5ce6588d5a54aae5375513a075
+iv = 030000000000000000000000
+key = 0100000000000000000000000000000000000000000000000000000000000000
+msg = 030000000000000000000000000000000400
+result = valid
+tag = cfcdf5042112aa29685c912fc2056543
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 
+iv = e0eaf5284d884a0e77d31646
+key = e66021d5eb8e4f4066d4adb9c33560e4f46e44bb3da0015c94f7088736864200
+msg = 
+result = valid
+tag = 169fbb2fbf389a995f6390af22228a62
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 4fbdc66f14
+ct = 0eaccb
+iv = e4b47801afc0577e34699b9e
+key = bae8e37fc83441b16034566b7a806c46bb91c3c5aedb64a6c590bc84d1a5e269
+msg = 671fdd
+result = valid
+tag = 93da9bb81333aee0c785b240d319719d
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 6787f3ea22c127aaf195
+ct = a254dad4f3f9
+iv = 2f6d1f0434d8848c1177441f
+key = 6545fc880c94a95198874296d5cc1fd161320b6920ce07787f86743b275d1ab3
+msg = 195495860f04
+result = valid
+tag = 6b62b84dc40c84636a5ec12020ec8c2c
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 489c8fde2be2cf97e74e932d4ed87d
+ct = 0df9e308678244c44b
+iv = 9f572c614b4745914474e7c7
+key = d1894728b3fed1473c528b8426a582995929a1499e9ad8780c8d63d0ab4149c0
+msg = c9882e5386fd9f92ec
+result = valid
+tag = c0fd3dc6628dfe55ebb0b9fb2295c8c2
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 0da55210cc1c1b0abde3b2f204d1e9f8b06bc47f
+ct = 8dbeb9f7255bf5769dd56692
+iv = 5c9e940fea2f582950a70d5a
+key = a44102952ef94b02b805249bac80e6f61455bfac8308a2d40d8c845117808235
+msg = 1db2316fd568378da107b52b
+result = valid
+tag = 404099c2587f64979f21826706d497d5
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = f37de21c7ff901cfe8a69615a93fdf7a98cad481796245709f
+ct = 793576dfa5c0f88729a7ed3c2f1bff
+iv = 6de71860f762ebfbd08284e4
+key = 9745b3d1ae06556fb6aa7890bebc18fe6b3db4da3d57aa94842b9803a96e07fb
+msg = 21702de0de18baa9c9596291b08466
+result = valid
+tag = b3080d28f6ebb5d3648ce97bd5ba67fd
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 9c2159058b1f0fe91433a5bdc20e214eab7fecef4454a10ef0657df21ac7
+ct = 857e16a64915a787637687db4a9519635cdd
+iv = 028ec6eb5ea7e298342a94d4
+key = b18853f68d833640e42a3c02c25b64869e146d7b233987bddfc240871d7576f7
+msg = b202b370ef9768ec6561c4fe6b7e7296fa85
+result = valid
+tag = 454fc2a154fea91f8363a39fec7d0a49
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 734320ccc9d9bbbb19cb81b2af4ecbc3e72834321f7aa0f70b7282b4f33df23f167541
+ct = 626660c26ea6612fb17ad91e8e767639edd6c9faee
+iv = 688089e55540db1872504e1c
+key = 3c535de192eaed3822a2fbbe2ca9dfc88255e14a661b8aa82cc54236093bbc23
+msg = ced532ce4159b035277d4dfbb7db62968b13cd4eec
+result = valid
+tag = 9d6c7029675b89eaf4ba1ded1a286594
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = f3f80f2cf0cb2dd9c5984fcda908456cc537703b5ba70324a6793a7bf218d3ea
+iv = 000000000000000000000000
+key = 0000000000000000000000000000000000000000000000000000000000000000
+msg = 000000000000000000000000000000004db923dc793ee6497c76dcc03a98e108
+result = valid
+tag = ffffffff000000000000000000000000
+
+# draft-irtf-cfrg-gcmsiv-06
+aad = 
+ct = 18ce4f0b8cb4d0cac65fea8f79257b20888e53e72299e56d
+iv = 000000000000000000000000
+key = 0000000000000000000000000000000000000000000000000000000000000000
+msg = eb3640277c7ffd1303c7a542d02d3e4c0000000000000000
+result = valid
+tag = ffffffff000000000000000000000000
+
+aad = 
+ct = 
+iv = 4da5bf8dfd5852c1ea12379d
+key = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0
+msg = 
+result = valid
+tag = 181720f6ecdcdd332c89d20e09f11b0f
+
+aad = 
+ct = fa
+iv = 99e23ec48985bccdeeab60f1
+key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273
+msg = 2a
+result = valid
+tag = 868ee11a7fe13996ac26962a7e861962
+
+aad = 
+ct = c32210c306fac7dc
+iv = 4f07afedfdc3b6c2361823d3
+key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152
+msg = be3308f72a2c6aed
+result = valid
+tag = da60d8ff4d550e6801b0ce488ed1b6fe
+
+aad = 
+ct = 0180029193bbb29e326b5817e8ea01
+iv = 68ab7fdbf61901dad461d23c
+key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb
+msg = 51f8c1f731ea14acdb210a6d973e07
+result = valid
+tag = 4dd43e861c5f141a693ebc056ed0f0f9
+
+aad = 
+ct = 31cb136074adcd00cf75e9587d7e8424
+iv = 2fcb1b38a99e71b84740ad9b
+key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a
+msg = 549b365af913f3b081131ccb6b825588
+result = valid
+tag = 567871b7aaaf3c00f42fd9d5962df514
+
+aad = 
+ct = c97e58e8730a567e8bdf5eb981cdd5f323
+iv = 45aaa3e5d16d2d42dc03445d
+key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011
+msg = 3ff1514b1c503915918f0c0c31094a6e1f
+result = valid
+tag = 4b2dc825fef9dc6bf234f2b8ff798f9e
+
+aad = 
+ct = c2669f9fc8fe6013c4dd22468d43c2af73647b7018531d29
+iv = e6b1adf2fd58a8762c65f31b
+key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7
+msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111
+result = valid
+tag = 06a58c8d44e99b3262cad0e920df1f85
+
+aad = 
+ct = faaef557c31a231115f393c4b3c1a1413fb40b4204458d5f9ef8a9f2f12486ae
+iv = 72cfd90ef3026ca22b7e6e6a
+key = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3
+msg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678
+result = valid
+tag = 72fc457255aadf708719c46986caefad
+
+aad = 02
+ct = 12fffdccd1e5a9708fa30ccf99137067
+iv = 87345f1055fd9e2102d50656
+key = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c
+msg = e5ccaa441bc814688f8f6e8f28b500b2
+result = valid
+tag = 688e0b634f51c4f6d983629c8a63c1c0
+
+aad = b648
+ct = b75b8e96de2ef9704ade5c64cab59671
+iv = 87a3163ec0598ad95b3aa713
+key = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc
+msg = 02cde168fba3f544bbd0332f7adeada8
+result = valid
+tag = dec00ceb899c4a6a29be67f1b30435e0
+
+aad = bd4cd02fc7502bbdbdf6c9a3cbe8f0
+ct = 8e67034384170a646e9eea1606a8e899
+iv = 6f573aa86baa492ba46596df
+key = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f
+msg = 16ddd23ff53f3d23c06334487040eb47
+result = valid
+tag = fe7a3dd42beb5ff70bb471ff76f0d341
+
+aad = 89cce9fb47441d07e0245a66fe8b778b
+ct = 7eeb00c65fe7e0c79255e3cd90013588
+iv = 1a6518f02ede1da6809266d9
+key = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016
+msg = 623b7850c321e2cf0c6fbcc8dfd1aff2
+result = valid
+tag = 957d35fb25fdc17f00db33756967fd02
+
+aad = d19f2d989095f7ab03a5fde84416e00c0e
+ct = f83e3b4333400d6393d085fe947057c4
+iv = 564dee49ab00d240fc1068c3
+key = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657
+msg = 87b3a4d7b26d8d3203a0de1d64ef82e3
+result = valid
+tag = 7a30291bb506ae3961f61d683c9d94d1
+
+aad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37
+ct = 97db4d850442eb33e6089af6f3cadf7b
+iv = 8df4b15a888c33286a7b7651
+key = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130
+msg = dc9e9eaf11e314182df6a4eba17aec9c
+result = valid
+tag = 3ccbb125b2835754c1409d227e374d0b
+
+# Testing for ctr overflow
+aad = 40c32e00c2fdab59c1a1c573b46b5068
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 010101010101010101010101
+key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+msg = bdd411814564c4218d224d50591c818855a862a0a519ac0b3d71a2edb12aa71eb81959bcc6b84c45aa424c9aca0b7bdd
+result = valid
+tag = 00000000000000000000000000000000
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 2cc3a1973e0560f7224a394e52fa8488
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000000000000
+key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+msg = d04846a01f472262e60a1cb4cfcbdcb05c3f819628a3a49395c5dae96c434b2417ce071699afa74a60c32c0bafd9c01a
+result = valid
+tag = ffffffffffffffffffffffffffffffff
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 2e34d12622a441b557eeb1d647c6cb73
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 010101010101010101010101
+key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+msg = 79637cee9decf33e3080de3d2c55bd21cd529ba8080b583edb6cfe13cda04bd00debe58b8cd48d6e02a1ecfc4d87923a
+result = valid
+tag = fefffffffefffffffefffffffeffffff
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = 0814a95481bf915a4097949e3525c7e7
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000000000000
+key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+msg = 6492a73880dac7f36743715b0fc7063d3e46a25044310bba5849ed88bfcb54b0adbe3978040bda849906e1aa09d1a8e3
+result = valid
+tag = ffffff7f00112233445566778899aabb
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Testing for ctr overflow
+aad = b691ef42f2ab8d1b4a581bb08394b13a
+ct = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 010101010101010101010101
+key = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+msg = 7848d9e872f40bca1b82a4e7185fb75193b3496cc1dc2a72b86ed156ab8389e71687ed25eb6485e66561fa8c39853368
+result = valid
+tag = ffffffffffffff7f0011223344556677
+# The counter for AES-GCM-SIV is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# Flipped bit 0 in tag
+aad = e144878b0bbbf01b75231277e1e0d114
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 0 in tag
+aad = 0289eaa93eb084107d2088435ef2a0cd
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 1 in tag
+aad = f3bd6013669b7d9371727fcb1aafea75
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 7 in tag
+aad = 922e91b2c5016e4303c737d1608ca25f
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 7 in tag
+aad = 7195dd0addce5dd7014bfddb2f23206f
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 7 in tag
+aad = 32fc2a53e9678f1fc6d63081c36c6f2c
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 8 in tag
+aad = c55ba71ee250216f8ecfe822d712dd38
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 8 in tag
+aad = 5546acf865fc305fbd7ff1092cb9c2c3
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 31 in tag
+aad = 6b060eebe1843b409a4dfd0be8f86a2b
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 31 in tag
+aad = c4adb92f1a60eb2faff88675f62a7276
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 32 in tag
+aad = 70c5a8591f52f869c6415a6d7000e253
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 63 in tag
+aad = b5fe79f182cb9f2945208e29513928d1
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 63 in tag
+aad = c1dbf87e4a586b040c53f6dd9063b4cd
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 64 in tag
+aad = 845466e603ca85a224693d150ae13ba3
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 97 in tag
+aad = 18cb9f5eede6224fa3fcd525cf9f958b
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 97 in tag
+aad = 8c4fbca37d2e361856b9f80adf455fa0
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 97 in tag
+aad = bc517fe140abf2b42eb1cafe8c0715a9
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 120 in tag
+aad = 617e1c5ef62ed35cf678e670f116ff2f
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 120 in tag
+aad = e71802b7a37e8ef1f001ef0c52c636f2
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 120 in tag
+aad = be647e37f154d4a8edca5a29ca221cc5
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 121 in tag
+aad = b3caa01f49c7cbc56c7c92547257957e
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 121 in tag
+aad = ab0347a2aec4cc4c366583062442ba07
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 126 in tag
+aad = 62573ef39a27f77b37fb7bfc84e46cee
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 126 in tag
+aad = 28e3cadfb16834e824642e965588c200
+ct = 0000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 759dfbbb8a251ccc
+result = invalid
+tag = 00000000000000000000000000000000
+
+# Flipped bit 126 in tag
+aad = 7edd2fc15bed224a46dc8608e1766080
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 127 in tag
+aad = 7e0e03104e2c0ff20ba4c35742180c5b
+ct = 
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 0987e35e40981a2730c1740c7201731f
+
+# Flipped bit 127 in tag
+aad = 9a24dc75c5ddd3bab57ff532eb86d224
+ct = 00000000000000000000000000000000
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = f663044a4e7dd822aba0b7de2d869981
+result = invalid
+tag = 13a1883272188b4c8d2727178198fe95
+
+# Flipped bit 127 in tag
+aad = 3196aec499c15bc043b6866ba0df6e6b
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 0..127 in tag
+aad = 55a2987aa94bf46ad1b6d253a44c1622
+ct = ffffffffffffffff
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 49861b1fb6bcf8e4
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
diff --git a/third_party/wycheproof/aes_gcm_test.txt b/third_party/wycheproof/aes_gcm_test.txt
new file mode 100644
index 0000000..0dbd628
--- /dev/null
+++ b/third_party/wycheproof/aes_gcm_test.txt
@@ -0,0 +1,1055 @@
+# Imported from Wycheproof's aes_gcm_test.json.
+# This file is generated by convert_wycheproof.go. Do not edit by hand.
+#
+# Algorithm: AES-GCM
+# Generator version: 0.4
+
+[ivSize = 96]
+[keySize = 128]
+[tagSize = 128]
+
+aad = 
+ct = 26073cc1d851beff176384dc9896d5ff
+iv = 028318abc1824029138141a2
+key = 5b9604fe14eadba931b0ccf34843dab9
+msg = 001d0c231287c1182784554ca3a21908
+result = valid
+tag = 0a3ea7a5487cb5f7d70fb6c58d038554
+
+aad = 00112233445566778899aabbccddeeff
+ct = 49d8b9783e911913d87094d1f63cc765
+iv = 921d2507fa8007b7bd067d34
+key = 5b9604fe14eadba931b0ccf34843dab9
+msg = 001d0c231287c1182784554ca3a21908
+result = valid
+tag = 1e348ba07cca2cf04c618cb4d43a5b92
+
+aad = aac39231129872a2
+ct = eea945f3d0f98cc0fbab472a0cf24e87
+iv = 0432bc49ac34412081288127
+key = aa023d0478dcb2b2312498293d9a9129
+msg = 2035af313d1346ab00154fea78322105
+result = valid
+tag = 4bb9b4812519dadf9e1232016d068133
+
+aad = 
+ct = 54
+iv = b30c084727ad1c592ac21d12
+key = 384ea416ac3c2f51a76e7d8226346d4e
+msg = 35
+result = valid
+tag = 7c1e4ae88bb27e5638343cb9fd3f6337
+
+aad = 
+ct = a036ead03193903f
+iv = b5e006ded553110e6dc56529
+key = cae31cd9f55526eb038241fc44cac1e5
+msg = d10989f2c52e94ad
+result = valid
+tag = 3b626940e0e9f0cbea8e18c437fd6011
+
+aad = 
+ct = 8a9992388e735f80ee18f4a63c10ad
+iv = ecb0c42f7000ef0e6f95f24d
+key = dd6197cd63c963919cf0c273ef6b28bf
+msg = 4dcc1485365866e25ac3f2ca6aba97
+result = valid
+tag = 1486a91cccf92c9a5b00f7b0e034891c
+
+aad = 
+ct = f7bd379d130477176b8bb3cb23dbbbaa
+iv = 0e1666f2dc652f7708fb8f0d
+key = ffdf4228361ea1f8165852136b3480f7
+msg = 25b12e28ac0ef6ead0226a3b2288c800
+result = valid
+tag = 1ee6513ce30c7873f59dd4350a588f42
+
+aad = 
+ct = 0de51fe4f7f2d1f0f917569f5c6d1b009c
+iv = 965ff6643116ac1443a2dec7
+key = c15ed227dd2e237ecd087eaaaad19ea4
+msg = fee62fde973fe025ad6b322dcdf3c63fc7
+result = valid
+tag = 6cd8521422c0177e83ef1b7a845d97db
+
+aad = 
+ct = 7cd9f4e4f365704fff3b9900aa93ba54b672bac554275650
+iv = fbbc04fd6e025b7193eb57f6
+key = a8ee11b26d7ceb7f17eaa1e4b83a2cf6
+msg = c08f085e6a9e0ef3636280c11ecfadf0c1e72919ffc17eaf
+result = valid
+tag = f4eb193241226db017b32ec38ca47217
+
+aad = c3
+ct = f58d453212c2c8a436e9283672f579f119122978
+iv = 32bcb9b569e3b852d37c766a
+key = 28ff3def08179311e2734c6d1c4e2871
+msg = dfc61a20df8505b53e3cd59f25770d5018add3d6
+result = valid
+tag = 5901131d0760c8715901d881fdfd3bc0
+
+aad = 834afdc5c737186b
+ct = bf864616c2347509ca9b10446379b9bdbb3b8f64
+iv = 9c3a4263d983456658aad4b1
+key = e63a43216c08867210e248859eb5e99c
+msg = b14da56b0462dc05b871fc815273ff4810f92f4b
+result = valid
+tag = a97d25b490390b53c5db91f6ee2a15b8
+
+aad = 4020855c66ac4595058395f367201c4c
+ct = a6f2ef3c7ef74a126dd2d5f6673964e27d5b34b6
+iv = 33e90658416e7c1a7c005f11
+key = 38449890234eb8afab0bbf82e2385454
+msg = f762776bf83163b323ca63a6b3adeac1e1357262
+result = valid
+tag = b8bbdc4f5014bc752c8b4e9b87f650a3
+
+aad = 76eb5f147250fa3c12bff0a6e3934a0b16860cf11646773b
+ct = bd64802cfebaeb487d3a8f76ce943a37b3472dd5
+iv = 9f0d85b605711f34cd2a35ba
+key = 6a68671dfe323d419894381f85eb63fd
+msg = 0fc67899c3f1bbe196d90f1eca3797389230aa37
+result = valid
+tag = fce9a5b530c7d7af718be1ec0ae9ed4d
+
+# special case
+aad = 
+ct = f62d84d649e56bc8cfedc5d74a51e2f7
+iv = 000000000000000000000000
+key = 00112233445566778899aabbccddeeff
+msg = ebd4a3e10cf6d41c50aeae007563b072
+result = valid
+tag = ffffffffffffffffffffffffffffffff
+
+# special case
+aad = 
+ct = 431f31e6840931fd95f94bf88296ff69
+iv = ffffffffffffffffffffffff
+key = 00112233445566778899aabbccddeeff
+msg = d593c4d8224f1b100c35e4f6c4006543
+result = valid
+tag = 00000000000000000000000000000000
+
+# special case
+aad = 
+ct = d8eba6a5a03403851abc27f6e15d84c0
+iv = 00112233445566778899aabb
+key = 00112233445566778899aabbccddeeff
+msg = 7fd49ba712d0d28f02ef54ed18db43f8
+result = valid
+tag = 00000000000000000000000000000000
+
+[ivSize = 64]
+[keySize = 128]
+[tagSize = 128]
+
+aad = aac39231129872a2
+ct = 64c36bb3b732034e3a7d04efc5197785
+iv = 0432bc49ac344120
+key = aa023d0478dcb2b2312498293d9a9129
+msg = 2035af313d1346ab00154fea78322105
+result = valid
+tag = b7d0dd70b00d65b97cfd080ff4b819d1
+
+# unusual IV size
+aad = 
+ct = 9a078a04d14938918e004358
+iv = 68cbeafe8f9e8a66
+key = 25dd4d6cad5a4604957847c8c6d3fc4e
+msg = 5c347835b3fa61c2ce253e5a
+result = valid
+tag = 5452843e32c13c3e35ed8230fe3446c0
+
+[ivSize = 128]
+[keySize = 128]
+[tagSize = 128]
+
+aad = 1a0293d8f90219058902139013908190bc490890d3ff12a3
+ct = 64069c2d58690561f27ee199e6b479b6369eec688672bde9
+iv = 3254202d854734812398127a3d134421
+key = 2034a82547276c83dd3212a813572bce
+msg = 02efd2e5782312827ed5d230189a2a342b277ce048462193
+result = valid
+tag = 9b7abadd6e69c1d9ec925786534f5075
+
+aad = 
+ct = fd
+iv = 9477849d6ccdfca112d92e53fae4a7ca
+key = 209e6dbf2ad26a105445fc0207cd9e9a
+msg = 01
+result = valid
+tag = 032df7bba5d8ea1a14f16f70bd0e14ec
+
+aad = 
+ct = 2f333087bdca58219f9bfc273e45cc
+iv = 5171524568e81d97e8c4de4ba56c10a0
+key = a549442e35154032d07c8666006aa6a2
+msg = 1182e93596cac5608946400bc73f3a
+result = valid
+tag = e06d1ef473132957ad37eaef29733ca0
+
+aad = 
+ct = a780bd01c80885156c88a973264c8ee5
+iv = 1275115499ae722268515bf0c164b49c
+key = cfb4c26f126f6a0acb8e4e220f6c56cd
+msg = 09dfd7f080275257cf97e76f966b1ad9
+result = valid
+tag = 2adeffa682c8d8a81fada7d9fcdd2ee2
+
+aad = 
+ct = 7e47e10fe3c6fbfa381770eaf5d48d1482e71e0c44dff1e30ca6f95d92052084
+iv = 95c1dd8c0f1705ece68937901f7add7b
+key = 0b11ef3a08c02970f74281c860691c75
+msg = f693d4edd825dbb0618d91113128880dbebb23e25d00ed1f077d870be9cc7536
+result = valid
+tag = d01444fa5d9c499629d174ff3927a1ac
+
+# J0:000102030405060708090a0b0c0d0e0f
+aad = 
+ct = 00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e
+iv = f95fde4a751913202aeeee32a0b55753
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 152a65045fe674f97627427af5be22da
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:00000000000000000000000000000000
+aad = 
+ct = 84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6
+iv = 7b95b8c356810a84711d68150a1b7750
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 213a3cb93855d18e69337eee66aeec07
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:ffffffffffffffffffffffffffffffff
+aad = 
+ct = 948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed
+iv = 1a552e67cdc4dc1a33b824874ebf0bed
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 99b381bfa2af9751c39d1b6e86d1be6a
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:fffffffffffffffffffffffffffffffe
+aad = 
+ct = 64b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc
+iv = dd9d0b4a0c3d681524bffca31d907661
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 5281efc7f13ac8e14ccf5dca7bfbfdd1
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:fffffffffffffffffffffffffffffffd
+aad = 
+ct = 2bb69c3e5d1f91815c6b87a0d5bbea7164b19314c31af45accdf7e3c4db79f0d948ca37a8e6649e8
+iv = 57c5643c4e37b4041db794cfe8e1f0f4
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = a3ea2c09ee4f8c8a12f45cddf9aeff81
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0bffffffff
+aad = 
+ct = 127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60
+iv = 99821c2dd5daecded07300f577f7aff1
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 07eb2fe4a958f8434d40684899507c7c
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0bfffffffe
+aad = 
+ct = 0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4
+iv = 5e4a3900142358d1c774d8d124d8d27d
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = f145c2dcaf339eede427be934357eac0
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0bfffffffd
+aad = 
+ct = f0c6ffc18bd46df5569185a9afd169eb0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57
+iv = d4125676562984c0fe7cb0bdd1a954e8
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = facd0bfe8701b7b4a2ba96d98af52bd9
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0b7fffffff
+aad = 
+ct = d6928e094c06e0a7c4db42184cf7529e95de88b767edebe9b343000be3dab47ea08b744293eed698
+iv = b97ec62a5e5900ccf9e4be332e336091
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = a03e729dcfd7a03155655fece8affd7e
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0b7ffffffe
+aad = 
+ct = d82ce58771bf6487116bf8e96421877ed6928e094c06e0a7c4db42184cf7529e95de88b767edebe9
+iv = 7eb6e3079fa0b4c3eee366177d1c1d1d
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 1e43926828bc9a1614c7b1639096c195
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0bffff7fff
+aad = 
+ct = a197a37a5d79697078536bc27fe46cd8d475526d9044aa94f088a054f8e380c64f79414795c61480
+iv = 0314fcd10fdd675d3c612962c931f635
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = f08baddf0b5285c91fc06a67fe4708ca
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# J0:000102030405060708090a0bffff7ffe
+aad = 
+ct = 149fde9abbd3a43c2548575e0db9fb84a197a37a5d79697078536bc27fe46cd8d475526d9044aa94
+iv = c4dcd9fcce24d3522b66f1469a1e8bb9
+key = 00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+result = valid
+tag = 62a4b6875c288345d6a454399eac1afa
+# The counter for AES-GCM is reduced modulo 2**32. This test vector was
+# constructed to test for correct wrapping of the counter.
+
+# special case
+aad = 
+ct = 1cd5a06214235ceb044d4bad7b047312
+iv = ffffffffffffffffffffffffffffffff
+key = 00112233445566778899aabbccddeeff
+msg = 4d82639c39d3f3490ee903dd0be7afcf
+result = valid
+tag = ffffffffffffffffffffffffffffffff
+
+[ivSize = 96]
+[keySize = 256]
+[tagSize = 128]
+
+aad = 00000000ffffffff
+ct = e27abdd2d2a53d2f136b
+iv = 00112233445566778899aabb
+key = 92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20
+msg = 00010203040506070809
+result = valid
+tag = 9a4a2579529301bcfb71c78d4060f52c
+
+aad = aabbccddeeff
+ct = 
+iv = 00112233445566778899aabb
+key = 29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123
+msg = 
+result = valid
+tag = 2a7d77fa526b8250cb296078926b5020
+
+aad = 
+ct = 06
+iv = 99e23ec48985bccdeeab60f1
+key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273
+msg = 2a
+result = valid
+tag = 633c1e9703ef744ffffb40edf9d14355
+
+aad = 
+ct = cf332a12fdee800b
+iv = 4f07afedfdc3b6c2361823d3
+key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152
+msg = be3308f72a2c6aed
+result = valid
+tag = 602e8d7c4799d62c140c9bb834876b09
+
+aad = 
+ct = 43fc101bff4b32bfadd3daf57a590e
+iv = 68ab7fdbf61901dad461d23c
+key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb
+msg = 51f8c1f731ea14acdb210a6d973e07
+result = valid
+tag = ec04aacb7148a8b8be44cb7eaf4efa69
+
+aad = 
+ct = f58c16690122d75356907fd96b570fca
+iv = 2fcb1b38a99e71b84740ad9b
+key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a
+msg = 549b365af913f3b081131ccb6b825588
+result = valid
+tag = 28752c20153092818faba2a334640d6e
+
+aad = 
+ct = 73a6b6f45f6ccc5131e07f2caa1f2e2f56
+iv = 45aaa3e5d16d2d42dc03445d
+key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011
+msg = 3ff1514b1c503915918f0c0c31094a6e1f
+result = valid
+tag = 2d7379ec1db5952d4e95d30c340b1b1d
+
+aad = 
+ct = 0843fff52d934fc7a071ea62c0bd351ce85678cde3ea2c9e
+iv = e6b1adf2fd58a8762c65f31b
+key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7
+msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111
+result = valid
+tag = 7355fde599006715053813ce696237a8
+
+aad = c0
+ct = eb5500e3825952866d911253f8de860c00831c81
+iv = 98bc2c7438d5cd7665d76f6e
+key = b279f57e19c8f53f2f963f5f2519fdb7c1779be2ca2b3ae8e1128b7d6c627fc4
+msg = fcc515b294408c8645c9183e3f4ecee5127846d1
+result = valid
+tag = ecb660e1fb0541ec41e8d68a64141b3a
+
+aad = 956846a209e087ed
+ct = feca44952447015b5df1f456df8ca4bb4eee2ce2
+iv = 376187894605a8d45e30de51
+key = cdccfe3f46d782ef47df4e72f0c02d9c7f774def970d23486f11a57f54247f17
+msg = e28e0e9f9d22463ac0e42639b530f42102fded75
+result = valid
+tag = 082e91924deeb77880e1b1c84f9b8d30
+
+aad = ab2ac7c44c60bdf8228c7884adb20184
+ct = 43dda832e942e286da314daa99bef5071d9d2c78
+iv = 5a86a50a0e8a179c734b996d
+key = f32364b1d339d82e4f132d8f4a0ec1ff7e746517fa07ef1a7f422f4e25a48194
+msg = 43891bccb522b1e72a6b53cf31c074e9d6c2df8e
+result = valid
+tag = c3922583476ced575404ddb85dd8cd44
+
+aad = 972ab4e06390caae8f99dd6e2187be6c7ff2c08a24be16ef
+ct = a929ee7e67c7a2f91bbcec6389a3caf43ab49305
+iv = bc2a7757d0ce2d8b1f14ccd9
+key = ff0089ee870a4a39f645b0a5da774f7a5911e9696fc9cad646452c2aa8595a12
+msg = 748b28031621d95ee61812b4b4f47d04c6fc2ff3
+result = valid
+tag = ebec6774b955e789591c822dab739e12
+
+[ivSize = 96]
+[keySize = 192]
+[tagSize = 128]
+
+aad = 
+ct = fe
+iv = 34047bc39b9c608384dff5b8
+key = 21218af790428f8024d3e7e1428c9fcf578c216636d60e73
+msg = e3
+result = valid
+tag = 2e982e24b81cd120d35a70fe6935e665
+
+aad = 
+ct = 99f2ff1c8a44e5f2
+iv = 4ebc13cf4636cc7c45e560a7
+key = 3a8bf543c480925632118245bcbf5d01522b987a31a33da3
+msg = 53fc72e71b59eeb3
+result = valid
+tag = 6870f104ddc514477b400336fb01860e
+
+aad = 
+ct = afe8ef41591bfcc00db3c880ceb186
+iv = 6e7ff7f0797685cfc44b05ff
+key = 92f4d2672fceec43963ccffb17e6ea7578b11418b06a3b82
+msg = c3ec16adb184affa8ae9738bffb916
+result = valid
+tag = 29fff7f285768645c9c8bf7a471c9393
+
+aad = 
+ct = 90339dca02ef717f1603994aee6cf6d2
+iv = be0326d23bdc2c64648d13f4
+key = bcb6bc5ee6743df1396a34639327b25809ec9c81dd6a0c0e
+msg = 80474a3a3b809560eee2ce7a7a33ea07
+result = valid
+tag = e3d33e01ce64f271783147de226228bc
+
+aad = 
+ct = b98ed6321679941a3e521834296686ad98
+iv = b6be6cd0681235d826aa28ea
+key = 5e1d28213e092536525bbae09e214af4c891e202b2b4fa4f
+msg = 53d59433a7db7f41b31ccb6d4a2d789965
+result = valid
+tag = 9f50c03e055e519712c582ec9db3235b
+
+aad = 
+ct = addd303651119e52f6170dfc7a915064253d57532987b9ab
+iv = b022067048505b20946216ef
+key = 7f672d85e151aa490bc0eec8f66b5e5bee74af11642be3ff
+msg = ef6412c72b03c643fa02565a0ae2378a9311c11a84065f80
+result = valid
+tag = fa0484f8baa95f5b7a31c56d1b34c58b
+
+aad = cb
+ct = 0d2c3a3c0cc4b40e70ed45e188e356a0e1533b31
+iv = 817fe51c31f2879141a34335
+key = 969fed5068541d65418c2c1de8fe1f845e036030496e1272
+msg = 3d8233191a2823bf767e99167b1d4af4f4848458
+result = valid
+tag = 92909a80e90540e1878ab59ef300072b
+
+aad = 2ed8487153e21b12
+ct = c7c1cbb85ce2a0a3f32cb9ef01ad45ec1118b66d
+iv = 62b9cf1e923bc1138d05d205
+key = fa5b9b41f93f8b682c04ba816c3fecc24eec095b04dd7497
+msg = 18159841813a69fc0f8f4229e1678da7c9016711
+result = valid
+tag = 253317f98bdab87531ece20475cd9ebb
+
+aad = 74318d8876528243f1944b73eb77e96e
+ct = ecf5e403f19c007c8da7a456caf0a6d75762829b
+iv = 3f1a1e02e90a4ba7a1db9df2
+key = fbfb395662787e2d25a2e7510f818e825936a35114e237c9
+msg = 2952a3d64107d5cbb9602239d05a5c5c222cf72b
+result = valid
+tag = e0877a100f9dd9d6795f0e74c56a9fab
+
+aad = 5ca354a4cb8e4fc9798aa209ad4f739dc7c232fdd1f22584
+ct = 94d844d98b9467daa7e8dde7f4290037354d7fb2
+iv = 0802ae86c75a73bf79561521
+key = 5d8e9c2222316c9ed5ff94513cc957436ae447a6e1a73a29
+msg = 42b4439e1d2116f834b91c516a26299df279956b
+result = valid
+tag = 62196638590cef429d6b1d1a59839c02
+
+[ivSize = 128]
+[keySize = 192]
+[tagSize = 128]
+
+aad = 
+ct = dc
+iv = 1e8259e0a43e571068f701cd2064fc0c
+key = cee9abbc26b63e169f0ced621fe21d95904e75b881d93e6b
+msg = 46
+result = valid
+tag = af1f5535b125b34fc466902ea40cb3a2
+
+aad = 
+ct = 2aab5c87dcb4a4dae4e975ddb65aab
+iv = c84442d6975f0359737de0fa828f958e
+key = 189f0bd390ba40632586a45c39735c2b87113329c800f394
+msg = b4bcd7b8eeca3050dd17682c6a914e
+result = valid
+tag = 6b03b7557c7131e2352e495d54e61aef
+
+aad = 
+ct = d127fd2e67c0887d90eb92b91f357d97
+iv = 13cd526ec77b58f62d48d03f8b88f2b8
+key = b0724f15df5b792c2f49bc51df0ac5aad69be0030981613c
+msg = 8da3ab9c3d195b04df452ad23953da4d
+result = valid
+tag = eb05bda937faeed27f8833295d4ba559
+
+aad = 
+ct = 344c2cea17b06cb3da272e22a22a3a71ee0eaa1959a7facfff464660ddccedd1
+iv = 1d3d62eccd8ac5e896f2654a7f606fc9
+key = 998750ba784841e40a7c5b03985732b6397e5459a3843954
+msg = 2f60ca3494a958dc3e6ebeb5d0b4e6dda0d0c4331ab9c957f6422a5100878ebf
+result = valid
+tag = bab7fbf499ff06aad5f757b1c1a4fcc0
+
+[ivSize = 128]
+[keySize = 256]
+[tagSize = 128]
+
+aad = 
+ct = 3f
+iv = 0ad570d8863918fe89124e09d125a271
+key = b7797eb0c1a6089ad5452d81fdb14828c040ddc4589c32b565aad8cb4de3e4a0
+msg = ed
+result = valid
+tag = fd8f593b83314e33c5a72efbeb7095e8
+
+aad = 
+ct = 041341078f0439e50b43c991635117
+iv = 2a55caa137c5b0b66cf3809eb8f730c4
+key = 4c010d9561c7234c308c01cea3040c925a9f324dc958ff904ae39b37e60e1e03
+msg = 2a093c9ed72b8ff4994201e9f9e010
+result = valid
+tag = 5b8a2f2da20ef657c903da88ef5f57bb
+
+aad = 
+ct = 469478d448f7e97d755541aa09ad95b0
+iv = 7ee376910f08f497aa6c3aa7113697fd
+key = e7f7a48df99edd92b81f508618aa96526b279debd9ddb292d385ddbae80b2259
+msg = 5e51dbbb861b5ec60751c0996e00527f
+result = valid
+tag = 254ada5cf662d90c5e11b2bd9c4db4c4
+
+aad = 
+ct = cb960201fa5ad41d41d1c2c8037c71d52b72e76b16b589d71b976627c9734c9d
+iv = 5d1bde6fa0994b33efd8f23f531248a7
+key = 4f84782bfbb64a973c3de3dcfa3430367fd68bc0b4c3b31e5d7c8141ba3e6a67
+msg = 78cb6650a1908a842101ea85804fed00cc56fbdafafba0ef4d1ca607dcae57b6
+result = valid
+tag = 8dfce16467c3a6ebb3e7242c9a551962
+
+[ivSize = 120]
+[keySize = 128]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = 2bc3ef8e7402b4631f48e9be
+iv = b0a73119a97d623806b49d45ddf4c7
+key = 34c74e28182948e03af02a01f46eb4f7
+msg = fe82ba66cf2e265741f2c86c
+result = valid
+tag = 4b6f6f5be291a90b9e93a8a82ddbc8d8
+
+[ivSize = 160]
+[keySize = 128]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = 4fe13ef29f118f85a63188f8
+iv = e22b6b144ab26b5781316e7a42a76202ac4b2278
+key = 55cb7cac77efe18a1ea3b30c65f3f346
+msg = 2f3d11ea32bf5bc72cbe2b8d
+result = valid
+tag = 05975b175316df8045889f43e0c857e0
+
+[ivSize = 64]
+[keySize = 192]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = a2966fb189f8d9d391503857
+iv = 60d6bfca67f5d810
+key = f6a4bf8c4e15034699ce5801cbbac7509cd3f94cf28d8307
+msg = de8eaa41e5e6a590c3cfbf61
+result = valid
+tag = e370e7dd328655929bd4691f396a1033
+
+[ivSize = 120]
+[keySize = 192]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = 9af1a022c61c4315aa0e923e
+iv = edf93e16294f15eded83808f09320e
+key = 66f75acbd8d3acf7af47d13e8384c2809d6b91503a7f294b
+msg = a900c86b6b7e0e5563f8f826
+result = valid
+tag = 20529bff3c59222ec33353af337b1d40
+
+[ivSize = 160]
+[keySize = 192]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = 073a5291b11df379f31b4f16
+iv = 130c14c839e35b7d56b3350b194b0da342e6b65d
+key = ef2e299dd4ecd7e3b9cc62780922cc2c89f78840564d1276
+msg = 03f59579b14437199583270e
+result = valid
+tag = 17205999491bd4c1d6c7ec3e56779c32
+
+[ivSize = 64]
+[keySize = 256]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = 99313a220d1fcb6658876283
+iv = c0c568a400b7194f
+key = df64c84ae52d9ca820a47421bed6e96f7165369fc4c1b65f8f6307b17ce1006c
+msg = f5fafdded54a86a4edab44bd
+result = valid
+tag = 00955d7d27f66868cfec734bf59c5e6d
+
+[ivSize = 120]
+[keySize = 256]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = fc213602aa423b87d7c2a874
+iv = 17ca250fb733877556263223eadde1
+key = e98b0669a645eb14cd06df6968fc5f10edc9f54feed264e3d410cdc61b72ef51
+msg = f384b3ed7b274641f5db60cf
+result = valid
+tag = 36b15bab6923b17218fe1c24048e2391
+
+[ivSize = 160]
+[keySize = 256]
+[tagSize = 128]
+
+# unusual IV size
+aad = 
+ct = c1d76233e8c5042e92bf8d32
+iv = 0f9d6ed7eef362dfa4a7dfa5c0f74c5b27bd4ebf
+key = 849b3e6b8cdd85bdcfb8eb701aa5522ae2340fbe5214e389622cef76979225c4
+msg = 8c5564e53051c0de273199b4
+result = valid
+tag = 7cf036d235d3b2dd349a8c804b65144a
+
+[ivSize = 0]
+[keySize = 128]
+[tagSize = 128]
+
+# 0 size IV is not valid
+aad = 
+ct = 
+iv = 
+key = 8f3f52e3c75c58f5cb261f518f4ad30a
+msg = 
+result = invalid
+tag = cf71978ffcc778f3c85ac9c31b6fe191
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+# 0 size IV is not valid
+aad = 
+ct = 00a29f0a5e2e7490279d1faf8b881c7b
+iv = 
+key = 2a4bf90e56b70fdd8649d775c089de3b
+msg = 324ced6cd15ecc5b3741541e22c18ad9
+result = invalid
+tag = a2c7e8d7a19b884f742dfec3e76c75ee
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+[ivSize = 0]
+[keySize = 192]
+[tagSize = 128]
+
+# 0 size IV is not valid
+aad = 
+ct = 
+iv = 
+key = 0b18d21337035c7baa08211b702fa780ac7c09be8f9ed11f
+msg = 
+result = invalid
+tag = ca69a2eb3a096ea36b1015d5dffff532
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+# 0 size IV is not valid
+aad = 
+ct = 509b0658d09f7a5bb9db43b70c8387f7
+iv = 
+key = ba76d594a6df915bb7ab7e6d1a8d024b2796336c1b8328a9
+msg = d62f302742d61d823ea991b93430d589
+result = invalid
+tag = 2c9488d53a0b2b5308c2757dfac7219f
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+[ivSize = 0]
+[keySize = 256]
+[tagSize = 128]
+
+# 0 size IV is not valid
+aad = 
+ct = 
+iv = 
+key = 3f8ca47b9a940582644e8ecf9c2d44e8138377a8379c5c11aafe7fec19856cf1
+msg = 
+result = invalid
+tag = 1726aa695fbaa21a1db88455c670a4b0
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+# 0 size IV is not valid
+aad = 
+ct = 7772ea358901f571d3d35c19497639d9
+iv = 
+key = 7660d10966c6503903a552dde2a809ede9da490e5e5cc3e349da999671809883
+msg = c314235341debfafa1526bb61044a7f1
+result = invalid
+tag = 8fe0520ad744a11f0ccfd228454363fa
+# AES-GCM does not allow an IV of length 0. Encrypting with such an IV leaks the
+# authentication key. Hence using an IV of length 0 is insecure even if the key
+# itself is only used for a single encryption.
+
+[ivSize = 8]
+[keySize = 128]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 80
+key = 59a284f50aedd8d3e2a91637d3815579
+msg = 
+result = acceptable
+tag = af498f701d2470695f6e7c8327a2398b
+
+# small IV sizes
+aad = 
+ct = 0a24612a9d1cbe967dbfe804bf8440e5
+iv = 9d
+key = fec58aa8cf06bfe05de829f27ec77693
+msg = f2d99a9f893378e0757d27c2e3a3101b
+result = acceptable
+tag = 96e6fd2cdc707e3ee0a1c90d34c9c36c
+
+[ivSize = 16]
+[keySize = 128]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 0f2f
+key = 88a972cce9eaf5a7813ce8149d0c1d0e
+msg = 
+result = acceptable
+tag = 4ccf1efb4da05b4ae4452aea42f5424b
+
+# small IV sizes
+aad = 
+ct = ba3e7f8b2999995c7fc4006ca4f475ff
+iv = 8760
+key = b43967ee933e4632bd6562ba1201bf83
+msg = 5a6ad6db70591d1e520b0122f05021a0
+result = acceptable
+tag = 98f47a5279cebbcac214515710f6cd8a
+
+[ivSize = 32]
+[keySize = 128]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = cc851957
+key = 4e9a97d3ed54c7b54610793ab05052e1
+msg = 
+result = acceptable
+tag = e574b355bda2980e047e584feb1676ca
+
+# small IV sizes
+aad = 
+ct = 1b84baea9df1e65bee7b49e4a8cda1ec
+iv = 7b5faeb2
+key = d83c1d7a97c43f182409a4aa5609c1b1
+msg = c8f07ba1d65554a9bd40390c30c5529c
+result = acceptable
+tag = 5c0bb79d8240041edce0f94bd4bb384f
+
+[ivSize = 48]
+[keySize = 128]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 4ad80c2854fb
+key = c6a705677affb49e276d9511caa46145
+msg = 
+result = acceptable
+tag = 1e2ed72af590cafb8647d185865f5463
+
+# small IV sizes
+aad = 
+ct = 18291aa8dc7b07448aa8f71bb8e380bf
+iv = d1dafc8de3e3
+key = eba7699b56cc0aa2f66a2a5be9944413
+msg = d021e53d9098a2df3d6b903cdad0cd9c
+result = acceptable
+tag = 9c0e22e5c41b1039ff5661ffaefa8e0f
+
+[ivSize = 8]
+[keySize = 192]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = cb
+key = c70ce38e84e5f53ed41c3f0d2ca493412ad32cb04c6e2efa
+msg = 
+result = acceptable
+tag = 08d96edb5e22874cd10cb2256ca04bc6
+
+# small IV sizes
+aad = 
+ct = 6c5e796ba9a3ddc64f401e68d135101d
+iv = 0f
+key = 74c816b83dfd287210a3e2c6da8d3053bbfbd9b156d3fdd8
+msg = f2b7b2c9b312cf2af78f003df15c8e19
+result = acceptable
+tag = 96a132ed43924e98feb888ff682bdaef
+
+[ivSize = 16]
+[keySize = 192]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 75e5
+key = cbf45ba488932aea1a10e5862f92e4a7e277bda9f34af6d0
+msg = 
+result = acceptable
+tag = 1f0d23070fcd748e25bf6454f5c9136e
+
+# small IV sizes
+aad = 
+ct = 550b48a43e821fd76f49f0f1a897aead
+iv = 8989
+key = e1c0446f11ae6aa4fa254f9a846fc6e13e45e537e47f2042
+msg = 3a2f5ad0eb216e546e0bcaa377b6cbc7
+result = acceptable
+tag = f6e0a979481f9957ddad0f21a777a73a
+
+[ivSize = 32]
+[keySize = 192]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 68d7fc38
+key = 567563bf4cf154902275a53bc57cd6dd7b370d27011bdac8
+msg = 
+result = acceptable
+tag = 1475563e3212f3b5e40062569afd71e3
+
+# small IV sizes
+aad = 
+ct = 309133e76159fe8a41b20843486511ab
+iv = bb9d2aa3
+key = 834d0bb601170865a78139428a1503695a6a291ebd747cd1
+msg = 6f79e18b4acd5a03d3a5f7e1a8d0f183
+result = acceptable
+tag = 03ab26993b701910a2e8ecccd2ba9e52
+
+[ivSize = 48]
+[keySize = 192]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = a984bdcdcae2
+key = 99fb18f5ba430bb9ea942968ecb799b43406e1af4b6425a1
+msg = 
+result = acceptable
+tag = d7b9a6b58a97982916e83219fbf71b1e
+
+# small IV sizes
+aad = 
+ct = e08261e46eaf90d978ea8f7889bccd4f
+iv = 52aa01e0d0d6
+key = b77b242aa0d51c92fda013e0cb0ef2437399ace5d3f507e4
+msg = 4ba541a9914729216153801340ab1779
+result = acceptable
+tag = c052a55df3926a50990a532efe3d80ec
+
+[ivSize = 8]
+[keySize = 256]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = a9
+key = 8f9a38c1014966e4d9ae736139c5e79b99345874f42d4c7d2c81aa6797c417c0
+msg = 
+result = acceptable
+tag = 2a268bf3a75fd7b00ba230b904bbb014
+
+# small IV sizes
+aad = 
+ct = 7bea30ecc2f73f8e121263b37966954c
+iv = b3
+key = 144cd8279229e8bb2de99d24e615306663913fe9177fcd270fafec493d43bca1
+msg = 976229f5538f9636476d69f0c328e29d
+result = acceptable
+tag = 8bbad4adc54b37a2b2f0f6e8617548c9
+
+[ivSize = 16]
+[keySize = 256]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = c332
+key = 7d31861f9d3536e14016a3216b1042e0d2f7d4614314268b6f834ec7f38bbb65
+msg = 
+result = acceptable
+tag = 1d978a693120c11f6d51a3ed88cd4ace
+
+# small IV sizes
+aad = 
+ct = 9c39f5b110361e9a770cc5e8b0f444bb
+iv = da6c
+key = 22b35fe9623ee11f8b60b6d22db3765b666ed972fa7ccd92b45f22deee02cab1
+msg = 5341c78e4ce5bf8fbc3e077d1990dd5d
+result = acceptable
+tag = b63ff43c12073ec5572b1be70f17e231
+
+[ivSize = 32]
+[keySize = 256]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = 6b30145e
+key = c224e0bba3d7a99165f7996b67a0fce3e12f2c01179b197b69b7e628bca92096
+msg = 
+result = acceptable
+tag = ae6f7c9a29f0d8204ca50b14a1e0dcf2
+
+# small IV sizes
+aad = 
+ct = f73f72f976a296ba3ca94bc6eb08cd46
+iv = 5110604c
+key = 093eb12343537ee8e91c1f715b862603f8daf9d4e1d7d67212a9d68e5aac9358
+msg = 33efb58c91e8c70271870ec00fe2e202
+result = acceptable
+tag = b824c33c13f289429659aa017c632f71
+
+[ivSize = 48]
+[keySize = 256]
+[tagSize = 128]
+
+# small IV sizes
+aad = 
+ct = 
+iv = d4d857510888
+key = 98e6f8ab673e804e865e32403a6551bf807a959343c60d34559360bc295ecb5b
+msg = 
+result = acceptable
+tag = 3db16725fafc828d414ab61c16a6c38f
+
+# small IV sizes
+aad = 
+ct = ed463f4f43336af3f4d7e08770201145
+iv = 1bdcd44b663e
+key = 0bd0e8e7781166e1d876dec8fad34ba95b032a27cac0551595116091005947b7
+msg = 91222263b12cf5616a049cbe29ab9b5b
+result = acceptable
+tag = c8fc39906aca0c64e14a43ff750abd8a
+
diff --git a/third_party/wycheproof/chacha20_poly1305_test.txt b/third_party/wycheproof/chacha20_poly1305_test.txt
new file mode 100644
index 0000000..25379cc
--- /dev/null
+++ b/third_party/wycheproof/chacha20_poly1305_test.txt
@@ -0,0 +1,1329 @@
+# Imported from Wycheproof's chacha20_poly1305_test.json.
+# This file is generated by convert_wycheproof.go. Do not edit by hand.
+#
+# Algorithm: CHACHA20-POLY1305
+# Generator version: 0.4
+
+[ivSize = 96]
+[keySize = 256]
+[tagSize = 128]
+
+# rfc7539
+aad = 50515253c0c1c2c3c4c5c6c7
+ct = d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116
+iv = 070000004041424344454647
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e
+result = valid
+tag = 1ae10b594f09e26a7e902ecbd0600691
+
+aad = 
+ct = 
+iv = 4da5bf8dfd5852c1ea12379d
+key = 80ba3192c803ce965ea371d5ff073cf0f43b6a2ab576b208426e11409c09b9b0
+msg = 
+result = valid
+tag = 76acb342cf3166a5b63c0c0ea1383c8d
+
+aad = bd506764f2d2c410
+ct = 
+iv = a92ef0ac991dd516a3c6f689
+key = 7a4cd759172e02eb204db2c3f5c746227df584fc1345196391dbb9577a250742
+msg = 
+result = valid
+tag = 906fa6284b52f87b7359cbaa7563c709
+
+aad = 
+ct = 3a
+iv = 99e23ec48985bccdeeab60f1
+key = cc56b680552eb75008f5484b4cb803fa5063ebd6eab91f6ab6aef4916a766273
+msg = 2a
+result = valid
+tag = cac27dec0968801e9f6eded69d807522
+
+aad = 91ca6c592cbcca53
+ct = c4
+iv = ab0dca716ee051d2782f4403
+key = 46f0254965f769d52bdb4a70b443199f8ef207520d1220c55e4b70f0fda620ee
+msg = 51
+result = valid
+tag = 168310ca45b1f7c66cad4e99e43f72b9
+
+aad = 
+ct = 4d13
+iv = 461af122e9f2e0347e03f2db
+key = 2f7f7e4f592bb389194989743507bf3ee9cbde1786b6695fe6c025fd9ba4c100
+msg = 5c60
+result = valid
+tag = 91e8b61efb39c122195453077b22e5e2
+
+aad = 88364fc8060518bf
+ct = b60d
+iv = 61546ba5f1720590b6040ac6
+key = c8833dce5ea9f248aa2030eacfe72bffe69a620caf793344e5718fe0d7ab1a58
+msg = ddf2
+result = valid
+tag = ead0fd4697ec2e5558237719d02437a2
+
+aad = 
+ct = 5dfe3440dbb3c3
+iv = 3c4e654d663fa4596dc55bb7
+key = 55568158d3a6483f1f7021eab69b703f614251cadc1af5d34a374fdbfc5adac7
+msg = ab85e9c1571731
+result = valid
+tag = ed7a434e2602d394281e0afa9fb7aa42
+
+aad = 84e46be8c0919053
+ct = 4bd47212941ce3
+iv = 58389375c69ee398de948396
+key = e3c09e7fab1aefb516da6a33022a1dd4eb272c80d540c5da52a730f34d840d7f
+msg = 4ee5cda20d4290
+result = valid
+tag = 185f1408ee7fbf18f5abad6e2253a1ba
+
+aad = 
+ct = 8e9439a56eeec817
+iv = 4f07afedfdc3b6c2361823d3
+key = 51e4bf2bad92b7aff1a4bc05550ba81df4b96fabf41c12c7b00e60e48db7e152
+msg = be3308f72a2c6aed
+result = valid
+tag = fbe8a6ed8fabb1937539dd6c00e90021
+
+aad = 66c0ae70076cb14d
+ct = b9b910433af052b0
+iv = b4ea666ee119563366484a78
+key = 1131c1418577a054de7a4ac551950f1a053f9ae46e5b75fe4abd5608d7cddadd
+msg = a4c9c2801b71f7df
+result = valid
+tag = 4530f51aeee024e0a445a6328fa67a18
+
+aad = 
+ct = ff7dc203b26c467a6b50db33
+iv = 9a59fce26df0005e07538656
+key = 99b62bd5afbe3fb015bde93f0abf483957a1c3eb3ca59cb50b39f7f8a9cc51be
+msg = 42baae5978feaf5c368d14e0
+result = valid
+tag = 578c0f2758c2e14e36d4fc106dcb29b4
+
+aad = a506e1a5c69093f9
+ct = 9f8816de0994e938d9e53f95
+iv = 58dbd4ad2c4ad35dd906e9ce
+key = 85f35b6282cff440bc1020c8136ff27031110fa63ec16f1e825118b006b91257
+msg = fdc85b94a4b2a6b759b1a0da
+result = valid
+tag = d086fc6c9d8fa915fd8423a7cf05072f
+
+aad = 
+ct = 0b29638e1fbdd6df53970be2210042
+iv = 68ab7fdbf61901dad461d23c
+key = 67119627bd988eda906219e08c0d0d779a07d208ce8a4fe0709af755eeec6dcb
+msg = 51f8c1f731ea14acdb210a6d973e07
+result = valid
+tag = 2a9134087d67a46e79178d0a93f5e1d2
+
+aad = 6453a53384632212
+ct = 32db66c4a3819d81557455e5980fed
+iv = d95b3243afaef714c5035b6a
+key = e6f1118d41e4b43fb58221b7ed79673834e0d8ac5c4fa60bbc8bc4893a58894d
+msg = 97469da667d6110f9cbda1d1a20673
+result = valid
+tag = feae30dec94e6ad3a9eea06a0d703917
+
+aad = 
+ct = e9110e9f56ab3ca483500ceabab67a13
+iv = 2fcb1b38a99e71b84740ad9b
+key = 59d4eafb4de0cfc7d3db99a8f54b15d7b39f0acc8da69763b019c1699f87674a
+msg = 549b365af913f3b081131ccb6b825588
+result = valid
+tag = 836ccabf15a6a22a51c1071cfa68fa0c
+
+aad = 034585621af8d7ff
+ct = e4b113cb775945f3d3a8ae9ec141c00c
+iv = 118a6964c2d3e380071f5266
+key = b907a45075513fe8a8019edee3f2591487b2a030b03c6e1d771c862571d2ea1e
+msg = 55a465644f5b650928cbee7c063214d6
+result = valid
+tag = 7c43f16ce096d0dc27c95849dc383b7d
+
+aad = 
+ct = 02cc3acb5ee1fcdd12a03bb857976474d3
+iv = 45aaa3e5d16d2d42dc03445d
+key = 3b2458d8176e1621c0cc24c0c0e24c1e80d72f7ee9149a4b166176629616d011
+msg = 3ff1514b1c503915918f0c0c31094a6e1f
+result = valid
+tag = d83b7463a2c3800fe958c28eaa290813
+
+aad = 9aaf299eeea78f79
+ct = 35766488d2bc7c2b8d17cbbb9abfad9e6d
+iv = f0384fb876121410633d993d
+key = f60c6a1b625725f76c7037b48fe3577fa7f7b87b1bd5a982176d182306ffb870
+msg = 63858ca3e2ce69887b578a3c167b421c9c
+result = valid
+tag = 1f391e657b2738dda08448cba2811ceb
+
+aad = 
+ct = 42f26c56cb4be21d9d8d0c80fc99dde00d75f38074bfe764
+iv = e6b1adf2fd58a8762c65f31b
+key = 0212a8de5007ed87b33f1a7090b6114f9e08cefd9607f2c276bdcfdbc5ce9cd7
+msg = 10f1ecf9c60584665d9ae5efe279e7f7377eea6916d2b111
+result = valid
+tag = 54aa7e13d48fff7d7557039457040a3a
+
+aad = 3e8bc5ade182ff08
+ct = 123032437b4bfd6920e8f7e7e0087ae4889ebe7a0ad0e900
+iv = 6b282ebecc541bcd7834ed55
+key = c5bc09565646e7edda954f1f739223dada20b95c44ab033d0fae4b0283d18be3
+msg = 9222f9018e54fd6de1200806a9ee8e4cc904d29f25cba193
+result = valid
+tag = 3cf68f179550da63d3b96c2d55411865
+
+aad = 
+ct = 45c7d6b53acad4abb68876a6e96a48fb59524d2c92c9d8a189c9fd2db91746
+iv = 04a9be03508a5f31371a6fd2
+key = 2eb51c469aa8eb9e6c54a8349bae50a20f0e382711bba1152c424f03b6671d71
+msg = b053999286a2824f42cc8c203ab24e2c97a685adcc2ad32662558e55a5c729
+result = valid
+tag = 566d3ca10e311b695f3eae1551652493
+
+aad = 374618a06ea98a48
+ct = 46a80c4187024720084627580080dde5a3f4a11093a7076ed6f3d326bc7b70
+iv = 470a339ecb3219b8b81a1f8b
+key = 7f5b74c07ed1b40fd14358fe2ff2a740c116c7706510e6a437f19ea49911cec4
+msg = f45206abc25552b2abc9ab7fa243035fedaaddc3b2293956f1ea6e7156e7eb
+result = valid
+tag = 534d4aa2835a52e72d14df0e4f47f25f
+
+aad = 
+ct = ea29afa49d36e8760f5fe19723b9811ed5d519934a440f5081ac430b953b0e21
+iv = 72cfd90ef3026ca22b7e6e6a
+key = e1731d5854e1b70cb3ffe8b786a2b3ebf0994370954757b9dc8c7bc5354634a3
+msg = b9c554cbc36ac18ae897df7beecac1dbeb4eafa156bb60ce2e5d48f05715e678
+result = valid
+tag = 222541af46b86533c6b68d2ff108a7ea
+
+aad = 2333e5ce0f93b059
+ct = 6dad637897544d8bf6be9507ed4d1bb2e954bc427e5de729daf50762846ff2f4
+iv = 262880d475f3dac5340dd1b8
+key = 27d860631b0485a410702fea61bc873f3442260caded4abde25b786a2d97f145
+msg = 6b2604996cd30c14a13a5257ed6cffd3bc5e29d6b97eb1799eb335e281ea451e
+result = valid
+tag = 7b997d93c982189d7095dc794c746232
+
+aad = 
+ct = fba78ae4f9d808a62e3da40be2cb7700c3613d9eb2c529c652e76a432c658d27095f0eb8f940c324981ea935e507f9
+iv = e74a515e7e2102b90bef55d2
+key = cf0d40a4644e5f51815165d5301b22631f4544c49a1878e3a0a5e8e1aae0f264
+msg = 973d0c753826bae466cf9abb3493152e9de7819e2bd0c71171346b4d2cebf8041aa3cedc0dfd7b467e26228bc86c9a
+result = valid
+tag = 8f046956db3a512908bd7afc8f2ab0a9
+
+aad = b3e4064683b02d84
+ct = a1ffed80761829ecce242e0e88b138049016bca018da2b6e19986b3e318cae8d806198fb4c527cc39350ebddeac573
+iv = d4d807341683825b31cd4d95
+key = 6cbfd71c645d184cf5d23c402bdb0d25ec54898c8a0273d42eb5be109fdcb2ac
+msg = a98995504df16f748bfb7785ff91eeb3b660ea9ed3450c3d5e7b0e79ef653659a9978d75542ef91c456762215640b9
+result = valid
+tag = c4cbf0befda0b70242c640d7cd02d7a3
+
+aad = 
+ct = 9a4ef22b181677b5755c08f747c0f8d8e8d4c18a9cc2405c12bb51bb1872c8e8b877678bec442cfcbb0ff464a64b74332cf072898c7e0eddf6232ea6e27efe50
+iv = d61040a313ed492823cc065b
+key = 5b1d1035c0b17ee0b0444767f80a25b8c1b741f4b50a4d3052226baa1c6fb701
+msg = d096803181beef9e008ff85d5ddc38ddacf0f09ee5f7e07f1e4079cb64d0dc8f5e6711cd4921a7887de76e2678fdc67618f1185586bfea9d4c685d50e4bb9a82
+result = valid
+tag = 9ff3427a0f32fa566d9ca0a78aefc013
+
+aad = 7193f623663321a2
+ct = 5fbbdecc34be201614f636031eeb42f1cace3c79a12cffd871ee8e73820c829749f1abb4294367849fb6c2aa56bda8a3078f723d7c1c852024b017b58973fb1e
+iv = d31c21aba175b70de4ebb19c
+key = 97d635c4f47574d9998a90875da1d3a284b755b2d39297a5725235190e10a97e
+msg = 94ee166d6d6ecf8832437136b4ae805d428864359586d9193a25016293edba443c58e07e7b7195ec5bd84582a9d56c8d4a108c7d7ce34e6c6f8ea1bec0567317
+result = valid
+tag = 09263da7b4cb921452f97dca40f580ec
+
+aad = 
+ct = d0102f6c258bf49742cec34cf2d0fedf23d105fb4c84cf98515e1bc9a64f8ad5be8f0721bde50645d00083c3a263a31053b760245f52ae2866a5ec83b19f61be1d30d5c5d9fecc4cbbe08fd385813a2aa39a00ff9c10f7f23702add1e4b2ffa31c
+iv = 17c86a8abbb7e003acde2799
+key = fe6e55bdaed1f7284ca5fc0f8c5f2b8df56dc0f49e8ca66a41995e783351f901
+msg = b429eb80fb8fe8baeda0c85b9c333458e7c2992e558475069d12d45c22217564121588032297eff56783742a5fc22d7410ffb29d66098661d76f126c3c27689e43b37267cac5a3a6d3ab49e391da29cd3054a5692e2807e4c3ea46c8761d50f592
+result = valid
+tag = 41865fc71de12b19612127ce49993bb0
+
+aad = a11c40b603767330
+ct = 7545391b51de01d5c53dfaca777909063e58edee4bb1227e7110ac4d2620c2aec2f848f56deeb037a8dced75afa8a6c890e2dee42f950bb33d9e2424d08a505d899563973ed38870f3de6ee2adc7fe072c366c14e2cf7ca62fb3d36bee11685461
+iv = 46362f45d6379e63e5229460
+key = aabc063474e65c4c3e9bdc480dea97b45110c8618846ff6b15bdd2a4a5682c4e
+msg = ceb534ce50dc23ff638ace3ef63ab2cc2973eeada80785fc165d06c2f5100ff5e8ab2882c475afcd05ccd49f2e7d8f55ef3a72e3dc51d6852b8e6b9e7aece57be6556b0b6d9413e33fc5fc24a9a205ad59574bb39d944a92dc47970d84a6ad3176
+result = valid
+tag = b70d44ef8c66c5c7bbf10dcadd7facf6
+
+aad = 02
+ct = 7e72f5a185af16a611921b438f749f0b
+iv = 87345f1055fd9e2102d50656
+key = 7d00b48095adfa3272050607b264185002ba99957c498be022770f2ce2f3143c
+msg = e5ccaa441bc814688f8f6e8f28b500b2
+result = valid
+tag = 1242c670732334029adfe1c5001651e4
+
+aad = b648
+ct = 85f29a719557cdd14d1f8fffab6d9e60
+iv = 87a3163ec0598ad95b3aa713
+key = 6432717f1db85e41ac7836bce25185a080d5762b9e2b18444b6ec72c3bd8e4dc
+msg = 02cde168fba3f544bbd0332f7adeada8
+result = valid
+tag = 732ca32becd515a1ed353f542e999858
+
+aad = bd4cd02fc7502bbdbdf6c9a3cbe8f0
+ct = c1b295936d56fadac03e5f742bff73a1
+iv = 6f573aa86baa492ba46596df
+key = 8e34cf73d245a1082a920b86364eb896c4946467bcb3d58929fcb36690e6394f
+msg = 16ddd23ff53f3d23c06334487040eb47
+result = valid
+tag = 39c457dbab66382babb3b55800cda5b8
+
+aad = 89cce9fb47441d07e0245a66fe8b778b
+ct = c84c9bb7c61c1bcb17772a1c500c5095
+iv = 1a6518f02ede1da6809266d9
+key = cb5575f5c7c45c91cf320b139fb594237560d0a3e6f865a67d4f633f2c08f016
+msg = 623b7850c321e2cf0c6fbcc8dfd1aff2
+result = valid
+tag = dbadf7a5138ca03459a2cd65831e092f
+
+aad = d19f2d989095f7ab03a5fde84416e00c0e
+ct = 94bc80621ed1e71b1fd2b5c3a15e3568
+iv = 564dee49ab00d240fc1068c3
+key = a5569e729a69b24ba6e0ff15c4627897436824c941e9d00b2e93fddc4ba77657
+msg = 87b3a4d7b26d8d3203a0de1d64ef82e3
+result = valid
+tag = 333511861796978401598b963722f5b3
+
+aad = 5e6470facd99c1d81e37cd44015fe19480a2a4d3352a4ff560c0640fdbda
+ct = 299b5d3f3d03c087209a16e285143111
+iv = df8713e87ec3dbcfad14d53e
+key = 56207465b4e48e6d04630f4a42f35cfc163ab289c22a2b4784f6f9290330bee0
+msg = e601b38557797da2f8a4106a089d1da6
+result = valid
+tag = 4b454ed198de117e83ec49fa8d8508d6
+
+aad = ba446f6f9a0ced22450feb10737d9007fd69abc19b1d4d9049a5551e86ec2b37
+ct = 605bbf90aeb974f6602bc778056f0dca
+iv = 8df4b15a888c33286a7b7651
+key = 3937986af86dafc1ba0c4672d8abc46c207062682d9c264ab06d6c5807205130
+msg = dc9e9eaf11e314182df6a4eba17aec9c
+result = valid
+tag = 38ea23d99054b46b42ffe004129d2204
+
+aad = d41a828d5e71829247021905402ea257dccbc3b80fcd5675056b68bb59e62e8873
+ct = 7b7ce0d824809a70de32562ccf2c2bbd
+iv = be40e5f1a11817a0a8fa8949
+key = 36372abcdb78e0279646ac3d176b9674e9154eecf0d5469c651ec7e16b4c1199
+msg = 81ce84ede9b35859cc8c49a8f6be7dc6
+result = valid
+tag = 15d44a00ce0d19b4231f921e22bc0a43
+
+aad = 3f2dd49bbf09d69a78a3d80ea2566614fc379474196c1aae84583da73d7ff85c6f42ca42056a9792cc1b9fb3c7d261
+ct = ca82bff3e2f310ccc976672c4415e69b
+iv = 84c87dae4eee27730ec35d12
+key = 9f1479ed097d7fe529c11f2f5add9aaff4a1ca0b68997a2cb7f79749bd90aaf4
+msg = a66747c89e857af3a18e2c79500087ed
+result = valid
+tag = 57638c62a5d85ded774f913c813ea032
+
+aad = 00000000000000000000000000000000
+ct = 0000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329be
+result = valid
+tag = e6d3d7324a1cbba777bbb0ecdda37807
+
+aad = 00000000000000000000000000000000
+ct = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd
+result = valid
+tag = 062de6795f274fd2a305d76980bc9cce
+
+aad = 00000000000000000000000000000000
+ct = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40888094178355d304846443fee8df99470303fb3b7b80e030beebd329bee3bcdb5b1edefcfe8bcda1b6a15c8c2b0869ffd2ec5e26e553b7b227fe87fdbd7ada44424269bffa5527f270acf68502b74c5ae2e60c0580981a4938459392c49bb2f284b646efc7f3f0b1361dc348ed77d30bc57692ed38fbac0188380488c7
+result = valid
+tag = d8b47902baaeafb34203051529af282e
+
+aad = ffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd641
+result = valid
+tag = b3891c849cb52c27747edfcf31213bb6
+
+aad = ffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd801780242
+result = valid
+tag = f0c12d26ef03029b62c008da27c5dc68
+
+aad = ffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf777f6be87caa2cfb7b9bbc01172066b8fcfc04c4847f1fcf41142cd6411c4324a4e121030174325e495ea373d4f796002d13a1d91aac484dd8017802428525bbbdbd964005aad80d8f53097afd48b3a51d19f3fa7f67e5b6c7ba6c6d3b644d0d7b49b910380c0f4ec9e23cb712882cf43a896d12c70453fe77c7fb7738
+result = valid
+tag = ee65783001c25691fa28d0f5f1c1d762
+
+aad = 00000080000000800000008000000080
+ct = 0000008000000080000000800000008000000080000000800000008000000080
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293e
+result = valid
+tag = 79ba7a29f5a7bb75797af87a610129a4
+
+aad = 00000080000000800000008000000080
+ct = 00000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d
+result = valid
+tag = 36b1743819e1b9ba1551e8ed922a959a
+
+aad = 00000080000000800000008000000080
+ct = 0000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080000000800000008000000080
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40088094170355d304046443fe68df99478303fb3bfb80e0303eebd3293ee3bcdbdb1edefc7e8bcda136a15c8cab0869ff52ec5e266553b7b2a7fe87fd3d7ada44c24269bf7a5527f2f0acf68582b74c5a62e60c0500981a49b8459392449bb2f204b646ef47f3f0b1b61dc3486d77d30b457692edb8fbac010838048847
+result = valid
+tag = feac4955554e806f3a1902e24432c08a
+
+aad = ffffff7fffffff7fffffff7fffffff7f
+ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c1
+result = valid
+tag = 20a3798df1292c5972bf9741aec38a19
+
+aad = ffffff7fffffff7fffffff7fffffff7f
+ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c2
+result = valid
+tag = c03d9f67354a97b2f074f7551557e49c
+
+aad = ffffff7fffffff7fffffff7fffffff7f
+ct = ffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7f
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bff77f6be8fcaa2cfbfb9bbc01972066b87cfc04c4047f1fcfc1142cd6c11c432424e121038174325ec95ea37354f79600ad13a1d99aac484d58017802c28525bb3dbd964085aad80d0f53097a7d48b3a59d19f3faff67e5b647ba6c6dbb644d0dfb49b910b80c0f4e49e23cb792882cf4ba896d12470453fef7c7fb77b8
+result = valid
+tag = c86da8dd652286d50213d328d63e4006
+
+aad = 7fffffff7fffffff7fffffff7fffffff
+ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd641
+result = valid
+tag = bede9083ceb36ddfe5fa811f95471c67
+
+aad = 7fffffff7fffffff7fffffff7fffffff
+ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd881780242
+result = valid
+tag = 300874bb0692b689dead9ae15b067390
+
+aad = 7fffffff7fffffff7fffffff7fffffff
+ct = 7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff7fffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 5a92bf77ff6be87c2a2cfb7b1bbc0117a066b8fc7c04c484ff1fcf41942cd6419c4324a461210301f4325e49dea373d47796002d93a1d91a2c484dd8817802420525bbbd3d9640052ad80d8fd3097afdc8b3a51d99f3fa7fe7e5b6c73a6c6d3be44d0d7bc9b910388c0f4ec9623cb712082cf43a096d12c78453fe7747fb7738
+result = valid
+tag = 99cad85f45ca40942d0d4d5e950ade22
+
+aad = 00000000ffffffff00000000ffffffff
+ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641
+result = valid
+tag = 8bbe145272e7c2d9a1891a3ab0983d9d
+
+aad = 00000000ffffffff00000000ffffffff
+ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b22701780242
+result = valid
+tag = 3b41861913a8f6de7f61e225631bc382
+
+aad = 00000000ffffffff00000000ffffffff
+ct = 00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 256d40887f6be87c55d304849bbc0117df994703fc04c48480e030be142cd641e3bcdb5be12103018bcda1b65ea373d40869ffd213a1d91a53b7b227017802427ada4442bd9640055527f27053097afdb74c5ae219f3fa7f981a4938ba6c6d3b9bb2f28449b91038f3f0b136e23cb71277d30bc5896d12c7fbac0188c7fb7738
+result = valid
+tag = 8428bcf023ec6bf31fd9efb203ff0871
+
+aad = ffffffff00000000ffffffff00000000
+ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be
+result = valid
+tag = 139fdf6474ea24f549b075825f2c7620
+
+aad = ffffffff00000000ffffffff00000000
+ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd
+result = valid
+tag = bbad8d863b835a8e8664fd1d4566b6b4
+
+aad = ffffffff00000000ffffffff00000000
+ct = ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000
+iv = 000000000000000001ee3200
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = da92bf7780941783aa2cfb7b6443fee82066b8fc03fb3b7b7f1fcf41ebd329be1c4324a41edefcfe74325e49a15c8c2bf796002dec5e26e5ac484dd8fe87fdbd8525bbbd4269bffaaad80d8facf6850248b3a51de60c058067e5b6c7459392c4644d0d7bb646efc70c0f4ec91dc348ed882cf43a7692ed380453fe77380488c7
+result = valid
+tag = 42f2354297849a511d53e5571772f71f
+
+# Flipped bit 0 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a2e3fdf9fba6861b5ad2607f40b7f447
+
+# Flipped bit 1 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a1e3fdf9fba6861b5ad2607f40b7f447
+
+# Flipped bit 7 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 23e3fdf9fba6861b5ad2607f40b7f447
+
+# Flipped bit 8 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e2fdf9fba6861b5ad2607f40b7f447
+
+# Flipped bit 31 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fd79fba6861b5ad2607f40b7f447
+
+# Flipped bit 32 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9faa6861b5ad2607f40b7f447
+
+# Flipped bit 33 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9f9a6861b5ad2607f40b7f447
+
+# Flipped bit 63 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6869b5ad2607f40b7f447
+
+# Flipped bit 64 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5bd2607f40b7f447
+
+# Flipped bit 77 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5af2607f40b7f447
+
+# Flipped bit 80 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2617f40b7f447
+
+# Flipped bit 96 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f41b7f447
+
+# Flipped bit 97 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f42b7f447
+
+# Flipped bit 120 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f40b7f446
+
+# Flipped bit 121 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f40b7f445
+
+# Flipped bit 126 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f40b7f407
+
+# Flipped bit 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6861b5ad2607f40b7f4c7
+
+# Flipped bit 63 and 127 in tag expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = a3e3fdf9fba6869b5ad2607f40b7f4c7
+
+# Tag changed to all zero expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = 00000000000000000000000000000000
+
+# tag change to all 1 expected tag:a3e3fdf9fba6861b5ad2607f40b7f447
+aad = 616164
+ct = 
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# Flipped bit 0 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 26da374f17b7f1b23844a5490bfc4001
+
+# Flipped bit 1 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 25da374f17b7f1b23844a5490bfc4001
+
+# Flipped bit 7 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = a7da374f17b7f1b23844a5490bfc4001
+
+# Flipped bit 8 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27db374f17b7f1b23844a5490bfc4001
+
+# Flipped bit 31 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da37cf17b7f1b23844a5490bfc4001
+
+# Flipped bit 32 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f16b7f1b23844a5490bfc4001
+
+# Flipped bit 33 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f15b7f1b23844a5490bfc4001
+
+# Flipped bit 63 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1323844a5490bfc4001
+
+# Flipped bit 64 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23944a5490bfc4001
+
+# Flipped bit 77 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23864a5490bfc4001
+
+# Flipped bit 80 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a4490bfc4001
+
+# Flipped bit 96 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a5490afc4001
+
+# Flipped bit 97 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a54909fc4001
+
+# Flipped bit 120 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a5490bfc4000
+
+# Flipped bit 121 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a5490bfc4003
+
+# Flipped bit 126 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a5490bfc4041
+
+# Flipped bit 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1b23844a5490bfc4081
+
+# Flipped bit 63 and 127 in tag expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 27da374f17b7f1323844a5490bfc4081
+
+# Tag changed to all zero expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = 00000000000000000000000000000000
+
+# tag change to all 1 expected tag:27da374f17b7f1b23844a5490bfc4001
+aad = 616164
+ct = 2cf8ae525fc86025268a4e1d88bead19
+iv = 000102030405060708090a0b
+key = 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff
+msg = 00000000000000000000000000000000
+result = invalid
+tag = ffffffffffffffffffffffffffffffff
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 30303030303030300002506e
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = d4500bf009493551c380adf52c573a69df7e8b762463330facc16a5726be7190c63c5a1c926584a096756828dcdc64acdf963d931bf1dae238f3f157224ac4b542d785b0dd84db6be3bc5a3663e84149ffbed09e54f78f16a8223b24cb019f58b21b0e551e7aa07327629551376ccbc3937671a0629bd95c9915c78555771e7a
+result = valid
+tag = 0b300d8da56c2185755279553c4c82ca
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 3030303030303030000318a5
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = 7de87f6729945275d0655da4c7fde4569e16f111b5eb26c22d859e3ff822eced3a6dd9a60f22957f7b7c857e8822eb9fe0b8d7022141f2d0b48f4b5612d322a88dd0fe0b4d9179324f7c6c9e990efbd80e5ed6775826498b1efe0f71a0f3ec5b29cb28c2540a7dcd51b7daaee0ff4a7f3ac1ee54c29ee4c170de408f66692194
+result = valid
+tag = c578e2aa44d309b7b6a5193bdc6118f5
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 00000000000000000007b4f0
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = 1b996f9a3ccc6785de22ff5b8add9502ce03a0faf5992a09522cdd1206d220b8f8bd07d1f1f5a1bd9a71d11c7f579b855818c08d4de036393183b7f590b335aed8de5b57b13c5fede2441c3e184aa9d46e61598506b3e11c43c62cbcaceced33190875b012218b1930fb7c38ec45ac11c353d0cf938dccb9efad8fedbe46daa5
+result = valid
+tag = 4b0bda8ad043830d8319ab82c50c7663
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 00000000000000000020fb66
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = 86cbacae4d3f74ae01213e0551cc15160ea1be8408e3d5d74f01464995a69e6176cb9e02b2247ed299892f9182a45caf4c69405611766edfafdc285519ea30480c44f05e781eacf8fcecc7090abb28fa5fd585ac8cda7e8772e594e4ce6c883281932e0f89f877a1f04d9c32b06cf90b0e762b430c4d517c97107068f498ef7f
+result = valid
+tag = 4bc98f72c494c2a43c2b15a1043f1cfa
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 00000000000000000038bb90
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = fab1cddf4fe198ef63add881d6ead6c57637bbe92018ca7c0b96fba0871e932db1fbf90761be25df8dfaf931ce5757e617b3d7a9f0bf0ffe5d591a33c143b8f53fd0b5a19609fd62e5c251a4281a200cfdc34f281710406f4e37625446ff6ef224913deb0d89af337128e3d155d16d3ec3246041432143e9ab3a6d2ccc2f4d62
+result = valid
+tag = f7e9e151b02533c74658bfc7737c680d
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 00000000000000000070484a
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = 227202be7f3515e9d1c02eea2f1950b6481b048a4c91506cb40d504e6c949f82d197c25ad17dc721651125782ac7a71247feaef32f1f250ce4bb8f79acaa179d45a7b0545f0924325efa87d5e441d28478c61f2223ee67c3b41f4394535e2a24369a2e16613c459490c14fb1d755fe53fbe1ee45b1b21f7162e2fcaa742abefd
+result = valid
+tag = 795bcff647c553c2e4eb6e0eafd9e04e
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000000000000000000932f40
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = fae58345c16cb0f5cc537f2b1b3469c969463b3ea71bcf6b98d669a8e60e04fc08d5fd069c362638e3400ef4cb242e27e2245e68cb9ec583da5340b12edf423b7326ad20feeb57daca2e0467a32899b42df8e56d84e006bc8a7acc731e7c1f6becb5719f7077f0d4f4c61ab11ebac1001801ce33c4e4a77d831d3ce34e8410e1
+result = valid
+tag = 1946d653960f947a74d3e8093cf48502
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000000000000000000e29335
+key = 3030303030303030303030303030303030303030303030303030303030303030
+msg = ebb216ddd7ca709215f503df9ce63c5cd2194e7d9099e8a90b2afaad5eba35069925a603fdbc341aaed41505b10941fa3856a7e247b1040709746cfc2096caa631b2fff41c250506d889c1c90671ade853ee6394c19192a5cf3710d1073099e5bc946582fc0fab9f543c716ae2486a8683fdca39d2e14f23d00a582664f4ecb1
+result = valid
+tag = 36c3002985dd21baf895d633573f12c0
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 0000000000000000000ef7d5
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 408ae6ef1c7ef0fb2c2d610816fc7849efa58f78273f5f166ea65f81b575747d035b3040fede1eb9459788669788408e00413b3e376d152d204aa2b7a83558fcd48a0ef7a26b1cd6d35d23b3f5dfe0ca77a4ce32b94abf83da2aefcaf068380879e89fb0a3829595cf44c3852ae2cc662b689f9355d9c183801f6acc313f8907
+result = valid
+tag = 6514518e0a264142e0b7351f967fc2ae
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 0000000000000000003dfce4
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 0a0a24499bcade58cf1576c312aca984718cb4cc7e0153f5a9015810859644dfc021174e0b060a397448de8b484a8603be680a6934c0906f30dd17eae2d4c5faa777f8ca53370e08331b88c342bac959787bbb33930e3b56be86da7f2a6eb1f94089d1d181074d4302f8e0552d0de1fab306a21b42d4c3ba6e6f0cbcc81e877a
+result = valid
+tag = 4c194da6a99fd65b40e9cad798f44b19
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 0000000000000000018486a8
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 4a0aaff8494729188691701340f3ce2b8a78eed3a0f065994b72484e7991d25c29aa075eb1fc16de93fe069058112ab284a3ed18780326d1258a47222fa633d8b29f3bd9150b239b1546c2bb9b9f410febead396000ee477701532c3d0f5fbf895d280196d2f737c5e9fec50d92bb0df5d7e513be5b8ea971310d5bf16ba7aee
+result = valid
+tag = c8ae7788cd2874abc138541e11fd0587
+
+# checking for int overflows
+aad = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875c783d35f613e6d9093d38e975c38fe3b89f7aed35cb5a2fcaa0346efb936554649cf6378171eae4396ea15dc240d1abf4472d9096524fa1b2b023b8b288222773d4d206616f9293f65b45dbbc74e7c2edfbcbbf1cfb679bb739a5862de2bcb937f74d5bf8671c5a8a5092f61d54c9aa5b
+result = valid
+tag = 933a5163c7f62368327b3fbc1036c943
+
+# special case tag
+aad = 85ffffffffffffffffffffffffffffffa6902fcbc883bbc180b256ae34ad7f00
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = 000102030405060708090a0b0c0d0e0f
+
+# special case tag
+aad = ffffffffffffffffffffffffffffffff247e50642a1c0a2f8f77219609dba958
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = 00000000000000000000000000000000
+
+# special case tag
+aad = 7cffffffffffffffffffffffffffffffd9e72c064ac8961f3fa585e0e2abd600
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = ffffffffffffffffffffffffffffffff
+
+# special case tag
+aad = 65ffffffffffffffffffffffffffffff95af0f4d0b686eaeccca4307d596f502
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = 00000080000000800000008000000080
+
+# special case tag
+aad = ffffffffffffffffffffffffffffffff8540b464357707be3a39d55c34f8bcb3
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = ffffff7fffffff7fffffff7fffffff7f
+
+# special case tag
+aad = 4fffffffffffffffffffffffffffffff6623d990b898d830d212af2383330701
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = 01000000010000000100000001000000
+
+# special case tag
+aad = 83ffffffffffffffffffffffffffffff5f16d09f17787211b7d484e024f89701
+ct = ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+iv = 000102030405060708090a0b
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 9a49c40f8b48d7c66d1db4e53f20f2dd4aaa241ddab26b5bc0e218b72c3390f2df3ebd0176704419972bcdbc6bbcb3e4e74a71528ef51263ce24e0d575e0e44d
+result = valid
+tag = ffffffff000000000000000000000000
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 0039e2fd2fd312149e989880884813e7caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00caffffffffffffffffffffffffffffff3b0e869aaa8ea49632ffff37b9e8ce00
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 005235d2a919f28d3db7664a34ae6b444d3d35f613e6d9093d38e975c38fe3b85b8b94509e2b74a36d346e33d572659ba9f6378171eae4396ea15dc240d1abf483dce9f3073efadb7d23b87ace35168c
+result = valid
+tag = a519ac1a35b4a57787510af78d8d200a
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = d3ffffffffffffffffffffffffffffff6218b27f83b8b46602f6e1d834207b02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02ceffffffffffffffffffffffffffffff2a6416cedb1cdd296ef5d7d692daff02
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = d39428d079351f665cd001354319875ce5da78766fa19290c031f75208506745ae7aed35cb5a2fcaa0346efb93655464496ddeb05509c6efffab75eb2df4ab09762d9096524fa1b2b023b8b2882227730149ef504b71b120ca4ff39519c2c210
+result = valid
+tag = 302fe82ab0a09af64400d015ae83d9cc
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = e9ffffffffffffffffffffffffffffffea33f347304abdadf8ce413433c84501e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01e0ffffffffffffffffffffffffffffffb27f579688aee57064ce37329182ca01
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = e99428d079351f665cd001354319875c6df1394edc539b5b3a0957be0fb85946807aed35cb5a2fcaa0346efb93655464d1769fe806bbfeb6f590950f2eac9e0a582d9096524fa1b2b023b8b2882227739952ae0818c38979c07413711a9af713
+result = valid
+tag = 98a7e836e0ee4d023500d0557ec2cbe0
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffffe33bc552ca8b9e96169e797e8f30301b603ca99944df76528c9d6f54ab833d0f603ca99944df76528c9d6f54ab833d0f
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875c64f90f5b2692b860d4596ff4b3402c5c00b9bb53707aa667d356fe50c7199694033561e7caca6d941dc3cd6914ad6904
+result = valid
+tag = 6ab8dce2c59da4737130b0252f68a8d8
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 68ffffffffffffffffffffffffffffff374def6eb782ed002143115412b74600ffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219dffffffffffffffffffffffffffffffff4e233fb3e51d1ec7424507720dc5219d
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 689428d079351f665cd001354319875cb08f25675b9bcbf6e38407de2ec75a479f7aed35cb5a2fcaa0346efb936554642d2af7cd6b080501d31ba54fb2eb7596472d9096524fa1b2b023b8b288222773650ec62d757072cee6ff233186dd1c8f
+result = valid
+tag = 044dea608880412bfdffcf35579e9b26
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 6dffffffffffffffffffffffffffffff26a37fa2e81026945c39e9f2eba87702ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3ffffffffffffffffffffffffffffffffa5f1cff246fa09666e3bdf50b7f544b3
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 6d9428d079351f665cd001354319875ca161b5ab040900629efeff78d7d86b459f7aed35cb5a2fcaa0346efb93655464c6f8078cc8ef12a0ff657d6d08db10b8472d9096524fa1b2b023b8b2882227738edc366cd697656fca81fb133ced79a1
+result = valid
+tag = 1e6bea6314542e2ef9ffcf450b2e982b
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff7bc3729809e9dfe44fba0addade2aadf03c456df823cb8a0c5b900b3c935b8d303c456df823cb8a0c5b900b3c935b8d3
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875cfc01b891e5f0f9128d7d1c579192b69863414415b69968959a7291b7a5af134860cd9ea10c29a36654e7a28e761becd8
+result = valid
+tag = ed2017c8dba4775629049d786e3bceb1
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffffecaf03dbf698b88677b0e2cb0ba3cafa73b0e72170ec9042edafd8a127f6d7ee73b0e72170ec9042edafd8a127f6d7ee
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875c6b6dc9d21a819e70b577f44137d3d6bd1335f5eb44494077b26449a54b6c7c7510b92f5ffef98b847cf17a9c98d883e5
+result = valid
+tag = 073f17cb6778645925049d8822cbcab6
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffa0fc3e8032c3d5fdb62a11f096307db5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004b5ffffffffffffffffffffffffffffff766c9a8025eadea73905328c3379c004
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ffcb2b1106f8234c5e99d4db4c7048de323d35f613e6d9093d38e975c38fe3b816e9884a114f0e9266cea3885fe36b9fd6f6378171eae4396ea15dc240d1abf4cebef5e9885a80ea76d975c144a41888
+result = valid
+tag = 8b9bb4b4861289658c696a8340150405
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 6ff5a7c2bd414c3985cb9490b5a56d2ea6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900a6ffffffffffffffffffffffffffffff6ce43e94b92c784684013c5f1fdce900
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 6f9e70ed3b8baca026e46a5a0943158d213d35f613e6d9093d38e975c38fe3b80c612c5e8d89a873dbcaad5b7346429bc5f6378171eae4396ea15dc240d1abf4d43651fd149c260bcbdd7b126801318c
+result = valid
+tag = 8b3bbd51644459568d81ca1fa72ce404
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 4140df25b8d32194e78e51d41738cc6db2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501b2ffffffffffffffffffffffffffffff0b0686f93d849859fed6b818520d4501
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 412b080a3e19c10d44a1af1eabdeb4ce353d35f613e6d9093d38e975c38fe3b86b8394330921486ca11d291c3e97ee9ad1f6378171eae4396ea15dc240d1abf4b3d4e9909034c614b10aff5525d09d8d
+result = valid
+tag = 86fbab2b4a94f47aa56f0aea65d11008
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = b22c7068a583fa350f8529c375f8eb88b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503b6fffffffffffffffffffffffffffffffa5b162d6f12d1ec39cd90b72bff7503
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = b247a74723491aacacaad709c91e932b313d35f613e6d9093d38e975c38fe3b89ade04e75bb701d9660601b34765de98d5f6378171eae4396ea15dc240d1abf442897944c2a28fa17611d7fa5c22ad8f
+result = valid
+tag = a019ac2ed667e17da16f0afa19610d0d
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 7464496670da0f3c2699a700d23ecc3aaaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901aaffffffffffffffffffffffffffffff21a884658a253c0b261fc0b466b71901
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 740f9e49f610efa585b659ca6ed8b4992d3d35f613e6d9093d38e975c38fe3b8412d96afbe80ec3e79d451b00a2db29ac9f6378171eae4396ea15dc240d1abf4997aeb0c2795624669c387f9116ac18d
+result = valid
+tag = 736e18181696a5889c3159faabab20fd
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = add18a3fdd024a9f8f0cc801347ba376b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201b0ffffffffffffffffffffffffffffff77f94d341cd0245da90907532469f201
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = adba5d105bc8aa062c2336cb889ddbd5373d35f613e6d9093d38e975c38fe3b8177c5ffe2875f468f6c2965748f3599ad3f6378171eae4396ea15dc240d1abf4cf2b225db1607a10e6d5401e53b42a8d
+result = valid
+tag = bad58f10a91e6a889aba32fd17d8331a
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = feffffffffffffffffffffffffffffff47c327cc365d088759098c341b4aed03d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701d4ffffffffffffffffffffffffffffff2b0b973f745b28aae937f59f18eac701
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = fe9428d079351f665cd001354319875cc001edc5da442e719bce9abe273af144b47aed35cb5a2fcaa0346efb9365546448025f41fa4e336c786957a2a7c4930a6c2d9096524fa1b2b023b8b28822277300266ea1e43644a34d8dd1dc93f2fa13
+result = valid
+tag = d68ce174079add028dd05cf814630488
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = b57867453f66f4daf9e474691f9c8515d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202d3ffffffffffffffffffffffffffffff01101359851ad324a0dae88dc2430202
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = b513b06ab9ac14435acb8aa3a37afdb6543d35f613e6d9093d38e975c38fe3b861950193b1bf0311ff117989aed9a999b0f6378171eae4396ea15dc240d1abf4b9c27c3028aa8d69ef06afc0b59eda8e
+result = valid
+tag = aa48a3887d4b059699c2fdf9c6787e0a
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff5333c3e1f8d78eacca0707526cad018cafffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204afffffffffffffffffffffffffffffff3049702414b599502624fdfe29313204
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875cd4f109e814cea85a08c011d850dd1dcbcf7aed35cb5a2fcaa0346efb936554645340b85a9aa08296b77a5fc3961f660f172d9096524fa1b2b023b8b2882227731b6489ba84d8f559829ed9bda2290f16
+result = valid
+tag = b936a817f2211af129e2cf160fd42bcb
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff588ea80ac1583f434a806813ae2a4a9eb6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900b6ffffffffffffffffffffffffffffff998d381adb2359ddbae786537d37b900
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875cdf4c62032d4119b588477e99925a56d9d67aed35cb5a2fcaa0346efb93655464fa84f0645536421b2bb9246ec219ed0b0e2d9096524fa1b2b023b8b288222773b2a0c1844b4e35d41e5da210f62f8412
+result = valid
+tag = 9f7ac4351f6b91e63097a713115d05be
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff943ac00981d89d2c14febfa5fb9cba1297ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a80497ffffffffffffffffffffffffffffff00417083a7aa8d13f2fbb5dfc255a804
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875c13f80a006dc1bbdad639a92fc7eca655f77aed35cb5a2fcaa0346efb936554646348b8fd29bf96d563a517e27d7bfc0f2f2d9096524fa1b2b023b8b2882227732b6c891d37c7e11a5641919c494d9516
+result = valid
+tag = 9a18a828070269f44700d009e7171cc9
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff0527514c6e8876ce3bf49794595dda2d9cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc019cffffffffffffffffffffffffffffffd57800b44c65d9a331f28d6ee8b7dc01
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875c82e59b4582915038f933811e652dc66afc7aed35cb5a2fcaa0346efb93655464b671c8cac270c265a0ac2f535799880a242d9096524fa1b2b023b8b288222773fe55f92adc08b5aa9548a92d63afe113
+result = valid
+tag = b436a82b93d555f74300d0199ba718ce
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = ffffffffffffffffffffffffffffffff7613e28e5b384f7063ea6f83b71dfa48a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04a0ffffffffffffffffffffffffffffffc4ce90e77df311376de8650dc2a90d04
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = ff9428d079351f665cd001354319875cf1d12887b7216986a12d79098b6de60fc07aed35cb5a2fcaa0346efb93655464a7c75899f3e60af1fcb6c7307d87590f182d9096524fa1b2b023b8b288222773efe36979ed9e7d3ec952414e49b13016
+result = valid
+tag = ce54a82e1fa942fa3f00d0294f3715d3
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = cb9a0db18d63d7ead7c960d6b286745fb3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04b3ffffffffffffffffffffffffffffffdebab4a1584250bffc2fc84d95decf04
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = cbf1da9e0ba9377374e69e1c0e600cfc343d35f613e6d9093d38e975c38fe3b8be3fa66b6ce7808aa3e45949f944649fd0f6378171eae4396ea15dc240d1abf46668dbc8f5f20ef2b3f38f00e2031788
+result = valid
+tag = 2383ab0b799205699b510aa709bf31f1
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 8f4c51bb42233a7276a2c0912a88f3cbc5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03c5ffffffffffffffffffffffffffffff66d6f56905d45806f30828a993869a03
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 8f278694c4e9daebd58d3e5b966e8b68423d35f613e6d9093d38e975c38fe3b80653e7a331718833acc3b9adff1c3198a6f6378171eae4396ea15dc240d1abf4de049a00a864064bbcd46fe4e45b428f
+result = valid
+tag = 8bfbab17a9e0b8748b510ae7d9fd2305
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = d5ffffffffffffffffffffffffffffff1de01d03a4fb692b0f135717da3c93039cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb019cffffffffffffffffffffffffffffff14bc017957dcfa2cc0dbb81df583cb01
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = d59428d079351f665cd001354319875c9a22d70a48e24fddcdd4419de64c8f44fc7aed35cb5a2fcaa0346efb9365546477b5c907d9c9e1ea51851a204aad9f0a242d9096524fa1b2b023b8b2882227733f91f8e7c7b1962564619c5e7e9bf613
+result = valid
+tag = 49bc6e9fc51c4d503036644d842773d2
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = dbfffffffffffffffffffffffffffffff217ae3349b6b5bb4e092fa6ff9ec700a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03a0ffffffffffffffffffffffffffffff031292ac886a33c0fbd190bcce75fc03
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = db9428d079351f665cd001354319875c75d5643aa5af934d8cce392cc3eedb47c07aed35cb5a2fcaa0346efb93655464601b5ad2067f28066a8f3281715ba808182d9096524fa1b2b023b8b288222773283f6b3218075fc95f6bb4ff456dc111
+result = valid
+tag = 63da6ea251f039532c36645d38b76fd7
+
+# edge case intermediate sums in poly1305
+aad = ffffffff
+ct = 93ffffffffffffffffffffffffffffffe58af369ae0fc2f5290b7c7f659c9704f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04f7ffffffffffffffffffffffffffffffbbc10b84948b5c8c2f0c72113ea9bd04
+iv = 0000000000000000064c2d52
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 939428d079351f665cd001354319875c624839604216e403ebcc6af559ec8b43977aed35cb5a2fcaa0346efb93655464d8c8c3fa1a9e474abe52d02c8187e90f4f2d9096524fa1b2b023b8b28822277390ecf21a04e630858bb65652b5b18016
+result = valid
+tag = 73eb2724b5c405f04d00d0f15840a1c1
+
+[ivSize = 64]
+[keySize = 256]
+[tagSize = 128]
+
+# invalid nonce size
+aad = 
+ct = 
+iv = 5f5f5f5f5f5f5f5f
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 
+result = invalid
+tag = 
+
+[ivSize = 80]
+[keySize = 256]
+[tagSize = 128]
+
+# invalid nonce size
+aad = 
+ct = 
+iv = 5f5f5f5f5f5f5f5f5f5f
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 
+result = invalid
+tag = 
+
+[ivSize = 88]
+[keySize = 256]
+[tagSize = 128]
+
+# invalid nonce size
+aad = 
+ct = 
+iv = 5f5f5f5f5f5f5f5f5f5f5f
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 
+result = invalid
+tag = 
+
+[ivSize = 112]
+[keySize = 256]
+[tagSize = 128]
+
+# invalid nonce size
+aad = 
+ct = 
+iv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 
+result = invalid
+tag = 
+
+[ivSize = 128]
+[keySize = 256]
+[tagSize = 128]
+
+# invalid nonce size
+aad = 
+ct = 
+iv = 5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f
+key = 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f
+msg = 
+result = invalid
+tag = 
+
diff --git a/third_party/wycheproof/convert_wycheproof.go b/third_party/wycheproof/convert_wycheproof.go
index 07656b3..06fff1a 100644
--- a/third_party/wycheproof/convert_wycheproof.go
+++ b/third_party/wycheproof/convert_wycheproof.go
@@ -224,6 +224,9 @@
 
 func main() {
 	jsonPaths := []string{
+		"aes_gcm_siv_test.json",
+		"aes_gcm_test.json",
+		"chacha20_poly1305_test.json",
 		"dsa_test.json",
 		"ecdsa_secp224r1_sha224_test.json",
 		"ecdsa_secp224r1_sha256_test.json",
@@ -237,9 +240,6 @@
 
 		// TODO(davidben): The following tests still need test drivers.
 		// "aes_cbc_pkcs5_test.json",
-		// "aes_gcm_siv_test.json",
-		// "aes_gcm_test.json",
-		// "chacha20_poly1305_test.json",
 		// "ecdh_test.json",
 	}
 	for _, jsonPath := range jsonPaths {