// 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 #include #include #include #include #include "absl/flags/flag.h" #include "absl/flags/parse.h" #include "absl/strings/str_cat.h" #include "tink/config/tink_config.h" #include "tink/hybrid/hpke_config.h" #ifdef TINK_CROSS_LANG_TESTS_AWSKMS #include "tink/integration/awskms/aws_kms_client.h" #endif // TINK_CROSS_LANG_TESTS_AWSKMS #include "tink/integration/gcpkms/gcp_kms_client.h" #include "tink/jwt/jwt_mac_config.h" #include "tink/jwt/jwt_signature_config.h" #include "tink/util/fake_kms_client.h" #include "tink/util/status.h" #include "aead_impl.h" #include "deterministic_aead_impl.h" #include "hybrid_impl.h" #include "jwt_impl.h" #include "keyset_impl.h" #include "mac_impl.h" #include "metadata_impl.h" #include "prf_set_impl.h" #include "signature_impl.h" #include "streaming_aead_impl.h" #include "proto/testing_api.grpc.pb.h" ABSL_FLAG(int, port, 23456, "the port"); ABSL_FLAG(std::string, gcp_credentials_path, "", "Google Cloud KMS credentials path"); ABSL_FLAG( std::string, gcp_key_uri, "", absl::StrCat("Google Cloud KMS key URL of the form: ", "gcp-kms://projects/*/locations/*/keyRings/*/cryptoKeys/*.")); ABSL_FLAG(std::string, aws_credentials_path, "", "AWS KMS credentials path"); ABSL_FLAG( std::string, aws_key_uri, "", absl::StrCat("AWS KMS key URL of the form: ", "aws-kms://arn:aws:kms:::key/.")); namespace tink_testing_api { void RunServer() { auto status = crypto::tink::TinkConfig::Register(); if (!status.ok()) { std::cerr << "TinkConfig::Register() failed: " << status.message() << std::endl; return; } auto hpke_status = crypto::tink::RegisterHpke(); if (!hpke_status.ok()) { std::cerr << "RegisterHpke() failed: " << hpke_status.message() << std::endl; return; } auto jwt_mac_status = crypto::tink::JwtMacRegister(); if (!jwt_mac_status.ok()) { std::cerr << "JwtMacRegister() failed: " << jwt_mac_status.message() << std::endl; return; } auto jwt_signature_status = crypto::tink::JwtSignatureRegister(); if (!jwt_signature_status.ok()) { std::cerr << "JwtSignatureRegister() failed: " << jwt_signature_status.message() << std::endl; return; } auto register_fake_kms_client_status = crypto::tink::test::FakeKmsClient::RegisterNewClient("", ""); if (!register_fake_kms_client_status.ok()) { std::cerr << "FakeKmsClient::RegisterNewClient(\"\", \"\") failed: " << register_fake_kms_client_status.message() << std::endl; return; } std::string gcp_credentials_path = absl::GetFlag(FLAGS_gcp_credentials_path); std::string gcp_key_uri = absl::GetFlag(FLAGS_gcp_key_uri); crypto::tink::util::Status register_gcpkms_client_status = crypto::tink::integration::gcpkms::GcpKmsClient::RegisterNewClient( gcp_key_uri, gcp_credentials_path); if (!register_gcpkms_client_status.ok()) { std::cerr << "GcpKmsClient::RegisterNewClient(\"\", \"" << gcp_credentials_path << "\") failed: " << register_gcpkms_client_status.message() << std::endl; return; } #ifdef TINK_CROSS_LANG_TESTS_AWSKMS std::string aws_credentials_path = absl::GetFlag(FLAGS_aws_credentials_path); std::string aws_key_uri = absl::GetFlag(FLAGS_aws_key_uri); crypto::tink::util::Status register_awskms_client_status = crypto::tink::integration::awskms::AwsKmsClient::RegisterNewClient( aws_key_uri, aws_credentials_path); if (!register_awskms_client_status.ok()) { std::cerr << "AwsKmsClient::RegisterNewClient(\"\", \"" << aws_credentials_path << "\") failed: " << register_awskms_client_status.message() << std::endl; return; } #endif // TINK_CROSS_LANG_TESTS_AWSKMS const int port = absl::GetFlag(FLAGS_port); std::string server_address = absl::StrCat("[::]:", port); MetadataImpl metadata; KeysetImpl keyset; AeadImpl aead; DeterministicAeadImpl deterministic_aead; HybridImpl hybrid; MacImpl mac; SignatureImpl signature; StreamingAeadImpl streaming_aead; PrfSetImpl prf_set; JwtImpl jwt; grpc::ServerBuilder builder; builder.AddListeningPort( server_address, ::grpc::experimental::LocalServerCredentials(LOCAL_TCP)); builder.RegisterService(&metadata); builder.RegisterService(&keyset); builder.RegisterService(&aead); builder.RegisterService(&deterministic_aead); builder.RegisterService(&hybrid); builder.RegisterService(&mac); builder.RegisterService(&signature); builder.RegisterService(&prf_set); builder.RegisterService(&streaming_aead); builder.RegisterService(&jwt); std::unique_ptr server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); } } // namespace tink_testing_api int main(int argc, char** argv) { absl::ParseCommandLine(argc, argv); tink_testing_api::RunServer(); return 0; }