17#include <botan/xmss.h> 
   19#include <botan/ber_dec.h> 
   20#include <botan/der_enc.h> 
   21#include <botan/internal/loadstor.h> 
   22#include <botan/internal/stl_util.h> 
   23#include <botan/internal/xmss_verification_operation.h> 
   32   if(raw_key.size() < 4) {
 
   38   for(
size_t i = 0; i < 4; i++) {
 
   39      raw_id = ((raw_id << 8) | raw_key[i]);
 
   46std::vector<uint8_t> extract_raw_public_key(std::span<const uint8_t> key_bits) {
 
   47   std::vector<uint8_t> raw_key;
 
   56      if(raw_key.size() != params.raw_public_key_size() && raw_key.size() != params.raw_private_key_size() &&
 
   57         raw_key.size() != params.raw_legacy_private_key_size()) {
 
   58         throw Decoding_Error(
"unpacked XMSS key does not have the correct length");
 
   61      raw_key.assign(key_bits.begin(), key_bits.end());
 
   63      raw_key.assign(key_bits.begin(), key_bits.end());
 
   78      m_raw_key(extract_raw_public_key(key_bits)),
 
   82      throw Decoding_Error(
"Invalid XMSS public key size detected");
 
 
  104                                                                             std::string_view provider)
 const {
 
  105   if(provider == 
"base" || provider.empty()) {
 
  106      return std::make_unique<XMSS_Verification_Operation>(*
this);
 
 
  112                                                                                  std::string_view provider)
 const {
 
  113   if(provider == 
"base" || provider.empty()) {
 
  115         throw Decoding_Error(
"Unexpected AlgorithmIdentifier for XMSS X509 signature");
 
  117      return std::make_unique<XMSS_Verification_Operation>(*
this);
 
 
  127   std::vector<uint8_t> output;
 
 
  140   return std::make_unique<XMSS_PrivateKey>(
m_xmss_params.oid(), rng);
 
 
#define BOTAN_ARG_CHECK(expr, msg)
 
BER_Decoder & decode(bool &out)
 
BER_Decoder & verify_end()
 
void skip(const size_t count)
 
DER_Encoder & encode(bool b)
 
std::unique_ptr< PK_Ops::Verification > create_x509_verification_op(const AlgorithmIdentifier &alg_id, std::string_view provider) const override
 
const secure_vector< uint8_t > & root() const
 
secure_vector< uint8_t > m_root
 
std::vector< uint8_t > public_key_bits() const override
 
std::vector< uint8_t > raw_public_key_bits() const override
 
const secure_vector< uint8_t > & public_seed() const
 
secure_vector< uint8_t > m_public_seed
 
XMSS_Parameters m_xmss_params
 
std::vector< uint8_t > m_raw_key
 
std::vector< uint8_t > raw_public_key() const
 
XMSS_WOTS_Parameters m_wots_params
 
std::unique_ptr< Private_Key > generate_another(RandomNumberGenerator &rng) const final
 
std::string algo_name() const override
 
AlgorithmIdentifier algorithm_identifier() const override
 
XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid, RandomNumberGenerator &rng)
 
std::unique_ptr< PK_Ops::Verification > create_verification_op(std::string_view params, std::string_view provider) const override
 
constexpr auto concat(Rs &&... ranges)
 
std::vector< T, secure_allocator< T > > secure_vector
 
constexpr auto store_be(ParamTs &&... params)