diff options
Diffstat (limited to 'providers/implementations/keymgmt/ecx_kmgmt.c')
-rw-r--r-- | providers/implementations/keymgmt/ecx_kmgmt.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/providers/implementations/keymgmt/ecx_kmgmt.c b/providers/implementations/keymgmt/ecx_kmgmt.c index 8d82f6bf57..be11f0b85e 100644 --- a/providers/implementations/keymgmt/ecx_kmgmt.c +++ b/providers/implementations/keymgmt/ecx_kmgmt.c @@ -111,26 +111,30 @@ static int ecx_export(void *keydata, int selection, OSSL_CALLBACK *param_cb, void *cbarg) { ECX_KEY *key = keydata; - OSSL_PARAM_BLD tmpl; + OSSL_PARAM_BLD *tmpl; OSSL_PARAM *params = NULL; int ret; if (key == NULL) return 0; - if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0 - && !key_to_params(key, &tmpl)) + tmpl = OSSL_PARAM_BLD_new(); + if (tmpl == NULL) return 0; - OSSL_PARAM_BLD_init(&tmpl); - params = OSSL_PARAM_BLD_to_param(&tmpl); - if (params == NULL) { - OSSL_PARAM_BLD_free(params); + if ((selection & OSSL_KEYMGMT_SELECT_KEYPAIR) != 0 + && !key_to_params(key, tmpl)) { + OSSL_PARAM_BLD_free(tmpl); return 0; } + params = OSSL_PARAM_BLD_to_param(tmpl); + OSSL_PARAM_BLD_free(tmpl); + if (params == NULL) + return 0; + ret = param_cb(params, cbarg); - OSSL_PARAM_BLD_free(params); + OSSL_PARAM_BLD_free_params(params); return ret; } |