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)
 
  151               return sending(std::move(msg));
 
 
  159               if constexpr(std::is_constructible_v<Inbound_Message_T, 
decltype(msg)>) {
 
  160                  return std::reference_wrapper<decltype(msg)>(
store(std::move(msg), 
true));
 
 
  170            [](
auto msg) -> Inbound_Post_Handshake_Message_T {
 
  171               if constexpr(std::is_constructible_v<Inbound_Post_Handshake_Message_T, 
decltype(msg)>) {
 
 
 
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
 
Client_Hello_13 & store(Client_Hello_13 client_hello, bool from_peer)
 
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
 
typename as_wrapped_references< T >::type as_wrapped_references_t
 
Handshake_State_13< Connection_Side::Client, Client_Handshake_13_Message, Server_Handshake_13_Message, Server_Post_Handshake_13_Message > Client_Handshake_State_13
 
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
 
Handshake_State_13< Connection_Side::Server, Server_Handshake_13_Message, Client_Handshake_13_Message, Client_Post_Handshake_13_Message > Server_Handshake_State_13
 
constexpr bool is_generalizable_to(const SpecialT &) noexcept