Botan
1.11.15
|
#include <tls_reader.h>
Public Member Functions | |
void | assert_done () const |
void | discard_next (size_t bytes) |
byte | get_byte () |
template<typename T , typename Container > | |
Container | get_elem (size_t num_elems) |
template<typename T > | |
std::vector< T > | get_fixed (size_t size) |
template<typename T > | |
std::vector< T > | get_range (size_t len_bytes, size_t min_elems, size_t max_elems) |
template<typename T > | |
std::vector< T > | get_range_vector (size_t len_bytes, size_t min_elems, size_t max_elems) |
std::vector< byte > | get_remaining () |
std::string | get_string (size_t len_bytes, size_t min_bytes, size_t max_bytes) |
u16bit | get_u16bit () |
u16bit | get_u32bit () |
bool | has_remaining () const |
size_t | remaining_bytes () const |
TLS_Data_Reader (const char *type, const std::vector< byte > &buf_in) |
Helper class for decoding TLS protocol messages
Definition at line 25 of file tls_reader.h.
Botan::TLS::TLS_Data_Reader::TLS_Data_Reader | ( | const char * | type, |
const std::vector< byte > & | buf_in | ||
) | [inline] |
Definition at line 28 of file tls_reader.h.
: m_typename(type), m_buf(buf_in), m_offset(0) {}
void Botan::TLS::TLS_Data_Reader::assert_done | ( | ) | const [inline] |
Definition at line 31 of file tls_reader.h.
References has_remaining().
Referenced by Botan::TLS::Server_Key_Exchange::Server_Key_Exchange().
{ if(has_remaining()) throw decode_error("Extra bytes at end of message"); }
void Botan::TLS::TLS_Data_Reader::discard_next | ( | size_t | bytes | ) | [inline] |
Definition at line 46 of file tls_reader.h.
Referenced by Botan::TLS::Extensions::deserialize(), and Botan::TLS::Server_Name_Indicator::Server_Name_Indicator().
{ assert_at_least(bytes); m_offset += bytes; }
byte Botan::TLS::TLS_Data_Reader::get_byte | ( | ) | [inline] |
Definition at line 69 of file tls_reader.h.
Referenced by Botan::TLS::Certificate_Verify::Certificate_Verify(), Botan::TLS::Client_Hello::Client_Hello(), Botan::TLS::Heartbeat_Message::Heartbeat_Message(), Botan::TLS::Heartbeat_Support_Indicator::Heartbeat_Support_Indicator(), Botan::TLS::Maximum_Fragment_Length::Maximum_Fragment_Length(), Botan::TLS::Server_Hello::Server_Hello(), Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), Botan::TLS::Server_Name_Indicator::Server_Name_Indicator(), and Botan::TLS::Signature_Algorithms::Signature_Algorithms().
{ assert_at_least(1); byte result = m_buf[m_offset]; m_offset += 1; return result; }
Container Botan::TLS::TLS_Data_Reader::get_elem | ( | size_t | num_elems | ) | [inline] |
Definition at line 78 of file tls_reader.h.
Referenced by Botan::TLS::Session_Ticket::Session_Ticket().
{ assert_at_least(num_elems * sizeof(T)); Container result(num_elems); for(size_t i = 0; i != num_elems; ++i) result[i] = load_be<T>(&m_buf[m_offset], i); m_offset += num_elems * sizeof(T); return result; }
std::vector<T> Botan::TLS::TLS_Data_Reader::get_fixed | ( | size_t | size | ) | [inline] |
Definition at line 125 of file tls_reader.h.
Referenced by Botan::TLS::Client_Hello::Client_Hello(), and Botan::TLS::Server_Hello::Server_Hello().
{
return get_elem<T, std::vector<T> >(size);
}
std::vector<T> Botan::TLS::TLS_Data_Reader::get_range | ( | size_t | len_bytes, |
size_t | min_elems, | ||
size_t | max_elems | ||
) | [inline] |
Definition at line 93 of file tls_reader.h.
Referenced by Botan::TLS::Certificate_Verify::Certificate_Verify(), Botan::TLS::Client_Hello::Client_Hello(), Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::TLS::Heartbeat_Message::Heartbeat_Message(), Botan::TLS::New_Session_Ticket::New_Session_Ticket(), Botan::TLS::Renegotiation_Extension::Renegotiation_Extension(), Botan::TLS::Server_Hello::Server_Hello(), Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), and Botan::TLS::SRTP_Protection_Profiles::SRTP_Protection_Profiles().
{ const size_t num_elems = get_num_elems(len_bytes, sizeof(T), min_elems, max_elems); return get_elem<T, std::vector<T> >(num_elems); }
std::vector<T> Botan::TLS::TLS_Data_Reader::get_range_vector | ( | size_t | len_bytes, |
size_t | min_elems, | ||
size_t | max_elems | ||
) | [inline] |
Definition at line 104 of file tls_reader.h.
Referenced by Botan::TLS::Client_Hello::Client_Hello(), and Botan::TLS::Next_Protocol::Next_Protocol().
{ const size_t num_elems = get_num_elems(len_bytes, sizeof(T), min_elems, max_elems); return get_elem<T, std::vector<T> >(num_elems); }
std::vector<byte> Botan::TLS::TLS_Data_Reader::get_remaining | ( | ) | [inline] |
Definition at line 41 of file tls_reader.h.
Referenced by Botan::TLS::Heartbeat_Message::Heartbeat_Message().
{
return std::vector<byte>(m_buf.begin() + m_offset, m_buf.end());
}
std::string Botan::TLS::TLS_Data_Reader::get_string | ( | size_t | len_bytes, |
size_t | min_bytes, | ||
size_t | max_bytes | ||
) | [inline] |
Definition at line 114 of file tls_reader.h.
Referenced by Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::TLS::Next_Protocol::Next_Protocol(), Botan::TLS::Next_Protocol_Notification::Next_Protocol_Notification(), Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), Botan::TLS::Server_Name_Indicator::Server_Name_Indicator(), and Botan::TLS::SRP_Identifier::SRP_Identifier().
{
std::vector<byte> v =
get_range_vector<byte>(len_bytes, min_bytes, max_bytes);
return std::string(reinterpret_cast<char*>(&v[0]), v.size());
}
u16bit Botan::TLS::TLS_Data_Reader::get_u16bit | ( | ) | [inline] |
Definition at line 61 of file tls_reader.h.
References Botan::make_u16bit().
Referenced by Botan::TLS::Extensions::deserialize(), Botan::TLS::Server_Hello::Server_Hello(), Botan::TLS::Server_Key_Exchange::Server_Key_Exchange(), Botan::TLS::Server_Name_Indicator::Server_Name_Indicator(), Botan::TLS::Signature_Algorithms::Signature_Algorithms(), and Botan::TLS::Supported_Elliptic_Curves::Supported_Elliptic_Curves().
{ assert_at_least(2); u16bit result = make_u16bit(m_buf[m_offset], m_buf[m_offset+1]); m_offset += 2; return result; }
u16bit Botan::TLS::TLS_Data_Reader::get_u32bit | ( | ) | [inline] |
Definition at line 52 of file tls_reader.h.
References Botan::make_u32bit().
Referenced by Botan::TLS::New_Session_Ticket::New_Session_Ticket().
{ assert_at_least(4); u16bit result = make_u32bit(m_buf[m_offset ], m_buf[m_offset+1], m_buf[m_offset+2], m_buf[m_offset+3]); m_offset += 4; return result; }
bool Botan::TLS::TLS_Data_Reader::has_remaining | ( | ) | const [inline] |
Definition at line 39 of file tls_reader.h.
References remaining_bytes().
Referenced by assert_done(), and Botan::TLS::Extensions::deserialize().
{ return (remaining_bytes() > 0); }
size_t Botan::TLS::TLS_Data_Reader::remaining_bytes | ( | ) | const [inline] |
Definition at line 37 of file tls_reader.h.
Referenced by Botan::TLS::Extensions::deserialize(), and has_remaining().
{ return m_buf.size() - m_offset; }