8#ifndef BOTAN_XMSS_HASH_H_
9#define BOTAN_XMSS_HASH_H_
11#include <botan/hash.h>
38 inline void calculate_hash(
const uint8_t hash_id,
40 std::span<const uint8_t> key,
41 std::span<const uint8_t> data)
43 m_hash->update(m_zero_padding);
44 m_hash->update(hash_id);
45 m_hash->update(key.data(), key.size());
46 m_hash->update(data.data(), data.size());
47 m_hash->final(result);
60 std::span<const uint8_t> key,
61 std::span<const uint8_t> data)
63 calculate_hash(0x03, result, key, data);
78 std::span<const uint8_t> key,
79 std::span<const uint8_t> data)
81 calculate_hash(0x04, result, key, data);
92 std::span<const uint8_t> key,
93 std::span<const uint8_t> data)
95 calculate_hash(0x00, result, key, data);
107 std::span<const uint8_t> key,
108 std::span<const uint8_t> data)
110 calculate_hash(0x01, result, key, data);
125 std::span<const uint8_t> root,
126 std::span<const uint8_t> index_bytes,
127 std::span<const uint8_t> data)
131 return m_msg_hash->final();
141 void h_msg_init(std::span<const uint8_t> randomness,
142 std::span<const uint8_t> root,
143 std::span<const uint8_t> index_bytes);
163 std::unique_ptr<HashFunction> m_hash;
164 std::unique_ptr<HashFunction> m_msg_hash;
170 std::vector<uint8_t> m_zero_padding;
std::string hash_function() const
size_t output_length() const
XMSS_Hash & operator=(XMSS_Hash &&)=default
XMSS_Hash(XMSS_Hash &&hash)=default
secure_vector< uint8_t > h_msg_final()
void prf(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
void h_msg_update(std::span< const uint8_t > data)
void prf_keygen(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
secure_vector< uint8_t > h_msg(std::span< const uint8_t > randomness, std::span< const uint8_t > root, std::span< const uint8_t > index_bytes, std::span< const uint8_t > data)
void f(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
void h(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
XMSS_Hash & operator=(const XMSS_Hash &)=delete
void h_msg_init(std::span< const uint8_t > randomness, std::span< const uint8_t > root, std::span< const uint8_t > index_bytes)
int(* final)(unsigned char *, CTX *)
std::vector< T, secure_allocator< T > > secure_vector