Name Description Size
cmce.cpp 6004
cmce.h Classic McEliece is a Code-Based KEM. It is a round 4 candidate in NIST's PQC competition. It is endorsed by the German Federal Office for Information Security (BSI) for its conservative security assumptions and a corresponding draft for an ISO standard has been prepared. Both NIST and ISO parameter sets are implemented here. See https://classic.mceliece.org/ for the specifications and other details. Advantages of Classic McEliece: - Conservative post-quantum security assumptions - Very fast encapsulation - Fast decapsulation Disadvantages of Classic McEliece: - Very large public keys (0.26 MB - 1.36 MB) - Relatively slow key generation - Algorithm is complex and hard to implement side-channel resistant 5320
cmce_decaps.cpp 6915
cmce_decaps.h Classic McEliece Decapsulation Operation 3465
cmce_encaps.cpp 5445
cmce_encaps.h Classic McEliece Encapsulation Operation 2147
cmce_field_ordering.cpp @brief Create permutation pi as in (Section 8.2, Step 3). @param a The vector that is sorted @return (pi sorted after a, a sorted after pi) 11345
cmce_field_ordering.h @brief Represents a field ordering for the Classic McEliece cryptosystem. Field ordering corresponds to the permutation pi defining the alpha sequence in the Classic McEliece specification (see Classic McEliece ISO Sec. 8.2.). 4129
cmce_gf.cpp 2342
cmce_gf.h @brief Represents an element of the finite field GF(q) for q = 2^m. This class implements the finite field GF(q) for q = 2^m via the irreducible polynomial f(z) of degree m. The elements of GF(q) are represented as polynomials of degree m-1 with coefficients in GF(2). Each element and the modulus is represented by a uint16_t, where the i-th least significant bit corresponds to the coefficient of z^i. For example, the element (z^3 + z^2 + 1) is represented by the uint16_t 0b1101. 6695
cmce_keys_internal.cpp @brief Try to generate a Classic McEliece keypair for a given seed. @param[out] out_next_seed The next seed to use for key generation, if this iteration fails @param params Classic McEliece parameters @param seed The seed to used for this key generation iteration @return a keypair on success, std::nullopt otherwise 7354
cmce_keys_internal.h @brief Representation of a Classic McEliece public key. This class represents a Classic McEliece public key. It is used internally by the Classic McEliece public key class and contains the following data: - The Classic McEliece parameters - The public key matrix 7877
cmce_matrix.cpp 12379
cmce_matrix.h @brief Representation of the binary Classic McEliece matrix H, with H = (I_mt | T). Only the bytes of the submatrix T are stored. 4647
cmce_parameter_set.cpp 4025
cmce_parameter_set.h All Classic McEliece parameter sets defined in the NIST Round 4 submission and the Classic McEliece ISO Draft. Instances are defined in the following format: mceliece{n}{t}{[pc]}{[f]} Instance with 'pc' use plaintext confirmation as defined in the ISO Draft. Instance with 'f' use matrix reduction with the semi-systematic form. 2432
cmce_parameters.cpp 9133
cmce_parameters.h Container for all Classic McEliece parameters. 9714
cmce_poly.cpp 5760
cmce_poly.h @brief Representation of a Classic McEliece polynomial. This class represents a polynomial in the ring GF(q)[y]. E.g an example element of degree 2 could be: a = (z^3+1)y^2 + (z)y + (z^4+z^3) The degree of the polynomial is given by the size of the coefficient vector given to the constructor, even if the leading coefficient is zero. Coefficients are stored from lowest to highest monomial degree (coef_at(0) = (z^4+z^3) in the example above). This class is merely a container. The modulus and the operations with Polynomials (e.g. multiplication) is handled by the Classic_McEliece_Polynomial_Ring class. 6476
cmce_types.h 2060
info.txt 395