diff options
Diffstat (limited to 'src/lib/kdf')
-rw-r--r-- | src/lib/kdf/kdf.h | 14 | ||||
-rw-r--r-- | src/lib/kdf/kdf1/kdf1.h | 6 | ||||
-rw-r--r-- | src/lib/kdf/kdf2/kdf2.h | 5 | ||||
-rw-r--r-- | src/lib/kdf/mgf1/info.txt | 5 | ||||
-rw-r--r-- | src/lib/kdf/mgf1/mgf1.cpp | 56 | ||||
-rw-r--r-- | src/lib/kdf/mgf1/mgf1.h | 36 | ||||
-rw-r--r-- | src/lib/kdf/prf_ssl3/prf_ssl3.h | 1 | ||||
-rw-r--r-- | src/lib/kdf/prf_tls/prf_tls.cpp | 35 | ||||
-rw-r--r-- | src/lib/kdf/prf_tls/prf_tls.h | 10 |
9 files changed, 22 insertions, 146 deletions
diff --git a/src/lib/kdf/kdf.h b/src/lib/kdf/kdf.h index 39e7253f9..0e8f77681 100644 --- a/src/lib/kdf/kdf.h +++ b/src/lib/kdf/kdf.h @@ -1,5 +1,5 @@ /* -* KDF/MGF +* Key Derivation Function interfaces * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license @@ -114,18 +114,6 @@ class BOTAN_DLL KDF }; /** -* Mask Generation Function -*/ -class BOTAN_DLL MGF - { - public: - virtual void mask(const byte in[], size_t in_len, - byte out[], size_t out_len) const = 0; - - virtual ~MGF() {} - }; - -/** * Factory method for KDF (key derivation function) * @param algo_spec the name of the KDF to create * @return pointer to newly allocated object of that type diff --git a/src/lib/kdf/kdf1/kdf1.h b/src/lib/kdf/kdf1/kdf1.h index 6a14d2995..539aeaa6e 100644 --- a/src/lib/kdf/kdf1/kdf1.h +++ b/src/lib/kdf/kdf1/kdf1.h @@ -10,6 +10,7 @@ #include <botan/kdf.h> #include <botan/hash.h> +#include <memory> namespace Botan { @@ -27,11 +28,8 @@ class BOTAN_DLL KDF1 : public KDF KDF* clone() const { return new KDF1(hash->clone()); } KDF1(HashFunction* h) : hash(h) {} - KDF1(const KDF1& other) : KDF(), hash(other.hash->clone()) {} - - ~KDF1() { delete hash; } private: - HashFunction* hash; + std::unique_ptr<HashFunction> hash; }; } diff --git a/src/lib/kdf/kdf2/kdf2.h b/src/lib/kdf/kdf2/kdf2.h index e33939df9..60bbf5db1 100644 --- a/src/lib/kdf/kdf2/kdf2.h +++ b/src/lib/kdf/kdf2/kdf2.h @@ -10,6 +10,7 @@ #include <botan/kdf.h> #include <botan/hash.h> +#include <memory> namespace Botan { @@ -26,10 +27,8 @@ class BOTAN_DLL KDF2 : public KDF KDF* clone() const { return new KDF2(hash->clone()); } KDF2(HashFunction* h) : hash(h) {} - KDF2(const KDF2& other) : KDF(), hash(other.hash->clone()) {} - ~KDF2() { delete hash; } private: - HashFunction* hash; + std::unique_ptr<HashFunction> hash; }; } diff --git a/src/lib/kdf/mgf1/info.txt b/src/lib/kdf/mgf1/info.txt deleted file mode 100644 index c6254b8a0..000000000 --- a/src/lib/kdf/mgf1/info.txt +++ /dev/null @@ -1,5 +0,0 @@ -define MGF1 20131128 - -<requires> -hash -</requires> diff --git a/src/lib/kdf/mgf1/mgf1.cpp b/src/lib/kdf/mgf1/mgf1.cpp deleted file mode 100644 index e0433a02f..000000000 --- a/src/lib/kdf/mgf1/mgf1.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* -* MGF1 -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/mgf1.h> -#include <botan/exceptn.h> -#include <botan/internal/xor_buf.h> -#include <algorithm> -#include <memory> - -namespace Botan { - -/* -* MGF1 Mask Generation Function -*/ -void MGF1::mask(const byte in[], size_t in_len, byte out[], - size_t out_len) const - { - u32bit counter = 0; - - while(out_len) - { - hash->update(in, in_len); - hash->update_be(counter); - secure_vector<byte> buffer = hash->final(); - - size_t xored = std::min<size_t>(buffer.size(), out_len); - xor_buf(out, &buffer[0], xored); - out += xored; - out_len -= xored; - - ++counter; - } - } - -/* -* MGF1 Constructor -*/ -MGF1::MGF1(HashFunction* h) : hash(h) - { - if(!hash) - throw Invalid_Argument("MGF1 given null hash object"); - } - -/* -* MGF1 Destructor -*/ -MGF1::~MGF1() - { - delete hash; - } - -} diff --git a/src/lib/kdf/mgf1/mgf1.h b/src/lib/kdf/mgf1/mgf1.h deleted file mode 100644 index 95a2a2bc5..000000000 --- a/src/lib/kdf/mgf1/mgf1.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -* MGF1 -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_MGF1_H__ -#define BOTAN_MGF1_H__ - -#include <botan/kdf.h> -#include <botan/hash.h> - -namespace Botan { - -/** -* MGF1 from PKCS #1 v2.0 -*/ -class BOTAN_DLL MGF1 : public MGF - { - public: - void mask(const byte[], size_t, byte[], size_t) const; - - /** - MGF1 constructor: takes ownership of hash - */ - MGF1(HashFunction* hash); - - ~MGF1(); - private: - HashFunction* hash; - }; - -} - -#endif diff --git a/src/lib/kdf/prf_ssl3/prf_ssl3.h b/src/lib/kdf/prf_ssl3/prf_ssl3.h index bae8badb8..9b9ecb578 100644 --- a/src/lib/kdf/prf_ssl3/prf_ssl3.h +++ b/src/lib/kdf/prf_ssl3/prf_ssl3.h @@ -9,6 +9,7 @@ #define BOTAN_SSLV3_PRF_H__ #include <botan/kdf.h> +#include <memory> namespace Botan { 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; } diff --git a/src/lib/kdf/prf_tls/prf_tls.h b/src/lib/kdf/prf_tls/prf_tls.h index fce11eae0..654b7abdb 100644 --- a/src/lib/kdf/prf_tls/prf_tls.h +++ b/src/lib/kdf/prf_tls/prf_tls.h @@ -10,7 +10,7 @@ #include <botan/kdf.h> #include <botan/mac.h> -#include <botan/hash.h> +#include <memory> namespace Botan { @@ -28,10 +28,9 @@ class BOTAN_DLL TLS_PRF : public KDF KDF* clone() const { return new TLS_PRF; } TLS_PRF(); - ~TLS_PRF(); private: - MessageAuthenticationCode* hmac_md5; - MessageAuthenticationCode* hmac_sha1; + std::unique_ptr<MessageAuthenticationCode> hmac_md5; + std::unique_ptr<MessageAuthenticationCode> hmac_sha1; }; /** @@ -48,9 +47,8 @@ class BOTAN_DLL TLS_12_PRF : public KDF KDF* clone() const { return new TLS_12_PRF(hmac->clone()); } TLS_12_PRF(MessageAuthenticationCode* hmac); - ~TLS_12_PRF(); private: - MessageAuthenticationCode* hmac; + std::unique_ptr<MessageAuthenticationCode> hmac; }; } |