13#include <botan/tls_messages.h>
14#include <botan/internal/tls_messages_internal.h>
16#include <botan/hash.h>
18#include <botan/tls_callbacks.h>
19#include <botan/tls_policy.h>
20#include <botan/internal/tls_reader.h>
26 auto buf = rng.
random_vec<std::vector<uint8_t>>(32);
38 const uint32_t time32 =
static_cast<uint32_t
>(std::chrono::system_clock::to_time_t(cb.
tls_current_timestamp()));
53 const uint8_t major_version = reader.
get_byte();
54 const uint8_t minor_version = reader.
get_byte();
93 !
extensions().get<Supported_Versions>()->supports(Protocol_Version::TLS_V13)) {
96 return (
m_legacy_version.is_datagram_protocol()) ? Protocol_Version::DTLS_V12 : Protocol_Version::TLS_V12;
101 return Protocol_Version::TLS_V13;
123 return m_data->legacy_version();
131 return m_data->session_id();
135 return m_data->comp_methods();
139 return m_data->ciphersuites();
143 return m_data->extensions().extension_types();
147 return m_data->extensions();
154 std::vector<uint8_t> buf;
157 buf.push_back(
m_data->legacy_version().major_version());
158 buf.push_back(
m_data->legacy_version().minor_version());
163 if(
m_data->legacy_version().is_datagram_protocol()) {
184 return m_data->hello_cookie_input_bits();
191 return std::find(
m_data->ciphersuites().cbegin(),
m_data->ciphersuites().cend(), ciphersuite) !=
192 m_data->ciphersuites().cend();
197 return sigs->supported_schemes();
208 return sigs->supported_schemes();
216 return groups->ec_groups();
223 return groups->dh_groups();
225 return std::vector<Group_Params>();
230 return sni->host_name();
237 return versions->versions();
252 return alpn->protocols();
259 return srtp->profiles();
265 return m_data->hello_cookie();
#define BOTAN_STATE_CHECK(expr)
#define BOTAN_ASSERT_NONNULL(ptr)
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
void random_vec(std::span< uint8_t > v)
virtual std::chrono::system_clock::time_point tls_current_timestamp()
Client_Hello_12_Shim(const std::vector< uint8_t > &buf)
Client_Hello(const Client_Hello &)=delete
std::vector< uint8_t > m_comp_methods
const Extensions & extensions() const
Protocol_Version m_legacy_version
Protocol_Version version() const
std::vector< uint16_t > m_suites
std::vector< uint8_t > m_cookie_input_bits
std::vector< uint8_t > m_random
std::vector< uint8_t > m_hello_cookie
const std::vector< uint8_t > & cookie() const
std::string sni_hostname() const
std::vector< uint8_t > serialize() const override
const std::vector< uint8_t > & random() const
std::vector< Signature_Scheme > signature_schemes() const
const Extensions & extensions() const
bool offered_suite(uint16_t ciphersuite) const
std::unique_ptr< Client_Hello_Internal > m_data
bool sent_signature_algorithms() const
std::vector< Group_Params > supported_ecc_curves() const
bool supports_alpn() const
std::vector< Signature_Scheme > certificate_signature_schemes() const
const std::vector< uint16_t > & ciphersuites() const
std::vector< uint8_t > cookie_input_data() const
std::set< Extension_Code > extension_types() const
std::vector< Group_Params > supported_dh_groups() const
std::vector< std::string > next_protocols() const
const Session_ID & session_id() const
Protocol_Version legacy_version() const
const std::vector< uint8_t > & compression_methods() const
std::vector< uint16_t > srtp_profiles() const
Handshake_Type type() const override
std::vector< Protocol_Version > supported_versions() const
Client_Hello(const Client_Hello &)=delete
virtual bool include_time_in_hello_random() const
virtual bool allow_tls12() const
virtual bool hash_hello_random() const
virtual bool allow_dtls12() const
std::vector< uint8_t > get_remaining()
std::vector< T > get_range(size_t len_bytes, size_t min_elems, size_t max_elems)
std::vector< T > get_fixed(size_t size)
std::vector< uint8_t > get_data_read_so_far()
std::vector< T > get_range_vector(size_t len_bytes, size_t min_elems, size_t max_elems)
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)
std::vector< uint8_t > make_hello_random(RandomNumberGenerator &rng, Callbacks &cb, const Policy &policy)
Strong< std::vector< uint8_t >, struct Session_ID_ > Session_ID
holds a TLS 1.2 session ID for stateful resumption
constexpr auto store_be(ParamTs &&... params)