17#include <botan/internal/xmss_signature_operation.h>
19#include <botan/internal/xmss_tools.h>
24 m_priv_key(private_key),
25 m_hash(private_key.xmss_parameters()),
28 m_is_initialized(false) {}
31 const auto& params = m_priv_key.xmss_parameters();
32 return sizeof(uint64_t) +
33 params.element_size() + params.len() * params.element_size() + params.tree_height() * params.element_size();
38 m_hash.h_msg_update(input);
44 const auto msg_hash = m_hash.h_msg_final();
46 const auto& params = m_priv_key.xmss_parameters();
52 for(
size_t j = 0; j < params.tree_height(); j++) {
53 const size_t k = (m_leaf_idx / (
static_cast<size_t>(1) << j)) ^ 0x01;
54 auth_path[j] = m_priv_key.tree_hash(k * (
static_cast<size_t>(1) << j), j, adrs, m_hash);
63 m_priv_key.wots_private_key_for(adrs, m_hash).sign(msg_hash, m_priv_key.public_seed(), adrs, m_hash);
66 m_is_initialized =
false;
70void XMSS_Signature_Operation::initialize() {
72 if(m_is_initialized) {
79 m_leaf_idx =
static_cast<uint32_t
>(m_priv_key.reserve_unused_leaf_index());
83 m_hash.
prf(m_randomness, m_priv_key.prf_value(), index_bytes);
87 m_is_initialized =
true;
static OID from_string(std::string_view str)
void set_ots_address(uint32_t value)
void prf(secure_vector< uint8_t > &result, std::span< const uint8_t > key, std::span< const uint8_t > data)
void h_msg_init(std::span< const uint8_t > randomness, std::span< const uint8_t > root, std::span< const uint8_t > index_bytes)
size_t element_size() const
const secure_vector< uint8_t > & root() const
const XMSS_Parameters & xmss_parameters() const
XMSS_Signature_Operation(const XMSS_PrivateKey &private_key)
AlgorithmIdentifier algorithm_identifier() const override
size_t signature_length() const override
std::vector< uint8_t > sign(RandomNumberGenerator &rng) override
void update(std::span< const uint8_t > input) override
std::vector< uint8_t > bytes() const
std::vector< secure_vector< uint8_t > > wots_keysig_t
void xmss_concat(secure_vector< uint8_t > &target, const T &src)
std::vector< T, secure_allocator< T > > secure_vector
wots_keysig_t authentication_path
wots_keysig_t ots_signature