diff options
author | wconner <wconner@google.com> | 2023-01-26 05:01:04 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2023-01-26 05:02:24 -0800 |
commit | 1ff148fcfd8921d041e75e7cbaf89f95e0ce5507 (patch) | |
tree | 1ea48a88a6f0c04c959e0af7c1a5dd15f29f2a0d /cc/core | |
parent | 9f3e872dc7463c9abd02f01fc7dbfc433579a991 (diff) | |
download | tink-1ff148fcfd8921d041e75e7cbaf89f95e0ce5507.tar.gz |
Add test for creating a primitive from a legacy proto key.
PiperOrigin-RevId: 504811519
Diffstat (limited to 'cc/core')
-rw-r--r-- | cc/core/keyset_handle_builder_test.cc | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/cc/core/keyset_handle_builder_test.cc b/cc/core/keyset_handle_builder_test.cc index 87f99c245..0c21b09cb 100644 --- a/cc/core/keyset_handle_builder_test.cc +++ b/cc/core/keyset_handle_builder_test.cc @@ -35,9 +35,11 @@ #include "tink/internal/proto_parameters_serialization.h" #include "tink/key_status.h" #include "tink/mac/mac_key_templates.h" +#include "tink/subtle/random.h" #include "tink/util/status.h" #include "tink/util/test_matchers.h" #include "tink/util/test_util.h" +#include "proto/aes_cmac.pb.h" #include "proto/tink.pb.h" namespace crypto { @@ -47,10 +49,13 @@ namespace { using ::crypto::tink::test::AddTinkKey; using ::crypto::tink::test::IsOk; using ::crypto::tink::test::StatusIs; +using ::google::crypto::tink::AesCmacKey; +using ::google::crypto::tink::AesCmacParams; using ::google::crypto::tink::KeyData; using ::google::crypto::tink::Keyset; using ::google::crypto::tink::KeyStatusType; using ::google::crypto::tink::KeyTemplate; +using ::google::crypto::tink::OutputPrefixType; using ::testing::Eq; using ::testing::IsFalse; using ::testing::IsTrue; @@ -609,7 +614,7 @@ TEST_F(KeysetHandleBuilderTest, CreateBuilderEntryFromCopyableParameters) { ASSERT_THAT(handle.status(), IsOk()); } -TEST_F(KeysetHandleBuilderTest, UsePrimitive) { +TEST_F(KeysetHandleBuilderTest, UsePrimitiveFromLegacyProtoParams) { util::StatusOr<internal::LegacyProtoParameters> parameters = CreateLegacyProtoParameters(MacKeyTemplates::AesCmac()); ASSERT_THAT(parameters.status(), IsOk()); @@ -630,6 +635,44 @@ TEST_F(KeysetHandleBuilderTest, UsePrimitive) { EXPECT_THAT(verified, IsOk()); } +TEST_F(KeysetHandleBuilderTest, UsePrimitiveFromLegacyProtoKey) { + AesCmacParams params; + params.set_tag_size(16); + AesCmacKey key; + *key.mutable_params() = params; + key.set_version(0); + key.set_key_value(subtle::Random::GetRandomBytes(32)); + + util::StatusOr<internal::ProtoKeySerialization> serialization = + internal::ProtoKeySerialization::Create( + "type.googleapis.com/google.crypto.tink.AesCmacKey", + RestrictedData(key.SerializeAsString(), + InsecureSecretKeyAccess::Get()), + KeyData::SYMMETRIC, OutputPrefixType::TINK, + /*id_requirement=*/123); + ASSERT_THAT(serialization, IsOk()); + + util::StatusOr<internal::LegacyProtoKey> proto_key = + internal::LegacyProtoKey::Create(*serialization, + InsecureSecretKeyAccess::Get()); + ASSERT_THAT(proto_key.status(), IsOk()); + + KeysetHandleBuilder::Entry entry = + KeysetHandleBuilder::Entry::CreateFromCopyableKey( + *proto_key, KeyStatus::kEnabled, /*is_primary=*/true); + + util::StatusOr<KeysetHandle> handle = + KeysetHandleBuilder().AddEntry(std::move(entry)).Build(); + ASSERT_THAT(handle.status(), IsOk()); + + util::StatusOr<std::unique_ptr<Mac>> mac = handle->GetPrimitive<Mac>(); + ASSERT_THAT(mac.status(), IsOk()); + util::StatusOr<std::string> tag = (*mac)->ComputeMac("some input"); + ASSERT_THAT(tag.status(), IsOk()); + util::Status verified = (*mac)->VerifyMac(*tag, "some input"); + EXPECT_THAT(verified, IsOk()); +} + } // namespace } // namespace tink } // namespace crypto |