27 for (uint8_t i = 0U; i < l; i++) {
34 for (uint8_t i = 0U; i < k; i++) {
41 for (uint8_t i = 0U; i < k; i++) {
52 for (uint8_t i = 1U; i < l; i++) {
59 for (uint8_t i = 0U; i < k; i++) {
66 for (uint8_t i = 0U; i < k; i++) {
73 for (uint8_t i = 0U; i < k; i++) {
80 for (uint8_t i = 0U; i < k; i++) {
87 for (uint8_t i = 0U; i < l; i++) {
97 for (uint8_t i = 0U; i < k; i++) {
107 for (uint8_t i = 0U; i < k; i++) {
117 for (uint8_t i = 0U; i < k; i++) {
128 for (uint8_t i = 0U; i < k; i++) {
140 for (uint8_t i = 0U; i < k; i++) {
141 for (uint32_t j = 0U; j <
MLDSA_N; j++) {
156 for (uint8_t i = 0U; i < k; i++) {
164 if (gamma2 == (
MLDSA_Q - 1) / 88) {
170 for (uint8_t i = 0U; i < k; i++) {
uint32_t MLDSA_PACK_polyw1(uint8_t *r, const mldsa_poly *a, int32_t gamma2)
Bit-pack polynomial w1 with coefficients fitting in ceil(log2((q-1)/(2*gamma2))) bits.
void MLDSA_POLY_reduce(mldsa_poly *a)
Applies reduce32 to all coefficients of a polynomial.
int MLDSA_POLY_chknorm(const mldsa_poly *a, int32_t B)
Checks infinity norm of polynomial against bound B.
void MLDSA_POLY_ntt(mldsa_poly *a)
Forward NTT in place.
void MLDSA_POLY_sub(mldsa_poly *a, const mldsa_poly *b)
Subtracts polynomial b from polynomial a in place.
void MLDSA_POLY_shiftl(mldsa_poly *a)
Shifts all coefficients left by D bits.
void MLDSA_POLY_caddq_all(mldsa_poly *a)
Applies caddq to all coefficients of a polynomial.
void MLDSA_POLY_add(mldsa_poly *a, const mldsa_poly *b)
Adds polynomial b to polynomial a in place.
void MLDSA_POLY_invntt_tomont(mldsa_poly *a)
Inverse NTT and multiply by Montgomery factor.
void MLDSA_POLY_pointwise_montgomery(mldsa_poly *c, const mldsa_poly *a, const mldsa_poly *b, int first)
Pointwise multiplication (Montgomery) with accumulation.
void MLDSA_POLYVEC_ntt_k(mldsa_polyveck *v, uint8_t k)
Apply NTT to all polynomials in a K-vector.
void MLDSA_POLYVEC_add_k(mldsa_polyveck *a, const mldsa_polyveck *b, uint8_t k)
Add K-vector b to K-vector a.
void MLDSA_POLYVEC_pack_w1(uint8_t *r, const mldsa_polyveck *w1, int32_t gamma2, uint8_t k)
Pack w1 vector.
uint32_t MLDSA_POLYVEC_make_hint_k(mldsa_polyveck *h, const mldsa_polyveck *v0, const mldsa_polyveck *v1, int32_t gamma2, uint8_t k)
Make hint for K-vectors.
void MLDSA_POLYVEC_use_hint_k(mldsa_polyveck *w, const mldsa_polyveck *u, const mldsa_polyveck *h, int32_t gamma2, uint8_t k)
Use hint to correct high bits of K-vector.
void MLDSA_POLYVEC_pointwise_acc_montgomery(mldsa_poly *w, const mldsa_polyvecl *u, const mldsa_polyvecl *v, uint8_t l)
Inner product of L-vectors in NTT domain with accumulation.
void MLDSA_POLYVEC_decompose_k(mldsa_polyveck *v1, mldsa_polyveck *v0, const mldsa_polyveck *v, int32_t gamma2, uint8_t k)
Decompose all polynomials in K-vector.
void MLDSA_POLYVEC_power2round_k(mldsa_polyveck *v1, mldsa_polyveck *v0, const mldsa_polyveck *v, uint8_t k)
Power2round all polynomials in K-vector.
void MLDSA_POLYVEC_invntt_tomont_k(mldsa_polyveck *v, uint8_t k)
Apply inverse NTT to all polynomials in a K-vector.
int MLDSA_POLYVEC_chknorm_l(const mldsa_polyvecl *v, int32_t B, uint8_t l)
Check infinity norm of an L-vector.
void MLDSA_POLYVEC_sub_k(mldsa_polyveck *a, const mldsa_polyveck *b, uint8_t k)
Subtract K-vector b from K-vector a.
int MLDSA_POLYVEC_chknorm_k(const mldsa_polyveck *v, int32_t B, uint8_t k)
Check infinity norm of a K-vector.
void MLDSA_POLYVEC_shiftl_k(mldsa_polyveck *v, uint8_t k)
Shift left all polynomials in K-vector by D bits.
void MLDSA_POLYVEC_reduce_k(mldsa_polyveck *v, uint8_t k)
Apply reduce to all polynomials in a K-vector.
void MLDSA_POLYVEC_ntt_l(mldsa_polyvecl *v, uint8_t l)
Apply NTT to all polynomials in an L-vector.
void MLDSA_POLYVEC_caddq_k(mldsa_polyveck *v, uint8_t k)
Apply caddq to all polynomials in a K-vector.
void MLDSA_ROUNDING_poly_use_hint(mldsa_poly *b, const mldsa_poly *a, const mldsa_poly *h, int32_t gamma2)
Applies use_hint to all coefficients of a polynomial.
void MLDSA_ROUNDING_poly_decompose(mldsa_poly *a1, mldsa_poly *a0, const mldsa_poly *a, int32_t gamma2)
Applies decompose to all coefficients of a polynomial.
uint32_t MLDSA_ROUNDING_make_hint(int32_t a0, int32_t a1, int32_t gamma2)
Compute hint bit. Returns 1 if adding ct0 to w - ct0 would change the high bits (i....
void MLDSA_ROUNDING_poly_power2round(mldsa_poly *a1, mldsa_poly *a0, const mldsa_poly *a)
Applies power2round to all coefficients of a polynomial.
Polynomial with MLDSA_N int32_t coefficients.
Polynomial vector of up to MLDSA_MAX_K polynomials.
mldsa_poly vec[MLDSA_MAX_K]
Polynomial vector of up to MLDSA_MAX_L polynomials.
mldsa_poly vec[MLDSA_MAX_L]