9 #include <botan/tls_messages.h>
10 #include <botan/tls_alert.h>
11 #include <botan/tls_exceptn.h>
12 #include <botan/internal/tls_reader.h>
13 #include <botan/internal/tls_session_key.h>
14 #include <botan/internal/tls_handshake_io.h>
15 #include <botan/internal/tls_handshake_hash.h>
16 #include <botan/internal/stl_util.h>
31 std::vector<uint8_t> buf(32);
36 const uint32_t time32 =
static_cast<uint32_t
>(
37 std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
65 std::vector<uint8_t> Hello_Request::serialize()
const
67 return std::vector<uint8_t>();
77 const std::vector<uint8_t>& reneg_info,
79 const std::vector<std::string>& next_protocols) :
80 m_version(client_settings.protocol_version()),
82 m_suites(policy.ciphersuite_list(m_version, !client_settings.srp_identifier().empty())),
83 m_comp_methods(policy.compression())
86 "Our policy accepts the version we are offering");
104 if(reneg_info.empty() && !next_protocols.empty())
114 #if defined(BOTAN_HAS_SRP6)
119 throw Invalid_State(
"Attempting to initiate SRP session but TLS-SRP support disabled");
147 const std::vector<uint8_t>& reneg_info,
149 const std::vector<std::string>& next_protocols) :
150 m_version(session.version()),
151 m_session_id(session.session_id()),
153 m_suites(policy.ciphersuite_list(m_version, (session.srp_identifier() !=
""))),
154 m_comp_methods(policy.compression())
183 #if defined(BOTAN_HAS_SRP6)
188 throw Invalid_State(
"Attempting to resume SRP session but TLS-SRP support disabled");
196 if(reneg_info.empty() && !next_protocols.empty())
205 throw Exception(
"Cannot use hello cookie with stream protocol");
207 m_hello_cookie = hello_verify.
cookie();
213 std::vector<uint8_t> Client_Hello::serialize()
const
215 std::vector<uint8_t> buf;
250 const uint8_t major_version = reader.
get_byte();
251 const uint8_t minor_version = reader.
get_byte();
255 m_random = reader.
get_fixed<uint8_t>(32);
257 m_session_id = reader.
get_range<uint8_t>(1, 0, 32);
260 m_hello_cookie = reader.
get_range<uint8_t>(1, 0, 255);
272 if(!reneg->renegotiation_info().empty())
274 "Client sent renegotiation SCSV and non-empty extension");
289 "Client sent signature_algorithms extension in version that doesn't support it");
303 for(
size_t i = 0; i != m_suites.size(); ++i)
304 if(m_suites[i] == ciphersuite)
Client_Hello(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, RandomNumberGenerator &rng, const std::vector< uint8_t > &reneg_info, const Client_Hello::Settings &client_settings, const std::vector< std::string > &next_protocols)
std::vector< uint8_t > serialize() const
std::vector< T > get_fixed(size_t size)
virtual std::vector< uint8_t > send(const Handshake_Message &msg)=0
uint8_t minor_version() const
uint16_t ciphersuite_code() const
virtual std::vector< std::string > allowed_ecc_curves() const
uint8_t compression_method() const
void store_be(uint16_t in, uint8_t out[2])
virtual void randomize(uint8_t output[], size_t length)=0
virtual bool send_fallback_scsv(Protocol_Version version) const
virtual std::vector< uint16_t > srtp_profiles() const
virtual std::vector< std::string > allowed_signature_methods() const
void add(Extension *extn)
void update_hello_cookie(const Hello_Verify_Request &hello_verify)
const Server_Information & server_info() const
const std::vector< uint8_t > & session_ticket() const
#define BOTAN_ASSERT(expr, assertion_made)
Hello_Request(Handshake_IO &io)
std::vector< T > get_range_vector(size_t len_bytes, size_t min_elems, size_t max_elems)
std::vector< T > get_range(size_t len_bytes, size_t min_elems, size_t max_elems)
void update(const uint8_t in[], size_t length)
uint8_t major_version() const
std::vector< uint8_t > cookie() const
virtual std::vector< std::string > allowed_signature_hashes() const
virtual bool acceptable_protocol_version(Protocol_Version version) const
std::vector< uint8_t > make_hello_random(RandomNumberGenerator &rng, const Policy &policy)
virtual bool use_ecc_point_compression() const
bool offered_suite(uint16_t ciphersuite) const
bool value_exists(const std::vector< T > &vec, const T &val)
const std::string & srp_identifier() const
const Protocol_Version protocol_version() const
bool sent_fallback_scsv() const
bool supports_encrypt_then_mac() const
bool supports_negotiable_signature_algorithms() const
void deserialize(TLS_Data_Reader &reader)
virtual bool include_time_in_hello_random() const
bool is_datagram_protocol() const
const std::string & srp_identifier() const
virtual bool negotiate_encrypt_then_mac() const
const std::string & hostname() const
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)