diff options
Diffstat (limited to 'src/lib/tls')
-rw-r--r-- | src/lib/tls/credentials_manager.cpp | 30 | ||||
-rw-r--r-- | src/lib/tls/credentials_manager.h | 42 | ||||
-rw-r--r-- | src/lib/tls/msg_client_hello.cpp | 31 | ||||
-rw-r--r-- | src/lib/tls/msg_client_kex.cpp | 42 | ||||
-rw-r--r-- | src/lib/tls/msg_server_kex.cpp | 44 | ||||
-rw-r--r-- | src/lib/tls/tls_algos.cpp | 5 | ||||
-rw-r--r-- | src/lib/tls/tls_algos.h | 1 | ||||
-rw-r--r-- | src/lib/tls/tls_ciphersuite.cpp | 8 | ||||
-rw-r--r-- | src/lib/tls/tls_client.cpp | 34 | ||||
-rw-r--r-- | src/lib/tls/tls_client.h | 1 | ||||
-rw-r--r-- | src/lib/tls/tls_extensions.cpp | 26 | ||||
-rw-r--r-- | src/lib/tls/tls_extensions.h | 29 | ||||
-rw-r--r-- | src/lib/tls/tls_handshake_state.cpp | 12 | ||||
-rw-r--r-- | src/lib/tls/tls_handshake_state.h | 2 | ||||
-rw-r--r-- | src/lib/tls/tls_messages.h | 29 | ||||
-rw-r--r-- | src/lib/tls/tls_policy.cpp | 8 | ||||
-rw-r--r-- | src/lib/tls/tls_policy.h | 5 | ||||
-rw-r--r-- | src/lib/tls/tls_server.cpp | 30 | ||||
-rw-r--r-- | src/lib/tls/tls_session.cpp | 8 | ||||
-rw-r--r-- | src/lib/tls/tls_session.h | 7 | ||||
-rw-r--r-- | src/lib/tls/tls_suite_info.cpp | 8 |
21 files changed, 26 insertions, 376 deletions
diff --git a/src/lib/tls/credentials_manager.cpp b/src/lib/tls/credentials_manager.cpp index 0c5ae9718..aca751d00 100644 --- a/src/lib/tls/credentials_manager.cpp +++ b/src/lib/tls/credentials_manager.cpp @@ -30,36 +30,6 @@ SymmetricKey Credentials_Manager::psk(const std::string&, throw Internal_Error("No PSK set for identity " + identity); } -bool Credentials_Manager::attempt_srp(const std::string&, - const std::string&) - { - return false; - } - -std::string Credentials_Manager::srp_identifier(const std::string&, - const std::string&) - { - return ""; - } - -std::string Credentials_Manager::srp_password(const std::string&, - const std::string&, - const std::string&) - { - return ""; - } - -bool Credentials_Manager::srp_verifier(const std::string&, - const std::string&, - const std::string&, - std::string&, - BigInt&, - std::vector<uint8_t>&, - bool) - { - return false; - } - std::vector<X509_Certificate> Credentials_Manager::find_cert_chain( const std::vector<std::string>& key_types, const std::vector<X509_DN>&, diff --git a/src/lib/tls/credentials_manager.h b/src/lib/tls/credentials_manager.h index 627894a87..d036a1524 100644 --- a/src/lib/tls/credentials_manager.h +++ b/src/lib/tls/credentials_manager.h @@ -121,48 +121,6 @@ class BOTAN_PUBLIC_API(2,0) Credentials_Manager /** * @param type specifies the type of operation occurring * @param context specifies a context relative to type. - * @return true if we should attempt SRP authentication - */ - virtual bool attempt_srp(const std::string& type, - const std::string& context); - - /** - * @param type specifies the type of operation occurring - * @param context specifies a context relative to type. - * @return identifier for client-side SRP auth, if available - for this type/context. Should return empty string - if password auth not desired/available. - */ - virtual std::string srp_identifier(const std::string& type, - const std::string& context); - - /** - * @param type specifies the type of operation occurring - * @param context specifies a context relative to type. - * @param identifier specifies what identifier we want the - * password for. This will be a value previously returned - * by srp_identifier. - * @return password for client-side SRP auth, if available - for this identifier/type/context. - */ - virtual std::string srp_password(const std::string& type, - const std::string& context, - const std::string& identifier); - - /** - * Retrieve SRP verifier parameters - */ - virtual bool srp_verifier(const std::string& type, - const std::string& context, - const std::string& identifier, - std::string& group_name, - BigInt& verifier, - std::vector<uint8_t>& salt, - bool generate_fake_on_unknown); - - /** - * @param type specifies the type of operation occurring - * @param context specifies a context relative to type. * @return the PSK identity hint for this type/context */ virtual std::string psk_identity_hint(const std::string& type, diff --git a/src/lib/tls/msg_client_hello.cpp b/src/lib/tls/msg_client_hello.cpp index 149f3f0d4..3eee06e69 100644 --- a/src/lib/tls/msg_client_hello.cpp +++ b/src/lib/tls/msg_client_hello.cpp @@ -89,7 +89,7 @@ Client_Hello::Client_Hello(Handshake_IO& io, const std::vector<std::string>& next_protocols) : m_version(client_settings.protocol_version()), m_random(make_hello_random(rng, policy)), - m_suites(policy.ciphersuite_list(m_version, !client_settings.srp_identifier().empty())), + m_suites(policy.ciphersuite_list(m_version)), m_comp_methods(1) { if(!policy.acceptable_protocol_version(m_version)) @@ -125,15 +125,6 @@ Client_Hello::Client_Hello(Handshake_IO& io, if(m_version.is_datagram_protocol()) m_extensions.add(new SRTP_Protection_Profiles(policy.srtp_profiles())); -#if defined(BOTAN_HAS_SRP6) - m_extensions.add(new SRP_Identifier(client_settings.srp_identifier())); -#else - if(!client_settings.srp_identifier().empty()) - { - throw Invalid_State("Attempting to initiate SRP session but TLS-SRP support disabled"); - } -#endif - std::unique_ptr<Supported_Groups> supported_groups(new Supported_Groups(policy.key_exchange_groups())); if(supported_groups->ec_groups().size() > 0) @@ -165,7 +156,7 @@ Client_Hello::Client_Hello(Handshake_IO& io, m_version(session.version()), m_session_id(session.session_id()), m_random(make_hello_random(rng, policy)), - m_suites(policy.ciphersuite_list(m_version, (session.srp_identifier() != ""))), + m_suites(policy.ciphersuite_list(m_version)), m_comp_methods(1) { if(!policy.acceptable_protocol_version(m_version)) @@ -201,15 +192,6 @@ Client_Hello::Client_Hello(Handshake_IO& io, if(session.supports_encrypt_then_mac()) m_extensions.add(new Encrypt_then_MAC); -#if defined(BOTAN_HAS_SRP6) - m_extensions.add(new SRP_Identifier(session.srp_identifier())); -#else - if(!session.srp_identifier().empty()) - { - throw Invalid_State("Attempting to resume SRP session but TLS-SRP support disabled"); - } -#endif - if(m_version.supports_negotiable_signature_algorithms()) m_extensions.add(new Signature_Algorithms(policy.allowed_signature_schemes())); @@ -380,15 +362,6 @@ std::string Client_Hello::sni_hostname() const return ""; } -#if defined(BOTAN_HAS_SRP6) -std::string Client_Hello::srp_identifier() const - { - if(SRP_Identifier* srp = m_extensions.get<SRP_Identifier>()) - return srp->identifier(); - return ""; - } -#endif - bool Client_Hello::secure_renegotiation() const { return m_extensions.has<Renegotiation_Extension>(); diff --git a/src/lib/tls/msg_client_kex.cpp b/src/lib/tls/msg_client_kex.cpp index 39266962b..beeede31f 100644 --- a/src/lib/tls/msg_client_kex.cpp +++ b/src/lib/tls/msg_client_kex.cpp @@ -23,10 +23,6 @@ #include <botan/cecpq1.h> #endif -#if defined(BOTAN_HAS_SRP6) - #include <botan/srp6.h> -#endif - namespace Botan { namespace TLS { @@ -146,36 +142,6 @@ Client_Key_Exchange::Client_Key_Exchange(Handshake_IO& io, append_tls_length_value(m_key_material, ecdh_result.second, 1); } -#if defined(BOTAN_HAS_SRP6) - else if(kex_algo == Kex_Algo::SRP_SHA) - { - const BigInt N = BigInt::decode(reader.get_range<uint8_t>(2, 1, 65535)); - const BigInt g = BigInt::decode(reader.get_range<uint8_t>(2, 1, 65535)); - std::vector<uint8_t> salt = reader.get_range<uint8_t>(1, 1, 255); - const BigInt B = BigInt::decode(reader.get_range<uint8_t>(2, 1, 65535)); - - const std::string srp_group = srp6_group_identifier(N, g); - - const std::string srp_identifier = - creds.srp_identifier("tls-client", hostname); - - const std::string srp_password = - creds.srp_password("tls-client", hostname, srp_identifier); - - std::pair<BigInt, SymmetricKey> srp_vals = - srp6_client_agree(srp_identifier, - srp_password, - srp_group, - "SHA-1", - salt, - B, - rng); - - append_tls_length_value(m_key_material, BigInt::encode(srp_vals.first), 2); - m_pre_master = srp_vals.second.bits_of(); - } -#endif - #if defined(BOTAN_HAS_CECPQ1) else if(kex_algo == Kex_Algo::CECPQ1) { @@ -313,14 +279,6 @@ Client_Key_Exchange::Client_Key_Exchange(const std::vector<uint8_t>& contents, append_tls_length_value(m_pre_master, zeros, 2); append_tls_length_value(m_pre_master, psk.bits_of(), 2); } -#if defined(BOTAN_HAS_SRP6) - else if(kex_algo == Kex_Algo::SRP_SHA) - { - SRP6_Server_Session& srp = state.server_kex()->server_srp_params(); - - m_pre_master = srp.step2(BigInt::decode(reader.get_range<uint8_t>(2, 0, 65535))).bits_of(); - } -#endif #if defined(BOTAN_HAS_CECPQ1) else if(kex_algo == Kex_Algo::CECPQ1) { diff --git a/src/lib/tls/msg_server_kex.cpp b/src/lib/tls/msg_server_kex.cpp index cefb88904..35bd94d1b 100644 --- a/src/lib/tls/msg_server_kex.cpp +++ b/src/lib/tls/msg_server_kex.cpp @@ -26,10 +26,6 @@ #include <botan/cecpq1.h> #endif -#if defined(BOTAN_HAS_SRP6) - #include <botan/srp6.h> -#endif - namespace Botan { namespace TLS { @@ -137,37 +133,6 @@ Server_Key_Exchange::Server_Key_Exchange(Handshake_IO& io, append_tls_length_value(m_params, ecdh_public_val, 1); } -#if defined(BOTAN_HAS_SRP6) - else if(kex_algo == Kex_Algo::SRP_SHA) - { - const std::string srp_identifier = state.client_hello()->srp_identifier(); - - std::string group_id; - BigInt v; - std::vector<uint8_t> salt; - - const bool found = creds.srp_verifier("tls-server", hostname, - srp_identifier, - group_id, v, salt, - policy.hide_unknown_users()); - - if(!found) - throw TLS_Exception(Alert::UNKNOWN_PSK_IDENTITY, - "Unknown SRP user " + srp_identifier); - - m_srp_params.reset(new SRP6_Server_Session); - - BigInt B = m_srp_params->step1(v, group_id, - "SHA-1", rng); - - DL_Group group(group_id); - - append_tls_length_value(m_params, BigInt::encode(group.get_p()), 2); - append_tls_length_value(m_params, BigInt::encode(group.get_g()), 2); - append_tls_length_value(m_params, salt, 1); - append_tls_length_value(m_params, BigInt::encode(B), 2); - } -#endif #if defined(BOTAN_HAS_CECPQ1) else if(kex_algo == Kex_Algo::CECPQ1) { @@ -239,15 +204,6 @@ Server_Key_Exchange::Server_Key_Exchange(const std::vector<uint8_t>& buf, reader.get_uint16_t(); // curve id reader.get_range<uint8_t>(1, 1, 255); // public key } - else if(kex_algo == Kex_Algo::SRP_SHA) - { - // 2 bigints (N,g) then salt, then server B - - reader.get_range<uint8_t>(2, 1, 65535); - reader.get_range<uint8_t>(2, 1, 65535); - reader.get_range<uint8_t>(1, 1, 255); - reader.get_range<uint8_t>(2, 1, 65535); - } else if(kex_algo == Kex_Algo::CECPQ1) { // u16 blob diff --git a/src/lib/tls/tls_algos.cpp b/src/lib/tls/tls_algos.cpp index 5c383807b..cdd6cc1b9 100644 --- a/src/lib/tls/tls_algos.cpp +++ b/src/lib/tls/tls_algos.cpp @@ -38,8 +38,6 @@ std::string kex_method_to_string(Kex_Algo method) return "ECDH"; case Kex_Algo::CECPQ1: return "CECPQ1"; - case Kex_Algo::SRP_SHA: - return "SRP_SHA"; case Kex_Algo::PSK: return "PSK"; case Kex_Algo::DHE_PSK: @@ -65,9 +63,6 @@ Kex_Algo kex_method_from_string(const std::string& str) if(str == "CECPQ1") return Kex_Algo::CECPQ1; - if(str == "SRP_SHA") - return Kex_Algo::SRP_SHA; - if(str == "PSK") return Kex_Algo::PSK; diff --git a/src/lib/tls/tls_algos.h b/src/lib/tls/tls_algos.h index 0d3a02304..80bb55224 100644 --- a/src/lib/tls/tls_algos.h +++ b/src/lib/tls/tls_algos.h @@ -141,7 +141,6 @@ enum class Kex_Algo { DH, ECDH, CECPQ1, - SRP_SHA, PSK, DHE_PSK, ECDHE_PSK, diff --git a/src/lib/tls/tls_ciphersuite.cpp b/src/lib/tls/tls_ciphersuite.cpp index 738be110b..3e54bcb89 100644 --- a/src/lib/tls/tls_ciphersuite.cpp +++ b/src/lib/tls/tls_ciphersuite.cpp @@ -199,13 +199,7 @@ bool Ciphersuite::is_usable() const return false; } - if(kex_method() == Kex_Algo::SRP_SHA) - { -#if !defined(BOTAN_HAS_SRP6) - return false; -#endif - } - else if(kex_method() == Kex_Algo::ECDH || kex_method() == Kex_Algo::ECDHE_PSK) + if(kex_method() == Kex_Algo::ECDH || kex_method() == Kex_Algo::ECDHE_PSK) { #if !defined(BOTAN_HAS_ECDH) return false; diff --git a/src/lib/tls/tls_client.cpp b/src/lib/tls/tls_client.cpp index 091e649a9..7b668d48a 100644 --- a/src/lib/tls/tls_client.cpp +++ b/src/lib/tls/tls_client.cpp @@ -75,11 +75,8 @@ Client::Client(Callbacks& callbacks, m_creds(creds), m_info(info) { - const std::string srp_identifier = m_creds.srp_identifier("tls-client", m_info.hostname()); - Handshake_State& state = create_handshake_state(offer_version); - send_client_hello(state, false, offer_version, - srp_identifier, next_protocols); + send_client_hello(state, false, offer_version, next_protocols); } Handshake_State* Client::new_handshake_state(Handshake_IO* io) @@ -113,7 +110,6 @@ void Client::initiate_handshake(Handshake_State& state, void Client::send_client_hello(Handshake_State& state_base, bool force_full_renegotiation, Protocol_Version version, - const std::string& srp_identifier, const std::vector<std::string>& next_protocols) { Client_Handshake_State& state = dynamic_cast<Client_Handshake_State&>(state_base); @@ -140,27 +136,24 @@ void Client::send_client_hello(Handshake_State& state_base, if(policy().acceptable_ciphersuite(session_info->ciphersuite()) && session_version_ok) { - if(srp_identifier == "" || session_info->srp_identifier() == srp_identifier) - { - state.client_hello( - new Client_Hello(state.handshake_io(), - state.hash(), - policy(), - callbacks(), - rng(), - secure_renegotiation_data_for_client_hello(), - *session_info, - next_protocols)); - - state.resumed_session = std::move(session_info); - } + state.client_hello( + new Client_Hello(state.handshake_io(), + state.hash(), + policy(), + callbacks(), + rng(), + secure_renegotiation_data_for_client_hello(), + *session_info, + next_protocols)); + + state.resumed_session = std::move(session_info); } } } if(!state.client_hello()) // not resuming { - Client_Hello::Settings client_settings(version, m_info.hostname(), srp_identifier); + Client_Hello::Settings client_settings(version, m_info.hostname()); state.client_hello(new Client_Hello( state.handshake_io(), state.hash(), @@ -709,7 +702,6 @@ void Client::process_handshake_msg(const Handshake_State* active_state, get_peer_cert_chain(state), session_ticket, m_info, - "", state.server_hello()->srtp_profile() ); diff --git a/src/lib/tls/tls_client.h b/src/lib/tls/tls_client.h index 7440e59ef..8528491ce 100644 --- a/src/lib/tls/tls_client.h +++ b/src/lib/tls/tls_client.h @@ -75,7 +75,6 @@ class BOTAN_PUBLIC_API(2,0) Client final : public Channel void send_client_hello(Handshake_State& state, bool force_full_renegotiation, Protocol_Version version, - const std::string& srp_identifier = "", const std::vector<std::string>& next_protocols = {}); void process_handshake_msg(const Handshake_State* active_state, diff --git a/src/lib/tls/tls_extensions.cpp b/src/lib/tls/tls_extensions.cpp index 631868703..ce067d7c0 100644 --- a/src/lib/tls/tls_extensions.cpp +++ b/src/lib/tls/tls_extensions.cpp @@ -24,11 +24,6 @@ Extension* make_extension(TLS_Data_Reader& reader, uint16_t code, uint16_t size, case TLSEXT_SERVER_NAME_INDICATION: return new Server_Name_Indicator(reader, size); -#if defined(BOTAN_HAS_SRP6) - case TLSEXT_SRP_IDENTIFIER: - return new SRP_Identifier(reader, size); -#endif - case TLSEXT_SUPPORTED_GROUPS: return new Supported_Groups(reader, size); @@ -213,27 +208,6 @@ std::vector<uint8_t> Server_Name_Indicator::serialize(Connection_Side /*whoami*/ return buf; } -#if defined(BOTAN_HAS_SRP6) - -SRP_Identifier::SRP_Identifier(TLS_Data_Reader& reader, - uint16_t extension_size) : m_srp_identifier(reader.get_string(1, 1, 255)) - { - if(m_srp_identifier.size() + 1 != extension_size) - throw Decoding_Error("Bad encoding for SRP identifier extension"); - } - -std::vector<uint8_t> SRP_Identifier::serialize(Connection_Side /*whoami*/) const - { - std::vector<uint8_t> buf; - - const uint8_t* srp_bytes = cast_char_ptr_to_uint8(m_srp_identifier.data()); - append_tls_length_value(buf, srp_bytes, m_srp_identifier.size(), 1); - - return buf; - } - -#endif - Renegotiation_Extension::Renegotiation_Extension(TLS_Data_Reader& reader, uint16_t extension_size) : m_reneg_data(reader.get_range<uint8_t>(1, 0, 255)) { diff --git a/src/lib/tls/tls_extensions.h b/src/lib/tls/tls_extensions.h index a426c8e56..fefa8af77 100644 --- a/src/lib/tls/tls_extensions.h +++ b/src/lib/tls/tls_extensions.h @@ -36,7 +36,6 @@ enum Handshake_Extension_Type { TLSEXT_CERTIFICATE_TYPES = 9, TLSEXT_SUPPORTED_GROUPS = 10, TLSEXT_EC_POINT_FORMATS = 11, - TLSEXT_SRP_IDENTIFIER = 12, TLSEXT_SIGNATURE_ALGORITHMS = 13, TLSEXT_USE_SRTP = 14, TLSEXT_ALPN = 16, @@ -101,34 +100,6 @@ class BOTAN_UNSTABLE_API Server_Name_Indicator final : public Extension std::string m_sni_host_name; }; -#if defined(BOTAN_HAS_SRP6) -/** -* SRP identifier extension (RFC 5054) -*/ -class BOTAN_UNSTABLE_API SRP_Identifier final : public Extension - { - public: - static Handshake_Extension_Type static_type() - { return TLSEXT_SRP_IDENTIFIER; } - - Handshake_Extension_Type type() const override { return static_type(); } - - explicit SRP_Identifier(const std::string& identifier) : - m_srp_identifier(identifier) {} - - SRP_Identifier(TLS_Data_Reader& reader, - uint16_t extension_size); - - std::string identifier() const { return m_srp_identifier; } - - std::vector<uint8_t> serialize(Connection_Side whoami) const override; - - bool empty() const override { return m_srp_identifier.empty(); } - private: - std::string m_srp_identifier; - }; -#endif - /** * Renegotiation Indication Extension (RFC 5746) */ diff --git a/src/lib/tls/tls_handshake_state.cpp b/src/lib/tls/tls_handshake_state.cpp index 7c1264511..ee54000f7 100644 --- a/src/lib/tls/tls_handshake_state.cpp +++ b/src/lib/tls/tls_handshake_state.cpp @@ -359,18 +359,6 @@ Handshake_State::get_next_handshake_msg() return m_handshake_io->get_next_record(expecting_ccs); } -std::string Handshake_State::srp_identifier() const - { -#if defined(BOTAN_HAS_SRP6) - // Authenticated via the successful key exchange - if(ciphersuite().valid() && ciphersuite().kex_method() == Kex_Algo::SRP_SHA) - return client_hello()->srp_identifier(); -#endif - - return ""; - } - - std::vector<uint8_t> Handshake_State::session_ticket() const { if(new_session_ticket() && !new_session_ticket()->ticket().empty()) diff --git a/src/lib/tls/tls_handshake_state.h b/src/lib/tls/tls_handshake_state.h index 3321a6210..0238ebd2b 100644 --- a/src/lib/tls/tls_handshake_state.h +++ b/src/lib/tls/tls_handshake_state.h @@ -93,8 +93,6 @@ class Handshake_State bool for_client_auth, const Policy& policy) const; - std::string srp_identifier() const; - KDF* protocol_specific_prf() const; Protocol_Version version() const { return m_version; } diff --git a/src/lib/tls/tls_messages.h b/src/lib/tls/tls_messages.h index fc95a1c02..5de15f0a2 100644 --- a/src/lib/tls/tls_messages.h +++ b/src/lib/tls/tls_messages.h @@ -25,10 +25,6 @@ #include <botan/cecpq1.h> #endif -#if defined(BOTAN_HAS_SRP6) - #include <botan/srp6.h> -#endif - namespace Botan { class Public_Key; @@ -74,20 +70,16 @@ class BOTAN_UNSTABLE_API Client_Hello final : public Handshake_Message { public: Settings(const Protocol_Version version, - const std::string& hostname = "", - const std::string& srp_identifier = "") : + const std::string& hostname = "") : m_new_session_version(version), - m_hostname(hostname), - m_srp_identifier(srp_identifier) {} + m_hostname(hostname) {} const Protocol_Version protocol_version() const { return m_new_session_version; } const std::string& hostname() const { return m_hostname; } - const std::string& srp_identifier() const { return m_srp_identifier; } private: const Protocol_Version m_new_session_version; const std::string m_hostname; - const std::string m_srp_identifier; }; Handshake_Type type() const override { return CLIENT_HELLO; } @@ -118,10 +110,6 @@ class BOTAN_UNSTABLE_API Client_Hello final : public Handshake_Message std::string sni_hostname() const; -#if defined(BOTAN_HAS_SRP6) - std::string srp_identifier() const; -#endif - bool secure_renegotiation() const; std::vector<uint8_t> renegotiation_info() const; @@ -543,15 +531,6 @@ class BOTAN_UNSTABLE_API Server_Key_Exchange final : public Handshake_Message // Only valid for certain kex types const Private_Key& server_kex_key() const; -#if defined(BOTAN_HAS_SRP6) - // Only valid for SRP negotiation - SRP6_Server_Session& server_srp_params() const - { - BOTAN_ASSERT_NONNULL(m_srp_params); - return *m_srp_params; - } -#endif - #if defined(BOTAN_HAS_CECPQ1) // Only valid for CECPQ1 negotiation const CECPQ1_key& cecpq1_key() const @@ -577,10 +556,6 @@ class BOTAN_UNSTABLE_API Server_Key_Exchange final : public Handshake_Message private: std::vector<uint8_t> serialize() const override; -#if defined(BOTAN_HAS_SRP6) - std::unique_ptr<SRP6_Server_Session> m_srp_params; -#endif - #if defined(BOTAN_HAS_CECPQ1) std::unique_ptr<CECPQ1_key> m_cecpq1_key; #endif diff --git a/src/lib/tls/tls_policy.cpp b/src/lib/tls/tls_policy.cpp index a63c73101..b2e8a86f7 100644 --- a/src/lib/tls/tls_policy.cpp +++ b/src/lib/tls/tls_policy.cpp @@ -92,7 +92,6 @@ std::vector<std::string> Policy::allowed_macs() const std::vector<std::string> Policy::allowed_key_exchange_methods() const { return { - //"SRP_SHA", //"ECDHE_PSK", //"DHE_PSK", //"PSK", @@ -428,8 +427,7 @@ class Ciphersuite_Preference_Ordering final } -std::vector<uint16_t> Policy::ciphersuite_list(Protocol_Version version, - bool have_srp) const +std::vector<uint16_t> Policy::ciphersuite_list(Protocol_Version version) const { const std::vector<std::string> ciphers = allowed_ciphers(); const std::vector<std::string> macs = allowed_macs(); @@ -452,10 +450,6 @@ std::vector<uint16_t> Policy::ciphersuite_list(Protocol_Version version, if(!this->acceptable_ciphersuite(suite)) continue; - // Are we doing SRP? - if(!have_srp && suite.kex_method() == Kex_Algo::SRP_SHA) - continue; - if(!value_exists(kex, suite.kex_algo())) continue; // unsupported key exchange diff --git a/src/lib/tls/tls_policy.h b/src/lib/tls/tls_policy.h index c0f618e0f..209e814c2 100644 --- a/src/lib/tls/tls_policy.h +++ b/src/lib/tls/tls_policy.h @@ -205,7 +205,7 @@ class BOTAN_PUBLIC_API(2,0) Policy virtual void check_peer_key_acceptable(const Public_Key& public_key) const; /** - * If this function returns false, unknown SRP/PSK identifiers + * If this function returns false, unknown 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 @@ -295,8 +295,7 @@ class BOTAN_PUBLIC_API(2,0) Policy /** * Return allowed ciphersuites, in order of preference */ - virtual std::vector<uint16_t> ciphersuite_list(Protocol_Version version, - bool have_srp) const; + virtual std::vector<uint16_t> ciphersuite_list(Protocol_Version version) const; /** * @return the default MTU for DTLS diff --git a/src/lib/tls/tls_server.cpp b/src/lib/tls/tls_server.cpp index 3fd4565fd..c62053857 100644 --- a/src/lib/tls/tls_server.cpp +++ b/src/lib/tls/tls_server.cpp @@ -104,15 +104,6 @@ bool check_for_resume(Session& session_info, session_info.ciphersuite_code())) return false; -#if defined(BOTAN_HAS_SRP6) - // client sent a different SRP identity - if(client_hello->srp_identifier() != "") - { - if(client_hello->srp_identifier() != session_info.srp_identifier()) - return false; - } -#endif - // client sent a different SNI hostname if(client_hello->sni_hostname() != "") { @@ -158,14 +149,12 @@ bool check_for_resume(Session& session_info, uint16_t choose_ciphersuite( const Policy& policy, Protocol_Version version, - Credentials_Manager& creds, const std::map<std::string, std::vector<X509_Certificate>>& cert_chains, const Client_Hello& client_hello) { const bool our_choice = policy.server_uses_own_ciphersuite_preferences(); - const bool have_srp = creds.attempt_srp("tls-server", client_hello.sni_hostname()); const std::vector<uint16_t> client_suites = client_hello.ciphersuites(); - const std::vector<uint16_t> server_suites = policy.ciphersuite_list(version, have_srp); + const std::vector<uint16_t> server_suites = policy.ciphersuite_list(version); if(server_suites.empty()) throw TLS_Exception(Alert::HANDSHAKE_FAILURE, @@ -248,20 +237,6 @@ uint16_t choose_ciphersuite( } } -#if defined(BOTAN_HAS_SRP6) - /* - The client may offer SRP cipher suites in the hello message but - omit the SRP extension. If the server would like to select an - SRP cipher suite in this case, the server SHOULD return a fatal - "unknown_psk_identity" alert immediately after processing the - client hello message. - - RFC 5054 section 2.5.1.2 - */ - if(suite.kex_method() == Kex_Algo::SRP_SHA && client_hello.srp_identifier() == "") - throw TLS_Exception(Alert::UNKNOWN_PSK_IDENTITY, - "Client wanted SRP but did not send username"); -#endif - return suite_id; } @@ -686,7 +661,6 @@ void Server::process_finished_msg(Server_Handshake_State& pending_state, get_peer_cert_chain(pending_state), std::vector<uint8_t>(), Server_Information(pending_state.client_hello()->sni_hostname()), - pending_state.srp_identifier(), pending_state.server_hello()->srtp_profile()); if(save_session(session_info)) @@ -871,7 +845,7 @@ void Server::session_create(Server_Handshake_State& pending_state, } const uint16_t ciphersuite = choose_ciphersuite(policy(), pending_state.version(), - m_creds, cert_chains, + cert_chains, *pending_state.client_hello()); Server_Hello::Settings srv_settings( diff --git a/src/lib/tls/tls_session.cpp b/src/lib/tls/tls_session.cpp index bd817687c..de118f778 100644 --- a/src/lib/tls/tls_session.cpp +++ b/src/lib/tls/tls_session.cpp @@ -29,7 +29,6 @@ Session::Session(const std::vector<uint8_t>& session_identifier, const std::vector<X509_Certificate>& certs, const std::vector<uint8_t>& ticket, const Server_Information& server_info, - const std::string& srp_identifier, uint16_t srtp_profile) : m_start_time(std::chrono::system_clock::now()), m_identifier(session_identifier), @@ -42,8 +41,7 @@ Session::Session(const std::vector<uint8_t>& session_identifier, m_extended_master_secret(extended_master_secret), m_encrypt_then_mac(encrypt_then_mac), m_peer_certs(certs), - m_server_info(server_info), - m_srp_identifier(srp_identifier) + m_server_info(server_info) { } @@ -124,8 +122,6 @@ Session::Session(const uint8_t ber[], size_t ber_len) server_service.value(), static_cast<uint16_t>(server_port)); - m_srp_identifier = srp_identifier_str.value(); - if(!peer_cert_bits.empty()) { DataSource_Memory certs(peer_cert_bits.data(), peer_cert_bits.size()); @@ -160,7 +156,7 @@ secure_vector<uint8_t> Session::DER_encode() const .encode(ASN1_String(m_server_info.hostname(), UTF8_STRING)) .encode(ASN1_String(m_server_info.service(), UTF8_STRING)) .encode(static_cast<size_t>(m_server_info.port())) - .encode(ASN1_String(m_srp_identifier, UTF8_STRING)) + .encode(ASN1_String("", UTF8_STRING)) // old srp identifier .encode(static_cast<size_t>(m_srtp_profile)) .end_cons() .get_contents(); diff --git a/src/lib/tls/tls_session.h b/src/lib/tls/tls_session.h index 5a75e6a32..5cb1f44be 100644 --- a/src/lib/tls/tls_session.h +++ b/src/lib/tls/tls_session.h @@ -54,7 +54,6 @@ class BOTAN_PUBLIC_API(2,0) Session final const std::vector<X509_Certificate>& peer_certs, const std::vector<uint8_t>& session_ticket, const Server_Information& server_info, - const std::string& srp_identifier, uint16_t srtp_profile); /** @@ -134,11 +133,6 @@ class BOTAN_PUBLIC_API(2,0) Session final Connection_Side side() const { return m_connection_side; } /** - * Get the SRP identity (if sent by the client in the initial handshake) - */ - const std::string& srp_identifier() const { return m_srp_identifier; } - - /** * Get the saved master secret */ const secure_vector<uint8_t>& master_secret() const { return m_master_secret; } @@ -200,7 +194,6 @@ class BOTAN_PUBLIC_API(2,0) Session final std::vector<X509_Certificate> m_peer_certs; Server_Information m_server_info; // optional - std::string m_srp_identifier; // optional }; } diff --git a/src/lib/tls/tls_suite_info.cpp b/src/lib/tls/tls_suite_info.cpp index 4c49f72ad..7c07720ec 100644 --- a/src/lib/tls/tls_suite_info.cpp +++ b/src/lib/tls/tls_suite_info.cpp @@ -3,7 +3,7 @@ * * This file was automatically generated from the IANA assignments * (tls-parameters.txt sha256 6412d7a966151d409d463681e5427e706cd9066f13d34ca7a89f8cc2f7dff4b2) -* by ./src/scripts/tls_suite_info.py on 2020-11-17 +* by ./src/scripts/tls_suite_info.py on 2020-11-21 * * Botan is released under the Simplified BSD License (see license.txt) */ @@ -65,12 +65,6 @@ const std::vector<Ciphersuite>& Ciphersuite::all_known_ciphersuites() Ciphersuite(0xC012, "ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), Ciphersuite(0xC013, "ECDHE_RSA_WITH_AES_128_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), Ciphersuite(0xC014, "ECDHE_RSA_WITH_AES_256_CBC_SHA", Auth_Method::RSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC01A, "SRP_SHA_WITH_3DES_EDE_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::SRP_SHA, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC01B, "SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", Auth_Method::RSA, Kex_Algo::SRP_SHA, "3DES", 24, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC01D, "SRP_SHA_WITH_AES_128_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::SRP_SHA, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC01E, "SRP_SHA_RSA_WITH_AES_128_CBC_SHA", Auth_Method::RSA, Kex_Algo::SRP_SHA, "AES-128", 16, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC020, "SRP_SHA_WITH_AES_256_CBC_SHA", Auth_Method::IMPLICIT, Kex_Algo::SRP_SHA, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), - Ciphersuite(0xC021, "SRP_SHA_RSA_WITH_AES_256_CBC_SHA", Auth_Method::RSA, Kex_Algo::SRP_SHA, "AES-256", 32, "SHA-1", 20, KDF_Algo::SHA_1, Nonce_Format::CBC_MODE), Ciphersuite(0xC023, "ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE), Ciphersuite(0xC024, "ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", Auth_Method::ECDSA, Kex_Algo::ECDH, "AES-256", 32, "SHA-384", 48, KDF_Algo::SHA_384, Nonce_Format::CBC_MODE), Ciphersuite(0xC027, "ECDHE_RSA_WITH_AES_128_CBC_SHA256", Auth_Method::RSA, Kex_Algo::ECDH, "AES-128", 16, "SHA-256", 32, KDF_Algo::SHA_256, Nonce_Format::CBC_MODE), |