16 #include <botan/internal/xmss_signature_operation.h>
23 m_priv_key(private_key),
26 m_is_initialized(false)
35 wots_keysig_t auth_path = build_auth_path(xmss_priv_key, adrs);
45 XMSS_PrivateKey& xmss_priv_key)
48 XMSS_Signature sig(m_leaf_idx,
50 generate_tree_signature(msg_hash, xmss_priv_key,adrs));
56 return sizeof(uint64_t) +
71 size_t k = (m_leaf_idx / (1ULL << j)) ^ 0x01;
72 auth_path[j] = priv_key.
tree_hash(k * (1ULL << j), j, adrs);
90 m_is_initialized =
false;
94 void XMSS_Signature_Operation::initialize()
100 secure_vector<uint8_t> index_bytes;
107 m_randomness =
m_hash.
prf(m_priv_key.
prf(), index_bytes);
114 m_is_initialized =
true;
size_t signature_length() const override
secure_vector< uint8_t > tree_hash(size_t start_idx, size_t target_node_height, XMSS_Address &adrs)
size_t element_size() const
secure_vector< uint8_t > h_msg_final()
void set_ots_address(uint32_t value)
XMSS_Signature_Operation(const XMSS_PrivateKey &private_key)
void h_msg_update(const uint8_t data[], size_t size)
wots_keysig_t sign(const secure_vector< uint8_t > &msg, XMSS_Address &adrs)
size_t tree_height() const
size_t reserve_unused_leaf_index()
const XMSS_Parameters & xmss_parameters() const
std::vector< T, secure_allocator< T >> secure_vector
void prf(secure_vector< uint8_t > &result, const secure_vector< uint8_t > &key, const secure_vector< uint8_t > &data)
secure_vector< uint8_t > & root()
XMSS_Parameters m_xmss_params
std::vector< secure_vector< uint8_t > > wots_keysig_t
void h_msg_init(const secure_vector< uint8_t > &randomness, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &index_bytes)
const secure_vector< uint8_t > & prf() const
secure_vector< uint8_t > sign(RandomNumberGenerator &) override
void update(const uint8_t msg[], size_t msg_len) override
const XMSS_WOTS_PrivateKey & wots_private_key() const