8#ifndef BOTAN_KDF_BASE_H_
9#define BOTAN_KDF_BASE_H_
11#include <botan/secmem.h>
12#include <botan/exceptn.h>
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;
66 virtual void kdf(uint8_t key[],
size_t key_len,
67 const uint8_t secret[],
size_t secret_len,
68 const uint8_t salt[],
size_t salt_len,
69 const uint8_t label[],
size_t label_len)
const = 0;
83 const uint8_t secret[],
87 const uint8_t label[] =
nullptr,
88 size_t label_len = 0)
const
91 kdf(key.data(), key.size(), secret, secret_len, salt,
salt_len, label, label_len);
105 const std::string& salt =
"",
106 const std::string& label =
"")
const
108 return derive_key(key_len, secret.data(), secret.size(),
124 template<
typename Alloc,
typename Alloc2,
typename Alloc3>
126 const std::vector<uint8_t, Alloc>& secret,
127 const std::vector<uint8_t, Alloc2>& salt,
128 const std::vector<uint8_t, Alloc3>& label)
const
130 return derive_key(key_len,
131 secret.data(), secret.size(),
132 salt.data(), salt.size(),
133 label.data(), label.size());
147 const uint8_t salt[],
149 const std::string& label =
"")
const
151 return derive_key(key_len,
152 secret.data(), secret.size(),
168 const uint8_t secret[],
170 const std::string& salt =
"",
171 const std::string& label =
"")
const
173 return derive_key(key_len, secret, secret_len,
190 return this->new_object().release();
205 return kdf.release();
207 if(algo_spec ==
"Raw")
virtual std::unique_ptr< KDF > new_object() const =0
static std::unique_ptr< KDF > create(const std::string &algo_spec, const std::string &provider="")
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
virtual void kdf(uint8_t 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[], size_t label_len) const =0
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
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
virtual std::string name() const =0
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
#define BOTAN_PUBLIC_API(maj, min)
KDF * get_kdf(const std::string &algo_spec)
std::vector< T, secure_allocator< T > > secure_vector
const uint8_t * cast_char_ptr_to_uint8(const char *s)