diff options
author | Ingo Klöcker <[email protected]> | 2023-06-21 12:20:52 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2023-06-21 12:38:50 +0000 |
commit | 1a9f192ab450288aea7a889527e78afd2c067b59 (patch) | |
tree | 7a26822f3ba236ffe96509c47da8308f3fab1296 /src | |
parent | qt: Support writing signed/encrypted archives directly to a file (diff) | |
download | gpgme-1a9f192ab450288aea7a889527e78afd2c067b59.tar.gz gpgme-1a9f192ab450288aea7a889527e78afd2c067b59.zip |
core: Support reading the archive to decrypt/verify directly from a file
* src/engine-gpg.c (add_file_name_arg_or_data): New.
(gpg_decrypt): Use add_file_name_arg_or_data instead of add_data for the
ciphertext.
(gpg_verify): Use add_file_name_arg_or_data instead of add_data for the
signature and the signed text.
* tests/run-decrypt.c (show_usage): New option --direct-file-io.
(main): Parse new option. If option is given, then don't open input
file, create simple data object instead of data object from stream and
set input file name on input data.
* tests/run-verify.c (show_usage): New option --direct-file-io.
(main): Parse new option. If option is given, then don't open input
files, create simple data objects instead of data objects from stream
and set input file names on input data objects.
--
This change makes it possible to tell gpg (and gpgtar) to read the
input (i.e. the signed/encrypted data or the signature or the created
archive) directly from the files with given file names instead of from
streams piped through GpgME's Data IO.
GnuPG-bug-id: 6530
Diffstat (limited to 'src')
-rw-r--r-- | src/engine-gpg.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index ba45e55a..355d42fd 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -365,6 +365,18 @@ add_data (engine_gpg_t gpg, gpgme_data_t data, int dup_to, int inbound) return add_data_ext (gpg, data, dup_to, inbound, 0); } + +static gpgme_error_t +add_file_name_arg_or_data (engine_gpg_t gpg, gpgme_data_t data, int dup_to, int inbound) +{ + const char *file_name = gpgme_data_get_file_name (data); + if (file_name) + return add_arg (gpg, file_name); + else + return add_data (gpg, data, dup_to, inbound); +} + + /* Return true if the engine's version is at least VERSION. */ static int have_gpg_version (engine_gpg_t gpg, const char *version) @@ -1883,7 +1895,7 @@ gpg_decrypt (void *engine, if (!err) err = add_arg (gpg, "--"); if (!err) - err = add_data (gpg, ciph, 0, 0); + err = add_file_name_arg_or_data (gpg, ciph, 0, 0); } else { @@ -1898,7 +1910,7 @@ gpg_decrypt (void *engine, if (!err) err = add_arg (gpg, "--"); if (!err) - err = add_data (gpg, ciph, -1, 0); + err = add_file_name_arg_or_data (gpg, ciph, -1, 0); } if (!err) @@ -3707,7 +3719,7 @@ gpg_verify (void *engine, gpgme_verify_flags_t flags, gpgme_data_t sig, if (!err) err = add_arg (gpg, "--"); if (!err) - err = add_data (gpg, sig, 0, 0); + err = add_file_name_arg_or_data (gpg, sig, 0, 0); } else if (plaintext) { @@ -3720,7 +3732,7 @@ gpg_verify (void *engine, gpgme_verify_flags_t flags, gpgme_data_t sig, if (!err) err = add_arg (gpg, "--"); if (!err) - err = add_data (gpg, sig, -1, 0); + err = add_file_name_arg_or_data (gpg, sig, -1, 0); if (!err) err = add_data (gpg, plaintext, 1, 1); } @@ -3732,9 +3744,9 @@ gpg_verify (void *engine, gpgme_verify_flags_t flags, gpgme_data_t sig, if (!err) err = add_arg (gpg, "--"); if (!err) - err = add_data (gpg, sig, -1, 0); + err = add_file_name_arg_or_data (gpg, sig, -1, 0); if (!err && signed_text) - err = add_data (gpg, signed_text, -1, 0); + err = add_file_name_arg_or_data (gpg, signed_text, -1, 0); } if (!err) |