// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "src/security/lib/fcrypto/aead.h"

#include <limits.h>
#include <stddef.h>
#include <stdint.h>
#include <zircon/errors.h>
#include <zircon/types.h>

#include <zxtest/zxtest.h>

#include "src/security/lib/fcrypto/bytes.h"
#include "src/security/lib/fcrypto/secret.h"
#include "src/security/lib/fcrypto/test/utils.h"

namespace crypto {
namespace testing {
namespace {

TEST(GetLength, Uninitialized) {
  size_t key_len;
  EXPECT_STATUS(AEAD::GetKeyLen(AEAD::kUninitialized, &key_len), ZX_ERR_INVALID_ARGS);

  size_t iv_len;
  EXPECT_STATUS(AEAD::GetIVLen(AEAD::kUninitialized, &iv_len), ZX_ERR_INVALID_ARGS);
}

TEST(GetLengths, AES128_GCM) {
  size_t key_len;
  EXPECT_STATUS(AEAD::GetKeyLen(AEAD::kAES128_GCM, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetKeyLen(AEAD::kAES128_GCM, &key_len));
  EXPECT_EQ(key_len, 16U);

  size_t iv_len;
  EXPECT_STATUS(AEAD::GetIVLen(AEAD::kAES128_GCM, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetIVLen(AEAD::kAES128_GCM, &iv_len));
  EXPECT_EQ(iv_len, 12U);

  size_t tag_len;
  EXPECT_STATUS(AEAD::GetTagLen(AEAD::kAES128_GCM, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetTagLen(AEAD::kAES128_GCM, &tag_len));
  EXPECT_EQ(tag_len, 16U);
}

TEST(GetLengths, AES128_GCM_SIV) {
  size_t key_len;
  EXPECT_STATUS(AEAD::GetKeyLen(AEAD::kAES128_GCM_SIV, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetKeyLen(AEAD::kAES128_GCM_SIV, &key_len));
  EXPECT_EQ(key_len, 16U);

  size_t iv_len;
  EXPECT_STATUS(AEAD::GetIVLen(AEAD::kAES128_GCM_SIV, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetIVLen(AEAD::kAES128_GCM_SIV, &iv_len));
  EXPECT_EQ(iv_len, 12U);

  size_t tag_len;
  EXPECT_STATUS(AEAD::GetTagLen(AEAD::kAES128_GCM_SIV, nullptr), ZX_ERR_INVALID_ARGS);
  EXPECT_OK(AEAD::GetTagLen(AEAD::kAES128_GCM_SIV, &tag_len));
  EXPECT_EQ(tag_len, 16U);
}

TEST(InitSeal, Uninitialized) {
  AEAD sealer;
  Secret key;
  Bytes iv;
  EXPECT_STATUS(sealer.InitSeal(AEAD::kUninitialized, key, iv), ZX_ERR_INVALID_ARGS);
}

void TestInitSeal(AEAD::Algorithm aead) {
  AEAD sealer;
  Secret key;
  Bytes iv;
  ASSERT_OK(GenerateKeyMaterial(aead, &key, &iv));

  // Bad key
  Secret bad_key;
  ASSERT_OK(bad_key.Generate(key.len() - 1));
  EXPECT_STATUS(sealer.InitSeal(aead, bad_key, iv), ZX_ERR_INVALID_ARGS);

  // Bad IV
  Bytes bad_iv;
  ASSERT_OK(iv.Copy(iv.get(), iv.len() - 1));
  EXPECT_STATUS(sealer.InitSeal(aead, key, bad_iv), ZX_ERR_INVALID_ARGS);

  // Valid
  EXPECT_OK(sealer.InitSeal(aead, key, iv));
}
TEST(InitSeal, AES128_GCM) { ASSERT_NO_FATAL_FAILURE(TestInitSeal(AEAD::kAES128_GCM)); }
TEST(InitSeal, AES128_GCM_SIV) { ASSERT_NO_FATAL_FAILURE(TestInitSeal(AEAD::kAES128_GCM_SIV)); }

TEST(InitOpen, Uninitialized) {
  AEAD opener;
  Secret key;
  Bytes iv;
  EXPECT_STATUS(opener.InitOpen(AEAD::kUninitialized, key, iv), ZX_ERR_INVALID_ARGS);
}

void TestInitOpen(AEAD::Algorithm aead) {
  AEAD opener;
  Secret key;
  Bytes iv;
  ASSERT_OK(GenerateKeyMaterial(aead, &key, &iv));

  // Bad key
  Secret bad_key;
  ASSERT_OK(bad_key.Generate(key.len() - 1));
  EXPECT_STATUS(opener.InitOpen(aead, bad_key, iv), ZX_ERR_INVALID_ARGS);

  // Bad IV
  Bytes bad_iv;
  ASSERT_OK(bad_iv.Copy(iv.get(), iv.len() - 1));
  EXPECT_STATUS(opener.InitOpen(aead, key, bad_iv), ZX_ERR_INVALID_ARGS);

  // Valid
  EXPECT_OK(opener.InitOpen(aead, key, iv));
}
TEST(InitOpen, AES128_GCM) { ASSERT_NO_FATAL_FAILURE(TestInitOpen(AEAD::kAES128_GCM)); }
TEST(InitOpen, AES128_GCM_SIV) { ASSERT_NO_FATAL_FAILURE(TestInitOpen(AEAD::kAES128_GCM_SIV)); }

void TestSealData(AEAD::Algorithm aead) {
  AEAD sealer;
  Secret key;
  Bytes iv, ptext, ctext;
  uint64_t nonce;
  ASSERT_OK(GenerateKeyMaterial(aead, &key, &iv));
  ASSERT_OK(ptext.Randomize(zx_system_get_page_size()));

  // Not initialized
  EXPECT_STATUS(sealer.Seal(ptext, &nonce, &ctext), ZX_ERR_BAD_STATE);
  ASSERT_OK(sealer.InitSeal(aead, key, iv));

  // Missing parameters
  EXPECT_STATUS(sealer.Seal(ptext, nullptr, &ctext), ZX_ERR_INVALID_ARGS);
  EXPECT_STATUS(sealer.Seal(ptext, &nonce, nullptr), ZX_ERR_INVALID_ARGS);

  // Wrong mode
  EXPECT_STATUS(sealer.Open(nonce, ctext, &ptext), ZX_ERR_BAD_STATE);

  // Valid
  EXPECT_OK(sealer.Seal(ptext, &nonce, &ctext));
  ASSERT_OK(ptext.Resize(0));
  EXPECT_OK(sealer.Seal(ptext, &nonce, &ctext));

  // Reset
  sealer.Reset();
  EXPECT_STATUS(sealer.Seal(ptext, &nonce, &ctext), ZX_ERR_BAD_STATE);
}
TEST(SealData, AES128_GCM) { ASSERT_NO_FATAL_FAILURE(TestSealData(AEAD::kAES128_GCM)); }
TEST(SealData, AES128_GCM_SIV) { ASSERT_NO_FATAL_FAILURE(TestSealData(AEAD::kAES128_GCM_SIV)); }

void TestOpenData(AEAD::Algorithm aead) {
  Secret key;
  Bytes iv, ptext, ctext, result;
  uint64_t nonce = 0;
  ASSERT_OK(GenerateKeyMaterial(aead, &key, &iv));
  ASSERT_OK(ptext.Randomize(zx_system_get_page_size()));

  AEAD sealer;
  ASSERT_OK(sealer.InitSeal(aead, key, iv));
  // ASSERT_OK(sealer.Seal(ptext, &nonce, &ctext));

  // Not initialized
  AEAD opener;
  EXPECT_STATUS(opener.Open(nonce, ctext, &result), ZX_ERR_BAD_STATE);
  ASSERT_OK(opener.InitOpen(aead, key, iv));

  // Missing parameters
  EXPECT_STATUS(opener.Open(nonce, ctext, nullptr), ZX_ERR_INVALID_ARGS);

  // Wrong IV
  ASSERT_OK(sealer.Seal(ptext, &nonce, &ctext));
  EXPECT_STATUS(opener.Open(nonce + 1, ctext, &result), ZX_ERR_IO_DATA_INTEGRITY);

  // Wrong tag
  size_t len;
  ASSERT_OK(AEAD::GetTagLen(aead, &len));
  ASSERT_OK(ctext.Resize(len - 1));
  EXPECT_STATUS(opener.Open(nonce, ctext, &result), ZX_ERR_INVALID_ARGS);

  ASSERT_OK(ctext.Resize(0));
  ASSERT_OK(sealer.Seal(ptext, &nonce, &ctext));
  len = ctext.len();
  ctext[len - 1] ^= 1;
  EXPECT_STATUS(opener.Open(nonce, ctext, &result), ZX_ERR_IO_DATA_INTEGRITY);
  ctext[len - 1] ^= 1;

  // Wrong data
  ctext[0] ^= 1;
  EXPECT_STATUS(opener.Open(nonce, ctext, &result), ZX_ERR_IO_DATA_INTEGRITY);
  ctext[0] ^= 1;

  // Wrong mode
  EXPECT_STATUS(opener.Seal(ptext, &nonce, &ctext), ZX_ERR_BAD_STATE);

  // Valid
  ASSERT_OK(sealer.Seal(ptext, &nonce, &ctext));
  EXPECT_OK(opener.Open(nonce, ctext, &result));

  ASSERT_OK(sealer.Seal(ptext, &nonce, &ctext));
  EXPECT_OK(opener.Open(nonce, ctext, &result));
  EXPECT_TRUE(ptext == result);

  // Reset
  opener.Reset();
  EXPECT_STATUS(opener.Open(nonce, ctext, &result), ZX_ERR_BAD_STATE);
}
TEST(OpenData, AES128_GCM) { ASSERT_NO_FATAL_FAILURE(TestOpenData(AEAD::kAES128_GCM)); }
TEST(OpenData, AES128_GCM_SIV) { ASSERT_NO_FATAL_FAILURE(TestOpenData(AEAD::kAES128_GCM_SIV)); }

// The following tests are taken from NIST's SP 800-38D.  The tests with non-byte non-standard IV
// and tag lengths are omitted.  Of those remaining, the first non-failing test of each combination
// of text and AAD length is selected as a representative sample.
void TestAes128Gcm_TC(const char* xkey, const char* xiv, const char* xct, const char* xaad,
                      const char* xtag, const char* xpt) {
  Secret key;
  Bytes ptext, aad, iv, ctext, tag, result;
  uint64_t nonce;
  ASSERT_OK(HexToSecret(xkey, &key));
  ASSERT_OK(HexToBytes(xiv, &iv));
  ASSERT_OK(HexToBytes(xct, &ctext));
  ASSERT_OK(HexToBytes(xaad, &aad));
  ASSERT_OK(HexToBytes(xtag, &tag));
  ASSERT_OK(HexToBytes(xpt, &ptext));
  ASSERT_OK(ctext.Copy(tag.get(), tag.len(), ctext.len()));

  AEAD sealer;
  EXPECT_OK(sealer.InitSeal(AEAD::kAES128_GCM, key, iv));
  EXPECT_OK(sealer.Seal(ptext, aad, &nonce, &result));
  EXPECT_TRUE(result == ctext);

  ASSERT_OK(result.Resize(0));
  AEAD opener;
  EXPECT_OK(opener.InitOpen(AEAD::kAES128_GCM, key, iv));
  EXPECT_OK(opener.Open(nonce, ctext, aad, &result));
  EXPECT_TRUE(result == ptext);
}

TEST(Aes128Gcm, TC01) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "cf063a34d4a9a76c2c86787d3f96db71",
      /* IV */ "113b9785971864c83b01c787",
      /* CT */ "",
      /* AAD */ "",
      /* Tag */ "72ac8493e3a5228b5d130a69d2510e42",
      /* PT */ ""));
}

// clang-format off
TEST(Aes128Gcm, TC02) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "e98b72a9881a84ca6b76e0f43e68647a",
      /* IV */  "8b23299fde174053f3d652ba",
      /* CT */  "5a3c1cf1985dbb8bed818036fdd5ab42",
      /* AAD */ "",
      /* Tag */ "23c7ab0f952b7091cd324835043b5eb5",
      /* PT */  "28286a321293253c3e0aa2704a278032"));
}

TEST(Aes128Gcm, TC03) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "816e39070410cf2184904da03ea5075a",
      /* IV */  "32c367a3362613b27fc3e67e",
      /* CT */  "552ebe012e7bcf90fcef712f8344e8f1",
      /* AAD */ "f2a30728ed874ee02983c294435d3c16",
      /* Tag */ "ecaae9fc68276a45ab0ca3cb9dd9539f",
      /* PT */  "ecafe96c67a1646744f1c891f5e69427"));
}

TEST(Aes128Gcm, TC04) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "d9529840200e1c17725ab52c9c927637",
      /* IV */  "6e9a639d4aecc25530a8ad75",
      /* CT */  "6c779895e78179783c51ade1926436b9",
      /* AAD */ "472a6f4e7771ca391e42065030db3ff418f3b636",
      /* Tag */ "4522bfdef4a635a38db5784b27d43661",
      /* PT */  "8ae823895ee4e7f08bc8bad04d63c220"));
}

TEST(Aes128Gcm, TC05) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "abbc49ee0bbe3d81afc2b6b84f70b748",
      /* IV */  "f11db9f7b99a59ed59ade66f",
      /* CT */  "ce2d76f834942c022044eebc91b461c0",
      /* AAD */ "d533cf7644a48da46fcdec47ae5c77b9b52db775d6c886896e4f4e00c51affd59499a0e572f324989df511c4ea5f93cd",
      /* Tag */ "62df4b04f219554cd3e69d3c870032d2",
      /* PT */  "5135ba1354cbb80478ecaf3db38a443f"));
}

TEST(Aes128Gcm, TC06) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "300b8ffab4368cc90f6d4063e4279f2a",
      /* IV */  "8e69fa64e871d0e98a183a49",
      /* CT */  "2d2292da61c280aff86767d25b75e814",
      /* AAD */ "5166309e153447b27c67051453abf441de3f4a7f6b633ec6122ff82dc132cfb422d36c5ec6e7cc90a9ad55caa1ccdcb82dc5022a20062a9c6e9238f34d085b1f554b5eac05eff25b5a5cb6e18e7827d70175dc0662d77033d118",
      /* Tag */ "633ee657a8981a7682f87505594c95ad",
      /* PT */  "4953b54859870631e818da71fc69c981"));
}

TEST(Aes128Gcm, TC07) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "387218b246c1a8257748b56980e50c94",
      /* IV */  "dd7e014198672be39f95b69d",
      /* CT */  "cdba9e73eaf3d38eceb2b04a8d",
      /* AAD */ "",
      /* Tag */ "ecf90f4a47c9c626d6fb2c765d201556",
      /* PT */  "48f5b426baca03064554cc2b30"));
}

TEST(Aes128Gcm, TC08) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "660eb76f3d8b6ec54e01b8a36263124b",
      /* IV */  "3d8cf16e262880ddfe0c86eb",
      /* CT */  "b1ee05f1415a61d7637e97c5f3",
      /* AAD */ "8560b10c011a1d4190eb46a3692daa17",
      /* Tag */ "761cb84a963e1db1a4ab2c5f904c09db",
      /* PT */  "2efbaedfec3cfe4ac32f201fa5"));
}

TEST(Aes128Gcm, TC09) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "c62dc36b9230e739179f3c58e7270ff9",
      /* IV */  "196a0572d8ff2fbd3522b6a5",
      /* CT */  "958062b331f05b3acaa1836fc2",
      /* AAD */ "4d10536cbdbd6f1d38b2bd10ab8c1c29ae68138e",
      /* Tag */ "dc65a20d9a9aec2e7699eaead47afb42",
      /* PT */  "6d8abcee45667e7a9443896cbf"));
}

TEST(Aes128Gcm, TC10) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "ef1da9dd794219ebf8f717d5a98ab0af",
      /* IV */  "3f3983dc63986e33d1b6bffc",
      /* CT */  "95ea05701481e915c72446c876",
      /* AAD */ "5abd0c1c52b687e9a1673b69137895e5025c2bd18cbeacdb9472e918fe1587da558c492cc708d270fd10572eea83d2de",
      /* Tag */ "5c866992662005ca8886810e278c8ab4",
      /* PT */  "5511872905436c7de38e9501e7"));
}

TEST(Aes128Gcm, TC11) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "77b55a5b37690c9b1b01a05820838e3e",
      /* IV */  "7a8e0d881f023a9954941037",
      /* CT */  "e0eb3359e443e1108ed4068969",
      /* AAD */ "0bb1ad1d294b927c24ee097d0a9afbaa6a62c8923627b50bd96e5ba852509a2e76f7a10ee3987e37a55b92d08531897e6cd76462403b39fb31508cc9fc7684ab5ec2ccc73e8a7f4104a277319bf207fcf263eceed13a76ca177f",
      /* Tag */ "ea6383077d15d7d0a97220848a7616a9",
      /* PT */  "d164aeccec7dbcadee4f41b6a9"));
}

TEST(Aes128Gcm, TC12) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "bfd414a6212958a607a0f5d3ab48471d",
      /* IV */  "86d8ea0ab8e40dcc481cd0e2",
      /* CT */  "62171db33193292d930bf6647347652c1ef33316d7feca99d54f1db4fcf513f8",
      /* AAD */ "",
      /* Tag */ "c28280aa5c6c7a8bd366f28c1cfd1f6e",
      /* PT */  "a6b76a066e63392c9443e60272ceaeb9d25c991b0f2e55e2804e168c05ea591a"));
}

TEST(Aes128Gcm, TC13) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "95bcde70c094f04e3dd8259cafd88ce8",
      /* IV */  "12cf097ad22380432ff40a5c",
      /* CT */  "8a023ba477f5b809bddcda8f55e09064d6d88aaec99c1e141212ea5b08503660",
      /* AAD */ "c783a0cca10a8d9fb8d27d69659463f2",
      /* Tag */ "562f500dae635d60a769b466e15acd1e",
      /* PT */  "32f51e837a9748838925066d69e87180f34a6437e6b396e5643b34cb2ee4f7b1"));
}

TEST(Aes128Gcm, TC14) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "f3e60720c7eff3af96a0e7b2a359c322",
      /* IV */  "8c9cb6af794f8c0fc4c8c06e",
      /* CT */  "73e308d968ead96cefc9337dea6952ac3afbe39d7d14d063b9f59ab89c3f6acc",
      /* AAD */ "5d15b60acc008f9308731ea0a3098644866fa862",
      /* Tag */ "658e311f9c9816dbf2567f811e905ab8",
      /* PT */  "7e299a25404311ee29eee9349f1e7f876dca42ba81f44295bb9b3a152a27a2af"));
}

TEST(Aes128Gcm, TC15) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "8453cf505f22445634b18680c1f6b0f3",
      /* IV */  "fab8e5ce90102286182ef690",
      /* CT */  "5475442af3ba2bd865ae082bc5e92ad7f42cd84b8c64daadcf18f0d4863b6172",
      /* AAD */ "ff76d2210f2caec37490a19352c3945be1c5facb89cb3e9947754cade47ec932d95c88d7d2299a8b6db76b5144ab9516",
      /* Tag */ "972a7e85787ba26c626db1a1e7c13acb",
      /* PT */  "e4abb4773f5cc51c9df6322612d75f70696c17733ce41e22427250ae61fd90d3"));
}

TEST(Aes128Gcm, TC16) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "07a6be880a58f572dbc2ad74a56db8b6",
      /* IV */  "95fc6654e6dc3a8adf5e7a69",
      /* CT */  "095635c7e0eac0fc1059e67e1a936b6f72671121f96699fed520e5f8aff777f0",
      /* AAD */ "de4269feea1a439d6e8990fd6f9f9d5bc67935294425255ea89b6f6772d680fd656b06581a5d8bc5c017ab532b4a9b83a55fde58cdfb3d2a8fef3aa426bc59d3e32f09d3cc20b1ceb9a9e349d1068a0aa3d39617fae0582ccef0",
      /* Tag */ "b2235f6d4bdd7b9c0901711048859d47",
      /* PT */  "7680b48b5d28f38cdeab2d5851769394a3e141b990ec4bdf79a33e5315ac0338"));
}

TEST(Aes128Gcm, TC17) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "93ae114052b7985d409a39a40df8c7ee",
      /* IV */  "8ad733a4a9b8330690238c42",
      /* CT */  "bbb5b672a479afca2b11adb0a4c762b698dd565908fee1d101f6a01d63332c91b85d7f03ac48a477897d512b4572f9042cb7ea",
      /* AAD */ "",
      /* Tag */ "4d78bdcb1366fcba02fdccee57e1ff44",
      /* PT */  "3f3bb0644eac878b97d990d257f5b36e1793490dbc13fea4efe9822cebba7444cce4dee5a7f5dfdf285f96785792812200c279"));
}

TEST(Aes128Gcm, TC18) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "bc22f3f05cc40db9311e4192966fee92",
      /* IV */  "134988e662343c06d3ab83db",
      /* CT */  "4c0168ab95d3a10ef25e5924108389365c67d97778995892d9fd46897384af61fc559212b3267e90fe4df7bfd1fbed46f4b9ee",
      /* AAD */ "10087e6ed81049b509c31d12fee88c64",
      /* Tag */ "771357958a316f166bd0dacc98ea801a",
      /* PT */  "337c1bc992386cf0f957617fe4d5ec1218ae1cc40369305518eb177e9b15c1646b142ff71237efaa58790080cd82e8848b295c"));
}

TEST(Aes128Gcm, TC19) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "af57f42c60c0fc5a09adb81ab86ca1c3",
      /* IV */  "a2dc01871f37025dc0fc9a79",
      /* CT */  "b9a535864f48ea7b6b1367914978f9bfa087d854bb0e269bed8d279d2eea1210e48947338b22f9bad09093276a331e9c79c7f4",
      /* AAD */ "41dc38988945fcb44faf2ef72d0061289ef8efd8",
      /* Tag */ "4f71e72bde0018f555c5adcce062e005",
      /* PT */  "3803a0727eeb0ade441e0ec107161ded2d425ec0d102f21f51bf2cf9947c7ec4aa72795b2f69b041596e8817d0a3c16f8fadeb"));
}

TEST(Aes128Gcm, TC20) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "f0305c7b513960533519473976f02beb",
      /* IV */  "1a7f6ea0e6c9aa5cf8b78b09",
      /* CT */  "30043bcbe2177ab25e4b00a92ee1cd80e9daaea0bc0a827fc5fcb84e7b07be6395582a5a14e768dde80a20dae0a8b1d8d1d29b",
      /* AAD */ "7e2071cc1c70719143981de543cd28dbceb92de0d6021bda4417e7b6417938b126632ecff6e00766e5d0aad3d6f06811",
      /* Tag */ "796c41624f6c3cab762380d21ab6130b",
      /* PT */  "e5fc990c0739e05bd4655871c7401128117737a11d520372239ab723f7fde78dc4212ac565ee5ee100a014dbb71ea13cdb08eb"));
}

TEST(Aes128Gcm, TC21) {
  ASSERT_NO_FATAL_FAILURE(TestAes128Gcm_TC(
      /* Key */ "da2bb7d581493d692380c77105590201",
      /* IV */  "44aa3e7856ca279d2eb020c6",
      /* CT */  "9290d430c9e89c37f0446dbd620c9a6b34b1274aeb6f911f75867efcf95b6feda69f1af4ee16c761b3c9aeac3da03aa9889c88",
      /* AAD */ "4cd171b23bddb3a53cdf959d5c1710b481eb3785a90eb20a2345ee00d0bb7868c367ab12e6f4dd1dee72af4eee1d197777d1d6499cc541f34edbf45cda6ef90b3c024f9272d72ec1909fb8fba7db88a4d6f7d3d925980f9f9f72",
      /* Tag */ "9e3ac938d3eb0cadd6f5c9e35d22ba38",
      /* PT */  "9bbf4c1a2742f6ac80cb4e8a052e4a8f4f07c43602361355b717381edf9fabd4cb7e3ad65dbd1378b196ac270588dd0621f642"));
}
// clang-format on

// The following tests are taken from the draft AES-GCM RFC (version 6), appendix C.1.  They are
// intentionally formatted to be as close to the RFC's representation as possible.
void TestAes128GcmSiv_TC(const char* xpt, const char* xaad, const char* xkey, const char* xnonce,
                         const char* xresult) {
  Secret key;
  Bytes ptext, aad, iv, ctext, tag, result;
  uint64_t nonce;
  ASSERT_OK(HexToBytes(xpt, &ptext));
  ASSERT_OK(HexToBytes(xaad, &aad));
  ASSERT_OK(HexToSecret(xkey, &key));
  ASSERT_OK(HexToBytes(xnonce, &iv));
  ASSERT_OK(HexToBytes(xresult, &result));

  AEAD sealer;
  EXPECT_OK(sealer.InitSeal(AEAD::kAES128_GCM_SIV, key, iv));
  EXPECT_OK(sealer.Seal(ptext, aad, &nonce, &ctext));
  EXPECT_TRUE(ctext == result);

  ASSERT_OK(result.Resize(0));
  AEAD opener;
  EXPECT_OK(opener.InitOpen(AEAD::kAES128_GCM_SIV, key, iv));
  EXPECT_OK(opener.Open(nonce, ctext, aad, &result));
  EXPECT_TRUE(ptext == result);
}

// clang-format off
TEST(Aes128GcmSiv, TC01) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (0 bytes) */  "",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (16 bytes) */    "dc20e2d83f25705bb49e439eca56de25"));
}

TEST(Aes128GcmSiv, TC02) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (8 bytes) */  "0100000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (24 bytes) */    "b5d839330ac7b786578782fff6013b81"
                                 "5b287c22493a364c"));
}

TEST(Aes128GcmSiv, TC03) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (12 bytes) */ "010000000000000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (28 bytes) */    "7323ea61d05932260047d942a4978db3"
                                 "57391a0bc4fdec8b0d106639"));
}

TEST(Aes128GcmSiv, TC04) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (16 bytes) */ "01000000000000000000000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (32 bytes) */    "743f7c8077ab25f8624e2e948579cf77"
                                 "303aaf90f6fe21199c6068577437a0c4"));
}

TEST(Aes128GcmSiv, TC05) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (32 bytes) */ "01000000000000000000000000000000"
                                 "02000000000000000000000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (48 bytes) */    "84e07e62ba83a6585417245d7ec413a9"
                                 "fe427d6315c09b57ce45f2e3936a9445"
                                 "1a8e45dcd4578c667cd86847bf6155ff"));
}

TEST(Aes128GcmSiv, TC06) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (48 bytes) */ "01000000000000000000000000000000"
                                 "02000000000000000000000000000000"
                                 "03000000000000000000000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (64 bytes) */    "3fd24ce1f5a67b75bf2351f181a475c7"
                                 "b800a5b4d3dcf70106b1eea82fa1d64d"
                                 "f42bf7226122fa92e17a40eeaac1201b"
                                 "5e6e311dbf395d35b0fe39c2714388f8"));
}

TEST(Aes128GcmSiv, TC07) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (64 bytes) */ "01000000000000000000000000000000"
                                 "02000000000000000000000000000000"
                                 "03000000000000000000000000000000"
                                 "04000000000000000000000000000000",
      /* AAD (0 bytes) */        "",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (80 bytes) */    "2433668f1058190f6d43e360f4f35cd8"
                                 "e475127cfca7028ea8ab5c20f7ab2af0"
                                 "2516a2bdcbc08d521be37ff28c152bba"
                                 "36697f25b4cd169c6590d1dd39566d3f"
                                 "8a263dd317aa88d56bdf3936dba75bb8"));
}

TEST(Aes128GcmSiv, TC08) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (8 bytes) */  "0200000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (24 bytes) */    "1e6daba35669f4273b0a1a2560969cdf"
                                 "790d99759abd1508"));
}

TEST(Aes128GcmSiv, TC09) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (12 bytes) */ "020000000000000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (28 bytes) */    "296c7889fd99f41917f4462008299c51"
                                 "02745aaa3a0c469fad9e075a"));
}

TEST(Aes128GcmSiv, TC10) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (16 bytes) */ "02000000000000000000000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (32 bytes) */    "e2b0c5da79a901c1745f700525cb335b"
                                 "8f8936ec039e4e4bb97ebd8c4457441f"));
}

TEST(Aes128GcmSiv, TC11) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (32 bytes) */ "02000000000000000000000000000000"
                                 "03000000000000000000000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (48 bytes) */    "620048ef3c1e73e57e02bb8562c416a3"
                                 "19e73e4caac8e96a1ecb2933145a1d71"
                                 "e6af6a7f87287da059a71684ed3498e1"));
}

TEST(Aes128GcmSiv, TC12) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (48 bytes) */ "02000000000000000000000000000000"
                                 "03000000000000000000000000000000"
                                 "04000000000000000000000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (64 bytes) */    "50c8303ea93925d64090d07bd109dfd9"
                                 "515a5a33431019c17d93465999a8b005"
                                 "3201d723120a8562b838cdff25bf9d1e"
                                 "6a8cc3865f76897c2e4b245cf31c51f2"));
}

TEST(Aes128GcmSiv, TC13) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (64 bytes) */ "02000000000000000000000000000000"
                                 "03000000000000000000000000000000"
                                 "04000000000000000000000000000000"
                                 "05000000000000000000000000000000",
      /* AAD (1 bytes) */        "01",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (80 bytes) */    "2f5c64059db55ee0fb847ed513003746"
                                 "aca4e61c711b5de2e7a77ffd02da42fe"
                                 "ec601910d3467bb8b36ebbaebce5fba3"
                                 "0d36c95f48a3e7980f0e7ac299332a80"
                                 "cdc46ae475563de037001ef84ae21744"));
}

TEST(Aes128GcmSiv, TC14) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (4 bytes) */  "02000000",
      /* AAD (12 bytes) */       "010000000000000000000000",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (20 bytes) */    "a8fe3e8707eb1f84fb28f8cb73de8e99"
                                 "e2f48a14"));
}

TEST(Aes128GcmSiv, TC15) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (20 bytes) */ "03000000000000000000000000000000"
                                 "04000000",
      /* AAD (18 bytes) */       "01000000000000000000000000000000"
                                 "0200",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (36 bytes) */    "6bb0fecf5ded9b77f902c7d5da236a43"
                                 "91dd029724afc9805e976f451e6d87f6"
                                 "fe106514"));
}

TEST(Aes128GcmSiv, TC16) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (18 bytes) */ "03000000000000000000000000000000"
                                 "0400",
      /* AAD (20 bytes) */       "01000000000000000000000000000000"
                                 "02000000",
      /* Key */                  "01000000000000000000000000000000",
      /* Nonce */                "030000000000000000000000",
      /* Result (34 bytes) */    "44d0aaf6fb2f1f34add5e8064e83e12a"
                                 "2adabff9b2ef00fb47920cc72a0c0f13"
                                 "b9fd"));
}

TEST(Aes128GcmSiv, TC17) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (0 bytes) */  "",
      /* AAD (0 bytes) */        "",
      /* Key */                  "e66021d5eb8e4f4066d4adb9c33560e4",
      /* Nonce */                "f46e44bb3da0015c94f70887",
      /* Result (16 bytes) */    "a4194b79071b01a87d65f706e3949578"));
}

TEST(Aes128GcmSiv, TC18) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (3 bytes) */  "7a806c",
      /* AAD (5 bytes) */        "46bb91c3c5",
      /* Key */                  "36864200e0eaf5284d884a0e77d31646",
      /* Nonce */                "bae8e37fc83441b16034566b",
      /* Result (19 bytes) */    "af60eb711bd85bc1e4d3e0a462e074ee"
                                 "a428a8"));
}

TEST(Aes128GcmSiv, TC19) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (6 bytes) */  "bdc66f146545",
      /* AAD (10 bytes) */       "fc880c94a95198874296",
      /* Key */                  "aedb64a6c590bc84d1a5e269e4b47801",
      /* Nonce */                "afc0577e34699b9e671fdd4f",
      /* Result (22 bytes) */    "bb93a3e34d3cd6a9c45545cfc11f03ad"
                                 "743dba20f966"));
}

TEST(Aes128GcmSiv, TC20) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (9 bytes) */  "1177441f195495860f",
      /* AAD (15 bytes) */       "046787f3ea22c127aaf195d1894728",
      /* Key */                  "d5cc1fd161320b6920ce07787f86743b",
      /* Nonce */                "275d1ab32f6d1f0434d8848c",
      /* Result (25 bytes) */    "4f37281f7ad12949d01d02fd0cd174c8"
                                 "4fc5dae2f60f52fd2b"));
}

TEST(Aes128GcmSiv, TC21) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (12 bytes) */ "9f572c614b4745914474e7c7",
      /* AAD (20 bytes) */       "c9882e5386fd9f92ec489c8fde2be2cf"
                                 "97e74e93",
      /* Key */                  "b3fed1473c528b8426a582995929a149",
      /* Nonce */                "9e9ad8780c8d63d0ab4149c0",
      /* Result (28 bytes) */    "f54673c5ddf710c745641c8bc1dc2f87"
                                 "1fb7561da1286e655e24b7b0"));
}

TEST(Aes128GcmSiv, TC22) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (15 bytes) */ "0d8c8451178082355c9e940fea2f58",
      /* AAD (25 bytes) */       "2950a70d5a1db2316fd568378da107b5"
                                 "2b0da55210cc1c1b0a",
      /* Key */                  "2d4ed87da44102952ef94b02b805249b",
      /* Nonce */                "ac80e6f61455bfac8308a2d4",
      /* Result (31 bytes) */    "c9ff545e07b88a015f05b274540aa183"
                                 "b3449b9f39552de99dc214a1190b0b"));
}

TEST(Aes128GcmSiv, TC23) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (18 bytes) */ "6b3db4da3d57aa94842b9803a96e07fb"
                                 "6de7",
      /* AAD (30 bytes) */       "1860f762ebfbd08284e421702de0de18"
                                 "baa9c9596291b08466f37de21c7f",
      /* Key */                  "bde3b2f204d1e9f8b06bc47f9745b3d1",
      /* Nonce */                "ae06556fb6aa7890bebc18fe",
      /* Result (34 bytes) */    "6298b296e24e8cc35dce0bed484b7f30"
                                 "d5803e377094f04709f64d7b985310a4"
                                 "db84"));
}

TEST(Aes128GcmSiv, TC24) {
  ASSERT_NO_FATAL_FAILURE(TestAes128GcmSiv_TC(
      /* Plaintext (21 bytes) */ "e42a3c02c25b64869e146d7b233987bd"
                                 "dfc240871d",
      /* AAD (35 bytes) */       "7576f7028ec6eb5ea7e298342a94d4b2"
                                 "02b370ef9768ec6561c4fe6b7e7296fa"
                                 "859c21",
      /* Key */                  "f901cfe8a69615a93fdf7a98cad48179",
      /* Nonce */                "6245709fb18853f68d833640",
      /* Result (37 bytes) */    "391cc328d484a4f46406181bcd62efd9"
                                 "b3ee197d052d15506c84a9edd65e13e9"
                                 "d24a2a6e70"));
}
// clang-format off

} // namespace
} // namespace testing
} // namespace crypto
