8 #ifndef BOTAN_PBKDF_H__
9 #define BOTAN_PBKDF_H__
11 #include <botan/symkey.h>
12 #include <botan/exceptn.h>
32 static std::unique_ptr<PBKDF> create(
const std::string& algo_spec,
33 const std::string& provider =
"");
38 static std::vector<std::string> providers(
const std::string& algo_spec);
43 virtual PBKDF* clone()
const = 0;
48 virtual std::string name()
const = 0;
50 virtual ~
PBKDF() =
default;
67 virtual size_t pbkdf(uint8_t out[],
size_t out_len,
68 const std::string& passphrase,
69 const uint8_t salt[],
size_t salt_len,
71 std::chrono::milliseconds msec)
const = 0;
83 void pbkdf_iterations(uint8_t out[],
size_t out_len,
84 const std::string& passphrase,
85 const uint8_t salt[],
size_t salt_len,
86 size_t iterations)
const;
100 void pbkdf_timed(uint8_t out[],
size_t out_len,
101 const std::string& passphrase,
102 const uint8_t salt[],
size_t salt_len,
103 std::chrono::milliseconds msec,
104 size_t& iterations)
const;
117 const std::string& passphrase,
118 const uint8_t salt[],
size_t salt_len,
119 size_t iterations)
const;
134 const std::string& passphrase,
135 const uint8_t salt[],
size_t salt_len,
136 std::chrono::milliseconds msec,
137 size_t& iterations)
const;
150 const std::string& passphrase,
151 const uint8_t salt[],
size_t salt_len,
152 size_t iterations)
const
154 return pbkdf_iterations(out_len, passphrase, salt, salt_len, iterations);
164 template<
typename Alloc>
166 const std::string& passphrase,
167 const std::vector<uint8_t, Alloc>& salt,
168 size_t iterations)
const
170 return pbkdf_iterations(out_len, passphrase, salt.data(), salt.size(), iterations);
183 const std::string& passphrase,
184 const uint8_t salt[],
size_t salt_len,
185 std::chrono::milliseconds msec,
186 size_t& iterations)
const
188 return pbkdf_timed(out_len, passphrase, salt, salt_len, msec, iterations);
199 template<
typename Alloc>
201 const std::string& passphrase,
202 const std::vector<uint8_t, Alloc>& salt,
203 std::chrono::milliseconds msec,
204 size_t& iterations)
const
206 return pbkdf_timed(out_len, passphrase, salt.data(), salt.size(), msec, iterations);
217 const std::string& provider =
"")
219 std::unique_ptr<PBKDF> p(
PBKDF::create(algo_spec, provider));
static std::unique_ptr< PBKDF > create(const std::string &algo_spec, const std::string &provider="")
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
OctetString derive_key(size_t out_len, const std::string &passphrase, const uint8_t salt[], size_t salt_len, size_t iterations) const
std::vector< T, secure_allocator< T >> secure_vector
OctetString derive_key(size_t out_len, const std::string &passphrase, const std::vector< uint8_t, Alloc > &salt, size_t iterations) const
PBKDF * get_pbkdf(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, std::chrono::milliseconds msec, size_t &iterations) const