aboutsummaryrefslogtreecommitdiff
path: root/cc/experimental
diff options
context:
space:
mode:
authorTink Team <tink-dev@google.com>2021-09-01 05:45:27 -0700
committerCopybara-Service <copybara-worker@google.com>2021-09-01 05:46:25 -0700
commit70a0e55376a879011540bcdf96dd6a9dfd6517bc (patch)
tree901091cbc781ff0ec8263ca67b56eb9547d99d39 /cc/experimental
parent86ee8737b44b5383c3ecd3346334fd3a360afad2 (diff)
downloadtink-70a0e55376a879011540bcdf96dd6a9dfd6517bc.tar.gz
Add AES versions of dilithium to the subtle wrappers.
PiperOrigin-RevId: 394210115
Diffstat (limited to 'cc/experimental')
-rw-r--r--cc/experimental/pqcrypto/signature/dilithium_sign_key_manager.cc8
-rw-r--r--cc/experimental/pqcrypto/signature/dilithium_sign_key_manager_test.cc7
-rw-r--r--cc/experimental/pqcrypto/signature/dilithium_verify_key_manager.cc4
-rw-r--r--cc/experimental/pqcrypto/signature/dilithium_verify_key_manager_test.cc6
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.cc74
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign_test.cc47
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.cc97
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.h4
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify_test.cc1753
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_key.cc91
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_key.h33
-rw-r--r--cc/experimental/pqcrypto/signature/subtle/dilithium_key_test.cc82
12 files changed, 1481 insertions, 725 deletions
diff --git a/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager.cc b/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager.cc
index 46087c07c..fc3e92bd0 100644
--- a/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager.cc
+++ b/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager.cc
@@ -57,8 +57,9 @@ StatusOr<DilithiumPrivateKey> DilithiumSignKeyManager::CreateKey(
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(key_format.key_size());
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ key_format.key_size(),
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
if (!key_pair.status().ok()) {
return key_pair.status();
}
@@ -77,7 +78,8 @@ DilithiumSignKeyManager::PublicKeySignFactory::Create(
util::SecretDataFromStringView(private_key.key_value());
util::StatusOr<DilithiumPrivateKeyPqclean> dilithium_private_key =
- DilithiumPrivateKeyPqclean::NewPrivateKey(sk_data);
+ DilithiumPrivateKeyPqclean::NewPrivateKey(
+ sk_data, subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
if (!dilithium_private_key.ok()) return dilithium_private_key.status();
diff --git a/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager_test.cc b/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager_test.cc
index ad15e8b33..c92f26271 100644
--- a/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager_test.cc
+++ b/cc/experimental/pqcrypto/signature/dilithium_sign_key_manager_test.cc
@@ -167,7 +167,8 @@ TEST_P(DilithiumSignKeyManagerTest, Create) {
util::StatusOr<DilithiumPublicKeyPqclean> dilithium_public_key =
DilithiumPublicKeyPqclean::NewPublicKey(
- private_key->public_key().key_value());
+ private_key->public_key().key_value(),
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
util::StatusOr<std::unique_ptr<PublicKeyVerify>> verifier =
subtle::DilithiumAvx2Verify::New(*dilithium_public_key);
@@ -195,7 +196,9 @@ TEST_P(DilithiumSignKeyManagerTest, CreateDifferentKey) {
std::string bad_public_key_data(test_case.public_key_size, '@');
util::StatusOr<DilithiumPublicKeyPqclean> dilithium_public_key =
- DilithiumPublicKeyPqclean::NewPublicKey(bad_public_key_data);
+ DilithiumPublicKeyPqclean::NewPublicKey(
+ bad_public_key_data,
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
util::StatusOr<std::unique_ptr<PublicKeyVerify>> verifier =
subtle::DilithiumAvx2Verify::New(*dilithium_public_key);
ASSERT_THAT(verifier.status(), IsOk());
diff --git a/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager.cc b/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager.cc
index 134403e1a..cfba6ca1b 100644
--- a/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager.cc
+++ b/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager.cc
@@ -48,7 +48,9 @@ StatusOr<std::unique_ptr<PublicKeyVerify>>
DilithiumVerifyKeyManager::PublicKeyVerifyFactory::Create(
const DilithiumPublicKey& public_key) const {
util::StatusOr<DilithiumPublicKeyPqclean> dilithium_public_key =
- DilithiumPublicKeyPqclean::NewPublicKey(public_key.key_value());
+ DilithiumPublicKeyPqclean::NewPublicKey(
+ public_key.key_value(),
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
if (!dilithium_public_key.ok()) return dilithium_public_key.status();
diff --git a/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager_test.cc b/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager_test.cc
index 478577063..8ca697cbc 100644
--- a/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager_test.cc
+++ b/cc/experimental/pqcrypto/signature/dilithium_verify_key_manager_test.cc
@@ -138,7 +138,8 @@ TEST_P(DilithiumVerifyKeyManagerTest, Create) {
util::StatusOr<DilithiumPrivateKeyPqclean> dilithium_private_key =
DilithiumPrivateKeyPqclean::NewPrivateKey(
- util::SecretDataFromStringView(private_key->key_value()));
+ util::SecretDataFromStringView(private_key->key_value()),
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
ASSERT_THAT(dilithium_private_key.status(), IsOk());
util::StatusOr<std::unique_ptr<PublicKeySign>> direct_signer =
@@ -172,7 +173,8 @@ TEST_P(DilithiumVerifyKeyManagerTest, CreateDifferentPublicKey) {
util::StatusOr<DilithiumPrivateKeyPqclean> dilithium_private_key =
DilithiumPrivateKeyPqclean::NewPrivateKey(
- util::SecretDataFromStringView(private_key->key_value()));
+ util::SecretDataFromStringView(private_key->key_value()),
+ subtle::DilithiumSeedExpansion::SHAKE_SEED_EXPANSION);
ASSERT_THAT(dilithium_private_key.status(), IsOk());
util::StatusOr<std::unique_ptr<PublicKeySign>> direct_signer =
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.cc
index f10bbd5f8..8d01c3160 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.cc
@@ -26,13 +26,17 @@
#include "absl/memory/memory.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
+#include "tink/experimental/pqcrypto/signature/subtle/dilithium_key.h"
#include "tink/public_key_sign.h"
#include "tink/util/statusor.h"
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -45,7 +49,7 @@ util::StatusOr<std::unique_ptr<PublicKeySign>> DilithiumAvx2Sign::New(
auto status = internal::CheckFipsCompatibility<DilithiumAvx2Sign>();
if (!status.ok()) return status;
- uint32 key_size = private_key.GetKeyData().size();
+ int32_t key_size = private_key.GetKeyData().size();
if (key_size != PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES &&
key_size != PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES &&
@@ -66,40 +70,78 @@ util::StatusOr<std::unique_ptr<PublicKeySign>> DilithiumAvx2Sign::New(
util::StatusOr<std::string> DilithiumAvx2Sign::Sign(
absl::string_view data) const {
size_t sig_length;
- uint32 key_size = private_key_.GetKeyData().size();
+ int32_t key_size = private_key_.GetKeyData().size();
std::string signature;
+ int result = 1;
switch (key_size) {
case PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES: {
- signature.resize(PQCLEAN_DILITHIUM2_AVX2_CRYPTO_BYTES, '0');
- if (PQCLEAN_DILITHIUM2_AVX2_crypto_sign_signature(
+ switch (private_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ signature.resize(PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM2AES_AVX2_crypto_sign_signature(
reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
reinterpret_cast<const uint8_t *>(data.data()), data.size(),
reinterpret_cast<const uint8_t *>(
- private_key_.GetKeyData().data())) != 0) {
- return util::Status(util::error::INTERNAL, "Signing failed.");
+ private_key_.GetKeyData().data()));
+ break;
+ }
+ default: {
+ signature.resize(PQCLEAN_DILITHIUM2_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM2_AVX2_crypto_sign_signature(
+ reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
+ reinterpret_cast<const uint8_t *>(data.data()), data.size(),
+ reinterpret_cast<const uint8_t *>(
+ private_key_.GetKeyData().data()));
+
+ break;
+ }
}
break;
}
case PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES: {
- signature.resize(PQCLEAN_DILITHIUM3_AVX2_CRYPTO_BYTES, '0');
- if (PQCLEAN_DILITHIUM3_AVX2_crypto_sign_signature(
+ switch (private_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ signature.resize(PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM3AES_AVX2_crypto_sign_signature(
+ reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
+ reinterpret_cast<const uint8_t *>(data.data()), data.size(),
+ reinterpret_cast<const uint8_t *>(
+ private_key_.GetKeyData().data()));
+ break;
+ }
+ default: {
+ signature.resize(PQCLEAN_DILITHIUM3_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM3_AVX2_crypto_sign_signature(
reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
reinterpret_cast<const uint8_t *>(data.data()), data.size(),
reinterpret_cast<const uint8_t *>(
- private_key_.GetKeyData().data())) != 0) {
- return util::Status(util::error::INTERNAL, "Signing failed.");
+ private_key_.GetKeyData().data()));
+ break;
+ }
}
break;
}
case PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES: {
- signature.resize(PQCLEAN_DILITHIUM5_AVX2_CRYPTO_BYTES, '0');
- if (PQCLEAN_DILITHIUM5_AVX2_crypto_sign_signature(
+ switch (private_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ signature.resize(PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM5AES_AVX2_crypto_sign_signature(
+ reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
+ reinterpret_cast<const uint8_t *>(data.data()), data.size(),
+ reinterpret_cast<const uint8_t *>(
+ private_key_.GetKeyData().data()));
+ break;
+ }
+ default: {
+ signature.resize(PQCLEAN_DILITHIUM5_AVX2_CRYPTO_BYTES, '0');
+ result = PQCLEAN_DILITHIUM5_AVX2_crypto_sign_signature(
reinterpret_cast<uint8_t *>(signature.data()), &sig_length,
reinterpret_cast<const uint8_t *>(data.data()), data.size(),
reinterpret_cast<const uint8_t *>(
- private_key_.GetKeyData().data())) != 0) {
- return util::Status(util::error::INTERNAL, "Signing failed.");
+ private_key_.GetKeyData().data()));
+ break;
+ }
}
break;
}
@@ -107,6 +149,10 @@ util::StatusOr<std::string> DilithiumAvx2Sign::Sign(
return util::Status(util::error::INTERNAL, "Invalid keysize.");
}
+ if (result != 0) {
+ return util::Status(util::error::INTERNAL, "Signing failed.");
+ }
+
return signature;
}
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign_test.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign_test.cc
index 7818fe042..b79662b6b 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign_test.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign_test.cc
@@ -24,6 +24,7 @@
#include "gtest/gtest.h"
#include "absl/strings/str_cat.h"
#include "tink/config/tink_fips.h"
+#include "tink/experimental/pqcrypto/signature/subtle/dilithium_key.h"
#include "tink/public_key_sign.h"
#include "tink/public_key_verify.h"
#include "tink/util/secret_data.h"
@@ -33,8 +34,11 @@
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -44,8 +48,9 @@ namespace {
struct DilithiumTestCase {
std::string test_name;
- int key_size = 0;
- int signature_length = 0;
+ int32_t key_size;
+ int32_t signature_length;
+ DilithiumSeedExpansion seed_expansion;
};
using ::crypto::tink::test::IsOk;
@@ -69,9 +74,11 @@ TEST(DilithiumAvx2SignTest, InvalidPrivateKeys) {
}
util::SecretData key_data(keysize, 'x');
- EXPECT_FALSE(DilithiumAvx2Sign::New(
- *DilithiumPrivateKeyPqclean::NewPrivateKey(key_data))
- .ok());
+ EXPECT_FALSE(
+ DilithiumAvx2Sign::New(
+ *DilithiumPrivateKeyPqclean::NewPrivateKey(
+ key_data, DilithiumSeedExpansion::SHAKE_SEED_EXPANSION))
+ .ok());
}
}
@@ -85,8 +92,8 @@ TEST_P(DilithiumAvx2SignTest, SignatureLength) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -115,8 +122,8 @@ TEST_P(DilithiumAvx2SignTest, Determinism) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -160,8 +167,8 @@ TEST_P(DilithiumAvx2SignTest, FipsMode) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -174,11 +181,23 @@ INSTANTIATE_TEST_SUITE_P(
DilithiumAvx2SignTests, DilithiumAvx2SignTest,
testing::ValuesIn<DilithiumTestCase>({
{"Dilithium2", PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES,
- PQCLEAN_DILITHIUM2_AVX2_CRYPTO_BYTES},
+ PQCLEAN_DILITHIUM2_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
{"Dilithium3", PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES,
- PQCLEAN_DILITHIUM3_AVX2_CRYPTO_BYTES},
+ PQCLEAN_DILITHIUM3_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
{"Dilithium5", PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES,
- PQCLEAN_DILITHIUM5_AVX2_CRYPTO_BYTES},
+ PQCLEAN_DILITHIUM5_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium2Aes", PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium3Aes", PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM3_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium5Aes", PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_BYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
}),
[](const testing::TestParamInfo<DilithiumAvx2SignTest::ParamType>& info) {
return info.param.test_name;
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.cc
index 0bf61a4cc..c98e54f38 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.cc
@@ -25,13 +25,17 @@
#include "absl/memory/memory.h"
#include "absl/strings/str_format.h"
#include "absl/strings/string_view.h"
+#include "tink/experimental/pqcrypto/signature/subtle/dilithium_key.h"
#include "tink/public_key_verify.h"
#include "tink/util/statusor.h"
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -44,7 +48,7 @@ util::StatusOr<std::unique_ptr<PublicKeyVerify>> DilithiumAvx2Verify::New(
auto status = internal::CheckFipsCompatibility<DilithiumAvx2Verify>();
if (!status.ok()) return status;
- uint32 key_size = public_key.GetKeyData().size();
+ int32_t key_size = public_key.GetKeyData().size();
if (key_size != PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES &&
key_size != PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES &&
@@ -63,41 +67,77 @@ util::StatusOr<std::unique_ptr<PublicKeyVerify>> DilithiumAvx2Verify::New(
util::Status DilithiumAvx2Verify::Verify(absl::string_view signature,
absl::string_view data) const {
- uint32 key_size = public_key_.GetKeyData().size();
+ int32_t key_size = public_key_.GetKeyData().size();
+ int result = 1;
+
switch (key_size) {
case PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES: {
- if (0 != PQCLEAN_DILITHIUM2_AVX2_crypto_sign_verify(
- reinterpret_cast<const uint8_t *>(signature.data()),
- signature.size(),
- reinterpret_cast<const uint8_t *>(data.data()), data.size(),
- reinterpret_cast<const uint8_t *>(
- public_key_.GetKeyData().data()))) {
- return util::Status(util::error::INVALID_ARGUMENT,
- "Signature is not valid.");
+ switch (public_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ result = PQCLEAN_DILITHIUM2AES_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+
+ break;
+ }
+ default: {
+ result = PQCLEAN_DILITHIUM2_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+ break;
+ }
}
break;
}
case PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES: {
- if (0 != PQCLEAN_DILITHIUM3_AVX2_crypto_sign_verify(
- reinterpret_cast<const uint8_t *>(signature.data()),
- signature.size(),
- reinterpret_cast<const uint8_t *>(data.data()), data.size(),
- reinterpret_cast<const uint8_t *>(
- public_key_.GetKeyData().data()))) {
- return util::Status(util::error::INVALID_ARGUMENT,
- "Signature is not valid.");
+ switch (public_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ result = PQCLEAN_DILITHIUM3AES_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+ break;
+ }
+ default: {
+ result = PQCLEAN_DILITHIUM3_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+ break;
+ }
}
break;
}
case PQCLEAN_DILITHIUM5_AVX2_CRYPTO_PUBLICKEYBYTES: {
- if (0 != PQCLEAN_DILITHIUM5_AVX2_crypto_sign_verify(
- reinterpret_cast<const uint8_t *>(signature.data()),
- signature.size(),
- reinterpret_cast<const uint8_t *>(data.data()), data.size(),
- reinterpret_cast<const uint8_t *>(
- public_key_.GetKeyData().data()))) {
- return util::Status(util::error::INVALID_ARGUMENT,
- "Signature is not valid.");
+ switch (public_key_.GetSeedExpansion()) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ result = PQCLEAN_DILITHIUM5AES_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+ break;
+ }
+ default: {
+ result = PQCLEAN_DILITHIUM5_AVX2_crypto_sign_verify(
+ reinterpret_cast<const uint8_t *>(signature.data()),
+ signature.size(), reinterpret_cast<const uint8_t *>(data.data()),
+ data.size(),
+ reinterpret_cast<const uint8_t *>(
+ public_key_.GetKeyData().data()));
+ break;
+ }
}
break;
}
@@ -105,6 +145,11 @@ util::Status DilithiumAvx2Verify::Verify(absl::string_view signature,
return util::Status(util::error::INTERNAL, "Invalid keysize.");
}
+ if (result != 0) {
+ return util::Status(util::error::INVALID_ARGUMENT,
+ "Signature is not valid.");
+ }
+
return util::Status::OK;
}
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.h b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.h
index 7aeb3ffa1..ac23656f8 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.h
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify.h
@@ -43,10 +43,10 @@ class DilithiumAvx2Verify : public PublicKeyVerify {
crypto::tink::internal::FipsCompatibility::kNotFips;
private:
- DilithiumPublicKeyPqclean public_key_;
-
explicit DilithiumAvx2Verify(DilithiumPublicKeyPqclean public_key)
: public_key_(public_key) {}
+
+ DilithiumPublicKeyPqclean public_key_;
};
} // namespace subtle
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify_test.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify_test.cc
index 8fd3bd8f0..19e416662 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify_test.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_avx2_verify_test.cc
@@ -26,6 +26,7 @@
#include "absl/strings/str_cat.h"
#include "tink/config/tink_fips.h"
#include "tink/experimental/pqcrypto/signature/subtle/dilithium_avx2_sign.h"
+#include "tink/experimental/pqcrypto/signature/subtle/dilithium_key.h"
#include "tink/public_key_sign.h"
#include "tink/public_key_verify.h"
#include "tink/util/secret_data.h"
@@ -35,8 +36,11 @@
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -46,7 +50,8 @@ namespace {
struct DilithiumTestCase {
std::string test_name;
- int key_size = 0;
+ int32_t key_size;
+ DilithiumSeedExpansion seed_expansion;
};
using ::crypto::tink::test::IsOk;
@@ -62,9 +67,11 @@ TEST(DilithiumAvx2VerifyTest, InvalidPublicKeys) {
// Null public key.
const absl::string_view null_public_key;
- EXPECT_FALSE(DilithiumAvx2Verify::New(
- *DilithiumPublicKeyPqclean::NewPublicKey(null_public_key))
- .ok());
+ EXPECT_FALSE(
+ DilithiumAvx2Verify::New(
+ *DilithiumPublicKeyPqclean::NewPublicKey(
+ null_public_key, DilithiumSeedExpansion::SHAKE_SEED_EXPANSION))
+ .ok());
for (int keysize = 0; keysize < PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES;
keysize++) {
@@ -75,9 +82,10 @@ TEST(DilithiumAvx2VerifyTest, InvalidPublicKeys) {
continue;
}
std::string key(keysize, 'x');
- EXPECT_FALSE(
- DilithiumAvx2Verify::New(*DilithiumPublicKeyPqclean::NewPublicKey(key))
- .ok());
+ EXPECT_FALSE(DilithiumAvx2Verify::New(
+ *DilithiumPublicKeyPqclean::NewPublicKey(
+ key, DilithiumSeedExpansion::SHAKE_SEED_EXPANSION))
+ .ok());
}
}
@@ -91,8 +99,8 @@ TEST_P(DilithiumAvx2VerifyTest, BasicSignVerify) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -126,8 +134,8 @@ TEST_P(DilithiumAvx2VerifyTest, FailsWithWrongMessage) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -161,8 +169,8 @@ TEST_P(DilithiumAvx2VerifyTest, FailsWithWrongSignature) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -197,8 +205,8 @@ TEST_P(DilithiumAvx2VerifyTest, FailsWithByteFlipped) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -235,8 +243,8 @@ TEST_P(DilithiumAvx2VerifyTest, FipsMode) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair =
- DilithiumPrivateKeyPqclean::GenerateKeyPair(test_case.key_size);
+ key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ test_case.key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -254,613 +262,1163 @@ struct TestVector {
// commit 9dddb2a0537734e749ec2c8d4f952cb90cd9e67b
TEST(DilithiumAvx2VerifyTest, Vectors) {
TestVector dilithium_vectors[] = {
+ {/*TEST Dilithium2*/
+ /*public_key= */ absl::HexStringToBytes(
+ "1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
+ "6177E3DE0D4F1EF5847735947B56D08E841DB2444FA2B729ADEB1417CA7ADF42"
+ "A1490C5A097F002760C1FC419BE8325AAD0197C52CED80D3DF18E7774265B289"
+ "912CECA1BE3A90D8A4FDE65C84C610864E47DEECAE3EEA4430B9909559408D11"
+ "A6ABDB7DB9336DF7F96EAB4864A6579791265FA56C348CB7D2DDC90E133A95C3"
+ "F6B13601429F5408BD999AA479C1018159550EC55A113C493BE648F4E036DD4F"
+ "8C809E036B4FBB918C2C484AD8E1747AE05585AB433FDF461AF03C25A7737007"
+ "21AA05F7379FE7F5ED96175D4021076E7F52B60308EFF5D42BA6E093B3D0815E"
+ "B3496646E49230A9B35C8D41900C2BB8D3B446A23127F7E096D85A1C794AD4C8"
+ "9277904FC6BFEC57B1CDD80DF9955030FDCA741AFBDAC827B13CCD5403588AF4"
+ "644003C2265DFA4D419DBCCD2064892386518BE9D51C16498275EBECF5CDC7A8"
+ "20F2C29314AC4A6F08B2252AD3CFB199AA42FE0B4FB571975C1020D949E194EE"
+ "1EAD937BFB550BB3BA8E357A029C29F077554602E1CA2F2289CB9169941C3AAF"
+ "DB8E58C7F2AC77291FB4147C65F6B031D3EBA42F2ACFD9448A5BC22B476E07CC"
+ "CEDA2306C554EC9B7AB655F1D7318C2B7E67D5F69BEDF56000FDA98986B5AB1B"
+ "3A22D8DFD6681697B23A55C96E8710F3F98C044FB15F606313EE56C0F1F5CA0F"
+ "512E08484FCB358E6E528FFA89F8A866CCFF3C0C5813147EC59AF0470C4AAD01"
+ "41D34F101DA2E5E1BD52D0D4C9B13B3E3D87D1586105796754E7978CA1C68A7D"
+ "85DF112B7AB921B359A9F03CBD27A7EAC87A9A80B0B26B4C9657ED85AD7FA261"
+ "6AB345EB8226F69FC0F48183FF574BCD767B5676413ADB12EA2150A0E97683EE"
+ "54243C25B7EA8A718606F86993D8D0DACE834ED341EEB724FE3D5FF0BC8B8A7B"
+ "8104BA269D34133A4CF8300A2D688496B59B6FCBC61AE96062EA1D8E5B410C56"
+ "71F424417ED693329CD983001FFCD10023D598859FB7AD5FD263547117100690"
+ "C6CE7438956E6CC57F1B5DE53BB0DC72CE9B6DEAA85789599A70F0051F1A0E25"
+ "E86D888B00DF36BDBC93EF7217C45ACE11C0790D70E9953E5B417BA2FD9A4CAF"
+ "82F1FCE6F45F53E215B8355EF61D891DF1C794231C162DD24164B534A9D48467"
+ "CDC323624C2F95D4402FF9D66AB1191A8124144AFA35D4E31DC86CAA797C31F6"
+ "8B85854CD959C4FAC5EC53B3B56D374B888A9E979A6576B6345EC8522C960699"
+ "0281BF3EF7C5945D10FD21A2A1D2E5404C5CF21220641391B98BCF825398305B"
+ "56E58B611FE5253203E3DF0D22466A73B3F0FBE43B9A62928091898B8A0E5B26"
+ "9DB586B0E4DDEF50D682A12D2C1BE824149AA254C6381BB412D77C3F9AA902B6"
+ "88C81715A59C839558556D35ED4FC83B4AB18181F40F73DCD76860D8D8BF9452"
+ "0237C2AC0E463BA09E3C9782380DC07FE4FCBA340CC2003439FD231461063807"
+ "0D6C9EEA0A70BAE83B5D5D3C5D3FDE26DD01606C8C520158E7E5104020F248CE"
+ "AA666457C10AEBF068F8A3BD5CE7B52C6AF0ABD5944AF1AD4752C9113976083C"
+ "03B6C34E1D47ED69644CAD782C2F7D05F8A148961D965FA2E1723A8DDEBC22A9"
+ "0CD783DD1F4DB38FB9AE5A6714B3D946781643D317B7DD79381CF789A9588BB3"
+ "E193B92A0B60D6B07D047F6984B0609EC57543C394CA8D5E5BCC2A731A79618B"
+ "D1E2E0DA8704AF98F20F5F8F5452DDF646B95B341DD7F0D2CC1FA15BD9895CD5"
+ "B65AA1CB94B5E2E788FDA9825B656639193D98328154A4F2C35495A38B6EA0D2"
+ "FFAAA35DF92C203C7F31CBBCA7BD03C3C2302190CECD161FD49237E4F839E3F"
+ "3"),
+
+ /*message = */
+ absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
+ "D55B22E75BF57BB556AC8"),
+ /*signature = */
+ absl::HexStringToBytes(
+ "AF5920774603D20E98A79AA3ABFA32B6E22519E673E37AC4AC73FE85341E2C29"
+ "23C1992E1B0BBE3873D7C8FC5662F207BF58EA381CD4A3A0C062DEC45BDAF8BA"
+ "0AA52BEF6FA14F3F6CF28F7620BF94A92CC27D045414A64D65C0149630528024"
+ "28BF3987A2D47516CA5C78AAB96B7BE11BCA5F2C5A26F3FCE3A26E8E09A2738F"
+ "386F75D448F937EF19A846BD4DD949CAAF36DB5629884AF53A023E3F180FE4C0"
+ "FAFF7BE5DFE4E89ADE3095A65600421461AD08C129D6CEA851BB39C0D7A7D151"
+ "405689A091FA4DEBAC373CF54AE078F0AF7557BBC6F06A535AE8949E0C65308A"
+ "59840072375295802D0E2CE9A3DA98426A00FF03FE80218C0EEC8EFE581CB9CC"
+ "9A7D66B20645A8CD0490D3CE4F7E6FEAE9C9EB7A57F964D0EBC7C90B7A9F8630"
+ "0B3E8095E64D1294CFC4B4D9E272E8FA8DB5707D7004AF22DBFF9CFD4863DF57"
+ "3FE004341DA3CD4A3082532C2620455FA37C562BAFD5684EA128AFC79E01FC9B"
+ "31E8433BAD7C029F2F13CC10592D2332E3E08B80D350463DE72750B1F806F493"
+ "E143BD5FCA7D1698081B31BF876B2A1BC9DF50952D13B6C1321B1111172145A6"
+ "27AE0B4427B98975CBFFF7D68275754B45B682D709E168522E84FEA7DD3BB0F4"
+ "1505FF71926431D1A90D4CBF9A527AD4E284976FFF8BD9D6224A4F260391A987"
+ "FB6DA6EE42C2A4900F407CE1F02E322475D313FBEBB68C2E05730809448A7428"
+ "A5940139EBDF1B5556FCC5D42E1A13F32230CB6F0724831D0D071BBA5A670480"
+ "6F475B74BA91B6E385D48620958D0AB1BF2B184E10F3E753B71337BE9EB65378"
+ "6785B43AC7E5C494AC1BCB043D461425B36098AC93055A0105AB8523B61D024A"
+ "6E9B56A42D3C04726512AE4CFE05710446B06F694234EE4FA8FEEDDDC5F28A65"
+ "EDE2EB58E965FE3627A571BC45B397ED092AB4BE00041729C4D192FE30678279"
+ "D223A848CF4366E92B3F68DEE97C9B4A7FF22F937BE6C56639961DB29FA3CFEC"
+ "FFF293140886FFB92EBC79DAB59CEAF869C64F8EAF585CE97DD6B78F892772DB"
+ "88A958CF0AB557A7FAA83FE621477E2B84497AB5A8ECF4A7BD32DFB902F05D2C"
+ "A31047D0F1919ADDE1EE6DFD58E59BC4DAB3CCBBA36AAAF6AFCCC7B095CA94A1"
+ "95BE9A289526B588C3A9C56876FC415D521D442BAC0298D302419AD527DA249C"
+ "2A660CD064213FFAD563183F37972578EEB9F70AC67AEE6CC2B71F283A95930B"
+ "554738555791C25E7A399E685636D58D69CB6BE793B45C1969E7D5615627EBC3"
+ "2EED45440F87880D2829FA4FC871866164D259ED95D2731871017FF51894066F"
+ "AE1FFA6F4B4A6F84FCFFDA09E718FA17135EDB3F48558D5BA67F9E6F0900340B"
+ "D04DFE59B7BD67745884FB84AE3F8EE763D202743652D4F7333450580490B9C7"
+ "44935B19C1D5FB0DB5FBB461411362838037EB7EC3F63F26C893E7CC1C3B3F47"
+ "67ABAE00FEB7BB99B1420BB29EA614747896D9EDCF8107FE504C9C308A8264DA"
+ "CE318D87CFE4761803E9A60DEFA6144AABC1F10A45B140DED754E73586C467BB"
+ "7BF19EDEF25BE0C65E93C5E5EB8F880CCE4A858757F8FF56062B1067F4106F76"
+ "B7007F6EA6F945047E85BD0FAD9D26994F678A0612B87CCF9C0CF9A433D889C9"
+ "6E4C12BE372277005B06AD127105D16D8FB142AEAE5373ABD61D9ADCFC5550D6"
+ "23CA3B8824B0E2E08C2BF4E2841EAC4C5DC56CF8954CF207C263F27C9F309F10"
+ "307C0D84A65878425031375DD810D2D7E51098A3814350795C4A077FA40DD44F"
+ "0FA7510F7C3F631407CF34F604C7B335632A20D2AD419BD7CC6D4242B1C66C35"
+ "E5A5EDCCB13CA37D3B50465F3B4AAFF7E3161E7936088AE08401FD2C37D67A2F"
+ "F91D3E6F08686D64BC2FC6C57106E49FA384AC22219F07EE8996CA3DFF59DCC5"
+ "092A4BADBE87AEDE7F69A04C79B33BDF35D4A0E4CB4B55019CB0BF275295B93B"
+ "DABEA516CA2B616A56918600B724BE7A01EC4EF54312B30D66F507815F2780FF"
+ "EE7C30F8425A92252CE550FAB4E902E7B382D46DBD20EFE1BB0EF8A496873C09"
+ "C4CEB0303C7F1DABA0102DE94190B6AC6DC810F72BCA3AA292FF38BD51A7FAB8"
+ "509EC4FBE0EAA3C986166A674B7871155C348C477EF8CEDC832B5ABEE71A8D18"
+ "D06DD0F5221160ABEB71E6E82CFABF731EA3515A76EF07B2C16C63B37F7AB73B"
+ "67F005929A753E453B930C0AF432277FD77D8A1EB8022CDE9665763B014F0A67"
+ "2A04160B0A06F5540F4C264B7F22740690A2352DC863B588303AD51F0AE162BF"
+ "79797F07B534501CBBFDB713A724AA98E19532187180CCFADC6EBE3142FA7DB6"
+ "6CD4DE7B9FBD4C8235686DB68CAF489AFA4E1E87AEF0CEFD8037E3A578EE62EB"
+ "7F94ED5BC0B58EEA4B4C45FC56D31D29944D095AC96C29083DA2C77181D97A55"
+ "FE6E903A2F2783DE0BAA5F47D704785C33E8D5C87ED61E65459167310EB7A995"
+ "74EF819AE9161A3BD09634803D9E1E4EC7386D7946984517213AB9CF66AEA551"
+ "CC457C39F86AF294CF7B073F563ED4DAB9419BDF004BD05C92B4E80EC3CFEAC9"
+ "7E1DDA554FDA625C4B9B039BAA7C5A2F6F97057792483CF5F852D4C3AC71AD50"
+ "F779953DCFE2F63ED235D8E1D5345D6C6DF0555CC2631DEAD9B714BC4C16501E"
+ "01261381F3679715345123388C852D57DCF1941D0911D49FEA7143FD2FC343A5"
+ "075B64CCA48291DC28B83F76074589EAB217C7847840652C0E3AE278B3B6FB0D"
+ "800C5E7DB79D5CB9CC1A87450C00B7677812D22EE20FDE8C1753A7FB93BA8BBB"
+ "8595A6393DF54AA9CDB6E0879A26E49BD3B01513C6053A0746C8596CE5E5B225"
+ "CFCA26AB8BF12F1FE0A647A9E4453039A1226194C46E8B98ACD710F18FB7EC05"
+ "476C1CD8FC3112CCDDB1582B8817C18FE315353E7A47C821E9EE3A43CADE1B80"
+ "D92A0AE8DCEB4DFF766A54DF3665FEFE3C252B72DAD7B1E3359E7FA25562C3E3"
+ "9DB521CE1874111FB090DBD38B3180AD034B57B031DC4DD6AF7C1A8AF3F6CE7E"
+ "DB1A9E4B6D4A5920E3620818820659762EF7A4243F51DF2D8A900737D5810569"
+ "9B4E10CBCB359C7F3A4007697C482050EC33CF8041916A3B919A50D96EF0F589"
+ "FD4556F30DBDD942EAB79DFA97C07E30247074352E1BF98E349CC7EFA5A1B8FC"
+ "E4F18F1FAF6F07C99C321448B0395C8A9CBC466412F89C1A98BF5715842844F0"
+ "E8236FA4696C4658B8FDE4425D09D67A38AC7258E5D5966F2D3FF66A0C0CE76E"
+ "7F6B81A1BCD047FD3A205BF0CCAEA3B11079909C6CE5698F32E1F3409658FFA0"
+ "1EAECB4AE2B092B78989DAAD6623BB11F49F0F8F8699EC05661502FFCAD03CF4"
+ "15191A222D3C4C7B8AB0B5B9BBC2D9DCEFF7202D3F4244494F525364666974C4"
+ "D9E6F5FA0001041927373D5A7680B8C1C9FE2029383B3C484D565F65799D9EA6"
+ "A9ADD2DEE5E7F7F9000000000000000012243248")},
+ {/*TEST Dilithium3*/
+ /*public_key= */ absl::HexStringToBytes(
+ "1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
+ "032369A2CE572FD08BFC304B4848E78D752D77E97A28B99B9BB6FB5C7C633751"
+ "4B321ECDC1FB669F26D4171AB42B72720EE70E0519A6E1D3D6D9914EC1B21CDE"
+ "38B41AAC1D3ABEE6F2B7495C4C820C1FC0CC9E71E24CFB5C9C0D8EEF4264AF48"
+ "4FAE4D6E5DDE65D4DF72B61C6DBD26F861A5E0B853AC5413226FEBBABA5EB474"
+ "C6FB25A82678EA1606B452A23112221017B8C073C10378F9145641A8C078C0ED"
+ "9E421650F748892522AB9FB7D1FF8CF1CC71B8566E8DA33CD7361770C044349A"
+ "C440CCCDC6BBE35E6C55782766F38E688BF47821037299E344ECDECA17AD5D15"
+ "CD27A4F7B070661138EDE8ED72A8959C5AE36B1C46094A53CB21A7A42673F140"
+ "1C2B259494090E2F53D7EE7063431EE5858002D850AF909C3783436010F7EA88"
+ "625A36A0F0189FDE75B7E8C7E4B19D8527008328ADBC929BBC86E964CFC48B8C"
+ "F1DA5D7ED3333AB55C15072832214A779A5FD10CC04005F46C1AA8884A161992"
+ "472FD535B95ED18BDE1C6D8CE678D2817D69F90571103E8520E7313CE7B930C5"
+ "EBFAF2F4EC758B626B5543A068CDE0FD0E94E6A64475B23268BF0380D075508F"
+ "85128CA26F31A90C4A7D28440D54D4066B404588588B4CCF850B975C73AFE68C"
+ "BCD102755F61EB3E60323C576E529EC0BF23BFA5BEA39CB73C37E8395D8DBD4C"
+ "8DC8AB2F70A0BFC3A78C0D413F08D14D632BC0403B0383DBBB22BD9B113C8945"
+ "2AEAB11210097947FEAAA3C9F05D1D300C33A55E3FBC81259E862705C3A13B9E"
+ "E35F6B23ED10F4EDEA9519FA91B7BCD0D501B5ED57D9049FAB91AA779C725FF8"
+ "E9F78017EA7807FA254B7105E826D096C01ADAE2C5D138251A92A478A33373F4"
+ "DE912B83B6FB4B0D0DE6BC1118BB2FCFB07BD227A5F7F991439A13DE1238180C"
+ "DC55119E65C418584D807A926E4A9C0F70155EE196FB07656D9AA7982B8795DB"
+ "AD43D1059CA7F580D3320C0438A5ED5A7032B2E959678410F11AD98BE8826A44"
+ "262615645D759A862B2AC52D3B014A25E8473F1F1EA4CFA819930AB3A34D710D"
+ "EEE70CA13E88FD71AA064E6CB4697DE0E463B1370A6A3BFE98FDFE7B5471FF8D"
+ "F6A6879FBEF9AFB3519D780757D67440AC36E837BAC3833EEAA980BD82B79364"
+ "36A0307D164B6438869AE606E980518E913D0EE302396EF4EB25D9866E4BAFA1"
+ "01E5992931361C4A982253D58ABE3BD57107635A46F09512085F4ADA08EC8B1B"
+ "3910B0153B2AAFCAE5033EDD4153248DCD85B02C9A25D8BDC4068BB857417262"
+ "97A25AEC55C44AA28059B71BB9F34067887ADE4C1CA4908B19B3D78123453876"
+ "DB4DCEB42773069572CD8777E62CFBAF7203F020F281A6678F790720EAA20E34"
+ "327D7A63688B09A01F4D7088F7B5059EDDEB45C0CE39321C79521D79A59ECDD4"
+ "68CED0EA82CA484928702F57D6FC18D347AF3ED22AAF45ABB0F20BAB9E015576"
+ "07AE3ED9CF0E26D34D305449669EC6FC1BECEADCE183F7A594CEA196D059A1E5"
+ "50E547866CC087333F030E628F2CF1147925410ED0421DC7506138B1D19099C6"
+ "95E1AFDACE4153825B66A8ECF55A021D21EB9F848FE55C21769A755FA9807EF7"
+ "3A6C5BA15A06347D3F1C5C619A315598629106AC0B86AE0D8E55578292517258"
+ "AE85F72E737AF5638D096B76A3C57F1B9C80E770A2D4EA4E42FE469AD4212852"
+ "41960A8A86355EF22F583FE3BACADF8DA31D5C2DE254161BC6D10F9841DD27ED"
+ "462A6B94B6DEEA90CBAB687FB84B56395DA763AB4B7FE3095D572D77EFF3FF0D"
+ "8F9D19AA5AF7B676053DBEF64E61DD0A41D402318E3308669106259BF7A4CE31"
+ "B346A9E983EDABA05180149AB057F9972977DA7C6F46E0CDF86F3091F04FD4E8"
+ "3C6022E18CE4382B54D5DABA82E4DF1E53BF31FE4BB65A8524EDA83FD29D07E4"
+ "9747B75291CBC8F8EE1415EC921E19022ADE2C047E4DF3507289E9D79A8E6992"
+ "B48B8864204A416B769CC787D6DF4407E93D121F7FBEE0E408963E0609A9C75C"
+ "B3117CA583DF6E79F31C635BF0F1BE98DF550727A45D3CA337D79DE5DCDB0B91"
+ "CABBC30D7EF0AE1CA1E94904F78C1FD8FBA87545FDC174AD8190F9B5ED7B5869"
+ "494FFA91033FDC6117BF662EC5F2AF2634BA3F8C02210F1C9BCDDA9BB39760E0"
+ "0F25A7270C345666FB6DF85C919AA150CA7FC80FC0EACFE242EF55F429806362"
+ "8E61056C966DB9964428D9CE99108271E29A12328E23999734E036F18A0EB8F0"
+ "30E88062C56717E7A36314E44ECF357FF56EEDF90D3FB11B22A1B25905B379FC"
+ "CA5CA1ACB956E178AD3F51D535AD119813B1E70F7317651BC75CAC64276BB981"
+ "10B54EA0EF34541D73910721D657387677E332E9C8811C3FC1B923B2EE9C512F"
+ "6D09DF372A5F97FAD7123389CEE197B5C269E221D7EED3160A521E56FF8AAFAB"
+ "686179D09D78FC387B3EA6A672034D24AC7999D196B2316475F37DB8E9ED431D"
+ "F58341FA88003D3C6489E78053D8E44CE7E16AEF416859B3D2AECE09086A748B"
+ "7BCFD10F73E3CF8B31F0CC44DA059C69ABA5BC8EFAD45D3F376AF3A0DE6E1698"
+ "78BD842E28798E4743F843844BCDF8506F136391EC8E721DC2B6282D9C50FAB6"
+ "53A6ABF28947420E8C22A9A487D76A938933B34E497DA95394176B2774C09EF0"
+ "BB1ED8C3B131A21957B31A0B47CBFBFF0533CAF33125221DB6BA4A518864892C"
+ "F21D3D4D58B599A37A08F344AA7EF98E7D7D9D3316A6B115D9B8F20F93BC6865"
+ "734699EB54C888D7E5A0ACAFD1915352B294243712CFE82F85248B00045CF3D0"
+ "90C0C00D7CA0E3A1F147703FD94F717E49C81A7C3A76946E20A63F3B7C3EABA9"
+ "225ABE0B34CB0CF235063967D16BC8A69C130CCE287615CC053114167EAC4E95"
+ "BBABDFBBCF96BC0C0D65EA000AEAF490D723955BD1B4D69154D262F6A6D3534B"
+ "B0BC397C29ECC6B1447B75C953AF441DE2E7133A7AC98988A7EF9E6EE63558AA"
+ "ADA0603BD529776F05558D2DF5641C412E7347440F65EB823AFC7CCAE6B97108"
+ "B857287A0486DBBE689D770CA92471309E73AD390ABF56912B2B7C49242CEC15"
+ "7BDBBD493553735CB1D9B40AFC214DA153359C9DF576135901C2FDA58C0095B6"
+ "FCE3FD0731DF34863AF2882D53773CE7C182473722AA79A6B37D3EDDDE38FA71"
+ "DF8C0EDC081EFED8CE606E48299180EC6FE35FAB649910C48A6A29F9D0F85557"
+ "E10BC5AE2ECF028AE399F55CD7976028935CC03C0CAFD5003C9EAED247FBE30A"
+ "284CC4470A5525A6498E1DBBD3085C3F9D77C6064D0181BC5A829561560AA9A4"
+ "EA8173D7937A9428109CB3A66B2B3DE11F88F55AB21EB49B77A39762CA9264E0"
+ "156566765E2D3626B72B80BD1411E4EC53552828A24BC8CDC47F465FDDF4772C"
+ "7BC02066854011287F739ABA6047596747F4234AE227DBFFABF0E13153E2E069"
+ "F0B790251BE877FE5A198E808258639F5E79D3D5CD16F1A573724DD6A9F6990C"
+ "4502334DC66F65493490673AB30DCA7C031F0C212C0D8BC9D0C874B319A97AD1"
+ "CE9395D3D154203156C51CC3B9CB13D0BA1BDF618BC8EECA9DDD9412050CFA09"
+ "235727AA50D46F79AD6F3C5A1BB6B284C8311DCF93756859704DF8FC3BB8D2F5"
+ "E094E04502354942E9C852B208D4901834332EBC603270CB57ED418C34CE48A"
+ "A"),
+
+ /*message = */
+ absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
+ "D55B22E75BF57BB556AC8"),
+ /*signature = */
+ absl::HexStringToBytes(
+ "BBF85FFD0E01C80C8C1C1931CD640BF273D49693C4C4BFF5DD20D94CF3757ABD"
+ "45473B9D01B1871305DA90EDC6707D5417129467F61F723950C1AEDF7055EC1D"
+ "4777AD8808E8B347D1D0921EBAB890CCA8E3A0DFD3003DE9F9CB4A97D884E1DD"
+ "042C958B816F7237032B20F8399A5182F46525EC357D2F03437403E0CB5DCA4A"
+ "13FD2F1B09205B9890F02EE5AF542943E6F9375ED08A38533042D6BBD50F3725"
+ "1B1590F63B4B58A7D1E1F31CE62E3D2AA91E1C767B9C3F5CB26823F97AD1D9FF"
+ "AB2875EB68FFA9B09946EF1D7012C02919EF13CB100C2E2C7987A0A5785B5F3F"
+ "3B948B7FD64B85B165AE2FBF3C47E039C3073CA78FC900BBCDC069FE906885D5"
+ "B13740A223AF5254F98C1D58E2FC92B0373E2A933353CC3EECD39F71D59CFA09"
+ "294E38262A4489400D222982F9C780CD0731D4EED916C5A31ABCD02A590ED8C6"
+ "FFE18B5FC7B6888E74726940D02CCC62D78BCAEDDA2E028E535CDAFC0E091BEF"
+ "50DE2DFD124F1E854F568527AEF4DC8455FDA01B6D0D43048ED5AB42B1D40813"
+ "994B9F6AA0C036C0DCF08F46B00FDA014477CF879B8FE5EAC4541B82DA00B434"
+ "6046865B092ED6AE0115FC834B58F75FF928D7D99AC8691FF70020ABA25480AB"
+ "BCC709E46EC510F4B8CADD60045954D3EDDA7C23E03D91694D3C3EA292C92535"
+ "E6B5FE171C567DF3729406CDBA2A5EFA59F156E9CCD0302FDC0F8BB759B05DFF"
+ "5DD802CE4D5506A19A69D70B3AB48AB17A2FE59589F73083CCA547FFB3F14683"
+ "C914BC1345E7387E831EE6037501495C92C357705A69F952A2F7CD30E03336AF"
+ "AAFC9C56604CD545E82AA12AF058DABA974387FE8DCDEC699A1E3853E26D29E1"
+ "578189AA8C2BBA1550DFBEDD1E4F224EFCD65491E54E56128AE7C2DC8566797A"
+ "BF2D9455915203A5C89E55DD23DF827436A8D6DCC5ACA82F9B183692159EC03F"
+ "2B798E557D147346D835A8D81B2E3D40863966863A54D9C87B5AACE963CD529A"
+ "DBAE07070CEA00B780E18131E64F0AD70E9158F590D00AD9177908B90345FD79"
+ "D0255771C608AF65EE5AC3C50166BAD057380258681941560F1133405FC2D761"
+ "1314B4381D5459DCDEDE4D39F3823BC4422BB1D736E7474A8089F0ECFA3C30AA"
+ "C119FFA42BF743F48E0FDD960292D3E49A14EB0590C8E02E421D54AE8A521951"
+ "5E21895989A0D71D4F451669CD652DA3489E5CDBC0876BA0A0899E7D8773B24A"
+ "FC2CD6D37CA380A5D0DD436304D6E1A4DCD638E8B95E6C95465C6690D4EFE8F4"
+ "4691E48DE22CFC691C7561AD8CC1A2C3CC9FB86FF6F4705A573A720471ED33A0"
+ "0E8A60203818A3961E4D213A78B8626394F75C282315574CCD725A67E20F0BF2"
+ "24BFFCABD702BFD4E1CC5F78BEC0E042E12ED4C9474BDD5EED2AEB53F4A958D7"
+ "F84EFD56EC030A94D200A539DE164E53C82AFE8C5F71BB99A01F7230B7AEBC21"
+ "3ECDDBEF5B9E9064874396F8A91B0575F68A4515DD158178BF277A90A3FEA200"
+ "9200DA2EDA2C8B3A47C104D350DF68E94C8A4023D3AEFBB70718FA2E27E6A5C3"
+ "F9927EC596AB540F463AE010EF71B89B49497F0CFD2939FFAB2A7DD1247DC4A5"
+ "9D8411A843BD84F1EA8DA33C0701D70AC27C4BDBD0D9A0CAB86B1FC5BE12458A"
+ "2580A6CAB4B765B842C67AD54CA5D40A24E2DDBCF01E466E08D9B3449F13E82E"
+ "16D61C723FB9462E97B7ABC70B2210ECA16B160D5B8F98A1794DCA92CD4F027F"
+ "3E4152EA879507DDFE7F1F21514153F036AABC33F172C95A9B774722800F2E08"
+ "CC44F923540D8AF64B429968B280364C1B7B4B3E9BEE40C50002657D994631F3"
+ "3A8F8F134A27EB69BA4395908BA40634B8F2703149275FFBBE8B483EA1BBA91C"
+ "28105136D97C470EE83CD21CEB2B21AAED98DB8AB165A7B4BE559E7EACA68460"
+ "3015BC349B0A51214E4E8FBE1D2D883F79FD3F1EDCDD3FA6D4B5BBD2A5B3003A"
+ "80F1DADE975B502C7F72037316BC55C1E57E500627D60E31087431D2C9D02CA9"
+ "F0EBCCD4BFE3C4BB536D4CFEF7510750452D444BE2C3D64D84A832965305264A"
+ "BB53E3614940F9B2F1EA6F41CA8F69E726690BA630630F8A916EE856268251B7"
+ "73DC2A5DB45D22DFB2439CA4B7AB70215D23E1F2E2617394FF783B0BFF6DF034"
+ "5CC927053D02C65FE2A86DEFBEBF5243A2EF6A6312BAEDB6E60DBB0C67CC9A65"
+ "5585CB458D6A04181194815F03BE87F6E800492A24C5D502D5ECD53DD6DA3679"
+ "95D32E8BBAA3EF62727E8A610E8D6B5C8FABCBE8893BDB5E038627F707E8464C"
+ "55DCBB76F0836ADD298A967C459508BC4E88BA5CA38F5A561A6D2D6CB2178D90"
+ "AC850CA2734B45C4A89AA0F152A3B53BCF1E13532B2B5B3878B205BD2B327DC4"
+ "9EB6660B9511BFAE90C1DEA5BDEB6DC5DA068BCBDC6C093E5727E387374F452F"
+ "963C307DEE865D41AA124CA803C12F9AE9299C3CB1345FCC568C6E71BE3366BF"
+ "30EFEEEFC7693C36ACE576B0D10F402F380009FD0EC068CB2D45984884EDF16B"
+ "C90B0FF6DC96309EA377A3CEC043CB76B6C885BBB848C4745B71E18C58E78050"
+ "E19BD7BE0831EFE9052A6A7DF8D4E8B9FC3E082A4D40AD73E4B3185E2F6DEDE7"
+ "EE51A4068FF2DA57373FD7E7BD46E0080F4C2C1F41BC250E6DA45A341F214771"
+ "F5531A67B0FD97B53CD72CFAC7215BC4111F094030A91383D20182210FCECD75"
+ "E59C4B0B33A3F93D865D847EC241E1B98481C5D9D27F0AE262B328650CDC13CD"
+ "99866BE9A5A030E83D84E32BD213C94BD6AF950433A4F00C6149783B00750CDF"
+ "D4F47AE75217EED1F60C366FA02CDB206FEB2A685D6B7D6A4C13553E2BE27794"
+ "F53B0EF57315203263EB026EA5E67067D22F92E26E98DF9AB386C2705B4316A6"
+ "9892688E601E7427595ACEE6E47F5EC598CC48C2F2DA1C32E062A349D89DCC8C"
+ "05C62E7B0CED6F2E93A7BD48A8004A8C5C605DFFC805DE079EDEE7CED98639A9"
+ "2F6CBA92F2089B145D2D61D9638C07347A2EF6B30FD90E111A7F5913F6E18795"
+ "C19E0B9F60F85BD8F5C9A963339441E4A5B79EB2E867961B18A1884A01A74483"
+ "D80B403EFBDBD4EDDDC1922DA3FBB37BEA97E0A5B6343E4367601BD21DB66941"
+ "C2698BF506B04861B5F3D3D80AC6DCB684D9C4369ABD04BC4BDBEF49C66E3844"
+ "513A3F3BDD400C080AC6EAD81E8BB0E7CB36DB7B7EAB4728391857F597A34648"
+ "63C312645B20AF02F7D0BD9A74DE2361A0D2D98A698975B30F1010D90A126078"
+ "584A45FFBCC65B47976AF657EA84E9730D9E363733736AC80103DC1C7573C4DE"
+ "E28A7BAC9EF72CB829450B53EAF984CD01AA31416CE8914B7D7EF849EB9CC172"
+ "D7096DEFDACF596B9B21A573E346A47A5A469E1D7939BE1982CB3954C214ED3A"
+ "3707D740C033E3EF780F4C48BADD863848BBFC9DAA8E3806A84B2CAC0CA23200"
+ "0CAF0203E908FCE18B5D62777225D2D7D584F2ED71885DFAF5A4DBEE02F285BC"
+ "34559B88EA9CE15B47A3B92A8D6F91591C329A5AA21A1BC424BA2BDBD164CE1A"
+ "8B78B38BEF2B47F21F7FB7A3C54E3EA4536E816E01656C8E26AD42F3CB906169"
+ "67C0DD079F956C9F3C844D5F339C62EE8A358C4BEC2D278AF718AD509C6B6661"
+ "3B580443FA6F11CD8D107693B5D7B738AA7E2FE662502D7504A9F596194180F8"
+ "700DC4E6F7E8E7D2307234494B8DF1D57EE14D6C97926EB1D8904D8089BE7D13"
+ "5B13D6DE30AA8720D67159BB50A834DE9079922B88931D458500626834DA040D"
+ "B768DDDBE67A758A02B448E36BA455034ADE36802AA42A7F2F234A5E1CC241E5"
+ "661C63AFCE59DFDCC0898347D2834D7264F5B21A47C5214ADC57AF76CE9EBDB6"
+ "8C71029BCF0C4C745A33454ACF0CF6D5C68DEA06C45E7D4D1755C5ACDC37FC24"
+ "34140EF707FD55FAF06CBB1707C27CE9D905905E37E2F147C9CB8808ECD05DF7"
+ "1FC5F1DAF910D7BD68B6914938BF0CABCF66C905C49563D7D70F2C3D3A4A4F62"
+ "9E3AFDE53BD14CD6E527E4F038D6A331D01468E22DFE93A379B3EC6DA6D1C2F6"
+ "D5EAB141E575F93C8CC5580DF4A3DB5C4C87D8548E9A851946D1B90D7527407F"
+ "1BA1121EAC54A11E6EDA45ABB08A7A78AB36A76EAD7FAC4678E52464EFF398E9"
+ "0215AC316DE5A6EFE5A7B4A95DF92E4129F3F91B316F756708BDF37C01C12BBA"
+ "A091F94884E38AFF3C7B8140888CAB4F7F867EADB0418584B6F770740250936A"
+ "138AFF52888840677D8121C583806FE27104DE528813E56226B652C5869BB500"
+ "303834D9C9D197DBA1DD5C4734307AB8BD006B66EF45ABED2E31377BEAA19DAE"
+ "6EC82AD77C4C07744F9B93A8DD4CEE1A62A552EDF4E277CACFF1F964DA7AF8FA"
+ "FF6B56E3EBC06850A9F76ECFB2C2BAA660958C6D1BA96BA8578D066D6AFE6E8F"
+ "B2052B7421D57DE5AB4C1FD55170E9EE33EB32FB3D2C886142055EE8428BD745"
+ "AABE1D15191FFC93A3FA7A86B427EB2370B78A67A485AF963BBE1F2246119FB4"
+ "69A002D7029FC4F5F7E0125FDA7305ACF6C80C7BD3F668897BA81435F426B842"
+ "5C9855CD46C3448BBAD0739BA88ABC273BCD0FA1FDA7F4F8183B5D73D16C407C"
+ "452AEFA2E3CA9F2D9D638D966A58788B48BFC57D3FC2085FE85A7F7ADDD91EFD"
+ "1BA0226046B127A97BC480479B92881A58A0BC04D8DD9E68B6D2BC5034CF2343"
+ "0D1FE54991A6908B019EE018C843B9FA53EC7EE5F114ABE2B750D4E1E72EAFB4"
+ "FBB33A1E2C4D6272CEE27BBB13B5D23E24F6129CF5825F34AFC056F95F53A09F"
+ "6FCA9435CD5FB6C05F88B4DCE86CEABD7E0C785361D253BB9CDB3A0C6BC85183"
+ "01FF44F9E87F7A97EC9F02FAB5134F3BBFA1CBE44FA83F1C543ED9B870657543"
+ "5AC6A15F7B0DEBA9D45AF554BB0CCBCA12A6C16E5EE6FAD63721E4C3CC8D9EA6"
+ "8C6149993080952407AFA203F504A887B3BF84D2BB6E45E7CC5326533D63963F"
+ "FB72A9272C8FF637BE6E2473E9FCAB6B5E5E7CF3EDBDDAEF51C98D53170F9B64"
+ "BCA5D49F76AF176D01A6F2ECB339151F49E49A8F6E286C6D4122D650D5015910"
+ "FF7F28024693895C5803DDFFCB1EDC4679C8F535AC1597D9B28AC46E62888101"
+ "29C179556AF7882DEE17D58A97F434DF83646B33CFBAB90A6250851CF53D4BDB"
+ "4526337DCCB9D98A921676B51365DD08A5304D2A93534C52427E9AE5C1440592"
+ "C5536E171CF4FD1F43578FEAFB32FF01D4FED635D752568F90ECFBB164A5B176"
+ "3F70C72FD5BCDF61D01FF3236639C91C063C0B7A56AD03F4020E80BD9A5E2F16"
+ "1E0578469B9950266BA96BBB73C08E7FAE856E1703CF3CBD21418089148F7A9F"
+ "40D4D91151DBC4BAE8542359E882A19A9949CED5B75FF7B192DC279B3ED10076"
+ "053F58DE435FC5875654E98633A397141142229D8CD613C66344326D83992B3C"
+ "08F17BE0EC28FBDBABA12CB000B2A2B04E24D0C41BD6B580E999B257C007965C"
+ "4475A9D5314CD6C1FB9FEDD516E6B3C0DDD404D68D78FD4DE40931B1B872D4D0"
+ "1A2D46C9B293900D34EC91D3B693F4E72C228ED0294F6DC9B717260EBE75A471"
+ "EA4D7800A3E7B7B476D64DEA6F4DA726B376F07800DB5F83C0A3DCC2C7026A4C"
+ "378E880994885D6F7A8819D91A2D50D16D22BE592BED38330410E14CDDD4CE0C"
+ "48D62B7797DE44C07F26A79EF3A5830F321A35AC507E943C6DE63FE136823225"
+ "D6FC73D86D4C84399013E064E6683492907C7B78AEF2AAB180DC33E5E6BDBD6D"
+ "490E3AA8BE8E82FA6CB13BEA360C510F9B4B5BA6640427ADDDF3D66DED41D1E2"
+ "A06131E950136842732C273498D6A47CED4ED189B6E739361F68CCA0A99D5602"
+ "B97655AB2682E837DBD688C173DD4950DD4CD4D3A338F3FCFF8C7116EBC630D0"
+ "5AFAB8DF7C7560F4DE9AD92216268EE143A722C03497CE17EFE98F67580F0DDE"
+ "F57F15255E68856D39A4EB338A653346FEDE46663A62307F6590E2EE7AB928AC"
+ "5E8FA163AA74E40255D8D241668A1C717E3F28994350F49908A32E6FEC6206BD"
+ "F7936DD2CF6A87B9994045552ACCE6EAF1294E7327A13E6EAC16221A676F605D"
+ "6DA6365D0DB01135405013F874481A68330455281A41E83DF76D20D1DF75DFEC"
+ "A0917F3E94BED22D1ECED8A9FC7B2A2E4A5B74D0B0C9282BD612A48648993F9F"
+ "012BD70A0E43DC3D1C0A16711EBF6EA479DB941F68A6701B57F7B837B30C0A6D"
+ "771123D6FC70BDBE24440CE4E254A070534F1C1813C516791260A73689DFE1BE"
+ "AD6EBF6AFF7EE48DE1D59C62228B383E0ACA0690F805FEFDC54FC4F974BFACCD"
+ "FE33216CD2BC06BA7C2F55D7A0708C48014FF0C535CD83D54708FD703E8EF510"
+ "FA6072E25FDAEB9533D4806053076CB8E4FE6946FD1A670D1BDA92311D5ED5FA"
+ "245FA74A6F04AE66E3C9E0A7182CFDB210E5A2F28C95439964742A987A162985"
+ "DB91DF91D9529D8B850B8628A9C5C8455BDB417C927224A9A8FFCDFE00C228FA"
+ "284C5052577098151E33787F8287CB0D2431324555848A8D9CDFE3E4F0F14261"
+ "D0FBFC023C596C749EAEFB0A1784C8CFE5E7448A989FD8D94366B4C7D6FF0000"
+ "0000000000000000000000070F1E232B32383E")},
+ {/*TEST Dilithium5*/
+ /*public_key= */ absl::HexStringToBytes(
+ "1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
+ "032369A2CE572FD08BFC304B4848E78D752D77E97A28B99B9BB6FB5C7C633751"
+ "4B321ECDC1FB669F26D4171AB42B72720EE70E0519A6E1D3D6D9914EC1B21CDE"
+ "38B41AAC1D3ABEE6F2B7495C4C820C1FC0CC9E71E24CFB5C9C0D8EEF4264AF48"
+ "4FAE4D6E5DDE65D4DF72B61C6DBD26F861A5E0B853AC5413226FEBBABA5EB474"
+ "C6FB25A82678EA1606B452A23112221017B8C073C10378F9145641A8C078C0ED"
+ "9E421650F748892522AB9FB7D1FF8CF1CC71B8566E8DA33CD7361770C044349A"
+ "C440CCCDC6BBE35E6C55782766F38E688BF47821037299E344ECDECA17AD5D15"
+ "CD27A4F7B070661138EDE8ED72A8959C5AE36B1C46094A53CB21A7A42673F140"
+ "1C2B259494090E2F53D7EE7063431EE5858002D850AF909C3783436010F7EA88"
+ "625A36A0F0189FDE75B7E8C7E4B19D8527008328ADBC929BBC86E964CFC48B8C"
+ "F1DA5D7ED3333AB55C15072832214A779A5FD10CC04005F46C1AA8884A161992"
+ "472FD535B95ED18BDE1C6D8CE678D2817D69F90571103E8520E7313CE7B930C5"
+ "EBFAF2F4EC758B626B5543A068CDE0FD0E94E6A64475B23268BF0380D075508F"
+ "85128CA26F31A90C4A7D28440D54D4066B404588588B4CCF850B975C73AFE68C"
+ "BCD102755F61EB3E60323C576E529EC0BF23BFA5BEA39CB73C37E8395D8DBD4C"
+ "8DC8AB2F70A0BFC3A78C0D413F08D14D632BC0403B0383DBBB22BD9B113C8945"
+ "2AEAB11210097947FEAAA3C9F05D1D300C33A55E3FBC81259E862705C3A13B9E"
+ "E35F6B23ED10F4EDEA9519FA91B7BCD0D501B5ED57D9049FAB91AA779C725FF8"
+ "E9F78017EA7807FA254B7105E826D096C01ADAE2C5D138251A92A478A33373F4"
+ "DE912B83B6FB4B0D0DE6BC1118BB2FCFB07BD227A5F7F991439A13DE1238180C"
+ "DC55119E65C418584D807A926E4A9C0F70155EE196FB07656D9AA7982B8795DB"
+ "AD43D1059CA7F580D3320C0438A5ED5A7032B2E959678410F11AD98BE8826A44"
+ "262615645D759A862B2AC52D3B014A25E8473F1F1EA4CFA819930AB3A34D710D"
+ "EEE70CA13E88FD71AA064E6CB4697DE0E463B1370A6A3BFE98FDFE7B5471FF8D"
+ "F6A6879FBEF9AFB3519D780757D67440AC36E837BAC3833EEAA980BD82B79364"
+ "36A0307D164B6438869AE606E980518E913D0EE302396EF4EB25D9866E4BAFA1"
+ "01E5992931361C4A982253D58ABE3BD57107635A46F09512085F4ADA08EC8B1B"
+ "3910B0153B2AAFCAE5033EDD4153248DCD85B02C9A25D8BDC4068BB857417262"
+ "97A25AEC55C44AA28059B71BB9F34067887ADE4C1CA4908B19B3D78123453876"
+ "DB4DCEB42773069572CD8777E62CFBAF7203F020F281A6678F790720EAA20E34"
+ "327D7A63688B09A01F4D7088F7B5059EDDEB45C0CE39321C79521D79A59ECDD4"
+ "68CED0EA82CA484928702F57D6FC18D347AF3ED22AAF45ABB0F20BAB9E015576"
+ "07AE3ED9CF0E26D34D305449669EC6FC1BECEADCE183F7A594CEA196D059A1E5"
+ "50E547866CC087333F030E628F2CF1147925410ED0421DC7506138B1D19099C6"
+ "95E1AFDACE4153825B66A8ECF55A021D21EB9F848FE55C21769A755FA9807EF7"
+ "3A6C5BA15A06347D3F1C5C619A315598629106AC0B86AE0D8E55578292517258"
+ "AE85F72E737AF5638D096B76A3C57F1B9C80E770A2D4EA4E42FE469AD4212852"
+ "41960A8A86355EF22F583FE3BACADF8DA31D5C2DE254161BC6D10F9841DD27ED"
+ "462A6B94B6DEEA90CBAB687FB84B56395DA763AB4B7FE3095D572D77EFF3FF0D"
+ "8F9D19AA5AF7B676053DBEF64E61DD0A41D402318E3308669106259BF7A4CE31"
+ "B346A9E983EDABA05180149AB057F9972977DA7C6F46E0CDF86F3091F04FD4E8"
+ "3C6022E18CE4382B54D5DABA82E4DF1E53BF31FE4BB65A8524EDA83FD29D07E4"
+ "9747B75291CBC8F8EE1415EC921E19022ADE2C047E4DF3507289E9D79A8E6992"
+ "B48B8864204A416B769CC787D6DF4407E93D121F7FBEE0E408963E0609A9C75C"
+ "B3117CA583DF6E79F31C635BF0F1BE98DF550727A45D3CA337D79DE5DCDB0B91"
+ "CABBC30D7EF0AE1CA1E94904F78C1FD8FBA87545FDC174AD8190F9B5ED7B5869"
+ "494FFA91033FDC6117BF662EC5F2AF2634BA3F8C02210F1C9BCDDA9BB39760E0"
+ "0F25A7270C345666FB6DF85C919AA150CA7FC80FC0EACFE242EF55F429806362"
+ "8E61056C966DB9964428D9CE99108271E29A12328E23999734E036F18A0EB8F0"
+ "30E88062C56717E7A36314E44ECF357FF56EEDF90D3FB11B22A1B25905B379FC"
+ "CA5CA1ACB956E178AD3F51D535AD119813B1E70F7317651BC75CAC64276BB981"
+ "10B54EA0EF34541D73910721D657387677E332E9C8811C3FC1B923B2EE9C512F"
+ "6D09DF372A5F97FAD7123389CEE197B5C269E221D7EED3160A521E56FF8AAFAB"
+ "686179D09D78FC387B3EA6A672034D24AC7999D196B2316475F37DB8E9ED431D"
+ "F58341FA88003D3C6489E78053D8E44CE7E16AEF416859B3D2AECE09086A748B"
+ "7BCFD10F73E3CF8B31F0CC44DA059C69ABA5BC8EFAD45D3F376AF3A0DE6E1698"
+ "78BD842E28798E4743F843844BCDF8506F136391EC8E721DC2B6282D9C50FAB6"
+ "53A6ABF28947420E8C22A9A487D76A938933B34E497DA95394176B2774C09EF0"
+ "BB1ED8C3B131A21957B31A0B47CBFBFF0533CAF33125221DB6BA4A518864892C"
+ "F21D3D4D58B599A37A08F344AA7EF98E7D7D9D3316A6B115D9B8F20F93BC6865"
+ "734699EB54C888D7E5A0ACAFD1915352B294243712CFE82F85248B00045CF3D0"
+ "90C0C00D7CA0E3A1F147703FD94F717E49C81A7C3A76946E20A63F3B7C3EABA9"
+ "225ABE0B34CB0CF235063967D16BC8A69C130CCE287615CC053114167EAC4E95"
+ "BBABDFBBCF96BC0C0D65EA000AEAF490D723955BD1B4D69154D262F6A6D3534B"
+ "B0BC397C29ECC6B1447B75C953AF441DE2E7133A7AC98988A7EF9E6EE63558AA"
+ "ADA0603BD529776F05558D2DF5641C412E7347440F65EB823AFC7CCAE6B97108"
+ "B857287A0486DBBE689D770CA92471309E73AD390ABF56912B2B7C49242CEC15"
+ "7BDBBD493553735CB1D9B40AFC214DA153359C9DF576135901C2FDA58C0095B6"
+ "FCE3FD0731DF34863AF2882D53773CE7C182473722AA79A6B37D3EDDDE38FA71"
+ "DF8C0EDC081EFED8CE606E48299180EC6FE35FAB649910C48A6A29F9D0F85557"
+ "E10BC5AE2ECF028AE399F55CD7976028935CC03C0CAFD5003C9EAED247FBE30A"
+ "284CC4470A5525A6498E1DBBD3085C3F9D77C6064D0181BC5A829561560AA9A4"
+ "EA8173D7937A9428109CB3A66B2B3DE11F88F55AB21EB49B77A39762CA9264E0"
+ "156566765E2D3626B72B80BD1411E4EC53552828A24BC8CDC47F465FDDF4772C"
+ "7BC02066854011287F739ABA6047596747F4234AE227DBFFABF0E13153E2E069"
+ "F0B790251BE877FE5A198E808258639F5E79D3D5CD16F1A573724DD6A9F6990C"
+ "4502334DC66F65493490673AB30DCA7C031F0C212C0D8BC9D0C874B319A97AD1"
+ "CE9395D3D154203156C51CC3B9CB13D0BA1BDF618BC8EECA9DDD9412050CFA09"
+ "235727AA50D46F79AD6F3C5A1BB6B284C8311DCF93756859704DF8FC3BB8D2F5"
+ "E094E04502354942E9C852B208D4901834332EBC603270CB57ED418C34CE48A"
+ "A"),
+
+ /*message = */
+ absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
+ "D55B22E75BF57BB556AC8"),
+ /*signature = */
+ absl::HexStringToBytes(
+ "BBF85FFD0E01C80C8C1C1931CD640BF273D49693C4C4BFF5DD20D94CF3757ABD"
+ "45473B9D01B1871305DA90EDC6707D5417129467F61F723950C1AEDF7055EC1D"
+ "4777AD8808E8B347D1D0921EBAB890CCA8E3A0DFD3003DE9F9CB4A97D884E1DD"
+ "042C958B816F7237032B20F8399A5182F46525EC357D2F03437403E0CB5DCA4A"
+ "13FD2F1B09205B9890F02EE5AF542943E6F9375ED08A38533042D6BBD50F3725"
+ "1B1590F63B4B58A7D1E1F31CE62E3D2AA91E1C767B9C3F5CB26823F97AD1D9FF"
+ "AB2875EB68FFA9B09946EF1D7012C02919EF13CB100C2E2C7987A0A5785B5F3F"
+ "3B948B7FD64B85B165AE2FBF3C47E039C3073CA78FC900BBCDC069FE906885D5"
+ "B13740A223AF5254F98C1D58E2FC92B0373E2A933353CC3EECD39F71D59CFA09"
+ "294E38262A4489400D222982F9C780CD0731D4EED916C5A31ABCD02A590ED8C6"
+ "FFE18B5FC7B6888E74726940D02CCC62D78BCAEDDA2E028E535CDAFC0E091BEF"
+ "50DE2DFD124F1E854F568527AEF4DC8455FDA01B6D0D43048ED5AB42B1D40813"
+ "994B9F6AA0C036C0DCF08F46B00FDA014477CF879B8FE5EAC4541B82DA00B434"
+ "6046865B092ED6AE0115FC834B58F75FF928D7D99AC8691FF70020ABA25480AB"
+ "BCC709E46EC510F4B8CADD60045954D3EDDA7C23E03D91694D3C3EA292C92535"
+ "E6B5FE171C567DF3729406CDBA2A5EFA59F156E9CCD0302FDC0F8BB759B05DFF"
+ "5DD802CE4D5506A19A69D70B3AB48AB17A2FE59589F73083CCA547FFB3F14683"
+ "C914BC1345E7387E831EE6037501495C92C357705A69F952A2F7CD30E03336AF"
+ "AAFC9C56604CD545E82AA12AF058DABA974387FE8DCDEC699A1E3853E26D29E1"
+ "578189AA8C2BBA1550DFBEDD1E4F224EFCD65491E54E56128AE7C2DC8566797A"
+ "BF2D9455915203A5C89E55DD23DF827436A8D6DCC5ACA82F9B183692159EC03F"
+ "2B798E557D147346D835A8D81B2E3D40863966863A54D9C87B5AACE963CD529A"
+ "DBAE07070CEA00B780E18131E64F0AD70E9158F590D00AD9177908B90345FD79"
+ "D0255771C608AF65EE5AC3C50166BAD057380258681941560F1133405FC2D761"
+ "1314B4381D5459DCDEDE4D39F3823BC4422BB1D736E7474A8089F0ECFA3C30AA"
+ "C119FFA42BF743F48E0FDD960292D3E49A14EB0590C8E02E421D54AE8A521951"
+ "5E21895989A0D71D4F451669CD652DA3489E5CDBC0876BA0A0899E7D8773B24A"
+ "FC2CD6D37CA380A5D0DD436304D6E1A4DCD638E8B95E6C95465C6690D4EFE8F4"
+ "4691E48DE22CFC691C7561AD8CC1A2C3CC9FB86FF6F4705A573A720471ED33A0"
+ "0E8A60203818A3961E4D213A78B8626394F75C282315574CCD725A67E20F0BF2"
+ "24BFFCABD702BFD4E1CC5F78BEC0E042E12ED4C9474BDD5EED2AEB53F4A958D7"
+ "F84EFD56EC030A94D200A539DE164E53C82AFE8C5F71BB99A01F7230B7AEBC21"
+ "3ECDDBEF5B9E9064874396F8A91B0575F68A4515DD158178BF277A90A3FEA200"
+ "9200DA2EDA2C8B3A47C104D350DF68E94C8A4023D3AEFBB70718FA2E27E6A5C3"
+ "F9927EC596AB540F463AE010EF71B89B49497F0CFD2939FFAB2A7DD1247DC4A5"
+ "9D8411A843BD84F1EA8DA33C0701D70AC27C4BDBD0D9A0CAB86B1FC5BE12458A"
+ "2580A6CAB4B765B842C67AD54CA5D40A24E2DDBCF01E466E08D9B3449F13E82E"
+ "16D61C723FB9462E97B7ABC70B2210ECA16B160D5B8F98A1794DCA92CD4F027F"
+ "3E4152EA879507DDFE7F1F21514153F036AABC33F172C95A9B774722800F2E08"
+ "CC44F923540D8AF64B429968B280364C1B7B4B3E9BEE40C50002657D994631F3"
+ "3A8F8F134A27EB69BA4395908BA40634B8F2703149275FFBBE8B483EA1BBA91C"
+ "28105136D97C470EE83CD21CEB2B21AAED98DB8AB165A7B4BE559E7EACA68460"
+ "3015BC349B0A51214E4E8FBE1D2D883F79FD3F1EDCDD3FA6D4B5BBD2A5B3003A"
+ "80F1DADE975B502C7F72037316BC55C1E57E500627D60E31087431D2C9D02CA9"
+ "F0EBCCD4BFE3C4BB536D4CFEF7510750452D444BE2C3D64D84A832965305264A"
+ "BB53E3614940F9B2F1EA6F41CA8F69E726690BA630630F8A916EE856268251B7"
+ "73DC2A5DB45D22DFB2439CA4B7AB70215D23E1F2E2617394FF783B0BFF6DF034"
+ "5CC927053D02C65FE2A86DEFBEBF5243A2EF6A6312BAEDB6E60DBB0C67CC9A65"
+ "5585CB458D6A04181194815F03BE87F6E800492A24C5D502D5ECD53DD6DA3679"
+ "95D32E8BBAA3EF62727E8A610E8D6B5C8FABCBE8893BDB5E038627F707E8464C"
+ "55DCBB76F0836ADD298A967C459508BC4E88BA5CA38F5A561A6D2D6CB2178D90"
+ "AC850CA2734B45C4A89AA0F152A3B53BCF1E13532B2B5B3878B205BD2B327DC4"
+ "9EB6660B9511BFAE90C1DEA5BDEB6DC5DA068BCBDC6C093E5727E387374F452F"
+ "963C307DEE865D41AA124CA803C12F9AE9299C3CB1345FCC568C6E71BE3366BF"
+ "30EFEEEFC7693C36ACE576B0D10F402F380009FD0EC068CB2D45984884EDF16B"
+ "C90B0FF6DC96309EA377A3CEC043CB76B6C885BBB848C4745B71E18C58E78050"
+ "E19BD7BE0831EFE9052A6A7DF8D4E8B9FC3E082A4D40AD73E4B3185E2F6DEDE7"
+ "EE51A4068FF2DA57373FD7E7BD46E0080F4C2C1F41BC250E6DA45A341F214771"
+ "F5531A67B0FD97B53CD72CFAC7215BC4111F094030A91383D20182210FCECD75"
+ "E59C4B0B33A3F93D865D847EC241E1B98481C5D9D27F0AE262B328650CDC13CD"
+ "99866BE9A5A030E83D84E32BD213C94BD6AF950433A4F00C6149783B00750CDF"
+ "D4F47AE75217EED1F60C366FA02CDB206FEB2A685D6B7D6A4C13553E2BE27794"
+ "F53B0EF57315203263EB026EA5E67067D22F92E26E98DF9AB386C2705B4316A6"
+ "9892688E601E7427595ACEE6E47F5EC598CC48C2F2DA1C32E062A349D89DCC8C"
+ "05C62E7B0CED6F2E93A7BD48A8004A8C5C605DFFC805DE079EDEE7CED98639A9"
+ "2F6CBA92F2089B145D2D61D9638C07347A2EF6B30FD90E111A7F5913F6E18795"
+ "C19E0B9F60F85BD8F5C9A963339441E4A5B79EB2E867961B18A1884A01A74483"
+ "D80B403EFBDBD4EDDDC1922DA3FBB37BEA97E0A5B6343E4367601BD21DB66941"
+ "C2698BF506B04861B5F3D3D80AC6DCB684D9C4369ABD04BC4BDBEF49C66E3844"
+ "513A3F3BDD400C080AC6EAD81E8BB0E7CB36DB7B7EAB4728391857F597A34648"
+ "63C312645B20AF02F7D0BD9A74DE2361A0D2D98A698975B30F1010D90A126078"
+ "584A45FFBCC65B47976AF657EA84E9730D9E363733736AC80103DC1C7573C4DE"
+ "E28A7BAC9EF72CB829450B53EAF984CD01AA31416CE8914B7D7EF849EB9CC172"
+ "D7096DEFDACF596B9B21A573E346A47A5A469E1D7939BE1982CB3954C214ED3A"
+ "3707D740C033E3EF780F4C48BADD863848BBFC9DAA8E3806A84B2CAC0CA23200"
+ "0CAF0203E908FCE18B5D62777225D2D7D584F2ED71885DFAF5A4DBEE02F285BC"
+ "34559B88EA9CE15B47A3B92A8D6F91591C329A5AA21A1BC424BA2BDBD164CE1A"
+ "8B78B38BEF2B47F21F7FB7A3C54E3EA4536E816E01656C8E26AD42F3CB906169"
+ "67C0DD079F956C9F3C844D5F339C62EE8A358C4BEC2D278AF718AD509C6B6661"
+ "3B580443FA6F11CD8D107693B5D7B738AA7E2FE662502D7504A9F596194180F8"
+ "700DC4E6F7E8E7D2307234494B8DF1D57EE14D6C97926EB1D8904D8089BE7D13"
+ "5B13D6DE30AA8720D67159BB50A834DE9079922B88931D458500626834DA040D"
+ "B768DDDBE67A758A02B448E36BA455034ADE36802AA42A7F2F234A5E1CC241E5"
+ "661C63AFCE59DFDCC0898347D2834D7264F5B21A47C5214ADC57AF76CE9EBDB6"
+ "8C71029BCF0C4C745A33454ACF0CF6D5C68DEA06C45E7D4D1755C5ACDC37FC24"
+ "34140EF707FD55FAF06CBB1707C27CE9D905905E37E2F147C9CB8808ECD05DF7"
+ "1FC5F1DAF910D7BD68B6914938BF0CABCF66C905C49563D7D70F2C3D3A4A4F62"
+ "9E3AFDE53BD14CD6E527E4F038D6A331D01468E22DFE93A379B3EC6DA6D1C2F6"
+ "D5EAB141E575F93C8CC5580DF4A3DB5C4C87D8548E9A851946D1B90D7527407F"
+ "1BA1121EAC54A11E6EDA45ABB08A7A78AB36A76EAD7FAC4678E52464EFF398E9"
+ "0215AC316DE5A6EFE5A7B4A95DF92E4129F3F91B316F756708BDF37C01C12BBA"
+ "A091F94884E38AFF3C7B8140888CAB4F7F867EADB0418584B6F770740250936A"
+ "138AFF52888840677D8121C583806FE27104DE528813E56226B652C5869BB500"
+ "303834D9C9D197DBA1DD5C4734307AB8BD006B66EF45ABED2E31377BEAA19DAE"
+ "6EC82AD77C4C07744F9B93A8DD4CEE1A62A552EDF4E277CACFF1F964DA7AF8FA"
+ "FF6B56E3EBC06850A9F76ECFB2C2BAA660958C6D1BA96BA8578D066D6AFE6E8F"
+ "B2052B7421D57DE5AB4C1FD55170E9EE33EB32FB3D2C886142055EE8428BD745"
+ "AABE1D15191FFC93A3FA7A86B427EB2370B78A67A485AF963BBE1F2246119FB4"
+ "69A002D7029FC4F5F7E0125FDA7305ACF6C80C7BD3F668897BA81435F426B842"
+ "5C9855CD46C3448BBAD0739BA88ABC273BCD0FA1FDA7F4F8183B5D73D16C407C"
+ "452AEFA2E3CA9F2D9D638D966A58788B48BFC57D3FC2085FE85A7F7ADDD91EFD"
+ "1BA0226046B127A97BC480479B92881A58A0BC04D8DD9E68B6D2BC5034CF2343"
+ "0D1FE54991A6908B019EE018C843B9FA53EC7EE5F114ABE2B750D4E1E72EAFB4"
+ "FBB33A1E2C4D6272CEE27BBB13B5D23E24F6129CF5825F34AFC056F95F53A09F"
+ "6FCA9435CD5FB6C05F88B4DCE86CEABD7E0C785361D253BB9CDB3A0C6BC85183"
+ "01FF44F9E87F7A97EC9F02FAB5134F3BBFA1CBE44FA83F1C543ED9B870657543"
+ "5AC6A15F7B0DEBA9D45AF554BB0CCBCA12A6C16E5EE6FAD63721E4C3CC8D9EA6"
+ "8C6149993080952407AFA203F504A887B3BF84D2BB6E45E7CC5326533D63963F"
+ "FB72A9272C8FF637BE6E2473E9FCAB6B5E5E7CF3EDBDDAEF51C98D53170F9B64"
+ "BCA5D49F76AF176D01A6F2ECB339151F49E49A8F6E286C6D4122D650D5015910"
+ "FF7F28024693895C5803DDFFCB1EDC4679C8F535AC1597D9B28AC46E62888101"
+ "29C179556AF7882DEE17D58A97F434DF83646B33CFBAB90A6250851CF53D4BDB"
+ "4526337DCCB9D98A921676B51365DD08A5304D2A93534C52427E9AE5C1440592"
+ "C5536E171CF4FD1F43578FEAFB32FF01D4FED635D752568F90ECFBB164A5B176"
+ "3F70C72FD5BCDF61D01FF3236639C91C063C0B7A56AD03F4020E80BD9A5E2F16"
+ "1E0578469B9950266BA96BBB73C08E7FAE856E1703CF3CBD21418089148F7A9F"
+ "40D4D91151DBC4BAE8542359E882A19A9949CED5B75FF7B192DC279B3ED10076"
+ "053F58DE435FC5875654E98633A397141142229D8CD613C66344326D83992B3C"
+ "08F17BE0EC28FBDBABA12CB000B2A2B04E24D0C41BD6B580E999B257C007965C"
+ "4475A9D5314CD6C1FB9FEDD516E6B3C0DDD404D68D78FD4DE40931B1B872D4D0"
+ "1A2D46C9B293900D34EC91D3B693F4E72C228ED0294F6DC9B717260EBE75A471"
+ "EA4D7800A3E7B7B476D64DEA6F4DA726B376F07800DB5F83C0A3DCC2C7026A4C"
+ "378E880994885D6F7A8819D91A2D50D16D22BE592BED38330410E14CDDD4CE0C"
+ "48D62B7797DE44C07F26A79EF3A5830F321A35AC507E943C6DE63FE136823225"
+ "D6FC73D86D4C84399013E064E6683492907C7B78AEF2AAB180DC33E5E6BDBD6D"
+ "490E3AA8BE8E82FA6CB13BEA360C510F9B4B5BA6640427ADDDF3D66DED41D1E2"
+ "A06131E950136842732C273498D6A47CED4ED189B6E739361F68CCA0A99D5602"
+ "B97655AB2682E837DBD688C173DD4950DD4CD4D3A338F3FCFF8C7116EBC630D0"
+ "5AFAB8DF7C7560F4DE9AD92216268EE143A722C03497CE17EFE98F67580F0DDE"
+ "F57F15255E68856D39A4EB338A653346FEDE46663A62307F6590E2EE7AB928AC"
+ "5E8FA163AA74E40255D8D241668A1C717E3F28994350F49908A32E6FEC6206BD"
+ "F7936DD2CF6A87B9994045552ACCE6EAF1294E7327A13E6EAC16221A676F605D"
+ "6DA6365D0DB01135405013F874481A68330455281A41E83DF76D20D1DF75DFEC"
+ "A0917F3E94BED22D1ECED8A9FC7B2A2E4A5B74D0B0C9282BD612A48648993F9F"
+ "012BD70A0E43DC3D1C0A16711EBF6EA479DB941F68A6701B57F7B837B30C0A6D"
+ "771123D6FC70BDBE24440CE4E254A070534F1C1813C516791260A73689DFE1BE"
+ "AD6EBF6AFF7EE48DE1D59C62228B383E0ACA0690F805FEFDC54FC4F974BFACCD"
+ "FE33216CD2BC06BA7C2F55D7A0708C48014FF0C535CD83D54708FD703E8EF510"
+ "FA6072E25FDAEB9533D4806053076CB8E4FE6946FD1A670D1BDA92311D5ED5FA"
+ "245FA74A6F04AE66E3C9E0A7182CFDB210E5A2F28C95439964742A987A162985"
+ "DB91DF91D9529D8B850B8628A9C5C8455BDB417C927224A9A8FFCDFE00C228FA"
+ "284C5052577098151E33787F8287CB0D2431324555848A8D9CDFE3E4F0F14261"
+ "D0FBFC023C596C749EAEFB0A1784C8CFE5E7448A989FD8D94366B4C7D6FF0000"
+ "0000000000000000000000070F1E232B32383E")},
+ };
+
+ for (const TestVector& v : dilithium_vectors) {
+ // Create a new verifier.
+ absl::StatusOr<std::unique_ptr<PublicKeyVerify>> verifier =
+ DilithiumAvx2Verify::New(*DilithiumPublicKeyPqclean::NewPublicKey(
+ v.public_key, DilithiumSeedExpansion::SHAKE_SEED_EXPANSION));
+ ASSERT_THAT(verifier.status(), IsOk());
+
+ // Verify signature.
+ Status status = (*verifier)->Verify(v.signature, v.message);
+ EXPECT_THAT(status, IsOk());
+ }
+}
+
+TEST(DilithiumAvx2VerifyTest, AesVectors) {
+ TestVector dilithium_aes_vectors[] = {
{
- /*TEST Dilithium2*/
+ /*TEST Dilithium2 AES*/
/*public_key= */ absl::HexStringToBytes(
"1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
- "6177E3DE0D4F1EF5847735947B56D08E841DB2444FA2B729ADEB1417CA7ADF42"
- "A1490C5A097F002760C1FC419BE8325AAD0197C52CED80D3DF18E7774265B289"
- "912CECA1BE3A90D8A4FDE65C84C610864E47DEECAE3EEA4430B9909559408D11"
- "A6ABDB7DB9336DF7F96EAB4864A6579791265FA56C348CB7D2DDC90E133A95C3"
- "F6B13601429F5408BD999AA479C1018159550EC55A113C493BE648F4E036DD4F"
- "8C809E036B4FBB918C2C484AD8E1747AE05585AB433FDF461AF03C25A7737007"
- "21AA05F7379FE7F5ED96175D4021076E7F52B60308EFF5D42BA6E093B3D0815E"
- "B3496646E49230A9B35C8D41900C2BB8D3B446A23127F7E096D85A1C794AD4C8"
- "9277904FC6BFEC57B1CDD80DF9955030FDCA741AFBDAC827B13CCD5403588AF4"
- "644003C2265DFA4D419DBCCD2064892386518BE9D51C16498275EBECF5CDC7A8"
- "20F2C29314AC4A6F08B2252AD3CFB199AA42FE0B4FB571975C1020D949E194EE"
- "1EAD937BFB550BB3BA8E357A029C29F077554602E1CA2F2289CB9169941C3AAF"
- "DB8E58C7F2AC77291FB4147C65F6B031D3EBA42F2ACFD9448A5BC22B476E07CC"
- "CEDA2306C554EC9B7AB655F1D7318C2B7E67D5F69BEDF56000FDA98986B5AB1B"
- "3A22D8DFD6681697B23A55C96E8710F3F98C044FB15F606313EE56C0F1F5CA0F"
- "512E08484FCB358E6E528FFA89F8A866CCFF3C0C5813147EC59AF0470C4AAD01"
- "41D34F101DA2E5E1BD52D0D4C9B13B3E3D87D1586105796754E7978CA1C68A7D"
- "85DF112B7AB921B359A9F03CBD27A7EAC87A9A80B0B26B4C9657ED85AD7FA261"
- "6AB345EB8226F69FC0F48183FF574BCD767B5676413ADB12EA2150A0E97683EE"
- "54243C25B7EA8A718606F86993D8D0DACE834ED341EEB724FE3D5FF0BC8B8A7B"
- "8104BA269D34133A4CF8300A2D688496B59B6FCBC61AE96062EA1D8E5B410C56"
- "71F424417ED693329CD983001FFCD10023D598859FB7AD5FD263547117100690"
- "C6CE7438956E6CC57F1B5DE53BB0DC72CE9B6DEAA85789599A70F0051F1A0E25"
- "E86D888B00DF36BDBC93EF7217C45ACE11C0790D70E9953E5B417BA2FD9A4CAF"
- "82F1FCE6F45F53E215B8355EF61D891DF1C794231C162DD24164B534A9D48467"
- "CDC323624C2F95D4402FF9D66AB1191A8124144AFA35D4E31DC86CAA797C31F6"
- "8B85854CD959C4FAC5EC53B3B56D374B888A9E979A6576B6345EC8522C960699"
- "0281BF3EF7C5945D10FD21A2A1D2E5404C5CF21220641391B98BCF825398305B"
- "56E58B611FE5253203E3DF0D22466A73B3F0FBE43B9A62928091898B8A0E5B26"
- "9DB586B0E4DDEF50D682A12D2C1BE824149AA254C6381BB412D77C3F9AA902B6"
- "88C81715A59C839558556D35ED4FC83B4AB18181F40F73DCD76860D8D8BF9452"
- "0237C2AC0E463BA09E3C9782380DC07FE4FCBA340CC2003439FD231461063807"
- "0D6C9EEA0A70BAE83B5D5D3C5D3FDE26DD01606C8C520158E7E5104020F248CE"
- "AA666457C10AEBF068F8A3BD5CE7B52C6AF0ABD5944AF1AD4752C9113976083C"
- "03B6C34E1D47ED69644CAD782C2F7D05F8A148961D965FA2E1723A8DDEBC22A9"
- "0CD783DD1F4DB38FB9AE5A6714B3D946781643D317B7DD79381CF789A9588BB3"
- "E193B92A0B60D6B07D047F6984B0609EC57543C394CA8D5E5BCC2A731A79618B"
- "D1E2E0DA8704AF98F20F5F8F5452DDF646B95B341DD7F0D2CC1FA15BD9895CD5"
- "B65AA1CB94B5E2E788FDA9825B656639193D98328154A4F2C35495A38B6EA0D2"
- "FFAAA35DF92C203C7F31CBBCA7BD03C3C2302190CECD161FD49237E4F839E3F"
- "3"),
+ "7E0188CEFDBAB31CF94FABE34E3C383EFCA7FA815D2C70826B1A046818E2A05F"
+ "16B29C1C0BBBFC5707BB7051262FD0A2E34B7107D4619C54FE277549DBC23ED5"
+ "75FB86BF077464CEC3394F2620FA11DDDABB793A9EDD03E66760E98D145234B1"
+ "E8E66E1EB1FFBE34D368617BD99C01AFF2445A27B364ABDDCCD4CCF7CA3EFCB5"
+ "7F5FF27C88AF9EA999C25EC73D1584E11C38898A77308D03097CD4AADE9C5FEB"
+ "D06976E85558798084325BAA98F1C7F7BB8F39FB8B5BC8C14C48D88B8E600D23"
+ "A17F2E342B6AF7DF689B74593DD3D6A8780D88895576526642ACE1C13636BCBB"
+ "BAB8C7837BF10D59AEC63FA8DA5F24DE87190E5224DDE315B86E83A4E2647ECB"
+ "674F51C85DBA38D6C585E61484942DB8C5407D87B8BDD4BB81E6BD2FC88DC6F0"
+ "DFC3B0868B74E1FB36B3D39D0C5478273BEDB1B63AAED9342DF9527535B76C02"
+ "1FB26B994C18B45E1EC91717A34FD2714D39FEBE73CC4A95B17D7CAA8F19A005"
+ "91A3AA7249B084178BFF5A0F95B0E09D04D17021AF73DB6E3CD328492C0308F8"
+ "EF8C50BD3E7C1AD22274DAD26626A21E606AF3F513D1E465AC526593450E1D3E"
+ "02EBBBE48A5D053926E48D15B5F105E1952263A8C8F14C588598BBA82B1CDCB3"
+ "E4E5D1F7D9E811F90F5D899C61F700B56D3B6571FE97E1CAE97B42EC0C4D33FE"
+ "91B4EB518879677FABF02B369D7920AF961B3059683E9275498EC7D574E4C2BD"
+ "CC35EA1C731B151F30188930DBEFDB25DC7A4C6622929D69AFCF67E6493F6F73"
+ "0AD61F86B490936B0CDDC274353A26A69F471EF5B08837356167A9BB9835EBA1"
+ "778B5DF38AE2CE7FFD0817BCD868A758584CD6175A1C48E3F380B7CFB385E585"
+ "35597C6FC0412653F5DBA4BB3996543FEC8EBA277C7481AC0C7D5B7036213A90"
+ "6A65B76DB7F1602C06CD792EEEBD001353CE82DCD9731773B55BB712E3F1C156"
+ "9454903E87ECE65110BE634F6BD5E8622EED535824781C921B3D242AEF8B6867"
+ "84BB870D8866593FC4B9287A5387C3D4AB6E4FFF4752C4CE3B5ED895E7F914F7"
+ "8A25819BD5A3CB909A72D192A77BDDC5CE15137C28FB7FACBF06070A68BC11A8"
+ "95F5D45832A11F81651F720B1FAA979FE7F375DCB11D240F1004E52FDCC07791"
+ "D66C7AAB16BE58AB0A5BEF8425B45D9F9804FCDC83334ECD459DCDCE4EF51092"
+ "A57314F249BFD7B2A11EFB2AC2C83E4F9453880AF8B19323F292D978B4C0EDE2"
+ "D2C78E4A96BF8E6B6F4E4F519F226C9B634E9335C52290119F57B81577BC756F"
+ "3146A056114DC877509F9DA9ADB614278D09284F8746D54420E2373F74AC06FD"
+ "69B6DD4322273337360582661AF26060ECCFA680AA4AB56A5715E169F6202094"
+ "3FDB1509A029A0514C028535EC4413E78A335680F59A078F279768D55B67FC21"
+ "76CAE7AD4CF66765FC3C84FEE0010267747AE8CFDEAB4E47F280ADE944C102A0"
+ "487F5FC2C1A7C81BAF61C574CADC911808E427D99339E54B2CB7CDB673209B8C"
+ "6453EC879202DAB26221CA1C7F4C42D8823E8795E73904A9CB8F154B04D7B621"
+ "B90880542BE50006CEFCB58442F02F92B4FCBBA4EAD0FF87673F4B8BC8160353"
+ "41DCB4B260B93F9C4C6A650AEF7A5BFBECC0A5E5BECDF8AB8F6C42C5DEA1003A"
+ "66386CFE8163229A973FBDEBB589FAA4CA291B2C4CFB095B18F03A7876F87854"
+ "6DBE6D5D75FC6CB2741D3902346F182A1FE400D443256C92EB26B7840EB5FA4B"
+ "CF67C1566E34E868A4F26CB33DA4C4E6904EC3DE60256077B2D0D742B942C738"
+ "2A8214FF519EC3C2C61E841D7860975A2112AFAB01FEC4A221CAD2CD07A742A"
+ "2"),
/*message = */
absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
"D55B22E75BF57BB556AC8"),
/*signature = */
absl::HexStringToBytes(
- "AF5920774603D20E98A79AA3ABFA32B6E22519E673E37AC4AC73FE85341E2C29"
- "23C1992E1B0BBE3873D7C8FC5662F207BF58EA381CD4A3A0C062DEC45BDAF8BA"
- "0AA52BEF6FA14F3F6CF28F7620BF94A92CC27D045414A64D65C0149630528024"
- "28BF3987A2D47516CA5C78AAB96B7BE11BCA5F2C5A26F3FCE3A26E8E09A2738F"
- "386F75D448F937EF19A846BD4DD949CAAF36DB5629884AF53A023E3F180FE4C0"
- "FAFF7BE5DFE4E89ADE3095A65600421461AD08C129D6CEA851BB39C0D7A7D151"
- "405689A091FA4DEBAC373CF54AE078F0AF7557BBC6F06A535AE8949E0C65308A"
- "59840072375295802D0E2CE9A3DA98426A00FF03FE80218C0EEC8EFE581CB9CC"
- "9A7D66B20645A8CD0490D3CE4F7E6FEAE9C9EB7A57F964D0EBC7C90B7A9F8630"
- "0B3E8095E64D1294CFC4B4D9E272E8FA8DB5707D7004AF22DBFF9CFD4863DF57"
- "3FE004341DA3CD4A3082532C2620455FA37C562BAFD5684EA128AFC79E01FC9B"
- "31E8433BAD7C029F2F13CC10592D2332E3E08B80D350463DE72750B1F806F493"
- "E143BD5FCA7D1698081B31BF876B2A1BC9DF50952D13B6C1321B1111172145A6"
- "27AE0B4427B98975CBFFF7D68275754B45B682D709E168522E84FEA7DD3BB0F4"
- "1505FF71926431D1A90D4CBF9A527AD4E284976FFF8BD9D6224A4F260391A987"
- "FB6DA6EE42C2A4900F407CE1F02E322475D313FBEBB68C2E05730809448A7428"
- "A5940139EBDF1B5556FCC5D42E1A13F32230CB6F0724831D0D071BBA5A670480"
- "6F475B74BA91B6E385D48620958D0AB1BF2B184E10F3E753B71337BE9EB65378"
- "6785B43AC7E5C494AC1BCB043D461425B36098AC93055A0105AB8523B61D024A"
- "6E9B56A42D3C04726512AE4CFE05710446B06F694234EE4FA8FEEDDDC5F28A65"
- "EDE2EB58E965FE3627A571BC45B397ED092AB4BE00041729C4D192FE30678279"
- "D223A848CF4366E92B3F68DEE97C9B4A7FF22F937BE6C56639961DB29FA3CFEC"
- "FFF293140886FFB92EBC79DAB59CEAF869C64F8EAF585CE97DD6B78F892772DB"
- "88A958CF0AB557A7FAA83FE621477E2B84497AB5A8ECF4A7BD32DFB902F05D2C"
- "A31047D0F1919ADDE1EE6DFD58E59BC4DAB3CCBBA36AAAF6AFCCC7B095CA94A1"
- "95BE9A289526B588C3A9C56876FC415D521D442BAC0298D302419AD527DA249C"
- "2A660CD064213FFAD563183F37972578EEB9F70AC67AEE6CC2B71F283A95930B"
- "554738555791C25E7A399E685636D58D69CB6BE793B45C1969E7D5615627EBC3"
- "2EED45440F87880D2829FA4FC871866164D259ED95D2731871017FF51894066F"
- "AE1FFA6F4B4A6F84FCFFDA09E718FA17135EDB3F48558D5BA67F9E6F0900340B"
- "D04DFE59B7BD67745884FB84AE3F8EE763D202743652D4F7333450580490B9C7"
- "44935B19C1D5FB0DB5FBB461411362838037EB7EC3F63F26C893E7CC1C3B3F47"
- "67ABAE00FEB7BB99B1420BB29EA614747896D9EDCF8107FE504C9C308A8264DA"
- "CE318D87CFE4761803E9A60DEFA6144AABC1F10A45B140DED754E73586C467BB"
- "7BF19EDEF25BE0C65E93C5E5EB8F880CCE4A858757F8FF56062B1067F4106F76"
- "B7007F6EA6F945047E85BD0FAD9D26994F678A0612B87CCF9C0CF9A433D889C9"
- "6E4C12BE372277005B06AD127105D16D8FB142AEAE5373ABD61D9ADCFC5550D6"
- "23CA3B8824B0E2E08C2BF4E2841EAC4C5DC56CF8954CF207C263F27C9F309F10"
- "307C0D84A65878425031375DD810D2D7E51098A3814350795C4A077FA40DD44F"
- "0FA7510F7C3F631407CF34F604C7B335632A20D2AD419BD7CC6D4242B1C66C35"
- "E5A5EDCCB13CA37D3B50465F3B4AAFF7E3161E7936088AE08401FD2C37D67A2F"
- "F91D3E6F08686D64BC2FC6C57106E49FA384AC22219F07EE8996CA3DFF59DCC5"
- "092A4BADBE87AEDE7F69A04C79B33BDF35D4A0E4CB4B55019CB0BF275295B93B"
- "DABEA516CA2B616A56918600B724BE7A01EC4EF54312B30D66F507815F2780FF"
- "EE7C30F8425A92252CE550FAB4E902E7B382D46DBD20EFE1BB0EF8A496873C09"
- "C4CEB0303C7F1DABA0102DE94190B6AC6DC810F72BCA3AA292FF38BD51A7FAB8"
- "509EC4FBE0EAA3C986166A674B7871155C348C477EF8CEDC832B5ABEE71A8D18"
- "D06DD0F5221160ABEB71E6E82CFABF731EA3515A76EF07B2C16C63B37F7AB73B"
- "67F005929A753E453B930C0AF432277FD77D8A1EB8022CDE9665763B014F0A67"
- "2A04160B0A06F5540F4C264B7F22740690A2352DC863B588303AD51F0AE162BF"
- "79797F07B534501CBBFDB713A724AA98E19532187180CCFADC6EBE3142FA7DB6"
- "6CD4DE7B9FBD4C8235686DB68CAF489AFA4E1E87AEF0CEFD8037E3A578EE62EB"
- "7F94ED5BC0B58EEA4B4C45FC56D31D29944D095AC96C29083DA2C77181D97A55"
- "FE6E903A2F2783DE0BAA5F47D704785C33E8D5C87ED61E65459167310EB7A995"
- "74EF819AE9161A3BD09634803D9E1E4EC7386D7946984517213AB9CF66AEA551"
- "CC457C39F86AF294CF7B073F563ED4DAB9419BDF004BD05C92B4E80EC3CFEAC9"
- "7E1DDA554FDA625C4B9B039BAA7C5A2F6F97057792483CF5F852D4C3AC71AD50"
- "F779953DCFE2F63ED235D8E1D5345D6C6DF0555CC2631DEAD9B714BC4C16501E"
- "01261381F3679715345123388C852D57DCF1941D0911D49FEA7143FD2FC343A5"
- "075B64CCA48291DC28B83F76074589EAB217C7847840652C0E3AE278B3B6FB0D"
- "800C5E7DB79D5CB9CC1A87450C00B7677812D22EE20FDE8C1753A7FB93BA8BBB"
- "8595A6393DF54AA9CDB6E0879A26E49BD3B01513C6053A0746C8596CE5E5B225"
- "CFCA26AB8BF12F1FE0A647A9E4453039A1226194C46E8B98ACD710F18FB7EC05"
- "476C1CD8FC3112CCDDB1582B8817C18FE315353E7A47C821E9EE3A43CADE1B80"
- "D92A0AE8DCEB4DFF766A54DF3665FEFE3C252B72DAD7B1E3359E7FA25562C3E3"
- "9DB521CE1874111FB090DBD38B3180AD034B57B031DC4DD6AF7C1A8AF3F6CE7E"
- "DB1A9E4B6D4A5920E3620818820659762EF7A4243F51DF2D8A900737D5810569"
- "9B4E10CBCB359C7F3A4007697C482050EC33CF8041916A3B919A50D96EF0F589"
- "FD4556F30DBDD942EAB79DFA97C07E30247074352E1BF98E349CC7EFA5A1B8FC"
- "E4F18F1FAF6F07C99C321448B0395C8A9CBC466412F89C1A98BF5715842844F0"
- "E8236FA4696C4658B8FDE4425D09D67A38AC7258E5D5966F2D3FF66A0C0CE76E"
- "7F6B81A1BCD047FD3A205BF0CCAEA3B11079909C6CE5698F32E1F3409658FFA0"
- "1EAECB4AE2B092B78989DAAD6623BB11F49F0F8F8699EC05661502FFCAD03CF4"
- "15191A222D3C4C7B8AB0B5B9BBC2D9DCEFF7202D3F4244494F525364666974C4"
- "D9E6F5FA0001041927373D5A7680B8C1C9FE2029383B3C484D565F65799D9EA6"
- "A9ADD2DEE5E7F7F9000000000000000012243248"),
+ "EB5742B00BD29D1365DE0E434DA8A154B0D939088507EABF21C68FF30BAEA9F0"
+ "E6FEB469B6D4F14FCFA520ED2233A54778CE4FACF32A82593F741C3F1351DC21"
+ "248C06F0688F3566AE473B0602E20DFD336FCDEEB016206C1F3AE2639466F143"
+ "76391C675CF50839FE2C29C3D159BF45413CB9119B7626FE5D4365D7A910D579"
+ "FACCFF17CFF7959FA9DF0E73C3DAECF1892E7C5A19F009A19186A99D2864E951"
+ "6E50FF8703E10BC320C976AA76E43064C88FA5AE0342FEBD206B3D365667CEDD"
+ "C8301C80FD5E0FBB344256907A4634F7C28DF75B6B8C959A9F659584A5E0B1EE"
+ "70C2AA757EE84D878E52992D01EF38D77625CD9544B8281958EC99AC5C735506"
+ "BEA736BB9FD82CCFF5B3FA30BDC61EB6FB16C6729A0657E4DEDA0CC7841E11E0"
+ "5087DF7724A6FCAA8C9F538662FF043C54FFBDC4DCE9F76CF07DB4A2DFF1D1E0"
+ "63D94C71730F0AAABFC67F8E97DBBA4714F84948F4B8E85BFD9B745833B3490C"
+ "5B4FD166B2A128E8843A2C9D3D852599BDC7C365990EC971C4F1D2B1E7E34686"
+ "66FBB7D2CCC31FC1B64D0E97BEFDBE7FD3F47318C3DFD70A9B3A0506CAE57623"
+ "E77E2953E62DFDBD1EC81C63EAA41C58E835206914C5A60884EB0A4DA40F9542"
+ "582FCEB8E5400EDE7C75ABDD0C97DE2C1842AF5D5C667CF49F8C459529EB0CDF"
+ "D2F8F29570D637AE6F1B87B929D9D0C394C7D18C32E3179B4F089C0B2D31DE59"
+ "0E32A06DE6EFE438246864729FE67739BAB47429F23A460BE5E3584432A3CCB7"
+ "39619CF750405157C405C3C8F18C7BD351F3A31F7CB3442BC8ABAF8D1BD7EE2C"
+ "299F12A80A5BAC18FCB3A35E4D908AEFD35E4EC283749960333DA17B670FB434"
+ "D4519CB3A89FCCEE6D9DAA514C4033D44DE0B44BC2313FCC0D971C84798CEC07"
+ "786B9788305950C776D3FA28045E795CE83C9BEE884B4DA3C9C52DBEC6C918DB"
+ "E2925CEEB303D8A9BCF82280EF93487E6F11BF5427274A39D0AEC18A97AA8220"
+ "E32A88DD0FF84A762D08674408197BB33D79F489CBA1EF67EE978E78B7C96720"
+ "E44CE9C63146739311E752671D14529F616EF55B9375DBF5D4065428BD38FEF2"
+ "E348AD8660F7D1A89DF1B4E997D1D9F7A1A3C920D3CDB86279E823F9640D5A0D"
+ "A87C72257F1B147A881FD6E878EB1196C7A2DE7602D21D69055C927BC593CBA3"
+ "80687CE2CA0B7E40EB175C02409282318363D36AC8009306D913758204F394DE"
+ "0D5B49FE7882B3665BEDFF8B6B49AA1A7B26E5CAE27E6A0FCA4986468703B2D3"
+ "2675B3812F59B7E6DCCCE73CAAAF7FE503B766AD05D5B2E5DBC77999B6927158"
+ "90AFF83BFD63205A42A59F6EE3BC13C13E3A53C4130D0FE1024F871C1C149AB6"
+ "DD715EF9BD810237EB0FDCC21645BDF31CE91D324F76E7CFD7F09B0506CBAFF3"
+ "7BE519FBE9C8AC7C44AB78382BCBB2AA303C662BBDAAF8C3B8EA07BCD5EE1EC1"
+ "A57356BE728FEBBD4463502AC998832A3CA40BA5B64F1A2D020BF350017DBEEF"
+ "E43C292CCC13E8B44FF8D929BE6C5B9517FA9EED7259C7C87EA63D54E3F61789"
+ "08CC80EB036B0D0FCD9398CC194B21E45A0E0A9AFF15D2EE81B497BD55DE0B60"
+ "8DC5CF278AEE096D241C73C7385D2087F4B86DD890538F37A297E41A0E7F2F97"
+ "917FBBF369E36EB0A4C12733A8473C7636393FDAF40932E3DD02B67A3A3A838F"
+ "93D1EA0DBBC6D6685C5E82DC2B91D86FBDA077CA826FF515383768F4D03A7BDC"
+ "41F4F91695C01C02666B4134C51EE1F6E6F8283E336D2CCC41154A23211F9DB0"
+ "6530A3707095A4F21F2D3E423B5D059A8DF17E62E84DB880477F0E6A7CA063B5"
+ "2AD819FE9F11D4822467EA80272BBA5A56608FF5748EE521876F89EEF035EB83"
+ "B092E7CDA8329850BCBC323583AE31D9FE5725B8ADCFEB41EE8297ED7D84EF47"
+ "E76B7193891572DE286F1630FB03A93262DE3E893949B0671E7343DADB408E2E"
+ "76793F53AF0346581D41D12CEFA435B9EBAB31134811A237DC0E815B5925C664"
+ "9E6D51AFC7DC9F3416F3A84C1A440D82753D54BF17AC51DD047C3F90B3455D4E"
+ "31B9DF9E41E99F26800FBDDEC1F62777CBA1ED83F15D1E807F4DC638EAC9AD86"
+ "CAE3BF25AB460EEF4E55C37C2225C3BA2FE12D8ADFFAF06488FB839369407ABF"
+ "DDA75DA47446414B76522011EA4084C521DC423FDA10EEDCB864383517936DBA"
+ "DBA395433E4AD4ABBAC6E58F3586BA22908AD9984673B540BA45F01AE9F1CB83"
+ "4B6EA8E56E4280036F7FE9E61C5BA2AABAD0161BE181D1CFBAC87BFA2AF311D1"
+ "14812894C8E92A7243C37C1E3DCBAD00F536DBAEA1156D0062C1265450B005BC"
+ "1C20C637CDDD7378EA4CC08771AE4D5F86A43518B660FDBB93DEBA344026405C"
+ "5BE26FF5F62AA491C5A9593C11FAE4191AF7BAD9044E60D426598A9CF42BD88F"
+ "90A2DDFA8F51E45FB593054680A4871D8A6886D978D82D0F715905E80837D843"
+ "0CE568DD7D70D055EAF6F36DA9335905D4EFBB9CFA2250F61992B162623150AB"
+ "C0F151A55FBB0A9564CAADB134D0619854EA664985B02ABF8A76F7B9A15C95D0"
+ "190FD709226EC0684E804F6E7B5A9CCABF99790232F60132FDBB29024F8B4FE4"
+ "CA7C7234F10B58133098DA1CB0EB456363DE9C9F2D0A3EB3851855A50ADC06FE"
+ "5C4FA08084B2B5056F9DAB5B5107397CF52F98C1AEB5CC62BC53C47F0F1E6F90"
+ "7224C384EDFCE3382D00E04394678564E6914C46848BDE4ECE80394D494D484A"
+ "C4454D06F3188F24001B7CB605BF525CAC0B1B8B1D80B4481D3373828C6C5DAF"
+ "1599EF7C47FB9AF4F790749FB5330AF057C1A9A38B493C2451719D239037009E"
+ "4D09738F07BB4DBFE2093279338F5D2C2524988EF5FB9B3BA864D520A5196681"
+ "57847791960EC557076E628E92A81E7BE0D3D0F5310348BA0ADEA97FE9E6FD5B"
+ "264B31CC1068FF8516A6157E1440AE2DAD72DB883E3FBFCEBA66A595461A9CD4"
+ "BCABB8EB629E0A8ECCF011B30F90FE2EEF622A8C9BD30AFBBAE92EEFE075BB47"
+ "CA020CB1B7309B7B1E46D8999B3A8EAB58A5CD7C79FD287E78EDDB5602C17972"
+ "BD417073D78355E0C83BC0315847D348C7A61054688AA0E633331900F08DC24C"
+ "B324ABCC29A8ADB18F6B2AA74EA5E6E506F5AD4E870DE2B965682D7503368F2E"
+ "971781B5E63FB68507D6781837E91E0C880E094732B65F08DEC61813DE64A626"
+ "9EC0557D3A00611F5D1C9BE130DE092C80E603EEBFCECA6343819CA7FAC59A95"
+ "14691A7376F026C226B345CAF856F04B9A704388F223DE421D95EDD2EC184B94"
+ "582D8A97798FC2E14B6493679A2BBAD860DE418460114E8F218F989CC638A10D"
+ "22284A546C7A7B858C91A4ACBDC0C5D2FD132C3E4B85AEB2BFC0C8D5DBE9ED03"
+ "13181E283944516C7A8596A2A8AAB2DEE1E2E3E5F41F2021263F545D65676F74"
+ "99A2A7B4BFCAD2EDFD00000000000000111F3549"),
},
{
- /*TEST Dilithium3*/
+ /*TEST Dilithium3 AES*/
/*public_key= */ absl::HexStringToBytes(
"1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
- "032369A2CE572FD08BFC304B4848E78D752D77E97A28B99B9BB6FB5C7C633751"
- "4B321ECDC1FB669F26D4171AB42B72720EE70E0519A6E1D3D6D9914EC1B21CDE"
- "38B41AAC1D3ABEE6F2B7495C4C820C1FC0CC9E71E24CFB5C9C0D8EEF4264AF48"
- "4FAE4D6E5DDE65D4DF72B61C6DBD26F861A5E0B853AC5413226FEBBABA5EB474"
- "C6FB25A82678EA1606B452A23112221017B8C073C10378F9145641A8C078C0ED"
- "9E421650F748892522AB9FB7D1FF8CF1CC71B8566E8DA33CD7361770C044349A"
- "C440CCCDC6BBE35E6C55782766F38E688BF47821037299E344ECDECA17AD5D15"
- "CD27A4F7B070661138EDE8ED72A8959C5AE36B1C46094A53CB21A7A42673F140"
- "1C2B259494090E2F53D7EE7063431EE5858002D850AF909C3783436010F7EA88"
- "625A36A0F0189FDE75B7E8C7E4B19D8527008328ADBC929BBC86E964CFC48B8C"
- "F1DA5D7ED3333AB55C15072832214A779A5FD10CC04005F46C1AA8884A161992"
- "472FD535B95ED18BDE1C6D8CE678D2817D69F90571103E8520E7313CE7B930C5"
- "EBFAF2F4EC758B626B5543A068CDE0FD0E94E6A64475B23268BF0380D075508F"
- "85128CA26F31A90C4A7D28440D54D4066B404588588B4CCF850B975C73AFE68C"
- "BCD102755F61EB3E60323C576E529EC0BF23BFA5BEA39CB73C37E8395D8DBD4C"
- "8DC8AB2F70A0BFC3A78C0D413F08D14D632BC0403B0383DBBB22BD9B113C8945"
- "2AEAB11210097947FEAAA3C9F05D1D300C33A55E3FBC81259E862705C3A13B9E"
- "E35F6B23ED10F4EDEA9519FA91B7BCD0D501B5ED57D9049FAB91AA779C725FF8"
- "E9F78017EA7807FA254B7105E826D096C01ADAE2C5D138251A92A478A33373F4"
- "DE912B83B6FB4B0D0DE6BC1118BB2FCFB07BD227A5F7F991439A13DE1238180C"
- "DC55119E65C418584D807A926E4A9C0F70155EE196FB07656D9AA7982B8795DB"
- "AD43D1059CA7F580D3320C0438A5ED5A7032B2E959678410F11AD98BE8826A44"
- "262615645D759A862B2AC52D3B014A25E8473F1F1EA4CFA819930AB3A34D710D"
- "EEE70CA13E88FD71AA064E6CB4697DE0E463B1370A6A3BFE98FDFE7B5471FF8D"
- "F6A6879FBEF9AFB3519D780757D67440AC36E837BAC3833EEAA980BD82B79364"
- "36A0307D164B6438869AE606E980518E913D0EE302396EF4EB25D9866E4BAFA1"
- "01E5992931361C4A982253D58ABE3BD57107635A46F09512085F4ADA08EC8B1B"
- "3910B0153B2AAFCAE5033EDD4153248DCD85B02C9A25D8BDC4068BB857417262"
- "97A25AEC55C44AA28059B71BB9F34067887ADE4C1CA4908B19B3D78123453876"
- "DB4DCEB42773069572CD8777E62CFBAF7203F020F281A6678F790720EAA20E34"
- "327D7A63688B09A01F4D7088F7B5059EDDEB45C0CE39321C79521D79A59ECDD4"
- "68CED0EA82CA484928702F57D6FC18D347AF3ED22AAF45ABB0F20BAB9E015576"
- "07AE3ED9CF0E26D34D305449669EC6FC1BECEADCE183F7A594CEA196D059A1E5"
- "50E547866CC087333F030E628F2CF1147925410ED0421DC7506138B1D19099C6"
- "95E1AFDACE4153825B66A8ECF55A021D21EB9F848FE55C21769A755FA9807EF7"
- "3A6C5BA15A06347D3F1C5C619A315598629106AC0B86AE0D8E55578292517258"
- "AE85F72E737AF5638D096B76A3C57F1B9C80E770A2D4EA4E42FE469AD4212852"
- "41960A8A86355EF22F583FE3BACADF8DA31D5C2DE254161BC6D10F9841DD27ED"
- "462A6B94B6DEEA90CBAB687FB84B56395DA763AB4B7FE3095D572D77EFF3FF0D"
- "8F9D19AA5AF7B676053DBEF64E61DD0A41D402318E3308669106259BF7A4CE31"
- "B346A9E983EDABA05180149AB057F9972977DA7C6F46E0CDF86F3091F04FD4E8"
- "3C6022E18CE4382B54D5DABA82E4DF1E53BF31FE4BB65A8524EDA83FD29D07E4"
- "9747B75291CBC8F8EE1415EC921E19022ADE2C047E4DF3507289E9D79A8E6992"
- "B48B8864204A416B769CC787D6DF4407E93D121F7FBEE0E408963E0609A9C75C"
- "B3117CA583DF6E79F31C635BF0F1BE98DF550727A45D3CA337D79DE5DCDB0B91"
- "CABBC30D7EF0AE1CA1E94904F78C1FD8FBA87545FDC174AD8190F9B5ED7B5869"
- "494FFA91033FDC6117BF662EC5F2AF2634BA3F8C02210F1C9BCDDA9BB39760E0"
- "0F25A7270C345666FB6DF85C919AA150CA7FC80FC0EACFE242EF55F429806362"
- "8E61056C966DB9964428D9CE99108271E29A12328E23999734E036F18A0EB8F0"
- "30E88062C56717E7A36314E44ECF357FF56EEDF90D3FB11B22A1B25905B379FC"
- "CA5CA1ACB956E178AD3F51D535AD119813B1E70F7317651BC75CAC64276BB981"
- "10B54EA0EF34541D73910721D657387677E332E9C8811C3FC1B923B2EE9C512F"
- "6D09DF372A5F97FAD7123389CEE197B5C269E221D7EED3160A521E56FF8AAFAB"
- "686179D09D78FC387B3EA6A672034D24AC7999D196B2316475F37DB8E9ED431D"
- "F58341FA88003D3C6489E78053D8E44CE7E16AEF416859B3D2AECE09086A748B"
- "7BCFD10F73E3CF8B31F0CC44DA059C69ABA5BC8EFAD45D3F376AF3A0DE6E1698"
- "78BD842E28798E4743F843844BCDF8506F136391EC8E721DC2B6282D9C50FAB6"
- "53A6ABF28947420E8C22A9A487D76A938933B34E497DA95394176B2774C09EF0"
- "BB1ED8C3B131A21957B31A0B47CBFBFF0533CAF33125221DB6BA4A518864892C"
- "F21D3D4D58B599A37A08F344AA7EF98E7D7D9D3316A6B115D9B8F20F93BC6865"
- "734699EB54C888D7E5A0ACAFD1915352B294243712CFE82F85248B00045CF3D0"
- "90C0C00D7CA0E3A1F147703FD94F717E49C81A7C3A76946E20A63F3B7C3EABA9"
- "225ABE0B34CB0CF235063967D16BC8A69C130CCE287615CC053114167EAC4E95"
- "BBABDFBBCF96BC0C0D65EA000AEAF490D723955BD1B4D69154D262F6A6D3534B"
- "B0BC397C29ECC6B1447B75C953AF441DE2E7133A7AC98988A7EF9E6EE63558AA"
- "ADA0603BD529776F05558D2DF5641C412E7347440F65EB823AFC7CCAE6B97108"
- "B857287A0486DBBE689D770CA92471309E73AD390ABF56912B2B7C49242CEC15"
- "7BDBBD493553735CB1D9B40AFC214DA153359C9DF576135901C2FDA58C0095B6"
- "FCE3FD0731DF34863AF2882D53773CE7C182473722AA79A6B37D3EDDDE38FA71"
- "DF8C0EDC081EFED8CE606E48299180EC6FE35FAB649910C48A6A29F9D0F85557"
- "E10BC5AE2ECF028AE399F55CD7976028935CC03C0CAFD5003C9EAED247FBE30A"
- "284CC4470A5525A6498E1DBBD3085C3F9D77C6064D0181BC5A829561560AA9A4"
- "EA8173D7937A9428109CB3A66B2B3DE11F88F55AB21EB49B77A39762CA9264E0"
- "156566765E2D3626B72B80BD1411E4EC53552828A24BC8CDC47F465FDDF4772C"
- "7BC02066854011287F739ABA6047596747F4234AE227DBFFABF0E13153E2E069"
- "F0B790251BE877FE5A198E808258639F5E79D3D5CD16F1A573724DD6A9F6990C"
- "4502334DC66F65493490673AB30DCA7C031F0C212C0D8BC9D0C874B319A97AD1"
- "CE9395D3D154203156C51CC3B9CB13D0BA1BDF618BC8EECA9DDD9412050CFA09"
- "235727AA50D46F79AD6F3C5A1BB6B284C8311DCF93756859704DF8FC3BB8D2F5"
- "E094E04502354942E9C852B208D4901834332EBC603270CB57ED418C34CE48A"
- "A"),
+ "939D474DC88E95C73766FD2228B27F4DCFFADFB35D22DCB8050237E977399E52"
+ "E32C9939AEA889B14201AB02A2C4ED8DA6143693A7A6F0E4ACC419C16E5A1B5B"
+ "A0DA078BB888CD4929052D096BF6C444847152CE38959B2DE2372834D59CF4E0"
+ "2942692F97E68401C03B23288A53B9292CC0D0487A356C5B0B0F1399114F4D3D"
+ "25D8C30AF7E528FE62FF0FDD42B5835C59E7F30EF9B56843DC289DD83677D810"
+ "0E2950A86338D1187A6B241CDA7F414808E0266425F4E4278FD1D63194FD531A"
+ "D8994CD2810CDC9F5EA830B3A876BE6D61719B7AD574BC248FEB3D0BE101CB9D"
+ "5218CD474C2063F35459989981B7924EC49646520C16948D2D825F54FB3A99E2"
+ "5129E7943D853CCFFAF6E34B6CD9C6D169D18DFEDC1B226B0FC5A889F291E03D"
+ "782E5CA36257EACC9848BE58C146A81AF8B05B446EB8DFA31A1D99FD1D365E29"
+ "C99C3C669D6348F76474344396995E0618F80CAD1DFCD90299B30B3DBCDD0C2A"
+ "FE678910013649B6B5F03EE50E7A1D6E7115081DF6E822E711783DD383A93A5D"
+ "BE3D223D854F617915FFC89327C616BB0ED65437F0200CEF72EBADDB3E26F9AD"
+ "BAE75F656809847CE4BDDC4931BA09081F884E427ED7C8117CAB12B86AC52D6C"
+ "9D2C54DB8475B2FBF49931C32CA65122ACD3A54EA57B2FE3B8CCB472F66B871A"
+ "D9895A0BD1C71A8232A8327897DA9C848A57ADCCA587B508091E5FAC044BF0A7"
+ "B7F8F98B5EF9C72CC488F290F059C44C32DA22DC941DAD863242AFAB941A003E"
+ "90AE65DD6C27D8DD84F85C9538DF407EE40430AC86C67BB67B8B694730CA3B9A"
+ "D4E0A3EBAEBF221207FC2650957D0E041E68602C2246AD646D32565AD0863465"
+ "11E466FEE7C18934D2C87E49239EC4643B0211203E97F60D13876FB5CB5DC61A"
+ "9156C1AB90DC3A70CD0EBB5757B4F601201C694FBC55DCE12A6033A59B373457"
+ "01121A71B233CEBE7F229E10DDDEDCAD61A0AA713F45F48ACBE4FD9EFA88B119"
+ "8DA00C030A6C662E85E0792FAF2A286D94EA4F04BFB6CD50E09837C2B1362C94"
+ "76B3E268481C2084A3D64B58612CC5754CC23131B0CAD378198FBC39379C46D1"
+ "1F669B65B749001AD28C4B3363C16D11CF14AB986A63A92E0BC7DE55F8B1578B"
+ "692A4F074843DFCFCF66B3059E87BE7B624A93EA07BEA33672F048C91E5EB9DC"
+ "07A61D496397BBED5B9CFDB3EB7C6E96DA540C80684AA96B319456E3798FA145"
+ "3C3B24160ECE6CF7E8A39CD4453FEABADA160A4CB99716BD3D91EE6DD2585153"
+ "DAD576B9F91A54248FD3CDC3ED469DEDF38180F29C6B6707DFD03B00B9DF9857"
+ "31016943F248683E596B0C52950CC1413E6AAC82139ED1F10C02B3661CE4799C"
+ "8478D83D5DFA536BB700C317EC07A59F8A3DE03B18664AE9B2C0648949299D3E"
+ "62F17963648EB7C0BF5EAD36D28DF480D51ACB92E867ADF84C646F2330E34F47"
+ "A8AB992EFB81783B2DE46E22961DDA72615E3B9C2E09C7DA4BBA604B1A22FF43"
+ "D31C539F6979F0A8F6A8DC3CFE2AB38BF642C8DD20992726E90BDA6C1DDA79C7"
+ "1BF7E7BDC82F83EB194378418883A5DDF85DFC2CDF9BF98F4F86891D023111CC"
+ "ACB829B3BD6A8AA8D061E098D79978855FA8712E150C723F6EDAB16B2AF72A71"
+ "ECE74FB4DA1499E1BB66F393DA5ABD60ACB9A40F480D7D39773A0792AAD44551"
+ "13B48F790F82AF69391B9F5F5BF8BD6151BBFF28BE1CD54988DB6E7C7B49AC37"
+ "D022ACDD6E5E96816BACE860C71B909F57621B4BEA989F286C85EAECFE291E49"
+ "3D740D2BB089FDF210F62A9B4A33E80F7BFCC7102FD25957AC237FB9A9E6E114"
+ "1F97B37D417B89DE2D0D2BF8BF3EC7F62D2F86FF1DB89A503164BB8D72BE0A1F"
+ "4A3307661490175D289D38C7E4A00936B147900ADF917584427ED587477A24E7"
+ "74E9F325A0679E69551361FCC26AE3A581002BFAB4BC664709472D14FB65E4B5"
+ "B7606E578FF19F45C459BA2AED0065E7904D6FBB4AA3298264AC7FC0A978425A"
+ "A9FCFA609C90ED18FC038CEA70C3FA5D4B5456AEAFCF8388E8F874E2370E2211"
+ "D040448FD7C81C102B882AFE4591FF41686A88161AD67EBEB52A4CF1FA761B79"
+ "92B28EDED607BE0C567F494A42267CBB9B5C576449A5FBEE81E5B00F7730D81C"
+ "6C2B21188489D6AB8572BB6A2B9345AABF91914FB16BD0084CCDDCE17740A2E7"
+ "D8D45F56692702F320E50FE02DCC1B65F402753352753F21D49F17081152C07C"
+ "B4B23D65B8ABDC7A7BCE72975C1A04A7DFC58FF0EC5EE9B43F57A3C698531DCF"
+ "6FD6C286AA0E1603D6001C04531A29954A7636EC66FA7F55192D8ECB36C21E3F"
+ "096AA74641D9A1635E3D20D6CBFDFB4600A0684971C64133258904B8501E5483"
+ "743AA6ADF116B7DEB75BAD06C5626C2F6AA9933FFA57715A6C2B0383E07A1AB3"
+ "B5B58EFBA06365745DA4D28FD15F1864A066BC805A1BF598D715D15A7BDCB265"
+ "2D0E0A4A001202AAD8C5C09D641B32077500324A19A188E3A3A7672980AF9AC2"
+ "3862B41DBC7E7BE48FF3C8C3634D86E163D7613FF93057758A330FCABEF0A3B6"
+ "0B2A540F82AAA09E7990B4D5A8B90710284D4DD7EBB40640231C591F3BEDF4DB"
+ "B6144F53156656F098A5E8F417D148318018CA972F7DBBFB9D71C11ECC18786C"
+ "CD471477E9C563117CE44B328FA103A9A8364EEA95C8DE24C7DDA504259FF4F5"
+ "4525B32A0E60630065B23CE7E1DEC1B2A29790FA9F3CDB0797E23E69A5EDEED"
+ "E"),
/*message = */
absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
"D55B22E75BF57BB556AC8"),
/*signature = */
absl::HexStringToBytes(
- "BBF85FFD0E01C80C8C1C1931CD640BF273D49693C4C4BFF5DD20D94CF3757ABD"
- "45473B9D01B1871305DA90EDC6707D5417129467F61F723950C1AEDF7055EC1D"
- "4777AD8808E8B347D1D0921EBAB890CCA8E3A0DFD3003DE9F9CB4A97D884E1DD"
- "042C958B816F7237032B20F8399A5182F46525EC357D2F03437403E0CB5DCA4A"
- "13FD2F1B09205B9890F02EE5AF542943E6F9375ED08A38533042D6BBD50F3725"
- "1B1590F63B4B58A7D1E1F31CE62E3D2AA91E1C767B9C3F5CB26823F97AD1D9FF"
- "AB2875EB68FFA9B09946EF1D7012C02919EF13CB100C2E2C7987A0A5785B5F3F"
- "3B948B7FD64B85B165AE2FBF3C47E039C3073CA78FC900BBCDC069FE906885D5"
- "B13740A223AF5254F98C1D58E2FC92B0373E2A933353CC3EECD39F71D59CFA09"
- "294E38262A4489400D222982F9C780CD0731D4EED916C5A31ABCD02A590ED8C6"
- "FFE18B5FC7B6888E74726940D02CCC62D78BCAEDDA2E028E535CDAFC0E091BEF"
- "50DE2DFD124F1E854F568527AEF4DC8455FDA01B6D0D43048ED5AB42B1D40813"
- "994B9F6AA0C036C0DCF08F46B00FDA014477CF879B8FE5EAC4541B82DA00B434"
- "6046865B092ED6AE0115FC834B58F75FF928D7D99AC8691FF70020ABA25480AB"
- "BCC709E46EC510F4B8CADD60045954D3EDDA7C23E03D91694D3C3EA292C92535"
- "E6B5FE171C567DF3729406CDBA2A5EFA59F156E9CCD0302FDC0F8BB759B05DFF"
- "5DD802CE4D5506A19A69D70B3AB48AB17A2FE59589F73083CCA547FFB3F14683"
- "C914BC1345E7387E831EE6037501495C92C357705A69F952A2F7CD30E03336AF"
- "AAFC9C56604CD545E82AA12AF058DABA974387FE8DCDEC699A1E3853E26D29E1"
- "578189AA8C2BBA1550DFBEDD1E4F224EFCD65491E54E56128AE7C2DC8566797A"
- "BF2D9455915203A5C89E55DD23DF827436A8D6DCC5ACA82F9B183692159EC03F"
- "2B798E557D147346D835A8D81B2E3D40863966863A54D9C87B5AACE963CD529A"
- "DBAE07070CEA00B780E18131E64F0AD70E9158F590D00AD9177908B90345FD79"
- "D0255771C608AF65EE5AC3C50166BAD057380258681941560F1133405FC2D761"
- "1314B4381D5459DCDEDE4D39F3823BC4422BB1D736E7474A8089F0ECFA3C30AA"
- "C119FFA42BF743F48E0FDD960292D3E49A14EB0590C8E02E421D54AE8A521951"
- "5E21895989A0D71D4F451669CD652DA3489E5CDBC0876BA0A0899E7D8773B24A"
- "FC2CD6D37CA380A5D0DD436304D6E1A4DCD638E8B95E6C95465C6690D4EFE8F4"
- "4691E48DE22CFC691C7561AD8CC1A2C3CC9FB86FF6F4705A573A720471ED33A0"
- "0E8A60203818A3961E4D213A78B8626394F75C282315574CCD725A67E20F0BF2"
- "24BFFCABD702BFD4E1CC5F78BEC0E042E12ED4C9474BDD5EED2AEB53F4A958D7"
- "F84EFD56EC030A94D200A539DE164E53C82AFE8C5F71BB99A01F7230B7AEBC21"
- "3ECDDBEF5B9E9064874396F8A91B0575F68A4515DD158178BF277A90A3FEA200"
- "9200DA2EDA2C8B3A47C104D350DF68E94C8A4023D3AEFBB70718FA2E27E6A5C3"
- "F9927EC596AB540F463AE010EF71B89B49497F0CFD2939FFAB2A7DD1247DC4A5"
- "9D8411A843BD84F1EA8DA33C0701D70AC27C4BDBD0D9A0CAB86B1FC5BE12458A"
- "2580A6CAB4B765B842C67AD54CA5D40A24E2DDBCF01E466E08D9B3449F13E82E"
- "16D61C723FB9462E97B7ABC70B2210ECA16B160D5B8F98A1794DCA92CD4F027F"
- "3E4152EA879507DDFE7F1F21514153F036AABC33F172C95A9B774722800F2E08"
- "CC44F923540D8AF64B429968B280364C1B7B4B3E9BEE40C50002657D994631F3"
- "3A8F8F134A27EB69BA4395908BA40634B8F2703149275FFBBE8B483EA1BBA91C"
- "28105136D97C470EE83CD21CEB2B21AAED98DB8AB165A7B4BE559E7EACA68460"
- "3015BC349B0A51214E4E8FBE1D2D883F79FD3F1EDCDD3FA6D4B5BBD2A5B3003A"
- "80F1DADE975B502C7F72037316BC55C1E57E500627D60E31087431D2C9D02CA9"
- "F0EBCCD4BFE3C4BB536D4CFEF7510750452D444BE2C3D64D84A832965305264A"
- "BB53E3614940F9B2F1EA6F41CA8F69E726690BA630630F8A916EE856268251B7"
- "73DC2A5DB45D22DFB2439CA4B7AB70215D23E1F2E2617394FF783B0BFF6DF034"
- "5CC927053D02C65FE2A86DEFBEBF5243A2EF6A6312BAEDB6E60DBB0C67CC9A65"
- "5585CB458D6A04181194815F03BE87F6E800492A24C5D502D5ECD53DD6DA3679"
- "95D32E8BBAA3EF62727E8A610E8D6B5C8FABCBE8893BDB5E038627F707E8464C"
- "55DCBB76F0836ADD298A967C459508BC4E88BA5CA38F5A561A6D2D6CB2178D90"
- "AC850CA2734B45C4A89AA0F152A3B53BCF1E13532B2B5B3878B205BD2B327DC4"
- "9EB6660B9511BFAE90C1DEA5BDEB6DC5DA068BCBDC6C093E5727E387374F452F"
- "963C307DEE865D41AA124CA803C12F9AE9299C3CB1345FCC568C6E71BE3366BF"
- "30EFEEEFC7693C36ACE576B0D10F402F380009FD0EC068CB2D45984884EDF16B"
- "C90B0FF6DC96309EA377A3CEC043CB76B6C885BBB848C4745B71E18C58E78050"
- "E19BD7BE0831EFE9052A6A7DF8D4E8B9FC3E082A4D40AD73E4B3185E2F6DEDE7"
- "EE51A4068FF2DA57373FD7E7BD46E0080F4C2C1F41BC250E6DA45A341F214771"
- "F5531A67B0FD97B53CD72CFAC7215BC4111F094030A91383D20182210FCECD75"
- "E59C4B0B33A3F93D865D847EC241E1B98481C5D9D27F0AE262B328650CDC13CD"
- "99866BE9A5A030E83D84E32BD213C94BD6AF950433A4F00C6149783B00750CDF"
- "D4F47AE75217EED1F60C366FA02CDB206FEB2A685D6B7D6A4C13553E2BE27794"
- "F53B0EF57315203263EB026EA5E67067D22F92E26E98DF9AB386C2705B4316A6"
- "9892688E601E7427595ACEE6E47F5EC598CC48C2F2DA1C32E062A349D89DCC8C"
- "05C62E7B0CED6F2E93A7BD48A8004A8C5C605DFFC805DE079EDEE7CED98639A9"
- "2F6CBA92F2089B145D2D61D9638C07347A2EF6B30FD90E111A7F5913F6E18795"
- "C19E0B9F60F85BD8F5C9A963339441E4A5B79EB2E867961B18A1884A01A74483"
- "D80B403EFBDBD4EDDDC1922DA3FBB37BEA97E0A5B6343E4367601BD21DB66941"
- "C2698BF506B04861B5F3D3D80AC6DCB684D9C4369ABD04BC4BDBEF49C66E3844"
- "513A3F3BDD400C080AC6EAD81E8BB0E7CB36DB7B7EAB4728391857F597A34648"
- "63C312645B20AF02F7D0BD9A74DE2361A0D2D98A698975B30F1010D90A126078"
- "584A45FFBCC65B47976AF657EA84E9730D9E363733736AC80103DC1C7573C4DE"
- "E28A7BAC9EF72CB829450B53EAF984CD01AA31416CE8914B7D7EF849EB9CC172"
- "D7096DEFDACF596B9B21A573E346A47A5A469E1D7939BE1982CB3954C214ED3A"
- "3707D740C033E3EF780F4C48BADD863848BBFC9DAA8E3806A84B2CAC0CA23200"
- "0CAF0203E908FCE18B5D62777225D2D7D584F2ED71885DFAF5A4DBEE02F285BC"
- "34559B88EA9CE15B47A3B92A8D6F91591C329A5AA21A1BC424BA2BDBD164CE1A"
- "8B78B38BEF2B47F21F7FB7A3C54E3EA4536E816E01656C8E26AD42F3CB906169"
- "67C0DD079F956C9F3C844D5F339C62EE8A358C4BEC2D278AF718AD509C6B6661"
- "3B580443FA6F11CD8D107693B5D7B738AA7E2FE662502D7504A9F596194180F8"
- "700DC4E6F7E8E7D2307234494B8DF1D57EE14D6C97926EB1D8904D8089BE7D13"
- "5B13D6DE30AA8720D67159BB50A834DE9079922B88931D458500626834DA040D"
- "B768DDDBE67A758A02B448E36BA455034ADE36802AA42A7F2F234A5E1CC241E5"
- "661C63AFCE59DFDCC0898347D2834D7264F5B21A47C5214ADC57AF76CE9EBDB6"
- "8C71029BCF0C4C745A33454ACF0CF6D5C68DEA06C45E7D4D1755C5ACDC37FC24"
- "34140EF707FD55FAF06CBB1707C27CE9D905905E37E2F147C9CB8808ECD05DF7"
- "1FC5F1DAF910D7BD68B6914938BF0CABCF66C905C49563D7D70F2C3D3A4A4F62"
- "9E3AFDE53BD14CD6E527E4F038D6A331D01468E22DFE93A379B3EC6DA6D1C2F6"
- "D5EAB141E575F93C8CC5580DF4A3DB5C4C87D8548E9A851946D1B90D7527407F"
- "1BA1121EAC54A11E6EDA45ABB08A7A78AB36A76EAD7FAC4678E52464EFF398E9"
- "0215AC316DE5A6EFE5A7B4A95DF92E4129F3F91B316F756708BDF37C01C12BBA"
- "A091F94884E38AFF3C7B8140888CAB4F7F867EADB0418584B6F770740250936A"
- "138AFF52888840677D8121C583806FE27104DE528813E56226B652C5869BB500"
- "303834D9C9D197DBA1DD5C4734307AB8BD006B66EF45ABED2E31377BEAA19DAE"
- "6EC82AD77C4C07744F9B93A8DD4CEE1A62A552EDF4E277CACFF1F964DA7AF8FA"
- "FF6B56E3EBC06850A9F76ECFB2C2BAA660958C6D1BA96BA8578D066D6AFE6E8F"
- "B2052B7421D57DE5AB4C1FD55170E9EE33EB32FB3D2C886142055EE8428BD745"
- "AABE1D15191FFC93A3FA7A86B427EB2370B78A67A485AF963BBE1F2246119FB4"
- "69A002D7029FC4F5F7E0125FDA7305ACF6C80C7BD3F668897BA81435F426B842"
- "5C9855CD46C3448BBAD0739BA88ABC273BCD0FA1FDA7F4F8183B5D73D16C407C"
- "452AEFA2E3CA9F2D9D638D966A58788B48BFC57D3FC2085FE85A7F7ADDD91EFD"
- "1BA0226046B127A97BC480479B92881A58A0BC04D8DD9E68B6D2BC5034CF2343"
- "0D1FE54991A6908B019EE018C843B9FA53EC7EE5F114ABE2B750D4E1E72EAFB4"
- "FBB33A1E2C4D6272CEE27BBB13B5D23E24F6129CF5825F34AFC056F95F53A09F"
- "6FCA9435CD5FB6C05F88B4DCE86CEABD7E0C785361D253BB9CDB3A0C6BC85183"
- "01FF44F9E87F7A97EC9F02FAB5134F3BBFA1CBE44FA83F1C543ED9B870657543"
- "5AC6A15F7B0DEBA9D45AF554BB0CCBCA12A6C16E5EE6FAD63721E4C3CC8D9EA6"
- "8C6149993080952407AFA203F504A887B3BF84D2BB6E45E7CC5326533D63963F"
- "FB72A9272C8FF637BE6E2473E9FCAB6B5E5E7CF3EDBDDAEF51C98D53170F9B64"
- "BCA5D49F76AF176D01A6F2ECB339151F49E49A8F6E286C6D4122D650D5015910"
- "FF7F28024693895C5803DDFFCB1EDC4679C8F535AC1597D9B28AC46E62888101"
- "29C179556AF7882DEE17D58A97F434DF83646B33CFBAB90A6250851CF53D4BDB"
- "4526337DCCB9D98A921676B51365DD08A5304D2A93534C52427E9AE5C1440592"
- "C5536E171CF4FD1F43578FEAFB32FF01D4FED635D752568F90ECFBB164A5B176"
- "3F70C72FD5BCDF61D01FF3236639C91C063C0B7A56AD03F4020E80BD9A5E2F16"
- "1E0578469B9950266BA96BBB73C08E7FAE856E1703CF3CBD21418089148F7A9F"
- "40D4D91151DBC4BAE8542359E882A19A9949CED5B75FF7B192DC279B3ED10076"
- "053F58DE435FC5875654E98633A397141142229D8CD613C66344326D83992B3C"
- "08F17BE0EC28FBDBABA12CB000B2A2B04E24D0C41BD6B580E999B257C007965C"
- "4475A9D5314CD6C1FB9FEDD516E6B3C0DDD404D68D78FD4DE40931B1B872D4D0"
- "1A2D46C9B293900D34EC91D3B693F4E72C228ED0294F6DC9B717260EBE75A471"
- "EA4D7800A3E7B7B476D64DEA6F4DA726B376F07800DB5F83C0A3DCC2C7026A4C"
- "378E880994885D6F7A8819D91A2D50D16D22BE592BED38330410E14CDDD4CE0C"
- "48D62B7797DE44C07F26A79EF3A5830F321A35AC507E943C6DE63FE136823225"
- "D6FC73D86D4C84399013E064E6683492907C7B78AEF2AAB180DC33E5E6BDBD6D"
- "490E3AA8BE8E82FA6CB13BEA360C510F9B4B5BA6640427ADDDF3D66DED41D1E2"
- "A06131E950136842732C273498D6A47CED4ED189B6E739361F68CCA0A99D5602"
- "B97655AB2682E837DBD688C173DD4950DD4CD4D3A338F3FCFF8C7116EBC630D0"
- "5AFAB8DF7C7560F4DE9AD92216268EE143A722C03497CE17EFE98F67580F0DDE"
- "F57F15255E68856D39A4EB338A653346FEDE46663A62307F6590E2EE7AB928AC"
- "5E8FA163AA74E40255D8D241668A1C717E3F28994350F49908A32E6FEC6206BD"
- "F7936DD2CF6A87B9994045552ACCE6EAF1294E7327A13E6EAC16221A676F605D"
- "6DA6365D0DB01135405013F874481A68330455281A41E83DF76D20D1DF75DFEC"
- "A0917F3E94BED22D1ECED8A9FC7B2A2E4A5B74D0B0C9282BD612A48648993F9F"
- "012BD70A0E43DC3D1C0A16711EBF6EA479DB941F68A6701B57F7B837B30C0A6D"
- "771123D6FC70BDBE24440CE4E254A070534F1C1813C516791260A73689DFE1BE"
- "AD6EBF6AFF7EE48DE1D59C62228B383E0ACA0690F805FEFDC54FC4F974BFACCD"
- "FE33216CD2BC06BA7C2F55D7A0708C48014FF0C535CD83D54708FD703E8EF510"
- "FA6072E25FDAEB9533D4806053076CB8E4FE6946FD1A670D1BDA92311D5ED5FA"
- "245FA74A6F04AE66E3C9E0A7182CFDB210E5A2F28C95439964742A987A162985"
- "DB91DF91D9529D8B850B8628A9C5C8455BDB417C927224A9A8FFCDFE00C228FA"
- "284C5052577098151E33787F8287CB0D2431324555848A8D9CDFE3E4F0F14261"
- "D0FBFC023C596C749EAEFB0A1784C8CFE5E7448A989FD8D94366B4C7D6FF0000"
- "0000000000000000000000070F1E232B32383E"),
+ "84EC9F59B6A2FDD5869CF5524ED3FF70BB40FE6BDC99C3B6733FB63DA094FA3F"
+ "2815FE466856A22366F4F61351DE657481263D526A397E19548DF524932EF1D7"
+ "7D71156AB32589BFCA3E79493AE2E8A48DC120812DFC80223F011BCFE26F7858"
+ "60A7CC29B79CFCC33735EE33C5CA4CB5ACA0AD6A724C0EAEE7BA4FBA7752DCF3"
+ "9D3AAF35D79E628BF0416744AF3268827895FC7E5E7261C023C204A407727BAA"
+ "32058349B440AA3741052824BA52D3581FB44F4DC9D05FF05EF0AEEA8AF5622A"
+ "4CC4384B1B24FAC53193CAE56663556D1C3456E04AAA42949CDA637C7F780D08"
+ "E1B3221670981B24B03158B54FF2B1E06ABFDC3C21245573DF6A9C0025970484"
+ "2AC618F8FB331942D64B88F5F659005887FCE8E4B78C37FAA506A2EC0C7A2343"
+ "5B1D59AC6B168F9F2AE606BE0B4BDB819301E30A09598603959C702A9EE6D150"
+ "E1039D4CD6F2A7B761D9711422101EF6DE7B7802EF9A5C6716FF527E286E3602"
+ "4C1027D2E5AD899D50D88CEF875F7E185806EB002F7002DC06D8C57A1E41F3D9"
+ "EED932ADF81534A5B347306A9A50156E176C7F284CEA470B024EAC92E0E829FB"
+ "AA483FA26978FC85AC069319D5F201FF8D56556BE1756DC25AB7DF3894223A33"
+ "5287FEBB15C768BA0D99AB3B3AA31E63F0445033CE31A8E12D308E877733525F"
+ "ED4ECD878E5A6F513613CEC04F24E198F6BB081D7B2BAA7C04F3051A01EBB674"
+ "CB99137771071FE73181E57F10950B8E952DDB1223023B791E957C4FB7F69316"
+ "2DA8790550B8507306ABEC65843B1BC7910A5AD93B8EC49D94544E0DE11F9738"
+ "468D4A71BC8EDCBF96ADD1A1D3A0EEFBF41BEE1593672FB0076FCD60BC0BA147"
+ "D6436E3AC71D12EEC4CEEDC8CC4A794A7874B6D8B628BD17DB93246EA4075B22"
+ "9D86E191D56CBFF091BCFF79E645094F06BBAB143882177DACA9FBB9D9BFF2C7"
+ "46775D908F32F4D926480A01AE22AC6B2A63414FD8A77285A85A6EFDDD3F9BDC"
+ "BAD3A8B613B0647D776A008029846E0D1664D7E290868A7D2A4F2A83D2F6E043"
+ "4C8AD6CA664BE2A1A4B1C8B517492224FD1AD4AAED4A200DA2BF7AB0FF2693DC"
+ "FCC026CD77D76111DCE7B3431BE13EF462F1A56EA87AA1647436429733D8B011"
+ "0F34C7222A6A1C49CC772604D3856B5A82B2DE6E39D0112B438F74B37CEF4A39"
+ "43530C02D0CD4BC70A98DEB62016D392CF9D8FD86EDC430407B6D01C203327C5"
+ "4AAD87B63E93231D6F75AE9B6B8FF4DA71D3C6455448544FBF11AEF8861A720A"
+ "5CEC13D07EB5F8EFF82C6DCCF8087F07B3573529FE8AD1972B0F490731D4ECC2"
+ "5D6BEEB7CC540A38C2EA11B823FE424191893B2A22DB025C5AC3B688C578593A"
+ "A3B0DE87A1A11BBF913DF07DAEBB8AC80F8B2BC545DE3AA10D12D2B2AD34400B"
+ "366C507B6BF33E33CEBFC06B6E47EA6FA381E58876F8195DDA0A6DDCF88105C4"
+ "753ABA652E4C7644544B08F2DA3403F5DFF7DEB68E5BE7824851D9EADB9FE04F"
+ "DCDA8C5CBCCF01B720019DD977546FE0BE494E5C40FC5BD6C7E7DFC1073556C9"
+ "7BFA9EE1BC15C1A80E097CF82E228825F16E8F2EB5078D223AAF2184196964DF"
+ "44BB37052F528D84B7AA37E7E26E664BA94271F4A45BD89135FBCBCC69F25A12"
+ "6C1CF457FB8040F6789E01936183956A9A95F95F7AF017775746F4DB5D6A8230"
+ "05B0BB209389F9EC4D86371D44F4BABD585907F0E60E70263C32B9053978083E"
+ "D22EFEADC228C831204EE2920626C90A2DF829A3CD1BC4447D05634DBAEC0660"
+ "0B1DF87EC60C1D3C228CD2F1C4D8F1F58B48994ED1BCF68CC829121B0909B7D2"
+ "99C5B97AC2B0E5A70D1782D8EC8553A2643A444B025245895A684E2F718BC5DC"
+ "5D5C4027633DCDCADEBD4E432B30713979B479BFB64DE40E265E4569899D146C"
+ "5FC8AE6FDE3EFEEF568484C8EC51635F05E0DDA9BBD2E5369B04C5F42D63782F"
+ "062A1E5F7FA1D5262BBE90BB9FBC30A850FD79A87586BE6B9F7DD78B54D73378"
+ "A7A8837217B32C6F98A1CDD30E00590D2B912407327D4F21B8EE134BE6BFA4C7"
+ "4591715B293C6AFF4B458C2F3651CB129DED0A98181DF52F79321F5AFAB07F1E"
+ "834583F16DBD84E22F4CF91674E0C368394950AB3AF90444E651D0AB5E65E395"
+ "93BFF15BECD3815D8BAA1373A43D5EE1BEDF4EB71938ECF45C0830AB8E24C02F"
+ "59D86781775D374EB860F8ADCC1012281DE73D68614BE9D7BF33445E64EA2F5B"
+ "E0DA78E67E49BCEC4EA7AEAC2E579504DCF019AB9053297098CA649580A1EA01"
+ "C8C31B71C327A99E7397411796FF2C23EDC1CF2229D728A0F13D7765ED46B99C"
+ "9190ED7A0FBC47508C42D315D3D14AF691189CD9C9736BF5A052BF54E266817E"
+ "DE8290585CAF02630A54575838B586F4355FEE407A10F8031C385B4AF8951052"
+ "9F684A00499EAA516F4261B4FCAE2F7235DE044693A567B7E7D94C6E70564E54"
+ "8F005610AD1063731974AFB946D44451B77C3C51B6CCF9653CBB2AA0A7A553E8"
+ "F3C041204D116CF1F24B136782E6F20CCB8BB5612395CF2C8FE24DF4F6DB35CD"
+ "06358B2D1DA9906CDC6491F4428399DCF171F2F1ADB791A8A01E4F5F3FE6FAEC"
+ "DF38E135060942CAC880C720EEE4E2428E0B8ED272F18552A79CE0CB069BFA9D"
+ "AB8A6C8210C7A0568ADCA57EC83A3191BBE50D00A01F871AF40D19EBA1186878"
+ "BF1076077EBCB8355777CA3BC2EBD2AE147696AC5F89C4BCE186AEDF4DDA2647"
+ "1AE7B45BB0BC641D5B658AED6B1A319BF568BC528EB417755F52103E37EE3E9C"
+ "793DEE05F6D347452B60BFD82C51E1A8CAE61A079D253B97468CBD32020422AB"
+ "540F4F82F7C7442613038989B9BCE865E2673F759FE182578D202B803CD5F865"
+ "0E3F53957BF8FA21F7CF77A69DB41283C1428A0B1BD7D9BDAE26315D90BD929E"
+ "8A7ED7591C6A6E4EBDF4B0D4007CCDD2CA6BAE16531E69C7BFF76B6FDCA61D41"
+ "CB7C32DD333981BBDF0404166D77C31BA64A97C465DCE86B3143C9967645ECD5"
+ "B1930063AD08E2CEACA8E2DA9FF189ECB37A432A147EC9F557142ABA369353C0"
+ "CE571864ECF06A7647B177CF97137E0143CC81547FC09D54A174B8251AF0DDDB"
+ "8E81554ABD5F1F3217346C36518CAD182EC423E2661E735E2DD72423D06E1674"
+ "AF0D490B248BB1E0BF9EE7347E5510615AB8959BF69931361A71C527D06D9D3C"
+ "3D525621A182DDBC5494B0CC1836263E4FB6E90BBC0E471436E895115F9409CD"
+ "13E19B736A3C8AB169B68F62659CADBB4FECB9DE6C655BB63D2216FA0BB5049E"
+ "E8165E0EF2BD2259B684A7FA1B1868CABBA476FF33C298C8327A0FCFCB32C7AB"
+ "10FF8F775EDC16031E1B767B7E7DD0B2E3394994A23B8D3DD27437BC68F337DC"
+ "5F784A204C8E1255C89BD9A39FAA3F0F601E23C2016ACEA507BB4A072BA13AB1"
+ "05C8377E6C6D3B42A150A270C5EFEF8AB5EBD1D3AE549CEA563420E70A4AE801"
+ "447E7B5DCC4BA64F0BE0AE062909B685FF2D2E1CC2B4F8AC41B9E16F87FCAA96"
+ "E4AD032DDC6333251CDAEEC47177C879164F2F0A1B9EFA827203AD99223C54DE"
+ "F7D517CA44D0CBC04150264060850014B302D2709591B874CF9A7B90C6E831BB"
+ "C69C3F38D18EE4273D3B1FD6681C73F9ABE767F16033D7A65B39F41B0FCEDB91"
+ "B02853ED35A7B899A08A700CC8B998A12ADCD53AE848606E3BA20899F533616A"
+ "624B416732E0A6D33A893E4B5170FC8672859792E0867826528EFC70A8D08BC6"
+ "451B4CF38A3DAA4CD0742DCB5332717B5241BE781276D72C38CA0CBAD6E24EB4"
+ "7FBBB4BCCC3BB5E9D0E8FD1872864F23E922CB87EF94ADB4C045AF55897029A7"
+ "AD4446EA14BC07E1BD60BB7433C48D9E06E11B25D70C7799933A78B75961E79C"
+ "9D68FCB02208738EAC9BF5745CD615963ABB365C7CB396C3800E9536DBB7251C"
+ "C6223D40176A027D2A9D1550D09562C59354B851AC7D90B1B435708B6F3BE37E"
+ "C267A1EC1045AF287869B5EEA620C688383CD917068FB87E828782E946A494C4"
+ "FFD4F6667A977D11156D30EF9E4C67DEB48151DB5898EEBE83CF756160924C0B"
+ "D77E62F539EE5FF6186C5F1398CFA3AF59A1EDDCE36A0BD689207B710DC4B85F"
+ "6664FE4CDB614C93C77DB1FE0004E47CD1CF77B95642B866935062E598704B30"
+ "741F8B60FBC903FA85A3547FC72CDBC12935199C98ECF6C02B0AC93367FB1C16"
+ "D7BCE9E5C3E4832B88D469A8A02B001B5B268C10099B17BA3E3E0D67C97E33A4"
+ "DAF941BBAC7EF3C81EEB21EBC3C4778C23A6F8718B572D291B1DD81D32B2BBE0"
+ "F75D9A40B89E47FE7D6A9928B857D740DA77A4D2113C7F267E87C277659F3594"
+ "208C2AF2D5094FFFB9D1FF9FD978631FC0334661285A58538493CE47EFDC9687"
+ "A8B09342D68D15F92E8959A7EE119F564723C40B1F41D21E919D3F7F18958949"
+ "55921FAB129819E81D8FFF2D92C0657EA4D27895894F6139B688A2E31DD8D7D0"
+ "5E2AF6D1BF1EAFBAC9D75F179F997B717D6215F8418AC93EA6FF002A388F5322"
+ "37A2BAE82C4C12C81E8C7A5BB2F9660D0476B81208BF69BC8F336EA17A77CED6"
+ "7A80DD81399BC5665FFB1B6427FDF980E4F3C0E9C6C41C93462DB0A14E5A3CBD"
+ "346A749FD2E70D0F24293B90A1D2DDACFC2C3B55C2FC02454756AEDC06545E62"
+ "7900000000000000000000000000000000000000000000060F11161C21"),
},
{
- /*TEST Dilithium5*/
+ /*TEST Dilithium5 AES*/
/*public_key= */ absl::HexStringToBytes(
"1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF"
- "032369A2CE572FD08BFC304B4848E78D752D77E97A28B99B9BB6FB5C7C633751"
- "4B321ECDC1FB669F26D4171AB42B72720EE70E0519A6E1D3D6D9914EC1B21CDE"
- "38B41AAC1D3ABEE6F2B7495C4C820C1FC0CC9E71E24CFB5C9C0D8EEF4264AF48"
- "4FAE4D6E5DDE65D4DF72B61C6DBD26F861A5E0B853AC5413226FEBBABA5EB474"
- "C6FB25A82678EA1606B452A23112221017B8C073C10378F9145641A8C078C0ED"
- "9E421650F748892522AB9FB7D1FF8CF1CC71B8566E8DA33CD7361770C044349A"
- "C440CCCDC6BBE35E6C55782766F38E688BF47821037299E344ECDECA17AD5D15"
- "CD27A4F7B070661138EDE8ED72A8959C5AE36B1C46094A53CB21A7A42673F140"
- "1C2B259494090E2F53D7EE7063431EE5858002D850AF909C3783436010F7EA88"
- "625A36A0F0189FDE75B7E8C7E4B19D8527008328ADBC929BBC86E964CFC48B8C"
- "F1DA5D7ED3333AB55C15072832214A779A5FD10CC04005F46C1AA8884A161992"
- "472FD535B95ED18BDE1C6D8CE678D2817D69F90571103E8520E7313CE7B930C5"
- "EBFAF2F4EC758B626B5543A068CDE0FD0E94E6A64475B23268BF0380D075508F"
- "85128CA26F31A90C4A7D28440D54D4066B404588588B4CCF850B975C73AFE68C"
- "BCD102755F61EB3E60323C576E529EC0BF23BFA5BEA39CB73C37E8395D8DBD4C"
- "8DC8AB2F70A0BFC3A78C0D413F08D14D632BC0403B0383DBBB22BD9B113C8945"
- "2AEAB11210097947FEAAA3C9F05D1D300C33A55E3FBC81259E862705C3A13B9E"
- "E35F6B23ED10F4EDEA9519FA91B7BCD0D501B5ED57D9049FAB91AA779C725FF8"
- "E9F78017EA7807FA254B7105E826D096C01ADAE2C5D138251A92A478A33373F4"
- "DE912B83B6FB4B0D0DE6BC1118BB2FCFB07BD227A5F7F991439A13DE1238180C"
- "DC55119E65C418584D807A926E4A9C0F70155EE196FB07656D9AA7982B8795DB"
- "AD43D1059CA7F580D3320C0438A5ED5A7032B2E959678410F11AD98BE8826A44"
- "262615645D759A862B2AC52D3B014A25E8473F1F1EA4CFA819930AB3A34D710D"
- "EEE70CA13E88FD71AA064E6CB4697DE0E463B1370A6A3BFE98FDFE7B5471FF8D"
- "F6A6879FBEF9AFB3519D780757D67440AC36E837BAC3833EEAA980BD82B79364"
- "36A0307D164B6438869AE606E980518E913D0EE302396EF4EB25D9866E4BAFA1"
- "01E5992931361C4A982253D58ABE3BD57107635A46F09512085F4ADA08EC8B1B"
- "3910B0153B2AAFCAE5033EDD4153248DCD85B02C9A25D8BDC4068BB857417262"
- "97A25AEC55C44AA28059B71BB9F34067887ADE4C1CA4908B19B3D78123453876"
- "DB4DCEB42773069572CD8777E62CFBAF7203F020F281A6678F790720EAA20E34"
- "327D7A63688B09A01F4D7088F7B5059EDDEB45C0CE39321C79521D79A59ECDD4"
- "68CED0EA82CA484928702F57D6FC18D347AF3ED22AAF45ABB0F20BAB9E015576"
- "07AE3ED9CF0E26D34D305449669EC6FC1BECEADCE183F7A594CEA196D059A1E5"
- "50E547866CC087333F030E628F2CF1147925410ED0421DC7506138B1D19099C6"
- "95E1AFDACE4153825B66A8ECF55A021D21EB9F848FE55C21769A755FA9807EF7"
- "3A6C5BA15A06347D3F1C5C619A315598629106AC0B86AE0D8E55578292517258"
- "AE85F72E737AF5638D096B76A3C57F1B9C80E770A2D4EA4E42FE469AD4212852"
- "41960A8A86355EF22F583FE3BACADF8DA31D5C2DE254161BC6D10F9841DD27ED"
- "462A6B94B6DEEA90CBAB687FB84B56395DA763AB4B7FE3095D572D77EFF3FF0D"
- "8F9D19AA5AF7B676053DBEF64E61DD0A41D402318E3308669106259BF7A4CE31"
- "B346A9E983EDABA05180149AB057F9972977DA7C6F46E0CDF86F3091F04FD4E8"
- "3C6022E18CE4382B54D5DABA82E4DF1E53BF31FE4BB65A8524EDA83FD29D07E4"
- "9747B75291CBC8F8EE1415EC921E19022ADE2C047E4DF3507289E9D79A8E6992"
- "B48B8864204A416B769CC787D6DF4407E93D121F7FBEE0E408963E0609A9C75C"
- "B3117CA583DF6E79F31C635BF0F1BE98DF550727A45D3CA337D79DE5DCDB0B91"
- "CABBC30D7EF0AE1CA1E94904F78C1FD8FBA87545FDC174AD8190F9B5ED7B5869"
- "494FFA91033FDC6117BF662EC5F2AF2634BA3F8C02210F1C9BCDDA9BB39760E0"
- "0F25A7270C345666FB6DF85C919AA150CA7FC80FC0EACFE242EF55F429806362"
- "8E61056C966DB9964428D9CE99108271E29A12328E23999734E036F18A0EB8F0"
- "30E88062C56717E7A36314E44ECF357FF56EEDF90D3FB11B22A1B25905B379FC"
- "CA5CA1ACB956E178AD3F51D535AD119813B1E70F7317651BC75CAC64276BB981"
- "10B54EA0EF34541D73910721D657387677E332E9C8811C3FC1B923B2EE9C512F"
- "6D09DF372A5F97FAD7123389CEE197B5C269E221D7EED3160A521E56FF8AAFAB"
- "686179D09D78FC387B3EA6A672034D24AC7999D196B2316475F37DB8E9ED431D"
- "F58341FA88003D3C6489E78053D8E44CE7E16AEF416859B3D2AECE09086A748B"
- "7BCFD10F73E3CF8B31F0CC44DA059C69ABA5BC8EFAD45D3F376AF3A0DE6E1698"
- "78BD842E28798E4743F843844BCDF8506F136391EC8E721DC2B6282D9C50FAB6"
- "53A6ABF28947420E8C22A9A487D76A938933B34E497DA95394176B2774C09EF0"
- "BB1ED8C3B131A21957B31A0B47CBFBFF0533CAF33125221DB6BA4A518864892C"
- "F21D3D4D58B599A37A08F344AA7EF98E7D7D9D3316A6B115D9B8F20F93BC6865"
- "734699EB54C888D7E5A0ACAFD1915352B294243712CFE82F85248B00045CF3D0"
- "90C0C00D7CA0E3A1F147703FD94F717E49C81A7C3A76946E20A63F3B7C3EABA9"
- "225ABE0B34CB0CF235063967D16BC8A69C130CCE287615CC053114167EAC4E95"
- "BBABDFBBCF96BC0C0D65EA000AEAF490D723955BD1B4D69154D262F6A6D3534B"
- "B0BC397C29ECC6B1447B75C953AF441DE2E7133A7AC98988A7EF9E6EE63558AA"
- "ADA0603BD529776F05558D2DF5641C412E7347440F65EB823AFC7CCAE6B97108"
- "B857287A0486DBBE689D770CA92471309E73AD390ABF56912B2B7C49242CEC15"
- "7BDBBD493553735CB1D9B40AFC214DA153359C9DF576135901C2FDA58C0095B6"
- "FCE3FD0731DF34863AF2882D53773CE7C182473722AA79A6B37D3EDDDE38FA71"
- "DF8C0EDC081EFED8CE606E48299180EC6FE35FAB649910C48A6A29F9D0F85557"
- "E10BC5AE2ECF028AE399F55CD7976028935CC03C0CAFD5003C9EAED247FBE30A"
- "284CC4470A5525A6498E1DBBD3085C3F9D77C6064D0181BC5A829561560AA9A4"
- "EA8173D7937A9428109CB3A66B2B3DE11F88F55AB21EB49B77A39762CA9264E0"
- "156566765E2D3626B72B80BD1411E4EC53552828A24BC8CDC47F465FDDF4772C"
- "7BC02066854011287F739ABA6047596747F4234AE227DBFFABF0E13153E2E069"
- "F0B790251BE877FE5A198E808258639F5E79D3D5CD16F1A573724DD6A9F6990C"
- "4502334DC66F65493490673AB30DCA7C031F0C212C0D8BC9D0C874B319A97AD1"
- "CE9395D3D154203156C51CC3B9CB13D0BA1BDF618BC8EECA9DDD9412050CFA09"
- "235727AA50D46F79AD6F3C5A1BB6B284C8311DCF93756859704DF8FC3BB8D2F5"
- "E094E04502354942E9C852B208D4901834332EBC603270CB57ED418C34CE48A"
- "A"),
+ "66D02BD8299B815AB461FB6043BC1059C1850C557F629421BACB553D862C7F7B"
+ "4461D75A2795D428F42F87D9B6FEDC924BF55402C3E98B1DD0A56069414E5D56"
+ "42AB19C3BEA56B2B0B01811223E8EAEF97B25C925A1B414C350E473B81F588D8"
+ "7A3A686CF9ECF44932AF571299F3D6DDB01C29B1C5935F49D9089AC82A0E8C8E"
+ "04B388083AD1B454172B7BC1E334ADF871C5012679186FFF0BCFA1F842DE7C20"
+ "38BB2E91848B6F60C4FFDA664A03058CC3EABADF70500189A456703332ECBB41"
+ "3904A9FB06E943BAB4D77CDA89058DC49551F38CD347B030047ACDDFF5958FDA"
+ "7FEB5C3136A826646A3C452FB4EDB368FDBCDE506EE0D7AB53E0931379A12AB5"
+ "32AEA06A8C18B8AA839ABE02EF1018296CB5953AA21D9A634F4A40EBBA25481D"
+ "E20F1D2B9FB1C2B745F528DD51E0C246013EC2121337C8A63B637C926B296224"
+ "FEDCABA72F28489E016B0857116AE84DC1FB40CCBB9607B8261DA2E0DD150C71"
+ "616D1EB95158778F8DB92C0FC155444ADE9229D2A62DEB7AED858155BDDB439C"
+ "8C4FAA455714929B128E2F46A436BC3E807F7E426EA5E3310A6C591158B343CC"
+ "3C50189D6129FF32C328F5E6A6296CE6D7235F1178373756B80B3A14CCC260A8"
+ "423DC921AA9E7D6A4FF255318F036BECB16EAEC315DDED0FA5E2FD6FACDA118A"
+ "0B737416DD6F3470791B62212D11A86FF045BA503EB872428513463B4B59C29F"
+ "4B7D0EC7F470DB1F779531A4202C5B8AAFDC17AD3A76F39A59AF9C555780F31F"
+ "610AE3497E0DAD70CD424AB616E952A41E20D2749074FEB15649152D49A9A84D"
+ "5F2BF2376DAB936FDE9BDDC420C62BAEF6FEEA9FF069EBD0ADAFCF7B74F76D05"
+ "732F8375FAAB0CB05CE67F87C512A91213A05E728225B92BAC8DD21F3DD5556D"
+ "FE03E8BC27B7611E42A0F3CD309C0E0CF65473523A2AA89571540D3F1EEB91DC"
+ "B5E41587BFB1926076545D673D0157C312F0BE43CE8FEFC5004FA35AF29B6E55"
+ "CDDC87CE8E2C470D2299C8834A25BB1BEB02DF73DCC5289081026C6FDA6B72EC"
+ "818848D694A69CBFB562D4D61625CFDF625C363468013D9E8F271F5C872BC959"
+ "4015690ACF575428E2B4F79DAF14FA0562D757CEB1D7FBB837FD2EF6D19EB0EB"
+ "1FCAA5399A0E1C2C723D9B18B80F896E26F0BEF62D96312243FE48EE5AE53BF8"
+ "2B4CC1259BB55377689C9A3AAD964504E22F0A7B198E3B7DA88ECC926C8BDD28"
+ "4D46ADDC9ACD49A0CF0DB3C36412A2DEBD1B0A65FEF211ABE40C78AE4441A9A3"
+ "F81798DDD7C6C4C9121EE88D42D7FBC6DE13AFD4715DD71664B5404133993DC5"
+ "AB8A10CBF3D1268A830DE41F90EF28A252620EA02402E9DCDB4C3470DE10C191"
+ "2064F6C4CF79BBD126E215AC68216AABD1E4E46A4847CDC5F4E91CF4BFA9734D"
+ "14A56D71843ECEA5E058BC33182876342DC05CC85C5F832059A6F616A3506F1B"
+ "EECC1068A1849B8DFEDB57863304DAAD2AC2D246C16C210D807474A020812DB1"
+ "DD7E3AB0ED2A9A5BD6481550CEEEFEA51531FAB03E5A25117988A58D34F98F4E"
+ "96FDE2B4D0976C257DBBA78BE0248C20CBB1238C5A824E617909CB45E0D6D50A"
+ "1A1E8CD3A4100C742279B1F3838E99D69F98F61FAA722585437C1D82C3AECDF0"
+ "F14EB0D89AB5997797195F4F4B0601A67D5F0C29609C266876E6160C46B38704"
+ "91E13EAAB7FB62B4030D160B959C4DB423E5D2BAA3DFCF960EB930958B1105B9"
+ "00D9E629A941271833216C35539CD7C2C40030035AC1E630E9EC4B8324543DC7"
+ "3138F6E9AE58F804556818CEAD6B1A8D526878386A0BBBC697565148D2986E27"
+ "C376DFDF199991D067BED705C7A1FF419A45F188FBB715C06F9077E862E2B67E"
+ "05F5386FABED0BBF587D935A25AF86F6B945C9E90CEB539EA3D820912F87CAD7"
+ "BADBC3ECA84588ABEEC56910B84703618FD2491AE68C7FDB88CD5131F2C5D694"
+ "336495E0AE434549F7E835CFBBCD2DE770D14209FB54F8CAEE092202F12C4D0B"
+ "6A9F6C1ED7F9413D509CAC8F31E7393C717B340FEDECB77003305B54858C01C1"
+ "7D3B281E894D59442B1D66944B59B3FCDF96EC6FD4B69ABDE2C5DF78B50E7DDB"
+ "DE0A75054D93B6BE8E474CAAAF102FD1B577374FBB940748FF9F40482F2EA955"
+ "7D3735E5355D74E97B824B30F80F85D2EC8179000B7912D5DD37984434A5C6C5"
+ "A19F42C91F9220616DDA34DC54FDD47472BF95123A8EA0116FA65C5A53FC77CC"
+ "F69F52A2FD373FA836BC214E6F2B4F3D64E5EF2D8F08DBB38F07520FA97D82ED"
+ "F789D9387607E74DBAE2EBAE24EA2479A19CE185E2B0CCA4354AB7C40E8A502F"
+ "BDA7A7666DABBE9C8A18A82B1F8FAF9322BF0C5743D4AE46346A10C365BD8F6F"
+ "14F4118E022E910430013448E921D7B81AB74AFA11B9484B7049865B516FE2F8"
+ "8F06B89C8823B81BF1E593CF8F0487AC065E732C29028B42FEB43BECB67E78C0"
+ "9E4E74256B81C8E2F8AC317DE028F966F3E282913FE9860F16CD7055CBDEC81B"
+ "60E00A12D4D94AF0FC3725E1574A32D5450C9840EEE663BC51360AECA9CDAFB4"
+ "EC1EA6BD272997E7FB3EECCE1FA436EC19FD0AAA3CFFF1A1FD44098DDC9B16FD"
+ "E5395EB16613ECFB0C1C40B8295066EDDF5F7B5BE3A2189D7D5BEA5065974177"
+ "974D71395FE5D7A69D72F5466ACA864265C472ADAC2BB8122844ACA252C0A85F"
+ "94C770226BC57EE92CE194F637D83CEF658F9528A9E2061712C399AC22C56021"
+ "DB32647246AC2378F9D0436CEC6A2DAA87F5124BA4715591F5C489FD27CF27FF"
+ "FAFCA66DD3C8E192664DD75AB63EC60D218583876E6051FA6B349404F412F477"
+ "D9A74BF168E1CAD6BD0B21B013C4643060A46FD011D2B36BCDEA8E87BDAAF5FD"
+ "F7C9DB5EDBC6E7D0F00444B464D365009CC074C6666F1497CA583AD445F759E5"
+ "930E0917FE018DC0CF7058899BD1BFFA1DFB0689C50600E9322339C8A32A8ABD"
+ "07B8817743F1EBDDC1732C704D887454DAD00769444F4E261D68B5C4A5A8EA49"
+ "98FAFB4E77427BE737210DEAF20E4CF28EFBF524365E821B1960B1D761098253"
+ "B2FE18D46CF6A892F9C38D6F3E8F5E2B719B73F8AA0B67A99B85BB9BF920AC7A"
+ "3CE2F1B44A394E758EA7821D2503DFDB53BF4E1BA0C0912299AFCD096B3265C5"
+ "BA95696980451CAE3248FA8D0D9E14AF8285DDC36C1A5AF0174D34DB2A5CD508"
+ "E6CB19A33A2A9A26E76E1BCF3291CE184A11DA239C4D24826C6EB63CA2A5CE95"
+ "CDFE130209E76E02C3057D6AB6CBDE61BD4E31DBECB56C271E11B45382F6BA06"
+ "74334ADE92F26AFE57F433201E3DAF56FA8B3E08959FB6A45CDE1E9E4971C8D0"
+ "05228C58C3A8632FDE53B7DEA834241B9C72CAA3C9FBAAAD249541C06FC5E21E"
+ "3D19866373EBA687EF594B0D27E4A5CFA2CB6425DFAC1335BF9D4D04AA65F6DD"
+ "B0481272702F15081FA4A1310717C214974C258A37B7969B69659A6602659482"
+ "30B17BB6F32359F51918033A6F9E84645FFBF642F1BC16F28C314FD0150BD65C"
+ "3D4E43562851207DEF5AAF80E851F4648DDA20DDAD03C1965855FD3684FD384E"
+ "FD9E19169550D4337FAA85267639E6A9EEEFA3CB516B44C3CBCF07D1D5E585AF"
+ "D6EE5099AB4F594494D7F6871ADA5B769FB9D3AD841F03DC942A4C049D181A2"
+ "0"),
/*message = */
absl::HexStringToBytes("D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835A"
"D55B22E75BF57BB556AC8"),
/*signature = */
absl::HexStringToBytes(
- "BBF85FFD0E01C80C8C1C1931CD640BF273D49693C4C4BFF5DD20D94CF3757ABD"
- "45473B9D01B1871305DA90EDC6707D5417129467F61F723950C1AEDF7055EC1D"
- "4777AD8808E8B347D1D0921EBAB890CCA8E3A0DFD3003DE9F9CB4A97D884E1DD"
- "042C958B816F7237032B20F8399A5182F46525EC357D2F03437403E0CB5DCA4A"
- "13FD2F1B09205B9890F02EE5AF542943E6F9375ED08A38533042D6BBD50F3725"
- "1B1590F63B4B58A7D1E1F31CE62E3D2AA91E1C767B9C3F5CB26823F97AD1D9FF"
- "AB2875EB68FFA9B09946EF1D7012C02919EF13CB100C2E2C7987A0A5785B5F3F"
- "3B948B7FD64B85B165AE2FBF3C47E039C3073CA78FC900BBCDC069FE906885D5"
- "B13740A223AF5254F98C1D58E2FC92B0373E2A933353CC3EECD39F71D59CFA09"
- "294E38262A4489400D222982F9C780CD0731D4EED916C5A31ABCD02A590ED8C6"
- "FFE18B5FC7B6888E74726940D02CCC62D78BCAEDDA2E028E535CDAFC0E091BEF"
- "50DE2DFD124F1E854F568527AEF4DC8455FDA01B6D0D43048ED5AB42B1D40813"
- "994B9F6AA0C036C0DCF08F46B00FDA014477CF879B8FE5EAC4541B82DA00B434"
- "6046865B092ED6AE0115FC834B58F75FF928D7D99AC8691FF70020ABA25480AB"
- "BCC709E46EC510F4B8CADD60045954D3EDDA7C23E03D91694D3C3EA292C92535"
- "E6B5FE171C567DF3729406CDBA2A5EFA59F156E9CCD0302FDC0F8BB759B05DFF"
- "5DD802CE4D5506A19A69D70B3AB48AB17A2FE59589F73083CCA547FFB3F14683"
- "C914BC1345E7387E831EE6037501495C92C357705A69F952A2F7CD30E03336AF"
- "AAFC9C56604CD545E82AA12AF058DABA974387FE8DCDEC699A1E3853E26D29E1"
- "578189AA8C2BBA1550DFBEDD1E4F224EFCD65491E54E56128AE7C2DC8566797A"
- "BF2D9455915203A5C89E55DD23DF827436A8D6DCC5ACA82F9B183692159EC03F"
- "2B798E557D147346D835A8D81B2E3D40863966863A54D9C87B5AACE963CD529A"
- "DBAE07070CEA00B780E18131E64F0AD70E9158F590D00AD9177908B90345FD79"
- "D0255771C608AF65EE5AC3C50166BAD057380258681941560F1133405FC2D761"
- "1314B4381D5459DCDEDE4D39F3823BC4422BB1D736E7474A8089F0ECFA3C30AA"
- "C119FFA42BF743F48E0FDD960292D3E49A14EB0590C8E02E421D54AE8A521951"
- "5E21895989A0D71D4F451669CD652DA3489E5CDBC0876BA0A0899E7D8773B24A"
- "FC2CD6D37CA380A5D0DD436304D6E1A4DCD638E8B95E6C95465C6690D4EFE8F4"
- "4691E48DE22CFC691C7561AD8CC1A2C3CC9FB86FF6F4705A573A720471ED33A0"
- "0E8A60203818A3961E4D213A78B8626394F75C282315574CCD725A67E20F0BF2"
- "24BFFCABD702BFD4E1CC5F78BEC0E042E12ED4C9474BDD5EED2AEB53F4A958D7"
- "F84EFD56EC030A94D200A539DE164E53C82AFE8C5F71BB99A01F7230B7AEBC21"
- "3ECDDBEF5B9E9064874396F8A91B0575F68A4515DD158178BF277A90A3FEA200"
- "9200DA2EDA2C8B3A47C104D350DF68E94C8A4023D3AEFBB70718FA2E27E6A5C3"
- "F9927EC596AB540F463AE010EF71B89B49497F0CFD2939FFAB2A7DD1247DC4A5"
- "9D8411A843BD84F1EA8DA33C0701D70AC27C4BDBD0D9A0CAB86B1FC5BE12458A"
- "2580A6CAB4B765B842C67AD54CA5D40A24E2DDBCF01E466E08D9B3449F13E82E"
- "16D61C723FB9462E97B7ABC70B2210ECA16B160D5B8F98A1794DCA92CD4F027F"
- "3E4152EA879507DDFE7F1F21514153F036AABC33F172C95A9B774722800F2E08"
- "CC44F923540D8AF64B429968B280364C1B7B4B3E9BEE40C50002657D994631F3"
- "3A8F8F134A27EB69BA4395908BA40634B8F2703149275FFBBE8B483EA1BBA91C"
- "28105136D97C470EE83CD21CEB2B21AAED98DB8AB165A7B4BE559E7EACA68460"
- "3015BC349B0A51214E4E8FBE1D2D883F79FD3F1EDCDD3FA6D4B5BBD2A5B3003A"
- "80F1DADE975B502C7F72037316BC55C1E57E500627D60E31087431D2C9D02CA9"
- "F0EBCCD4BFE3C4BB536D4CFEF7510750452D444BE2C3D64D84A832965305264A"
- "BB53E3614940F9B2F1EA6F41CA8F69E726690BA630630F8A916EE856268251B7"
- "73DC2A5DB45D22DFB2439CA4B7AB70215D23E1F2E2617394FF783B0BFF6DF034"
- "5CC927053D02C65FE2A86DEFBEBF5243A2EF6A6312BAEDB6E60DBB0C67CC9A65"
- "5585CB458D6A04181194815F03BE87F6E800492A24C5D502D5ECD53DD6DA3679"
- "95D32E8BBAA3EF62727E8A610E8D6B5C8FABCBE8893BDB5E038627F707E8464C"
- "55DCBB76F0836ADD298A967C459508BC4E88BA5CA38F5A561A6D2D6CB2178D90"
- "AC850CA2734B45C4A89AA0F152A3B53BCF1E13532B2B5B3878B205BD2B327DC4"
- "9EB6660B9511BFAE90C1DEA5BDEB6DC5DA068BCBDC6C093E5727E387374F452F"
- "963C307DEE865D41AA124CA803C12F9AE9299C3CB1345FCC568C6E71BE3366BF"
- "30EFEEEFC7693C36ACE576B0D10F402F380009FD0EC068CB2D45984884EDF16B"
- "C90B0FF6DC96309EA377A3CEC043CB76B6C885BBB848C4745B71E18C58E78050"
- "E19BD7BE0831EFE9052A6A7DF8D4E8B9FC3E082A4D40AD73E4B3185E2F6DEDE7"
- "EE51A4068FF2DA57373FD7E7BD46E0080F4C2C1F41BC250E6DA45A341F214771"
- "F5531A67B0FD97B53CD72CFAC7215BC4111F094030A91383D20182210FCECD75"
- "E59C4B0B33A3F93D865D847EC241E1B98481C5D9D27F0AE262B328650CDC13CD"
- "99866BE9A5A030E83D84E32BD213C94BD6AF950433A4F00C6149783B00750CDF"
- "D4F47AE75217EED1F60C366FA02CDB206FEB2A685D6B7D6A4C13553E2BE27794"
- "F53B0EF57315203263EB026EA5E67067D22F92E26E98DF9AB386C2705B4316A6"
- "9892688E601E7427595ACEE6E47F5EC598CC48C2F2DA1C32E062A349D89DCC8C"
- "05C62E7B0CED6F2E93A7BD48A8004A8C5C605DFFC805DE079EDEE7CED98639A9"
- "2F6CBA92F2089B145D2D61D9638C07347A2EF6B30FD90E111A7F5913F6E18795"
- "C19E0B9F60F85BD8F5C9A963339441E4A5B79EB2E867961B18A1884A01A74483"
- "D80B403EFBDBD4EDDDC1922DA3FBB37BEA97E0A5B6343E4367601BD21DB66941"
- "C2698BF506B04861B5F3D3D80AC6DCB684D9C4369ABD04BC4BDBEF49C66E3844"
- "513A3F3BDD400C080AC6EAD81E8BB0E7CB36DB7B7EAB4728391857F597A34648"
- "63C312645B20AF02F7D0BD9A74DE2361A0D2D98A698975B30F1010D90A126078"
- "584A45FFBCC65B47976AF657EA84E9730D9E363733736AC80103DC1C7573C4DE"
- "E28A7BAC9EF72CB829450B53EAF984CD01AA31416CE8914B7D7EF849EB9CC172"
- "D7096DEFDACF596B9B21A573E346A47A5A469E1D7939BE1982CB3954C214ED3A"
- "3707D740C033E3EF780F4C48BADD863848BBFC9DAA8E3806A84B2CAC0CA23200"
- "0CAF0203E908FCE18B5D62777225D2D7D584F2ED71885DFAF5A4DBEE02F285BC"
- "34559B88EA9CE15B47A3B92A8D6F91591C329A5AA21A1BC424BA2BDBD164CE1A"
- "8B78B38BEF2B47F21F7FB7A3C54E3EA4536E816E01656C8E26AD42F3CB906169"
- "67C0DD079F956C9F3C844D5F339C62EE8A358C4BEC2D278AF718AD509C6B6661"
- "3B580443FA6F11CD8D107693B5D7B738AA7E2FE662502D7504A9F596194180F8"
- "700DC4E6F7E8E7D2307234494B8DF1D57EE14D6C97926EB1D8904D8089BE7D13"
- "5B13D6DE30AA8720D67159BB50A834DE9079922B88931D458500626834DA040D"
- "B768DDDBE67A758A02B448E36BA455034ADE36802AA42A7F2F234A5E1CC241E5"
- "661C63AFCE59DFDCC0898347D2834D7264F5B21A47C5214ADC57AF76CE9EBDB6"
- "8C71029BCF0C4C745A33454ACF0CF6D5C68DEA06C45E7D4D1755C5ACDC37FC24"
- "34140EF707FD55FAF06CBB1707C27CE9D905905E37E2F147C9CB8808ECD05DF7"
- "1FC5F1DAF910D7BD68B6914938BF0CABCF66C905C49563D7D70F2C3D3A4A4F62"
- "9E3AFDE53BD14CD6E527E4F038D6A331D01468E22DFE93A379B3EC6DA6D1C2F6"
- "D5EAB141E575F93C8CC5580DF4A3DB5C4C87D8548E9A851946D1B90D7527407F"
- "1BA1121EAC54A11E6EDA45ABB08A7A78AB36A76EAD7FAC4678E52464EFF398E9"
- "0215AC316DE5A6EFE5A7B4A95DF92E4129F3F91B316F756708BDF37C01C12BBA"
- "A091F94884E38AFF3C7B8140888CAB4F7F867EADB0418584B6F770740250936A"
- "138AFF52888840677D8121C583806FE27104DE528813E56226B652C5869BB500"
- "303834D9C9D197DBA1DD5C4734307AB8BD006B66EF45ABED2E31377BEAA19DAE"
- "6EC82AD77C4C07744F9B93A8DD4CEE1A62A552EDF4E277CACFF1F964DA7AF8FA"
- "FF6B56E3EBC06850A9F76ECFB2C2BAA660958C6D1BA96BA8578D066D6AFE6E8F"
- "B2052B7421D57DE5AB4C1FD55170E9EE33EB32FB3D2C886142055EE8428BD745"
- "AABE1D15191FFC93A3FA7A86B427EB2370B78A67A485AF963BBE1F2246119FB4"
- "69A002D7029FC4F5F7E0125FDA7305ACF6C80C7BD3F668897BA81435F426B842"
- "5C9855CD46C3448BBAD0739BA88ABC273BCD0FA1FDA7F4F8183B5D73D16C407C"
- "452AEFA2E3CA9F2D9D638D966A58788B48BFC57D3FC2085FE85A7F7ADDD91EFD"
- "1BA0226046B127A97BC480479B92881A58A0BC04D8DD9E68B6D2BC5034CF2343"
- "0D1FE54991A6908B019EE018C843B9FA53EC7EE5F114ABE2B750D4E1E72EAFB4"
- "FBB33A1E2C4D6272CEE27BBB13B5D23E24F6129CF5825F34AFC056F95F53A09F"
- "6FCA9435CD5FB6C05F88B4DCE86CEABD7E0C785361D253BB9CDB3A0C6BC85183"
- "01FF44F9E87F7A97EC9F02FAB5134F3BBFA1CBE44FA83F1C543ED9B870657543"
- "5AC6A15F7B0DEBA9D45AF554BB0CCBCA12A6C16E5EE6FAD63721E4C3CC8D9EA6"
- "8C6149993080952407AFA203F504A887B3BF84D2BB6E45E7CC5326533D63963F"
- "FB72A9272C8FF637BE6E2473E9FCAB6B5E5E7CF3EDBDDAEF51C98D53170F9B64"
- "BCA5D49F76AF176D01A6F2ECB339151F49E49A8F6E286C6D4122D650D5015910"
- "FF7F28024693895C5803DDFFCB1EDC4679C8F535AC1597D9B28AC46E62888101"
- "29C179556AF7882DEE17D58A97F434DF83646B33CFBAB90A6250851CF53D4BDB"
- "4526337DCCB9D98A921676B51365DD08A5304D2A93534C52427E9AE5C1440592"
- "C5536E171CF4FD1F43578FEAFB32FF01D4FED635D752568F90ECFBB164A5B176"
- "3F70C72FD5BCDF61D01FF3236639C91C063C0B7A56AD03F4020E80BD9A5E2F16"
- "1E0578469B9950266BA96BBB73C08E7FAE856E1703CF3CBD21418089148F7A9F"
- "40D4D91151DBC4BAE8542359E882A19A9949CED5B75FF7B192DC279B3ED10076"
- "053F58DE435FC5875654E98633A397141142229D8CD613C66344326D83992B3C"
- "08F17BE0EC28FBDBABA12CB000B2A2B04E24D0C41BD6B580E999B257C007965C"
- "4475A9D5314CD6C1FB9FEDD516E6B3C0DDD404D68D78FD4DE40931B1B872D4D0"
- "1A2D46C9B293900D34EC91D3B693F4E72C228ED0294F6DC9B717260EBE75A471"
- "EA4D7800A3E7B7B476D64DEA6F4DA726B376F07800DB5F83C0A3DCC2C7026A4C"
- "378E880994885D6F7A8819D91A2D50D16D22BE592BED38330410E14CDDD4CE0C"
- "48D62B7797DE44C07F26A79EF3A5830F321A35AC507E943C6DE63FE136823225"
- "D6FC73D86D4C84399013E064E6683492907C7B78AEF2AAB180DC33E5E6BDBD6D"
- "490E3AA8BE8E82FA6CB13BEA360C510F9B4B5BA6640427ADDDF3D66DED41D1E2"
- "A06131E950136842732C273498D6A47CED4ED189B6E739361F68CCA0A99D5602"
- "B97655AB2682E837DBD688C173DD4950DD4CD4D3A338F3FCFF8C7116EBC630D0"
- "5AFAB8DF7C7560F4DE9AD92216268EE143A722C03497CE17EFE98F67580F0DDE"
- "F57F15255E68856D39A4EB338A653346FEDE46663A62307F6590E2EE7AB928AC"
- "5E8FA163AA74E40255D8D241668A1C717E3F28994350F49908A32E6FEC6206BD"
- "F7936DD2CF6A87B9994045552ACCE6EAF1294E7327A13E6EAC16221A676F605D"
- "6DA6365D0DB01135405013F874481A68330455281A41E83DF76D20D1DF75DFEC"
- "A0917F3E94BED22D1ECED8A9FC7B2A2E4A5B74D0B0C9282BD612A48648993F9F"
- "012BD70A0E43DC3D1C0A16711EBF6EA479DB941F68A6701B57F7B837B30C0A6D"
- "771123D6FC70BDBE24440CE4E254A070534F1C1813C516791260A73689DFE1BE"
- "AD6EBF6AFF7EE48DE1D59C62228B383E0ACA0690F805FEFDC54FC4F974BFACCD"
- "FE33216CD2BC06BA7C2F55D7A0708C48014FF0C535CD83D54708FD703E8EF510"
- "FA6072E25FDAEB9533D4806053076CB8E4FE6946FD1A670D1BDA92311D5ED5FA"
- "245FA74A6F04AE66E3C9E0A7182CFDB210E5A2F28C95439964742A987A162985"
- "DB91DF91D9529D8B850B8628A9C5C8455BDB417C927224A9A8FFCDFE00C228FA"
- "284C5052577098151E33787F8287CB0D2431324555848A8D9CDFE3E4F0F14261"
- "D0FBFC023C596C749EAEFB0A1784C8CFE5E7448A989FD8D94366B4C7D6FF0000"
- "0000000000000000000000070F1E232B32383E"),
+ "71F7F7FD6276C18539BF89D27B86C26716771342AD46F1FBC8594496B3C85B36"
+ "1B2CBEEE99CF0BD6E8E43F31F6154D49C1ED65EF51F8BAE947469C3772B60065"
+ "EA5FA1B02895D9DC1A02E063054420ADCAC38079419D1F02D89753ABAF499E28"
+ "45F723609AD1F9341D6FD912DF241F0B9727BAF8A6D547E1DA8FEBB5A963C2B5"
+ "3F2322B1CC2F4BBCD13B4F50A095166C7C918412737C9CD03C83CBC8A9AA64D7"
+ "3399106BA0FC4827AC20B59889278CA7BBE8C06B4FE571C3C603C0FD1FE6AB15"
+ "8A7778D4A76E425D048FEE82D0F8F95A84FD93818131A5A8B6C2A1DBE3DA04CC"
+ "0D68013B9D5D1E3E3CDDD844335FC8F80CA5BC715C2D4DB8E80466256C2BF89D"
+ "324FA709B4683F2E3CDCE00B9985CE75B931F378E8950CD1DF3F80190B162C2C"
+ "4CB0297F16FC16908C1067F98211AF5AFF9036023799ABC95A5D6E91CA360049"
+ "E1AD1CFF1B95245C692363D6BEFBA1B1E4F48E3DC33E490A0EACB7C3A9534EEC"
+ "F7C66CE1CBDA457F76DB9540CC7A8E62331640001AA6CF0EEDEAE1805EE03F25"
+ "23ED318DC2430BC096BD7BD830A88CF2CBCA2D11C511866C8E414CEF9F3C0CFC"
+ "E915A0AD0547FE3BBBA8D0020981AF7F9D35494D883CBF9F32B457394794E0EA"
+ "A06126E4516C1D71F44F7FB14925FFF6528C5277E60C16191717357560F2E9B7"
+ "4E51BCB0E5E334D945972D26CCFFC7453630CA135FA005D3B1EFE929096A8E70"
+ "AB90D3874E881035CED16297ABBD4A7D6647B89D213C251527EB644C1B133C18"
+ "02350BE47CC90ADEFB83281A521C382BF55D376AD58AAAC68EBB3ECCD7A9E784"
+ "83FE48965339368C9DF41BD34482A8357D0FE4A723A0C0881ED385E63F16B467"
+ "81585B1B339D121250A26F1608AD0617CCCD6668F1E6EDD25B16AC43326F7E99"
+ "B5245A8AA4A647D03DCA63C26C7BBA83F8A69A3BA807A8DF9CAEE0F5DF54BAC0"
+ "E022FFD9F635DA265ADD24D90DAFFB86295CCDD510A3044563B276D1D406BC83"
+ "4C7AA106D26EC3B3783F69AD001CBA0279580C499CC4D99996F36EBD8C711C78"
+ "95F625D50BA375409646E0C2E6208877A4ACF92587B6D302401A25510D059FB4"
+ "E3793BA52BE7E1C383D2E238804AB19837A9D2A1FBC96AB2C29B5496B0AF5F42"
+ "57D51DB9AADCA5D67D0613579D40EF1FEF1A1D177B23FFAB218CF49073A6064E"
+ "2531CF25A23C5C47AD4D71133FF6BF07673DEAA1D45ED860C5C58CFF65888BC6"
+ "496FA5A2DF20DE617BFC0DECB4078CF081F7F18FFB350AD891F5FC80E5FCBB1E"
+ "DE3653A4B760DE68046EF68524B4EB19D541905F7A3826148FE9FED184AE3A78"
+ "D511B801967F40826D5267095271F7FE3FF423B0B5E741DC876F85C5959657A9"
+ "6FD247481DAD3CEBC500660EEC6A31A89634005F6F5AF51662B16161AB561235"
+ "A4F7547BE90354564A0B912FD576BD6F18F238BF9E7A20DD5537517AE11FC649"
+ "46A8CCBAD13F14E13785E942D89B4AB084192A48DF017F9F87DC0641B21D132F"
+ "6DFE7E25D993801287E7A5F073150C8DC43B08ACFA8001F0BE6FAF23CE83C4F5"
+ "B49D6F2D04E4768E573D1EA1C703E7F7C2E892E63B654D8900B2307CA6C78F2C"
+ "D8C98D8B00A484893D07CCAE09FF6602D2D2E17124EA7CE843A230ABF20DEE59"
+ "303CDE65289D8BC354ADE66EFC23CB76ABEE4A3205212C51BEAE793DF29D2CA9"
+ "57786A6DFAADA9A269707FC4F55AE554410851D7F1C7A22C730A669191DBDCAF"
+ "6E24866B291218FCFC79CA19585A75672EFBC03239FB158DCBF402324099F33B"
+ "7CADF4F4D35C65CCE5D33594F3F8F350A9520D1C47A8386F6342B462E560192A"
+ "337429684B4497E20110946F6E9C8A87E93A51ECEA96E426E5D20F1AACC8773B"
+ "281DA492976F8375538BE088033D5CE271ECDCA4B139E517194798721C16ECC8"
+ "CB8B2DC4200D31B8BF87869960D7E0F8A46773D0C99BC76594F41859E6A92368"
+ "73D7149CD9ACFFC8D075C532881AC55ACEBF062453FBBF4C329071DF798948E2"
+ "21D68E7BFF4E7DE446EADD71005D38243FB61CEC26275D54A4A111323115CA8A"
+ "17E9A8F401E8360B3BAFC52C0CA9535232FC57EB29342E322A8333A14972E9E1"
+ "C38C9391330A030D19E96562A34D798A094C54CA834B376FF28ACF6CC70926EE"
+ "25B0FA8C34D2E43C9593A8627409FA51ECD48572C015D4673329AF4AF047ACF1"
+ "0590BAEB30919F1ABEBD2C79F337A2E860196E74531389B52BD03A8ED1011B60"
+ "28B1019A0F52433B00D7EC5460E4226082A6D0BDD4B4DC03A97561EBF6881CE0"
+ "7B768E096C05E6FC3E03A03F8057B310C70FAC81F26BE9A6DF94F7D0676061C8"
+ "4E611F07F963A5F7FABEF8CBAE908C1DD706CE100D0A737F0D1BF349207A09CC"
+ "BC45997C41352AB92A537F34CF64D1D82EBD7BE5DE3DEF74657BEDF2370D7E9C"
+ "7B74A8E1F256F0E273E17C41E122D72E5E2382E3309C1BCFEB4430C3C7A50C5B"
+ "A82E82E638FEA34391CB84B6B7A01ECB384E399419F9A71053C9C182D0EE2035"
+ "76E3D40EDC3B1A59071092F2ACC1F49D65CDC71BA960DA38ED0F84858589A85C"
+ "F2CEA9EB373D650C89D2E29408ED80AE7F01E06D01761F1D79BC38116CA97BF1"
+ "844FD68999C3C75F51D534F032462F2BCC08655D1DE4BF1C8915178948DFB371"
+ "8117CF9E1ABA63EFAA0FA9C8BDF3F7F422875574C090BDA33B741106672361D8"
+ "86B025AB8CDE990D0F4159F522AB985426FA1BBFFFD6E83DB7FBF006207F02EF"
+ "03E6AB6FC16B4306B1D437E4AFAD9CB7249217D7DCB3C20A2206CD29C088188F"
+ "8DF36466D1ED6FC892789453EEE07F6D82BC8FCCFEBEEBF867964564BFA36D9A"
+ "68BB05462B81DC5B0F30142C38E0EB31FBFE4C6651A08DD20644A7137DBA397B"
+ "07763483CEF14897FF3D318C3A6F84913312E655C362E2EA37C0B1B406DC275F"
+ "23687B7D6AD0580F545F88B9429B33892B85FE25FE86EBC9DA69E07C7F56F191"
+ "C6FF43AA390FDAD81C9D7F9417BBFCD4A25317C3671D31D99FE9D5720B265D37"
+ "892BB34883B668408B88936A166F12CE6A3FD6A90A4AA29DF4F8B07B987E9691"
+ "EC6C6FFB279C4BFA6908BF05FAC22844717B6290B671321D5F865974D745DC81"
+ "47D934588CBDEB138EBBC9AECB8120653F6ACE9ED40A2794D0BFBA2AF435EF58"
+ "7FE07ED65B79F3C835B9E8D214A8F60CA8E942368B5E30E7F4C7BB27EFD0D2F3"
+ "1C678733B75B202563C810847BF864B16CB1CC75DEADD5D1A994AD8A43077BA4"
+ "DB51145CE8FE30E487748FB81AFA7D06C9CB2D20D9C741C91455E29C082DAB9B"
+ "559A0B01579664E127BA51E2A53E79830E9C907DBAEF96E6B24D42035D94B7E4"
+ "993EBB5CBA4E96DBFFAC4EAEAD7FC085A0B3D8FEDC8F2688FFD5CE96445DD452"
+ "A5D680E61E5984395D88EA47E0AB2EEB4958E3FA70314866B6E767DBF346F014"
+ "67ADCE60654758D3524A1A451036600C98329F78BCE31A9E238109867B647E1E"
+ "73472C55BBE18B37436029C8FBFCD35FFAFC336C7CFE3E16994874ACD0347524"
+ "4F663163789622B75D29F937737D5E91D4119616400066A0F710E740F578703B"
+ "E692055AC486C66B4E6B0CCAA3DC82B55FADDEB9A2B0B27050DB015404EF4A2E"
+ "BEAF52BF6EEC18A6A7DD955105784D232F921617560ADFC60E6F0750B628F72E"
+ "8B2EE29D43C609C1EEE0BB2E60F166F11449139E0993A3DA27AE6104948DE565"
+ "DB0EFC178E28AAADEF18271C086E29BFBF15A8F9E1ACFE86A6607A14E974067D"
+ "B4E8054757FC996534684E44D9CB088553BA4762B17FF609AEEDD47895A07100"
+ "6382C12190D002AC4D54B558169B5E486791BE0EFFFF17CEE0BAC7CBDB974149"
+ "AF4D530587E2E732498BAF9BC3C9D59202CA94BBB657EB0DD909EC683E07016B"
+ "62E8550EC4D2911741DC09265F8BCC15E10837E693C4FC47ED95B85020739A11"
+ "230287E000E975B78D1461F74889422D4313F3646F3645BCA2685A954A5E6D32"
+ "75DC98AFA40BA0065A77D5206C2DAD9A64C55F54E3B81803A9BAC6781F6065A6"
+ "54B2D19126DA7AEE33C3EC3F43DB88F98D76BE744132B49DF9C8DD5CD7DFEA58"
+ "B069A1669B7BD3C405A40154F66D7DF47AD3AF18C20641552345932A7E971229"
+ "096F856D90A5DA032827CC74F8E30E48F7B8D1E64FAB11B8D0E941CEFD3BF948"
+ "73C091C30EA47BC8A1840B7D9BCD248FF3B2B6542B19A228E5AD4B26B262F889"
+ "97D25AFF20996088D75D920F4CFFA10138228C3F2236728F2173CF064CC3230F"
+ "4FD1912434ED47CA75DE5DB2D93AC5AB9F4383B9E96A3B77C12E35283C4415CD"
+ "6DA9C14EA2CD09666DDE33C95D89A9DE6DA18E05CB07961EC8EA4550290CA3E9"
+ "7BAF9CAE6C720B7E6E33A15335ED342A75E91D6349AB18092352F6C28B4E0FB4"
+ "8992EB48E498CE68557BC97DD8EF10C02A78F68B573047EC3F69F1ABF44229F0"
+ "4B0097971575B16068F6D54AC63F85D4F309A070AFC5ADA6E99F2EAC1CACF52A"
+ "40AA8E993D7475D0080F9C02F9A3E7BF6AC62CE0D67F820616551A6B7703ECAD"
+ "2BBCF726149ACAB0569BD5C58C48BF1D8C6A811FA04762BF8AA92EC844E775F9"
+ "94F106F05625B1493449C640E24483A49199C81FB7F7953BF3FDCD1105944789"
+ "295E629578078955A93BB1CECEEABCB29FF35F43A37549F60ABB3EFB344A9151"
+ "F93C617E7E710D8E8C48EBAAE83FEF43985AE5EDFCC716A700BDEB552037D286"
+ "20121F6FEC1F3D2EA97E0346517D11A84FE969ECB3EF4F7787F8BD86C97EB2D6"
+ "39AD8D97506B10C1AD10D2BBFF58307CD744A8FDC9141D873B13F78E6F74F820"
+ "16DC3BFF252EC58933401C7BF14B0E0275881B96198E6FB6E5CBF22D29E286A8"
+ "47B2857DC9D6214AFBFA2787A4FC0D65C65C6BF48A22F4001D8F538E63A2C3D7"
+ "D6E0914DE4DA0A7BCA5DC5BE4578212F9CAED253CDA04ADC81D7DE8056165177"
+ "54F1E8FCEB26B468789522CF42E400F5E1918EA3D3EF93E16CB10A234EAC91F2"
+ "5801B1E2AC958FDC724B90F079E77C3EA89FBDD4566790DA20C0CE254DE71148"
+ "9EFC4F7C0D5A31067D3A82A00CDB3C4E4475497A4A54FEA8C17C6836B6C3B70B"
+ "00612152490C238B127EA698DC7E93CE8B1E0CE7E7902EA5EABBDF205732ECFF"
+ "AE35D485D8E5D0DF235F2FE98848197E5AA9402EA3E987A46CE8B365A2E046CE"
+ "819543FBAECA042C626B0F36F2E34328EC8AFFCCD799983026199729FE6EF74C"
+ "81473BB2FF1CA4D8A5C9E78BB849AEB8B0F81A745A73119F6B07FDCA012F3431"
+ "EFF38152A1DCDDA9A95D8593B17FB3D547508A1B09E00BBE8B44E50892968FBC"
+ "6C3447901DBA193E75859A33475DC43422D296BB9547255374BED89BF6664533"
+ "57A85452DCE35F044DB4FCC0FA68EBE6527ACC1E1A2453D56CBB3490BD08C086"
+ "77E2BE61C94D570E5CF7EE97D03CCD971AFBD5225E1EAF18CF791742C3CF8CD8"
+ "D0E26FBD2A6B15E452C182A271BF4E16866755BDE269F13AC6DF0199240A0690"
+ "7BA634C9399EFD092D9137869AC79ABD42D0BC157D8FEBF1B77D322E808A21C4"
+ "557ABB70D53E63AB101F4CF7A42A7BA796CEF56862064955736CEDABFAEB6F9B"
+ "E1A1B22B93E803883104CBD532F0416E61576FC3FB75D7AE6C139FAEF577C62C"
+ "481C4046D3B4954452B58AC5AE24B72E8E0D540BD714F0FE347BCD41C0E9D507"
+ "B7F5A90299ADBD0D936EB49AFCDE0A4CA3A817F5D7360811F61D96D05B7C003B"
+ "659D4025E96679793DCE976A0BA97E61ABAD5A15E2401FBA2146E9DAFCD31347"
+ "6665F02A70BBAE96E39A3DE1282FA7961712A1EC2402B48DB4E2297BF6293B3E"
+ "D7D8D4619E791C1CB6C50C61AE8B915A0E108FF82968CB0F1EDDA73E0CEE45FA"
+ "D58422A02CD47736AC503CB4DE1A07C049F0FE5A2A5B1D282F8978FBB722B89C"
+ "D7D389D9A4F0725C73A6442CA529DB3DCDE379A667D135A835B04450E0DE0BBE"
+ "A8B8EE8FB98BBB2493A1FAF9B3F1C83A42B0EFC7F5672FBFCDCE3A5C62CC366E"
+ "D063EA96758F2809DF1AE378AF893A44A6EF6CDC440350F5A56421AEDDA266FC"
+ "B55435697A26E622E0E05D1ADB43CDE1F438979B3F7264D94A9C3640A8BA87A8"
+ "1D3F917C1238AC025A929F862212A2CCB9F3A9A0D153E634195145E24160564D"
+ "F84D38731206AEEC5B9F4120F5DF56C6500D0ABB9BB5B7EAAF890E875827EAB0"
+ "A7C5761C67CA41D405A41D330B36601D94CC507787E6939EEB8345EB6A8BE7D7"
+ "5DBD458877DC4414120C4F6AFAC87F8C15CC2CD02EEB40BF12176422437438D1"
+ "E938CFF9F2196FDDB68D17E8ECDE577F105427009A9C31B7D944128B5E610635"
+ "69367F5194E50B7D583FEEA7BE7B0B36BCDC2C0BC100F47820FE43061B1EBD64"
+ "C2EFCDE9CDCDB1E59ABCE72882EE0295B35C26E5648846DA0E68E291EEEB1A91"
+ "21AF9025F060AE6AD07A2805DE4E0D84B88D4FB1DE0CB6D5604614C1180AE4CE"
+ "525983A8C3D3F42932575E7F89B28BC6011116667A80A8AEB0DEEBEEF545569C"
+ "A4B1BAC6D2355D9DB3BAC1090A267C7E4E7F8292D7FE00000000000000000000"
+ "0000000000000000000000070E101D252B3036"),
},
};
- for (const TestVector& v : dilithium_vectors) {
+ for (const TestVector& v : dilithium_aes_vectors) {
// Create a new verifier.
absl::StatusOr<std::unique_ptr<PublicKeyVerify>> verifier =
- DilithiumAvx2Verify::New(
- *DilithiumPublicKeyPqclean::NewPublicKey(v.public_key));
+ DilithiumAvx2Verify::New(*DilithiumPublicKeyPqclean::NewPublicKey(
+ v.public_key, DilithiumSeedExpansion::AES_SEED_EXPANSION));
ASSERT_THAT(verifier.status(), IsOk());
// Verify signature.
@@ -872,9 +1430,18 @@ TEST(DilithiumAvx2VerifyTest, Vectors) {
INSTANTIATE_TEST_SUITE_P(
DilithiumAvx2VerifyTests, DilithiumAvx2VerifyTest,
testing::ValuesIn<DilithiumTestCase>({
- {"Dilithium2", PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES},
- {"Dilithium3", PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES},
- {"Dilithium5", PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES},
+ {"Dilithium2", PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium3", PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium5", PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium2Aes", PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium3Aes", PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium5Aes", PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
}),
[](const testing::TestParamInfo<DilithiumAvx2VerifyTest::ParamType>& info) {
return info.param.test_name;
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_key.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_key.cc
index 03bbcdc7f..5b6953ea2 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_key.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_key.cc
@@ -26,8 +26,11 @@
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -36,13 +39,15 @@ namespace subtle {
// static
util::StatusOr<DilithiumPrivateKeyPqclean>
-DilithiumPrivateKeyPqclean::NewPrivateKey(util::SecretData key_data) {
- return DilithiumPrivateKeyPqclean(key_data);
+DilithiumPrivateKeyPqclean::NewPrivateKey(
+ util::SecretData key_data, DilithiumSeedExpansion seed_expansion) {
+ return DilithiumPrivateKeyPqclean(key_data, seed_expansion);
}
// static
util::StatusOr<std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
-DilithiumPrivateKeyPqclean::GenerateKeyPair(uint32 private_key_size) {
+DilithiumPrivateKeyPqclean::GenerateKeyPair(
+ int32_t private_key_size, DilithiumSeedExpansion seed_expansion) {
std::string public_key;
std::string private_key;
private_key.resize(private_key_size);
@@ -51,26 +56,62 @@ DilithiumPrivateKeyPqclean::GenerateKeyPair(uint32 private_key_size) {
switch (private_key_size) {
// Dilithium2.
case PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES: {
- public_key.resize(PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES);
- PQCLEAN_DILITHIUM2_AVX2_crypto_sign_keypair(
- reinterpret_cast<uint8_t*>(public_key.data()),
- reinterpret_cast<uint8_t*>(private_key.data()));
+ switch (seed_expansion) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ public_key.resize(PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM2AES_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ default: {
+ public_key.resize(PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM2_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ }
break;
}
// Dilithium3.
case PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES: {
- public_key.resize(PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES);
- PQCLEAN_DILITHIUM3_AVX2_crypto_sign_keypair(
- reinterpret_cast<uint8_t*>(public_key.data()),
- reinterpret_cast<uint8_t*>(private_key.data()));
+ switch (seed_expansion) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ public_key.resize(PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM3AES_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ default: {
+ public_key.resize(PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM3_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ }
break;
}
// Dilithium5.
case PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES: {
- public_key.resize(PQCLEAN_DILITHIUM5_AVX2_CRYPTO_PUBLICKEYBYTES);
- PQCLEAN_DILITHIUM5_AVX2_crypto_sign_keypair(
- reinterpret_cast<uint8_t*>(public_key.data()),
- reinterpret_cast<uint8_t*>(private_key.data()));
+ switch (seed_expansion) {
+ case DilithiumSeedExpansion::AES_SEED_EXPANSION: {
+ public_key.resize(PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM5AES_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ default: {
+ public_key.resize(PQCLEAN_DILITHIUM5_AVX2_CRYPTO_PUBLICKEYBYTES);
+ PQCLEAN_DILITHIUM5_AVX2_crypto_sign_keypair(
+ reinterpret_cast<uint8_t*>(public_key.data()),
+ reinterpret_cast<uint8_t*>(private_key.data()));
+ break;
+ }
+ }
break;
}
// Invalid key size.
@@ -90,9 +131,10 @@ DilithiumPrivateKeyPqclean::GenerateKeyPair(uint32 private_key_size) {
util::SecretDataFromStringView(private_key);
util::StatusOr<DilithiumPrivateKeyPqclean> dilithium_private_key =
- DilithiumPrivateKeyPqclean::NewPrivateKey(std::move(private_key_data));
+ DilithiumPrivateKeyPqclean::NewPrivateKey(std::move(private_key_data),
+ seed_expansion);
util::StatusOr<DilithiumPublicKeyPqclean> dilithium_public_key =
- DilithiumPublicKeyPqclean::NewPublicKey(public_key);
+ DilithiumPublicKeyPqclean::NewPublicKey(public_key, seed_expansion);
return std::make_pair(*dilithium_private_key, *dilithium_public_key);
}
@@ -101,16 +143,27 @@ const util::SecretData& DilithiumPrivateKeyPqclean::GetKeyData() const {
return key_data_;
}
+const DilithiumSeedExpansion& DilithiumPrivateKeyPqclean::GetSeedExpansion()
+ const {
+ return seed_expansion_;
+}
+
// static
util::StatusOr<DilithiumPublicKeyPqclean>
-DilithiumPublicKeyPqclean::NewPublicKey(absl::string_view key_data) {
- return DilithiumPublicKeyPqclean(key_data);
+DilithiumPublicKeyPqclean::NewPublicKey(absl::string_view key_data,
+ DilithiumSeedExpansion seed_expansion) {
+ return DilithiumPublicKeyPqclean(key_data, seed_expansion);
}
const std::string& DilithiumPublicKeyPqclean::GetKeyData() const {
return key_data_;
}
+const DilithiumSeedExpansion& DilithiumPublicKeyPqclean::GetSeedExpansion()
+ const {
+ return seed_expansion_;
+}
+
} // namespace subtle
} // namespace tink
} // namespace crypto
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_key.h b/cc/experimental/pqcrypto/signature/subtle/dilithium_key.h
index 2b89a09e3..0723eaef5 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_key.h
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_key.h
@@ -29,25 +29,33 @@ namespace crypto {
namespace tink {
namespace subtle {
+enum class DilithiumSeedExpansion {
+ SHAKE_SEED_EXPANSION = 0,
+ AES_SEED_EXPANSION = 1,
+};
+
// Dilithium public key representation.
class DilithiumPublicKeyPqclean {
public:
// Creates a new DilithiumPublicKeyPqclean from key_data. Should only be
// called with the result of a previous call to GetKeyData().
static util::StatusOr<DilithiumPublicKeyPqclean> NewPublicKey(
- std::string_view key_data);
+ absl::string_view key_data, DilithiumSeedExpansion seed_expansion);
DilithiumPublicKeyPqclean(const DilithiumPublicKeyPqclean& other) = default;
DilithiumPublicKeyPqclean& operator=(const DilithiumPublicKeyPqclean& other) =
default;
const std::string& GetKeyData() const;
+ const DilithiumSeedExpansion& GetSeedExpansion() const;
private:
- explicit DilithiumPublicKeyPqclean(absl::string_view key_data)
- : key_data_(std::move(key_data)) {}
+ DilithiumPublicKeyPqclean(absl::string_view key_data,
+ DilithiumSeedExpansion seed_expansion)
+ : key_data_(std::move(key_data)), seed_expansion_(seed_expansion) {}
const std::string key_data_;
+ const DilithiumSeedExpansion seed_expansion_;
};
// Dilithium private key representation.
@@ -56,7 +64,11 @@ class DilithiumPrivateKeyPqclean {
// Creates a new DilithiumPrivateKeyPqclean from key_data. Should only be
// called with the result of a previous call to GetKeyData().
static util::StatusOr<DilithiumPrivateKeyPqclean> NewPrivateKey(
- util::SecretData key_data);
+ util::SecretData key_data, DilithiumSeedExpansion seed_expansion);
+
+ DilithiumPrivateKeyPqclean(const DilithiumPrivateKeyPqclean& other) = default;
+ DilithiumPrivateKeyPqclean& operator=(
+ const DilithiumPrivateKeyPqclean& other) = default;
// Generates a new dilithium key pair (different key sizes based on version).
// Possible values for the private key size are:
@@ -65,19 +77,18 @@ class DilithiumPrivateKeyPqclean {
// 4864 - Dilithium5
static util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- GenerateKeyPair(uint32 key_size);
-
- DilithiumPrivateKeyPqclean(const DilithiumPrivateKeyPqclean& other) = default;
- DilithiumPrivateKeyPqclean& operator=(
- const DilithiumPrivateKeyPqclean& other) = default;
+ GenerateKeyPair(int32_t key_size, DilithiumSeedExpansion seed_expansion);
const util::SecretData& GetKeyData() const;
+ const DilithiumSeedExpansion& GetSeedExpansion() const;
private:
- explicit DilithiumPrivateKeyPqclean(util::SecretData key_data)
- : key_data_(std::move(key_data)) {}
+ DilithiumPrivateKeyPqclean(util::SecretData key_data,
+ DilithiumSeedExpansion seed_expansion)
+ : key_data_(std::move(key_data)), seed_expansion_(seed_expansion) {}
const util::SecretData key_data_;
+ const DilithiumSeedExpansion seed_expansion_;
};
} // namespace subtle
diff --git a/cc/experimental/pqcrypto/signature/subtle/dilithium_key_test.cc b/cc/experimental/pqcrypto/signature/subtle/dilithium_key_test.cc
index 606ff0758..1bf59a408 100644
--- a/cc/experimental/pqcrypto/signature/subtle/dilithium_key_test.cc
+++ b/cc/experimental/pqcrypto/signature/subtle/dilithium_key_test.cc
@@ -28,8 +28,11 @@
extern "C" {
#include "third_party/pqclean/crypto_sign/dilithium2/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium2aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium3/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium3aes/avx2/api.h"
#include "third_party/pqclean/crypto_sign/dilithium5/avx2/api.h"
+#include "third_party/pqclean/crypto_sign/dilithium5aes/avx2/api.h"
}
namespace crypto {
@@ -39,62 +42,39 @@ namespace {
using ::crypto::tink::test::IsOk;
-class DilithiumKeyTest : public ::testing::Test {};
+struct DilithiumTestCase {
+ std::string test_name;
+ int32_t private_key_size;
+ int32_t public_key_size;
+ DilithiumSeedExpansion seed_expansion;
+};
-TEST_F(DilithiumKeyTest, Dilithium2KeysLength) {
- // Generate key pair.
- util::StatusOr<
- std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
- PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES);
+using DilithiumKeyTest = testing::TestWithParam<DilithiumTestCase>;
- ASSERT_THAT(key_pair.status(), IsOk());
+TEST_P(DilithiumKeyTest, DilithiumKeysLength) {
+ const DilithiumTestCase& test_case = GetParam();
- // Check keys size.
- EXPECT_EQ((key_pair->first).GetKeyData().size(),
- PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES);
- EXPECT_EQ((key_pair->second).GetKeyData().size(),
- PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES);
-}
-
-TEST_F(DilithiumKeyTest, Dilithium3KeysLength) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
- PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES);
+ test_case.private_key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
// Check keys size.
- EXPECT_EQ((key_pair->first).GetKeyData().size(),
- PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES);
- EXPECT_EQ((key_pair->second).GetKeyData().size(),
- PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES);
+ EXPECT_EQ((key_pair->first).GetKeyData().size(), test_case.private_key_size);
+ EXPECT_EQ((key_pair->second).GetKeyData().size(), test_case.public_key_size);
}
-TEST_F(DilithiumKeyTest, Dilithium5KeysLength) {
- // Generate key pair.
- util::StatusOr<
- std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
- key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
- PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES);
-
- ASSERT_THAT(key_pair.status(), IsOk());
+TEST_P(DilithiumKeyTest, DifferentContent) {
+ const DilithiumTestCase& test_case = GetParam();
- // Check keys size.
- EXPECT_EQ((key_pair->first).GetKeyData().size(),
- PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES);
- EXPECT_EQ((key_pair->second).GetKeyData().size(),
- PQCLEAN_DILITHIUM5_AVX2_CRYPTO_PUBLICKEYBYTES);
-}
-
-TEST_F(DilithiumKeyTest, DifferentContent) {
// Generate key pair.
util::StatusOr<
std::pair<DilithiumPrivateKeyPqclean, DilithiumPublicKeyPqclean>>
key_pair = DilithiumPrivateKeyPqclean::GenerateKeyPair(
- PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES);
+ test_case.private_key_size, test_case.seed_expansion);
ASSERT_THAT(key_pair.status(), IsOk());
@@ -103,6 +83,32 @@ TEST_F(DilithiumKeyTest, DifferentContent) {
key_pair->second.GetKeyData());
}
+INSTANTIATE_TEST_SUITE_P(
+ DilithiumKeyTesta, DilithiumKeyTest,
+ testing::ValuesIn<DilithiumTestCase>({
+ {"Dilithium2", PQCLEAN_DILITHIUM2_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM2_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium3", PQCLEAN_DILITHIUM3_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM3_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium5", PQCLEAN_DILITHIUM5_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM5_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::SHAKE_SEED_EXPANSION},
+ {"Dilithium2Aes", PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM2AES_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium3Aes", PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM3AES_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ {"Dilithium5Aes", PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_SECRETKEYBYTES,
+ PQCLEAN_DILITHIUM5AES_AVX2_CRYPTO_PUBLICKEYBYTES,
+ DilithiumSeedExpansion::AES_SEED_EXPANSION},
+ }),
+ [](const testing::TestParamInfo<DilithiumKeyTest::ParamType>& info) {
+ return info.param.test_name;
+ });
+
} // namespace
} // namespace subtle
} // namespace tink