52 virtual size_t from_peer(std::span<const uint8_t> data) = 0;
58 virtual void to_peer(std::span<const uint8_t> data) = 0;
133 std::string_view context,
134 size_t length)
const = 0;
141 virtual void renegotiate(
bool force_full_renegotiation =
false) = 0;
191#if defined(BOTAN_HAS_TLS_DOWNGRADE_SUPPORT)
203 struct Downgrade_Information {
205 std::optional<Client_Hello_13> client_hello;
208 std::vector<uint8_t> peer_transcript;
212 std::optional<Session_with_Handle> tls12_session;
215 std::vector<std::string> next_protocols;
216 size_t io_buffer_size;
218 std::shared_ptr<Callbacks> callbacks;
219 std::shared_ptr<Session_Manager> session_manager;
220 std::shared_ptr<Credentials_Manager> creds;
221 std::shared_ptr<RandomNumberGenerator> rng;
222 std::shared_ptr<const Policy> policy;
224 bool received_tls_13_error_alert;
228 std::unique_ptr<Downgrade_Information> m_downgrade_info;
230 void preserve_peer_transcript(std::span<const uint8_t> input) {
232 m_downgrade_info->peer_transcript.insert(m_downgrade_info->peer_transcript.end(), input.begin(), input.end());
235 void preserve_client_hello(Client_Hello_13 client_hello) {
237 m_downgrade_info->client_hello.emplace(std::move(client_hello));
243 void set_io_buffer_size(
size_t io_buf_sz) {
245 m_downgrade_info->io_buffer_size = io_buf_sz;
256 void request_downgrade() {
258 m_downgrade_info->will_downgrade =
true;
261 void request_downgrade_for_resumption(Session_with_Handle session) {
262 BOTAN_STATE_CHECK(m_downgrade_info && !m_downgrade_info->client_hello.has_value() &&
263 m_downgrade_info->peer_transcript.empty() && !m_downgrade_info->tls12_session.has_value());
265 m_downgrade_info->tls12_session = std::move(session);
273 std::unique_ptr<Downgrade_Information> extract_downgrade_info() {
return std::exchange(m_downgrade_info, {}); }
283#if defined(BOTAN_HAS_TLS_DOWNGRADE_SUPPORT)
284 return m_downgrade_info && m_downgrade_info->will_downgrade;
291#if defined(BOTAN_HAS_TLS_DOWNGRADE_SUPPORT)
292 return m_downgrade_info !=
nullptr;