8 #ifndef BOTAN_XMSS_PRIVATEKEY_H__
9 #define BOTAN_XMSS_PRIVATEKEY_H__
14 #include <botan/alg_id.h>
15 #include <botan/assert.h>
16 #include <botan/exceptn.h>
17 #include <botan/pk_keys.h>
18 #include <botan/rng.h>
19 #include <botan/types.h>
20 #include <botan/xmss_parameters.h>
21 #include <botan/xmss_publickey.h>
22 #include <botan/atomic.h>
23 #include <botan/xmss_common_ops.h>
24 #include <botan/xmss_wots_privatekey.h>
25 #include <botan/xmss_index_registry.h>
94 set_unused_leaf_index(idx_leaf);
106 return *recover_global_leaf_index();
125 std::atomic<size_t>& index =
126 static_cast<std::atomic<size_t>&
>(*recover_global_leaf_index());
131 current = index.load();
135 while(!index.compare_exchange_strong(current, idx));
141 size_t idx = (
static_cast<std::atomic<size_t>&
>(
142 *recover_global_leaf_index())).fetch_add(1);
159 return m_wots_priv_key;
170 return m_wots_priv_key;
186 m_public_seed = public_seed;
187 m_wots_priv_key.set_public_seed(public_seed);
192 m_public_seed = std::move(public_seed);
193 m_wots_priv_key.set_public_seed(m_public_seed);
198 return m_public_seed;
201 virtual std::unique_ptr<PK_Ops::Signature>
204 const std::string& provider)
const override;
208 return raw_private_key();
211 virtual size_t size()
const override
241 size_t target_node_height,
248 std::shared_ptr<Atomic<size_t>> recover_global_leaf_index()
const;
virtual void set_public_seed(const secure_vector< uint8_t > &public_seed) override
virtual const secure_vector< uint8_t > & public_seed() const override
void set_unused_leaf_index(size_t idx)
size_t reserve_unused_leaf_index()
virtual secure_vector< uint8_t > private_key_bits() const override
std::vector< T, secure_allocator< T >> secure_vector
virtual size_t size() const
XMSS_PrivateKey(XMSS_Parameters::xmss_algorithm_t xmss_algo_id, size_t idx_leaf, const secure_vector< uint8_t > &wots_priv_seed, const secure_vector< uint8_t > &prf, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &public_seed)
virtual size_t size() const override
const secure_vector< uint8_t > & prf() const
XMSS_Parameters m_xmss_params
virtual void set_public_seed(secure_vector< uint8_t > &&public_seed) override
XMSS_WOTS_PrivateKey & wots_private_key()
size_t unused_leaf_index() const
const XMSS_WOTS_PrivateKey & wots_private_key() const
secure_vector< uint8_t > & prf()