diff options
author | Werner Koch <wk@gnupg.org> | 2013-10-14 19:48:10 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2013-10-14 19:48:10 +0200 |
commit | d3a605d7827b8a73ef844e9e5183590bd6b1389a (patch) | |
tree | 4f4beae56aeffbcabecfd57c83886f86862dd68c /cipher/ecc.c | |
parent | 5be2345ddec4147e535d5b039ee74f84bcacf9e4 (diff) | |
download | libgcrypt-d3a605d7827b8a73ef844e9e5183590bd6b1389a.tar.gz |
pubkey: Support flags list in gcry_pk_genkey.
* src/cipher.h (PUBKEY_FLAG_TRANSIENT_KEY): New.
(PUBKEY_FLAG_USE_X931): New.
(PUBKEY_FLAG_USE_FIPS186): New.
(PUBKEY_FLAG_USE_FIPS186_2): New.
* cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Rename from
parse_flags_list. Parse new flags.
* cipher/dsa.c (dsa_generate): Support flag list.
* cipher/ecc.c (ecc_generate): Ditto.
* cipher/rsa.c (rsa_generate): Ditto.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'cipher/ecc.c')
-rw-r--r-- | cipher/ecc.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/cipher/ecc.c b/cipher/ecc.c index bd4d2539..da384e87 100644 --- a/cipher/ecc.c +++ b/cipher/ecc.c @@ -1247,13 +1247,13 @@ ecc_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey) gcry_mpi_t y = NULL; char *curve_name = NULL; gcry_sexp_t l1; - int transient_key = 0; gcry_random_level_t random_level; mpi_ec_t ctx = NULL; gcry_sexp_t curve_info = NULL; gcry_mpi_t base = NULL; gcry_mpi_t public = NULL; gcry_mpi_t secret = NULL; + int flags = 0; memset (&E, 0, sizeof E); memset (&sk, 0, sizeof sk); @@ -1276,10 +1276,20 @@ ecc_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey) l1 = gcry_sexp_find_token (genparms, "transient-key", 0); if (l1) { - transient_key = 1; + flags |= PUBKEY_FLAG_TRANSIENT_KEY; gcry_sexp_release (l1); } + /* Parse the optional flags list. */ + l1 = gcry_sexp_find_token (genparms, "flags", 0); + if (l1) + { + rc = _gcry_pk_util_parse_flaglist (l1, &flags, NULL); + gcry_sexp_release (l1); + if (rc) + goto leave; + } + /* NBITS is required if no curve name has been given. */ if (!nbits && !curve_name) return GPG_ERR_NO_OBJ; /* No NBITS parameter. */ @@ -1303,7 +1313,11 @@ ecc_generate (const gcry_sexp_t genparms, gcry_sexp_t *r_skey) log_printpnt ("ecgen curve G", &E.G, NULL); } - random_level = transient_key ? GCRY_STRONG_RANDOM : GCRY_VERY_STRONG_RANDOM; + if ((flags & PUBKEY_FLAG_TRANSIENT_KEY)) + random_level = GCRY_STRONG_RANDOM; + else + random_level = GCRY_VERY_STRONG_RANDOM; + ctx = _gcry_mpi_ec_p_internal_new (E.model, E.dialect, E.p, E.a, E.b); x = mpi_new (0); y = mpi_new (0); |