8 #include <botan/tls_session_key.h>
9 #include <botan/prf_ssl3.h>
10 #include <botan/prf_tls.h>
11 #include <botan/lookup.h>
82 salt += client_random;
83 salt += server_random;
85 master_sec = prf.
derive_key(48, pre_master, salt);
88 salt += server_random;
89 salt += client_random;
91 return prf.
derive_key(prf_gen, master_sec, salt);
98 const MemoryRegion<byte>& pre_master,
99 const MemoryRegion<byte>& client_random,
100 const MemoryRegion<byte>& server_random)
102 const byte MASTER_SECRET_MAGIC[] = {
103 0x6D, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x73, 0x65, 0x63, 0x72, 0x65,
105 const byte KEY_GEN_MAGIC[] = {
106 0x6B, 0x65, 0x79, 0x20, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x73, 0x69, 0x6F,
111 SecureVector<byte> salt;
112 salt += std::make_pair(MASTER_SECRET_MAGIC,
sizeof(MASTER_SECRET_MAGIC));
113 salt += client_random;
114 salt += server_random;
116 master_sec = prf.derive_key(48, pre_master, salt);
119 salt += std::make_pair(KEY_GEN_MAGIC,
sizeof(KEY_GEN_MAGIC));
120 salt += server_random;
121 salt += client_random;
123 return prf.derive_key(prf_gen, master_sec, salt);
140 size_t cipher_ivlen = 0;
144 const size_t prf_gen = 2 * (mac_keylen + cipher_keylen + cipher_ivlen);
147 ssl3_keygen(prf_gen, pre_master_secret, c_random, s_random) :
148 tls1_keygen(prf_gen, pre_master_secret, c_random, s_random);
153 key_data += mac_keylen;
156 key_data += mac_keylen;
159 key_data += cipher_keylen;
162 key_data += cipher_keylen;
165 key_data += cipher_ivlen;
size_t cipher_keylen() const
SymmetricKey server_mac_key() const
SymmetricKey client_cipher_key() const
SymmetricKey client_mac_key() const
std::invalid_argument Invalid_Argument
InitializationVector server_iv() const
std::string cipher_algo() const
SymmetricKey server_cipher_key() const
const byte * begin() const
SecureVector< byte > master_secret() const
size_t block_size_of(const std::string &name)
SecureVector< byte > derive_key(size_t key_len, const MemoryRegion< byte > &secret, const std::string &salt="") const
std::string mac_algo() const
bool have_block_cipher(const std::string &algo_spec)
size_t output_length_of(const std::string &name)
InitializationVector client_iv() const
OctetString InitializationVector