Botan 3.6.1
Crypto and TLS for C&
|
#include <tls_channel_impl_13.h>
Classes | |
class | AggregatedHandshakeMessages |
class | AggregatedMessages |
class | AggregatedPostHandshakeMessages |
Public Member Functions | |
virtual std::string | application_protocol () const =0 |
Channel_Impl_13 (const Channel_Impl_13 &)=delete | |
Channel_Impl_13 (const std::shared_ptr< Callbacks > &callbacks, const std::shared_ptr< Session_Manager > &session_manager, const std::shared_ptr< Credentials_Manager > &credentials_manager, const std::shared_ptr< RandomNumberGenerator > &rng, const std::shared_ptr< const Policy > &policy, bool is_server) | |
void | close () |
bool | expects_downgrade () const |
virtual std::optional< std::string > | external_psk_identity () const =0 |
std::unique_ptr< Downgrade_Information > | extract_downgrade_info () |
size_t | from_peer (std::span< const uint8_t > data) override |
bool | is_active () const override |
bool | is_closed () const override |
bool | is_closed_for_reading () const override |
bool | is_closed_for_writing () const override |
bool | is_downgrading () const |
virtual bool | is_handshake_complete () const =0 |
SymmetricKey | key_material_export (std::string_view label, std::string_view context, size_t length) const override |
virtual bool | new_session_ticket_supported () const |
Channel_Impl_13 & | operator= (const Channel_Impl_13 &)=delete |
virtual std::vector< X509_Certificate > | peer_cert_chain () const =0 |
virtual std::shared_ptr< const Public_Key > | peer_raw_public_key () const =0 |
void | renegotiate (bool) override |
bool | secure_renegotiation_supported () const override |
void | send_alert (const Alert &alert) override |
void | send_fatal_alert (Alert::Type type) |
virtual size_t | send_new_session_tickets (const size_t) |
void | send_warning_alert (Alert::Type type) |
bool | timeout_check () override |
void | to_peer (std::span< const uint8_t > data) override |
void | update_traffic_keys (bool request_peer_update=false) override |
~Channel_Impl_13 () override | |
Protected Member Functions | |
AggregatedHandshakeMessages | aggregate_handshake_messages () |
AggregatedPostHandshakeMessages | aggregate_post_handshake_messages () |
Callbacks & | callbacks () const |
Credentials_Manager & | credentials_manager () |
void | expect_downgrade (const Server_Information &server_info, const std::vector< std::string > &next_protocols) |
void | handle (const Key_Update &key_update) |
virtual void | maybe_log_secret (std::string_view label, std::span< const uint8_t > secret) const =0 |
void | opportunistically_update_traffic_keys () |
const Policy & | policy () const |
virtual bool | prepend_ccs () |
void | preserve_client_hello (std::span< const uint8_t > msg) |
void | preserve_peer_transcript (std::span< const uint8_t > input) |
virtual void | process_dummy_change_cipher_spec ()=0 |
virtual void | process_handshake_msg (Handshake_Message_13 msg)=0 |
virtual void | process_post_handshake_msg (Post_Handshake_Message_13 msg)=0 |
void | request_downgrade () |
void | request_downgrade_for_resumption (Session_with_Handle session) |
RandomNumberGenerator & | rng () |
void | send_dummy_change_cipher_spec () |
template<typename... MsgTs> | |
std::vector< uint8_t > | send_handshake_message (const std::variant< MsgTs... > &message) |
template<typename MsgT > | |
std::vector< uint8_t > | send_handshake_message (std::reference_wrapper< MsgT > message) |
std::vector< uint8_t > | send_post_handshake_message (Post_Handshake_Message_13 message) |
Session_Manager & | session_manager () |
void | set_io_buffer_size (size_t io_buf_sz) |
void | set_record_size_limits (uint16_t outgoing_limit, uint16_t incoming_limit) |
void | set_selected_certificate_type (Certificate_Type cert_type) |
Protected Attributes | |
std::unique_ptr< Cipher_State > | m_cipher_state |
std::unique_ptr< Downgrade_Information > | m_downgrade_info |
const Connection_Side | m_side |
Transcript_Hash_State | m_transcript_hash |
Generic interface for TLS 1.3 endpoint
Definition at line 48 of file tls_channel_impl_13.h.
|
explicit |
Set up a new TLS 1.3 session
callbacks | contains a set of callback function references required by the TLS endpoint. |
session_manager | manages session state |
credentials_manager | manages application/user credentials |
rng | a random number generator |
policy | specifies other connection policy information |
is_server | whether this is a server session or not |
Definition at line 40 of file tls_channel_impl_13.cpp.
References BOTAN_ASSERT_NONNULL.
|
explicitdelete |
|
overridedefault |
|
inlineprotected |
Definition at line 256 of file tls_channel_impl_13.h.
References m_transcript_hash.
Referenced by send_handshake_message().
|
inlineprotected |
Definition at line 260 of file tls_channel_impl_13.h.
Referenced by send_post_handshake_message().
|
pure virtualinherited |
Return the protocol notification set for this connection, if any (ALPN). This value is not tied to the session and a later renegotiation of the same session can choose a new protocol.
Implemented in Botan::TLS::Client_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
|
inlineprotected |
Definition at line 264 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13(), and from_peer().
|
inlineinherited |
Send a close notification alert
Definition at line 80 of file tls_channel_impl.h.
References Botan::TLS::Channel_Impl::send_warning_alert().
|
inlineprotected |
Definition at line 268 of file tls_channel_impl_13.h.
|
protected |
Indicate that we have to expect a downgrade to TLS 1.2. In which case the current implementation (i.e. Client_Impl_13 or Server_Impl_13) will need to be replaced by their respective counter parts.
This will prepare an internal structure where any information required to downgrade can be preserved.
Definition at line 402 of file tls_channel_impl_13.cpp.
References Botan::TLS::Channel::IO_BUF_DEFAULT_SIZE, and Botan::TLS::Channel_Impl::m_downgrade_info.
|
inlineinherited |
Definition at line 278 of file tls_channel_impl.h.
References Botan::TLS::Channel_Impl::m_downgrade_info.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13(), and from_peer().
|
pure virtualinherited |
Implemented in Botan::TLS::Channel_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
|
inlineinherited |
Definition at line 276 of file tls_channel_impl.h.
References Botan::TLS::Channel_Impl::m_downgrade_info.
|
overridevirtual |
Inject TLS traffic received from counterparty
Implements Botan::TLS::Channel_Impl.
Definition at line 68 of file tls_channel_impl_13.cpp.
References Botan::TLS::Alert, Botan::TLS::ApplicationData, BOTAN_ASSERT, BOTAN_STATE_CHECK, callbacks(), Botan::TLS::ChangeCipherSpec, Botan::TLS::Handshake_Layer::copy_data(), Botan::TLS::Record_Layer::copy_data(), Botan::TLS::Record_Layer::disable_receiving_compat_mode(), Botan::TLS::Channel_Impl::expects_downgrade(), Botan::TLS::Handshake, Botan::TLS::Handshake_Layer::has_pending_data(), Botan::holds_any_of(), Botan::TLS::Channel_Impl::is_downgrading(), Botan::TLS::Channel_Impl::is_handshake_complete(), m_cipher_state, Botan::TLS::Channel_Impl::m_downgrade_info, m_transcript_hash, Botan::TLS::Handshake_Layer::next_message(), Botan::TLS::Handshake_Layer::next_post_handshake_message(), Botan::TLS::Record_Layer::next_record(), policy(), Botan::TLS::Channel_Impl::preserve_peer_transcript(), process_dummy_change_cipher_spec(), process_handshake_msg(), process_post_handshake_msg(), Botan::TLS::Channel_Impl::send_fatal_alert(), Botan::TLS::Callbacks::tls_record_received(), and Botan::TLS::TLS_Exception::type().
|
protected |
Definition at line 195 of file tls_channel_impl_13.cpp.
References Botan::TLS::Key_Update::expects_reciprocation(), Botan::TLS::Handshake_Layer::has_pending_data(), m_cipher_state, and opportunistically_update_traffic_keys().
|
overridevirtual |
Note that the connection is active until the application has called close()
, even if a CloseNotify has been received from the peer.
Implements Botan::TLS::Channel_Impl.
Definition at line 304 of file tls_channel_impl_13.cpp.
References m_cipher_state.
Referenced by to_peer().
|
inlineoverridevirtual |
Implements Botan::TLS::Channel_Impl.
Definition at line 167 of file tls_channel_impl_13.h.
References is_closed_for_reading(), and is_closed_for_writing().
|
inlineoverridevirtual |
Implements Botan::TLS::Channel_Impl.
Definition at line 169 of file tls_channel_impl_13.h.
Referenced by is_closed().
|
inlineoverridevirtual |
Implements Botan::TLS::Channel_Impl.
Definition at line 171 of file tls_channel_impl_13.h.
Referenced by is_closed().
|
inlineinherited |
Indicates whether a downgrade to TLS 1.2 or lower is in progress
Definition at line 271 of file tls_channel_impl.h.
References Botan::TLS::Channel_Impl::m_downgrade_info.
Referenced by from_peer(), key_material_export(), and update_traffic_keys().
|
pure virtualinherited |
Implemented in Botan::TLS::Channel_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
Referenced by from_peer(), and update_traffic_keys().
|
overridevirtual |
Key material export (RFC 5705)
label | a disambiguating label string |
context | a per-association context value |
length | the length of the desired key in bytes |
Implements Botan::TLS::Channel_Impl.
Definition at line 309 of file tls_channel_impl_13.cpp.
References BOTAN_STATE_CHECK, Botan::TLS::Channel_Impl::is_downgrading(), and m_cipher_state.
|
protectedpure virtualinherited |
Used exclusively in the Cipher_State to pass secret data to a user-provided Callbacks::tls_ssl_key_log_data() iff Policy::allow_ssl_key_log_file() returns true.
Referenced by Botan::TLS::Cipher_State::advance_with_client_hello(), Botan::TLS::Cipher_State::advance_with_server_finished(), Botan::TLS::Cipher_State::advance_with_server_hello(), Botan::TLS::Cipher_State::update_read_keys(), and Botan::TLS::Cipher_State::update_write_keys().
|
inlinevirtualinherited |
Reimplemented in Botan::TLS::Server_Impl_13.
Definition at line 144 of file tls_channel_impl.h.
|
delete |
|
inlineprotected |
Schedule a traffic key update to opportunistically happen before the channel sends application data the next time. Such a key update will never request a reciprocal key update from the peer.
Definition at line 238 of file tls_channel_impl_13.h.
Referenced by handle().
|
pure virtualinherited |
Implemented in Botan::TLS::Channel_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
|
pure virtualinherited |
Implemented in Botan::TLS::Channel_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
|
inlineprotected |
Definition at line 272 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13(), from_peer(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
inlineprotectedvirtual |
This method can be used by subclasses to indicate that send_record should prepend a CCS before the actual record. This is useful for middlebox compatibility mode. See RFC 8446 D.4.
Definition at line 229 of file tls_channel_impl_13.h.
|
inlineprotectedinherited |
Definition at line 231 of file tls_channel_impl.h.
References BOTAN_STATE_CHECK, and Botan::TLS::Channel_Impl::m_downgrade_info.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13().
|
inlineprotectedinherited |
Definition at line 226 of file tls_channel_impl.h.
References BOTAN_STATE_CHECK, and Botan::TLS::Channel_Impl::m_downgrade_info.
Referenced by from_peer().
|
protectedpure virtual |
Referenced by from_peer().
|
protectedpure virtual |
Referenced by from_peer().
|
protectedpure virtual |
Referenced by from_peer().
|
inlineoverridevirtual |
Attempt to renegotiate the session
Implements Botan::TLS::Channel_Impl.
Definition at line 185 of file tls_channel_impl_13.h.
|
inlineprotectedinherited |
Implementations use this to signal that the peer indicated a protocol version downgrade. After calling request_downgrade()
no further state changes must be perfomed by the implementation. Particularly, no further handshake messages must be emitted. Instead, they must yield control flow back to the underlying Channel implementation to perform the protocol version downgrade.
Definition at line 252 of file tls_channel_impl.h.
References BOTAN_STATE_CHECK, and Botan::TLS::Channel_Impl::m_downgrade_info.
Referenced by Botan::TLS::Channel_Impl::request_downgrade_for_resumption().
|
inlineprotectedinherited |
Definition at line 257 of file tls_channel_impl.h.
References BOTAN_ASSERT_NOMSG, BOTAN_STATE_CHECK, Botan::TLS::Protocol_Version::is_pre_tls_13(), Botan::TLS::Channel_Impl::m_downgrade_info, Botan::TLS::Channel_Impl::request_downgrade(), Botan::TLS::Session_with_Handle::session, and Botan::TLS::Session_Base::version().
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13().
|
inlineprotected |
Definition at line 270 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13().
|
inlineoverridevirtual |
Implements Botan::TLS::Channel_Impl.
Definition at line 201 of file tls_channel_impl_13.h.
|
overridevirtual |
Send a TLS alert message. If the alert is fatal, the internal state (keys, etc) will be reset.
alert | the Alert to send |
Implements Botan::TLS::Channel_Impl.
Definition at line 279 of file tls_channel_impl_13.cpp.
References Botan::TLS::Alert, Botan::TLS::Alert::is_valid(), m_cipher_state, and Botan::TLS::Alert::serialize().
|
protected |
Definition at line 248 of file tls_channel_impl_13.cpp.
References Botan::TLS::ChangeCipherSpec.
|
inlineinherited |
Send a fatal alert
Definition at line 75 of file tls_channel_impl.h.
References Botan::TLS::Alert, and Botan::TLS::Channel_Impl::send_alert().
Referenced by Botan::TLS::Channel_Impl_12::from_peer(), and from_peer().
|
inlineprotected |
Definition at line 241 of file tls_channel_impl_13.h.
References Botan::TLS::Channel_Impl_13::AggregatedHandshakeMessages::add(), aggregate_handshake_messages(), Botan::generalize_to(), and Botan::TLS::Channel_Impl_13::AggregatedMessages::send().
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13(), and send_handshake_message().
|
inlineprotected |
Definition at line 246 of file tls_channel_impl_13.h.
References Botan::generalize_to(), and send_handshake_message().
|
inlinevirtualinherited |
Send tickets
new session tickets to the peer. This is only supported on TLS 1.3 servers.
If the server's Session_Manager does not accept the generated Session objects, the server implementation won't be able to send new tickets. Additionally, anything but TLS 1.3 servers will return 0 (because they don't support sending such session tickets).
Reimplemented in Botan::TLS::Server_Impl_13.
Definition at line 157 of file tls_channel_impl.h.
|
inlineprotected |
Definition at line 250 of file tls_channel_impl_13.h.
References Botan::TLS::Channel_Impl_13::AggregatedPostHandshakeMessages::add(), aggregate_post_handshake_messages(), and Botan::TLS::Channel_Impl_13::AggregatedMessages::send().
Referenced by update_traffic_keys().
|
inlineinherited |
Send a warning alert
Definition at line 70 of file tls_channel_impl.h.
References Botan::TLS::Alert, and Botan::TLS::Channel_Impl::send_alert().
Referenced by Botan::TLS::Channel_Impl::close().
|
inlineprotected |
Definition at line 266 of file tls_channel_impl_13.h.
|
inlineprotectedinherited |
Definition at line 239 of file tls_channel_impl.h.
References BOTAN_STATE_CHECK, and Botan::TLS::Channel_Impl::m_downgrade_info.
|
protected |
Set the record size limits as negotiated by the "record_size_limit" extension (RFC 8449).
outgoing_limit | the maximal number of plaintext bytes to be sent in a protected record |
incoming_limit | the maximal number of plaintext bytes to be accepted in a received protected record |
Definition at line 422 of file tls_channel_impl_13.cpp.
References Botan::TLS::Record_Layer::set_record_size_limits().
|
protected |
Set the expected certificate type needed to parse Certificate messages in the handshake layer. See RFC 7250 and 8446 4.4.2 for further details.
Definition at line 426 of file tls_channel_impl_13.cpp.
References Botan::TLS::Handshake_Layer::set_selected_certificate_type().
|
inlineoverridevirtual |
Perform a handshake timeout check. This does nothing unless this is a DTLS channel with a pending handshake state, in which case we check for timeout and potentially retransmit handshake packets.
In the TLS 1.3 implementation, this always returns false.
Implements Botan::TLS::Channel_Impl.
Definition at line 215 of file tls_channel_impl_13.h.
|
overridevirtual |
Inject plaintext intended for counterparty Throws an exception if is_active() is false
Implements Botan::TLS::Channel_Impl.
Definition at line 258 of file tls_channel_impl_13.cpp.
References Botan::TLS::ApplicationData, is_active(), and update_traffic_keys().
|
overridevirtual |
Attempt to update the session's traffic key material Note that this is possible with a TLS 1.3 channel, only.
request_peer_update | if true, require a reciprocal key update |
Implements Botan::TLS::Channel_Impl.
Definition at line 317 of file tls_channel_impl_13.cpp.
References BOTAN_ASSERT_NONNULL, BOTAN_STATE_CHECK, Botan::TLS::Channel_Impl::is_downgrading(), Botan::TLS::Channel_Impl::is_handshake_complete(), m_cipher_state, and send_post_handshake_message().
Referenced by to_peer().
|
protected |
Definition at line 288 of file tls_channel_impl_13.h.
Referenced by from_peer(), handle(), is_active(), key_material_export(), send_alert(), and update_traffic_keys().
|
protectedinherited |
Definition at line 224 of file tls_channel_impl.h.
Referenced by expect_downgrade(), Botan::TLS::Channel_Impl::expects_downgrade(), Botan::TLS::Channel_Impl::extract_downgrade_info(), from_peer(), Botan::TLS::Channel_Impl::is_downgrading(), Botan::TLS::Channel_Impl::preserve_client_hello(), Botan::TLS::Channel_Impl::preserve_peer_transcript(), Botan::TLS::Channel_Impl::request_downgrade(), Botan::TLS::Channel_Impl::request_downgrade_for_resumption(), and Botan::TLS::Channel_Impl::set_io_buffer_size().
|
protected |
Definition at line 286 of file tls_channel_impl_13.h.
|
protected |
Definition at line 287 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Channel_Impl_13::AggregatedHandshakeMessages::add(), aggregate_handshake_messages(), and from_peer().