summaryrefslogtreecommitdiff
path: root/cipher/ecc.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-10-14 19:48:10 +0200
committerWerner Koch <wk@gnupg.org>2013-10-14 19:48:10 +0200
commitd3a605d7827b8a73ef844e9e5183590bd6b1389a (patch)
tree4f4beae56aeffbcabecfd57c83886f86862dd68c /cipher/ecc.c
parent5be2345ddec4147e535d5b039ee74f84bcacf9e4 (diff)
downloadlibgcrypt-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.c20
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);