Botan 3.7.1
Crypto and TLS for C&
Botan::Classic_McEliece_Minimal_Polynomial Class Reference

Representation of a minimal polynomial in GF(q)[y]. More...

#include <cmce_poly.h>

Inheritance diagram for Botan::Classic_McEliece_Minimal_Polynomial:
Botan::Classic_McEliece_Polynomial

Public Member Functions

void _const_time_poison () const
 
void _const_time_unpoison () const
 
 Classic_McEliece_Minimal_Polynomial (std::vector< Classic_McEliece_GF > coef)
 
const std::vector< Classic_McEliece_GF > & coef () const
 Get the entire coefficients vector of the polynomial.
 
Classic_McEliece_GFcoef_at (size_t i)
 Get the coefficient of the i-th monomial as a reference (from low to high degree).
 
const Classic_McEliece_GFcoef_at (size_t i) const
 Get the coefficient of the i-th monomial (from low to high degree).
 
size_t degree () const
 Get the degree of the polynomial.
 
Classic_McEliece_GF operator() (Classic_McEliece_GF a) const
 Evaluate the polynomial P(x) at a given point a, i.e., compute P(a).
 
secure_vector< uint8_t > serialize () const
 Serialize the polynomial to bytes according to ISO Section 9.2.9.
 

Static Public Member Functions

static Classic_McEliece_Minimal_Polynomial from_bytes (std::span< const uint8_t > bytes, CmceGfMod poly_f)
 Create a polynomial from bytes according to ISO Section 9.2.9.
 

Detailed Description

Representation of a minimal polynomial in GF(q)[y].

It represents the monic irreducible degree-t polynomial of the goppa code.

Definition at line 81 of file cmce_poly.h.

Constructor & Destructor Documentation

◆ Classic_McEliece_Minimal_Polynomial()

Botan::Classic_McEliece_Minimal_Polynomial::Classic_McEliece_Minimal_Polynomial ( std::vector< Classic_McEliece_GF > coef)
inline

Definition at line 83 of file cmce_poly.h.

83 :
const std::vector< Classic_McEliece_GF > & coef() const
Get the entire coefficients vector of the polynomial.
Definition cmce_poly.h:59
Classic_McEliece_Polynomial(std::vector< Classic_McEliece_GF > coef)
Construct a polynomial given its coefficients.
Definition cmce_poly.h:39

Referenced by from_bytes().

Member Function Documentation

◆ _const_time_poison()

void Botan::Classic_McEliece_Polynomial::_const_time_poison ( ) const
inlineinherited

Definition at line 68 of file cmce_poly.h.

68{ CT::poison(m_coef); }
constexpr void poison(const T *p, size_t n)
Definition ct_utils.h:53

◆ _const_time_unpoison()

void Botan::Classic_McEliece_Polynomial::_const_time_unpoison ( ) const
inlineinherited

Definition at line 70 of file cmce_poly.h.

70{ CT::unpoison(m_coef); }
constexpr void unpoison(const T *p, size_t n)
Definition ct_utils.h:64

◆ coef()

const std::vector< Classic_McEliece_GF > & Botan::Classic_McEliece_Polynomial::coef ( ) const
inlineinherited

Get the entire coefficients vector of the polynomial.

Definition at line 59 of file cmce_poly.h.

59{ return m_coef; }

Referenced by serialize().

◆ coef_at() [1/2]

Classic_McEliece_GF & Botan::Classic_McEliece_Polynomial::coef_at ( size_t i)
inlineinherited

Get the coefficient of the i-th monomial as a reference (from low to high degree).

Definition at line 49 of file cmce_poly.h.

49{ return m_coef.at(i); }

Referenced by Botan::Classic_McEliece_PrivateKeyInternal::check_key(), Botan::Classic_McEliece_Polynomial_Ring::multiply(), and Botan::Classic_McEliece_Polynomial::operator()().

◆ coef_at() [2/2]

const Classic_McEliece_GF & Botan::Classic_McEliece_Polynomial::coef_at ( size_t i) const
inlineinherited

Get the coefficient of the i-th monomial (from low to high degree).

Definition at line 54 of file cmce_poly.h.

54{ return m_coef.at(i); }

◆ degree()

size_t Botan::Classic_McEliece_Polynomial::degree ( ) const
inlineinherited

Get the degree of the polynomial.

Note that the degree is given by the size of the coefficient vector, even if the leading coefficient is zero.

Definition at line 66 of file cmce_poly.h.

66{ return m_coef.size() + 1; }

Referenced by Botan::Classic_McEliece_PrivateKeyInternal::check_key().

◆ from_bytes()

Classic_McEliece_Minimal_Polynomial Botan::Classic_McEliece_Minimal_Polynomial::from_bytes ( std::span< const uint8_t > bytes,
CmceGfMod poly_f )
static

Create a polynomial from bytes according to ISO Section 9.2.9.

Definition at line 141 of file cmce_poly.cpp.

142 {
143 BOTAN_ASSERT_NOMSG(bytes.size() % 2 == 0);
144 const auto coef_vec = load_le<std::vector<CmceGfElem>>(bytes);
145 std::vector<Classic_McEliece_GF> coeff_vec_gf;
146 std::transform(coef_vec.begin(), coef_vec.end(), std::back_inserter(coeff_vec_gf), [poly_f](auto& coeff) {
147 return Classic_McEliece_GF(coeff, poly_f);
148 });
149
150 coeff_vec_gf.emplace_back(CmceGfElem(1), poly_f); // x^t as polynomial is monic
151
152 return Classic_McEliece_Minimal_Polynomial(coeff_vec_gf);
153}
#define BOTAN_ASSERT_NOMSG(expr)
Definition assert.h:59
Classic_McEliece_Minimal_Polynomial(std::vector< Classic_McEliece_GF > coef)
Definition cmce_poly.h:83
Strong< uint16_t, struct CmceGfElem_ > CmceGfElem
Represents a GF(q) element.
Definition cmce_types.h:19
constexpr auto load_le(ParamTs &&... params)
Definition loadstor.h:521

References BOTAN_ASSERT_NOMSG, Classic_McEliece_Minimal_Polynomial(), and Botan::load_le().

Referenced by Botan::Classic_McEliece_PrivateKeyInternal::from_bytes().

◆ operator()()

Classic_McEliece_GF Botan::Classic_McEliece_Polynomial::operator() ( Classic_McEliece_GF a) const
inherited

Evaluate the polynomial P(x) at a given point a, i.e., compute P(a).

Definition at line 18 of file cmce_poly.cpp.

18 {
19 BOTAN_DEBUG_ASSERT(a.modulus() == coef_at(0).modulus());
20
21 Classic_McEliece_GF r(CmceGfElem(0), a.modulus());
22 for(auto it = m_coef.rbegin(); it != m_coef.rend(); ++it) {
23 r *= a;
24 r += *it;
25 }
26
27 return r;
28}
#define BOTAN_DEBUG_ASSERT(expr)
Definition assert.h:98
Classic_McEliece_GF & coef_at(size_t i)
Get the coefficient of the i-th monomial as a reference (from low to high degree).
Definition cmce_poly.h:49

References BOTAN_DEBUG_ASSERT, Botan::Classic_McEliece_Polynomial::coef_at(), and Botan::Classic_McEliece_GF::modulus().

◆ serialize()

secure_vector< uint8_t > Botan::Classic_McEliece_Minimal_Polynomial::serialize ( ) const

Serialize the polynomial to bytes according to ISO Section 9.2.9.

Definition at line 127 of file cmce_poly.cpp.

127 {
128 BOTAN_ASSERT_NOMSG(!coef().empty());
129 auto& all_coeffs = coef();
130 // Store all except coef for monomial x^t since polynomial is monic (ISO Spec Section 9.2.9)
131 auto coeffs_to_store = std::span(all_coeffs).first(all_coeffs.size() - 1);
132 secure_vector<uint8_t> bytes(sizeof(uint16_t) * coeffs_to_store.size());
133 BufferStuffer bytes_stuf(bytes);
134 for(auto& coef : coeffs_to_store) {
135 store_le(bytes_stuf.next<sizeof(CmceGfElem)>(), coef.elem().get());
136 }
137 BOTAN_ASSERT_NOMSG(bytes_stuf.full());
138 return bytes;
139}
constexpr auto store_le(ParamTs &&... params)
Definition loadstor.h:764
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:61

References BOTAN_ASSERT_NOMSG, Botan::Classic_McEliece_Polynomial::coef(), Botan::BufferStuffer::full(), Botan::BufferStuffer::next(), and Botan::store_le().

Referenced by Botan::Classic_McEliece_PrivateKeyInternal::serialize().


The documentation for this class was generated from the following files: