diff options
Diffstat (limited to 'src/engine-gpg.c')
-rw-r--r-- | src/engine-gpg.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 6e4b8339..0c3a63ee 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -1559,7 +1559,9 @@ add_input_size_hint (engine_gpg_t gpg, gpgme_data_t data) static gpgme_error_t -gpg_decrypt (void *engine, gpgme_data_t ciph, gpgme_data_t plain, +gpg_decrypt (void *engine, + gpgme_decrypt_flags_t flags, + gpgme_data_t ciph, gpgme_data_t plain, int export_session_key, const char *override_session_key) { engine_gpg_t gpg = engine; @@ -1567,6 +1569,14 @@ gpg_decrypt (void *engine, gpgme_data_t ciph, gpgme_data_t plain, err = add_arg (gpg, "--decrypt"); + if (!err && (flags & GPGME_DECRYPT_UNWRAP)) + { + if (!have_gpg_version (gpg, "2.1.12")) + err = gpg_error (GPG_ERR_NOT_SUPPORTED); + else + err = add_arg (gpg, "--unwrap"); + } + if (!err && export_session_key) err = add_arg (gpg, "--show-session-key"); @@ -1857,6 +1867,17 @@ gpg_encrypt (void *engine, gpgme_key_t recp[], gpgme_encrypt_flags_t flags, if (!err && use_armor) err = add_arg (gpg, "--armor"); + if (!err && (flags & GPGME_ENCRYPT_WRAP)) + { + /* gpg is current not abale to detect already compressed + * packets. Thus when using + * gpg --unwrap -d | gpg --no-literal -e + * the encryption would add an additional compression layer. + * We better suppress that. */ + flags |= GPGME_ENCRYPT_NO_COMPRESS; + err = add_arg (gpg, "--no-literal"); + } + if (!err && (flags & GPGME_ENCRYPT_NO_COMPRESS)) err = add_arg (gpg, "--compress-algo=none"); @@ -3047,7 +3068,6 @@ struct engine_ops _gpgme_engine_ops_gpg = gpg_set_locale, NULL, /* set_protocol */ gpg_decrypt, - gpg_decrypt, /* decrypt_verify */ gpg_delete, gpg_edit, gpg_encrypt, |