11#include <botan/symkey.h>
40 static std::unique_ptr<PBKDF> create(std::string_view algo_spec, std::string_view provider =
"");
47 static std::unique_ptr<PBKDF> create_or_throw(std::string_view algo_spec, std::string_view provider =
"");
52 static std::vector<std::string> providers(std::string_view algo_spec);
62 PBKDF*
clone()
const {
return this->new_object().release(); }
67 virtual std::string
name()
const = 0;
86 virtual size_t pbkdf(uint8_t out[],
88 std::string_view passphrase,
92 std::chrono::milliseconds msec)
const = 0;
104 void pbkdf_iterations(uint8_t out[],
106 std::string_view passphrase,
107 const uint8_t salt[],
109 size_t iterations)
const;
123 void pbkdf_timed(uint8_t out[],
125 std::string_view passphrase,
126 const uint8_t salt[],
128 std::chrono::milliseconds msec,
129 size_t& iterations)
const;
142 size_t out_len, std::string_view passphrase,
const uint8_t salt[],
size_t salt_len,
size_t iterations)
const;
157 std::string_view passphrase,
158 const uint8_t salt[],
160 std::chrono::milliseconds msec,
161 size_t& iterations)
const;
174 size_t out_len, std::string_view passphrase,
const uint8_t salt[],
size_t salt_len,
size_t iterations)
const {
175 return OctetString(pbkdf_iterations(out_len, passphrase, salt, salt_len, iterations));
185 template <
typename Alloc>
187 std::string_view passphrase,
188 const std::vector<uint8_t, Alloc>& salt,
189 size_t iterations)
const {
190 return OctetString(pbkdf_iterations(out_len, passphrase, salt.data(), salt.size(), iterations));
203 std::string_view passphrase,
204 const uint8_t salt[],
206 std::chrono::milliseconds msec,
207 size_t& iterations)
const {
208 return OctetString(pbkdf_timed(out_len, passphrase, salt, salt_len, msec, iterations));
219 template <
typename Alloc>
221 std::string_view passphrase,
222 const std::vector<uint8_t, Alloc>& salt,
223 std::chrono::milliseconds msec,
224 size_t& iterations)
const {
225 return OctetString(pbkdf_timed(out_len, passphrase, salt.data(), salt.size(), msec, iterations));
242inline
PBKDF* get_pbkdf(std::string_view algo_spec, std::string_view provider = "") {
243 return PBKDF::create_or_throw(algo_spec, provider).release();
248inline
PBKDF* get_s2k(std::string_view algo_spec) {
249 return PBKDF::create_or_throw(algo_spec).release();
OctetString derive_key(size_t out_len, std::string_view passphrase, const std::vector< uint8_t, Alloc > &salt, size_t iterations) const
OctetString derive_key(size_t out_len, std::string_view passphrase, const uint8_t salt[], size_t salt_len, size_t iterations) const
virtual std::unique_ptr< PBKDF > new_object() const =0
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
virtual std::string name() const =0
OctetString derive_key(size_t out_len, std::string_view passphrase, const uint8_t salt[], size_t salt_len, std::chrono::milliseconds msec, size_t &iterations) const
OctetString derive_key(size_t out_len, std::string_view passphrase, const std::vector< uint8_t, Alloc > &salt, std::chrono::milliseconds msec, size_t &iterations) const
#define BOTAN_DEPRECATED_HEADER(hdr)
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_DEPRECATED(msg)
std::vector< T, secure_allocator< T > > secure_vector