// Copyright 2020 Google LLC // // 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/keyderivation/key_derivation_config.h" #include #include #include "gmock/gmock.h" #include "gtest/gtest.h" #include "tink/aead/aead_config.h" #include "tink/aead/aead_key_templates.h" #include "tink/aead/aes_gcm_key_manager.h" #include "tink/keyderivation/key_derivation_key_templates.h" #include "tink/keyderivation/keyset_deriver.h" #include "tink/prf/prf_key_templates.h" #include "tink/registry.h" #include "tink/util/statusor.h" #include "tink/util/test_matchers.h" namespace crypto { namespace tink { namespace { using ::crypto::tink::test::IsOk; using ::testing::Not; TEST(KeyDerivationConfigTest, Register) { Registry::Reset(); EXPECT_THAT(KeyDerivationKeyTemplates::CreatePrfBasedKeyTemplate( PrfKeyTemplates::HkdfSha256(), AeadKeyTemplates::Aes256Gcm()), Not(IsOk())); ASSERT_THAT(KeyDerivationConfig::Register(), IsOk()); ASSERT_THAT(AeadConfig::Register(), IsOk()); ASSERT_THAT(Registry::RegisterKeyTypeManager( absl::make_unique(), true), IsOk()); util::StatusOr<::google::crypto::tink::KeyTemplate> templ = KeyDerivationKeyTemplates::CreatePrfBasedKeyTemplate( PrfKeyTemplates::HkdfSha256(), AeadKeyTemplates::Aes256Gcm()); ASSERT_THAT(templ, IsOk()); util::StatusOr> handle = KeysetHandle::GenerateNew(*templ); ASSERT_THAT(handle, IsOk()); util::StatusOr> deriver = (*handle)->GetPrimitive(); ASSERT_THAT(deriver, IsOk()); util::StatusOr> derived_handle = (*deriver)->DeriveKeyset("salty"); ASSERT_THAT(derived_handle, IsOk()); util::StatusOr> aead = (*derived_handle)->GetPrimitive(); ASSERT_THAT(aead, IsOk()); std::string plaintext = "plaintext"; std::string ad = "ad"; util::StatusOr ciphertext = (*aead)->Encrypt(plaintext, ad); ASSERT_THAT(ciphertext, IsOk()); util::StatusOr got = (*aead)->Decrypt(*ciphertext, ad); ASSERT_THAT(got, IsOk()); EXPECT_EQ(plaintext, *got); } } // namespace } // namespace tink } // namespace crypto