Botan 3.11.0
Crypto and TLS for C&
Botan::TLS::Client_Hello_12 Class Referencefinal

#include <tls_messages_12.h>

Inheritance diagram for Botan::TLS::Client_Hello_12:
Botan::TLS::Client_Hello_12_Shim Botan::TLS::Client_Hello Botan::TLS::Handshake_Message

Classes

class  Settings

Public Member Functions

std::vector< Signature_Schemecertificate_signature_schemes () const
const std::vector< uint16_t > & ciphersuites () const
 Client_Hello_12 (const std::vector< uint8_t > &buf)
 Client_Hello_12 (Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, const std::vector< uint8_t > &reneg_info, const Session_with_Handle &session_and_handle, const std::vector< std::string > &next_protocols)
 Client_Hello_12 (Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, const std::vector< uint8_t > &reneg_info, const Settings &client_settings, const std::vector< std::string > &next_protocols)
const std::vector< uint8_t > & compression_methods () const
const std::vector< uint8_t > & cookie () const
std::vector< uint8_t > cookie_input_data () const
std::set< Extension_Codeextension_types () const
const Extensionsextensions () const
Protocol_Version legacy_version () const
std::vector< std::string > next_protocols () const
bool offered_suite (uint16_t ciphersuite) const
bool prefers_compressed_ec_points () const
const std::vector< uint8_t > & random () const
std::vector< uint8_t > renegotiation_info () const
bool secure_renegotiation () const
bool sent_signature_algorithms () const
std::vector< uint8_t > serialize () const override
std::optional< Session_Handlesession_handle () const
const Session_IDsession_id () const
Session_Ticket session_ticket () const
std::vector< Signature_Schemesignature_schemes () const
std::string sni_hostname () const
std::vector< uint16_t > srtp_profiles () const
std::vector< Group_Paramssupported_dh_groups () const
std::vector< Group_Paramssupported_ecc_curves () const
std::vector< Protocol_Versionsupported_versions () const
bool supports_alpn () const
bool supports_cert_status_message () const
bool supports_encrypt_then_mac () const
bool supports_extended_master_secret () const
bool supports_session_ticket () const
Handshake_Type type () const override
std::string type_string () const
void update_hello_cookie (const Hello_Verify_Request &hello_verify)
virtual Handshake_Type wire_type () const

Protected Member Functions

 Client_Hello ()
 Client_Hello (Client_Hello &&) noexcept
 Client_Hello (const Client_Hello &)=delete
 Client_Hello (std::unique_ptr< Client_Hello_Internal > data)

Protected Attributes

std::unique_ptr< Client_Hello_Internalm_data

Detailed Description

Definition at line 21 of file tls_messages_12.h.

Constructor & Destructor Documentation

◆ Client_Hello_12() [1/3]

Botan::TLS::Client_Hello_12::Client_Hello_12 ( Handshake_IO & io,
Handshake_Hash & hash,
const Policy & policy,
Callbacks & cb,
RandomNumberGenerator & rng,
const std::vector< uint8_t > & reneg_info,
const Settings & client_settings,
const std::vector< std::string > & next_protocols )

Definition at line 111 of file msg_client_hello_12.cpp.

118 {
119 m_data->m_legacy_version = client_settings.protocol_version();
120 m_data->m_random = make_hello_random(rng, cb, policy);
121 m_data->m_suites = policy.ciphersuite_list(client_settings.protocol_version());
122
123 if(!policy.acceptable_protocol_version(m_data->legacy_version())) {
124 throw Internal_Error("Offering " + m_data->legacy_version().to_string() +
125 " but our own policy does not accept it");
126 }
127
128 /*
129 * Place all empty extensions in front to avoid a bug in some systems
130 * which reject hellos when the last extension in the list is empty.
131 */
132
133 // NOLINTBEGIN(*-owning-memory)
134
135 // EMS must always be used with TLS 1.2, regardless of the policy used.
136
137 m_data->extensions().add(new Extended_Master_Secret);
138
139 if(policy.negotiate_encrypt_then_mac()) {
140 m_data->extensions().add(new Encrypt_then_MAC);
141 }
142
143 m_data->extensions().add(new Session_Ticket_Extension());
144
145 m_data->extensions().add(new Renegotiation_Extension(reneg_info));
146
147 m_data->extensions().add(new Supported_Versions(m_data->legacy_version(), policy));
148
149 if(Server_Name_Indicator::hostname_acceptable_for_sni(client_settings.hostname())) {
150 m_data->extensions().add(new Server_Name_Indicator(client_settings.hostname()));
151 }
152
153 if(policy.support_cert_status_message()) {
154 m_data->extensions().add(new Certificate_Status_Request({}, {}));
155 }
156
157 add_tls12_supported_groups_extensions(policy);
158
159 m_data->extensions().add(new Signature_Algorithms(policy.acceptable_signature_schemes()));
160 if(auto cert_signing_prefs = policy.acceptable_certificate_signature_schemes()) {
161 // RFC 8446 4.2.3
162 // TLS 1.2 implementations SHOULD also process this extension.
163 // Implementations which have the same policy in both cases MAY omit
164 // the "signature_algorithms_cert" extension.
165 m_data->extensions().add(new Signature_Algorithms_Cert(std::move(cert_signing_prefs.value())));
166 }
167
168 if(reneg_info.empty() && !next_protocols.empty()) {
169 m_data->extensions().add(new Application_Layer_Protocol_Notification(next_protocols));
170 }
171
172 if(m_data->legacy_version().is_datagram_protocol()) {
173 m_data->extensions().add(new SRTP_Protection_Profiles(policy.srtp_profiles()));
174 }
175
176 // NOLINTEND(*-owning-memory)
177
178 cb.tls_modify_extensions(m_data->extensions(), Connection_Side::Client, type());
179
180 hash.update(io.send(*this));
181}
std::unique_ptr< Client_Hello_Internal > m_data
std::vector< std::string > next_protocols() const
virtual Handshake_Type type() const =0
static bool hostname_acceptable_for_sni(std::string_view hostname)
std::vector< uint8_t > make_hello_random(RandomNumberGenerator &rng, Callbacks &cb, const Policy &policy)

References Botan::TLS::Policy::acceptable_certificate_signature_schemes(), Botan::TLS::Policy::acceptable_protocol_version(), Botan::TLS::Policy::acceptable_signature_schemes(), Botan::TLS::Policy::ciphersuite_list(), Botan::TLS::Client, Botan::TLS::Client_Hello_12::Settings::hostname(), Botan::TLS::Server_Name_Indicator::hostname_acceptable_for_sni(), Botan::TLS::Client_Hello::m_data, Botan::TLS::make_hello_random(), Botan::TLS::Policy::negotiate_encrypt_then_mac(), Botan::TLS::Client_Hello::next_protocols(), Botan::TLS::Client_Hello_12::Settings::protocol_version(), Botan::TLS::Handshake_IO::send(), Botan::TLS::Policy::srtp_profiles(), Botan::TLS::Policy::support_cert_status_message(), Botan::TLS::Callbacks::tls_modify_extensions(), Botan::TLS::Client_Hello::type(), and Botan::TLS::Handshake_Hash::update().

Referenced by Client_Hello_12().

◆ Client_Hello_12() [2/3]

Botan::TLS::Client_Hello_12::Client_Hello_12 ( Handshake_IO & io,
Handshake_Hash & hash,
const Policy & policy,
Callbacks & cb,
RandomNumberGenerator & rng,
const std::vector< uint8_t > & reneg_info,
const Session_with_Handle & session_and_handle,
const std::vector< std::string > & next_protocols )

Definition at line 186 of file msg_client_hello_12.cpp.

193 {
194 m_data->m_legacy_version = session.session.version();
195 m_data->m_random = make_hello_random(rng, cb, policy);
196
197 // RFC 5077 3.4
198 // When presenting a ticket, the client MAY generate and include a
199 // Session ID in the TLS ClientHello. [...] If a ticket is presented by
200 // the client, the server MUST NOT attempt to use the Session ID in the
201 // ClientHello for stateful session resumption.
202 m_data->m_session_id = session.handle.id().value_or(Session_ID(make_hello_random(rng, cb, policy)));
203 m_data->m_suites = policy.ciphersuite_list(m_data->legacy_version());
204
205 if(!policy.acceptable_protocol_version(session.session.version())) {
206 throw Internal_Error("Offering " + m_data->legacy_version().to_string() +
207 " but our own policy does not accept it");
208 }
209
210 if(!value_exists(m_data->ciphersuites(), session.session.ciphersuite_code())) {
211 m_data->m_suites.push_back(session.session.ciphersuite_code());
212 }
213
214 /*
215 * As EMS must always be used with TLS 1.2, add it even if it wasn't used
216 * in the original session. If the server understands it and follows the
217 * RFC it should reject our resume attempt and upgrade us to a new session
218 * with the EMS protection.
219 */
220 // NOLINTBEGIN(*-owning-memory)
221 m_data->extensions().add(new Extended_Master_Secret);
222
223 if(session.session.supports_encrypt_then_mac()) {
224 m_data->extensions().add(new Encrypt_then_MAC);
225 }
226
227 if(session.handle.is_ticket()) {
228 m_data->extensions().add(new Session_Ticket_Extension(session.handle.ticket().value()));
229 }
230
231 m_data->extensions().add(new Renegotiation_Extension(reneg_info));
232
233 const std::string hostname = session.session.server_info().hostname();
234
236 m_data->extensions().add(new Server_Name_Indicator(hostname));
237 }
238
239 if(policy.support_cert_status_message()) {
240 m_data->extensions().add(new Certificate_Status_Request({}, {}));
241 }
242
243 add_tls12_supported_groups_extensions(policy);
244
245 m_data->extensions().add(new Signature_Algorithms(policy.acceptable_signature_schemes()));
246 if(auto cert_signing_prefs = policy.acceptable_certificate_signature_schemes()) {
247 // RFC 8446 4.2.3
248 // TLS 1.2 implementations SHOULD also process this extension.
249 // Implementations which have the same policy in both cases MAY omit
250 // the "signature_algorithms_cert" extension.
251 m_data->extensions().add(new Signature_Algorithms_Cert(std::move(cert_signing_prefs.value())));
252 }
253
254 if(reneg_info.empty() && !next_protocols.empty()) {
255 m_data->extensions().add(new Application_Layer_Protocol_Notification(next_protocols));
256 }
257 // NOLINTEND(*-owning-memory)
258
259 cb.tls_modify_extensions(m_data->extensions(), Connection_Side::Client, type());
260
261 hash.update(io.send(*this));
262}
Strong< std::vector< uint8_t >, struct Session_ID_ > Session_ID
holds a TLS 1.2 session ID for stateful resumption
bool value_exists(const std::vector< T > &vec, const V &val)
Definition stl_util.h:43

References Botan::TLS::Policy::acceptable_certificate_signature_schemes(), Botan::TLS::Policy::acceptable_protocol_version(), Botan::TLS::Policy::acceptable_signature_schemes(), Botan::TLS::Session_Base::ciphersuite_code(), Botan::TLS::Policy::ciphersuite_list(), Botan::TLS::Client, Botan::TLS::Session_with_Handle::handle, Botan::TLS::Server_Information::hostname(), Botan::TLS::Server_Name_Indicator::hostname_acceptable_for_sni(), Botan::TLS::Session_Handle::id(), Botan::TLS::Session_Handle::is_ticket(), Botan::TLS::Client_Hello::m_data, Botan::TLS::make_hello_random(), Botan::TLS::Client_Hello::next_protocols(), Botan::TLS::Handshake_IO::send(), Botan::TLS::Session_Base::server_info(), Botan::TLS::Session_with_Handle::session, Botan::TLS::Policy::support_cert_status_message(), Botan::TLS::Session_Base::supports_encrypt_then_mac(), Botan::TLS::Session_Handle::ticket(), Botan::TLS::Callbacks::tls_modify_extensions(), Botan::TLS::Client_Hello::type(), Botan::TLS::Handshake_Hash::update(), Botan::value_exists(), and Botan::TLS::Session_Base::version().

◆ Client_Hello_12() [3/3]

Botan::TLS::Client_Hello_12::Client_Hello_12 ( const std::vector< uint8_t > & buf)
explicit

Definition at line 264 of file msg_client_hello_12.cpp.

264 :
265 Client_Hello_12(std::make_unique<Client_Hello_Internal>(buf)) {}
Client_Hello_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, const std::vector< uint8_t > &reneg_info, const Settings &client_settings, const std::vector< std::string > &next_protocols)

References Client_Hello_12().

Member Function Documentation

◆ certificate_signature_schemes()

std::vector< Signature_Scheme > Botan::TLS::Client_Hello::certificate_signature_schemes ( ) const
inherited

Definition at line 202 of file msg_client_hello.cpp.

202 {
203 // RFC 8446 4.2.3
204 // If no "signature_algorithms_cert" extension is present, then the
205 // "signature_algorithms" extension also applies to signatures appearing
206 // in certificates.
207 if(const Signature_Algorithms_Cert* sigs = m_data->extensions().get<Signature_Algorithms_Cert>()) {
208 return sigs->supported_schemes();
209 } else {
210 return signature_schemes();
211 }
212}
std::vector< Signature_Scheme > signature_schemes() const

References m_data, and signature_schemes().

Referenced by Botan::TLS::Certificate_13::Certificate_13(), and ~Client_Hello().

◆ ciphersuites()

const std::vector< uint16_t > & Botan::TLS::Client_Hello::ciphersuites ( ) const
inherited

Definition at line 138 of file msg_client_hello.cpp.

138 {
139 return m_data->ciphersuites();
140}

References m_data.

Referenced by ~Client_Hello().

◆ Client_Hello() [1/4]

Definition at line 142 of file msg_client_hello.cpp.

109: m_data(std::make_unique<Client_Hello_Internal>()) {}

◆ Client_Hello() [2/4]

Botan::TLS::Client_Hello::Client_Hello ( Client_Hello && )
protecteddefaultnoexceptinherited

◆ Client_Hello() [3/4]

Botan::TLS::Client_Hello::Client_Hello ( const Client_Hello & )
protecteddeleteinherited

◆ Client_Hello() [4/4]

Botan::TLS::Client_Hello::Client_Hello ( std::unique_ptr< Client_Hello_Internal > data)
explicitprotectedinherited

Definition at line 143 of file msg_client_hello.cpp.

114 : m_data(std::move(data)) {
116}
#define BOTAN_ASSERT_NONNULL(ptr)
Definition assert.h:114

References Botan::TLS::Client_Hello::m_data.

◆ compression_methods()

const std::vector< uint8_t > & Botan::TLS::Client_Hello::compression_methods ( ) const

Definition at line 145 of file msg_client_hello.cpp.

134 {
135 return m_data->comp_methods();
136}

◆ cookie()

const std::vector< uint8_t > & Botan::TLS::Client_Hello::cookie ( ) const
inherited

Definition at line 264 of file msg_client_hello.cpp.

264 {
265 return m_data->hello_cookie();
266}

References m_data.

Referenced by ~Client_Hello().

◆ cookie_input_data()

std::vector< uint8_t > Botan::TLS::Client_Hello::cookie_input_data ( ) const
inherited

Definition at line 181 of file msg_client_hello.cpp.

181 {
182 BOTAN_STATE_CHECK(!m_data->hello_cookie_input_bits().empty());
183
184 return m_data->hello_cookie_input_bits();
185}
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:49

References BOTAN_STATE_CHECK, and m_data.

Referenced by ~Client_Hello().

◆ extension_types()

std::set< Extension_Code > Botan::TLS::Client_Hello::extension_types ( ) const
inherited

Definition at line 142 of file msg_client_hello.cpp.

142 {
143 return m_data->extensions().extension_types();
144}

Referenced by Botan::TLS::Server_Hello_12::Server_Hello_12(), Botan::TLS::Client_Hello_13::validate_updates(), and ~Client_Hello().

◆ extensions()

◆ legacy_version()

Protocol_Version Botan::TLS::Client_Hello::legacy_version ( ) const
inherited

Return the version indicated in the ClientHello. This may differ from the version indicated in the supported_versions extension.

See RFC 8446 4.1.2: TLS 1.3, the client indicates its version preferences in the "supported_versions" extension (Section 4.2.1) and the legacy_version field MUST be set to 0x0303, which is the version number for TLS 1.2.

Definition at line 122 of file msg_client_hello.cpp.

122 {
123 return m_data->legacy_version();
124}

References m_data.

Referenced by ~Client_Hello().

◆ next_protocols()

std::vector< std::string > Botan::TLS::Client_Hello::next_protocols ( ) const
inherited

Definition at line 250 of file msg_client_hello.cpp.

250 {
251 if(auto* alpn = m_data->extensions().get<Application_Layer_Protocol_Notification>()) {
252 return alpn->protocols();
253 }
254 return {};
255}

References m_data.

Referenced by Botan::TLS::Client_Hello_12::Client_Hello_12(), Botan::TLS::Client_Hello_12::Client_Hello_12(), Botan::TLS::Client_Hello_13::Client_Hello_13(), and ~Client_Hello().

◆ offered_suite()

bool Botan::TLS::Client_Hello::offered_suite ( uint16_t ciphersuite) const
inherited

Definition at line 190 of file msg_client_hello.cpp.

190 {
191 return std::find(m_data->ciphersuites().cbegin(), m_data->ciphersuites().cend(), ciphersuite) !=
192 m_data->ciphersuites().cend();
193}

References m_data.

Referenced by ~Client_Hello().

◆ prefers_compressed_ec_points()

bool Botan::TLS::Client_Hello_12::prefers_compressed_ec_points ( ) const

Definition at line 29 of file msg_client_hello_12.cpp.

29 {
30 if(const Supported_Point_Formats* ecc_formats = m_data->extensions().get<Supported_Point_Formats>()) {
31 return ecc_formats->prefers_compressed();
32 }
33 return false;
34}

References Botan::TLS::Client_Hello::m_data.

◆ random()

const std::vector< uint8_t > & Botan::TLS::Client_Hello::random ( ) const

Definition at line 103 of file msg_client_hello.cpp.

126 {
127 return m_data->random();
128}

References Botan::TLS::Client_Hello_12_Shim::Client_Hello().

◆ renegotiation_info()

std::vector< uint8_t > Botan::TLS::Client_Hello_12::renegotiation_info ( ) const

Definition at line 40 of file msg_client_hello_12.cpp.

40 {
41 if(const Renegotiation_Extension* reneg = m_data->extensions().get<Renegotiation_Extension>()) {
42 return reneg->renegotiation_info();
43 }
44 return {};
45}

References Botan::TLS::Client_Hello::m_data.

Referenced by Botan::TLS::Channel_Impl_12::secure_renegotiation_check().

◆ secure_renegotiation()

bool Botan::TLS::Client_Hello_12::secure_renegotiation ( ) const

Definition at line 36 of file msg_client_hello_12.cpp.

36 {
37 return m_data->extensions().has<Renegotiation_Extension>();
38}

References Botan::TLS::Client_Hello::m_data.

Referenced by Botan::TLS::Channel_Impl_12::secure_renegotiation_check(), and Botan::TLS::Server_Hello_12::Server_Hello_12().

◆ sent_signature_algorithms()

bool Botan::TLS::Client_Hello::sent_signature_algorithms ( ) const
inherited

Definition at line 246 of file msg_client_hello.cpp.

246 {
247 return m_data->extensions().has<Signature_Algorithms>();
248}

References m_data.

Referenced by ~Client_Hello().

◆ serialize()

std::vector< uint8_t > Botan::TLS::Client_Hello::serialize ( ) const
overridevirtualinherited
Returns
DER representation of this message

Implements Botan::TLS::Handshake_Message.

Definition at line 153 of file msg_client_hello.cpp.

153 {
154 std::vector<uint8_t> buf;
155 buf.reserve(1024); // working around GCC warning
156
157 buf.push_back(m_data->legacy_version().major_version());
158 buf.push_back(m_data->legacy_version().minor_version());
159 buf += m_data->random();
160
161 append_tls_length_value(buf, m_data->session_id().get(), 1);
162
163 if(m_data->legacy_version().is_datagram_protocol()) {
164 append_tls_length_value(buf, m_data->hello_cookie(), 1);
165 }
166
167 append_tls_length_value(buf, m_data->ciphersuites(), 2);
168 append_tls_length_value(buf, m_data->comp_methods(), 1);
169
170 /*
171 * May not want to send extensions at all in some cases. If so,
172 * should include SCSV value (if reneg info is empty, if not we are
173 * renegotiating with a modern server)
174 */
175
176 buf += m_data->extensions().serialize(Connection_Side::Client);
177
178 return buf;
179}
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)
Definition tls_reader.h:177

References Botan::TLS::append_tls_length_value(), Botan::TLS::Client, and m_data.

Referenced by ~Client_Hello().

◆ session_handle()

std::optional< Session_Handle > Botan::TLS::Client_Hello_12::session_handle ( ) const

Definition at line 58 of file msg_client_hello_12.cpp.

58 {
59 // RFC 5077 3.4
60 // If a ticket is presented by the client, the server MUST NOT attempt
61 // to use the Session ID in the ClientHello for stateful session
62 // resumption.
63 if(auto ticket = session_ticket(); !ticket.empty()) {
64 return Session_Handle(ticket);
65 } else if(const auto& id = session_id(); !id.empty()) {
66 return Session_Handle(id);
67 } else {
68 return std::nullopt;
69 }
70}
Session_Ticket session_ticket() const
const Session_ID & session_id() const
bool empty() const noexcept(noexcept(this->get().empty()))

References Botan::detail::Container_Strong_Adapter_Base< T >::empty(), Botan::TLS::Client_Hello::session_id(), and session_ticket().

◆ session_id()

const Session_ID & Botan::TLS::Client_Hello::session_id ( ) const
inherited

Definition at line 130 of file msg_client_hello.cpp.

130 {
131 return m_data->session_id();
132}

References m_data.

Referenced by Botan::TLS::Client_Hello_12::session_handle(), and ~Client_Hello().

◆ session_ticket()

Session_Ticket Botan::TLS::Client_Hello_12::session_ticket ( ) const

Definition at line 51 of file msg_client_hello_12.cpp.

51 {
52 if(auto* ticket = m_data->extensions().get<Session_Ticket_Extension>()) {
53 return ticket->contents();
54 }
55 return {};
56}

References Botan::TLS::Client_Hello::m_data.

Referenced by session_handle(), and Botan::TLS::Handshake_State::session_ticket().

◆ signature_schemes()

std::vector< Signature_Scheme > Botan::TLS::Client_Hello::signature_schemes ( ) const
inherited

Definition at line 195 of file msg_client_hello.cpp.

195 {
196 if(const Signature_Algorithms* sigs = m_data->extensions().get<Signature_Algorithms>()) {
197 return sigs->supported_schemes();
198 }
199 return {};
200}

References m_data.

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

◆ sni_hostname()

std::string Botan::TLS::Client_Hello::sni_hostname ( ) const
inherited

Definition at line 228 of file msg_client_hello.cpp.

228 {
229 if(const Server_Name_Indicator* sni = m_data->extensions().get<Server_Name_Indicator>()) {
230 return sni->host_name();
231 }
232 return "";
233}

References m_data.

Referenced by Botan::TLS::Certificate_13::Certificate_13(), Botan::TLS::Certificate_Request_13::maybe_create(), and ~Client_Hello().

◆ srtp_profiles()

std::vector< uint16_t > Botan::TLS::Client_Hello::srtp_profiles ( ) const
inherited

Definition at line 257 of file msg_client_hello.cpp.

257 {
258 if(const SRTP_Protection_Profiles* srtp = m_data->extensions().get<SRTP_Protection_Profiles>()) {
259 return srtp->profiles();
260 }
261 return {};
262}

References m_data.

Referenced by ~Client_Hello().

◆ supported_dh_groups()

std::vector< Group_Params > Botan::TLS::Client_Hello::supported_dh_groups ( ) const
inherited

Definition at line 221 of file msg_client_hello.cpp.

221 {
222 if(const Supported_Groups* groups = m_data->extensions().get<Supported_Groups>()) {
223 return groups->dh_groups();
224 }
225 return std::vector<Group_Params>();
226}

References m_data.

Referenced by ~Client_Hello().

◆ supported_ecc_curves()

std::vector< Group_Params > Botan::TLS::Client_Hello::supported_ecc_curves ( ) const
inherited

Definition at line 214 of file msg_client_hello.cpp.

214 {
215 if(const Supported_Groups* groups = m_data->extensions().get<Supported_Groups>()) {
216 return groups->ec_groups();
217 }
218 return {};
219}

References m_data.

Referenced by ~Client_Hello().

◆ supported_versions()

std::vector< Protocol_Version > Botan::TLS::Client_Hello::supported_versions ( ) const
inherited

Definition at line 235 of file msg_client_hello.cpp.

235 {
236 if(const Supported_Versions* versions = m_data->extensions().get<Supported_Versions>()) {
237 return versions->versions();
238 }
239 return {};
240}

References m_data.

Referenced by ~Client_Hello().

◆ supports_alpn()

bool Botan::TLS::Client_Hello::supports_alpn ( ) const
inherited

Definition at line 242 of file msg_client_hello.cpp.

242 {
243 return m_data->extensions().has<Application_Layer_Protocol_Notification>();
244}

References m_data.

Referenced by Botan::TLS::Server_Hello_12::Server_Hello_12(), Botan::TLS::Server_Hello_12::Server_Hello_12(), and ~Client_Hello().

◆ supports_cert_status_message()

bool Botan::TLS::Client_Hello_12::supports_cert_status_message ( ) const

Definition at line 76 of file msg_client_hello_12.cpp.

76 {
77 return m_data->extensions().has<Certificate_Status_Request>();
78}

References Botan::TLS::Client_Hello::m_data.

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

◆ supports_encrypt_then_mac()

bool Botan::TLS::Client_Hello_12::supports_encrypt_then_mac ( ) const

Definition at line 80 of file msg_client_hello_12.cpp.

80 {
81 return m_data->extensions().has<Encrypt_then_MAC>();
82}

References Botan::TLS::Client_Hello::m_data.

Referenced by Botan::TLS::Server_Hello_12::Server_Hello_12(), and Botan::TLS::Server_Hello_12::Server_Hello_12().

◆ supports_extended_master_secret()

bool Botan::TLS::Client_Hello_12::supports_extended_master_secret ( ) const

Definition at line 72 of file msg_client_hello_12.cpp.

72 {
73 return m_data->extensions().has<Extended_Master_Secret>();
74}

References Botan::TLS::Client_Hello::m_data.

Referenced by Botan::TLS::Server_Hello_12::Server_Hello_12(), and Botan::TLS::Server_Hello_12::Server_Hello_12().

◆ supports_session_ticket()

bool Botan::TLS::Client_Hello_12::supports_session_ticket ( ) const

Definition at line 47 of file msg_client_hello_12.cpp.

47 {
48 return m_data->extensions().has<Session_Ticket_Extension>();
49}

References Botan::TLS::Client_Hello::m_data.

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

◆ type()

◆ type_string()

std::string Botan::TLS::Handshake_Message::type_string ( ) const
inherited
Returns
string representation of this message type

Definition at line 21 of file tls_handshake_state.cpp.

21 {
23}
const char * handshake_type_to_string(Handshake_Type type)
Definition tls_magic.cpp:15

References Botan::TLS::handshake_type_to_string(), and type().

◆ update_hello_cookie()

void Botan::TLS::Client_Hello_12::update_hello_cookie ( const Hello_Verify_Request & hello_verify)

Definition at line 23 of file msg_client_hello_12.cpp.

23 {
24 BOTAN_STATE_CHECK(m_data->legacy_version().is_datagram_protocol());
25
26 m_data->m_hello_cookie = hello_verify.cookie();
27}

References BOTAN_STATE_CHECK, Botan::TLS::Hello_Verify_Request::cookie(), and Botan::TLS::Client_Hello::m_data.

◆ wire_type()

virtual Handshake_Type Botan::TLS::Handshake_Message::wire_type ( ) const
inlinevirtualinherited
Returns
the wire representation of the message's type

Reimplemented in Botan::TLS::Hello_Retry_Request.

Definition at line 39 of file tls_handshake_msg.h.

39 {
40 // Usually equal to the Handshake_Type enum value,
41 // with the exception of TLS 1.3 Hello Retry Request.
42 return type();
43 }

References type().

Referenced by Botan::TLS::Stream_Handshake_IO::send().

Member Data Documentation

◆ m_data


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