aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keygen.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/keygen.c')
-rw-r--r--g10/keygen.c48
1 files changed, 30 insertions, 18 deletions
diff --git a/g10/keygen.c b/g10/keygen.c
index 1a0130072..af288b3aa 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -29,7 +29,6 @@
#include <gcrypt.h>
#include "main.h"
#include "packet.h"
-#include "dummy-cipher.h"
#include "ttyio.h"
#include "options.h"
#include "keydb.h"
@@ -296,8 +295,6 @@ gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
algo == GCRY_PK_ELG ? "elg" : "x-oops",0),
gcry_sexp_new_name_data( "nbits", buf, 0 ) )
);
- log_debug("input is:\n");
- gcry_sexp_dump( s_parms );
rc = gcry_pk_genkey( &s_key, s_parms );
gcry_sexp_release( s_parms );
@@ -305,8 +302,6 @@ gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
log_error("pk_genkey failed: %s\n", gpg_errstr(rc) );
return rc;
}
- log_debug("output is:\n");
- gcry_sexp_dump( s_key );
sk = gcry_xcalloc( 1, sizeof *sk );
pk = gcry_xcalloc( 1, sizeof *pk );
@@ -385,16 +380,23 @@ gen_dsa(unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
PACKET *pkt;
PKT_secret_key *sk;
PKT_public_key *pk;
- MPI skey[5];
MPI *factors;
+ char buf[100];
+ GCRY_SEXP s_parms, s_key;
if( nbits > 1024 )
nbits = 1024;
- /*rc = pubkey_generate( GCRY_PK_DSA, nbits, skey, &factors );*/
- rc = gcry_pk_genkey( NULL, NULL );
+ sprintf(buf, "%u", nbits );
+ s_parms = SEXP_CONS( SEXP_NEW( "genkey", 0 ),
+ SEXP_CONS( SEXP_NEW("dsa",0),
+ gcry_sexp_new_name_data( "nbits", buf, 0 ) )
+ );
+
+ rc = gcry_pk_genkey( &s_key, s_parms );
+ gcry_sexp_release( s_parms );
if( rc ) {
- log_error("pubkey_generate failed: %s\n", gpg_errstr(rc) );
+ log_error("pk_genkey failed: %s\n", gpg_errstr(rc) );
return rc;
}
@@ -406,15 +408,23 @@ gen_dsa(unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
sk->expiredate = pk->expiredate = sk->timestamp + expireval;
}
sk->pubkey_algo = pk->pubkey_algo = GCRY_PK_DSA;
- pk->pkey[0] = mpi_copy( skey[0] );
- pk->pkey[1] = mpi_copy( skey[1] );
- pk->pkey[2] = mpi_copy( skey[2] );
- pk->pkey[3] = mpi_copy( skey[3] );
- sk->skey[0] = skey[0];
- sk->skey[1] = skey[1];
- sk->skey[2] = skey[2];
- sk->skey[3] = skey[3];
- sk->skey[4] = skey[4];
+
+ rc = key_from_sexp( pk->pkey, s_key, "public-key", "pqgy" );
+ if( rc ) {
+ log_error("key_from_sexp failed: rc=%d\n", rc );
+ return rc;
+ }
+ rc = key_from_sexp( sk->skey, s_key, "private-key", "pqgyx" );
+ if( rc ) {
+ log_error("key_from_sexp failed: rc=%d\n", rc );
+ return rc;
+ }
+ rc = factors_from_sexp( &factors, s_key );
+ if( rc ) {
+ log_error("factors_from_sexp failed: rc=%d\n", rc );
+ return rc;
+ }
+
sk->is_protected = 0;
sk->protect.algo = 0;
@@ -453,6 +463,8 @@ gen_dsa(unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek,
add_kbnode( sec_root,
make_mpi_comment_node("#:DSA_factor:", factors[i] ));
+ /* fixme: Merge this with the elg-generate function and release
+ * some more stuff */
return 0;
}