Botan 3.6.1
Crypto and TLS for C&
|
#include <kyber_polynomial.h>
Public Types | |
using | T |
Static Public Member Functions | |
static constexpr void | barrett_reduce (std::span< T, N > poly) |
static constexpr void | inverse_ntt (std::span< T, N > p) |
static constexpr void | ntt (std::span< T, N > p) |
static constexpr void | poly_add (std::span< T, N > result, std::span< const T, N > lhs, std::span< const T, N > rhs) |
static constexpr void | poly_cadd_q (std::span< T, N > coeffs) |
Adds Q if the coefficient is negative. | |
static constexpr void | poly_pointwise_montgomery (std::span< T, N > result, std::span< const T, N > lhs, std::span< const T, N > rhs) |
static constexpr void | poly_sub (std::span< T, N > result, std::span< const T, N > lhs, std::span< const T, N > rhs) |
static constexpr void | polyvec_pointwise_acc_montgomery (std::span< T, N > w, std::span< const T > u, std::span< const T > v) |
Multiplication and accumulation of 2 polynomial vectors u and v . | |
static constexpr T | to_montgomery (T a) |
Static Public Attributes | |
static constexpr T | N |
static constexpr T | Q |
Protected Types | |
using | T2 |
Static Protected Member Functions | |
static constexpr T | fqmul (T a, T b) |
static constexpr std::span< U, N > | poly_in_polyvec (std::span< U > polyvec, size_t index) |
static constexpr size_t | polys_in_polyvec (std::span< const T > polyvec) |
Static Protected Attributes | |
Pre-computed algorithm constants | |
static constexpr T | Q_inverse |
static constexpr T | MONTY |
static constexpr T | MONTY_SQUARED |
static constexpr T | F_WITH_MONTY_SQUARED |
static constexpr auto | zetas |
Friends | |
class | CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits > |
Definition at line 25 of file kyber_polynomial.h.
|
inherited |
Definition at line 51 of file pqcrystals.h.
|
protectedinherited |
Definition at line 56 of file pqcrystals.h.
|
inlinestaticconstexprinherited |
Definition at line 120 of file pqcrystals.h.
Referenced by ntt().
|
inlinestaticconstexprprotectedinherited |
Definition at line 94 of file pqcrystals.h.
Referenced by inverse_ntt(), ntt(), and poly_pointwise_montgomery().
|
inlinestaticconstexpr |
NIST FIPS 203, Algorithm 10 (NTT^-1)
The output is effectively multiplied by the montgomery parameter 2^16 mod q so that the input factors 2^(-16) mod q are eliminated. Note that factors 2^(-16) mod q are introduced by multiplication and reduction of values not in montgomery domain.
Produces the result of the inverse NTT transformation with a montgomery factor of (2^16 mod q) added (!). See above.
Definition at line 77 of file kyber_polynomial.h.
References Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::F_WITH_MONTY_SQUARED, Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::fqmul(), Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::N, and Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::zetas.
NIST FIPS 203, Algorithm 9 (NTT)
Produces the result of the NTT transformation without any montgomery factors in the coefficients. Zetas are pre-computed and stored in the zetas array. The zeta values contain the montgomery factor 2^16 mod q.
Definition at line 51 of file kyber_polynomial.h.
References Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::barrett_reduce(), Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::fqmul(), Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::N, and Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::zetas.
|
inlinestaticconstexprinherited |
Definition at line 97 of file pqcrystals.h.
|
inlinestaticconstexprinherited |
Adds Q if the coefficient is negative.
Definition at line 110 of file pqcrystals.h.
|
inlinestaticconstexprprotectedinherited |
index-th
polynomial in the polynomial vector polyvec
. Definition at line 87 of file pqcrystals.h.
|
inlinestaticconstexpr |
NIST FIPS 203, Algorithms 11 (MultiplyNTTs) and 12 (BaseCaseMultiply)
The result contains factors of 2^(-16) mod q (i.e. the inverse montgomery factor). This factor is eliminated by the inverse NTT transformation, see above.
NIST FIPS 203, Algorithm 12 (BaseCaseMultiply)
Definition at line 100 of file kyber_polynomial.h.
References Botan::b, Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::fqmul(), and Botan::CRYSTALS::Trait_Base< KyberConstants, KyberPolyTraits >::zetas.
|
inlinestaticconstexprinherited |
Definition at line 103 of file pqcrystals.h.
|
inlinestaticconstexprprotectedinherited |
polyvec
. Definition at line 79 of file pqcrystals.h.
|
inlinestaticconstexprinherited |
Multiplication and accumulation of 2 polynomial vectors u
and v
.
Definition at line 127 of file pqcrystals.h.
|
inlinestaticconstexprinherited |
Definition at line 118 of file pqcrystals.h.
|
friend |
Definition at line 25 of file kyber_polynomial.h.
|
staticconstexprprotectedinherited |
Definition at line 71 of file pqcrystals.h.
Referenced by inverse_ntt().
|
staticconstexprprotectedinherited |
Definition at line 62 of file pqcrystals.h.
|
staticconstexprprotectedinherited |
Definition at line 63 of file pqcrystals.h.
|
staticconstexprinherited |
Definition at line 52 of file pqcrystals.h.
Referenced by inverse_ntt(), and ntt().
|
staticconstexprinherited |
Definition at line 53 of file pqcrystals.h.
|
staticconstexprprotectedinherited |
Definition at line 61 of file pqcrystals.h.
|
staticconstexprprotectedinherited |
Definition at line 73 of file pqcrystals.h.
Referenced by inverse_ntt(), ntt(), and poly_pointwise_montgomery().