Botan  2.19.1
Crypto and TLS for C++11
Public Member Functions | List of all members
Botan::PBKDF2 Class Referencefinal

#include <pbkdf2.h>

Inheritance diagram for Botan::PBKDF2:
Botan::PasswordHash

Public Member Functions

void derive_key (uint8_t out[], size_t out_len, const char *password, size_t password_len, const uint8_t salt[], size_t salt_len) const override
 
size_t iterations () const override
 
virtual size_t memory_param () const
 
virtual size_t parallelism () const
 
 PBKDF2 (const MessageAuthenticationCode &prf, size_t iter)
 
 PBKDF2 (const MessageAuthenticationCode &prf, size_t olen, std::chrono::milliseconds msec)
 
std::string to_string () const override
 
virtual size_t total_memory_usage () const
 

Detailed Description

PBKDF2

Definition at line 39 of file pbkdf2.h.

Constructor & Destructor Documentation

Botan::PBKDF2::PBKDF2 ( const MessageAuthenticationCode prf,
size_t  iter 
)
inline

Definition at line 42 of file pbkdf2.h.

42  :
43  m_prf(prf.clone()),
44  m_iterations(iter)
45  {}
Botan::PBKDF2::PBKDF2 ( const MessageAuthenticationCode prf,
size_t  olen,
std::chrono::milliseconds  msec 
)

Definition at line 185 of file pbkdf2.cpp.

185  :
186  m_prf(prf.clone()),
187  m_iterations(tune_pbkdf2(*m_prf, olen, static_cast<uint32_t>(msec.count())))
188  {}

Member Function Documentation

void Botan::PBKDF2::derive_key ( uint8_t  out[],
size_t  out_len,
const char *  password,
size_t  password_len,
const uint8_t  salt[],
size_t  salt_len 
) const
overridevirtual

Derive a key from a password

Parameters
outbuffer to store the derived key, must be of out_len bytes
out_lenthe desired length of the key to produce
passwordthe password to derive the key from
password_lenthe length of password in bytes
salta randomly chosen salt
salt_lenlength of salt in bytes

This function is const, but is not thread safe. Different threads should either use unique objects, or serialize all access.

Implements Botan::PasswordHash.

Definition at line 195 of file pbkdf2.cpp.

References Botan::pbkdf2().

Referenced by Botan::PKCS5_PBKDF2::pbkdf(), and Botan::pbkdf2().

198  {
199  pbkdf2_set_key(*m_prf, password, password_len);
200  pbkdf2(*m_prf, out, out_len, salt, salt_len, m_iterations);
201  }
size_t salt_len
Definition: x509_obj.cpp:25
size_t pbkdf2(MessageAuthenticationCode &prf, uint8_t out[], size_t out_len, const std::string &password, const uint8_t salt[], size_t salt_len, size_t iterations, std::chrono::milliseconds msec)
Definition: pbkdf2.cpp:35
size_t Botan::PBKDF2::iterations ( ) const
inlineoverridevirtual

Most password hashes have some notion of iterations.

Implements Botan::PasswordHash.

Definition at line 49 of file pbkdf2.h.

Referenced by Botan::PKCS5_PBKDF2::pbkdf(), and Botan::pbkdf2().

49 { return m_iterations; }
virtual size_t Botan::PasswordHash::memory_param ( ) const
inlinevirtualinherited

Some password hashing algorithms have a parameter which controls how much memory is used. If not supported by some algorithm, returns 0.

Reimplemented in Botan::Argon2, Botan::Scrypt, and Botan::Bcrypt_PBKDF.

Definition at line 40 of file pwdhash.h.

40 { return 0; }
virtual size_t Botan::PasswordHash::parallelism ( ) const
inlinevirtualinherited

Some password hashing algorithms have a parallelism parameter. If the algorithm does not support this notion, then the function returns zero. This allows distinguishing between a password hash which just does not support parallel operation, vs one that does support parallel operation but which has been configured to use a single lane.

Reimplemented in Botan::Argon2, Botan::Scrypt, and Botan::Bcrypt_PBKDF.

Definition at line 50 of file pwdhash.h.

50 { return 0; }
std::string Botan::PBKDF2::to_string ( ) const
overridevirtual

Implements Botan::PasswordHash.

Definition at line 190 of file pbkdf2.cpp.

References Botan::ASN1::to_string().

191  {
192  return "PBKDF2(" + m_prf->name() + "," + std::to_string(m_iterations) + ")";
193  }
std::string to_string(const BER_Object &obj)
Definition: asn1_obj.cpp:213
virtual size_t Botan::PasswordHash::total_memory_usage ( ) const
inlinevirtualinherited

Returns an estimate of the total memory usage required to perform this key derivation.

If this algorithm uses a small and constant amount of memory, with no effort made towards being memory hard, this function returns 0.

Reimplemented in Botan::Argon2, Botan::Scrypt, and Botan::Bcrypt_PBKDF.

Definition at line 59 of file pwdhash.h.

59 { return 0; }

The documentation for this class was generated from the following files: