10#include <botan/pk_ops.h>
12#include <botan/internal/cmce_decaps.h>
13#include <botan/internal/cmce_encaps.h>
14#include <botan/internal/cmce_field_ordering.h>
15#include <botan/internal/cmce_keys_internal.h>
16#include <botan/internal/cmce_matrix.h>
17#include <botan/internal/ct_utils.h>
18#include <botan/internal/pk_ops_impl.h>
25 std::span<const uint8_t> key_bits) :
31 BOTAN_ARG_CHECK(key_bits.size() == params.pk_size_bytes(),
"Wrong public key length");
32 m_public = std::make_shared<Classic_McEliece_PublicKeyInternal>(
37 m_public = std::make_shared<Classic_McEliece_PublicKeyInternal>(*other.
m_public);
42 m_public = std::make_shared<Classic_McEliece_PublicKeyInternal>(*other.
m_public);
52 return m_public->params().object_identifier();
57 return m_public->params().pk_no_cols();
61 return m_public->params().estimated_strength();
77 return std::make_unique<Classic_McEliece_PrivateKey>(rng,
m_public->params().parameter_set());
81 std::string_view params, std::string_view provider)
const {
82 if(provider.empty() || provider ==
"base") {
83 return std::make_unique<Classic_McEliece_Encryptor>(this->
m_public, params);
105 m_private = std::make_shared<Classic_McEliece_PrivateKeyInternal>(std::move(sk_internal));
114 std::span<const uint8_t> key_bits) :
118 return std::make_unique<Classic_McEliece_PublicKey>(*
this);
126 return m_private->serialize();
130 return m_private->check_key();
136 if(provider.empty() || provider ==
"base") {
137 return std::make_unique<Classic_McEliece_Decryptor>(this->m_private, params);
#define BOTAN_ASSERT_NONNULL(ptr)
#define BOTAN_ARG_CHECK(expr, msg)
Representation of the binary Classic McEliece matrix H, with H = (I_mt | T).
static Classic_McEliece_Parameters create(Classic_McEliece_Parameter_Set set)
Create Classic McEliece parameters from a parameter set.
static Classic_McEliece_PrivateKeyInternal from_bytes(const Classic_McEliece_Parameters ¶ms, std::span< const uint8_t > sk_bytes)
Parses a Classic McEliece private key from a byte sequence.
Classic_McEliece_PrivateKey(RandomNumberGenerator &rng, Classic_McEliece_Parameter_Set param_set)
Create a new Classic McEliece private key for a specified parameter set.
std::unique_ptr< PK_Ops::KEM_Decryption > create_kem_decryption_op(RandomNumberGenerator &rng, std::string_view params, std::string_view provider) const override
secure_vector< uint8_t > private_key_bits() const override
bool check_key(RandomNumberGenerator &, bool) const override
std::unique_ptr< Public_Key > public_key() const override
secure_vector< uint8_t > raw_private_key_bits() const override
static std::shared_ptr< Classic_McEliece_PublicKeyInternal > create_from_private_key(const Classic_McEliece_PrivateKeyInternal &sk)
Create a Classic McEliece public key from a private key.
size_t key_length() const override
AlgorithmIdentifier algorithm_identifier() const override
Classic_McEliece_PublicKey()=default
bool check_key(RandomNumberGenerator &, bool) const override
std::unique_ptr< Private_Key > generate_another(RandomNumberGenerator &rng) const final
std::shared_ptr< Classic_McEliece_PublicKeyInternal > m_public
std::unique_ptr< PK_Ops::KEM_Encryption > create_kem_encryption_op(std::string_view params, std::string_view provider) const override
Classic_McEliece_PublicKey & operator=(const Classic_McEliece_PublicKey &other)
size_t estimated_strength() const override
std::string algo_name() const override
OID object_identifier() const override
std::vector< uint8_t > public_key_bits() const override
std::vector< uint8_t > raw_public_key_bits() const override
void random_vec(std::span< uint8_t > v)
constexpr void unpoison_all(Ts &&... ts)
constexpr auto scoped_poison(const Ts &... xs)
constexpr void poison(const T *p, size_t n)
std::vector< T, secure_allocator< T > > secure_vector
static Classic_McEliece_KeyPair_Internal generate(const Classic_McEliece_Parameters ¶ms, StrongSpan< const CmceInitialSeed > seed)
Generate a Classic McEliece key pair using the algorithm described in Classic McEliece ISO Section 8....
std::pair< std::shared_ptr< Classic_McEliece_PrivateKeyInternal >, std::shared_ptr< Classic_McEliece_PublicKeyInternal > > decompose_to_pair() &&
Decompose the key pair into a pair of shared pointers to the private and public key.