38#define MLDSA_Q 8380417
40#define MLDSA_SEEDBYTES 32U
41#define MLDSA_CRHBYTES 64U
42#define MLDSA_TRBYTES 64U
43#define MLDSA_RNDBYTES 32U
45#define MLDSA_POLYT1_PACKEDBYTES 320U
46#define MLDSA_POLYT0_PACKEDBYTES 416U
57#define MLDSA44_TAU 39U
58#define MLDSA44_BETA 78U
59#define MLDSA44_GAMMA1 (1 << 17)
60#define MLDSA44_GAMMA2 ((MLDSA_Q - 1) / 88)
61#define MLDSA44_OMEGA 80U
63#define MLDSA44_CTILDEBYTES 32U
64#define MLDSA44_POLYETA_PACKEDBYTES 96U
65#define MLDSA44_POLYZ_PACKEDBYTES 576U
66#define MLDSA44_POLYW1_PACKEDBYTES 192U
68#define MLDSA44_POLYVECH_PACKEDBYTES (MLDSA44_OMEGA + MLDSA44_K)
70#define MLDSA44_PUBLICKEYBYTES \
71 (MLDSA_SEEDBYTES + MLDSA44_K * MLDSA_POLYT1_PACKEDBYTES)
73#define MLDSA44_SECRETKEYBYTES \
74 (2U * MLDSA_SEEDBYTES + MLDSA_TRBYTES + MLDSA44_L * MLDSA44_POLYETA_PACKEDBYTES \
75 + MLDSA44_K * MLDSA44_POLYETA_PACKEDBYTES \
76 + MLDSA44_K * MLDSA_POLYT0_PACKEDBYTES)
78#define MLDSA44_SIGBYTES \
79 (MLDSA44_CTILDEBYTES + MLDSA44_L * MLDSA44_POLYZ_PACKEDBYTES \
80 + MLDSA44_POLYVECH_PACKEDBYTES)
91#define MLDSA65_TAU 49U
92#define MLDSA65_BETA 196U
93#define MLDSA65_GAMMA1 (1 << 19)
94#define MLDSA65_GAMMA2 ((MLDSA_Q - 1) / 32)
95#define MLDSA65_OMEGA 55U
97#define MLDSA65_CTILDEBYTES 48U
98#define MLDSA65_POLYETA_PACKEDBYTES 128U
99#define MLDSA65_POLYZ_PACKEDBYTES 640U
100#define MLDSA65_POLYW1_PACKEDBYTES 128U
102#define MLDSA65_POLYVECH_PACKEDBYTES (MLDSA65_OMEGA + MLDSA65_K)
104#define MLDSA65_PUBLICKEYBYTES \
105 (MLDSA_SEEDBYTES + MLDSA65_K * MLDSA_POLYT1_PACKEDBYTES)
107#define MLDSA65_SECRETKEYBYTES \
108 (2U * MLDSA_SEEDBYTES + MLDSA_TRBYTES + MLDSA65_L * MLDSA65_POLYETA_PACKEDBYTES \
109 + MLDSA65_K * MLDSA65_POLYETA_PACKEDBYTES \
110 + MLDSA65_K * MLDSA_POLYT0_PACKEDBYTES)
112#define MLDSA65_SIGBYTES \
113 (MLDSA65_CTILDEBYTES + MLDSA65_L * MLDSA65_POLYZ_PACKEDBYTES \
114 + MLDSA65_POLYVECH_PACKEDBYTES)
125#define MLDSA87_ETA 2U
126#define MLDSA87_TAU 60U
127#define MLDSA87_BETA 120U
128#define MLDSA87_GAMMA1 (1 << 19)
129#define MLDSA87_GAMMA2 ((MLDSA_Q - 1) / 32)
130#define MLDSA87_OMEGA 75U
132#define MLDSA87_CTILDEBYTES 64U
133#define MLDSA87_POLYETA_PACKEDBYTES 96U
134#define MLDSA87_POLYZ_PACKEDBYTES 640U
135#define MLDSA87_POLYW1_PACKEDBYTES 128U
137#define MLDSA87_POLYVECH_PACKEDBYTES (MLDSA87_OMEGA + MLDSA87_K)
139#define MLDSA87_PUBLICKEYBYTES \
140 (MLDSA_SEEDBYTES + MLDSA87_K * MLDSA_POLYT1_PACKEDBYTES)
142#define MLDSA87_SECRETKEYBYTES \
143 (2U * MLDSA_SEEDBYTES + MLDSA_TRBYTES + MLDSA87_L * MLDSA87_POLYETA_PACKEDBYTES \
144 + MLDSA87_K * MLDSA87_POLYETA_PACKEDBYTES \
145 + MLDSA87_K * MLDSA_POLYT0_PACKEDBYTES)
147#define MLDSA87_SIGBYTES \
148 (MLDSA87_CTILDEBYTES + MLDSA87_L * MLDSA87_POLYZ_PACKEDBYTES \
149 + MLDSA87_POLYVECH_PACKEDBYTES)
156#define MLDSA_MAX_K MLDSA87_K
157#define MLDSA_MAX_L MLDSA87_L
158#define MLDSA_NUM_PARAM_SETS 3U
160#define MLDSA_MAX_K MLDSA65_K
161#define MLDSA_MAX_L MLDSA65_L
162#define MLDSA_NUM_PARAM_SETS 2U
236 size_t *sig_actual_len,
275#define MLDSA_PREHASH_OID_LEN 11U
315 size_t *sig_actual_len,
enum MLDSA_prehash_e MLDSA_prehash_t
Hash algorithm selector for HashML-DSA pre-hash signatures.
MLDSA_prehash_e
Hash algorithm selector for HashML-DSA pre-hash signatures.
const MLDSA_param_info_t MLDSA_PARAM[MLDSA_NUM_PARAM_SETS]
Lookup table of ML-DSA parameter sets indexed by MLDSA_param_t.
enum MLDSA_param_e MLDSA_param_t
ML-DSA parameter set selector.
cx_err_t MLDSA_verify_prehash(const uint8_t *sig, size_t sig_len, const uint8_t *ph, size_t ph_len, const uint8_t *ctx, size_t ctx_len, const uint8_t *pk, size_t pk_len, MLDSA_prehash_t prehash_alg, MLDSA_param_t param)
HashML-DSA pre-hash signature verification (FIPS 204, Algorithm 5).
cx_err_t MLDSA_verify(const uint8_t *sig, size_t sig_len, const uint8_t *msg, size_t msg_len, const uint8_t *ctx, size_t ctx_len, const uint8_t *pk, size_t pk_len, MLDSA_param_t param)
ML-DSA signature verification.
cx_err_t MLDSA_keygen(uint8_t *pk, size_t pk_len, uint8_t *sk, size_t sk_len, MLDSA_param_t param)
Generates an ML-DSA key pair.
cx_err_t MLDSA_sign_prehash(uint8_t *sig, size_t sig_len, size_t *sig_actual_len, const uint8_t *ph, size_t ph_len, const uint8_t *ctx, size_t ctx_len, const uint8_t *sk, size_t sk_len, MLDSA_prehash_t prehash_alg, MLDSA_param_t param)
HashML-DSA pre-hash signature generation (FIPS 204, Algorithm 4).
#define MLDSA_NUM_PARAM_SETS
cx_err_t MLDSA_sign(uint8_t *sig, size_t sig_len, size_t *sig_actual_len, const uint8_t *msg, size_t msg_len, const uint8_t *ctx, size_t ctx_len, const uint8_t *sk, size_t sk_len, MLDSA_param_t param)
ML-DSA signature generation.
MLDSA_param_e
ML-DSA parameter set selector.
struct MLDSA_param_info_s MLDSA_param_info_t
ML-DSA parameter set descriptor holding all derived sizes.
ML-DSA parameter set descriptor holding all derived sizes.
uint16_t polyvech_packed_bytes
uint16_t polyz_packed_bytes
uint16_t polyeta_packed_bytes
uint16_t polyw1_packed_bytes