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>
26 m_new_session_version(version), m_hostname(
hostname) {}
30 const std::string&
hostname()
const {
return m_hostname; }
34 const std::string m_hostname;
43 const std::vector<uint8_t>& reneg_info,
44 const Settings& client_settings,
45 const std::vector<std::string>& next_protocols);
52 const std::vector<uint8_t>& reneg_info,
54 const std::vector<std::string>& next_protocols);
65 bool prefers_compressed_ec_points()
const;
67 bool secure_renegotiation()
const;
69 std::vector<uint8_t> renegotiation_info()
const;
71 bool supports_session_ticket()
const;
75 std::optional<Session_Handle> session_handle()
const;
77 bool supports_extended_master_secret()
const;
79 bool supports_cert_status_message()
const;
81 bool supports_encrypt_then_mac()
const;
86 void add_tls12_supported_groups_extensions(
const Policy& policy);
97 m_new_session_id(std::move(new_session_id)),
98 m_new_session_version(new_session_version),
113 uint16_t m_ciphersuite;
114 bool m_offer_session_ticket;
122 const std::vector<uint8_t>& secure_reneg_info,
124 const Settings& settings,
125 std::string_view next_protocol);
132 const std::vector<uint8_t>& secure_reneg_info,
134 const Session& resumed_session,
135 bool offer_session_ticket,
136 std::string_view next_protocol);
149 bool secure_renegotiation()
const;
151 std::vector<uint8_t> renegotiation_info()
const;
153 std::string next_protocol()
const;
155 bool supports_extended_master_secret()
const;
157 bool supports_encrypt_then_mac()
const;
159 bool supports_certificate_status_message()
const;
161 bool supports_session_ticket()
const;
163 uint16_t srtp_profile()
const;
164 bool prefers_compressed_ec_points()
const;
179 const std::optional<std::string>&
psk_identity()
const {
return m_psk_identity; }
186 std::string_view hostname,
197 std::vector<uint8_t> serialize()
const override {
return m_key_material; }
199 std::vector<uint8_t> m_key_material;
201 std::optional<std::string> m_psk_identity;
211 const std::vector<X509_Certificate>&
cert_chain()
const {
return m_certs; }
213 size_t count()
const;
215 bool empty()
const {
return m_certs.empty(); }
223 std::vector<uint8_t>
serialize()
const override;
226 std::vector<X509_Certificate> m_certs;
245 const std::vector<X509_DN>& allowed_cas);
256 std::vector<uint8_t>
serialize()
const override;
259 std::vector<X509_DN> m_names;
260 std::vector<std::string> m_cert_key_types;
261 std::vector<Signature_Scheme> m_schemes;
316 std::vector<uint8_t> serialize()
const override;
326 const std::vector<uint8_t>&
params()
const {
return m_params; }
337 const std::optional<Group_Params>&
shared_group()
const {
return m_shared_group; }
359 std::vector<uint8_t> serialize()
const override;
361 std::unique_ptr<PK_Key_Agreement_Key> m_kex_key;
362 std::optional<Group_Params> m_shared_group;
364 std::vector<uint8_t> m_params;
366 std::vector<uint8_t> m_signature;
381 std::vector<uint8_t> serialize()
const override;
398 uint32_t lifetime_in_seconds);
404 std::vector<uint8_t> serialize()
const override;
407 uint32_t m_ticket_lifetime_hint = 0;
418 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
Certificate_12(Handshake_IO &io, Handshake_Hash &hash, const std::vector< X509_Certificate > &certs)
std::vector< uint8_t > serialize() const override
~Certificate_12() override
Certificate_Request_12(const Certificate_Request_12 &)=delete
~Certificate_Request_12() override
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(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, const std::vector< X509_DN > &allowed_cas)
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(const std::vector< uint8_t > &buf, Connection_Side from)
Certificate_Verify(const std::vector< uint8_t > &buf)
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(const std::vector< 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(const std::vector< uint8_t > &buf)
Client_Hello_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, const std::vector< uint8_t > &reneg_info, const Settings &client_settings, const 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)
Finished(const std::vector< uint8_t > &buf)
bool verify(const Handshake_State &state, Connection_Side side) const
Finished_12(Handshake_IO &io, Handshake_State &state, Connection_Side side)
Finished(const 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(const std::vector< uint8_t > &buf)
Server_Hello_12(Handshake_IO &io, Handshake_Hash &hash, const Policy &policy, Callbacks &cb, RandomNumberGenerator &rng, const 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