From cc353701b0fde4c811ddc1e9a91b852dfe9f4e06 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 14 Sep 2016 09:51:16 +0200 Subject: core: New function gpgme_op_createsubkey. * src/genkey.c (createsubkey_start): New. (gpgme_op_createsubkey_start, gpgme_op_createsubkey): New. * src/gpgme.def, src/libgpgme.vers: Add them. * src/engine-gpg.c (gpg_createkey): Factor some code out to ... (gpg_add_algo_usage_expire): new. (gpg_addkey): Implement. * tests/run-genkey.c: Add option --addkey. Signed-off-by: Werner Koch --- tests/run-genkey.c | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'tests/run-genkey.c') diff --git a/tests/run-genkey.c b/tests/run-genkey.c index 74d4038e..3b645025 100644 --- a/tests/run-genkey.c +++ b/tests/run-genkey.c @@ -201,6 +201,7 @@ show_usage (int ex) { fputs ("usage: " PGM " [options] USERID [ALGO [USAGE [EXPIRESECONDS]]]\n\n" "Options:\n" + " --addkey add a subkey to the key with USERID\n" " --verbose run in verbose mode\n" " --status print status lines from the backend\n" " --progress print progress info\n" @@ -224,6 +225,7 @@ main (int argc, char **argv) int print_status = 0; int print_progress = 0; int use_loopback = 0; + int addkey = 0; const char *userid; const char *algo = NULL; unsigned int flags = 0; @@ -243,6 +245,11 @@ main (int argc, char **argv) } else if (!strcmp (*argv, "--help")) show_usage (0); + else if (!strcmp (*argv, "--addkey")) + { + addkey = 1; + argc--; argv++; + } else if (!strcmp (*argv, "--verbose")) { verbose = 1; @@ -316,12 +323,36 @@ main (int argc, char **argv) gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL); } - err = gpgme_op_createkey (ctx, userid, algo, 0, expire, NULL, flags); - if (err) + if (addkey) { - fprintf (stderr, PGM ": gpgme_op_createkey failed: %s\n", - gpg_strerror (err)); - exit (1); + gpgme_key_t akey; + + err = gpgme_get_key (ctx, userid, &akey, 1); + if (err) + { + fprintf (stderr, PGM ": error getting secret key for '%s': %s\n", + userid, gpg_strerror (err)); + exit (1); + } + + err = gpgme_op_createsubkey (ctx, akey, algo, 0, expire, flags); + if (err) + { + fprintf (stderr, PGM ": gpgme_op_createsubkey failed: %s\n", + gpg_strerror (err)); + exit (1); + } + gpgme_key_unref (akey); + } + else + { + err = gpgme_op_createkey (ctx, userid, algo, 0, expire, NULL, flags); + if (err) + { + fprintf (stderr, PGM ": gpgme_op_createkey failed: %s\n", + gpg_strerror (err)); + exit (1); + } } result = gpgme_op_genkey_result (ctx); -- cgit v1.2.3