8 #include <botan/internal/xmss_signature.h>
14 : m_leaf_idx(0), m_randomness(0, 0x00), m_tree_sig()
18 "System type \"size_t\" not big enough to support"
22 uint64_t leaf_idx = 0;
23 for(
size_t i = 0; i < 8; i++)
24 leaf_idx = ((leaf_idx << 8) | raw_sig[i]);
26 if(leaf_idx >= (1ull << (xmss_params.
tree_height() - 1)))
31 m_leaf_idx =
static_cast<size_t>(leaf_idx);
33 auto begin = raw_sig.begin() +
sizeof(uint64_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
>(
static_cast<uint64_t
>(m_leaf_idx) >> 56U),
67 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 48U),
68 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 40U),
69 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 32U),
70 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 24U),
71 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 16U),
72 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) >> 8U),
73 static_cast<uint8_t
>(
static_cast<uint64_t
>(m_leaf_idx) )
76 std::copy(m_randomness.begin(),
78 std::back_inserter(result));
82 std::copy(sig.begin(),
84 std::back_inserter(result));
89 std::copy(auth.begin(),
91 std::back_inserter(result));
XMSS_Signature(XMSS_Parameters::xmss_algorithm_t oid, const secure_vector< uint8_t > &raw_sig)
size_t element_size() const
size_t tree_height() const
#define BOTAN_ASSERT(expr, assertion_made)
std::vector< T, secure_allocator< T >> secure_vector
const wots_keysig_t & ots_signature() const
const XMSS_WOTS_PublicKey::TreeSignature & tree() const
secure_vector< uint8_t > bytes() const
const wots_keysig_t & authentication_path() const