8#include <botan/internal/xmss_signature.h>
15 : m_leaf_idx(0), m_randomness(0, 0x00), m_tree_sig()
19 if(raw_sig.size() != (xmss_params.
len() + xmss_params.
tree_height() + 1)
25 for(
size_t i = 0; i < 4; i++)
26 { m_leaf_idx = ((m_leaf_idx << 8) | raw_sig[i]); }
28 if(m_leaf_idx >= (1ull << xmss_params.
tree_height()))
33 auto begin = raw_sig.begin() +
sizeof(uint32_t);
35 std::copy(begin, end, std::back_inserter(m_randomness));
37 for(
size_t i = 0; i < xmss_params.
len(); i++)
49 for(
size_t i = 0; i < xmss_params.
tree_height(); i++)
66 static_cast<uint8_t
>(m_leaf_idx >> 24U),
67 static_cast<uint8_t
>(m_leaf_idx >> 16U),
68 static_cast<uint8_t
>(m_leaf_idx >> 8U),
69 static_cast<uint8_t
>(m_leaf_idx)
72 std::copy(m_randomness.begin(),
74 std::back_inserter(result));
76 for(
const auto& sig :
tree().ots_signature())
78 std::copy(sig.begin(),
80 std::back_inserter(result));
83 for(
const auto& auth :
tree().authentication_path())
85 std::copy(auth.begin(),
87 std::back_inserter(result));
size_t tree_height() const
size_t element_size() const
secure_vector< uint8_t > bytes() const
const XMSS_WOTS_PublicKey::TreeSignature & tree() const
XMSS_Signature(XMSS_Parameters::xmss_algorithm_t oid, const secure_vector< uint8_t > &raw_sig)
const wots_keysig_t & ots_signature() const
const wots_keysig_t & authentication_path() const
std::vector< T, secure_allocator< T > > secure_vector