1 //
2 //
3 // Copyright 2019 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18
19 #include <memory>
20 #include <string>
21
22 #include <grpc/grpc_crl_provider.h>
23 #include <grpc/grpc_security.h>
24 #include <grpc/grpc_security_constants.h>
25 #include <grpc/support/log.h>
26 #include <grpcpp/security/tls_certificate_provider.h>
27 #include <grpcpp/security/tls_certificate_verifier.h>
28 #include <grpcpp/security/tls_credentials_options.h>
29 #include <grpcpp/security/tls_crl_provider.h>
30
31 namespace grpc {
32 namespace experimental {
33
TlsCredentialsOptions()34 TlsCredentialsOptions::TlsCredentialsOptions() {
35 c_credentials_options_ = grpc_tls_credentials_options_create();
36 }
37
~TlsCredentialsOptions()38 TlsCredentialsOptions::~TlsCredentialsOptions() {
39 grpc_tls_credentials_options_destroy(c_credentials_options_);
40 }
41
TlsCredentialsOptions(const TlsCredentialsOptions & other)42 TlsCredentialsOptions::TlsCredentialsOptions(
43 const TlsCredentialsOptions& other) {
44 c_credentials_options_ =
45 grpc_tls_credentials_options_copy(other.c_credentials_options_);
46 }
47
set_certificate_provider(std::shared_ptr<CertificateProviderInterface> certificate_provider)48 void TlsCredentialsOptions::set_certificate_provider(
49 std::shared_ptr<CertificateProviderInterface> certificate_provider) {
50 certificate_provider_ = certificate_provider;
51 if (certificate_provider_ != nullptr) {
52 grpc_tls_credentials_options_set_certificate_provider(
53 c_credentials_options_, certificate_provider_->c_provider());
54 }
55 }
56
set_crl_provider(std::shared_ptr<CrlProvider> crl_provider)57 void TlsCredentialsOptions::set_crl_provider(
58 std::shared_ptr<CrlProvider> crl_provider) {
59 grpc_tls_credentials_options_set_crl_provider(c_credentials_options_,
60 crl_provider);
61 }
62
watch_root_certs()63 void TlsCredentialsOptions::watch_root_certs() {
64 grpc_tls_credentials_options_watch_root_certs(c_credentials_options_);
65 }
66
set_root_cert_name(const std::string & root_cert_name)67 void TlsCredentialsOptions::set_root_cert_name(
68 const std::string& root_cert_name) {
69 grpc_tls_credentials_options_set_root_cert_name(c_credentials_options_,
70 root_cert_name.c_str());
71 }
72
watch_identity_key_cert_pairs()73 void TlsCredentialsOptions::watch_identity_key_cert_pairs() {
74 grpc_tls_credentials_options_watch_identity_key_cert_pairs(
75 c_credentials_options_);
76 }
77
set_identity_cert_name(const std::string & identity_cert_name)78 void TlsCredentialsOptions::set_identity_cert_name(
79 const std::string& identity_cert_name) {
80 grpc_tls_credentials_options_set_identity_cert_name(
81 c_credentials_options_, identity_cert_name.c_str());
82 }
83
set_crl_directory(const std::string & path)84 void TlsCredentialsOptions::set_crl_directory(const std::string& path) {
85 grpc_tls_credentials_options_set_crl_directory(c_credentials_options_,
86 path.c_str());
87 }
88
set_tls_session_key_log_file_path(const std::string & tls_session_key_log_file_path)89 void TlsCredentialsOptions::set_tls_session_key_log_file_path(
90 const std::string& tls_session_key_log_file_path) {
91 grpc_tls_credentials_options_set_tls_session_key_log_file_path(
92 c_credentials_options_, tls_session_key_log_file_path.c_str());
93 }
94
set_certificate_verifier(std::shared_ptr<CertificateVerifier> certificate_verifier)95 void TlsCredentialsOptions::set_certificate_verifier(
96 std::shared_ptr<CertificateVerifier> certificate_verifier) {
97 certificate_verifier_ = certificate_verifier;
98 if (certificate_verifier_ != nullptr) {
99 grpc_tls_credentials_options_set_certificate_verifier(
100 c_credentials_options_, certificate_verifier_->c_verifier());
101 }
102 }
103
set_min_tls_version(grpc_tls_version tls_version)104 void TlsCredentialsOptions::set_min_tls_version(grpc_tls_version tls_version) {
105 grpc_tls_credentials_options* options = mutable_c_credentials_options();
106 GPR_ASSERT(options != nullptr);
107 grpc_tls_credentials_options_set_min_tls_version(options, tls_version);
108 }
109
set_max_tls_version(grpc_tls_version tls_version)110 void TlsCredentialsOptions::set_max_tls_version(grpc_tls_version tls_version) {
111 grpc_tls_credentials_options* options = mutable_c_credentials_options();
112 GPR_ASSERT(options != nullptr);
113 grpc_tls_credentials_options_set_max_tls_version(options, tls_version);
114 }
115
c_credentials_options() const116 grpc_tls_credentials_options* TlsCredentialsOptions::c_credentials_options()
117 const {
118 return grpc_tls_credentials_options_copy(c_credentials_options_);
119 }
120
set_check_call_host(bool check_call_host)121 void TlsCredentialsOptions::set_check_call_host(bool check_call_host) {
122 grpc_tls_credentials_options* options = mutable_c_credentials_options();
123 GPR_ASSERT(options != nullptr);
124 grpc_tls_credentials_options_set_check_call_host(options, check_call_host);
125 }
126
set_verify_server_certs(bool verify_server_certs)127 void TlsChannelCredentialsOptions::set_verify_server_certs(
128 bool verify_server_certs) {
129 grpc_tls_credentials_options* options = mutable_c_credentials_options();
130 GPR_ASSERT(options != nullptr);
131 grpc_tls_credentials_options_set_verify_server_cert(options,
132 verify_server_certs);
133 }
134
set_cert_request_type(grpc_ssl_client_certificate_request_type cert_request_type)135 void TlsServerCredentialsOptions::set_cert_request_type(
136 grpc_ssl_client_certificate_request_type cert_request_type) {
137 grpc_tls_credentials_options* options = mutable_c_credentials_options();
138 GPR_ASSERT(options != nullptr);
139 grpc_tls_credentials_options_set_cert_request_type(options,
140 cert_request_type);
141 }
142
set_send_client_ca_list(bool send_client_ca_list)143 void TlsServerCredentialsOptions::set_send_client_ca_list(
144 bool send_client_ca_list) {
145 grpc_tls_credentials_options* options = mutable_c_credentials_options();
146 GPR_ASSERT(options != nullptr);
147 grpc_tls_credentials_options_set_send_client_ca_list(options,
148 send_client_ca_list);
149 }
150
151 } // namespace experimental
152 } // namespace grpc
153