14#include <botan/tls_extensions_12.h>
16#include <botan/tls_alert.h>
17#include <botan/tls_exceptn.h>
18#include <botan/internal/tls_reader.h>
24 m_reneg_data(reader.get_range<uint8_t>(1, 0, 255)) {
25 if(m_reneg_data.size() + 1 != extension_size) {
26 throw Decoding_Error(
"Bad encoding for secure renegotiation extn");
31 std::vector<uint8_t> buf;
38 if(m_prefers_compressed) {
46 const uint8_t len = reader.
get_byte();
48 if(len + 1 != extension_size) {
49 throw Decoding_Error(
"Inconsistent length field in supported point formats list");
52 bool includes_uncompressed =
false;
53 for(
size_t i = 0; i != len; ++i) {
54 const uint8_t format = reader.
get_byte();
57 m_prefers_compressed =
false;
61 m_prefers_compressed =
true;
62 std::vector<uint8_t> remaining_formats = reader.
get_fixed<uint8_t>(len - i - 1);
63 includes_uncompressed =
64 std::any_of(std::begin(remaining_formats), std::end(remaining_formats), [](uint8_t remaining_format) {
79 if(!includes_uncompressed) {
81 "Supported Point Formats Extension must contain the uncompressed point format");
86 m_ticket(
Session_Ticket(reader.get_elem<uint8_t, std::vector<uint8_t>>(extension_size))) {}
89 if(extension_size != 0) {
95 return std::vector<uint8_t>();
99 if(extension_size != 0) {
105 return std::vector<uint8_t>();
Encrypt_then_MAC()=default
std::vector< uint8_t > serialize(Connection_Side whoami) const override
std::vector< uint8_t > serialize(Connection_Side whoami) const override
Extended_Master_Secret()=default
std::vector< uint8_t > serialize(Connection_Side whoami) const override
Renegotiation_Extension()=default
Session_Ticket_Extension()=default
void discard_next(size_t bytes)
std::vector< T > get_fixed(size_t size)
void append_tls_length_value(std::vector< uint8_t, Alloc > &buf, const T *vals, size_t vals_size, size_t tag_size)
Strong< std::vector< uint8_t >, struct Session_Ticket_ > Session_Ticket
holds a TLS 1.2 session ticket for stateless resumption