8 #include <botan/pbkdf.h>
9 #include <botan/exceptn.h>
10 #include <botan/scan_name.h>
12 #if defined(BOTAN_HAS_PBKDF1)
13 #include <botan/pbkdf1.h>
16 #if defined(BOTAN_HAS_PBKDF2)
17 #include <botan/pbkdf2.h>
20 #if defined(BOTAN_HAS_PGP_S2K)
21 #include <botan/pgp_s2k.h>
27 const std::string& provider)
31 #if defined(BOTAN_HAS_PBKDF2)
36 if(provider.empty() || provider ==
"base")
39 return std::unique_ptr<PBKDF>(
new PKCS5_PBKDF2(mac.release()));
42 return std::unique_ptr<PBKDF>(
new PKCS5_PBKDF2(mac.release()));
49 #if defined(BOTAN_HAS_PBKDF1)
58 #if defined(BOTAN_HAS_PGP_S2K)
73 std::unique_ptr<PBKDF>
75 const std::string& provider)
86 return probe_providers_of<PBKDF>(algo_spec, {
"base",
"openssl" });
90 const std::string& passphrase,
91 const uint8_t salt[],
size_t salt_len,
92 std::chrono::milliseconds msec,
93 size_t& iterations)
const
95 iterations =
pbkdf(out, out_len, passphrase, salt, salt_len, 0, msec);
99 const std::string& passphrase,
100 const uint8_t salt[],
size_t salt_len,
101 size_t iterations)
const
106 const size_t iterations_run =
pbkdf(out, out_len, passphrase,
107 salt, salt_len, iterations,
108 std::chrono::milliseconds(0));
113 const std::string& passphrase,
114 const uint8_t salt[],
size_t salt_len,
115 size_t iterations)
const
123 const std::string& passphrase,
124 const uint8_t salt[],
size_t salt_len,
125 std::chrono::milliseconds msec,
126 size_t& iterations)
const
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="")
static std::unique_ptr< PBKDF > create_or_throw(const std::string &algo_spec, const std::string &provider="")
#define BOTAN_UNUSED(...)
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