8 #ifndef BOTAN_XMSS_HASH_H__
9 #define BOTAN_XMSS_HASH_H__
13 #include <botan/assert.h>
14 #include <botan/hash.h>
15 #include <botan/secmem.h>
16 #include <botan/types.h>
27 XMSS_Hash(
const std::string& h_func_name);
42 m_hash->update(m_zero_padding);
43 m_hash->update(m_id_prf);
46 m_hash->final(result);
60 m_hash->update(m_zero_padding);
61 m_hash->update(m_id_prf);
64 return m_hash->final();
78 m_hash->update(m_zero_padding);
79 m_hash->update(m_id_f);
82 m_hash->final(result);
150 static const uint8_t m_id_f = 0x00;
151 static const uint8_t m_id_h = 0x01;
152 static const uint8_t m_id_hmsg = 0x02;
153 static const uint8_t m_id_prf = 0x03;
155 const std::string m_hash_func_name;
156 std::unique_ptr<HashFunction> m_hash;
157 std::unique_ptr<HashFunction> m_msg_hash;
158 size_t m_output_length;
161 std::vector<uint8_t> m_zero_padding;
secure_vector< uint8_t > h_msg_final()
XMSS_Hash(const std::string &h_func_name)
void h_msg_update(const secure_vector< uint8_t > &data)
void h(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
void f(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
secure_vector< uint8_t > h_msg(const secure_vector< uint8_t > &randomness, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &index_bytes, const secure_vector< uint8_t > &data)
std::vector< T, secure_allocator< T >> secure_vector
secure_vector< uint8_t > prf(const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
void prf(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
size_t output_length() const
void h_msg_init(const secure_vector< uint8_t > &randomness, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &index_bytes)