diff options
author | Werner Koch <wk@gnupg.org> | 2008-11-25 11:05:14 +0000 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2008-11-25 11:05:14 +0000 |
commit | 2e6ec80233084146b47cd5f10a9c5762cd30c6ae (patch) | |
tree | ff9c6882bcf6084555656271673b7ad1626ead0f /tests/pubkey.c | |
parent | 8cc2eb702eeed951907db225f25a1088db4e5c44 (diff) | |
download | libgcrypt-2e6ec80233084146b47cd5f10a9c5762cd30c6ae.tar.gz |
Finished RSA X9.31 key generation.
Diffstat (limited to 'tests/pubkey.c')
-rw-r--r-- | tests/pubkey.c | 94 |
1 files changed, 91 insertions, 3 deletions
diff --git a/tests/pubkey.c b/tests/pubkey.c index d5b0a7ce..6c6d1c67 100644 --- a/tests/pubkey.c +++ b/tests/pubkey.c @@ -266,6 +266,9 @@ get_keys_new (gcry_sexp_t *pkey, gcry_sexp_t *skey) if (rc) die ("error generating RSA key: %s\n", gcry_strerror (rc)); + if (verbose > 1) + show_sexp ("generated RSA key:\n", key); + pub_key = gcry_sexp_find_token (key, "public-key", 0); if (! pub_key) die ("public part missing in key\n"); @@ -281,6 +284,38 @@ get_keys_new (gcry_sexp_t *pkey, gcry_sexp_t *skey) static void +get_keys_x931_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 (rsa (nbits 4:1024)(use-x931)))", 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 RSA key: %s\n", gcry_strerror (rc)); + + if (verbose > 1) + show_sexp ("generated RSA (X9.31) key:\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 get_elg_key_new (gcry_sexp_t *pkey, gcry_sexp_t *skey, int fixed_x) { gcry_sexp_t key_spec, key, pub_key, sec_key; @@ -300,6 +335,40 @@ get_elg_key_new (gcry_sexp_t *pkey, gcry_sexp_t *skey, int fixed_x) if (rc) die ("error generating Elgamal key: %s\n", gcry_strerror (rc)); + if (verbose > 1) + show_sexp ("generated ELG key:\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 +get_dsa_key_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)))", 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 Elgamal key: %s\n", gcry_strerror (rc)); + + if (verbose > 1) + show_sexp ("generated DSA key:\n", key); + pub_key = gcry_sexp_find_token (key, "public-key", 0); if (!pub_key) die ("public part missing in key\n"); @@ -345,6 +414,13 @@ check_run (void) gcry_sexp_release (skey); if (verbose) + fprintf (stderr, "Checking generated RSA key (X9.31).\n"); + get_keys_x931_new (&pkey, &skey); + check_keys (pkey, skey, 800, 0); + gcry_sexp_release (pkey); + gcry_sexp_release (skey); + + if (verbose) fprintf (stderr, "Checking generated Elgamal key.\n"); get_elg_key_new (&pkey, &skey, 0); check_keys (pkey, skey, 400, 0); @@ -357,6 +433,13 @@ check_run (void) check_keys (pkey, skey, 800, 0); gcry_sexp_release (pkey); gcry_sexp_release (skey); + + if (verbose) + fprintf (stderr, "Generating DSA key.\n"); + get_dsa_key_new (&pkey, &skey); + /* Fixme: Add a check function for DSA keys. */ + gcry_sexp_release (pkey); + gcry_sexp_release (skey); } @@ -377,6 +460,7 @@ key_param_from_sexp (gcry_sexp_t sexp, const char *topname, const char *name) gcry_sexp_release (l1); return NULL; } + result = gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_USG); gcry_sexp_release (l2); gcry_sexp_release (l1); @@ -552,8 +636,9 @@ check_x931_derived_key (int what) if (err) die ("error converting string [%d]\n", what); - if (verbose) - show_sexp ("generated private key:\n", sec_key); + if (verbose > 1) + show_sexp ("generated key:\n", key); + d_have = key_param_from_sexp (sec_key, "rsa", "d"); if (!d_have) die ("parameter d not found in RSA secret key [%d]\n", what); @@ -582,7 +667,10 @@ main (int argc, char **argv) if (argc > 1 && !strcmp (argv[1], "--verbose")) verbose = 1; else if (argc > 1 && !strcmp (argv[1], "--debug")) - verbose = debug = 1; + { + verbose = 2; + debug = 1; + } gcry_control (GCRYCTL_DISABLE_SECMEM, 0); if (!gcry_check_version (GCRYPT_VERSION)) |