Embedded SDK
Embedded SDK
Loading...
Searching...
No Matches
Functions
cx_mlkem_polyvec.c File Reference

ML-KEM polynomial vector operations (FIPS 203). More...

#include "lcx_mlkem.h"
#include "cx_mlkem_polyvec.h"
Include dependency graph for cx_mlkem_polyvec.c:

Go to the source code of this file.

Functions

void MLKEM_POLYVEC_tobytes (uint8_t *r, const polyvec *a, uint8_t k)
 Serializes a polynomial vector to bytes.
 
void MLKEM_POLYVEC_frombytes (polyvec *r, const uint8_t *a, uint8_t k)
 Deserializes a polynomial vector from bytes.
 
void MLKEM_POLYVEC_ntt (polyvec *r, uint8_t k)
 Applies the NTT to each polynomial in a vector.
 
void MLKEM_POLYVEC_invntt_tomont (polyvec *r, uint8_t k)
 Applies the inverse NTT to each polynomial in a vector.
 
void MLKEM_POLYVEC_reduce (polyvec *r, uint8_t k)
 Reduces all coefficients of each polynomial in a vector.
 
void MLKEM_POLYVEC_add (polyvec *r, const polyvec *b, uint8_t k)
 Adds polynomial vector b to r in place.
 
void MLKEM_POLYVEC_tomont (polyvec *r, uint8_t k)
 Converts each polynomial in a vector to Montgomery domain.
 
void MLKEM_POLYVEC_compress (uint8_t *r, const polyvec *a, uint8_t k, uint8_t du)
 Compresses and serializes a polynomial vector.
 
void MLKEM_POLYVEC_decompress (polyvec *r, const uint8_t *a, uint8_t k, uint8_t du)
 Decompresses and deserializes a polynomial vector.
 
void MLKEM_POLYVEC_basemul_acc_montgomery (poly *r, const polyvec *a, const polyvec *b, uint8_t k)
 Accumulated pointwise multiplication of two polynomial vectors in the NTT domain.
 

Detailed Description

ML-KEM polynomial vector operations (FIPS 203).

Implements vector-level wrappers over polynomial operations, including serialization, NTT, reduction, compression/decompression, and accumulated base multiplication.

Definition in file cx_mlkem_polyvec.c.

Function Documentation

◆ MLKEM_POLYVEC_add()

void MLKEM_POLYVEC_add ( polyvec r,
const polyvec b,
uint8_t  k 
)

Adds polynomial vector b to r in place.

Parameters
[in,out]rAccumulator polynomial vector.
[in]bPolynomial vector to add.
[in]kNumber of polynomials in the vectors.

Definition at line 67 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_basemul_acc_montgomery()

void MLKEM_POLYVEC_basemul_acc_montgomery ( poly r,
const polyvec a,
const polyvec b,
uint8_t  k 
)

Accumulated pointwise multiplication of two polynomial vectors in the NTT domain.

Parameters
[out]rResult polynomial (inner product of a and b).
[in]aFirst polynomial vector.
[in]bSecond polynomial vector.
[in]kNumber of polynomials in the vectors.

Definition at line 109 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_compress()

void MLKEM_POLYVEC_compress ( uint8_t *  r,
const polyvec a,
uint8_t  k,
uint8_t  du 
)

Compresses and serializes a polynomial vector.

Parameters
[out]rOutput byte array.
[in]aPolynomial vector to compress.
[in]kNumber of polynomials in the vector.
[in]duCompression parameter (10 or 11).

Definition at line 81 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_decompress()

void MLKEM_POLYVEC_decompress ( polyvec r,
const uint8_t *  a,
uint8_t  k,
uint8_t  du 
)

Decompresses and deserializes a polynomial vector.

Parameters
[out]rOutput polynomial vector.
[in]aInput compressed byte array.
[in]kNumber of polynomials in the vector.
[in]duCompression parameter (10 or 11).

Definition at line 95 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_frombytes()

void MLKEM_POLYVEC_frombytes ( polyvec r,
const uint8_t *  a,
uint8_t  k 
)

Deserializes a polynomial vector from bytes.

Parameters
[out]rOutput polynomial vector.
[in]aInput byte array.
[in]kNumber of polynomials in the vector.

Definition at line 39 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_invntt_tomont()

void MLKEM_POLYVEC_invntt_tomont ( polyvec r,
uint8_t  k 
)

Applies the inverse NTT to each polynomial in a vector.

Parameters
[in,out]rPolynomial vector to transform in place.
[in]kNumber of polynomials in the vector.

Definition at line 53 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_ntt()

void MLKEM_POLYVEC_ntt ( polyvec r,
uint8_t  k 
)

Applies the NTT to each polynomial in a vector.

Parameters
[in,out]rPolynomial vector to transform in place.
[in]kNumber of polynomials in the vector.

Definition at line 46 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_reduce()

void MLKEM_POLYVEC_reduce ( polyvec r,
uint8_t  k 
)

Reduces all coefficients of each polynomial in a vector.

Parameters
[in,out]rPolynomial vector to reduce in place.
[in]kNumber of polynomials in the vector.

Definition at line 60 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_tobytes()

void MLKEM_POLYVEC_tobytes ( uint8_t *  r,
const polyvec a,
uint8_t  k 
)

Serializes a polynomial vector to bytes.

Parameters
[out]rOutput byte array.
[in]aPolynomial vector to serialize.
[in]kNumber of polynomials in the vector.

Definition at line 32 of file cx_mlkem_polyvec.c.

◆ MLKEM_POLYVEC_tomont()

void MLKEM_POLYVEC_tomont ( polyvec r,
uint8_t  k 
)

Converts each polynomial in a vector to Montgomery domain.

Parameters
[in,out]rPolynomial vector to convert in place.
[in]kNumber of polynomials in the vector.

Definition at line 74 of file cx_mlkem_polyvec.c.