|
Botan 3.13.0
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 (Channel_Impl_13 &&other)=delete | |
| Channel_Impl_13 (const Channel_Impl_13 &other)=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 () |
| virtual std::optional< std::string > | external_psk_identity () const =0 |
| 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 |
| 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 |
| virtual std::optional< std::chrono::milliseconds > | next_retransmission_timeout () const |
| Channel_Impl_13 & | operator= (Channel_Impl_13 &&other)=delete |
| Channel_Impl_13 & | operator= (const Channel_Impl_13 &other)=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 Types | |
| enum class | Compat_Mode_Situation : uint8_t { BeforeSendingAlert , AfterSendingFirstClientHello , BeforeSendingSecondClientHello , BeforeSendingEncryptedClientFlight , AfterSendingFirstServerHello , AfterSendingHelloRetryRequest } |
Protected Attributes | |
| std::optional< Active_Connection_State_13 > | m_active_state |
| std::unique_ptr< Cipher_State > | m_cipher_state |
| const Connection_Side | m_side |
| Transcript_Hash_State | m_transcript_hash |
Generic interface for TLS 1.3 endpoint
Definition at line 50 of file tls_channel_impl_13.h.
|
strongprotected |
| Enumerator | |
|---|---|
| BeforeSendingAlert | |
| AfterSendingFirstClientHello | |
| BeforeSendingSecondClientHello | |
| BeforeSendingEncryptedClientFlight | |
| AfterSendingFirstServerHello | |
| AfterSendingHelloRetryRequest | |
Definition at line 222 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, callbacks(), credentials_manager(), m_side, policy(), rng(), and session_manager().
Referenced by Botan::TLS::Channel_Impl_13::AggregatedHandshakeMessages::AggregatedHandshakeMessages(), Botan::TLS::Channel_Impl_13::AggregatedMessages::AggregatedMessages(), Channel_Impl_13(), Channel_Impl_13(), Botan::TLS::Client_Impl_13::Client_Impl_13(), operator=(), operator=(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
delete |
References Channel_Impl_13().
|
delete |
References Channel_Impl_13().
|
overridedefault |
|
inlineprotected |
Definition at line 258 of file tls_channel_impl_13.h.
References m_transcript_hash.
Referenced by send_handshake_message().
|
inlineprotected |
Definition at line 262 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Server_Impl_13::send_new_session_tickets(), and 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.
Referenced by Botan::TLS::Channel_Impl_12::activate_session().
|
inlineprotected |
Definition at line 266 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13(), Botan::TLS::Client_Impl_13::Client_Impl_13(), from_peer(), Botan::TLS::Server_Impl_13::send_new_session_tickets(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
inlineinherited |
Send a close notification alert
Definition at line 80 of file tls_channel_impl.h.
References send_warning_alert().
|
inlineprotected |
Definition at line 270 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
inlineprotectedinherited |
Definition at line 290 of file tls_channel_impl.h.
Referenced by Botan::TLS::Client_Impl_13::Client_Impl_13(), and Botan::TLS::Channel_Impl_13::from_peer().
|
pure virtualinherited |
Implemented in Botan::TLS::Channel_Impl_12, Botan::TLS::Client_Impl_13, and Botan::TLS::Server_Impl_13.
|
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_NONNULL, BOTAN_STATE_CHECK, callbacks(), Botan::TLS::ChangeCipherSpec, Botan::TLS::Channel_Impl::expects_downgrade(), Botan::TLS::Handshake, Botan::holds_any_of(), Botan::TLS::Channel_Impl::is_downgrading(), Botan::TLS::Channel_Impl::is_handshake_complete(), m_cipher_state, m_transcript_hash, policy(), 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 209 of file tls_channel_impl_13.cpp.
References BOTAN_ASSERT_NONNULL, Botan::TLS::Key_Update::expects_reciprocation(), m_cipher_state, opportunistically_update_traffic_keys(), and policy().
|
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 332 of file tls_channel_impl_13.cpp.
References m_cipher_state.
Referenced by to_peer(), and update_traffic_keys().
|
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().
|
inlineprotectedinherited |
Indicates whether a downgrade to TLS 1.2 or lower is in progress
Definition at line 282 of file tls_channel_impl.h.
Referenced by Botan::TLS::Channel_Impl_13::from_peer(), Botan::TLS::Channel_Impl_13::key_material_export(), and Botan::TLS::Channel_Impl_13::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 Botan::TLS::Channel_Impl_13::from_peer(), Botan::TLS::Channel_Impl_13::send_dummy_change_cipher_spec(), and Botan::TLS::Channel_Impl_13::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 337 of file tls_channel_impl_13.cpp.
References BOTAN_STATE_CHECK, Botan::TLS::Channel_Impl::is_downgrading(), and m_cipher_state.
|
protectedpure virtual |
Referenced by send_alert().
|
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 146 of file tls_channel_impl.h.
|
inlinevirtualinherited |
Reimplemented in Botan::TLS::Channel_Impl_12.
Definition at line 92 of file tls_channel_impl.h.
|
delete |
References Channel_Impl_13().
|
delete |
References Channel_Impl_13().
|
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 240 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 274 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13(), Botan::TLS::Client_Impl_13::Client_Impl_13(), from_peer(), handle(), Botan::TLS::Server_Impl_13::send_new_session_tickets(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
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.
|
inlineprotected |
Definition at line 272 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13(), Botan::TLS::Client_Impl_13::Client_Impl_13(), Botan::TLS::Server_Impl_13::send_new_session_tickets(), and Botan::TLS::Server_Impl_13::Server_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 306 of file tls_channel_impl_13.cpp.
References Botan::TLS::Alert, BeforeSendingAlert, Botan::TLS::Alert::is_valid(), m_cipher_state, maybe_handle_compatibility_mode(), and Botan::TLS::Alert::serialize().
|
protected |
Definition at line 271 of file tls_channel_impl_13.cpp.
References BOTAN_STATE_CHECK, Botan::TLS::ChangeCipherSpec, and Botan::TLS::Channel_Impl::is_handshake_complete().
|
inlineinherited |
Send a fatal alert
Definition at line 75 of file tls_channel_impl.h.
References Botan::TLS::Alert, and send_alert().
Referenced by Botan::TLS::Channel_Impl_12::from_peer(), and Botan::TLS::Channel_Impl_13::from_peer().
|
inlineprotected |
Definition at line 243 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 248 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 159 of file tls_channel_impl.h.
|
inlineprotected |
Definition at line 252 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 send_alert().
Referenced by close().
|
inlineprotected |
Definition at line 268 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13(), Botan::TLS::Client_Impl_13::Client_Impl_13(), Botan::TLS::Server_Impl_13::send_new_session_tickets(), and Botan::TLS::Server_Impl_13::Server_Impl_13().
|
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 458 of file tls_channel_impl_13.cpp.
|
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 462 of file tls_channel_impl_13.cpp.
|
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 285 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 345 of file tls_channel_impl_13.cpp.
References BOTAN_ASSERT_NONNULL, BOTAN_STATE_CHECK, is_active(), 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 291 of file tls_channel_impl_13.h.
Referenced by Botan::TLS::Client_Impl_13::application_protocol(), Botan::TLS::Server_Impl_13::application_protocol(), Botan::TLS::Client_Impl_13::external_psk_identity(), Botan::TLS::Server_Impl_13::external_psk_identity(), Botan::TLS::Client_Impl_13::is_handshake_complete(), Botan::TLS::Server_Impl_13::is_handshake_complete(), Botan::TLS::Server_Impl_13::new_session_ticket_supported(), Botan::TLS::Client_Impl_13::peer_cert_chain(), Botan::TLS::Server_Impl_13::peer_cert_chain(), Botan::TLS::Client_Impl_13::peer_raw_public_key(), Botan::TLS::Server_Impl_13::peer_raw_public_key(), and Botan::TLS::Server_Impl_13::send_new_session_tickets().
|
protected |
Definition at line 290 of file tls_channel_impl_13.h.
Referenced by from_peer(), handle(), is_active(), key_material_export(), send_alert(), Botan::TLS::Server_Impl_13::send_new_session_tickets(), and update_traffic_keys().
|
protected |
Definition at line 288 of file tls_channel_impl_13.h.
Referenced by Channel_Impl_13().
|
protected |
Definition at line 289 of file tls_channel_impl_13.h.
Referenced by aggregate_handshake_messages(), and from_peer().