9#ifndef BOTAN_TLS_HANDSHAKE_STATE_13_H_
10#define BOTAN_TLS_HANDSHAKE_STATE_13_H_
17#include <botan/tls_exceptn.h>
18#include <botan/tls_magic.h>
19#include <botan/tls_messages.h>
20#include <botan/internal/stl_util.h>
85 template <
typename MessageT>
86 const MessageT& get(
const std::optional<MessageT>& opt)
const {
87 if(!opt.has_value()) {
93 template <
typename MessageT>
94 MessageT& get(std::optional<MessageT>& opt) {
95 if(!opt.has_value()) {
103 std::optional<Client_Hello_13> m_client_hello;
104 std::optional<Client_Hello_12> m_client_hello_12;
105 std::optional<Server_Hello_13> m_server_hello;
106 std::optional<Server_Hello_12> m_server_hello_12;
107 std::optional<Hello_Retry_Request> m_hello_retry_request;
108 std::optional<Encrypted_Extensions> m_encrypted_extensions;
109 std::optional<Certificate_Request_13> m_certificate_request;
110 std::optional<Certificate_13> m_server_certificate;
111 std::optional<Certificate_13> m_client_certificate;
112 std::optional<Certificate_Verify_13> m_server_certificate_verify;
113 std::optional<Certificate_Verify_13> m_client_certificate_verify;
114 std::optional<Finished_13> m_server_finished;
115 std::optional<Finished_13> m_client_finished;
131 typename Outbound_Message_T,
132 typename Inbound_Message_T,
133 typename Inbound_Post_Handshake_Message_T>
138 template <
typename MsgT>
139 std::reference_wrapper<MsgT>
sending(MsgT msg)
140 requires(std::is_constructible_v<Outbound_Message_T, MsgT>)
142 return std::reference_wrapper<decltype(msg)>(store(std::move(msg),
false));
145 template <
typename... MsgTs>
146 decltype(
auto)
sending(std::variant<MsgTs...> message)
147 requires(is_generalizable_to<Outbound_Message_T>(message))
150 [&](
auto msg) -> as_wrapped_references_t<std::variant<MsgTs...>> {
return sending(std::move(msg)); },
156 [&](
auto msg) -> as_wrapped_references_t<Inbound_Message_T> {
157 if constexpr(std::is_constructible_v<Inbound_Message_T,
decltype(msg)>) {
158 return std::reference_wrapper<decltype(msg)>(store(std::move(msg),
true));
160 throw TLS_Exception(AlertType::UnexpectedMessage,
"received an illegal handshake message");
168 [](
auto msg) -> Inbound_Post_Handshake_Message_T {
169 if constexpr(std::is_constructible_v<Inbound_Post_Handshake_Message_T,
decltype(msg)>) {
172 throw TLS_Exception(AlertType::UnexpectedMessage,
"received an unexpected post-handshake message");
std::reference_wrapper< MsgT > sending(MsgT msg)
decltype(auto) received(Handshake_Message_13 message)
decltype(auto) sending(std::variant< MsgTs... > message)
decltype(auto) received(Post_Handshake_Message_13 message)
bool has_certificate_request() const
bool has_server_hello() const
bool has_server_certificate_msg() const
bool has_hello_retry_request() const
Client_Hello_13 & client_hello()
const Hello_Retry_Request & hello_retry_request() const
bool has_client_finished() const
const Certificate_13 & server_certificate() const
bool has_client_certificate_msg() const
const Client_Hello_13 & client_hello() const
const Certificate_Verify_13 & client_certificate_verify() const
const Certificate_Request_13 & certificate_request() const
const Certificate_13 & client_certificate() const
const Finished_13 & client_finished() const
bool has_client_hello() const
const Encrypted_Extensions & encrypted_extensions() const
const Finished_13 & server_finished() const
Handshake_State_13_Base(Connection_Side whoami)
const Server_Hello_13 & server_hello() const
const Certificate_Verify_13 & server_certificate_verify() const
bool has_server_finished() const
bool handshake_finished() const
std::variant< Key_Update > Client_Post_Handshake_13_Message
std::variant< Client_Hello_13, Client_Hello_12, Certificate_13, Certificate_Verify_13, Finished_13 > Client_Handshake_13_Message
std::variant< Server_Hello_13, Server_Hello_12, Hello_Retry_Request, Encrypted_Extensions, Certificate_13, Certificate_Request_13, Certificate_Verify_13, Finished_13 > Server_Handshake_13_Message
std::variant< New_Session_Ticket_13, Key_Update > Post_Handshake_Message_13
std::variant< New_Session_Ticket_13, Key_Update > Server_Post_Handshake_13_Message
std::variant< Client_Hello_13, Client_Hello_12, Server_Hello_13, Server_Hello_12, Hello_Retry_Request, Encrypted_Extensions, Certificate_13, Certificate_Request_13, Certificate_Verify_13, Finished_13 > Handshake_Message_13