// // Copyright 2020 gRPC authors. // // 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 "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h" #include #include #include #include "src/core/lib/surface/api_trace.h" namespace grpc_core { StaticDataCertificateProvider::StaticDataCertificateProvider( std::string root_certificate, grpc_core::PemKeyCertPairList pem_key_cert_pairs) : distributor_(MakeRefCounted()), root_certificate_(std::move(root_certificate)), pem_key_cert_pairs_(std::move(pem_key_cert_pairs)) { distributor_->SetWatchStatusCallback([this](std::string cert_name, bool root_being_watched, bool identity_being_watched) { if (!root_being_watched && !identity_being_watched) return; absl::optional root_certificate; absl::optional pem_key_cert_pairs; if (root_being_watched) { root_certificate = root_certificate_; } if (identity_being_watched) { pem_key_cert_pairs = pem_key_cert_pairs_; } distributor_->SetKeyMaterials(cert_name, std::move(root_certificate), std::move(pem_key_cert_pairs)); }); } } // namespace grpc_core /** -- Wrapper APIs declared in grpc_security.h -- **/ grpc_tls_certificate_provider* grpc_tls_certificate_provider_static_data_create( const char* root_certificate, grpc_tls_identity_pairs* pem_key_cert_pairs) { GPR_ASSERT(root_certificate != nullptr || pem_key_cert_pairs != nullptr); grpc_core::PemKeyCertPairList identity_pairs_core; if (pem_key_cert_pairs != nullptr) { identity_pairs_core = std::move(pem_key_cert_pairs->pem_key_cert_pairs); delete pem_key_cert_pairs; } std::string root_cert_core; if (root_certificate != nullptr) { root_cert_core = root_certificate; } return new grpc_core::StaticDataCertificateProvider( std::move(root_cert_core), std::move(identity_pairs_core)); } void grpc_tls_certificate_provider_release( grpc_tls_certificate_provider* provider) { GRPC_API_TRACE("grpc_tls_certificate_provider_release(provider=%p)", 1, (provider)); grpc_core::ExecCtx exec_ctx; if (provider != nullptr) provider->Unref(); }