diff options
Diffstat (limited to 'src/lib/kdf/prf_tls/prf_tls.cpp')
-rw-r--r-- | src/lib/kdf/prf_tls/prf_tls.cpp | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/src/lib/kdf/prf_tls/prf_tls.cpp b/src/lib/kdf/prf_tls/prf_tls.cpp index 006b418c9..6437932a8 100644 --- a/src/lib/kdf/prf_tls/prf_tls.cpp +++ b/src/lib/kdf/prf_tls/prf_tls.cpp @@ -19,13 +19,13 @@ namespace { * TLS PRF P_hash function */ void P_hash(secure_vector<byte>& output, - MessageAuthenticationCode* mac, + MessageAuthenticationCode& mac, const byte secret[], size_t secret_len, const byte seed[], size_t seed_len) { try { - mac->set_key(secret, secret_len); + mac.set_key(secret, secret_len); } catch(Invalid_Key_Length) { @@ -41,13 +41,13 @@ void P_hash(secure_vector<byte>& output, while(offset != output.size()) { const size_t this_block_len = - std::min<size_t>(mac->output_length(), output.size() - offset); + std::min<size_t>(mac.output_length(), output.size() - offset); - A = mac->process(A); + A = mac.process(A); - mac->update(A); - mac->update(seed, seed_len); - secure_vector<byte> block = mac->final(); + mac.update(A); + mac.update(seed, seed_len); + secure_vector<byte> block = mac.final(); xor_buf(&output[offset], &block[0], this_block_len); offset += this_block_len; @@ -61,14 +61,8 @@ void P_hash(secure_vector<byte>& output, */ TLS_PRF::TLS_PRF() { - hmac_md5 = new HMAC(new MD5); - hmac_sha1 = new HMAC(new SHA_160); - } - -TLS_PRF::~TLS_PRF() - { - delete hmac_md5; - delete hmac_sha1; + hmac_md5.reset(new HMAC(new MD5)); + hmac_sha1.reset(new HMAC(new SHA_160)); } /* @@ -85,8 +79,8 @@ secure_vector<byte> TLS_PRF::derive(size_t key_len, const byte* S1 = secret; const byte* S2 = secret + (secret_len - S2_len); - P_hash(output, hmac_md5, S1, S1_len, seed, seed_len); - P_hash(output, hmac_sha1, S2, S2_len, seed, seed_len); + P_hash(output, *hmac_md5, S1, S1_len, seed, seed_len); + P_hash(output, *hmac_sha1, S2, S2_len, seed, seed_len); return output; } @@ -98,18 +92,13 @@ TLS_12_PRF::TLS_12_PRF(MessageAuthenticationCode* mac) : hmac(mac) { } -TLS_12_PRF::~TLS_12_PRF() - { - delete hmac; - } - secure_vector<byte> TLS_12_PRF::derive(size_t key_len, const byte secret[], size_t secret_len, const byte seed[], size_t seed_len) const { secure_vector<byte> output(key_len); - P_hash(output, hmac, secret, secret_len, seed, seed_len); + P_hash(output, *hmac, secret, secret_len, seed, seed_len); return output; } |