12 #ifndef BOTAN_MCELIECE_KEY_H__
13 #define BOTAN_MCELIECE_KEY_H__
15 #include <botan/pk_keys.h>
16 #include <botan/polyn_gf2m.h>
17 #include <botan/exceptn.h>
26 McEliece_PublicKey(
const std::vector<uint8_t>& pub_matrix, uint32_t the_t, uint32_t the_code_length) :
27 m_public_matrix(pub_matrix),
29 m_code_length(the_code_length){}
37 std::string
algo_name()
const override {
return "McEliece"; }
41 size_t key_length()
const override;
42 size_t estimated_strength()
const override;
44 std::vector<uint8_t> public_key_bits()
const override;
49 uint32_t
get_t()
const {
return m_t; }
51 uint32_t get_message_word_bit_length()
const;
57 std::unique_ptr<PK_Ops::KEM_Encryption>
59 const std::string& params,
60 const std::string& provider)
const override;
92 std::vector<uint32_t>
const& parity_check_matrix_coeffs,
93 std::vector<polyn_gf2m>
const& square_root_matrix,
94 std::vector<gf2m>
const& inverse_support,
95 std::vector<uint8_t>
const& public_matrix );
101 std::vector<gf2m>
const&
get_Linv()
const {
return m_Linv; }
102 std::vector<polyn_gf2m>
const&
get_sqrtmod()
const {
return m_sqrtmod; }
114 std::unique_ptr<PK_Ops::KEM_Decryption>
116 const std::string& params,
117 const std::string& provider)
const override;
120 std::vector<polyn_gf2m> m_sqrtmod;
121 std::vector<gf2m> m_Linv;
122 std::vector<uint32_t> m_coeffs;
124 uint32_t m_codimension;
125 uint32_t m_dimension;
std::vector< uint8_t > m_public_matrix
polyn_gf2m const & get_goppa_polyn() const
std::vector< uint32_t > const & get_H_coeffs() const
bool operator==(const AlgorithmIdentifier &a1, const AlgorithmIdentifier &a2)
std::vector< gf2m > const & get_Linv() const
uint32_t get_dimension() const
uint32_t get_code_length() const
std::vector< T, secure_allocator< T >> secure_vector
McEliece_PublicKey(const std::vector< uint8_t > &pub_matrix, uint32_t the_t, uint32_t the_code_length)
std::vector< polyn_gf2m > const & get_sqrtmod() const
const std::vector< uint8_t > & get_public_matrix() const
std::string algo_name() const override
bool operator!=(const McEliece_PublicKey &other) const
uint32_t get_codimension() const
bool check_key(RandomNumberGenerator &, bool) const override
bool operator!=(const McEliece_PrivateKey &other) const
size_t mceliece_work_factor(size_t n, size_t t)