11#include <botan/tls_client.h>
13#include <botan/tls_policy.h>
14#include <botan/x509cert.h>
15#include <botan/internal/tls_channel_impl.h>
17#if defined(BOTAN_HAS_TLS_12)
18 #include <botan/internal/tls_client_impl_12.h>
21#if defined(BOTAN_HAS_TLS_13)
22 #include <botan/internal/tls_client_impl_13.h>
31 const std::shared_ptr<Session_Manager>& session_manager,
32 const std::shared_ptr<Credentials_Manager>& creds,
33 const std::shared_ptr<const Policy>& policy,
34 const std::shared_ptr<RandomNumberGenerator>& rng,
37 const std::vector<std::string>& next_protocols,
40 "Policy does not allow to offer requested protocol version");
42#if defined(BOTAN_HAS_TLS_13)
43 if(offer_version == Protocol_Version::TLS_V13) {
44 m_impl = std::make_unique<Client_Impl_13>(
45 callbacks, session_manager, creds, policy, rng, std::move(info), next_protocols);
47 if(m_impl->expects_downgrade()) {
48 m_impl->set_io_buffer_size(io_buf_sz);
51 if(m_impl->is_downgrading()) {
61#if defined(BOTAN_HAS_TLS_12)
63 m_impl = std::make_unique<Client_Impl_12>(callbacks,
76 BOTAN_UNUSED(callbacks, session_manager, creds, policy, rng, info, offer_version, next_protocols, io_buf_sz);
77 throw Not_Implemented(
"Requested TLS version to be offered is not available in this build");
82size_t Client::downgrade() {
85#if defined(BOTAN_HAS_TLS_12)
86 auto info = m_impl->extract_downgrade_info();
87 m_impl = std::make_unique<Client_Impl_12>(*info);
89 if(!info->peer_transcript.empty()) {
91 return m_impl->from_peer(info->peer_transcript);
105 auto read = m_impl->from_peer(data);
107 if(m_impl->is_downgrading()) {
115 return m_impl->is_handshake_complete();
119 return m_impl->is_active();
123 return m_impl->is_closed();
127 return m_impl->is_closed_for_reading();
131 return m_impl->is_closed_for_writing();
135 return m_impl->peer_cert_chain();
139 return m_impl->peer_raw_public_key();
143 return m_impl->external_psk_identity();
147 return m_impl->key_material_export(label, context, length);
151 m_impl->renegotiate(force_full_renegotiation);
155 m_impl->update_traffic_keys(request_peer_update);
159 return m_impl->secure_renegotiation_supported();
163 m_impl->to_peer(data);
167 m_impl->send_alert(alert);
171 m_impl->send_warning_alert(type);
175 m_impl->send_fatal_alert(type);
183 return m_impl->timeout_check();
187 return m_impl->application_protocol();
#define BOTAN_ASSERT_NOMSG(expr)
#define BOTAN_ARG_CHECK(expr, msg)
#define BOTAN_ASSERT_UNREACHABLE()
bool is_closed_for_reading() const override
bool is_handshake_complete() const override
void renegotiate(bool force_full_renegotiation=false) override
std::string application_protocol() const override
std::shared_ptr< const Public_Key > peer_raw_public_key() const override
Client(const std::shared_ptr< Callbacks > &callbacks, const std::shared_ptr< Session_Manager > &session_manager, const std::shared_ptr< Credentials_Manager > &creds, const std::shared_ptr< const Policy > &policy, const std::shared_ptr< RandomNumberGenerator > &rng, Server_Information server_info=Server_Information(), Protocol_Version offer_version=Protocol_Version::latest_tls_version(), const std::vector< std::string > &next_protocols={}, size_t reserved_io_buffer_size=TLS::Client::IO_BUF_DEFAULT_SIZE)
bool secure_renegotiation_supported() const override
bool is_active() const override
SymmetricKey key_material_export(std::string_view label, std::string_view context, size_t length) const override
bool is_closed_for_writing() const override
void send_fatal_alert(Alert::Type type) override
bool timeout_check() override
void send_warning_alert(Alert::Type type) override
void to_peer(std::span< const uint8_t > data) override
std::vector< X509_Certificate > peer_cert_chain() const override
bool is_closed() const override
void update_traffic_keys(bool request_peer_update=false) override
std::optional< std::string > external_psk_identity() const override
void send_alert(const Alert &alert) override
size_t from_peer(std::span< const uint8_t > data) override
bool is_datagram_protocol() const
bool is_pre_tls_13() const