diff options
author | Richard Levitte <levitte@openssl.org> | 2019-10-14 10:11:40 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2019-10-17 13:01:14 +0200 |
commit | 073f59c407b06c1b64d84808f1bee9f9457222f9 (patch) | |
tree | 79b0b25f4d90ce3485556271b9eecac17c03d9e0 /crypto/dsa | |
parent | 14e3e00fe2c20a8594e3e20545d9f001fd7fa850 (diff) | |
download | openssl-073f59c407b06c1b64d84808f1bee9f9457222f9.zip openssl-073f59c407b06c1b64d84808f1bee9f9457222f9.tar.gz openssl-073f59c407b06c1b64d84808f1bee9f9457222f9.tar.bz2 |
DSA: Add export of domain parameters to provider
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/10169)
Diffstat (limited to 'crypto/dsa')
-rw-r--r-- | crypto/dsa/dsa_ameth.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/crypto/dsa/dsa_ameth.c b/crypto/dsa/dsa_ameth.c index b72005a..ddd262b 100644 --- a/crypto/dsa/dsa_ameth.c +++ b/crypto/dsa/dsa_ameth.c @@ -533,7 +533,8 @@ static size_t dsa_pkey_dirty_cnt(const EVP_PKEY *pkey) return pkey->pkey.dsa->dirty_cnt; } -static void *dsa_pkey_export_to(const EVP_PKEY *pk, EVP_KEYMGMT *keymgmt) +static void *dsa_pkey_export_to(const EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, + int want_domainparams) { DSA *dsa = pk->pkey.dsa; OSSL_PARAM_BLD tmpl; @@ -541,7 +542,7 @@ static void *dsa_pkey_export_to(const EVP_PKEY *pk, EVP_KEYMGMT *keymgmt) const BIGNUM *q = DSA_get0_q(dsa), *pub_key = DSA_get0_pub_key(dsa); const BIGNUM *priv_key = DSA_get0_priv_key(dsa); OSSL_PARAM *params; - void *provkey = NULL; + void *provdata = NULL; if (p == NULL || q == NULL || g == NULL) return NULL; @@ -552,12 +553,8 @@ static void *dsa_pkey_export_to(const EVP_PKEY *pk, EVP_KEYMGMT *keymgmt) || !ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_FFC_G, g)) return NULL; - /* - * This may be used to pass domain parameters only without any key data - - * so "pub_key" is optional. We can never have a "priv_key" without a - * corresponding "pub_key" though. - */ - if (pub_key != NULL) { + if (!want_domainparams) { + /* A key must at least have a public part. */ if (!ossl_param_bld_push_BN(&tmpl, OSSL_PKEY_PARAM_DSA_PUB_KEY, pub_key)) return NULL; @@ -572,10 +569,12 @@ static void *dsa_pkey_export_to(const EVP_PKEY *pk, EVP_KEYMGMT *keymgmt) params = ossl_param_bld_to_param(&tmpl); /* We export, the provider imports */ - provkey = evp_keymgmt_importkey(keymgmt, params); + provdata = want_domainparams + ? evp_keymgmt_importdomparams(keymgmt, params) + : evp_keymgmt_importkey(keymgmt, params); ossl_param_bld_free(params); - return provkey; + return provdata; } /* NB these are sorted in pkey_id order, lowest first */ |