* Variant-specific constants and structures
* -----------------------------------------
*/
-# define EVP_PKEY_ML_KEM_512 NID_ML_KEM_512
-# define ML_KEM_512_BITS 512
-# define ML_KEM_512_RANK 2
-# define ML_KEM_512_ETA1 3
-# define ML_KEM_512_ETA2 2
-# define ML_KEM_512_DU 10
-# define ML_KEM_512_DV 4
-# define ML_KEM_512_SECBITS 128
+# define EVP_PKEY_ML_KEM_512 NID_ML_KEM_512
+# define ML_KEM_512_BITS 512
+# define ML_KEM_512_RANK 2
+# define ML_KEM_512_ETA1 3
+# define ML_KEM_512_ETA2 2
+# define ML_KEM_512_DU 10
+# define ML_KEM_512_DV 4
+# define ML_KEM_512_SECBITS 128
+# define ML_KEM_512_SECURITY_CATEGORY 1
-# define EVP_PKEY_ML_KEM_768 NID_ML_KEM_768
-# define ML_KEM_768_BITS 768
-# define ML_KEM_768_RANK 3
-# define ML_KEM_768_ETA1 2
-# define ML_KEM_768_ETA2 2
-# define ML_KEM_768_DU 10
-# define ML_KEM_768_DV 4
-# define ML_KEM_768_SECBITS 192
+# define EVP_PKEY_ML_KEM_768 NID_ML_KEM_768
+# define ML_KEM_768_BITS 768
+# define ML_KEM_768_RANK 3
+# define ML_KEM_768_ETA1 2
+# define ML_KEM_768_ETA2 2
+# define ML_KEM_768_DU 10
+# define ML_KEM_768_DV 4
+# define ML_KEM_768_SECBITS 192
+# define ML_KEM_768_SECURITY_CATEGORY 3
-# define EVP_PKEY_ML_KEM_1024 NID_ML_KEM_1024
-# define ML_KEM_1024_BITS 1024
-# define ML_KEM_1024_RANK 4
-# define ML_KEM_1024_ETA1 2
-# define ML_KEM_1024_ETA2 2
-# define ML_KEM_1024_DU 11
-# define ML_KEM_1024_DV 5
-# define ML_KEM_1024_SECBITS 256
+# define EVP_PKEY_ML_KEM_1024 NID_ML_KEM_1024
+# define ML_KEM_1024_BITS 1024
+# define ML_KEM_1024_RANK 4
+# define ML_KEM_1024_ETA1 2
+# define ML_KEM_1024_ETA2 2
+# define ML_KEM_1024_DU 11
+# define ML_KEM_1024_DV 5
+# define ML_KEM_1024_SECBITS 256
+# define ML_KEM_1024_SECURITY_CATEGORY 5
# define ML_KEM_KEY_RANDOM_PCT (1 << 0)
# define ML_KEM_KEY_FIXED_PCT (1 << 1)
int du;
int dv;
int secbits;
+ int security_category;
} ML_KEM_VINFO;
/* Retrive global variant-specific parameters */
OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL),
OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_BITS, NULL),
OSSL_PARAM_int(OSSL_PKEY_PARAM_MAX_SIZE, NULL),
+ OSSL_PARAM_int(OSSL_PKEY_PARAM_SECURITY_CATEGORY, NULL),
/* Exported for import */
OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_ML_KEM_SEED, NULL, 0),
/* Exported to EVP_PKEY_get_raw_private_key() */
if (p != NULL)
if (!OSSL_PARAM_set_int(p, v->ctext_bytes))
return 0;
+ p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_SECURITY_CATEGORY);
+ if (p != NULL)
+ if (!OSSL_PARAM_set_int(p, v->security_category))
+ return 0;
if (ossl_ml_kem_have_pubkey(key)) {
uint8_t *pubenc = NULL;
#endif
#define DECLARE_VARIANT(bits) \
+ static OSSL_FUNC_keymgmt_new_fn ml_kem_##bits##_new; \
+ static OSSL_FUNC_keymgmt_gen_init_fn ml_kem_##bits##_gen_init; \
static void *ml_kem_##bits##_new(void *provctx) \
{ \
return ossl_prov_ml_kem_new(provctx, NULL, EVP_PKEY_ML_KEM_##bits); \