@@ -28,9 +28,15 @@ typedef struct
2828 SCOSSL_MLKEM_KEY_CTX * keyCtx ;
2929} SCOSSL_MLKEM_CTX ;
3030
31- static const OSSL_PARAM p_scossl_mlkem_param_types [] = {
31+ static const OSSL_PARAM p_scossl_mlkem_settable_param_types [] = {
32+ OSSL_PARAM_octet_string (OSSL_KEM_PARAM_IKME , NULL , 0 ),
3233 OSSL_PARAM_END };
3334
35+ static const OSSL_PARAM p_scossl_mlkem_gettable_param_types [] = {
36+ OSSL_PARAM_END };
37+
38+ static SCOSSL_STATUS p_scossl_mlkem_set_ctx_params (_In_ SCOSSL_MLKEM_CTX * ctx , _In_ const OSSL_PARAM params []);
39+
3440/* Context management */
3541static SCOSSL_MLKEM_CTX * p_scossl_mlkem_newctx (ossl_unused SCOSSL_PROVCTX * provctx )
3642{
@@ -86,7 +92,12 @@ static SCOSSL_STATUS p_scossl_mlkem_init(_Inout_ SCOSSL_MLKEM_CTX *ctx, _In_ SCO
8692static SCOSSL_STATUS p_scossl_mlkem_encapsulate_init (_Inout_ SCOSSL_MLKEM_CTX * ctx , _In_ SCOSSL_MLKEM_KEY_CTX * keyCtx ,
8793 ossl_unused const OSSL_PARAM params [])
8894{
89- return p_scossl_mlkem_init (ctx , keyCtx , EVP_PKEY_OP_ENCAPSULATE );
95+ if (p_scossl_mlkem_init (ctx , keyCtx , EVP_PKEY_OP_ENCAPSULATE ) != SCOSSL_SUCCESS )
96+ {
97+ return SCOSSL_FAILURE ;
98+ }
99+
100+ return p_scossl_mlkem_set_ctx_params (ctx , params );
90101}
91102
92103static SCOSSL_STATUS p_scossl_mlkem_encapsulate (_In_ SCOSSL_MLKEM_CTX * ctx ,
@@ -248,16 +259,35 @@ static SCOSSL_STATUS p_scossl_mlkem_decapsulate(_In_ SCOSSL_MLKEM_CTX *ctx,
248259//
249260// Parameters
250261//
251- static const OSSL_PARAM * p_scossl_mlkem_ctx_param_types (ossl_unused void * ctx , ossl_unused void * provctx )
262+ static const OSSL_PARAM * p_scossl_mlkem_settable_ctx_param_types (ossl_unused void * ctx , ossl_unused void * provctx )
252263{
253- return p_scossl_mlkem_param_types ;
264+ return p_scossl_mlkem_settable_param_types ;
254265}
255266
256- static SCOSSL_STATUS p_scossl_mlkem_set_ctx_params (ossl_unused void * ctx , ossl_unused const OSSL_PARAM params [])
267+ static SCOSSL_STATUS p_scossl_mlkem_set_ctx_params (_In_ SCOSSL_MLKEM_CTX * ctx , _In_ const OSSL_PARAM params [])
257268{
269+ const OSSL_PARAM * p ;
270+
271+ if (ctx == NULL )
272+ {
273+ return SCOSSL_FAILURE ;
274+ }
275+
276+ if (ctx -> operation == EVP_PKEY_OP_ENCAPSULATE &&
277+ (p = OSSL_PARAM_locate_const (params , OSSL_KEM_PARAM_IKME )) != NULL )
278+ {
279+ ERR_raise (ERR_LIB_PROV , PROV_R_NOT_SUPPORTED );
280+ return SCOSSL_FAILURE ;
281+ }
282+
258283 return SCOSSL_SUCCESS ;
259284}
260285
286+ static const OSSL_PARAM * p_scossl_mlkem_gettable_ctx_param_types (ossl_unused void * ctx , ossl_unused void * provctx )
287+ {
288+ return p_scossl_mlkem_gettable_param_types ;
289+ }
290+
261291static SCOSSL_STATUS p_scossl_mlkem_get_ctx_params (ossl_unused void * ctx , ossl_unused OSSL_PARAM params [])
262292{
263293 return SCOSSL_SUCCESS ;
@@ -271,10 +301,10 @@ const OSSL_DISPATCH p_scossl_mlkem_functions[] = {
271301 {OSSL_FUNC_KEM_ENCAPSULATE , (void (* )(void ))p_scossl_mlkem_encapsulate },
272302 {OSSL_FUNC_KEM_DECAPSULATE_INIT , (void (* )(void ))p_scossl_mlkem_decapsulate_init },
273303 {OSSL_FUNC_KEM_DECAPSULATE , (void (* )(void ))p_scossl_mlkem_decapsulate },
304+ {OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_settable_ctx_param_types },
274305 {OSSL_FUNC_KEM_SET_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_set_ctx_params },
275- {OSSL_FUNC_KEM_SETTABLE_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_ctx_param_types },
306+ {OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_gettable_ctx_param_types },
276307 {OSSL_FUNC_KEM_GET_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_get_ctx_params },
277- {OSSL_FUNC_KEM_GETTABLE_CTX_PARAMS , (void (* )(void ))p_scossl_mlkem_ctx_param_types },
278308 {0 , NULL }};
279309
280310_Use_decl_annotations_
0 commit comments