]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
skey: convert generic SKEY to use generated param parser
authorPauli <ppzgs1@gmail.com>
Mon, 21 Jul 2025 23:48:10 +0000 (09:48 +1000)
committerPauli <ppzgs1@gmail.com>
Thu, 31 Jul 2025 22:38:34 +0000 (08:38 +1000)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/28144)

providers/implementations/include/prov/skeymgmt_lcl.h [moved from providers/implementations/skeymgmt/skeymgmt_lcl.h with 100% similarity]
providers/implementations/skeymgmt/aes_skmgmt.c
providers/implementations/skeymgmt/generic.c.in [moved from providers/implementations/skeymgmt/generic.c with 75% similarity]

index 17be480131fa49bababfd2faa7786f1f3e7e73bb..b59ea844857b2dd38688c51d88be04cdd0f1de74 100644 (file)
@@ -9,7 +9,7 @@
 
 #include <openssl/core_dispatch.h>
 #include "crypto/types.h"
-#include "skeymgmt_lcl.h"
+#include "prov/skeymgmt_lcl.h"
 #include "internal/skey.h"
 #include "prov/implementations.h"
 
similarity index 75%
rename from providers/implementations/skeymgmt/generic.c
rename to providers/implementations/skeymgmt/generic.c.in
index 5fb3fad7e3b11e7fad85f561cfe3ffb52e145a08..5f644c9194b2dd1e762ee0d71d28bf180872a071 100644 (file)
@@ -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 <string.h>
 #include <openssl/core_dispatch.h>
 #include <openssl/core_names.h>
 #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,