37#define MLKEM_Q_HALF 1665
38#define MLKEM_SYMBYTES 32U
39#define MLKEM_SSBYTES 32U
40#define MLKEM_POLYBYTES 384U
42#define MLKEM_POLYCOMPRESSEDBYTES_D10 320U
43#define MLKEM_POLYCOMPRESSEDBYTES_D11 352U
45#define MLKEM_NUM_PARAM_SETS 3U
54#define MLKEM512_ETA1 3U
55#define MLKEM512_ETA2 2U
56#define MLKEM512_DU 10U
59#define MLKEM512_POLYVECBYTES \
60 (MLKEM512_K * MLKEM_POLYBYTES)
61#define MLKEM512_POLYCOMPRESSEDBYTES_DV 128U
62#define MLKEM512_POLYCOMPRESSEDBYTES_DU 320U
63#define MLKEM512_POLYVECCOMPRESSEDBYTES \
64 (MLKEM512_K * MLKEM512_POLYCOMPRESSEDBYTES_DU)
66#define MLKEM512_INDCPA_PUBLICKEYBYTES \
67 (MLKEM512_POLYVECBYTES + MLKEM_SYMBYTES)
68#define MLKEM512_INDCPA_SECRETKEYBYTES \
71#define MLKEM512_INDCPA_BYTES \
72 (MLKEM512_POLYVECCOMPRESSEDBYTES \
73 + MLKEM512_POLYCOMPRESSEDBYTES_DV)
75#define MLKEM512_PUBLICKEYBYTES \
76 MLKEM512_INDCPA_PUBLICKEYBYTES
77#define MLKEM512_SECRETKEYBYTES \
78 (MLKEM512_INDCPA_SECRETKEYBYTES + MLKEM512_INDCPA_PUBLICKEYBYTES \
79 + (2U * MLKEM_SYMBYTES))
80#define MLKEM512_CIPHERTEXTBYTES MLKEM512_INDCPA_BYTES
89#define MLKEM768_ETA1 2U
90#define MLKEM768_ETA2 2U
91#define MLKEM768_DU 10U
94#define MLKEM768_POLYVECBYTES \
95 (MLKEM768_K * MLKEM_POLYBYTES)
96#define MLKEM768_POLYCOMPRESSEDBYTES_DV 128U
97#define MLKEM768_POLYCOMPRESSEDBYTES_DU 320U
98#define MLKEM768_POLYVECCOMPRESSEDBYTES \
99 (MLKEM768_K * MLKEM768_POLYCOMPRESSEDBYTES_DU)
101#define MLKEM768_INDCPA_PUBLICKEYBYTES \
102 (MLKEM768_POLYVECBYTES + MLKEM_SYMBYTES)
103#define MLKEM768_INDCPA_SECRETKEYBYTES \
104 MLKEM768_POLYVECBYTES
106#define MLKEM768_INDCPA_BYTES \
107 (MLKEM768_POLYVECCOMPRESSEDBYTES \
108 + MLKEM768_POLYCOMPRESSEDBYTES_DV)
110#define MLKEM768_PUBLICKEYBYTES \
111 MLKEM768_INDCPA_PUBLICKEYBYTES
112#define MLKEM768_SECRETKEYBYTES \
113 (MLKEM768_INDCPA_SECRETKEYBYTES + MLKEM768_INDCPA_PUBLICKEYBYTES \
114 + (2U * MLKEM_SYMBYTES))
115#define MLKEM768_CIPHERTEXTBYTES MLKEM768_INDCPA_BYTES
123#define MLKEM1024_K 4U
124#define MLKEM1024_ETA1 2U
125#define MLKEM1024_ETA2 2U
126#define MLKEM1024_DU 11U
127#define MLKEM1024_DV 5U
129#define MLKEM1024_POLYVECBYTES \
130 (MLKEM1024_K * MLKEM_POLYBYTES)
131#define MLKEM1024_POLYCOMPRESSEDBYTES_DV 160U
132#define MLKEM1024_POLYCOMPRESSEDBYTES_DU 352U
133#define MLKEM1024_POLYVECCOMPRESSEDBYTES \
134 (MLKEM1024_K * MLKEM1024_POLYCOMPRESSEDBYTES_DU)
136#define MLKEM1024_INDCPA_PUBLICKEYBYTES \
137 (MLKEM1024_POLYVECBYTES + MLKEM_SYMBYTES)
138#define MLKEM1024_INDCPA_SECRETKEYBYTES \
139 MLKEM1024_POLYVECBYTES
140#define MLKEM1024_INDCPA_BYTES \
141 (MLKEM1024_POLYVECCOMPRESSEDBYTES \
142 + MLKEM1024_POLYCOMPRESSEDBYTES_DV)
144#define MLKEM1024_PUBLICKEYBYTES \
145 MLKEM1024_INDCPA_PUBLICKEYBYTES
146#define MLKEM1024_SECRETKEYBYTES \
147 (MLKEM1024_INDCPA_SECRETKEYBYTES + MLKEM1024_INDCPA_PUBLICKEYBYTES \
148 + (2U * MLKEM_SYMBYTES))
149#define MLKEM1024_CIPHERTEXTBYTES \
150 MLKEM1024_INDCPA_BYTES
154#define MLKEM_MAX_K MLKEM1024_K
#define MLKEM_NUM_PARAM_SETS
struct MLKEM_param_info_s MLKEM_param_info_t
ML-KEM parameter set descriptor holding all derived sizes.
cx_err_t MLKEM_crypto_kem_enc(uint8_t *ct, size_t ct_len, uint8_t *ss, size_t ss_len, const uint8_t *pk, size_t pk_len, MLKEM_param_t param)
ML-KEM encapsulation.
enum MLKEM_param_e MLKEM_param_t
ML-KEM parameter set selector.
cx_err_t MLKEM_crypto_kem_keypair(uint8_t *pk, size_t pk_len, uint8_t *sk, size_t sk_len, MLKEM_param_t param)
Generates an ML-KEM key pair.
const MLKEM_param_info_t MLKEM_PARAM[MLKEM_NUM_PARAM_SETS]
Lookup table of ML-KEM parameter sets indexed by MLKEM_param_t.
cx_err_t MLKEM_crypto_kem_dec(uint8_t *ss, size_t ss_len, const uint8_t *ct, size_t ct_len, const uint8_t *sk, size_t sk_len, MLKEM_param_t param)
ML-KEM decapsulation.
MLKEM_param_e
ML-KEM parameter set selector.
ML-KEM parameter set descriptor holding all derived sizes.
uint16_t poly_compressed_dv_bytes
uint16_t polyvec_compressed_bytes