]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
digest: convert algorithm gettable parameters to use struct based TRIE decoding
authorPauli <ppzgs1@gmail.com>
Fri, 20 Jun 2025 02:08:13 +0000 (12:08 +1000)
committerPauli <ppzgs1@gmail.com>
Wed, 25 Jun 2025 07:22:07 +0000 (17:22 +1000)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/27859)

providers/implementations/digests/digestcommon.c.in

index 5cd1d1620062eeb77798d427a9095c77de0d8d47..3c4e5f7e32e3214c67a990b2a3f7d3bb417f3af7 100644 (file)
@@ -6,49 +6,52 @@
  * 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/err.h>
 #include <openssl/proverr.h>
 #include "prov/digestcommon.h"
+#include "internal/common.h"
+
+{- produce_param_decoder('digest_default_get_params',
+                         (['DIGEST_PARAM_BLOCK_SIZE',   'bsize',    'size_t'],
+                          ['DIGEST_PARAM_SIZE',         'size',     'size_t'],
+                          ['DIGEST_PARAM_XOF',          'xof',      'int'],
+                          ['DIGEST_PARAM_ALGID_ABSENT', 'aldid',    'int'],
+                         )); -}
 
 int ossl_digest_default_get_params(OSSL_PARAM params[], size_t blksz,
                                    size_t paramsz, unsigned long flags)
 {
-    OSSL_PARAM *p = NULL;
+    struct digest_default_get_params_st p;
+
+    p = digest_default_get_params_decoder(params);
 
-    p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_BLOCK_SIZE);
-    if (p != NULL && !OSSL_PARAM_set_size_t(p, blksz)) {
+    if (p.bsize != NULL && !OSSL_PARAM_set_size_t(p.bsize, blksz)) {
         ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
         return 0;
     }
-    p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_SIZE);
-    if (p != NULL && !OSSL_PARAM_set_size_t(p, paramsz)) {
+    if (p.size != NULL && !OSSL_PARAM_set_size_t(p.size, paramsz)) {
         ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
         return 0;
     }
-    p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_XOF);
-    if (p != NULL
-        && !OSSL_PARAM_set_int(p, (flags & PROV_DIGEST_FLAG_XOF) != 0)) {
+    if (p.xof != NULL
+        && !OSSL_PARAM_set_int(p.xof, (flags & PROV_DIGEST_FLAG_XOF) != 0)) {
         ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
         return 0;
     }
-    p = OSSL_PARAM_locate(params, OSSL_DIGEST_PARAM_ALGID_ABSENT);
-    if (p != NULL
-        && !OSSL_PARAM_set_int(p, (flags & PROV_DIGEST_FLAG_ALGID_ABSENT) != 0)) {
+    if (p.aldid != NULL
+        && !OSSL_PARAM_set_int(p.aldid, (flags & PROV_DIGEST_FLAG_ALGID_ABSENT) != 0)) {
         ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
         return 0;
     }
     return 1;
 }
 
-static const OSSL_PARAM digest_default_known_gettable_params[] = {
-    OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_BLOCK_SIZE, NULL),
-    OSSL_PARAM_size_t(OSSL_DIGEST_PARAM_SIZE, NULL),
-    OSSL_PARAM_int(OSSL_DIGEST_PARAM_XOF, NULL),
-    OSSL_PARAM_int(OSSL_DIGEST_PARAM_ALGID_ABSENT, NULL),
-    OSSL_PARAM_END
-};
 const OSSL_PARAM *ossl_digest_default_gettable_params(void *provctx)
 {
-    return digest_default_known_gettable_params;
+    return digest_default_get_params_list;
 }