11#include <botan/symkey.h>
34 static std::unique_ptr<PBKDF> create(
const std::string& algo_spec,
35 const std::string& provider =
"");
42 static std::unique_ptr<PBKDF>
43 create_or_throw(
const std::string& algo_spec,
44 const std::string& provider =
"");
49 static std::vector<std::string> providers(
const std::string& algo_spec);
59 virtual std::string
name()
const = 0;
78 virtual size_t pbkdf(uint8_t out[],
size_t out_len,
79 const std::string& passphrase,
80 const uint8_t salt[],
size_t salt_len,
82 std::chrono::milliseconds msec)
const = 0;
94 void pbkdf_iterations(uint8_t out[],
size_t out_len,
95 const std::string& passphrase,
96 const uint8_t salt[],
size_t salt_len,
97 size_t iterations)
const;
111 void pbkdf_timed(uint8_t out[],
size_t out_len,
112 const std::string& passphrase,
113 const uint8_t salt[],
size_t salt_len,
114 std::chrono::milliseconds msec,
115 size_t& iterations)
const;
128 const std::string& passphrase,
129 const uint8_t salt[],
size_t salt_len,
130 size_t iterations)
const;
145 const std::string& passphrase,
146 const uint8_t salt[],
size_t salt_len,
147 std::chrono::milliseconds msec,
148 size_t& iterations)
const;
161 const std::string& passphrase,
162 const uint8_t salt[],
size_t salt_len,
163 size_t iterations)
const
165 return pbkdf_iterations(out_len, passphrase, salt,
salt_len, iterations);
175 template<
typename Alloc>
177 const std::string& passphrase,
178 const std::vector<uint8_t, Alloc>& salt,
179 size_t iterations)
const
181 return pbkdf_iterations(out_len, passphrase, salt.data(), salt.size(), iterations);
194 const std::string& passphrase,
195 const uint8_t salt[],
size_t salt_len,
196 std::chrono::milliseconds msec,
197 size_t& iterations)
const
199 return pbkdf_timed(out_len, passphrase, salt,
salt_len, msec, iterations);
210 template<
typename Alloc>
212 const std::string& passphrase,
213 const std::vector<uint8_t, Alloc>& salt,
214 std::chrono::milliseconds msec,
215 size_t& iterations)
const
217 return pbkdf_timed(out_len, passphrase, salt.data(), salt.size(), msec, iterations);
233 const std::string& provider =
"")
OctetString derive_key(size_t out_len, const std::string &passphrase, const std::vector< uint8_t, Alloc > &salt, std::chrono::milliseconds msec, size_t &iterations) const
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
OctetString derive_key(size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, size_t iterations) const
OctetString derive_key(size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, std::chrono::milliseconds msec, size_t &iterations) const
static std::unique_ptr< PBKDF > create_or_throw(const std::string &algo_spec, const std::string &provider="")
OctetString derive_key(size_t out_len, const std::string &passphrase, const std::vector< uint8_t, Alloc > &salt, size_t iterations) const
virtual PBKDF * clone() const =0
virtual std::string name() const =0
#define BOTAN_PUBLIC_API(maj, min)
PBKDF * get_pbkdf(const std::string &algo_spec, const std::string &provider="")
PBKDF * get_s2k(const std::string &algo_spec)
std::vector< T, secure_allocator< T > > secure_vector