Botan  2.6.0
Crypto and TLS for C++11
Public Member Functions | List of all members
Botan::TLS::NSA_Suite_B_128 Class Reference

#include <tls_policy.h>

Inheritance diagram for Botan::TLS::NSA_Suite_B_128:
Botan::TLS::Policy

Public Member Functions

virtual bool acceptable_ciphersuite (const Ciphersuite &suite) const
 
virtual bool acceptable_protocol_version (Protocol_Version version) const
 
virtual bool allow_client_initiated_renegotiation () const
 
bool allow_dtls10 () const override
 
bool allow_dtls12 () const override
 
virtual bool allow_insecure_renegotiation () const
 
virtual bool allow_server_initiated_renegotiation () const
 
bool allow_tls10 () const override
 
bool allow_tls11 () const override
 
bool allow_tls12 () const override
 
std::vector< std::string > allowed_ciphers () const override
 
std::vector< std::string > allowed_key_exchange_methods () const override
 
std::vector< std::string > allowed_macs () const override
 
bool allowed_signature_hash (const std::string &hash) const
 
std::vector< std::string > allowed_signature_hashes () const override
 
bool allowed_signature_method (const std::string &sig_method) const
 
std::vector< std::string > allowed_signature_methods () const override
 
virtual std::vector< Signature_Schemeallowed_signature_schemes () const
 
virtual void check_peer_key_acceptable (const Public_Key &public_key) const
 
virtual Group_Params choose_key_exchange_group (const std::vector< Group_Params > &peer_groups) const
 
virtual std::vector< uint16_t > ciphersuite_list (Protocol_Version version, bool have_srp) const
 
virtual Group_Params default_dh_group () const
 
virtual size_t dtls_default_mtu () const
 
virtual size_t dtls_initial_timeout () const
 
virtual size_t dtls_maximum_timeout () const
 
virtual bool hide_unknown_users () const
 
virtual bool include_time_in_hello_random () const
 
std::vector< Group_Paramskey_exchange_groups () const override
 
virtual Protocol_Version latest_supported_version (bool datagram) const
 
virtual size_t minimum_dh_group_size () const
 
virtual size_t minimum_dsa_group_size () const
 
virtual size_t minimum_ecdh_group_size () const
 
virtual size_t minimum_ecdsa_group_size () const
 
virtual size_t minimum_rsa_bits () const
 
size_t minimum_signature_strength () const override
 
virtual bool negotiate_encrypt_then_mac () const
 
virtual void print (std::ostream &o) const
 
virtual bool require_cert_revocation_info () const
 
virtual bool send_fallback_scsv (Protocol_Version version) const
 
virtual bool server_uses_own_ciphersuite_preferences () const
 
virtual uint32_t session_ticket_lifetime () const
 
virtual std::vector< uint16_t > srtp_profiles () const
 
virtual bool support_cert_status_message () const
 
std::string to_string () const
 
virtual bool use_ecc_point_compression () const
 

Detailed Description

NSA Suite B 128-bit security level (RFC 6460)

Definition at line 314 of file tls_policy.h.

Member Function Documentation

◆ acceptable_ciphersuite()

bool Botan::TLS::Policy::acceptable_ciphersuite ( const Ciphersuite suite) const
virtualinherited

Allows policy to reject any ciphersuites which are undesirable for whatever reason without having to reimplement ciphersuite_list

Definition at line 309 of file tls_policy.cpp.

References Botan::TLS::Policy::allowed_ciphers(), Botan::TLS::Policy::allowed_macs(), Botan::TLS::Ciphersuite::cipher_algo(), Botan::TLS::Ciphersuite::mac_algo(), and Botan::value_exists().

Referenced by Botan::TLS::Policy::ciphersuite_list().

310  {
311  return value_exists(allowed_ciphers(), ciphersuite.cipher_algo()) &&
312  value_exists(allowed_macs(), ciphersuite.mac_algo());
313  }
virtual std::vector< std::string > allowed_ciphers() const
Definition: tls_policy.cpp:40
virtual std::vector< std::string > allowed_macs() const
Definition: tls_policy.cpp:75
bool value_exists(const std::vector< T > &vec, const T &val)
Definition: stl_util.h:86

◆ acceptable_protocol_version()

bool Botan::TLS::Policy::acceptable_protocol_version ( Protocol_Version  version) const
virtualinherited
Returns
true if and only if we are willing to accept this version Default accepts TLS v1.0 and later or DTLS v1.2 or later.

Definition at line 272 of file tls_policy.cpp.

References Botan::TLS::Policy::allow_dtls10(), Botan::TLS::Policy::allow_dtls12(), Botan::TLS::Policy::allow_tls10(), Botan::TLS::Policy::allow_tls11(), Botan::TLS::Policy::allow_tls12(), Botan::TLS::Protocol_Version::DTLS_V10, Botan::TLS::Protocol_Version::DTLS_V12, Botan::TLS::Protocol_Version::TLS_V10, Botan::TLS::Protocol_Version::TLS_V11, and Botan::TLS::Protocol_Version::TLS_V12.

Referenced by Botan::TLS::Client_Hello::Client_Hello().

273  {
274  // Uses boolean optimization:
275  // First check the current version (left part), then if it is allowed
276  // (right part)
277  // checks are ordered according to their probability
278  return (
279  ( ( version == Protocol_Version::TLS_V12) && allow_tls12() ) ||
280  ( ( version == Protocol_Version::TLS_V10) && allow_tls10() ) ||
281  ( ( version == Protocol_Version::TLS_V11) && allow_tls11() ) ||
282  ( ( version == Protocol_Version::DTLS_V12) && allow_dtls12() ) ||
283  ( ( version == Protocol_Version::DTLS_V10) && allow_dtls10() )
284  );
285  }
virtual bool allow_tls11() const
Definition: tls_policy.cpp:319
virtual bool allow_dtls10() const
Definition: tls_policy.cpp:321
virtual bool allow_tls12() const
Definition: tls_policy.cpp:320
virtual bool allow_dtls12() const
Definition: tls_policy.cpp:322
virtual bool allow_tls10() const
Definition: tls_policy.cpp:318

◆ allow_client_initiated_renegotiation()

bool Botan::TLS::Policy::allow_client_initiated_renegotiation ( ) const
virtualinherited

Consulted by server side. If true, allows clients to initiate a new handshake

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 315 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::allow_client_initiated_renegotiation().

315 { return false; }

◆ allow_dtls10()

bool Botan::TLS::NSA_Suite_B_128::allow_dtls10 ( ) const
inlineoverridevirtual

Allow DTLS v1.0

Reimplemented from Botan::TLS::Policy.

Definition at line 340 of file tls_policy.h.

340 { return false; }

◆ allow_dtls12()

bool Botan::TLS::NSA_Suite_B_128::allow_dtls12 ( ) const
inlineoverridevirtual

Allow DTLS v1.2

Reimplemented from Botan::TLS::Policy.

Definition at line 341 of file tls_policy.h.

341 { return false; }

◆ allow_insecure_renegotiation()

bool Botan::TLS::Policy::allow_insecure_renegotiation ( ) const
virtualinherited

Allow renegotiation even if the counterparty doesn't support the secure renegotiation extension.

Warning
Changing this to true exposes you to injected plaintext attacks. Read RFC 5746 for background.

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 317 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::allow_insecure_renegotiation(), and Botan::TLS::Policy::print().

317 { return false; }

◆ allow_server_initiated_renegotiation()

bool Botan::TLS::Policy::allow_server_initiated_renegotiation ( ) const
virtualinherited

Consulted by client side. If true, allows servers to initiate a new handshake

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 316 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::allow_server_initiated_renegotiation(), and Botan::TLS::Policy::print().

316 { return false; }

◆ allow_tls10()

bool Botan::TLS::NSA_Suite_B_128::allow_tls10 ( ) const
inlineoverridevirtual

Allow TLS v1.0

Reimplemented from Botan::TLS::Policy.

Definition at line 337 of file tls_policy.h.

337 { return false; }

◆ allow_tls11()

bool Botan::TLS::NSA_Suite_B_128::allow_tls11 ( ) const
inlineoverridevirtual

Allow TLS v1.1

Reimplemented from Botan::TLS::Policy.

Definition at line 338 of file tls_policy.h.

338 { return false; }

◆ allow_tls12()

bool Botan::TLS::NSA_Suite_B_128::allow_tls12 ( ) const
inlineoverridevirtual

Allow TLS v1.2

Reimplemented from Botan::TLS::Policy.

Definition at line 339 of file tls_policy.h.

339 { return true; }

◆ allowed_ciphers()

std::vector<std::string> Botan::TLS::NSA_Suite_B_128::allowed_ciphers ( ) const
inlineoverridevirtual

Returns a list of ciphers we are willing to negotiate, in order of preference.

Reimplemented from Botan::TLS::Policy.

Definition at line 317 of file tls_policy.h.

318  { return std::vector<std::string>({"AES-128/GCM"}); }

◆ allowed_key_exchange_methods()

std::vector<std::string> Botan::TLS::NSA_Suite_B_128::allowed_key_exchange_methods ( ) const
inlineoverridevirtual

Returns a list of key exchange algorithms we are willing to use, in order of preference. Allowed values: DH, empty string (representing RSA using server certificate key)

Reimplemented from Botan::TLS::Policy.

Definition at line 326 of file tls_policy.h.

327  { return std::vector<std::string>({"ECDH"}); }

◆ allowed_macs()

std::vector<std::string> Botan::TLS::NSA_Suite_B_128::allowed_macs ( ) const
inlineoverridevirtual

Returns a list of MAC algorithms we are willing to use.

Reimplemented from Botan::TLS::Policy.

Definition at line 323 of file tls_policy.h.

324  { return std::vector<std::string>({"AEAD"}); }

◆ allowed_signature_hash()

bool Botan::TLS::Policy::allowed_signature_hash ( const std::string &  hash) const
inherited

Definition at line 120 of file tls_policy.cpp.

References Botan::TLS::Policy::allowed_signature_hashes(), and Botan::value_exists().

Referenced by Botan::TLS::Policy::allowed_signature_schemes(), and Botan::TLS::Handshake_State::choose_sig_format().

121  {
122  return value_exists(allowed_signature_hashes(), sig_hash);
123  }
virtual std::vector< std::string > allowed_signature_hashes() const
Definition: tls_policy.cpp:65
bool value_exists(const std::vector< T > &vec, const T &val)
Definition: stl_util.h:86

◆ allowed_signature_hashes()

std::vector<std::string> Botan::TLS::NSA_Suite_B_128::allowed_signature_hashes ( ) const
inlineoverridevirtual

Returns a list of hash algorithms we are willing to use for signatures, in order of preference.

Reimplemented from Botan::TLS::Policy.

Definition at line 320 of file tls_policy.h.

321  { return std::vector<std::string>({"SHA-256"}); }

◆ allowed_signature_method()

bool Botan::TLS::Policy::allowed_signature_method ( const std::string &  sig_method) const
inherited

Definition at line 115 of file tls_policy.cpp.

References Botan::TLS::Policy::allowed_signature_methods(), and Botan::value_exists().

Referenced by Botan::TLS::Policy::allowed_signature_schemes(), and Botan::TLS::Handshake_State::parse_sig_format().

116  {
117  return value_exists(allowed_signature_methods(), sig_method);
118  }
bool value_exists(const std::vector< T > &vec, const T &val)
Definition: stl_util.h:86
virtual std::vector< std::string > allowed_signature_methods() const
Definition: tls_policy.cpp:104

◆ allowed_signature_methods()

std::vector<std::string> Botan::TLS::NSA_Suite_B_128::allowed_signature_methods ( ) const
inlineoverridevirtual

Returns a list of signature algorithms we are willing to use, in order of preference. Allowed values RSA and DSA.

Reimplemented from Botan::TLS::Policy.

Definition at line 329 of file tls_policy.h.

330  { return std::vector<std::string>({"ECDSA"}); }

◆ allowed_signature_schemes()

std::vector< Signature_Scheme > Botan::TLS::Policy::allowed_signature_schemes ( ) const
virtualinherited

Definition at line 22 of file tls_policy.cpp.

References Botan::TLS::all_signature_schemes(), Botan::TLS::Policy::allowed_signature_hash(), Botan::TLS::Policy::allowed_signature_method(), Botan::TLS::hash_function_of_scheme(), and Botan::TLS::signature_algorithm_of_scheme().

Referenced by Botan::TLS::Handshake_State::choose_sig_format(), and Botan::TLS::Client_Hello::Client_Hello().

23  {
24  std::vector<Signature_Scheme> schemes;
25 
27  {
28  const bool sig_allowed = allowed_signature_method(signature_algorithm_of_scheme(scheme));
29  const bool hash_allowed = allowed_signature_hash(hash_function_of_scheme(scheme));
30 
31  if(sig_allowed && hash_allowed)
32  {
33  schemes.push_back(scheme);
34  }
35  }
36 
37  return schemes;
38  }
std::string hash_function_of_scheme(Signature_Scheme scheme)
Definition: tls_algos.cpp:191
Signature_Scheme
Definition: tls_algos.h:84
bool allowed_signature_method(const std::string &sig_method) const
Definition: tls_policy.cpp:115
bool allowed_signature_hash(const std::string &hash) const
Definition: tls_policy.cpp:120
const std::vector< Signature_Scheme > & all_signature_schemes()
Definition: tls_algos.cpp:229
std::string signature_algorithm_of_scheme(Signature_Scheme scheme)
Definition: tls_algos.cpp:291

◆ check_peer_key_acceptable()

void Botan::TLS::Policy::check_peer_key_acceptable ( const Public_Key public_key) const
virtualinherited

Throw an exception if you don't like the peer's key. Default impl checks the key size against minimum_rsa_bits, minimum_ecdsa_group_size, or minimum_ecdh_group_size depending on the key's type. Override if you'd like to perform some other kind of test on (or logging of) the peer's keys.

Definition at line 225 of file tls_policy.cpp.

References Botan::Public_Key::algo_name(), Botan::TLS::Alert::INSUFFICIENT_SECURITY, Botan::Public_Key::key_length(), Botan::TLS::Policy::minimum_dh_group_size(), Botan::TLS::Policy::minimum_dsa_group_size(), Botan::TLS::Policy::minimum_ecdh_group_size(), Botan::TLS::Policy::minimum_ecdsa_group_size(), Botan::TLS::Policy::minimum_rsa_bits(), and Botan::ASN1::to_string().

Referenced by Botan::TLS::Callbacks::tls_dh_agree(), Botan::TLS::Callbacks::tls_ecdh_agree(), Botan::TLS::Certificate_Verify::verify(), and Botan::TLS::Server_Key_Exchange::verify().

226  {
227  const std::string algo_name = public_key.algo_name();
228 
229  const size_t keylength = public_key.key_length();
230  size_t expected_keylength = 0;
231 
232  if(algo_name == "RSA")
233  {
234  expected_keylength = minimum_rsa_bits();
235  }
236  else if(algo_name == "DH")
237  {
238  expected_keylength = minimum_dh_group_size();
239  }
240  else if(algo_name == "DSA")
241  {
242  expected_keylength = minimum_dsa_group_size();
243  }
244  else if(algo_name == "ECDH" || algo_name == "Curve25519")
245  {
246  expected_keylength = minimum_ecdh_group_size();
247  }
248  else if(algo_name == "ECDSA")
249  {
250  expected_keylength = minimum_ecdsa_group_size();
251  }
252  // else some other algo, so leave expected_keylength as zero and the check is a no-op
253 
254  if(keylength < expected_keylength)
255  throw TLS_Exception(Alert::INSUFFICIENT_SECURITY,
256  "Peer sent " +
257  std::to_string(keylength) + " bit " + algo_name + " key"
258  ", policy requires at least " +
259  std::to_string(expected_keylength));
260  }
virtual size_t minimum_ecdh_group_size() const
Definition: tls_policy.cpp:191
virtual size_t minimum_rsa_bits() const
Definition: tls_policy.cpp:207
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:145
virtual size_t minimum_dh_group_size() const
Definition: tls_policy.cpp:180
virtual size_t minimum_ecdsa_group_size() const
Definition: tls_policy.cpp:185
virtual size_t minimum_dsa_group_size() const
Definition: tls_policy.cpp:219

◆ choose_key_exchange_group()

Group_Params Botan::TLS::Policy::choose_key_exchange_group ( const std::vector< Group_Params > &  peer_groups) const
virtualinherited

Select a key exchange group to use, from the list of groups sent by the peer. If none are acceptable, return Group_Params::NONE

Definition at line 130 of file tls_policy.cpp.

References Botan::TLS::Policy::key_exchange_groups(), Botan::TLS::NONE, and Botan::value_exists().

Referenced by Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), and Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().

131  {
132  if(peer_groups.empty())
133  return Group_Params::NONE;
134 
135  const std::vector<Group_Params> our_groups = key_exchange_groups();
136 
137  for(auto g : our_groups)
138  {
139  if(value_exists(peer_groups, g))
140  return g;
141  }
142 
143  return Group_Params::NONE;
144  }
virtual std::vector< Group_Params > key_exchange_groups() const
Definition: tls_policy.cpp:160
bool value_exists(const std::vector< T > &vec, const T &val)
Definition: stl_util.h:86

◆ ciphersuite_list()

std::vector< uint16_t > Botan::TLS::Policy::ciphersuite_list ( Protocol_Version  version,
bool  have_srp 
) const
virtualinherited

Return allowed ciphersuites, in order of preference

Definition at line 417 of file tls_policy.cpp.

References Botan::TLS::Policy::acceptable_ciphersuite(), Botan::TLS::Ciphersuite::all_known_ciphersuites(), Botan::TLS::Policy::allowed_ciphers(), Botan::TLS::Policy::allowed_key_exchange_methods(), Botan::TLS::Policy::allowed_macs(), Botan::TLS::Policy::allowed_signature_methods(), Botan::TLS::CECPQ1, Botan::TLS::IMPLICIT, Botan::TLS::Policy::key_exchange_groups(), Botan::TLS::SRP_SHA, Botan::TLS::Protocol_Version::supports_aead_modes(), Botan::value_exists(), and Botan::TLS::X25519.

419  {
420  const std::vector<std::string> ciphers = allowed_ciphers();
421  const std::vector<std::string> macs = allowed_macs();
422  const std::vector<std::string> kex = allowed_key_exchange_methods();
423  const std::vector<std::string> sigs = allowed_signature_methods();
424 
425  std::vector<Ciphersuite> ciphersuites;
426 
427  for(auto&& suite : Ciphersuite::all_known_ciphersuites())
428  {
429  // Can we use it?
430  if(suite.valid() == false)
431  continue;
432 
433  // Is it acceptable to the policy?
434  if(!this->acceptable_ciphersuite(suite))
435  continue;
436 
437  // Are we doing SRP?
438  if(!have_srp && suite.kex_method() == Kex_Algo::SRP_SHA)
439  continue;
440 
441  if(!version.supports_aead_modes())
442  {
443  // Are we doing AEAD in a non-AEAD version?
444  if(suite.mac_algo() == "AEAD")
445  continue;
446 
447  // Older (v1.0/v1.1) versions also do not support any hash but SHA-1
448  if(suite.mac_algo() != "SHA-1")
449  continue;
450  }
451 
452  if(!value_exists(kex, suite.kex_algo()))
453  continue; // unsupported key exchange
454 
455  if(!value_exists(ciphers, suite.cipher_algo()))
456  continue; // unsupported cipher
457 
458  if(!value_exists(macs, suite.mac_algo()))
459  continue; // unsupported MAC algo
460 
461  if(!value_exists(sigs, suite.sig_algo()))
462  {
463  // allow if it's an empty sig algo and we want to use PSK
464  if(suite.auth_method() != Auth_Method::IMPLICIT || !suite.psk_ciphersuite())
465  continue;
466  }
467 
468  /*
469  CECPQ1 always uses x25519 for ECDH, so treat the applications
470  removal of x25519 from the ECC curve list as equivalent to
471  saying they do not trust CECPQ1
472  */
473  if(suite.kex_method() == Kex_Algo::CECPQ1)
474  {
476  continue;
477  }
478 
479  // OK, consider it
480  ciphersuites.push_back(suite);
481  }
482 
483  if(ciphersuites.empty())
484  {
485  throw Exception("Policy does not allow any available cipher suite");
486  }
487 
488  Ciphersuite_Preference_Ordering order(ciphers, macs, kex, sigs);
489  std::sort(ciphersuites.begin(), ciphersuites.end(), order);
490 
491  std::vector<uint16_t> ciphersuite_codes;
492  for(auto i : ciphersuites)
493  ciphersuite_codes.push_back(i.ciphersuite_code());
494  return ciphersuite_codes;
495  }
virtual bool acceptable_ciphersuite(const Ciphersuite &suite) const
Definition: tls_policy.cpp:309
virtual std::vector< std::string > allowed_ciphers() const
Definition: tls_policy.cpp:40
virtual std::vector< std::string > allowed_macs() const
Definition: tls_policy.cpp:75
virtual std::vector< Group_Params > key_exchange_groups() const
Definition: tls_policy.cpp:160
virtual std::vector< std::string > allowed_key_exchange_methods() const
Definition: tls_policy.cpp:90
bool value_exists(const std::vector< T > &vec, const T &val)
Definition: stl_util.h:86
virtual std::vector< std::string > allowed_signature_methods() const
Definition: tls_policy.cpp:104
static const std::vector< Ciphersuite > & all_known_ciphersuites()

◆ default_dh_group()

Group_Params Botan::TLS::Policy::default_dh_group ( ) const
virtualinherited

Definition at line 146 of file tls_policy.cpp.

References Botan::TLS::FFDHE_2048, Botan::TLS::group_param_is_dh(), and Botan::TLS::Policy::key_exchange_groups().

Referenced by Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().

147  {
148  /*
149  * Return the first listed or just default to 2048
150  */
151  for(auto g : key_exchange_groups())
152  {
153  if(group_param_is_dh(g))
154  return g;
155  }
156 
158  }
bool group_param_is_dh(Group_Params group)
Definition: tls_algos.cpp:118
virtual std::vector< Group_Params > key_exchange_groups() const
Definition: tls_policy.cpp:160

◆ dtls_default_mtu()

size_t Botan::TLS::Policy::dtls_default_mtu ( ) const
virtualinherited
Returns
the default MTU for DTLS

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 333 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::dtls_default_mtu().

334  {
335  // default MTU is IPv6 min MTU minus UDP/IP headers
336  return 1280 - 40 - 8;
337  }

◆ dtls_initial_timeout()

size_t Botan::TLS::Policy::dtls_initial_timeout ( ) const
virtualinherited
Returns
the initial timeout for DTLS

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 330 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::dtls_initial_timeout().

330 { return 1*1000; }

◆ dtls_maximum_timeout()

size_t Botan::TLS::Policy::dtls_maximum_timeout ( ) const
virtualinherited
Returns
the maximum timeout for DTLS

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 331 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::dtls_maximum_timeout().

331 { return 60*1000; }

◆ hide_unknown_users()

bool Botan::TLS::Policy::hide_unknown_users ( ) const
virtualinherited

If this function returns false, unknown SRP/PSK identifiers will be rejected with an unknown_psk_identifier alert as soon as the non-existence is identified. Otherwise, a false identifier value will be used and the protocol allowed to proceed, causing the handshake to eventually fail without revealing that the username does not exist on this system.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 324 of file tls_policy.cpp.

Referenced by Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::TLS::Text_Policy::hide_unknown_users(), Botan::TLS::Policy::print(), and Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().

324 { return false; }

◆ include_time_in_hello_random()

bool Botan::TLS::Policy::include_time_in_hello_random ( ) const
virtualinherited

The protocol dictates that the first 32 bits of the random field are the current time in seconds. However this allows client fingerprinting attacks. Set to false to disable, in which case random bytes will be used instead.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 323 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::include_time_in_hello_random(), Botan::TLS::make_hello_random(), and Botan::TLS::Policy::print().

323 { return true; }

◆ key_exchange_groups()

std::vector<Group_Params> Botan::TLS::NSA_Suite_B_128::key_exchange_groups ( ) const
inlineoverridevirtual

Return list of ECC curves and FFDHE groups we are willing to use in order of preference.

Reimplemented from Botan::TLS::Policy.

Definition at line 332 of file tls_policy.h.

References Botan::TLS::SECP256R1.

◆ latest_supported_version()

Protocol_Version Botan::TLS::Policy::latest_supported_version ( bool  datagram) const
virtualinherited

Returns the more recent protocol version we are willing to use, for either TLS or DTLS depending on datagram param. Shouldn't ever need to override this unless you want to allow a user to disable use of TLS v1.2 (which is not recommended)

Definition at line 287 of file tls_policy.cpp.

References Botan::TLS::Policy::allow_dtls10(), Botan::TLS::Policy::allow_dtls12(), Botan::TLS::Policy::allow_tls10(), Botan::TLS::Policy::allow_tls11(), Botan::TLS::Policy::allow_tls12(), Botan::TLS::Protocol_Version::DTLS_V10, Botan::TLS::Protocol_Version::DTLS_V12, Botan::TLS::Protocol_Version::TLS_V10, Botan::TLS::Protocol_Version::TLS_V11, and Botan::TLS::Protocol_Version::TLS_V12.

Referenced by Botan::TLS::Policy::send_fallback_scsv().

288  {
289  if(datagram)
290  {
291  if(allow_dtls12())
293  if(allow_dtls10())
295  throw Invalid_State("Policy forbids all available DTLS version");
296  }
297  else
298  {
299  if(allow_tls12())
301  if(allow_tls11())
303  if(allow_tls10())
305  throw Invalid_State("Policy forbids all available TLS version");
306  }
307  }
virtual bool allow_tls11() const
Definition: tls_policy.cpp:319
virtual bool allow_dtls10() const
Definition: tls_policy.cpp:321
virtual bool allow_tls12() const
Definition: tls_policy.cpp:320
virtual bool allow_dtls12() const
Definition: tls_policy.cpp:322
virtual bool allow_tls10() const
Definition: tls_policy.cpp:318

◆ minimum_dh_group_size()

size_t Botan::TLS::Policy::minimum_dh_group_size ( ) const
virtualinherited

Return the minimum DH group size we're willing to use Default is currently 1024 (insecure), should be 2048

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 180 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable(), Botan::TLS::Text_Policy::minimum_dh_group_size(), and Botan::TLS::Policy::print().

181  {
182  return 2048;
183  }

◆ minimum_dsa_group_size()

size_t Botan::TLS::Policy::minimum_dsa_group_size ( ) const
virtualinherited

Minimum DSA group size, default 2048 bits

Reimplemented in Botan::TLS::BSI_TR_02102_2.

Definition at line 219 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable().

220  {
221  // FIPS 186-3
222  return 2048;
223  }

◆ minimum_ecdh_group_size()

size_t Botan::TLS::Policy::minimum_ecdh_group_size ( ) const
virtualinherited

Return the minimum ECDH group size we're willing to use for key exchange

Default 255, allowing x25519 and larger x25519 is the smallest curve we will negotiate P-521 is the largest

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 191 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable(), Botan::TLS::Text_Policy::minimum_ecdh_group_size(), and Botan::TLS::Policy::print().

192  {
193  // x25519 is smallest curve currently supported for TLS key exchange
194  return 255;
195  }

◆ minimum_ecdsa_group_size()

size_t Botan::TLS::Policy::minimum_ecdsa_group_size ( ) const
virtualinherited

For ECDSA authenticated ciphersuites, the smallest key size the client will accept. This policy is currently only enforced on the server by the client.

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 185 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable(), and Botan::TLS::Text_Policy::minimum_ecdsa_group_size().

186  {
187  // Here we are at the mercy of whatever the CA signed, but most certs should be 256 bit by now
188  return 256;
189  }

◆ minimum_rsa_bits()

size_t Botan::TLS::Policy::minimum_rsa_bits ( ) const
virtualinherited

Return the minimum bit size we're willing to accept for RSA key exchange or server signatures.

It does not place any requirements on the size of any RSA signature(s) which were used to check the server certificate. This is only concerned with the server's public key.

Default is 2048 which is smallest RSA key size still secure for medium term security.

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 207 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::check_peer_key_acceptable(), Botan::TLS::Text_Policy::minimum_rsa_bits(), and Botan::TLS::Policy::print().

208  {
209  /* Default assumption is all end-entity certificates should
210  be at least 2048 bits these days.
211 
212  If you are connecting to arbitrary servers on the Internet
213  (ie as a web browser or SMTP client) you'll probably have to reduce this
214  to 1024 bits, or perhaps even lower.
215  */
216  return 2048;
217  }

◆ minimum_signature_strength()

size_t Botan::TLS::NSA_Suite_B_128::minimum_signature_strength ( ) const
inlineoverridevirtual

The minimum signature strength we will accept Returning 80 allows RSA 1024 and SHA-1. Values larger than 80 disable SHA-1 support. Returning 110 allows RSA 2048. Return 128 to force ECC (P-256) or large (~3000 bit) RSA keys. Default is 110

Reimplemented from Botan::TLS::Policy.

Definition at line 335 of file tls_policy.h.

335 { return 128; }

◆ negotiate_encrypt_then_mac()

bool Botan::TLS::Policy::negotiate_encrypt_then_mac ( ) const
virtualinherited

Indicates whether the encrypt-then-MAC extension should be negotiated (RFC 7366)

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 326 of file tls_policy.cpp.

Referenced by Botan::TLS::Client_Hello::Client_Hello(), Botan::TLS::Text_Policy::negotiate_encrypt_then_mac(), Botan::TLS::Policy::print(), and Botan::TLS::Server_Hello::Server_Hello().

326 { return true; }

◆ print()

void Botan::TLS::Policy::print ( std::ostream &  o) const
virtualinherited

Convert this policy to a printable format.

Parameters
ostream to be printed to

Definition at line 535 of file tls_policy.cpp.

References Botan::TLS::Policy::allow_dtls10(), Botan::TLS::Policy::allow_dtls12(), Botan::TLS::Policy::allow_insecure_renegotiation(), Botan::TLS::Policy::allow_server_initiated_renegotiation(), Botan::TLS::Policy::allow_tls10(), Botan::TLS::Policy::allow_tls11(), Botan::TLS::Policy::allow_tls12(), Botan::TLS::Policy::allowed_ciphers(), Botan::TLS::Policy::allowed_key_exchange_methods(), Botan::TLS::Policy::allowed_macs(), Botan::TLS::Policy::allowed_signature_hashes(), Botan::TLS::Policy::allowed_signature_methods(), Botan::TLS::Policy::hide_unknown_users(), Botan::TLS::Policy::include_time_in_hello_random(), Botan::TLS::Policy::key_exchange_groups(), Botan::TLS::Policy::minimum_dh_group_size(), Botan::TLS::Policy::minimum_ecdh_group_size(), Botan::TLS::Policy::minimum_rsa_bits(), Botan::TLS::Policy::minimum_signature_strength(), Botan::TLS::Policy::negotiate_encrypt_then_mac(), Botan::TLS::Policy::server_uses_own_ciphersuite_preferences(), Botan::TLS::Policy::session_ticket_lifetime(), and Botan::TLS::Policy::support_cert_status_message().

Referenced by Botan::TLS::Policy::to_string().

536  {
537  print_bool(o, "allow_tls10", allow_tls10());
538  print_bool(o, "allow_tls11", allow_tls11());
539  print_bool(o, "allow_tls12", allow_tls12());
540  print_bool(o, "allow_dtls10", allow_dtls10());
541  print_bool(o, "allow_dtls12", allow_dtls12());
542  print_vec(o, "ciphers", allowed_ciphers());
543  print_vec(o, "macs", allowed_macs());
544  print_vec(o, "signature_hashes", allowed_signature_hashes());
545  print_vec(o, "signature_methods", allowed_signature_methods());
546  print_vec(o, "key_exchange_methods", allowed_key_exchange_methods());
547  print_vec(o, "key_exchange_groups", key_exchange_groups());
548 
549  print_bool(o, "allow_insecure_renegotiation", allow_insecure_renegotiation());
550  print_bool(o, "include_time_in_hello_random", include_time_in_hello_random());
551  print_bool(o, "allow_server_initiated_renegotiation", allow_server_initiated_renegotiation());
552  print_bool(o, "hide_unknown_users", hide_unknown_users());
553  print_bool(o, "server_uses_own_ciphersuite_preferences", server_uses_own_ciphersuite_preferences());
554  print_bool(o, "negotiate_encrypt_then_mac", negotiate_encrypt_then_mac());
555  print_bool(o, "support_cert_status_message", support_cert_status_message());
556  o << "session_ticket_lifetime = " << session_ticket_lifetime() << '\n';
557  o << "minimum_dh_group_size = " << minimum_dh_group_size() << '\n';
558  o << "minimum_ecdh_group_size = " << minimum_ecdh_group_size() << '\n';
559  o << "minimum_rsa_bits = " << minimum_rsa_bits() << '\n';
560  o << "minimum_signature_strength = " << minimum_signature_strength() << '\n';
561  }
virtual bool allow_tls11() const
Definition: tls_policy.cpp:319
virtual size_t minimum_ecdh_group_size() const
Definition: tls_policy.cpp:191
virtual bool allow_server_initiated_renegotiation() const
Definition: tls_policy.cpp:316
virtual size_t minimum_rsa_bits() const
Definition: tls_policy.cpp:207
virtual bool negotiate_encrypt_then_mac() const
Definition: tls_policy.cpp:326
virtual bool include_time_in_hello_random() const
Definition: tls_policy.cpp:323
virtual std::vector< std::string > allowed_ciphers() const
Definition: tls_policy.cpp:40
virtual std::vector< std::string > allowed_macs() const
Definition: tls_policy.cpp:75
virtual std::vector< std::string > allowed_signature_hashes() const
Definition: tls_policy.cpp:65
virtual size_t minimum_dh_group_size() const
Definition: tls_policy.cpp:180
virtual bool allow_insecure_renegotiation() const
Definition: tls_policy.cpp:317
virtual std::vector< Group_Params > key_exchange_groups() const
Definition: tls_policy.cpp:160
virtual std::vector< std::string > allowed_key_exchange_methods() const
Definition: tls_policy.cpp:90
virtual bool allow_dtls10() const
Definition: tls_policy.cpp:321
virtual bool support_cert_status_message() const
Definition: tls_policy.cpp:327
virtual size_t minimum_signature_strength() const
Definition: tls_policy.cpp:197
virtual bool allow_tls12() const
Definition: tls_policy.cpp:320
virtual bool allow_dtls12() const
Definition: tls_policy.cpp:322
virtual std::vector< std::string > allowed_signature_methods() const
Definition: tls_policy.cpp:104
virtual bool server_uses_own_ciphersuite_preferences() const
Definition: tls_policy.cpp:325
virtual bool hide_unknown_users() const
Definition: tls_policy.cpp:324
virtual uint32_t session_ticket_lifetime() const
Definition: tls_policy.cpp:262
virtual bool allow_tls10() const
Definition: tls_policy.cpp:318

◆ require_cert_revocation_info()

bool Botan::TLS::Policy::require_cert_revocation_info ( ) const
virtualinherited

Return if cert revocation info (CRL/OCSP) is required If true, validation will fail unless a valid CRL or OCSP response was examined.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 202 of file tls_policy.cpp.

Referenced by Botan::TLS::Text_Policy::require_cert_revocation_info(), and Botan::TLS::Callbacks::tls_verify_cert_chain().

203  {
204  return true;
205  }

◆ send_fallback_scsv()

bool Botan::TLS::Policy::send_fallback_scsv ( Protocol_Version  version) const
virtualinherited

When offering this version, should we send a fallback SCSV? Default returns true iff version is not the latest version the policy allows, exists to allow override in case of interop problems.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 267 of file tls_policy.cpp.

References Botan::TLS::Protocol_Version::is_datagram_protocol(), and Botan::TLS::Policy::latest_supported_version().

Referenced by Botan::TLS::Client_Hello::Client_Hello(), and Botan::TLS::Text_Policy::send_fallback_scsv().

268  {
269  return version != latest_supported_version(version.is_datagram_protocol());
270  }
virtual Protocol_Version latest_supported_version(bool datagram) const
Definition: tls_policy.cpp:287

◆ server_uses_own_ciphersuite_preferences()

bool Botan::TLS::Policy::server_uses_own_ciphersuite_preferences ( ) const
virtualinherited
Returns
true if servers should choose the ciphersuite matching their highest preference, rather than the clients. Has no effect on client side.

Reimplemented in Botan::TLS::Text_Policy, and Botan::TLS::BSI_TR_02102_2.

Definition at line 325 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::print(), and Botan::TLS::Text_Policy::server_uses_own_ciphersuite_preferences().

325 { return true; }

◆ session_ticket_lifetime()

uint32_t Botan::TLS::Policy::session_ticket_lifetime ( ) const
virtualinherited

Return the allowed lifetime of a session ticket. If 0, session tickets do not expire until the session ticket key rolls over. Expired session tickets cannot be used to resume a session.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 262 of file tls_policy.cpp.

Referenced by Botan::TLS::Policy::print(), and Botan::TLS::Text_Policy::session_ticket_lifetime().

263  {
264  return 86400; // ~1 day
265  }

◆ srtp_profiles()

std::vector< uint16_t > Botan::TLS::Policy::srtp_profiles ( ) const
virtualinherited

If this returns a non-empty vector, and DTLS is negotiated, then we will also attempt to negotiate the SRTP extension from RFC 5764 using the returned values as the profile ids.

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 339 of file tls_policy.cpp.

Referenced by Botan::TLS::Client_Hello::Client_Hello(), and Botan::TLS::Server_Hello::Server_Hello().

340  {
341  return std::vector<uint16_t>();
342  }

◆ support_cert_status_message()

bool Botan::TLS::Policy::support_cert_status_message ( ) const
virtualinherited

Indicates whether certificate status messages should be supported

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 327 of file tls_policy.cpp.

Referenced by Botan::TLS::Client_Hello::Client_Hello(), Botan::TLS::Policy::print(), Botan::TLS::Server_Hello::Server_Hello(), and Botan::TLS::Text_Policy::support_cert_status_message().

327 { return true; }

◆ to_string()

std::string Botan::TLS::Policy::to_string ( ) const
inherited

Convert this policy to a printable format. Same as calling print on a ostringstream and reading o.str()

Definition at line 563 of file tls_policy.cpp.

References Botan::TLS::Policy::print().

564  {
565  std::ostringstream oss;
566  this->print(oss);
567  return oss.str();
568  }
virtual void print(std::ostream &o) const
Definition: tls_policy.cpp:535

◆ use_ecc_point_compression()

bool Botan::TLS::Policy::use_ecc_point_compression ( ) const
virtualinherited

Request that ECC curve points are sent compressed

Reimplemented in Botan::TLS::Text_Policy.

Definition at line 125 of file tls_policy.cpp.

Referenced by Botan::TLS::Client_Hello::Client_Hello(), Botan::TLS::Server_Hello::Server_Hello(), and Botan::TLS::Text_Policy::use_ecc_point_compression().

126  {
127  return false;
128  }

The documentation for this class was generated from the following file: