9#include <botan/internal/cmce_parameters.h>
10#include <botan/internal/cmce_poly.h>
16CmceGfMod determine_poly_f(Classic_McEliece_Parameter_Set param_set) {
17 switch(param_set.code()) {
42Classic_McEliece_Polynomial_Ring determine_poly_ring(Classic_McEliece_Parameter_Set param_set) {
43 CmceGfMod poly_f = determine_poly_f(param_set);
45 switch(param_set.code()) {
49 return {{{3, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
50 {1, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
51 {0, Classic_McEliece_GF(
CmceGfElem(2), poly_f)}},
57 return {{{10, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
58 {9, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
59 {6, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
60 {0, Classic_McEliece_GF(
CmceGfElem(1), poly_f)}},
69 return {{{8, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
70 {0, Classic_McEliece_GF(
CmceGfElem(1), poly_f)}},
83 return {{{7, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
84 {2, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
85 {1, Classic_McEliece_GF(
CmceGfElem(1), poly_f)},
86 {0, Classic_McEliece_GF(
CmceGfElem(1), poly_f)}},
96 auto poly_ring = determine_poly_ring(set);
144 m_set(param_set), m_m(m), m_n(n), m_poly_ring(std::move(poly_ring)) {
145 BOTAN_ASSERT(
n % 8 == 0,
"We require that n is a multiple of 8");
153 switch(m_set.
code()) {
183 xof->update(std::array<uint8_t, 1>({64}));
#define BOTAN_ASSERT_EQUAL(expr1, expr2, assertion_made)
#define BOTAN_ASSERT(expr, assertion_made)
#define BOTAN_ASSERT_UNREACHABLE()
std::string to_string() const
Get the parameter set name for a given parameter set.
static Classic_McEliece_Parameter_Set from_string(std::string_view param_name)
Get the parameter set for a given parameter set name.
Code code() const
Get the code for a given parameter set.
@ ClassicMcEliece_348864f
@ ClassicMcEliece_8192128pcf
@ ClassicMcEliece_6960119f
@ ClassicMcEliece_6960119pc
@ ClassicMcEliece_6688128
@ ClassicMcEliece_8192128pc
@ ClassicMcEliece_6688128pcf
@ ClassicMcEliece_8192128f
@ ClassicMcEliece_6688128f
@ ClassicMcEliece_8192128
@ ClassicMcEliece_6960119pcf
@ ClassicMcEliece_6960119
@ ClassicMcEliece_460896f
@ ClassicMcEliece_6688128pc
static Classic_McEliece_Parameter_Set from_oid(const OID &oid)
Get the parameter set for a given OID.
static Classic_McEliece_Parameters create(Classic_McEliece_Parameter_Set set)
Create Classic McEliece parameters from a parameter set.
size_t estimated_strength() const
The estimated bit security strength of the Classic McEliece instance.
OID object_identifier() const
The OID for the Classic McEliece instance.
std::unique_ptr< XOF > prg(std::span< const uint8_t > seed) const
Create a seeded XOF object representing Classic McEliece's PRG. See Classic McEliece ISO 9....
size_t n() const
The code length of the Classic McEliece instance.
const Classic_McEliece_Polynomial_Ring & poly_ring() const
The underlying polynomial ring.
Represents the polynomial ring GF(q)[y]/F(y) where F(y) is the modulus polynomial in GF(q)[y] of degr...
static OID from_string(std::string_view str)
static std::unique_ptr< XOF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Strong< uint16_t, struct CmceGfMod_ > CmceGfMod
Represents a GF(q) modulus.
Strong< uint16_t, struct CmceGfElem_ > CmceGfElem
Represents a GF(q) element.