From d1d94e0fbe2fe2b99314bfcddad092d1d00f01b0 Mon Sep 17 00:00:00 2001 From: Pauli Date: Tue, 22 Jul 2025 09:48:10 +1000 Subject: [PATCH] skey: convert generic SKEY to use generated param parser Reviewed-by: Matt Caswell Reviewed-by: Dmitry Belyavskiy (Merged from https://github.com/openssl/openssl/pull/28144) --- .../{skeymgmt => include/prov}/skeymgmt_lcl.h | 0 .../implementations/skeymgmt/aes_skmgmt.c | 2 +- .../skeymgmt/{generic.c => generic.c.in} | 34 ++++++++++++------- 3 files changed, 22 insertions(+), 14 deletions(-) rename providers/implementations/{skeymgmt => include/prov}/skeymgmt_lcl.h (100%) rename providers/implementations/skeymgmt/{generic.c => generic.c.in} (75%) diff --git a/providers/implementations/skeymgmt/skeymgmt_lcl.h b/providers/implementations/include/prov/skeymgmt_lcl.h similarity index 100% rename from providers/implementations/skeymgmt/skeymgmt_lcl.h rename to providers/implementations/include/prov/skeymgmt_lcl.h diff --git a/providers/implementations/skeymgmt/aes_skmgmt.c b/providers/implementations/skeymgmt/aes_skmgmt.c index 17be480131f..b59ea844857 100644 --- a/providers/implementations/skeymgmt/aes_skmgmt.c +++ b/providers/implementations/skeymgmt/aes_skmgmt.c @@ -9,7 +9,7 @@ #include #include "crypto/types.h" -#include "skeymgmt_lcl.h" +#include "prov/skeymgmt_lcl.h" #include "internal/skey.h" #include "prov/implementations.h" diff --git a/providers/implementations/skeymgmt/generic.c b/providers/implementations/skeymgmt/generic.c.in similarity index 75% rename from providers/implementations/skeymgmt/generic.c rename to providers/implementations/skeymgmt/generic.c.in index 5fb3fad7e3b..5f644c9194b 100644 --- a/providers/implementations/skeymgmt/generic.c +++ b/providers/implementations/skeymgmt/generic.c.in @@ -6,15 +6,20 @@ * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +{- +use OpenSSL::paramnames qw(produce_param_decoder); +-} +#include #include #include #include "crypto/types.h" +#include "internal/cryptlib.h" #include "internal/skey.h" #include "prov/provider_ctx.h" #include "prov/providercommon.h" #include "prov/implementations.h" -#include "skeymgmt_lcl.h" +#include "prov/skeymgmt_lcl.h" void generic_free(void *keydata) { @@ -23,14 +28,18 @@ void generic_free(void *keydata) if (generic == NULL) return; - OPENSSL_free(generic->data); + OPENSSL_clear_free(generic->data, generic->length); OPENSSL_free(generic); } +{- produce_param_decoder('generic_skey_import', + (['SKEY_PARAM_RAW_BYTES', 'raw_bytes', 'octet_string'], + )); -} + void *generic_import(void *provctx, int selection, const OSSL_PARAM params[]) { OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(provctx); - const OSSL_PARAM *raw_bytes; + struct generic_skey_import_st p; PROV_SKEY *generic = NULL; int ok = 0; @@ -40,8 +49,11 @@ void *generic_import(void *provctx, int selection, const OSSL_PARAM params[]) if ((selection & OSSL_SKEYMGMT_SELECT_SECRET_KEY) == 0) return NULL; - raw_bytes = OSSL_PARAM_locate_const(params, OSSL_SKEY_PARAM_RAW_BYTES); - if (raw_bytes == NULL) + if (!generic_skey_import_decoder(params, &p)) + return NULL; + + if (p.raw_bytes == NULL + || p.raw_bytes->data_type != OSSL_PARAM_OCTET_STRING) return NULL; generic = OPENSSL_zalloc(sizeof(PROV_SKEY)); @@ -52,9 +64,10 @@ void *generic_import(void *provctx, int selection, const OSSL_PARAM params[]) generic->type = SKEY_TYPE_GENERIC; - if ((generic->data = OPENSSL_memdup(raw_bytes->data, raw_bytes->data_size)) == NULL) + if ((generic->data = OPENSSL_memdup(p.raw_bytes->data, + p.raw_bytes->data_size)) == NULL) goto end; - generic->length = raw_bytes->data_size; + generic->length = p.raw_bytes->data_size; ok = 1; end: @@ -65,14 +78,9 @@ end: return generic; } -static const OSSL_PARAM generic_import_params[] = { - OSSL_PARAM_octet_string(OSSL_SKEY_PARAM_RAW_BYTES, NULL, 0), - OSSL_PARAM_END -}; - const OSSL_PARAM *generic_imp_settable_params(void *provctx) { - return generic_import_params; + return generic_skey_import_list; } int generic_export(void *keydata, int selection, -- 2.47.2