9 #ifndef BOTAN_XMSS_PUBLICKEY_H_
10 #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/exceptn.h>
20 #include <botan/rng.h>
21 #include <botan/types.h>
22 #include <botan/pk_keys.h>
23 #include <botan/xmss_parameters.h>
24 #include <botan/xmss_wots_parameters.h>
25 #include <botan/pk_ops.h>
29 class XMSS_Verification_Operation;
53 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
54 m_root(m_xmss_params.element_size()),
55 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();
122 return m_xmss_params;
133 return m_wots_params.oid();
144 return m_wots_params;
159 m_root = std::move(root);
169 return m_public_seed;
174 m_public_seed = public_seed;
179 m_public_seed = std::move(public_seed);
184 return m_public_seed;
202 std::unique_ptr<PK_Ops::Verification>
203 create_verification_op(
const std::string&,
204 const std::string& provider)
const override;
208 return m_xmss_params.estimated_strength();
213 return m_xmss_params.estimated_strength();
224 std::vector<uint8_t> output;
237 return sizeof(uint32_t) + 2 * m_xmss_params.element_size();
247 virtual std::vector<uint8_t> raw_public_key()
const;
258 const std::vector<uint8_t>& raw_key);
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
#define BOTAN_PUBLIC_API(maj, min)
void set_root(const secure_vector< uint8_t > &root)
void set_root(secure_vector< uint8_t > &&root)
virtual void set_public_seed(secure_vector< uint8_t > &&public_seed)
const XMSS_Parameters & xmss_parameters() const
DER_Encoder & encode(bool b)
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
size_t key_length() const override
virtual const secure_vector< uint8_t > & public_seed() const
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, secure_vector< uint8_t > &&root, secure_vector< uint8_t > &&public_seed)
std::vector< uint8_t > public_key_bits() const override
const XMSS_WOTS_Parameters & wots_parameters() const
AlgorithmIdentifier algorithm_identifier() const override
std::string algo_name() const override
size_t estimated_strength() 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
std::vector< uint8_t > m_raw_key
bool check_key(RandomNumberGenerator &, bool) const override