diff options
Diffstat (limited to 'src/lib/pbkdf/pbkdf1')
-rw-r--r-- | src/lib/pbkdf/pbkdf1/pbkdf1.cpp | 30 | ||||
-rw-r--r-- | src/lib/pbkdf/pbkdf1/pbkdf1.h | 21 |
2 files changed, 23 insertions, 28 deletions
diff --git a/src/lib/pbkdf/pbkdf1/pbkdf1.cpp b/src/lib/pbkdf/pbkdf1/pbkdf1.cpp index e5dda579f..8134b39c4 100644 --- a/src/lib/pbkdf/pbkdf1/pbkdf1.cpp +++ b/src/lib/pbkdf/pbkdf1/pbkdf1.cpp @@ -13,22 +13,18 @@ namespace Botan { BOTAN_REGISTER_PBKDF_1HASH(PKCS5_PBKDF1, "PBKDF1") -/* -* Return a PKCS#5 PBKDF1 derived key -*/ -std::pair<size_t, OctetString> -PKCS5_PBKDF1::key_derivation(size_t key_len, - const std::string& passphrase, - const byte salt[], size_t salt_len, - size_t iterations, - std::chrono::milliseconds msec) const +size_t PKCS5_PBKDF1::pbkdf(byte output_buf[], size_t output_len, + const std::string& passphrase, + const byte salt[], size_t salt_len, + size_t iterations, + std::chrono::milliseconds msec) const { - if(key_len > hash->output_length()) + if(output_len > m_hash->output_length()) throw Invalid_Argument("PKCS5_PBKDF1: Requested output length too long"); - hash->update(passphrase); - hash->update(salt, salt_len); - secure_vector<byte> key = hash->final(); + m_hash->update(passphrase); + m_hash->update(salt, salt_len); + secure_vector<byte> key = m_hash->final(); const auto start = std::chrono::high_resolution_clock::now(); size_t iterations_performed = 1; @@ -48,14 +44,14 @@ PKCS5_PBKDF1::key_derivation(size_t key_len, else if(iterations_performed == iterations) break; - hash->update(key); - hash->final(&key[0]); + m_hash->update(key); + m_hash->final(&key[0]); ++iterations_performed; } - return std::make_pair(iterations_performed, - OctetString(&key[0], std::min(key_len, key.size()))); + copy_mem(output_buf, &key[0], output_len); + return iterations_performed; } } diff --git a/src/lib/pbkdf/pbkdf1/pbkdf1.h b/src/lib/pbkdf/pbkdf1/pbkdf1.h index 4c2f3888c..c93dbe503 100644 --- a/src/lib/pbkdf/pbkdf1/pbkdf1.h +++ b/src/lib/pbkdf/pbkdf1/pbkdf1.h @@ -23,28 +23,27 @@ class BOTAN_DLL PKCS5_PBKDF1 : public PBKDF public: /** * Create a PKCS #5 instance using the specified hash function. - * @param hash_in pointer to a hash function object to use + * @param hash pointer to a hash function object to use */ - PKCS5_PBKDF1(HashFunction* hash_in) : hash(hash_in) {} + PKCS5_PBKDF1(HashFunction* hash) : m_hash(hash) {} std::string name() const { - return "PBKDF1(" + hash->name() + ")"; + return "PBKDF1(" + m_hash->name() + ")"; } PBKDF* clone() const { - return new PKCS5_PBKDF1(hash->clone()); + return new PKCS5_PBKDF1(m_hash->clone()); } - std::pair<size_t, OctetString> - key_derivation(size_t output_len, - const std::string& passphrase, - const byte salt[], size_t salt_len, - size_t iterations, - std::chrono::milliseconds msec) const override; + size_t pbkdf(byte output_buf[], size_t output_len, + const std::string& passphrase, + const byte salt[], size_t salt_len, + size_t iterations, + std::chrono::milliseconds msec) const override; private: - std::unique_ptr<HashFunction> hash; + std::unique_ptr<HashFunction> m_hash; }; } |