From b192aa97e637b6c7206a267321a7a400595c4a20 Mon Sep 17 00:00:00 2001 From: tholenst <tholenst@google.com> Date: Thu, 15 Aug 2019 03:13:47 -0700 Subject: [PATCH] Migrate the AesSivKeyManager to a KeyTypeManager. We will migrate the test in an upcoming cl. PiperOrigin-RevId: 263530089 --- cc/daead/BUILD.bazel | 14 +-- cc/daead/CMakeLists.txt | 12 +- cc/daead/aes_siv_key_manager.cc | 112 ------------------ cc/daead/aes_siv_key_manager.h | 77 ++++++++---- cc/daead/aes_siv_key_manager_test.cc | 53 +++++---- cc/daead/deterministic_aead_config.cc | 2 +- cc/daead/deterministic_aead_factory_test.cc | 12 +- .../deterministic_aead_key_templates_test.cc | 9 +- .../daead/TINKDeterministicAeadFactoryTest.mm | 23 ++-- .../deterministic_aead_key_manager_test.py | 2 +- 10 files changed, 126 insertions(+), 190 deletions(-) delete mode 100644 cc/daead/aes_siv_key_manager.cc diff --git a/cc/daead/BUILD.bazel b/cc/daead/BUILD.bazel index b748f258a..df9018aa5 100644 --- a/cc/daead/BUILD.bazel +++ b/cc/daead/BUILD.bazel @@ -4,25 +4,22 @@ licenses(["notice"]) cc_library( name = "aes_siv_key_manager", - srcs = ["aes_siv_key_manager.cc"], hdrs = ["aes_siv_key_manager.h"], include_prefix = "tink", strip_include_prefix = "/cc", deps = [ - "//cc:aead", - "//cc:key_manager", - "//cc:key_manager_base", + "//cc:core/key_type_manager", + "//cc:deterministic_aead", "//cc/subtle:aes_siv_boringssl", "//cc/subtle:random", + "//cc/util:constants", "//cc/util:errors", "//cc/util:protobuf_helper", "//cc/util:status", "//cc/util:statusor", "//cc/util:validation", "//proto:aes_siv_cc_proto", - "//proto:common_cc_proto", - "//proto:tink_cc_proto", - "@com_google_absl//absl/base", + "@com_google_absl//absl/strings", ], ) @@ -75,7 +72,6 @@ cc_library( "//cc:deterministic_aead", "//cc:key_manager", "//cc:keyset_handle", - "//cc:primitive_set", "//cc:registry", "//cc/util:status", "//cc/util:statusor", @@ -107,6 +103,7 @@ cc_test( deps = [ ":aes_siv_key_manager", "//cc:aead", + "//cc:core/key_manager_impl", "//cc/util:status", "//cc/util:statusor", "//proto:aes_eax_cc_proto", @@ -185,6 +182,7 @@ cc_test( deps = [ ":aes_siv_key_manager", ":deterministic_aead_key_templates", + "//cc:core/key_manager_impl", "//proto:aes_siv_cc_proto", "//proto:common_cc_proto", "//proto:tink_cc_proto", diff --git a/cc/daead/CMakeLists.txt b/cc/daead/CMakeLists.txt index f5cf7201b..b9e9178c9 100644 --- a/cc/daead/CMakeLists.txt +++ b/cc/daead/CMakeLists.txt @@ -3,14 +3,13 @@ tink_module(daead) tink_cc_library( NAME aes_siv_key_manager SRCS - aes_siv_key_manager.cc aes_siv_key_manager.h DEPS tink::core::aead - tink::core::key_manager - tink::core::key_manager_base + tink::core::key_type_manager tink::subtle::aes_siv_boringssl tink::subtle::random + tink::util::constants tink::util::errors tink::util::protobuf_helper tink::util::status @@ -19,7 +18,7 @@ tink_cc_library( tink::proto::aes_siv_cc_proto tink::proto::common_cc_proto tink::proto::tink_cc_proto - absl::base + absl::strings ) tink_cc_library( @@ -90,7 +89,8 @@ tink_cc_test( SRCS aes_siv_key_manager_test.cc DEPS tink::daead::aes_siv_key_manager - tink::core::aead + tink::core::deterministic_aead + tink::core::key_manager_impl tink::util::status tink::util::statusor tink::proto::aes_eax_cc_proto @@ -134,6 +134,7 @@ tink_cc_test( NAME deterministic_aead_factory_test SRCS deterministic_aead_factory_test.cc DEPS + tink::core::key_manager_impl tink::daead::aes_siv_key_manager tink::daead::deterministic_aead_config tink::daead::deterministic_aead_factory @@ -151,6 +152,7 @@ tink_cc_test( NAME deterministic_aead_key_templates_test SRCS deterministic_aead_key_templates_test.cc DEPS + tink::core::key_manager_impl tink::daead::aes_siv_key_manager tink::daead::deterministic_aead_key_templates tink::proto::aes_siv_cc_proto diff --git a/cc/daead/aes_siv_key_manager.cc b/cc/daead/aes_siv_key_manager.cc deleted file mode 100644 index dd8c6141f..000000000 --- a/cc/daead/aes_siv_key_manager.cc +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tink/daead/aes_siv_key_manager.h" - -#include "absl/base/casts.h" -#include "absl/strings/string_view.h" -#include "tink/deterministic_aead.h" -#include "tink/key_manager.h" -#include "tink/subtle/aes_siv_boringssl.h" -#include "tink/subtle/random.h" -#include "tink/util/errors.h" -#include "tink/util/protobuf_helper.h" -#include "tink/util/status.h" -#include "tink/util/statusor.h" -#include "tink/util/validation.h" -#include "proto/aes_siv.pb.h" -#include "proto/tink.pb.h" - -namespace crypto { -namespace tink { - -using ::crypto::tink::util::Status; -using ::crypto::tink::util::StatusOr; -using ::google::crypto::tink::AesSivKey; -using ::google::crypto::tink::AesSivKeyFormat; -using ::google::crypto::tink::KeyData; - -class AesSivKeyFactory : public KeyFactoryBase<AesSivKey, AesSivKeyFormat> { - public: - AesSivKeyFactory() {} - - KeyData::KeyMaterialType key_material_type() const override { - return KeyData::SYMMETRIC; - } - - protected: - StatusOr<std::unique_ptr<AesSivKey>> NewKeyFromFormat( - const AesSivKeyFormat& aes_siv_key_format) const override { - Status status = AesSivKeyManager::Validate(aes_siv_key_format); - if (!status.ok()) return status; - - auto aes_siv_key = absl::make_unique<AesSivKey>(); - aes_siv_key->set_version(AesSivKeyManager::kVersion); - aes_siv_key->set_key_value( - subtle::Random::GetRandomBytes(aes_siv_key_format.key_size())); - return absl::implicit_cast<StatusOr<std::unique_ptr<AesSivKey>>>( - std::move(aes_siv_key)); - } -}; - -constexpr uint32_t AesSivKeyManager::kVersion; - -AesSivKeyManager::AesSivKeyManager() - : key_factory_(absl::make_unique<AesSivKeyFactory>()) {} - -uint32_t AesSivKeyManager::get_version() const { return kVersion; } - -const KeyFactory& AesSivKeyManager::get_key_factory() const { - return *key_factory_; -} - -StatusOr<std::unique_ptr<DeterministicAead>> -AesSivKeyManager::GetPrimitiveFromKey(const AesSivKey& aes_siv_key) const { - Status status = Validate(aes_siv_key); - if (!status.ok()) return status; - auto aes_siv_result = subtle::AesSivBoringSsl::New(aes_siv_key.key_value()); - if (!aes_siv_result.ok()) return aes_siv_result.status(); - return std::move(aes_siv_result.ValueOrDie()); -} - -// static -Status AesSivKeyManager::Validate(const AesSivKey& key) { - Status status = ValidateVersion(key.version(), kVersion); - if (!status.ok()) return status; - uint32_t key_size = key.key_value().size(); - if (key_size != 64) { - return ToStatusF(util::error::INVALID_ARGUMENT, - "Invalid AesSivKey: key_value has %d bytes; " - "supported size: 64 bytes.", - key_size); - } - return Status::OK; -} - -// static -Status AesSivKeyManager::Validate(const AesSivKeyFormat& key_format) { - uint32_t key_size = key_format.key_size(); - if (key_size != 64) { - return ToStatusF(util::error::INVALID_ARGUMENT, - "Invalid AesSivKeyFormat: key_size is %d bytes; " - "supported size: 64 bytes.", - key_size); - } - return Status::OK; -} - -} // namespace tink -} // namespace crypto diff --git a/cc/daead/aes_siv_key_manager.h b/cc/daead/aes_siv_key_manager.h index 219f5e20d..3b6f44e64 100644 --- a/cc/daead/aes_siv_key_manager.h +++ b/cc/daead/aes_siv_key_manager.h @@ -20,50 +20,79 @@ #include <vector> #include "absl/strings/string_view.h" +#include "tink/core/key_type_manager.h" #include "tink/deterministic_aead.h" -#include "tink/core/key_manager_base.h" -#include "tink/key_manager.h" +#include "tink/subtle/aes_siv_boringssl.h" +#include "tink/subtle/random.h" +#include "tink/util/constants.h" #include "tink/util/errors.h" #include "tink/util/protobuf_helper.h" #include "tink/util/status.h" #include "tink/util/statusor.h" +#include "tink/util/validation.h" #include "proto/aes_siv.pb.h" -#include "proto/tink.pb.h" namespace crypto { namespace tink { class AesSivKeyManager - : public KeyManagerBase<DeterministicAead, - google::crypto::tink::AesSivKey> { + : public KeyTypeManager<google::crypto::tink::AesSivKey, + google::crypto::tink::AesSivKeyFormat, + List<DeterministicAead>> { public: - static constexpr uint32_t kVersion = 0; + class DeterministicAeadFactory : public PrimitiveFactory<DeterministicAead> { + crypto::tink::util::StatusOr<std::unique_ptr<DeterministicAead>> Create( + const google::crypto::tink::AesSivKey& key) const override { + return subtle::AesSivBoringSsl::New(key.key_value()); + } + }; - AesSivKeyManager(); + AesSivKeyManager() + : KeyTypeManager(absl::make_unique<DeterministicAeadFactory>()) {} - // Returns the version of this key manager. - uint32_t get_version() const override; + uint32_t get_version() const override { return 0; } - // Returns a factory that generates keys of the key type - // handled by this manager. - const KeyFactory& get_key_factory() const override; + google::crypto::tink::KeyData::KeyMaterialType key_material_type() + const override { + return google::crypto::tink::KeyData::SYMMETRIC; + } - virtual ~AesSivKeyManager() {} + const std::string& get_key_type() const override { return key_type_; } - protected: - crypto::tink::util::StatusOr<std::unique_ptr<DeterministicAead>> - GetPrimitiveFromKey( - const google::crypto::tink::AesSivKey& aes_siv_key) const override; + crypto::tink::util::Status ValidateKey( + const google::crypto::tink::AesSivKey& key) const override { + crypto::tink::util::Status status = + ValidateVersion(key.version(), get_version()); + if (!status.ok()) return status; + return ValidateKeySize(key.key_value().size()); + } - private: - friend class AesSivKeyFactory; + crypto::tink::util::Status ValidateKeyFormat( + const google::crypto::tink::AesSivKeyFormat& key_format) const override { + return ValidateKeySize(key_format.key_size()); + } + + crypto::tink::util::StatusOr<google::crypto::tink::AesSivKey> CreateKey( + const google::crypto::tink::AesSivKeyFormat& key_format) const override { + google::crypto::tink::AesSivKey key; + key.set_version(get_version()); + key.set_key_value(subtle::Random::GetRandomBytes(key_format.key_size())); + return key; + } - std::unique_ptr<KeyFactory> key_factory_; + private: + crypto::tink::util::Status ValidateKeySize(uint32_t key_size) const { + if (key_size != 64) { + return crypto::tink::util::Status( + crypto::tink::util::error::INVALID_ARGUMENT, + absl::StrCat("Invalid key size: key size is ", key_size, + " bytes; supported size: 64 bytes.")); + } + return crypto::tink::util::OkStatus(); + } - static crypto::tink::util::Status Validate( - const google::crypto::tink::AesSivKey& key); - static crypto::tink::util::Status Validate( - const google::crypto::tink::AesSivKeyFormat& key_format); + const std::string key_type_ = absl::StrCat( + kTypeGoogleapisCom, google::crypto::tink::AesSivKey().GetTypeName()); }; } // namespace tink diff --git a/cc/daead/aes_siv_key_manager_test.cc b/cc/daead/aes_siv_key_manager_test.cc index 2ddf75956..e9e1c1399 100644 --- a/cc/daead/aes_siv_key_manager_test.cc +++ b/cc/daead/aes_siv_key_manager_test.cc @@ -16,6 +16,7 @@ #include "tink/daead/aes_siv_key_manager.h" +#include "tink/core/key_manager_impl.h" #include "tink/deterministic_aead.h" #include "tink/util/status.h" #include "tink/util/statusor.h" @@ -44,23 +45,27 @@ class AesSivKeyManagerTest : public ::testing::Test { }; TEST_F(AesSivKeyManagerTest, testBasic) { - AesSivKeyManager key_manager; + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); - EXPECT_EQ(0, key_manager.get_version()); + EXPECT_EQ(0, key_manager->get_version()); EXPECT_EQ("type.googleapis.com/google.crypto.tink.AesSivKey", - key_manager.get_key_type()); - EXPECT_TRUE(key_manager.DoesSupport(key_manager.get_key_type())); + key_manager->get_key_type()); + EXPECT_TRUE(key_manager->DoesSupport(key_manager->get_key_type())); } TEST_F(AesSivKeyManagerTest, testKeyDataErrors) { - AesSivKeyManager key_manager; + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); { // Bad key type. KeyData key_data; std::string bad_key_type = "type.googleapis.com/google.crypto.tink.SomeOtherKey"; key_data.set_type_url(bad_key_type); - auto result = key_manager.GetPrimitive(key_data); + auto result = key_manager->GetPrimitive(key_data); EXPECT_FALSE(result.ok()); EXPECT_EQ(util::error::INVALID_ARGUMENT, result.status().error_code()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "not supported", @@ -73,7 +78,7 @@ TEST_F(AesSivKeyManagerTest, testKeyDataErrors) { KeyData key_data; key_data.set_type_url(aes_siv_key_type_); key_data.set_value("some bad serialized proto"); - auto result = key_manager.GetPrimitive(key_data); + auto result = key_manager->GetPrimitive(key_data); EXPECT_FALSE(result.ok()); EXPECT_EQ(util::error::INVALID_ARGUMENT, result.status().error_code()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "not parse", @@ -86,7 +91,7 @@ TEST_F(AesSivKeyManagerTest, testKeyDataErrors) { key.set_version(1); key_data.set_type_url(aes_siv_key_type_); key_data.set_value(key.SerializeAsString()); - auto result = key_manager.GetPrimitive(key_data); + auto result = key_manager->GetPrimitive(key_data); EXPECT_FALSE(result.ok()); EXPECT_EQ(util::error::INVALID_ARGUMENT, result.status().error_code()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "version", @@ -101,7 +106,7 @@ TEST_F(AesSivKeyManagerTest, testKeyDataErrors) { KeyData key_data; key_data.set_type_url(aes_siv_key_type_); key_data.set_value(key.SerializeAsString()); - auto result = key_manager.GetPrimitive(key_data); + auto result = key_manager->GetPrimitive(key_data); if (len == 64) { EXPECT_TRUE(result.ok()) << result.status(); } else { @@ -119,11 +124,13 @@ TEST_F(AesSivKeyManagerTest, testKeyDataErrors) { } TEST_F(AesSivKeyManagerTest, testKeyMessageErrors) { - AesSivKeyManager key_manager; + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); { // Bad protobuffer. AesEaxKey key; - auto result = key_manager.GetPrimitive(key); + auto result = key_manager->GetPrimitive(key); EXPECT_FALSE(result.ok()); EXPECT_EQ(util::error::INVALID_ARGUMENT, result.status().error_code()); EXPECT_PRED_FORMAT2(testing::IsSubstring, "AesEaxKey", @@ -137,7 +144,7 @@ TEST_F(AesSivKeyManagerTest, testKeyMessageErrors) { AesSivKey key; key.set_version(0); key.set_key_value(std::string(len, 'a')); - auto result = key_manager.GetPrimitive(key); + auto result = key_manager->GetPrimitive(key); if (len == 64) { EXPECT_TRUE(result.ok()) << result.status(); } else { @@ -157,7 +164,9 @@ TEST_F(AesSivKeyManagerTest, testKeyMessageErrors) { TEST_F(AesSivKeyManagerTest, testPrimitives) { std::string plaintext = "some plaintext"; std::string aad = "some aad"; - AesSivKeyManager key_manager; + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); AesSivKey key; key.set_version(0); @@ -165,7 +174,7 @@ TEST_F(AesSivKeyManagerTest, testPrimitives) { "64 bytes of key 0123456789abcdef0123456789abcdef0123456789abcdef"); { // Using key message only. - auto result = key_manager.GetPrimitive(key); + auto result = key_manager->GetPrimitive(key); EXPECT_TRUE(result.ok()) << result.status(); auto aes_siv = std::move(result.ValueOrDie()); auto encrypt_result = aes_siv->EncryptDeterministically(plaintext, aad); @@ -180,7 +189,7 @@ TEST_F(AesSivKeyManagerTest, testPrimitives) { KeyData key_data; key_data.set_type_url(aes_siv_key_type_); key_data.set_value(key.SerializeAsString()); - auto result = key_manager.GetPrimitive(key_data); + auto result = key_manager->GetPrimitive(key_data); EXPECT_TRUE(result.ok()) << result.status(); auto aes_siv = std::move(result.ValueOrDie()); auto encrypt_result = aes_siv->EncryptDeterministically(plaintext, aad); @@ -193,8 +202,10 @@ TEST_F(AesSivKeyManagerTest, testPrimitives) { } TEST_F(AesSivKeyManagerTest, testNewKeyErrors) { - AesSivKeyManager key_manager; - const KeyFactory& key_factory = key_manager.get_key_factory(); + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); + const KeyFactory& key_factory = key_manager->get_key_factory(); { // Bad key format. AesEaxKeyFormat key_format; @@ -221,14 +232,16 @@ TEST_F(AesSivKeyManagerTest, testNewKeyErrors) { auto result = key_factory.NewKey(key_format); EXPECT_FALSE(result.ok()); EXPECT_EQ(util::error::INVALID_ARGUMENT, result.status().error_code()); - EXPECT_PRED_FORMAT2(testing::IsSubstring, "key_size", + EXPECT_PRED_FORMAT2(testing::IsSubstring, "key size", result.status().error_message()); } } TEST_F(AesSivKeyManagerTest, testNewKeyBasic) { - AesSivKeyManager key_manager; - const KeyFactory& key_factory = key_manager.get_key_factory(); + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); + const KeyFactory& key_factory = key_manager->get_key_factory(); AesSivKeyFormat key_format; key_format.set_key_size(64); diff --git a/cc/daead/deterministic_aead_config.cc b/cc/daead/deterministic_aead_config.cc index 05f1ff67e..4a4232b3e 100644 --- a/cc/daead/deterministic_aead_config.cc +++ b/cc/daead/deterministic_aead_config.cc @@ -38,7 +38,7 @@ const RegistryConfig& DeterministicAeadConfig::Latest() { // static util::Status DeterministicAeadConfig::Register() { // Register key manager. - auto status = Registry::RegisterKeyManager( + auto status = Registry::RegisterKeyTypeManager( absl::make_unique<AesSivKeyManager>(), true); if (!status.ok()) return status; diff --git a/cc/daead/deterministic_aead_factory_test.cc b/cc/daead/deterministic_aead_factory_test.cc index 56213a405..90363c47b 100644 --- a/cc/daead/deterministic_aead_factory_test.cc +++ b/cc/daead/deterministic_aead_factory_test.cc @@ -16,6 +16,7 @@ #include "tink/daead/deterministic_aead_factory.h" #include "gtest/gtest.h" +#include "tink/core/key_manager_impl.h" #include "tink/crypto_format.h" #include "tink/daead/aes_siv_key_manager.h" #include "tink/daead/deterministic_aead_config.h" @@ -25,7 +26,6 @@ #include "tink/util/status.h" #include "tink/util/test_util.h" #include "proto/aes_siv.pb.h" -#include "proto/tink.pb.h" using crypto::tink::TestKeysetHandle; using crypto::tink::test::AddRawKey; @@ -54,9 +54,11 @@ TEST_F(DeterministicAeadFactoryTest, testBasic) { TEST_F(DeterministicAeadFactoryTest, testPrimitive) { // Prepare a template for generating keys for a Keyset. - AesSivKeyManager key_manager; - const KeyFactory& key_factory = key_manager.get_key_factory(); - std::string key_type = key_manager.get_key_type(); + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); + const KeyFactory& key_factory = key_manager->get_key_factory(); + std::string key_type = key_manager->get_key_type(); AesSivKeyFormat key_format; key_format.set_key_size(64); @@ -114,7 +116,7 @@ TEST_F(DeterministicAeadFactoryTest, testPrimitive) { // Create raw ciphertext with 2nd key, and decrypt // with DeterministicAead-instance. auto raw_daead = std::move( - key_manager.GetPrimitive(keyset.key(1).key_data()).ValueOrDie()); + key_manager->GetPrimitive(keyset.key(1).key_data()).ValueOrDie()); std::string raw_ciphertext = raw_daead->EncryptDeterministically(plaintext, aad).ValueOrDie(); decrypt_result = daead->DecryptDeterministically(ciphertext, aad); diff --git a/cc/daead/deterministic_aead_key_templates_test.cc b/cc/daead/deterministic_aead_key_templates_test.cc index 6de09816e..3d87baf69 100644 --- a/cc/daead/deterministic_aead_key_templates_test.cc +++ b/cc/daead/deterministic_aead_key_templates_test.cc @@ -17,6 +17,7 @@ #include "tink/daead/deterministic_aead_key_templates.h" #include "gtest/gtest.h" +#include "tink/core/key_manager_impl.h" #include "tink/daead/aes_siv_key_manager.h" #include "proto/aes_siv.pb.h" #include "proto/common.pb.h" @@ -49,10 +50,12 @@ TEST(DeterministicAeadKeyTemplatesTest, testAesSivKeyTemplates) { EXPECT_EQ(&key_template, &key_template_2); // Check that the template works with the key manager. - AesSivKeyManager key_manager; - EXPECT_EQ(key_manager.get_key_type(), key_template.type_url()); + AesSivKeyManager key_type_manager; + auto key_manager = + internal::MakeKeyManager<DeterministicAead>(&key_type_manager); + EXPECT_EQ(key_manager->get_key_type(), key_template.type_url()); auto new_key_result = - key_manager.get_key_factory().NewKey(key_template.value()); + key_manager->get_key_factory().NewKey(key_template.value()); EXPECT_TRUE(new_key_result.ok()) << new_key_result.status(); } } diff --git a/objc/Tests/UnitTests/daead/TINKDeterministicAeadFactoryTest.mm b/objc/Tests/UnitTests/daead/TINKDeterministicAeadFactoryTest.mm index 377f36e6d..3c9b21b85 100644 --- a/objc/Tests/UnitTests/daead/TINKDeterministicAeadFactoryTest.mm +++ b/objc/Tests/UnitTests/daead/TINKDeterministicAeadFactoryTest.mm @@ -43,6 +43,7 @@ using crypto::tink::KeyFactory; using crypto::tink::TestKeysetHandle; using crypto::tink::test::AddRawKey; using crypto::tink::test::AddTinkKey; +using google::crypto::tink::AesSivKey; using google::crypto::tink::AesSivKeyFormat; using google::crypto::tink::KeyData; using google::crypto::tink::Keyset; @@ -69,10 +70,7 @@ using google::crypto::tink::KeyStatusType; } - (void)testPrimitive { - // Prepare a template for generating keys for a Keyset. - AesSivKeyManager key_manager; - const KeyFactory &key_factory = key_manager.get_key_factory(); - std::string key_type = key_manager.get_key_type(); + std::string key_type = AesSivKeyManager().get_key_type(); AesSivKeyFormat key_format; key_format.set_key_size(64); @@ -80,16 +78,16 @@ using google::crypto::tink::KeyStatusType; // Prepare a Keyset. Keyset keyset; uint32_t key_id_1 = 1234543; - auto new_key = std::move(key_factory.NewKey(key_format).ValueOrDie()); - AddTinkKey(key_type, key_id_1, *new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); + auto new_key = AesSivKeyManager().CreateKey(key_format).ValueOrDie(); + AddTinkKey(key_type, key_id_1, new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); uint32_t key_id_2 = 726329; - new_key = std::move(key_factory.NewKey(key_format).ValueOrDie()); - AddRawKey(key_type, key_id_2, *new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); + new_key = AesSivKeyManager().CreateKey(key_format).ValueOrDie(); + AddRawKey(key_type, key_id_2, new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); uint32_t key_id_3 = 7213743; - new_key = std::move(key_factory.NewKey(key_format).ValueOrDie()); - AddTinkKey(key_type, key_id_3, *new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); + new_key = AesSivKeyManager().CreateKey(key_format).ValueOrDie(); + AddTinkKey(key_type, key_id_3, new_key, KeyStatusType::ENABLED, KeyData::SYMMETRIC, &keyset); keyset.set_primary_key_id(key_id_3); @@ -124,7 +122,10 @@ using google::crypto::tink::KeyStatusType; XCTAssertTrue([plaintext isEqual:decrypted]); // Create raw ciphertext with 2nd key, and decrypt with Aead-instance. - auto raw_aead = std::move(key_manager.GetPrimitive(keyset.key(1).key_data()).ValueOrDie()); + AesSivKey raw_key; + XCTAssertTrue(raw_key.ParseFromString(keyset.key(1).key_data().value())); + auto raw_aead = std::move(AesSivKeyManager() + .GetPrimitive<crypto::tink::DeterministicAead>(raw_key).ValueOrDie()); std::string raw_ciphertext = raw_aead ->EncryptDeterministically(absl::string_view("some_plaintext"), absl::string_view("some_aad")) diff --git a/python/daead/deterministic_aead_key_manager_test.py b/python/daead/deterministic_aead_key_manager_test.py index 94bf467ce..bf5a336e8 100644 --- a/python/daead/deterministic_aead_key_manager_test.py +++ b/python/daead/deterministic_aead_key_manager_test.py @@ -61,7 +61,7 @@ class DeterministicAeadKeyManagerTest(absltest.TestCase): key_template = deterministic_aead_key_templates.create_aes_siv_key_template( 63) with self.assertRaisesRegex(tink_error.TinkError, - 'Invalid AesSivKeyFormat'): + 'Invalid key size'): self.key_manager.new_key_data(key_template) def test_encrypt_decrypt(self): -- GitLab