10#include <botan/xmss_hash.h>
11#include <botan/exceptn.h>
22 m_hash_func_name(h_func_name)
25 throw Lookup_Error(
"XMSS cannot use hash " + h_func_name +
26 " because it is unavailable");
28 m_output_length = m_hash->output_length();
29 BOTAN_ASSERT(m_output_length > 0,
"Hash output length of zero is invalid.");
31 m_zero_padding.resize(m_output_length - 1);
32 m_msg_hash.reset(m_hash->clone());
40 m_hash->update(m_zero_padding);
41 m_hash->update(m_id_h);
44 m_hash->final(result);
52 m_msg_hash->update(m_zero_padding);
53 m_msg_hash->update(m_id_hmsg);
54 m_msg_hash->update(randomness);
55 m_msg_hash->update(root);
56 m_msg_hash->update(index_bytes);
61 m_msg_hash->update(data, size);
66 return m_msg_hash->final();
76 m_msg_hash->update(data);
77 return m_msg_hash->final();
#define BOTAN_ASSERT(expr, assertion_made)
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)
void h_msg_update(const uint8_t data[], size_t size)
secure_vector< uint8_t > h_msg_final()
void h_msg_init(const secure_vector< uint8_t > &randomness, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &index_bytes)
void h(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
XMSS_Hash(const std::string &h_func_name)
std::vector< T, secure_allocator< T > > secure_vector