14#include <botan/tls_extensions_13.h>
16#include <botan/ber_dec.h>
17#include <botan/der_enc.h>
18#include <botan/tls_alert.h>
19#include <botan/tls_exceptn.h>
20#include <botan/internal/tls_reader.h>
27 if(extension_size == 0) {
39 throw Decoding_Error(
"Not enough bytes in the buffer to decode Cookie");
42 for(
size_t i = 0; i < len; ++i) {
43 m_cookie.push_back(reader.
get_byte());
48 std::vector<uint8_t> buf;
50 const uint16_t len =
static_cast<uint16_t
>(m_cookie.size());
55 for(
const auto& cookie_byte : m_cookie) {
56 buf.push_back(cookie_byte);
63 std::vector<uint8_t> buf;
66 buf.push_back(
static_cast<uint8_t
>(m_modes.size()));
67 for(
const auto& mode : m_modes) {
68 buf.push_back(
static_cast<uint8_t
>(mode));
75 if(extension_size < 2) {
76 throw Decoding_Error(
"Empty psk_key_exchange_modes extension is illegal");
79 const auto mode_count = reader.
get_byte();
80 for(uint16_t i = 0; i < mode_count; ++i) {
83 m_modes.push_back(mode);
89 std::vector<uint8_t> out;
90 std::vector<uint8_t> dn_list;
92 for(
const auto& dn : m_distinguished_names) {
93 std::vector<uint8_t> encoded_dn;
95 dn.encode_into(encoder);
105 if(extension_size < 2) {
106 throw Decoding_Error(
"Empty certificate_authorities extension is illegal");
112 throw Decoding_Error(
"Inconsistent length in certificate_authorities extension");
118 BER_Decoder decoder(name_bits.data(), name_bits.size());
119 m_distinguished_names.emplace_back();
120 decoder.
decode(m_distinguished_names.back());
125 m_distinguished_names(std::move(acceptable_DNs)) {}
128 std::vector<uint8_t> result;
129 if(m_max_early_data_size.has_value()) {
130 const auto max_data = m_max_early_data_size.value();
140 uint16_t extension_size,
143 if(extension_size != 4) {
145 "Received an early_data extension in a NewSessionTicket message "
146 "without maximum early data size indication");
150 }
else if(extension_size != 0) {
152 "Received an early_data extension containing an unexpected data "
#define BOTAN_ASSERT_NOMSG(expr)
BER_Decoder & decode(bool &out)
std::vector< uint8_t > serialize(Connection_Side whoami) const override
Certificate_Authorities(TLS_Data_Reader &reader, uint16_t extension_size)
Cookie(const std::vector< uint8_t > &cookie)
std::vector< uint8_t > serialize(Connection_Side whoami) const override
std::vector< uint8_t > serialize(Connection_Side whoami) const override
EarlyDataIndication(TLS_Data_Reader &reader, uint16_t extension_size, Handshake_Type message_type)
bool empty() const override
PSK_Key_Exchange_Modes(std::vector< PSK_Key_Exchange_Mode > modes)
std::vector< uint8_t > serialize(Connection_Side whoami) const override
bool has_remaining() const
size_t remaining_bytes() const
std::vector< uint8_t > get_tls_length_value(size_t len_bytes)
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)
constexpr uint8_t get_byte(T input)