aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine-gpg.c
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2023-06-21 12:20:52 +0000
committerIngo Klöcker <[email protected]>2023-06-21 12:38:50 +0000
commit1a9f192ab450288aea7a889527e78afd2c067b59 (patch)
tree7a26822f3ba236ffe96509c47da8308f3fab1296 /src/engine-gpg.c
parentqt: Support writing signed/encrypted archives directly to a file (diff)
downloadgpgme-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/engine-gpg.c')
-rw-r--r--src/engine-gpg.c24
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)