8#include <botan/pbkdf.h>
9#include <botan/exceptn.h>
10#include <botan/internal/scan_name.h>
12#if defined(BOTAN_HAS_PBKDF2)
13#include <botan/pbkdf2.h>
16#if defined(BOTAN_HAS_PGP_S2K)
17#include <botan/pgp_s2k.h>
23 std::string_view provider)
27#if defined(BOTAN_HAS_PBKDF2)
32 if(provider.empty() || provider ==
"base")
35 return std::make_unique<PKCS5_PBKDF2>(std::move(mac));
38 return std::make_unique<PKCS5_PBKDF2>(std::move(mac));
45#if defined(BOTAN_HAS_PGP_S2K)
49 return std::make_unique<OpenPGP_S2K>(std::move(hash));
62 std::string_view provider)
73 return probe_providers_of<PBKDF>(algo_spec);
77 std::string_view passphrase,
78 const uint8_t salt[],
size_t salt_len,
79 std::chrono::milliseconds msec,
80 size_t& iterations)
const
82 iterations =
pbkdf(out, out_len, passphrase, salt, salt_len, 0, msec);
86 std::string_view passphrase,
87 const uint8_t salt[],
size_t salt_len,
88 size_t iterations)
const
93 const size_t iterations_run =
pbkdf(out, out_len, passphrase,
94 salt, salt_len, iterations,
95 std::chrono::milliseconds(0));
100 std::string_view passphrase,
101 const uint8_t salt[],
size_t salt_len,
102 size_t iterations)
const
105 pbkdf_iterations(out.data(), out_len, passphrase, salt, salt_len, iterations);
110 std::string_view passphrase,
111 const uint8_t salt[],
size_t salt_len,
112 std::chrono::milliseconds msec,
113 size_t& iterations)
const
116 pbkdf_timed(out.data(), out_len, passphrase, salt, salt_len, msec, iterations);
#define BOTAN_UNUSED(...)
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
static std::unique_ptr< HashFunction > create(std::string_view algo_spec, std::string_view provider="")
static std::unique_ptr< MessageAuthenticationCode > create(std::string_view algo_spec, std::string_view provider="")
static std::vector< std::string > providers(std::string_view algo_spec)
static std::unique_ptr< PBKDF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
virtual size_t pbkdf(uint8_t out[], size_t out_len, std::string_view passphrase, const uint8_t salt[], size_t salt_len, size_t iterations, std::chrono::milliseconds msec) const =0
void pbkdf_iterations(uint8_t out[], size_t out_len, std::string_view passphrase, const uint8_t salt[], size_t salt_len, size_t iterations) const
void pbkdf_timed(uint8_t out[], size_t out_len, std::string_view passphrase, const uint8_t salt[], size_t salt_len, std::chrono::milliseconds msec, size_t &iterations) const
virtual std::string name() const =0
static std::unique_ptr< PBKDF > create(std::string_view algo_spec, std::string_view provider="")
std::string arg(size_t i) const
const std::string algo_name() const
std::vector< T, secure_allocator< T > > secure_vector