17 #include <botan/internal/xmss_signature_operation.h>
24 m_priv_key(private_key),
27 m_is_initialized(false)
36 wots_keysig_t auth_path = build_auth_path(xmss_priv_key, adrs);
46 XMSS_PrivateKey& xmss_priv_key)
49 XMSS_Signature sig(m_leaf_idx,
51 generate_tree_signature(msg_hash, xmss_priv_key,adrs));
56 XMSS_Signature_Operation::build_auth_path(XMSS_PrivateKey& priv_key,
64 size_t k = (m_leaf_idx / (1 << j)) ^ 0x01;
65 auth_path[j] = priv_key.tree_hash(k * (1 << j), j, adrs);
84 m_is_initialized =
false;
88 void XMSS_Signature_Operation::initialize()
101 m_randomness =
m_hash.
prf(m_priv_key.
prf(), index_bytes);
108 m_is_initialized =
true;
size_t element_size() const
secure_vector< uint8_t > h_msg_final()
void h_msg_update(const secure_vector< uint8_t > &data)
void set_ots_address(uint32_t value)
XMSS_Signature_Operation(const XMSS_PrivateKey &private_key)
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