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

ML-DSA packing/unpacking operations (FIPS 204). More...

#include <string.h>
#include "cx_mldsa_packing.h"
Include dependency graph for cx_mldsa_packing.c:

Go to the source code of this file.

Functions

void MLDSA_PACK_polyt1 (uint8_t r[MLDSA_POLYT1_PACKEDBYTES], const mldsa_poly *a)
 Bit-pack polynomial with coefficients a1 from power2round (10-bit values). Each coefficient uses 10 bits.
 
void MLDSA_PACK_unpack_polyt1 (mldsa_poly *r, const uint8_t a[MLDSA_POLYT1_PACKEDBYTES])
 Unpack polynomial t1 from bytes.
 
void MLDSA_PACK_polyt0 (uint8_t r[MLDSA_POLYT0_PACKEDBYTES], const mldsa_poly *a)
 Bit-pack polynomial with coefficients a0 from power2round. Coefficients in (-(2^{D-1}-1), 2^{D-1}], using 13 bits.
 
void MLDSA_PACK_unpack_polyt0 (mldsa_poly *r, const uint8_t a[MLDSA_POLYT0_PACKEDBYTES])
 Unpack polynomial t0 from bytes.
 
uint32_t MLDSA_PACK_polyeta (uint8_t *r, const mldsa_poly *a, uint8_t eta)
 Bit-pack polynomial with coefficients in [-eta, eta].
 
uint32_t MLDSA_PACK_unpack_polyeta (mldsa_poly *r, const uint8_t *a, uint8_t eta)
 Unpack polynomial with coefficients in [-eta, eta].
 
uint32_t MLDSA_PACK_polyz (uint8_t *r, const mldsa_poly *a, int32_t gamma1)
 Bit-pack polynomial z with coefficients in [-(gamma1-1), gamma1].
 
uint32_t MLDSA_PACK_unpack_polyz (mldsa_poly *r, const uint8_t *a, int32_t gamma1)
 Unpack polynomial z.
 
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_PACK_pk (uint8_t *pk, const uint8_t rho[MLDSA_SEEDBYTES], const mldsa_poly *t1, const MLDSA_param_info_t *p)
 Pack the public key (rho || t1).
 
void MLDSA_PACK_unpack_pk (uint8_t rho[MLDSA_SEEDBYTES], mldsa_poly *t1, const uint8_t *pk, const MLDSA_param_info_t *p)
 Unpack the public key.
 
void MLDSA_PACK_sk (uint8_t *sk, const uint8_t rho[MLDSA_SEEDBYTES], const uint8_t K[MLDSA_SEEDBYTES], const uint8_t tr[MLDSA_TRBYTES], const mldsa_poly *s1, const mldsa_poly *s2, const mldsa_poly *t0, const MLDSA_param_info_t *p)
 Pack the secret key (rho || K || tr || s1 || s2 || t0).
 
void MLDSA_PACK_unpack_sk (uint8_t rho[MLDSA_SEEDBYTES], uint8_t K[MLDSA_SEEDBYTES], uint8_t tr[MLDSA_TRBYTES], mldsa_poly *s1, mldsa_poly *s2, mldsa_poly *t0, const uint8_t *sk, const MLDSA_param_info_t *p)
 Unpack the secret key.
 
void MLDSA_PACK_sig (uint8_t *sig, const uint8_t *ctilde, const mldsa_poly *z, const mldsa_poly *h, const MLDSA_param_info_t *p)
 Pack signature (c_tilde || z || h).
 
int MLDSA_PACK_unpack_sig (uint8_t *ctilde, mldsa_poly *z, mldsa_poly *h, const uint8_t *sig, const MLDSA_param_info_t *p)
 Unpack signature.
 

Detailed Description

ML-DSA packing/unpacking operations (FIPS 204).

Definition in file cx_mldsa_packing.c.

Function Documentation

◆ MLDSA_PACK_pk()

void MLDSA_PACK_pk ( uint8_t *  pk,
const uint8_t  rho[MLDSA_SEEDBYTES],
const mldsa_poly t1,
const MLDSA_param_info_t p 
)

Pack the public key (rho || t1).

Parameters
[out]pkOutput byte array.
[in]rhoSeed of MLDSA_SEEDBYTES bytes.
[in]t1Array of k polynomials.
[in]pParameter info.

Definition at line 321 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_polyeta()

uint32_t MLDSA_PACK_polyeta ( uint8_t *  r,
const mldsa_poly a,
uint8_t  eta 
)

Bit-pack polynomial with coefficients in [-eta, eta].

Parameters
[out]rOutput byte array.
[in]aInput polynomial.
[in]etaRange parameter (2 or 4).
Returns
Number of bytes written.

Definition at line 140 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_polyt0()

void MLDSA_PACK_polyt0 ( uint8_t  r[MLDSA_POLYT0_PACKEDBYTES],
const mldsa_poly a 
)

Bit-pack polynomial with coefficients a0 from power2round. Coefficients in (-(2^{D-1}-1), 2^{D-1}], using 13 bits.

Parameters
[out]rOutput byte array (MLDSA_POLYT0_PACKEDBYTES bytes).
[in]aInput polynomial.

Definition at line 58 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_polyt1()

void MLDSA_PACK_polyt1 ( uint8_t  r[MLDSA_POLYT1_PACKEDBYTES],
const mldsa_poly a 
)

Bit-pack polynomial with coefficients a1 from power2round (10-bit values). Each coefficient uses 10 bits.

Parameters
[out]rOutput byte array (MLDSA_POLYT1_PACKEDBYTES bytes).
[in]aInput polynomial.

Definition at line 27 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_polyw1()

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.

Parameters
[out]rOutput byte array.
[in]aInput polynomial.
[in]gamma2Low-order rounding range.
Returns
Number of bytes written.

Definition at line 296 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_polyz()

uint32_t MLDSA_PACK_polyz ( uint8_t *  r,
const mldsa_poly a,
int32_t  gamma1 
)

Bit-pack polynomial z with coefficients in [-(gamma1-1), gamma1].

Parameters
[out]rOutput byte array.
[in]aInput polynomial.
[in]gamma1Coefficient range.
Returns
Number of bytes written.

Definition at line 207 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_sig()

void MLDSA_PACK_sig ( uint8_t *  sig,
const uint8_t *  ctilde,
const mldsa_poly z,
const mldsa_poly h,
const MLDSA_param_info_t p 
)

Pack signature (c_tilde || z || h).

Parameters
[out]sigSignature output.
[in]ctildeChallenge hash.
[in]zArray of l polynomials.
[in]hArray of k polynomials (hint).
[in]pParameter info.

Definition at line 418 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_sk()

void MLDSA_PACK_sk ( uint8_t *  sk,
const uint8_t  rho[MLDSA_SEEDBYTES],
const uint8_t  K[MLDSA_SEEDBYTES],
const uint8_t  tr[MLDSA_TRBYTES],
const mldsa_poly s1,
const mldsa_poly s2,
const mldsa_poly t0,
const MLDSA_param_info_t p 
)

Pack the secret key (rho || K || tr || s1 || s2 || t0).

Parameters
[out]skOutput byte array.
[in]rhoSeed of MLDSA_SEEDBYTES bytes.
[in]KKey seed of MLDSA_SEEDBYTES bytes.
[in]trHash of MLDSA_TRBYTES bytes.
[in]s1Array of l polynomials.
[in]s2Array of k polynomials.
[in]t0Array of k polynomials.
[in]pParameter info.

Definition at line 343 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_pk()

void MLDSA_PACK_unpack_pk ( uint8_t  rho[MLDSA_SEEDBYTES],
mldsa_poly t1,
const uint8_t *  pk,
const MLDSA_param_info_t p 
)

Unpack the public key.

Parameters
[out]rhoSeed output.
[out]t1Array of k polynomials output.
[in]pkPacked public key.
[in]pParameter info.

Definition at line 332 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_polyeta()

uint32_t MLDSA_PACK_unpack_polyeta ( mldsa_poly r,
const uint8_t *  a,
uint8_t  eta 
)

Unpack polynomial with coefficients in [-eta, eta].

Parameters
[out]rOutput polynomial.
[in]aInput byte array.
[in]etaRange parameter (2 or 4).
Returns
Number of bytes consumed.

Definition at line 167 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_polyt0()

void MLDSA_PACK_unpack_polyt0 ( mldsa_poly r,
const uint8_t  a[MLDSA_POLYT0_PACKEDBYTES] 
)

Unpack polynomial t0 from bytes.

Parameters
[out]rOutput polynomial.
[in]aInput byte array.

Definition at line 94 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_polyt1()

void MLDSA_PACK_unpack_polyt1 ( mldsa_poly r,
const uint8_t  a[MLDSA_POLYT1_PACKEDBYTES] 
)

Unpack polynomial t1 from bytes.

Parameters
[out]rOutput polynomial.
[in]aInput byte array.

Definition at line 41 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_polyz()

uint32_t MLDSA_PACK_unpack_polyz ( mldsa_poly r,
const uint8_t *  a,
int32_t  gamma1 
)

Unpack polynomial z.

Parameters
[out]rOutput polynomial.
[in]aInput byte array.
[in]gamma1Coefficient range.
Returns
Number of bytes consumed.

Definition at line 247 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_sig()

int MLDSA_PACK_unpack_sig ( uint8_t *  ctilde,
mldsa_poly z,
mldsa_poly h,
const uint8_t *  sig,
const MLDSA_param_info_t p 
)

Unpack signature.

Parameters
[out]ctildeChallenge hash output.
[out]zArray of l polynomials output.
[out]hArray of k polynomials (hint) output.
[in]sigPacked signature.
[in]pParameter info.
Returns
0 on success, 1 if hint encoding is invalid.

Definition at line 451 of file cx_mldsa_packing.c.

◆ MLDSA_PACK_unpack_sk()

void MLDSA_PACK_unpack_sk ( uint8_t  rho[MLDSA_SEEDBYTES],
uint8_t  K[MLDSA_SEEDBYTES],
uint8_t  tr[MLDSA_TRBYTES],
mldsa_poly s1,
mldsa_poly s2,
mldsa_poly t0,
const uint8_t *  sk,
const MLDSA_param_info_t p 
)

Unpack the secret key.

Parameters
[out]rhoSeed output.
[out]KKey seed output.
[out]trHash output.
[out]s1Array of l polynomials output.
[out]s2Array of k polynomials output.
[out]t0Array of k polynomials output.
[in]skPacked secret key.
[in]pParameter info.

Definition at line 379 of file cx_mldsa_packing.c.