aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine-gpg.c
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2020-10-27 14:33:51 +0000
committerIngo Klöcker <[email protected]>2020-10-29 11:57:10 +0000
commitf3407d0ee4e34ed33be18de5f886a4da2affbf9f (patch)
treeffdd4777a07af84a034e58b0c9459e37013a61d7 /src/engine-gpg.c
parentpython: Handle the when case __doc__ is None. (diff)
downloadgpgme-f3407d0ee4e34ed33be18de5f886a4da2affbf9f.tar.gz
gpgme-f3407d0ee4e34ed33be18de5f886a4da2affbf9f.zip
core: New function gpgme_op_revsig.
* src/gpgme.h.in (gpgme_op_revsig_start, gpgme_op_revsig): New. (GPGME_REVSIG_LFSEP): New. * src/context.h (ctx_op_data_id_t): Add OPDATA_REVSIG. * src/revsig.c: New. * src/Makefile.am (main_sources): Add revsig. * src/libgpgme.vers, src/gpgme.def: Add gpgme_op_revsig and gpgme_op_revsig_start. * src/engine.h, src/engine.c: (_gpgme_engine_op_revsig): New. * src/engine-backend.h (engine_ops): Add 'revsig' and adjust all engine initializers. * src/engine-gpg.c (gpg_revsig): New. (_gpgme_engine_ops_gpg): Set revsig to gpg_revsig. * doc/gpgme.texi: Document new functions. * tests/run-keysign.c: Add option --revoke. -- This extends GPGME to support the --quick-revoke-sig command added by GnuPG 2.2.24. This allows revoking key signatures. GnuPG-bug-id: 5094
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r--src/engine-gpg.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index 8832572a..02a10ecb 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -3211,6 +3211,52 @@ gpg_keysign (void *engine, gpgme_key_t key, const char *userid,
static gpgme_error_t
+gpg_revsig (void *engine, gpgme_key_t key, gpgme_key_t signing_key,
+ const char *userid, unsigned int flags)
+{
+ engine_gpg_t gpg = engine;
+ gpgme_error_t err;
+ const char *s;
+
+ if (!key || !key->fpr)
+ return gpg_error (GPG_ERR_INV_ARG);
+
+ if (!have_gpg_version (gpg, "2.2.24"))
+ return gpg_error (GPG_ERR_NOT_SUPPORTED);
+
+ err = add_arg (gpg, "--quick-revoke-sig");
+
+ if (!err)
+ err = add_arg (gpg, "--");
+
+ if (!err)
+ err = add_arg (gpg, key->fpr);
+
+ if (!err)
+ err = add_arg (gpg, signing_key->fpr);
+
+ if (!err && userid)
+ {
+ if ((flags & GPGME_REVSIG_LFSEP))
+ {
+ for (; !err && (s = strchr (userid, '\n')); userid = s + 1)
+ if ((s - userid))
+ err = add_arg_len (gpg, "=", userid, s - userid);
+ if (!err && *userid)
+ err = add_arg_pfx (gpg, "=", userid);
+ }
+ else
+ err = add_arg_pfx (gpg, "=", userid);
+ }
+
+ if (!err)
+ err = start (gpg);
+
+ return err;
+}
+
+
+static gpgme_error_t
gpg_tofu_policy (void *engine, gpgme_key_t key, gpgme_tofu_policy_t policy)
{
engine_gpg_t gpg = engine;
@@ -3513,6 +3559,7 @@ struct engine_ops _gpgme_engine_ops_gpg =
gpg_keylist_ext,
gpg_keylist_data,
gpg_keysign,
+ gpg_revsig,
gpg_tofu_policy, /* tofu_policy */
gpg_sign,
gpg_verify,