8 #include <botan/internal/tls_messages.h>     9 #include <botan/internal/tls_reader.h>    10 #include <botan/pubkey.h>    12 #include <botan/rsa.h>    13 #include <botan/rng.h>    14 #include <botan/loadstor.h>    29    include_length = 
true;
    31    if(
const DH_PublicKey* dh_pub = dynamic_cast<const DH_PublicKey*>(pub_key))
    37       pre_master = ka.derive_key(0, dh_pub->public_value()).bits_of();
    39       key_material = priv_key.public_value();
    41    else if(
const RSA_PublicKey* rsa_pub = dynamic_cast<const RSA_PublicKey*>(pub_key))
    44       pre_master[0] = (pref_version >> 8) & 0xFF;
    45       pre_master[1] = (pref_version     ) & 0xFF;
    49       key_material = encryptor.
encrypt(pre_master, rng);
    51       if(using_version == 
SSL_V3)
    52          include_length = 
false;
    67    include_length = 
true;
    70       include_length = 
false;
    72    deserialize(contents);
   113    if(
const DH_PrivateKey* dh_priv = dynamic_cast<const DH_PrivateKey*>(priv_key))
   128          pre_master = rng.
random_vec(dh_priv->public_value().size());
   133    else if(
const RSA_PrivateKey* rsa_priv = dynamic_cast<const RSA_PrivateKey*>(priv_key))
   138          pre_master = decryptor.
decrypt(key_material);
   140          if(pre_master.
size() != 48 ||
   141             make_u16bit(pre_master[0], pre_master[1]) != version)
   147          pre_master[0] = (version >> 8) & 0xFF;
   148          pre_master[1] = (version     ) & 0xFF;
 void append_tls_length_value(MemoryRegion< byte > &buf, const T *vals, size_t vals_size, size_t tag_size)
void send(Record_Writer &, HandshakeHash &) const
SecureVector< byte > pre_master_secret() const
SecureVector< byte > random_vec(size_t bytes)
SecureVector< byte > encrypt(const byte in[], size_t length, RandomNumberGenerator &rng) const
TLS_Ciphersuite_Algos kex_type() const
std::invalid_argument Invalid_Argument
SecureVector< byte > decrypt(const byte in[], size_t length) const
u16bit make_u16bit(byte i0, byte i1)
Client_Key_Exchange(RandomNumberGenerator &rng, Record_Writer &output, HandshakeHash &hash, const Public_Key *my_key, Version_Code using_version, Version_Code pref_version)
SecureVector< byte > bits_of() const
SecureVector< T > get_range(size_t len_bytes, size_t min_elems, size_t max_elems)
SymmetricKey derive_key(size_t key_len, const byte in[], size_t in_len, const byte params[], size_t params_len) const