8#ifndef BOTAN_XMSS_HASH_H_
9#define BOTAN_XMSS_HASH_H_
11#include <botan/hash.h>
24 XMSS_Hash(
const std::string& h_func_name);
39 m_hash->update(m_zero_padding);
40 m_hash->update(m_id_prf);
43 m_hash->final(result);
57 m_hash->update(m_zero_padding);
58 m_hash->update(m_id_prf);
61 return m_hash->final();
75 m_hash->update(m_zero_padding);
76 m_hash->update(m_id_f);
79 m_hash->final(result);
140 static const uint8_t m_id_f = 0x00;
141 static const uint8_t m_id_h = 0x01;
142 static const uint8_t m_id_hmsg = 0x02;
143 static const uint8_t m_id_prf = 0x03;
145 std::unique_ptr<HashFunction> m_hash;
146 std::unique_ptr<HashFunction> m_msg_hash;
148 std::vector<uint8_t> m_zero_padding;
149 size_t m_output_length;
150 const std::string m_hash_func_name;
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 f(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
secure_vector< uint8_t > prf(const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
size_t output_length() const
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)
void prf(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
int(* final)(unsigned char *, CTX *)
std::vector< T, secure_allocator< T > > secure_vector