1 #ifndef EAGINE_SSL_API_HPP
9 #define EAGINE_SSL_API_HPP
17 namespace eagine::sslp {
19 template <
typename ApiTraits>
22 ,
public basic_ssl_operations<ApiTraits>
23 ,
public basic_ssl_constants<ApiTraits> {
26 using combined_result =
typename ApiTraits::template combined_result<R>;
28 using evp_md_type = ssl_types::evp_md_type;
30 basic_ssl_api(ApiTraits traits)
31 : ApiTraits{std::move(traits)}
32 , basic_ssl_operations<ApiTraits>{*
static_cast<ApiTraits*
>(
this)}
33 , basic_ssl_constants<ApiTraits>{
34 *
static_cast<ApiTraits*
>(
this),
35 *
static_cast<basic_ssl_operations<ApiTraits>*
>(
this)} {}
38 : basic_ssl_api{ApiTraits{}} {}
40 template <
typename Function>
41 void for_each_engine(Function
function)
const {
42 if(
auto opt_eng = this->get_first_engine()) {
43 owned_engine eng = std::move(
extract(opt_eng));
45 function(engine(eng));
46 opt_eng = this->get_next_engine(eng);
48 eng = std::move(
extract(opt_eng));
59 template <
typename OptMdt>
65 return data_digest(data, dst,
extract(opt_mdtype));
71 return do_data_digest(data, dst, this->message_digest_md5());
76 return do_data_digest(data, dst, this->message_digest_sha1());
81 return do_data_digest(data, dst, this->message_digest_sha224());
86 return do_data_digest(data, dst, this->message_digest_sha256());
91 return do_data_digest(data, dst, this->message_digest_sha384());
96 return do_data_digest(data, dst, this->message_digest_sha512());
99 auto sign_data_digest(
102 message_digest_type mdtype,
105 auto verify_data_digest(
108 message_digest_type mdtype,
109 pkey pky)
const noexcept -> bool;
111 auto parse_private_key(
113 password_callback get_passwd = {})
const noexcept
114 -> combined_result<owned_pkey>;
116 auto parse_public_key(
118 password_callback get_passwd = {})
const noexcept
119 -> combined_result<owned_pkey>;
122 const noexcept -> combined_result<owned_x509>;
124 auto ca_verify_certificate(
string_view ca_file_path, x509)
const noexcept
127 auto ca_verify_certificate(x509 ca_cert, x509)
const noexcept -> bool;
130 template <std::
size_t I,
typename ApiTraits>
131 auto get(basic_ssl_api<ApiTraits>& x) noexcept ->
132 typename std::tuple_element<I, basic_ssl_api<ApiTraits>>::type& {
136 template <std::
size_t I,
typename ApiTraits>
137 auto get(
const basic_ssl_api<ApiTraits>& x) noexcept ->
const
138 typename std::tuple_element<I, basic_ssl_api<ApiTraits>>::type& {
144 #include <eagine/ssl_api.inl>
149 template <
typename ApiTraits>
150 struct tuple_size<
eagine::sslp::basic_ssl_api<ApiTraits>>
151 :
public std::integral_constant<std::size_t, 2> {};
153 template <
typename ApiTraits>
154 struct tuple_element<0,
eagine::sslp::basic_ssl_api<ApiTraits>> {
155 using type = eagine::sslp::basic_ssl_operations<ApiTraits>;
158 template <
typename ApiTraits>
159 struct tuple_element<1,
eagine::sslp::basic_ssl_api<ApiTraits>> {
160 using type = eagine::sslp::basic_ssl_constants<ApiTraits>;
165 #endif // EAGINE_SSL_API_HPP