8 #include <botan/pbkdf.h>
9 #include <botan/scan_name.h>
11 #if defined(BOTAN_HAS_PBKDF1)
12 #include <botan/pbkdf1.h>
15 #if defined(BOTAN_HAS_PBKDF2)
16 #include <botan/pbkdf2.h>
22 const std::string& provider)
26 #if defined(BOTAN_HAS_PBKDF2)
31 if(provider.empty() || provider ==
"base")
34 return std::unique_ptr<PBKDF>(
new PKCS5_PBKDF2(mac.release()));
37 return std::unique_ptr<PBKDF>(
new PKCS5_PBKDF2(mac.release()));
44 #if defined(BOTAN_HAS_PBKDF1)
61 return probe_providers_of<PBKDF>(algo_spec, {
"base",
"openssl" });
65 const std::string& passphrase,
66 const uint8_t salt[],
size_t salt_len,
67 std::chrono::milliseconds msec,
68 size_t& iterations)
const
70 iterations =
pbkdf(out, out_len, passphrase, salt, salt_len, 0, msec);
74 const std::string& passphrase,
75 const uint8_t salt[],
size_t salt_len,
76 size_t iterations)
const
81 const size_t iterations_run =
pbkdf(out, out_len, passphrase,
82 salt, salt_len, iterations,
83 std::chrono::milliseconds(0));
88 const std::string& passphrase,
89 const uint8_t salt[],
size_t salt_len,
90 size_t iterations)
const
93 pbkdf_iterations(out.data(), out_len, passphrase, salt, salt_len, iterations);
98 const std::string& passphrase,
99 const uint8_t salt[],
size_t salt_len,
100 std::chrono::milliseconds msec,
101 size_t& iterations)
const
104 pbkdf_timed(out.data(), out_len, passphrase, salt, salt_len, msec, iterations);
std::string arg(size_t i) const
static std::unique_ptr< PBKDF > create(const std::string &algo_spec, const std::string &provider="")
static std::unique_ptr< MessageAuthenticationCode > create(const std::string &algo_spec, const std::string &provider="")
static std::vector< std::string > providers(const std::string &algo_spec)
virtual std::string name() const =0
void pbkdf_timed(uint8_t out[], size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, std::chrono::milliseconds msec, size_t &iterations) const
std::vector< T, secure_allocator< T >> secure_vector
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
virtual size_t pbkdf(uint8_t out[], size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, size_t iterations, std::chrono::milliseconds msec) const =0
static std::unique_ptr< HashFunction > create(const std::string &algo_spec, const std::string &provider="")
const std::string & algo_name() const
void pbkdf_iterations(uint8_t out[], size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, size_t iterations) const