17#include <botan/xmss.h>
18#include <botan/internal/xmss_verification_operation.h>
19#include <botan/der_enc.h>
20#include <botan/ber_dec.h>
28std::vector<uint8_t> extract_raw_key(
const std::vector<uint8_t>& key_bits)
30 std::vector<uint8_t> raw_key;
35 catch(Decoding_Error&)
46 : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
47 m_root(m_xmss_params.element_size()),
48 m_public_seed(rng.random_vec(m_xmss_params.element_size()))
52 : m_raw_key(extract_raw_key(key_bits)),
54 m_wots_params(m_xmss_params.ots_oid())
64 auto begin =
m_raw_key.begin() +
sizeof(uint32_t);
66 std::copy(begin, end, std::back_inserter(
m_root));
77XMSS_PublicKey::deserialize_xmss_oid(
const std::vector<uint8_t>& raw_key)
79 if(raw_key.size() < 4)
86 for(
size_t i = 0; i < 4; i++)
87 { raw_id = ((raw_id << 8) | raw_key[i]); }
92std::unique_ptr<PK_Ops::Verification>
94 const std::string& provider)
const
96 if(provider ==
"base" || provider.empty())
98 return std::unique_ptr<PK_Ops::Verification>(
106 std::vector<uint8_t> result
114 std::copy(
m_root.begin(),
m_root.end(), std::back_inserter(result));
117 std::back_inserter(result));
124 std::vector<uint8_t> output;
DER_Encoder & encode(bool b)
xmss_algorithm_t oid() const
size_t element_size() const
secure_vector< uint8_t > m_root
std::vector< uint8_t > public_key_bits() const override
secure_vector< uint8_t > m_public_seed
XMSS_Parameters m_xmss_params
std::vector< uint8_t > m_raw_key
virtual std::vector< uint8_t > raw_public_key() const
std::unique_ptr< PK_Ops::Verification > create_verification_op(const std::string &, const std::string &provider) const override
std::string algo_name() const override
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, RandomNumberGenerator &rng)
virtual size_t size() const