12#ifndef BOTAN_MCELIECE_INTERNAL_H_
13#define BOTAN_MCELIECE_INTERNAL_H_
15#include <botan/mceliece.h>
16#include <botan/pk_ops.h>
17#include <botan/internal/polyn_gf2m.h>
39 const std::vector<uint8_t>&
public_matrix()
const {
return m_public_matrix; }
41 size_t t()
const {
return m_t; }
50 std::vector<uint8_t> m_public_matrix;
58 std::vector<polyn_gf2m>
sqrtmod,
59 std::vector<gf2m> support_inverse,
60 std::vector<uint32_t> parity_check_coeffs,
65 m_Linv(std::move(support_inverse)),
66 m_coeffs(std::move(parity_check_coeffs)),
74 const std::vector<polyn_gf2m>&
sqrtmod()
const {
return m_sqrtmod; }
76 const std::vector<gf2m>&
Linv()
const {
return m_Linv; }
78 const std::vector<uint32_t>&
H_coeffs()
const {
return m_coeffs; }
84 size_t code_length()
const {
return m_dimension + m_codimension; }
89 std::vector<polyn_gf2m> m_g;
90 std::vector<polyn_gf2m> m_sqrtmod;
91 std::vector<gf2m> m_Linv;
92 std::vector<uint32_t> m_coeffs;
99 const uint8_t ciphertext[],
100 size_t ciphertext_len,
101 const McEliece_PrivateKeyInternal& key);
106 const McEliece_PrivateKeyInternal& key);
109 const uint8_t* ciphertext,
110 size_t ciphertext_len,
111 const McEliece_PrivateKeyInternal& key);
116 const McEliece_PublicKeyInternal& key,
117 RandomNumberGenerator& rng);
119McEliece_PrivateKey
generate_mceliece_key(RandomNumberGenerator& rng,
size_t ext_deg,
size_t code_length,
size_t t);
const std::vector< polyn_gf2m > & goppa_polyn_vec() const
const std::vector< polyn_gf2m > & sqrtmod() const
const std::vector< uint32_t > & H_coeffs() const
size_t code_length() const
size_t message_word_bit_length() const
size_t codimension() const
const std::vector< gf2m > & Linv() const
const polyn_gf2m & goppa_polyn() const
McEliece_PrivateKeyInternal(std::vector< polyn_gf2m > g, std::vector< polyn_gf2m > sqrtmod, std::vector< gf2m > support_inverse, std::vector< uint32_t > parity_check_coeffs, size_t codimension, size_t dimension)
McEliece_PublicKeyInternal(std::vector< uint8_t > public_matrix, size_t t, size_t code_length)
size_t code_length() const
const std::vector< uint8_t > & public_matrix() const
secure_vector< uint8_t > random_plaintext_element(RandomNumberGenerator &rng) const
size_t message_word_bit_length() const
void mceliece_decrypt(secure_vector< uint8_t > &plaintext_out, secure_vector< uint8_t > &error_mask_out, const secure_vector< uint8_t > &ciphertext, const McEliece_PrivateKeyInternal &key)
McEliece_Params mceliece_validate_key_encoding_params(size_t code_length, size_t t)
McEliece_PrivateKey generate_mceliece_key(RandomNumberGenerator &rng, size_t ext_deg, size_t code_length, size_t t)
void mceliece_encrypt(secure_vector< uint8_t > &ciphertext_out, secure_vector< uint8_t > &error_mask_out, const secure_vector< uint8_t > &plaintext, const McEliece_PublicKeyInternal &key, RandomNumberGenerator &rng)
std::vector< T, secure_allocator< T > > secure_vector
McEliece_Params mceliece_validate_keygen_params(size_t code_length, size_t t)
size_t public_matrix_bytes
size_t words_per_matrix_row