diff options
author | Ingo Klöcker <[email protected]> | 2023-01-25 10:21:39 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2023-01-25 10:26:34 +0000 |
commit | 5b79b323971cb0794c45791851d85f8a66f0a441 (patch) | |
tree | e3f4788ad6c8b581f776863b9011b305bd8a3ceb /src/verify.c | |
parent | core: Support usage of gpgtar for decrypting an encrypted archive (diff) | |
download | gpgme-5b79b323971cb0794c45791851d85f8a66f0a441.tar.gz gpgme-5b79b323971cb0794c45791851d85f8a66f0a441.zip |
core: Support usage of gpgtar for verifying a signed archive
* src/gpgme.h.in (gpgme_verify_flags_t): New enum.
(GPGME_VERIFY_ARCHIVE): New const.
(gpgme_op_verify_ext_start): New func.
(gpgme_op_verify_ext): New func.
* src/gpgme.def, src/libgpgme.vers: Add new functions.
* src/verify.c (gpgme_op_verify_ext_start): New.
(gpgme_op_verify_ext): New.
(verify_start): Add arg FLAGS. Pass the flags to
_gpgme_engine_op_verify.
(gpgme_op_verify_start): Call gpgme_op_verify_ext_start with 0 for
FLAGS.
(gpgme_op_verify): Call gpgme_op_verify_ext with 0 for FLAGS.
* src/engine.c, src/engine.h (_gpgme_engine_op_verify): Add arg FLAGS.
* src/engine-backend.h (struct engine_ops): Add FLAGS to 'verify'.
* src/engine-gpg.c (gpg_verify): Add arg FLAGS. Set use_gpgtar engine
flag if GPGME_VERIFY_ARCHIVE flag is set. Check for new enough gpg. Use
add_gpg_arg for gpg-only options without a value. Set extra options for
gpgtar and pass input data to stdin when using gpgtar.
* src/engine-gpgsm.c (gpgsm_verify): Add arg FLAGS. Return error if
GPGME_VERIFY_ARCHIVE flag is set.
* src/engine-uiserver.c (uiserver_verify): Ditto.
* tests/run-verify.c (show_usage): New options --archive, --directory,
and --diagnostics.
(main): Parse new options. Verify and extract with gpgtar if --archive
is given. Set file name of output data to value of --directory option.
Print stderr of gpg/gpgtar if --diagnostics is given.
--
GnuPG-bug-id: 6342
Diffstat (limited to 'src/verify.c')
-rw-r--r-- | src/verify.c | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/src/verify.c b/src/verify.c index 81b2ff92..a8467156 100644 --- a/src/verify.c +++ b/src/verify.c @@ -1135,8 +1135,9 @@ _gpgme_op_verify_init_result (gpgme_ctx_t ctx) static gpgme_error_t -verify_start (gpgme_ctx_t ctx, int synchronous, gpgme_data_t sig, - gpgme_data_t signed_text, gpgme_data_t plaintext) +verify_start (gpgme_ctx_t ctx, int synchronous, gpgme_verify_flags_t flags, + gpgme_data_t sig, gpgme_data_t signed_text, + gpgme_data_t plaintext) { gpgme_error_t err; @@ -1153,26 +1154,45 @@ verify_start (gpgme_ctx_t ctx, int synchronous, gpgme_data_t sig, if (!sig) return gpg_error (GPG_ERR_NO_DATA); - return _gpgme_engine_op_verify (ctx->engine, sig, signed_text, plaintext, - ctx); + return _gpgme_engine_op_verify (ctx->engine, flags, sig, signed_text, + plaintext, ctx); } -/* Decrypt ciphertext CIPHER and make a signature verification within - CTX and store the resulting plaintext in PLAIN. */ +/* Old version of gpgme_op_verify_ext_start without FLAGS. */ gpgme_error_t gpgme_op_verify_start (gpgme_ctx_t ctx, gpgme_data_t sig, gpgme_data_t signed_text, gpgme_data_t plaintext) { + return gpgme_op_verify_ext_start (ctx, 0, sig, signed_text, plaintext); +} + + +/* Old version of gpgme_op_verify_ext without FLAGS. */ +gpgme_error_t +gpgme_op_verify (gpgme_ctx_t ctx, gpgme_data_t sig, gpgme_data_t signed_text, + gpgme_data_t plaintext) +{ + return gpgme_op_verify_ext (ctx, 0, sig, signed_text, plaintext); +} + + +/* Decrypt ciphertext CIPHER and make a signature verification within + CTX and store the resulting plaintext in PLAIN. */ +gpgme_error_t +gpgme_op_verify_ext_start (gpgme_ctx_t ctx, gpgme_verify_flags_t flags, + gpgme_data_t sig, gpgme_data_t signed_text, + gpgme_data_t plaintext) +{ gpg_error_t err; TRACE_BEG (DEBUG_CTX, "gpgme_op_verify_start", ctx, - "sig=%p, signed_text=%p, plaintext=%p", - sig, signed_text, plaintext); + "flags=0x%x, sig=%p, signed_text=%p, plaintext=%p", + flags, sig, signed_text, plaintext); if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); - err = verify_start (ctx, 0, sig, signed_text, plaintext); + err = verify_start (ctx, 0, flags, sig, signed_text, plaintext); return TRACE_ERR (err); } @@ -1180,19 +1200,20 @@ gpgme_op_verify_start (gpgme_ctx_t ctx, gpgme_data_t sig, /* Decrypt ciphertext CIPHER and make a signature verification within CTX and store the resulting plaintext in PLAIN. */ gpgme_error_t -gpgme_op_verify (gpgme_ctx_t ctx, gpgme_data_t sig, gpgme_data_t signed_text, - gpgme_data_t plaintext) +gpgme_op_verify_ext (gpgme_ctx_t ctx, gpgme_verify_flags_t flags, + gpgme_data_t sig, gpgme_data_t signed_text, + gpgme_data_t plaintext) { gpgme_error_t err; TRACE_BEG (DEBUG_CTX, "gpgme_op_verify", ctx, - "sig=%p, signed_text=%p, plaintext=%p", - sig, signed_text, plaintext); + "flags=0x%x, sig=%p, signed_text=%p, plaintext=%p", + flags, sig, signed_text, plaintext); if (!ctx) return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE)); - err = verify_start (ctx, 1, sig, signed_text, plaintext); + err = verify_start (ctx, 1, flags, sig, signed_text, plaintext); if (!err) err = _gpgme_wait_one (ctx); return TRACE_ERR (err); |