8#include <botan/internal/prf_tls.h>
9#include <botan/exceptn.h>
18void P_hash(uint8_t out[],
size_t out_len,
19 MessageAuthenticationCode& mac,
20 const uint8_t secret[],
size_t secret_len,
21 const uint8_t salt[],
size_t salt_len)
25 mac.set_key(secret, secret_len);
27 catch(Invalid_Key_Length&)
31 " bytes is too long for the PRF");
34 secure_vector<uint8_t> A(salt, salt +
salt_len);
35 secure_vector<uint8_t> h;
39 while(offset != out_len)
47 const size_t writing = std::min(h.size(), out_len - offset);
48 xor_buf(&out[offset], h.data(), writing);
56 const uint8_t secret[],
size_t secret_len,
57 const uint8_t salt[],
size_t salt_len,
58 const uint8_t label[],
size_t label_len)
const
63 msg += std::make_pair(label, label_len);
64 msg += std::make_pair(salt,
salt_len);
66 P_hash(key, key_len, *m_mac, secret, secret_len, msg.data(), msg.size());
void kdf(uint8_t key[], size_t key_len, const uint8_t secret[], size_t secret_len, const uint8_t salt[], size_t salt_len, const uint8_t label[], size_t label_len) const override
std::string to_string(const BER_Object &obj)
void xor_buf(uint8_t out[], const uint8_t in[], size_t length)
std::vector< T, secure_allocator< T > > secure_vector