12#include <botan/pk_keys.h>
13#include <botan/exceptn.h>
14#include <botan/xmss_parameters.h>
15#include <botan/xmss_wots.h>
19class RandomNumberGenerator;
20class XMSS_Verification_Operation;
66 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
67 m_root(root), m_public_seed(public_seed) {}
80 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
81 m_root(
std::move(root)), m_public_seed(
std::move(public_seed)) {}
90 return m_xmss_params.oid();
110 return m_xmss_params;
121 return m_xmss_params.hash_function_name();
132 return m_wots_params.oid();
143 return m_wots_params;
158 m_root = std::move(root);
168 return m_public_seed;
173 m_public_seed = public_seed;
178 m_public_seed = std::move(public_seed);
183 return m_public_seed;
201 std::unique_ptr<PK_Ops::Verification>
202 create_verification_op(
const std::string&,
203 const std::string& provider)
const override;
207 return m_xmss_params.estimated_strength();
212 return m_xmss_params.estimated_strength();
221 std::vector<uint8_t> public_key_bits()
const override;
231 return sizeof(uint32_t) + 2 * m_xmss_params.element_size();
241 virtual std::vector<uint8_t> raw_public_key()
const;
252 const std::vector<uint8_t>& raw_key);
255template<
typename>
class Atomic;
324 size_t unused_leaf_index()
const;
333 void set_unused_leaf_index(
size_t idx);
335 size_t reserve_unused_leaf_index();
345 return m_wots_priv_key;
356 return m_wots_priv_key;
372 m_public_seed = public_seed;
373 m_wots_priv_key.set_public_seed(public_seed);
378 m_public_seed = std::move(public_seed);
379 m_wots_priv_key.set_public_seed(m_public_seed);
384 return m_public_seed;
387 std::unique_ptr<PK_Ops::Signature>
390 const std::string& provider)
const override;
396 return XMSS_PublicKey::size() +
398 2 * XMSS_PublicKey::m_xmss_params.element_size();
424 size_t target_node_height,
431 std::shared_ptr<Atomic<size_t>> recover_global_leaf_index()
const;
435 size_t target_node_height,
438 return tree_hash_subtree(result, start_idx, target_node_height, adrs, m_hash);
445 void tree_hash_subtree(secure_vector<uint8_t>& result,
447 size_t target_node_height,
451 XMSS_WOTS_PrivateKey m_wots_priv_key;
453 secure_vector<uint8_t> m_prf;
454 XMSS_Index_Registry& m_index_reg;
const secure_vector< uint8_t > & public_seed() const override
bool stateful_operation() const override
size_t size() const override
secure_vector< uint8_t > & prf()
XMSS_WOTS_PrivateKey & wots_private_key()
void set_public_seed(secure_vector< uint8_t > &&public_seed) override
const XMSS_WOTS_PrivateKey & wots_private_key() const
const secure_vector< uint8_t > & prf() const
void set_public_seed(const secure_vector< uint8_t > &public_seed) override
const secure_vector< uint8_t > & root() const
secure_vector< uint8_t > m_root
const XMSS_WOTS_Parameters & wots_parameters() const
std::string xmss_hash_function() const
XMSS_WOTS_Parameters::ots_algorithm_t wots_oid() const
void set_root(secure_vector< uint8_t > &&root)
secure_vector< uint8_t > m_public_seed
const XMSS_Parameters & xmss_parameters() const
virtual void set_public_seed(secure_vector< uint8_t > &&public_seed)
void set_root(const secure_vector< uint8_t > &root)
XMSS_Parameters m_xmss_params
virtual void set_public_seed(const secure_vector< uint8_t > &public_seed)
std::vector< uint8_t > m_raw_key
virtual const secure_vector< uint8_t > & public_seed() const
void set_xmss_oid(XMSS_Parameters::xmss_algorithm_t xmss_oid)
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, secure_vector< uint8_t > &&root, secure_vector< uint8_t > &&public_seed)
XMSS_Parameters::xmss_algorithm_t xmss_oid() const
size_t estimated_strength() const override
size_t key_length() const override
XMSS_WOTS_Parameters m_wots_params
virtual secure_vector< uint8_t > & public_seed()
std::string algo_name() const override
AlgorithmIdentifier algorithm_identifier() const override
secure_vector< uint8_t > & root()
virtual size_t size() const
bool check_key(RandomNumberGenerator &, bool) const override
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &public_seed)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
std::vector< T, secure_allocator< T > > secure_vector