From: Pauli Date: Mon, 28 Jul 2025 00:11:34 +0000 (+1000) Subject: sm2: update to use generated param decoders for signature operations X-Git-Tag: openssl-3.6.0-alpha1~139 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79197465e3bfc4992a884bc9c21716931c2e4536;p=thirdparty%2Fopenssl.git sm2: update to use generated param decoders for signature operations Reviewed-by: Paul Yang Reviewed-by: Shane Lontis Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/28150) --- diff --git a/providers/implementations/signature/sm2_sig.c.in b/providers/implementations/signature/sm2_sig.c.in index 4da392dad1e..ae2ecef488e 100644 --- a/providers/implementations/signature/sm2_sig.c.in +++ b/providers/implementations/signature/sm2_sig.c.in @@ -6,6 +6,9 @@ * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ +{- +use OpenSSL::paramnames qw(produce_param_decoder); +-} /* * ECDSA low level APIs are deprecated for public use, but still ok for @@ -396,60 +399,60 @@ static void *sm2sig_dupctx(void *vpsm2ctx) return NULL; } +{- produce_param_decoder('sm2sig_get_ctx_params', + (['SIGNATURE_PARAM_ALGORITHM_ID', 'algid', 'octet_string'], + ['SIGNATURE_PARAM_DIGEST_SIZE', 'size', 'size_t'], + ['SIGNATURE_PARAM_DIGEST', 'digest', 'utf8_string'], + )); -} + static int sm2sig_get_ctx_params(void *vpsm2ctx, OSSL_PARAM *params) { PROV_SM2_CTX *psm2ctx = (PROV_SM2_CTX *)vpsm2ctx; - OSSL_PARAM *p; + struct sm2sig_get_ctx_params_st p; - if (psm2ctx == NULL) + if (psm2ctx == NULL || !sm2sig_get_ctx_params_decoder(params, &p)) return 0; - p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_ALGORITHM_ID); - if (p != NULL - && !OSSL_PARAM_set_octet_string(p, + if (p.algid != NULL + && !OSSL_PARAM_set_octet_string(p.algid, psm2ctx->aid_len == 0 ? NULL : psm2ctx->aid_buf, psm2ctx->aid_len)) return 0; - p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_DIGEST_SIZE); - if (p != NULL && !OSSL_PARAM_set_size_t(p, psm2ctx->mdsize)) + if (p.size != NULL && !OSSL_PARAM_set_size_t(p.size, psm2ctx->mdsize)) return 0; - p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_DIGEST); - if (p != NULL && !OSSL_PARAM_set_utf8_string(p, psm2ctx->md == NULL - ? psm2ctx->mdname - : EVP_MD_get0_name(psm2ctx->md))) + if (p.digest != NULL + && !OSSL_PARAM_set_utf8_string(p.digest, psm2ctx->md == NULL + ? psm2ctx->mdname + : EVP_MD_get0_name(psm2ctx->md))) return 0; return 1; } -static const OSSL_PARAM known_gettable_ctx_params[] = { - OSSL_PARAM_octet_string(OSSL_SIGNATURE_PARAM_ALGORITHM_ID, NULL, 0), - OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), - OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), - OSSL_PARAM_END -}; - static const OSSL_PARAM *sm2sig_gettable_ctx_params(ossl_unused void *vpsm2ctx, ossl_unused void *provctx) { - return known_gettable_ctx_params; + return sm2sig_get_ctx_params_list; } +{- produce_param_decoder('sm2sig_set_ctx_params', + (['SIGNATURE_PARAM_DIGEST_SIZE', 'size', 'size_t'], + ['SIGNATURE_PARAM_DIGEST', 'digest', 'utf8_string'], + ['PKEY_PARAM_DIST_ID', 'distid', 'octet_string'], + )); -} + static int sm2sig_set_ctx_params(void *vpsm2ctx, const OSSL_PARAM params[]) { PROV_SM2_CTX *psm2ctx = (PROV_SM2_CTX *)vpsm2ctx; - const OSSL_PARAM *p; + struct sm2sig_set_ctx_params_st p; size_t mdsize; - if (psm2ctx == NULL) + if (psm2ctx == NULL || !sm2sig_set_ctx_params_decoder(params, &p)) return 0; - if (ossl_param_is_empty(params)) - return 1; - p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DIST_ID); - if (p != NULL) { + if (p.distid != NULL) { void *tmp_id = NULL; size_t tmp_idlen = 0; @@ -459,8 +462,8 @@ static int sm2sig_set_ctx_params(void *vpsm2ctx, const OSSL_PARAM params[]) if (!psm2ctx->flag_compute_z_digest) return 0; - if (p->data_size != 0 - && !OSSL_PARAM_get_octet_string(p, &tmp_id, 0, &tmp_idlen)) + if (p.distid->data_size != 0 + && !OSSL_PARAM_get_octet_string(p.distid, &tmp_id, 0, &tmp_idlen)) return 0; OPENSSL_free(psm2ctx->id); psm2ctx->id = tmp_id; @@ -473,16 +476,14 @@ static int sm2sig_set_ctx_params(void *vpsm2ctx, const OSSL_PARAM params[]) * If there is ever any different digest algorithm allowed with SM2 * this needs to be adjusted accordingly. */ - p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_DIGEST_SIZE); - if (p != NULL && (!OSSL_PARAM_get_size_t(p, &mdsize) - || mdsize != psm2ctx->mdsize)) + if (p.size != NULL && (!OSSL_PARAM_get_size_t(p.size, &mdsize) + || mdsize != psm2ctx->mdsize)) return 0; - p = OSSL_PARAM_locate_const(params, OSSL_SIGNATURE_PARAM_DIGEST); - if (p != NULL) { + if (p.digest != NULL) { char *mdname = NULL; - if (!OSSL_PARAM_get_utf8_string(p, &mdname, 0)) + if (!OSSL_PARAM_get_utf8_string(p.digest, &mdname, 0)) return 0; if (!sm2sig_set_mdname(psm2ctx, mdname)) { OPENSSL_free(mdname); @@ -494,17 +495,10 @@ static int sm2sig_set_ctx_params(void *vpsm2ctx, const OSSL_PARAM params[]) return 1; } -static const OSSL_PARAM known_settable_ctx_params[] = { - OSSL_PARAM_size_t(OSSL_SIGNATURE_PARAM_DIGEST_SIZE, NULL), - OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0), - OSSL_PARAM_octet_string(OSSL_PKEY_PARAM_DIST_ID, NULL, 0), - OSSL_PARAM_END -}; - static const OSSL_PARAM *sm2sig_settable_ctx_params(ossl_unused void *vpsm2ctx, ossl_unused void *provctx) { - return known_settable_ctx_params; + return sm2sig_set_ctx_params_list; } static int sm2sig_get_ctx_md_params(void *vpsm2ctx, OSSL_PARAM *params)