7#include <botan/pwdhash.h>
8#include <botan/exceptn.h>
9#include <botan/scan_name.h>
11#if defined(BOTAN_HAS_PBKDF2)
12 #include <botan/pbkdf2.h>
15#if defined(BOTAN_HAS_PGP_S2K)
16 #include <botan/pgp_s2k.h>
19#if defined(BOTAN_HAS_SCRYPT)
20 #include <botan/scrypt.h>
23#if defined(BOTAN_HAS_ARGON2)
24 #include <botan/argon2.h>
27#if defined(BOTAN_HAS_PBKDF_BCRYPT)
28 #include <botan/bcrypt_pbkdf.h>
34 const std::string& provider)
38#if defined(BOTAN_HAS_PBKDF2)
43 if(provider.empty() || provider ==
"base")
46 return std::unique_ptr<PasswordHashFamily>(
new PBKDF2_Family(mac.release()));
49 return std::unique_ptr<PasswordHashFamily>(
new PBKDF2_Family(mac.release()));
56#if defined(BOTAN_HAS_SCRYPT)
59 return std::unique_ptr<PasswordHashFamily>(
new Scrypt_Family);
63#if defined(BOTAN_HAS_ARGON2)
66 return std::unique_ptr<PasswordHashFamily>(
new Argon2_Family(0));
70 return std::unique_ptr<PasswordHashFamily>(
new Argon2_Family(1));
74 return std::unique_ptr<PasswordHashFamily>(
new Argon2_Family(2));
78#if defined(BOTAN_HAS_PBKDF_BCRYPT)
85#if defined(BOTAN_HAS_PGP_S2K)
102std::unique_ptr<PasswordHashFamily>
104 const std::string& provider)
110 throw Lookup_Error(
"PasswordHashFamily", algo, provider);
115 return probe_providers_of<PasswordHashFamily>(algo_spec, {
"base",
"openssl" });
#define BOTAN_UNUSED(...)
static std::unique_ptr< HashFunction > create(const std::string &algo_spec, const std::string &provider="")
static std::unique_ptr< MessageAuthenticationCode > create(const std::string &algo_spec, const std::string &provider="")
static std::vector< std::string > providers(const std::string &algo_spec)
static std::unique_ptr< PasswordHashFamily > create_or_throw(const std::string &algo_spec, const std::string &provider="")
static std::unique_ptr< PasswordHashFamily > create(const std::string &algo_spec, const std::string &provider="")
std::string arg(size_t i) const
const std::string & algo_name() const