9#include <botan/tls_policy.h>
11#include <botan/assert.h>
12#include <botan/exceptn.h>
13#include <botan/tls_signature_scheme.h>
14#include <botan/internal/fmt.h>
15#include <botan/internal/parsing.h>
46 const auto sig_schemes_str =
get_str(
"signature_schemes",
"");
51 const auto sig_schemes_str =
get_str(
"acceptable_signature_schemes",
"");
88 const auto cert_types =
get_str(
"accepted_client_certificate_types");
93 const auto cert_types =
get_str(
"accepted_server_certificate_types");
114 const auto limit =
get_len(
"record_size_limit", 0);
118 return (limit > 0) ? std::make_optional(
static_cast<uint16_t
>(limit)) : std::nullopt;
124 const auto minimum_record_size =
get_len(
"minimum_record_size", 0);
125 return (plaintext_bytes < minimum_record_size) ? minimum_record_size - plaintext_bytes : 0;
133 std::string group_str =
get_str(
"key_exchange_groups");
135 if(group_str.empty()) {
140 if(group_str.empty()) {
148 const std::string group_str =
get_str(
"key_exchange_groups_to_offer",
"notset");
150 if(group_str.empty() || group_str ==
"notset") {
155 if(group_str ==
"none") {
195 const std::string v =
get_str(
"dtls_maximum_hello_verify_requests");
233 std::vector<uint16_t> r;
234 for(
const auto& p :
get_list(
"srtp_profiles", std::vector<std::string>())) {
236 r.push_back(srtp.value());
257 std::istringstream iss{std::string(s)};
264 const std::string v =
get_str(key);
274 std::vector<Group_Params> groups;
275 for(
const auto& group_name :
split_on(group_str,
' ')) {
282 if(group_id == Group_Params::NONE) {
285 const unsigned long ll_id = std::stoul(group_name, &consumed, 0);
286 if(consumed != group_name.size()) {
290 const uint16_t
id =
static_cast<uint16_t
>(ll_id);
302 if(group_id != Group_Params::NONE) {
303 groups.push_back(group_id);
311 std::vector<Certificate_Type> cert_types;
312 for(
const std::string& cert_type_name :
split_on(cert_type_names,
' ')) {
320 std::vector<Signature_Scheme> sig_schemes;
321 for(
const auto& sig_scheme_name :
split_on(sig_scheme_str,
' ')) {
328 const std::string v =
get_str(key);
338 using rep_t = std::chrono::seconds::rep;
339 constexpr rep_t max_seconds = std::chrono::seconds::max().count();
340 constexpr auto max_sizet = std::numeric_limits<size_t>::max();
341 using ull =
unsigned long long;
347 const rep_t positive_default = std::max(def.count(), rep_t(0));
349 const size_t positive_capped_default =
static_cast<size_t>(std::min<ull>(positive_default, max_sizet));
351 const rep_t result =
static_cast<rep_t
>(std::min<ull>(
get_len(key, positive_capped_default), max_seconds));
353 return std::chrono::seconds(result);
357 const std::string v =
get_str(key);
363 if(v ==
"true" || v ==
"True") {
365 }
else if(v ==
"false" || v ==
"False") {
373 auto i = m_kv.find(key);
374 if(i == m_kv.end()) {
382 auto i = m_kv.find(key);
384 if(overwrite ==
false && i != m_kv.end()) {
388 m_kv.insert(i, std::make_pair(key, val));
#define BOTAN_ARG_CHECK(expr, msg)
bool is_available() const
static std::optional< Group_Params > from_string(std::string_view group_name)
virtual bool include_time_in_hello_random() const
virtual size_t dtls_maximum_timeout() const
virtual size_t minimum_ecdh_group_size() const
virtual size_t dtls_default_mtu() const
virtual bool allow_tls12() const
virtual std::vector< Signature_Scheme > allowed_signature_schemes() const
virtual bool reuse_session_tickets() const
virtual std::vector< Certificate_Type > accepted_server_certificate_types() const
virtual std::vector< Certificate_Type > accepted_client_certificate_types() const
virtual bool require_client_certificate_authentication() const
virtual std::vector< Group_Params > key_exchange_groups() const
virtual size_t new_session_tickets_upon_handshake_success() const
virtual std::vector< Group_Params > key_exchange_groups_to_offer() const
virtual size_t minimum_rsa_bits() const
virtual std::optional< size_t > dtls_maximum_hello_verify_requests() const
virtual bool tls_13_middlebox_compatibility_mode() const
virtual bool allow_client_initiated_renegotiation() const
virtual bool allow_ssl_key_log_file() const
virtual bool require_cert_revocation_info() const
virtual bool negotiate_encrypt_then_mac() const
virtual bool require_extended_master_secret() const
virtual bool server_uses_own_ciphersuite_preferences() const
virtual bool support_cert_status_message() const
virtual std::vector< std::string > allowed_macs() const
virtual bool hide_unknown_users() const
virtual bool hash_hello_random() const
virtual bool allow_tls13() const
virtual std::vector< std::string > allowed_key_exchange_methods() const
virtual size_t dtls_initial_timeout() const
virtual size_t maximum_session_tickets_per_client_hello() const
virtual std::vector< Signature_Scheme > acceptable_signature_schemes() const
virtual bool use_ecc_point_compression() const
virtual bool allow_dtls12() const
virtual size_t minimum_dh_group_size() const
virtual bool allow_insecure_renegotiation() const
virtual std::vector< std::string > allowed_ciphers() const
virtual std::chrono::seconds session_ticket_lifetime() const
virtual size_t minimum_signature_strength() const
virtual std::vector< std::string > allowed_signature_methods() const
virtual size_t minimum_ecdsa_group_size() const
virtual std::vector< std::string > allowed_signature_hashes() const
virtual bool allow_server_initiated_renegotiation() const
static Signature_Scheme from_string(std::string_view str)
size_t dtls_initial_timeout() const override
bool allow_dtls12() const override
bool server_uses_own_ciphersuite_preferences() const override
bool hash_hello_random() const override
std::chrono::seconds session_ticket_lifetime() const override
size_t record_padding_bytes(size_t plaintext_bytes) const override
std::optional< uint16_t > record_size_limit() const override
bool allow_ssl_key_log_file() const override
bool include_time_in_hello_random() const override
bool allow_client_initiated_renegotiation() const override
std::string get_str(const std::string &key, const std::string &def="") const
bool support_cert_status_message() const override
std::vector< std::string > allowed_signature_methods() const override
std::vector< Group_Params > key_exchange_groups() const override
bool require_cert_revocation_info() const override
std::vector< std::string > allowed_key_exchange_methods() const override
size_t minimum_ecdsa_group_size() const override
bool set_value(const std::string &key, std::string_view val, bool overwrite)
bool allow_tls13() const override
size_t maximum_session_tickets_per_client_hello() const override
std::vector< Certificate_Type > accepted_server_certificate_types() const override
std::vector< Group_Params > key_exchange_groups_to_offer() const override
std::chrono::seconds get_duration(const std::string &key, std::chrono::seconds def) const
size_t new_session_tickets_upon_handshake_success() const override
bool require_extended_master_secret() const override
std::vector< std::string > allowed_signature_hashes() const override
std::vector< uint16_t > srtp_profiles() const override
bool hide_unknown_users() const override
std::vector< std::string > allowed_ciphers() const override
Text_Policy(std::string_view s)
size_t minimum_ecdh_group_size() const override
void set(const std::string &key, const std::string &value)
bool allow_server_initiated_renegotiation() const override
bool get_bool(const std::string &key, bool def) const
size_t minimum_signature_strength() const override
std::vector< Certificate_Type > accepted_client_certificate_types() const override
bool negotiate_encrypt_then_mac() const override
std::optional< size_t > dtls_maximum_hello_verify_requests() const override
bool require_client_certificate_authentication() const override
bool tls_13_middlebox_compatibility_mode() const override
std::vector< Signature_Scheme > acceptable_signature_schemes() const override
size_t dtls_maximum_timeout() const override
bool reuse_session_tickets() const override
size_t get_len(const std::string &key, size_t def) const
bool allow_insecure_renegotiation() const override
bool allow_tls12() const override
std::vector< Signature_Scheme > allowed_signature_schemes() const override
bool use_ecc_point_compression() const override
std::vector< Certificate_Type > read_cert_type_list(const std::string &cert_type_str) const
std::vector< Signature_Scheme > read_sig_scheme_list(std::string_view sig_scheme_str) const
size_t dtls_default_mtu() const override
std::vector< Group_Params > read_group_list(std::string_view group_str) const
size_t minimum_rsa_bits() const override
std::vector< std::string > allowed_macs() const override
size_t minimum_dh_group_size() const override
std::vector< std::string > get_list(const std::string &key, const std::vector< std::string > &def) const
Certificate_Type certificate_type_from_string(const std::string &type_str)
std::map< std::string, std::string > read_cfg(std::istream &is)
std::string fmt(std::string_view format, const T &... args)
std::vector< std::string > split_on(std::string_view str, char delim)
std::optional< uint16_t > parse_u16(std::string_view input, bool require_canonical)
uint32_t to_u32bit(std::string_view input)