diff options
author | Werner Koch <wk@gnupg.org> | 2008-11-25 21:09:55 +0000 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2008-11-25 21:09:55 +0000 |
commit | a66817e01b68920e7d50b7bd59893ca3b2ee0367 (patch) | |
tree | 47182d5a8b558e2174b75b793e891e9474048cf2 /tests/pubkey.c | |
parent | 2e6ec80233084146b47cd5f10a9c5762cd30c6ae (diff) | |
download | libgcrypt-a66817e01b68920e7d50b7bd59893ca3b2ee0367.tar.gz |
Implement FIPS 186-2 key generation.
Diffstat (limited to 'tests/pubkey.c')
-rw-r--r-- | tests/pubkey.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/tests/pubkey.c b/tests/pubkey.c index 6c6d1c67..0e6efd9b 100644 --- a/tests/pubkey.c +++ b/tests/pubkey.c @@ -364,7 +364,7 @@ get_dsa_key_new (gcry_sexp_t *pkey, gcry_sexp_t *skey) rc = gcry_pk_genkey (&key, key_spec); gcry_sexp_release (key_spec); if (rc) - die ("error generating Elgamal key: %s\n", gcry_strerror (rc)); + die ("error generating DSA key: %s\n", gcry_strerror (rc)); if (verbose > 1) show_sexp ("generated DSA key:\n", key); @@ -384,6 +384,37 @@ get_dsa_key_new (gcry_sexp_t *pkey, gcry_sexp_t *skey) static void +get_dsa_key_fips186_new (gcry_sexp_t *pkey, gcry_sexp_t *skey) +{ + gcry_sexp_t key_spec, key, pub_key, sec_key; + int rc; + + rc = gcry_sexp_new + (&key_spec, "(genkey (dsa (nbits 4:1024)(use-fips186)))", 0, 1); + if (rc) + die ("error creating S-expression: %s\n", gcry_strerror (rc)); + rc = gcry_pk_genkey (&key, key_spec); + gcry_sexp_release (key_spec); + if (rc) + die ("error generating DSA key: %s\n", gcry_strerror (rc)); + + if (verbose > 1) + show_sexp ("generated DSA key (fips 186):\n", key); + + pub_key = gcry_sexp_find_token (key, "public-key", 0); + if (!pub_key) + die ("public part missing in key\n"); + + sec_key = gcry_sexp_find_token (key, "private-key", 0); + if (!sec_key) + die ("private part missing in key\n"); + + gcry_sexp_release (key); + *pkey = pub_key; + *skey = sec_key; +} + +static void check_run (void) { gpg_error_t err; @@ -440,6 +471,13 @@ check_run (void) /* Fixme: Add a check function for DSA keys. */ gcry_sexp_release (pkey); gcry_sexp_release (skey); + + if (verbose) + fprintf (stderr, "Generating DSA key (FIPS 186).\n"); + get_dsa_key_fips186_new (&pkey, &skey); + /* Fixme: Add a check function for DSA keys. */ + gcry_sexp_release (pkey); + gcry_sexp_release (skey); } @@ -684,7 +722,7 @@ main (int argc, char **argv) for (i=0; i < 2; i++) check_run (); - for (i=0; i < 4; i++) + for (i=0; i < 4; i++) check_x931_derived_key (i); return 0; |