9#ifndef BOTAN_TLS_MESSAGES_12_H_
10#define BOTAN_TLS_MESSAGES_12_H_
12#include <botan/secmem.h>
13#include <botan/tls_messages.h>
15#if defined(BOTAN_HAS_TLS_DOWNGRADE_SUPPORT)
16 #include <botan/tls_messages_13.h>
30 m_new_session_version(version), m_hostname(
hostname) {}
34 const std::string&
hostname()
const {
return m_hostname; }
38 const std::string m_hostname;
47 std::vector<uint8_t> reneg_info,
48 const Settings& client_settings,
49 std::vector<std::string> next_protocols);
56 std::vector<uint8_t> reneg_info,
58 std::vector<std::string> next_protocols);
62#if defined(BOTAN_HAS_TLS_DOWNGRADE_SUPPORT)
77 bool prefers_compressed_ec_points()
const;
79 bool secure_renegotiation()
const;
81 std::vector<uint8_t> renegotiation_info()
const;
83 bool supports_session_ticket()
const;
87 std::optional<Session_Handle> session_handle()
const;
89 bool supports_extended_master_secret()
const;
91 bool supports_cert_status_message()
const;
93 bool supports_encrypt_then_mac()
const;
98 void add_tls12_supported_groups_extensions(
const Policy& policy);
109 m_new_session_id(std::move(new_session_id)),
110 m_new_session_version(new_session_version),
125 uint16_t m_ciphersuite;
126 bool m_offer_session_ticket;
134 std::vector<uint8_t> secure_reneg_info,
136 const Settings& settings,
137 std::string_view next_protocol);
144 std::vector<uint8_t> secure_reneg_info,
146 const Session& resumed_session,
147 bool offer_session_ticket,
148 std::string_view next_protocol);
161 bool secure_renegotiation()
const;
163 std::vector<uint8_t> renegotiation_info()
const;
165 std::string next_protocol()
const;
167 bool supports_extended_master_secret()
const;
169 bool supports_encrypt_then_mac()
const;
171 bool supports_certificate_status_message()
const;
173 bool supports_session_ticket()
const;
175 uint16_t srtp_profile()
const;
176 bool prefers_compressed_ec_points()
const;
191 const std::optional<std::string>&
psk_identity()
const {
return m_psk_identity; }
198 std::string_view hostname,
209 std::vector<uint8_t> serialize()
const override {
return m_key_material; }
211 std::vector<uint8_t> m_key_material;
213 std::optional<std::string> m_psk_identity;
223 const std::vector<X509_Certificate>&
cert_chain()
const {
return m_certs; }
225 size_t count()
const;
227 bool empty()
const {
return m_certs.empty(); }
235 std::vector<uint8_t>
serialize()
const override;
238 std::vector<X509_Certificate> m_certs;
257 std::vector<X509_DN> allowed_cas);
268 std::vector<uint8_t>
serialize()
const override;
271 std::vector<X509_DN> m_names;
272 std::vector<std::string> m_cert_key_types;
273 std::vector<Signature_Scheme> m_schemes;
328 std::vector<uint8_t> serialize()
const override;
338 const std::vector<uint8_t>&
params()
const {
return m_params; }
349 const std::optional<Group_Params>&
shared_group()
const {
return m_shared_group; }
371 std::vector<uint8_t> serialize()
const override;
373 std::unique_ptr<PK_Key_Agreement_Key> m_kex_key;
374 std::optional<Group_Params> m_shared_group;
376 std::vector<uint8_t> m_params;
378 std::vector<uint8_t> m_signature;
393 std::vector<uint8_t> serialize()
const override;
410 uint32_t lifetime_in_seconds);
416 std::vector<uint8_t> serialize()
const override;
419 uint32_t m_ticket_lifetime_hint = 0;
430 std::vector<uint8_t>
serialize()
const override {
return std::vector<uint8_t>(1, 1); }
#define BOTAN_UNSTABLE_API
Handshake_Type type() const override
const std::vector< X509_Certificate > & cert_chain() const
std::vector< uint8_t > serialize() const override
Certificate_12(Handshake_IO &io, Handshake_Hash &hash, std::vector< X509_Certificate > certs)
~Certificate_12() override
Certificate_Request_12(const Certificate_Request_12 &)=delete
~Certificate_Request_12() override
Certificate_Request_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, std::vector< X509_DN > allowed_cas)
const std::vector< std::string > & acceptable_cert_types() const
Certificate_Request_12 & operator=(const Certificate_Request_12 &other)=delete
const std::vector< Signature_Scheme > & signature_schemes() const
std::vector< uint8_t > serialize() const override
const std::vector< X509_DN > & acceptable_CAs() const
Certificate_Request_12 & operator=(Certificate_Request_12 &&other)=delete
Certificate_Request_12(Certificate_Request_12 &&)=delete
Handshake_Type type() const override
Certificate_Status_12(Handshake_IO &io, Handshake_Hash &hash, std::vector< uint8_t > raw_response_bytes)
Certificate_Status(std::span< const uint8_t > buf, Connection_Side from)
bool verify(const X509_Certificate &cert, const Handshake_State &state, const Policy &policy) const
Certificate_Verify_12(Handshake_IO &io, Handshake_State &state, const Policy &policy, RandomNumberGenerator &rng, const Private_Key *key)
Certificate_Verify(std::span< const uint8_t > buf)
Certificate_Verify(std::span< const uint8_t > buf)
std::vector< uint8_t > serialize() const override
Handshake_Type type() const override
const std::string & hostname() const
Settings(const Protocol_Version version, std::string_view hostname="")
Protocol_Version protocol_version() const
Client_Hello_12_Shim(std::span< const uint8_t > buf)
Client_Hello_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, std::vector< uint8_t > reneg_info, const Settings &client_settings, std::vector< std::string > next_protocols)
const std::vector< uint8_t > & random() const
const std::vector< uint8_t > & compression_methods() const
Handshake_Type type() const override
const std::optional< std::string > & psk_identity() const
const secure_vector< uint8_t > & pre_master_secret() const
Client_Key_Exchange(Handshake_IO &io, Handshake_State &state, const Policy &policy, Credentials_Manager &creds, const Public_Key *server_public_key, std::string_view hostname, RandomNumberGenerator &rng)
bool verify(const Handshake_State &state, Connection_Side side) const
Finished_12(Handshake_IO &io, Handshake_State &state, Connection_Side side)
Finished(std::vector< uint8_t > buf)
Finished(std::vector< uint8_t > buf)
Handshake_Message()=default
Handshake_Type type() const override
Hello_Request(Handshake_IO &io)
New_Session_Ticket_12(Handshake_IO &io, Handshake_Hash &hash, Session_Ticket ticket, uint32_t lifetime_in_seconds)
Handshake_Type type() const override
uint32_t ticket_lifetime_hint() const
const Session_Ticket & ticket() const
uint16_t ciphersuite() const
Protocol_Version protocol_version() const
Settings(Session_ID new_session_id, Protocol_Version new_session_version, uint16_t ciphersuite, bool offer_session_ticket)
const Session_ID & session_id() const
bool offer_session_ticket() const
Server_Hello_12_Shim(std::span< const uint8_t > buf)
Server_Hello_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, std::vector< uint8_t > secure_reneg_info, const Client_Hello_12 &client_hello, const Settings &settings, std::string_view next_protocol)
Handshake_Type type() const override
Server_Hello_Done(Handshake_IO &io, Handshake_Hash &hash)
std::set< Extension_Code > extension_types() const
const std::vector< uint8_t > & random() const
uint8_t compression_method() const
Protocol_Version legacy_version() const
Handshake_Type type() const override
Server_Key_Exchange & operator=(Server_Key_Exchange &&other)=delete
const std::vector< uint8_t > & params() const
~Server_Key_Exchange() override
const std::optional< Group_Params > & shared_group() const
Server_Key_Exchange(Handshake_IO &io, Handshake_State &state, const Policy &policy, Credentials_Manager &creds, RandomNumberGenerator &rng, const Private_Key *signing_key=nullptr)
Server_Key_Exchange(const Server_Key_Exchange &other)=delete
Server_Key_Exchange(Server_Key_Exchange &&other)=delete
Server_Key_Exchange & operator=(const Server_Key_Exchange &other)=delete
Strong< std::vector< uint8_t >, struct Session_ID_ > Session_ID
holds a TLS 1.2 session ID for stateful resumption
Strong< std::vector< uint8_t >, struct Session_Ticket_ > Session_Ticket
holds a TLS 1.2 session ticket for stateless resumption
std::vector< T, secure_allocator< T > > secure_vector