8 #ifndef BOTAN_KDF_BASE_H_ 9 #define BOTAN_KDF_BASE_H_ 11 #include <botan/secmem.h> 12 #include <botan/types.h> 23 virtual ~
KDF() =
default;
32 static std::unique_ptr<KDF>
33 create(
const std::string& algo_spec,
34 const std::string& provider =
"");
41 static std::unique_ptr<KDF>
42 create_or_throw(
const std::string& algo_spec,
43 const std::string& provider =
"");
48 static std::vector<std::string> providers(
const std::string& algo_spec);
53 virtual std::string
name()
const = 0;
67 virtual size_t kdf(uint8_t key[],
size_t key_len,
68 const uint8_t secret[],
size_t secret_len,
69 const uint8_t salt[],
size_t salt_len,
70 const uint8_t label[],
size_t label_len)
const = 0;
84 const uint8_t secret[],
88 const uint8_t label[] =
nullptr,
89 size_t label_len = 0)
const 92 key.resize(kdf(key.data(), key.size(), secret, secret_len, salt,
salt_len, label, label_len));
106 const std::string& salt =
"",
107 const std::string& label =
"")
const 109 return derive_key(key_len, secret.data(), secret.size(),
125 template<
typename Alloc,
typename Alloc2,
typename Alloc3>
127 const std::vector<uint8_t, Alloc>& secret,
128 const std::vector<uint8_t, Alloc2>& salt,
129 const std::vector<uint8_t, Alloc3>& label)
const 131 return derive_key(key_len,
132 secret.data(), secret.size(),
133 salt.data(), salt.size(),
134 label.data(), label.size());
148 const uint8_t salt[],
150 const std::string& label =
"")
const 152 return derive_key(key_len,
153 secret.data(), secret.size(),
169 const uint8_t secret[],
171 const std::string& salt =
"",
172 const std::string& label =
"")
const 174 return derive_key(key_len, secret, secret_len,
184 virtual KDF* clone()
const = 0;
secure_vector< uint8_t > derive_key(size_t key_len, const secure_vector< uint8_t > &secret, const std::string &salt="", const std::string &label="") const
secure_vector< uint8_t > derive_key(size_t key_len, const std::vector< uint8_t, Alloc > &secret, const std::vector< uint8_t, Alloc2 > &salt, const std::vector< uint8_t, Alloc3 > &label) const
#define BOTAN_PUBLIC_API(maj, min)
const uint8_t * cast_char_ptr_to_uint8(const char *s)
secure_vector< uint8_t > derive_key(size_t key_len, const uint8_t secret[], size_t secret_len, const uint8_t salt[], size_t salt_len, const uint8_t label[]=nullptr, size_t label_len=0) const
secure_vector< uint8_t > derive_key(size_t key_len, const uint8_t secret[], size_t secret_len, const std::string &salt="", const std::string &label="") const
KDF * get_kdf(const std::string &algo_spec)
secure_vector< uint8_t > derive_key(size_t key_len, const secure_vector< uint8_t > &secret, const uint8_t salt[], size_t salt_len, const std::string &label="") const
std::vector< T, secure_allocator< T > > secure_vector