aboutsummaryrefslogtreecommitdiffstats
path: root/tests/run-keysign.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run-keysign.c')
-rw-r--r--tests/run-keysign.c59
1 files changed, 43 insertions, 16 deletions
diff --git a/tests/run-keysign.c b/tests/run-keysign.c
index 83130dd0..57488a47 100644
--- a/tests/run-keysign.c
+++ b/tests/run-keysign.c
@@ -1,4 +1,4 @@
-/* run-keysign.c - Test tool to sign a key
+/* run-keysign.c - Test tool to sign a key and to revoke a key signature
* Copyright (C) 2016 g10 Code GmbH
*
* This file is part of GPGME.
@@ -77,10 +77,11 @@ show_usage (int ex)
" --verbose run in verbose mode\n"
" --status print status lines from the backend\n"
" --loopback use a loopback pinentry\n"
- " --signer NAME use key NAME for signing\n"
+ " --signer NAME use key NAME for signing/revoking\n"
" --local create a local signature\n"
" --noexpire force no expiration\n"
" --expire EPOCH expire the signature at EPOCH\n"
+ " --revoke revoke the signature(s)\n"
, stderr);
exit (ex);
}
@@ -97,9 +98,12 @@ main (int argc, char **argv)
int print_status = 0;
int use_loopback = 0;
const char *userid;
- unsigned int flags = 0;
+ unsigned int keysign_flags = 0;
unsigned long expire = 0;
+ int revoke = 0;
+ unsigned int revoke_flags = 0;
gpgme_key_t thekey;
+ gpgme_key_t signing_key = NULL;
int i;
size_t n;
char *userid_buffer = NULL;
@@ -142,12 +146,12 @@ main (int argc, char **argv)
}
else if (!strcmp (*argv, "--local"))
{
- flags |= GPGME_KEYSIGN_LOCAL;
+ keysign_flags |= GPGME_KEYSIGN_LOCAL;
argc--; argv++;
}
else if (!strcmp (*argv, "--noexpire"))
{
- flags |= GPGME_KEYSIGN_NOEXPIRE;
+ keysign_flags |= GPGME_KEYSIGN_NOEXPIRE;
argc--; argv++;
}
else if (!strcmp (*argv, "--expire"))
@@ -158,10 +162,21 @@ main (int argc, char **argv)
expire = parse_expire_string (*argv);
argc--; argv++;
}
+ else if (!strcmp (*argv, "--revoke"))
+ {
+ revoke = 1;
+ argc--; argv++;
+ }
else if (!strncmp (*argv, "--", 2))
show_usage (1);
}
+ if (revoke && !signer_string)
+ {
+ fprintf (stderr, PGM ": please specify the signer key\n");
+ exit (1);
+ }
+
if (!argc)
show_usage (1);
userid = argv[0];
@@ -186,23 +201,20 @@ main (int argc, char **argv)
if (signer_string)
{
- gpgme_key_t akey;
-
- err = gpgme_get_key (ctx, signer_string, &akey, 1);
+ err = gpgme_get_key (ctx, signer_string, &signing_key, 1);
if (err)
{
fprintf (stderr, PGM ": error getting signer key '%s': %s\n",
signer_string, gpg_strerror (err));
exit (1);
}
- err = gpgme_signers_add (ctx, akey);
+ err = gpgme_signers_add (ctx, signing_key);
if (err)
{
fprintf (stderr, PGM ": error adding signer key: %s\n",
gpg_strerror (err));
exit (1);
}
- gpgme_key_unref (akey);
}
@@ -234,7 +246,8 @@ main (int argc, char **argv)
strcat (userid_buffer, "\n");
}
userid = userid_buffer;
- flags |= GPGME_KEYSIGN_LFSEP;
+ keysign_flags |= GPGME_KEYSIGN_LFSEP;
+ revoke_flags |= GPGME_REVSIG_LFSEP;
}
else if (argc)
{
@@ -247,15 +260,29 @@ main (int argc, char **argv)
userid = NULL;
}
- err = gpgme_op_keysign (ctx, thekey, userid, expire, flags);
- if (err)
+ if (revoke)
{
- fprintf (stderr, PGM ": gpgme_op_adduid failed: %s\n",
- gpg_strerror (err));
- exit (1);
+ err = gpgme_op_revsig (ctx, thekey, signing_key, userid, revoke_flags);
+ if (err)
+ {
+ fprintf (stderr, PGM ": gpgme_op_revsig failed: %s\n",
+ gpg_strerror (err));
+ exit (1);
+ }
+ }
+ else
+ {
+ err = gpgme_op_keysign (ctx, thekey, userid, expire, keysign_flags);
+ if (err)
+ {
+ fprintf (stderr, PGM ": gpgme_op_keysign failed: %s\n",
+ gpg_strerror (err));
+ exit (1);
+ }
}
free (userid_buffer);
+ gpgme_key_unref (signing_key);
gpgme_key_unref (thekey);
gpgme_release (ctx);
return 0;