7#ifndef BOTAN_PWDHASH_H_
8#define BOTAN_PWDHASH_H_
10#include <botan/types.h>
17#if !defined(BOTAN_IS_BEING_BUILT)
88 void hash(std::span<uint8_t> out, std::string_view password, std::span<const uint8_t> salt)
const {
89 this->
derive_key(out.data(), out.size(), password.data(), password.size(), salt.data(), salt.size());
109 void hash(std::span<uint8_t> out,
110 std::string_view password,
111 std::span<const uint8_t> salt,
112 std::span<const uint8_t> associated_data,
113 std::span<const uint8_t> key)
const {
120 associated_data.data(),
121 associated_data.size(),
141 const char* password,
143 const uint8_t salt[],
144 size_t salt_len)
const = 0;
168 const char* password,
170 const uint8_t salt[],
175 size_t key_len)
const;
187 static std::unique_ptr<PasswordHashFamily>
create(std::string_view algo_spec, std::string_view provider =
"");
194 static std::unique_ptr<PasswordHashFamily>
create_or_throw(std::string_view algo_spec,
195 std::string_view provider =
"");
200 static std::vector<std::string>
providers(std::string_view algo_spec);
207 virtual std::string
name()
const = 0;
235 virtual std::unique_ptr<PasswordHash>
tune_params(
size_t output_length,
236 uint64_t desired_runtime_msec,
237 std::optional<size_t> max_memory_usage_mb = {},
238 uint64_t tuning_msec = 10)
const = 0;
240#if !defined(BOTAN_IS_BEING_BUILT)
271 std::chrono::milliseconds msec,
272 size_t max_memory_usage_mb = 0,
273 std::chrono::milliseconds tuning_msec = std::chrono::milliseconds(10))
const {
274 std::optional<size_t> max_memory_opt;
275 if(max_memory_usage_mb > 0) {
276 max_memory_opt = max_memory_usage_mb;
280 static_cast<uint64_t
>(msec.count()),
282 static_cast<uint64_t
>(tuning_msec.count()));
309 virtual std::unique_ptr<PasswordHash>
from_params(
size_t i1,
size_t i2 = 0,
size_t i3 = 0)
const = 0;
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_DEPRECATED(msg)
virtual std::string name() const =0
static std::unique_ptr< PasswordHashFamily > create_or_throw(std::string_view algo_spec, std::string_view provider="")
virtual std::unique_ptr< PasswordHash > from_iterations(size_t iterations) const =0
static std::vector< std::string > providers(std::string_view algo_spec)
virtual ~PasswordHashFamily()=default
virtual std::unique_ptr< PasswordHash > default_params() const =0
static std::unique_ptr< PasswordHashFamily > create(std::string_view algo_spec, std::string_view provider="")
virtual std::unique_ptr< PasswordHash > from_params(size_t i1, size_t i2=0, size_t i3=0) const =0
std::unique_ptr< PasswordHash > tune(size_t output_length, std::chrono::milliseconds msec, size_t max_memory_usage_mb=0, std::chrono::milliseconds tuning_msec=std::chrono::milliseconds(10)) const
virtual std::unique_ptr< PasswordHash > tune_params(size_t output_length, uint64_t desired_runtime_msec, std::optional< size_t > max_memory_usage_mb={}, uint64_t tuning_msec=10) const =0
void hash(std::span< uint8_t > out, std::string_view password, std::span< const uint8_t > salt, std::span< const uint8_t > associated_data, std::span< const uint8_t > key) const
virtual bool supports_keyed_operation() const
void hash(std::span< uint8_t > out, std::string_view password, std::span< const uint8_t > salt) const
virtual size_t total_memory_usage() const
virtual size_t parallelism() const
virtual size_t iterations() const =0
virtual ~PasswordHash()=default
virtual void derive_key(uint8_t out[], size_t out_len, const char *password, size_t password_len, const uint8_t salt[], size_t salt_len) const =0
virtual bool supports_associated_data() const
virtual size_t memory_param() const
virtual std::string to_string() const =0