mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
gpg: Add support for unwrapping the outer level of encryption.
* g10/decrypt-data.c (decrypt_data): If OPT.UNWRAP_ENCRYPTION is set, copy the data to the output file instead of continuing to process it. * g10/gpg.c (enum cmd_and_opt_values): Add new value oUnwrap. (opts): Handle oUnwrap. (main): Likewise. * g10/options.h (opt): Add field unwrap_encryption. * g10/plaintext.c (handle_plaintext): Break the output file selection functionality into ... (get_output_file): ... this new function. -- Signed-off-by: Neal H. Walfield <neal@g10code.com> GnuPG-bug-id: 1060 Debian-bug-id: 282061
This commit is contained in:
parent
fd4b9e2328
commit
ec409e62ae
5 changed files with 130 additions and 48 deletions
|
@ -221,7 +221,38 @@ decrypt_data (ctrl_t ctrl, void *procctx, PKT_encrypted *ed, DEK *dek)
|
|||
else
|
||||
iobuf_push_filter ( ed->buf, decode_filter, dfx );
|
||||
|
||||
proc_packets (ctrl, procctx, ed->buf );
|
||||
if (opt.unwrap_encryption)
|
||||
{
|
||||
char *filename;
|
||||
estream_t fp;
|
||||
rc = get_output_file ("", 0, ed->buf, &filename, &fp);
|
||||
if (! rc)
|
||||
{
|
||||
iobuf_t output = iobuf_esopen (fp, "w", 0);
|
||||
armor_filter_context_t *afx = NULL;
|
||||
|
||||
if (opt.armor)
|
||||
{
|
||||
afx = new_armor_context ();
|
||||
push_armor_filter (afx, output);
|
||||
}
|
||||
|
||||
iobuf_copy (output, ed->buf);
|
||||
if ((rc = iobuf_error (ed->buf)))
|
||||
log_error (_("error reading: %s\n"),
|
||||
filename, gpg_strerror (rc));
|
||||
else if ((rc = iobuf_error (output)))
|
||||
log_error (_("error writing output ('%s'): %s\n"),
|
||||
filename, gpg_strerror (rc));
|
||||
|
||||
iobuf_close (output);
|
||||
if (afx)
|
||||
release_armor_context (afx);
|
||||
}
|
||||
}
|
||||
else
|
||||
proc_packets (ctrl, procctx, ed->buf );
|
||||
|
||||
ed->buf = NULL;
|
||||
if (dfx->eof_seen > 1 )
|
||||
rc = gpg_error (GPG_ERR_INV_PACKET);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue