7#ifndef BOTAN_PWDHASH_H_
8#define BOTAN_PWDHASH_H_
10#include <botan/types.h>
82 void hash(std::span<uint8_t> out,
83 std::string_view password,
84 std::span<const uint8_t> salt)
86 this->derive_key(out.data(), out.size(),
87 password.data(), password.size(),
88 salt.data(), salt.size());
103 void hash(std::span<uint8_t> out,
104 std::string_view password,
105 std::span<const uint8_t> salt,
106 std::span<const uint8_t> associated_data,
107 std::span<const uint8_t> key)
109 this->derive_key(out.data(), out.size(),
110 password.data(), password.size(),
111 salt.data(), salt.size(),
112 associated_data.data(), associated_data.size(),
113 key.data(), key.size());
130 const char* password,
size_t password_len,
131 const uint8_t salt[],
size_t salt_len)
const = 0;
153 virtual void derive_key(uint8_t out[],
size_t out_len,
154 const char* password,
size_t password_len,
155 const uint8_t salt[],
size_t salt_len,
156 const uint8_t ad[],
size_t ad_len,
157 const uint8_t key[],
size_t key_len)
const;
170 static std::unique_ptr<PasswordHashFamily> create(std::string_view algo_spec,
171 std::string_view provider =
"");
178 static std::unique_ptr<PasswordHashFamily>
179 create_or_throw(std::string_view algo_spec,
180 std::string_view provider =
"");
185 static std::vector<std::string> providers(std::string_view algo_spec);
192 virtual std::string
name()
const = 0;
206 virtual std::unique_ptr<PasswordHash>
tune(
size_t output_length,
207 std::chrono::milliseconds msec,
208 size_t max_memory_usage_mb = 0,
209 std::chrono::milliseconds tuning_msec = std::chrono::milliseconds(10))
const = 0;
238 size_t i3 = 0)
const = 0;
virtual std::string name() const =0
virtual std::unique_ptr< PasswordHash > from_iterations(size_t iterations) const =0
virtual ~PasswordHashFamily()=default
virtual std::unique_ptr< PasswordHash > default_params() const =0
virtual std::unique_ptr< PasswordHash > from_params(size_t i1, size_t i2=0, size_t i3=0) const =0
virtual 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 =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)
virtual bool supports_keyed_operation() const
void hash(std::span< uint8_t > out, std::string_view password, std::span< const uint8_t > salt)
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
#define BOTAN_PUBLIC_API(maj, min)