diff options
author | Shane Lontis <shane.lontis@oracle.com> | 2020-04-15 21:02:52 +1000 |
---|---|---|
committer | Shane Lontis <shane.lontis@oracle.com> | 2020-04-15 21:02:52 +1000 |
commit | b03ec3b5d62ee26bf8437556b9040d4141d5bdd8 (patch) | |
tree | 1f27a892757c24efab70d2fb8f93110f71c0fbb3 /crypto/ffc/ffc_backend.c | |
parent | 09b3654096ed344edd78cf156cb3ddcdbced6f9a (diff) |
Add DSA keygen to provider
Moved some shared FFC code into the FFC files.
Added extra paramgen parameters for seed, gindex.
Fixed bug in ossl_prov util to print bignums.
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/11303)
Diffstat (limited to 'crypto/ffc/ffc_backend.c')
-rw-r--r-- | crypto/ffc/ffc_backend.c | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/crypto/ffc/ffc_backend.c b/crypto/ffc/ffc_backend.c index cde9e43da3..1d076184bc 100644 --- a/crypto/ffc/ffc_backend.c +++ b/crypto/ffc/ffc_backend.c @@ -9,6 +9,7 @@ #include <openssl/core_names.h> #include "internal/ffc.h" +#include "internal/sizes.h" /* * The intention with the "backend" source file is to offer backend support @@ -16,27 +17,75 @@ * implementations alike. */ -int ffc_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]) +int ffc_params_fromdata(FFC_PARAMS *ffc, const OSSL_PARAM params[]) { + const OSSL_PARAM *prm; const OSSL_PARAM *param_p, *param_q, *param_g; - BIGNUM *p = NULL, *q = NULL, *g = NULL; + BIGNUM *p = NULL, *q = NULL, *g = NULL, *j = NULL; +#if 0 + char group_name[OSSL_MAX_NAME_SIZE]; + char *str = group_name; +#endif + int i; if (ffc == NULL) return 0; +/* TODO(3.0) Add for DH PR */ +#if 0 + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_GROUP); + if (prm != NULL) { + if (!OSSL_PARAM_get_utf8_string(prm, &str, sizeof(group_name))) + goto err; + if (!ffc_set_group_pqg(ffc, group_name)) + goto err; + } +#endif param_p = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_P); - param_q = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_Q); param_g = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_G); + param_q = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_Q); if ((param_p != NULL && !OSSL_PARAM_get_BN(param_p, &p)) || (param_q != NULL && !OSSL_PARAM_get_BN(param_q, &q)) || (param_g != NULL && !OSSL_PARAM_get_BN(param_g, &g))) goto err; + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_GINDEX); + if (prm != NULL) { + if (!OSSL_PARAM_get_int(prm, &i)) + goto err; + ffc->gindex = i; + } + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_PCOUNTER); + if (prm != NULL) { + if (!OSSL_PARAM_get_int(prm, &i)) + goto err; + ffc->pcounter = i; + } + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_COFACTOR); + if (prm != NULL) { + if (!OSSL_PARAM_get_BN(prm, &j)) + goto err; + } + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_H); + if (prm != NULL) { + if (!OSSL_PARAM_get_int(prm, &i)) + goto err; + ffc->h = i; + } + prm = OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_FFC_SEED); + if (prm != NULL) { + if (prm->data_type != OSSL_PARAM_OCTET_STRING) + goto err; + if (!ffc_params_set_seed(ffc, prm->data, prm->data_size)) + goto err; + } ffc_params_set0_pqg(ffc, p, q, g); + ffc_params_set0_j(ffc, j); return 1; err: + BN_free(j); BN_free(p); BN_free(q); BN_free(g); |