7 #include <botan/psk_db.h>
8 #include <botan/exceptn.h>
9 #include <botan/nist_keywrap.h>
10 #include <botan/base64.h>
11 #include <botan/mac.h>
12 #include <botan/block_cipher.h>
20 m_hmac->set_key(master_key);
22 m_cipher->set_key(m_hmac->process(
"wrap"));
23 m_hmac->set_key(m_hmac->process(
"hmac"));
33 const std::set<std::string> encrypted_names =
kv_get_all();
35 std::set<std::string> names;
37 for(std::string enc_name : encrypted_names)
46 names.insert(pt_name);
58 const std::vector<uint8_t> wrapped_name =
68 const std::vector<uint8_t> wrapped_name =
75 if(val_base64.empty())
80 std::unique_ptr<BlockCipher> wrap_cipher(m_cipher->clone());
81 wrap_cipher->set_key(m_hmac->process(wrapped_name));
93 const std::vector<uint8_t> wrapped_name =
98 std::unique_ptr<BlockCipher> wrap_cipher(m_cipher->clone());
99 wrap_cipher->set_key(m_hmac->process(wrapped_name));
Encrypted_PSK_Database(const secure_vector< uint8_t > &master_key)
secure_vector< uint8_t > get(const std::string &name) const override
const uint8_t * cast_char_ptr_to_uint8(const char *s)
virtual void kv_set(const std::string &index, const std::string &value)=0
virtual std::set< std::string > kv_get_all() const =0
std::set< std::string > list_names() const override
std::vector< T, secure_allocator< T >> secure_vector
size_t base64_encode(char out[], const uint8_t in[], size_t input_length, size_t &input_consumed, bool final_inputs)
secure_vector< uint8_t > nist_key_unwrap_padded(const uint8_t input[], size_t input_len, const BlockCipher &bc)
void set(const std::string &name, const uint8_t psk[], size_t psk_len) override
static std::unique_ptr< BlockCipher > create_or_throw(const std::string &algo_spec, const std::string &provider="")
size_t base64_decode(uint8_t out[], const char in[], size_t input_length, size_t &input_consumed, bool final_inputs, bool ignore_ws)
const char * cast_uint8_ptr_to_char(const uint8_t *b)
std::vector< uint8_t > nist_key_wrap_padded(const uint8_t input[], size_t input_len, const BlockCipher &bc)
~Encrypted_PSK_Database()
virtual void kv_del(const std::string &index)=0
virtual std::string kv_get(const std::string &index) const =0
static std::unique_ptr< MessageAuthenticationCode > create_or_throw(const std::string &algo_spec, const std::string &provider="")
void remove(const std::string &name) override