8 #ifndef BOTAN_XMSS_PUBLICKEY_H__
9 #define BOTAN_XMSS_PUBLICKEY_H__
16 #include <botan/alg_id.h>
17 #include <botan/asn1_oid.h>
18 #include <botan/der_enc.h>
19 #include <botan/assert.h>
20 #include <botan/exceptn.h>
21 #include <botan/rng.h>
22 #include <botan/types.h>
23 #include <botan/pk_keys.h>
24 #include <botan/xmss_parameters.h>
25 #include <botan/xmss_wots_parameters.h>
26 #include <botan/pk_ops.h>
30 class XMSS_Verification_Operation;
57 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
58 m_root(m_xmss_params.element_size()),
59 m_public_seed(rng.random_vec(m_xmss_params.element_size())) {}
78 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
79 m_root(root), m_public_seed(public_seed) {}
92 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
93 m_root(
std::move(root)), m_public_seed(
std::move(public_seed)) {}
102 return m_xmss_params.oid();
124 return m_xmss_params;
135 return m_wots_params.oid();
146 return m_wots_params;
161 m_root = std::move(root);
171 return m_public_seed;
176 m_public_seed = public_seed;
181 m_public_seed = std::move(public_seed);
186 return m_public_seed;
204 virtual std::unique_ptr<PK_Ops::Verification>
205 create_verification_op(
const std::string&,
206 const std::string& provider)
const override;
210 return m_xmss_params.estimated_strength();
215 return m_xmss_params.estimated_strength();
226 return raw_public_key();
237 return sizeof(uint32_t) + 2 * m_xmss_params.element_size();
247 virtual std::vector<uint8_t> raw_public_key()
const;
257 const std::vector<uint8_t>& raw_key);
virtual size_t estimated_strength() const override
secure_vector< uint8_t > m_public_seed
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, const secure_vector< uint8_t > &root, const secure_vector< uint8_t > &public_seed)
virtual void set_public_seed(const secure_vector< uint8_t > &public_seed)
secure_vector< uint8_t > m_root
void set_root(const secure_vector< uint8_t > &root)
void set_root(secure_vector< uint8_t > &&root)
virtual AlgorithmIdentifier algorithm_identifier() const override
virtual void set_public_seed(secure_vector< uint8_t > &&public_seed)
const XMSS_Parameters & xmss_parameters() const
const secure_vector< uint8_t > & root() const
std::vector< T, secure_allocator< T >> secure_vector
void set_xmss_oid(XMSS_Parameters::xmss_algorithm_t xmss_oid)
secure_vector< uint8_t > & root()
virtual size_t size() const
virtual const secure_vector< uint8_t > & public_seed() const
virtual size_t key_length() const override
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, secure_vector< uint8_t > &&root, secure_vector< uint8_t > &&public_seed)
const XMSS_WOTS_Parameters & wots_parameters() const
virtual bool check_key(RandomNumberGenerator &, bool) const override
std::string algo_name() const override
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, RandomNumberGenerator &rng)
XMSS_Parameters::xmss_algorithm_t xmss_oid() const
XMSS_WOTS_Parameters m_wots_params
virtual secure_vector< uint8_t > & public_seed()
XMSS_Parameters m_xmss_params
XMSS_WOTS_Parameters::ots_algorithm_t wots_oid() const
virtual std::vector< uint8_t > public_key_bits() const override