12#ifndef BOTAN_MCELIECE_KEY_H_
13#define BOTAN_MCELIECE_KEY_H_
15#include <botan/pk_keys.h>
26class McEliece_PublicKeyInternal;
27class McEliece_PrivateKeyInternal;
36 McEliece_PublicKey(
const std::vector<uint8_t>& pub_matrix,
size_t t,
size_t the_code_length);
44 std::string
algo_name()
const override {
return "McEliece"; }
58 size_t get_code_length()
const;
60 size_t get_message_word_bit_length()
const;
62 const std::vector<uint8_t>& get_public_matrix()
const;
75 std::string_view provider)
const override;
80 std::shared_ptr<const McEliece_PublicKeyInternal>
m_public;
109 const std::vector<uint32_t>& parity_check_matrix_coeffs,
110 const std::vector<polyn_gf2m>& square_root_matrix,
111 const std::vector<gf2m>& inverse_support,
112 const std::vector<uint8_t>& public_matrix);
145 std::string_view params,
146 std::string_view provider)
const override;
149 std::shared_ptr<const McEliece_PrivateKeyInternal> m_private;
158BOTAN_PUBLIC_API(2, 0) size_t mceliece_work_factor(
size_t code_size,
size_t t);
#define BOTAN_DEPRECATED_HEADER(hdr)
#define BOTAN_DIAGNOSTIC_POP
#define BOTAN_DIAGNOSTIC_PUSH
#define BOTAN_DIAGNOSTIC_IGNORE_INHERITED_VIA_DOMINANCE
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_DEPRECATED(msg)
virtual bool check_key(RandomNumberGenerator &rng, bool strong) const =0
virtual std::unique_ptr< Private_Key > generate_another(RandomNumberGenerator &rng) const =0
virtual size_t estimated_strength() const =0
secure_vector< uint8_t > private_key_bits() const override
const std::vector< polyn_gf2m > & get_sqrtmod() const
McEliece_PrivateKey(RandomNumberGenerator &rng, size_t code_length, size_t t)
std::unique_ptr< Public_Key > public_key() const override
size_t get_codimension() const
size_t get_dimension() const
McEliece_PrivateKey(const McEliece_PrivateKey &)
McEliece_PrivateKey(McEliece_PrivateKey &&) noexcept
~McEliece_PrivateKey() override
const polyn_gf2m & get_goppa_polyn() const
const std::vector< gf2m > & get_Linv() const
const std::vector< uint32_t > & get_H_coeffs() const
McEliece_PrivateKey & operator=(const McEliece_PrivateKey &)
bool check_key(RandomNumberGenerator &rng, bool strong) const override
secure_vector< uint8_t > random_plaintext_element(RandomNumberGenerator &rng) const
std::shared_ptr< const McEliece_PublicKeyInternal > m_public
std::string algo_name() const override
bool supports_operation(PublicKeyOperation op) const override
McEliece_PublicKey()=default
McEliece_PublicKey(const AlgorithmIdentifier &alg_id, std::span< const uint8_t > key_bits)
McEliece_PublicKey(const McEliece_PublicKey &other)=default
bool operator!=(const McEliece_PublicKey &other) const
~McEliece_PublicKey() override=default
McEliece_PublicKey & operator=(const McEliece_PublicKey &other)=default
virtual AlgorithmIdentifier algorithm_identifier() const =0
virtual std::vector< uint8_t > public_key_bits() const =0
virtual std::vector< uint8_t > raw_public_key_bits() const =0
virtual std::unique_ptr< PK_Ops::KEM_Encryption > create_kem_encryption_op(std::string_view params, std::string_view provider) const
virtual size_t key_length() const =0
std::vector< T, secure_allocator< T > > secure_vector
bool operator==(const AlgorithmIdentifier &x, const AlgorithmIdentifier &y)