summaryrefslogtreecommitdiff
path: root/tests/pubkey.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2008-11-25 21:09:55 +0000
committerWerner Koch <wk@gnupg.org>2008-11-25 21:09:55 +0000
commita66817e01b68920e7d50b7bd59893ca3b2ee0367 (patch)
tree47182d5a8b558e2174b75b793e891e9474048cf2 /tests/pubkey.c
parent2e6ec80233084146b47cd5f10a9c5762cd30c6ae (diff)
downloadlibgcrypt-a66817e01b68920e7d50b7bd59893ca3b2ee0367.tar.gz
Implement FIPS 186-2 key generation.
Diffstat (limited to 'tests/pubkey.c')
-rw-r--r--tests/pubkey.c42
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;