8 #include <botan/internal/tls_messages.h>     9 #include <botan/internal/tls_reader.h>    21    const size_t buf_size = buf.
size();
    25    for(
size_t i = 1; i != 4; ++i)
    26      send_buf[i] = get_byte<u32bit>(i, buf_size);
    86    buf.
push_back(static_cast<byte>(c_version >> 8));
    87    buf.
push_back(static_cast<byte>(c_version     ));
    99    if(buf.
size() < 12 || buf[0] != 1)
   102    const size_t cipher_spec_len = 
make_u16bit(buf[3], buf[4]);
   103    const size_t sess_id_len = 
make_u16bit(buf[5], buf[6]);
   104    const size_t challenge_len = 
make_u16bit(buf[7], buf[8]);
   106    const size_t expected_size =
   107       (9 + sess_id_len + cipher_spec_len + challenge_len);
   109    if(buf.
size() != expected_size)
   112    if(sess_id_len != 0 || cipher_spec_len % 3 != 0 ||
   113       (challenge_len < 16 || challenge_len > 32))
   118    for(
size_t i = 9; i != 9 + cipher_spec_len; i += 3)
   128    c_random.resize(challenge_len);
   129    copy_mem(&c_random[0], &buf[9+cipher_spec_len+sess_id_len], challenge_len);
   177                   std::vector<byte> name =
   180                   requested_hostname.assign(
   181                     reinterpret_cast<const char*>(&name[0]),
   184                   name_bytes -= (2 + name.size());
   197             requested_srp_id.assign(
   198                reinterpret_cast<char*>(&name[0]),
   214    for(
size_t i = 0; i != suites.size(); ++i)
   215       if(suites[i] == ciphersuite)
   226                            const std::vector<X509_Certificate>& certs,
   231    bool have_rsa = 
false, have_dsa = 
false;
   233    for(
size_t i = 0; i != certs.size(); ++i)
   235       Public_Key* key = certs[i].subject_public_key();
   247                           "Can't agree on a ciphersuite with client");
   264    buf.
push_back(static_cast<byte>(s_version >> 8));
   265    buf.
push_back(static_cast<byte>(s_version     ));
   293                           "Server_Hello: Unsupported server version");
   328       throw Decoding_Error(
"Server_Hello_Done: Must be empty, and is not");
 void append_tls_length_value(MemoryRegion< byte > &buf, const T *vals, size_t vals_size, size_t tag_size)
std::vector< byte > compression_algos() const
void send(Record_Writer &, HandshakeHash &) const
SecureVector< byte > random_vec(size_t bytes)
virtual std::vector< byte > compression() const
bool has_remaining() const
void discard_next(size_t bytes)
virtual std::string algo_name() const =0
byte get_byte(size_t byte_num, T input)
virtual Version_Code pref_version() const
virtual Handshake_Type type() const =0
std::vector< u16bit > ciphersuites() const
std::vector< T > get_range_vector(size_t len_bytes, size_t min_elems, size_t max_elems)
size_t remaining_bytes() const
bool offered_suite(u16bit) const
std::vector< u16bit > ciphersuites() const
Server_Hello(RandomNumberGenerator &rng, Record_Writer &, const TLS_Policy &, const std::vector< X509_Certificate > &, const Client_Hello &, Version_Code, HandshakeHash &)
Hello_Request(Record_Writer &)
void update(const byte in[], size_t length)
void copy_mem(T *out, const T *in, size_t n)
SecureVector< T > get_fixed(size_t size)
virtual u16bit choose_suite(const std::vector< u16bit > &client_suites, bool rsa_ok, bool dsa_ok) const
Server_Hello_Done(Record_Writer &, HandshakeHash &)
u16bit make_u16bit(byte i0, byte i1)
virtual byte choose_compression(const std::vector< byte > &client) const
SecureVector< T > get_range(size_t len_bytes, size_t min_elems, size_t max_elems)
Client_Hello(RandomNumberGenerator &rng, Record_Writer &, const TLS_Policy &, HandshakeHash &)
void send(byte type, const byte input[], size_t length)