diff options
author | Werner Koch <[email protected]> | 2024-09-09 14:41:35 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-09-09 14:47:04 +0000 |
commit | d528d0b065334b4c8c52e66441160e308b51d24f (patch) | |
tree | 6d4e920f8b0c9fdda0515d8e035b3533ee475aba /g10/packet.h | |
parent | gpg: Improve detection of input data read errors. (diff) | |
download | gnupg-d528d0b065334b4c8c52e66441160e308b51d24f.tar.gz gnupg-d528d0b065334b4c8c52e66441160e308b51d24f.zip |
gpg: New commands --add-recipients and --change-recipients.
* g10/gpg.c (aAddRecipients, aChangeRecipients): New consts.
(opts): Add --add-recipients and --change-recipients.
(main): Handle them.
* g10/gpg.h (struct server_control_s): Add fields modify_recipients,
clear_recipients, and last_read_ctb.
* g10/armor.c (was_armored): New.
* g10/decrypt.c (decrypt_message): Add optional arg 'remusr'. Handle
re-encryption if desired.
* g10/encrypt.c (write_pubkey_enc): Factor info printing out to ...
(show_encrypted_for_user_info): new.
(reencrypt_to_new_recipients): New.
* g10/packet.h (struct parse_packet_ctx_s): Add fields only_fookey_enc
and last_ctb.
(init_parse_packet): Clear them.
* g10/parse-packet.c (parse): Store CTB in the context. Early return
on pubkey_enc and symkey_enc packets if requested.
* g10/mainproc.c (proc_encrypted): Allow for PKT being NULL. Return
early in modify-recipients mode.
(proc_encryption_packets): Add two optional args 'r_dek' and 'r_list'.
Adjust callers. Call do_proc_packets in modify-recipients mode
depending on the optional args.
(do_proc_packets): Add arg 'keep_dek_and_list'. Adjust callers. Save
the last read CTB in CTRL and return after the last fooenc_enc
packets.
--
This basically works but does not yet handle symmetric encrypted
packets (symkey_enc).
GnuPG-bug-id: 1825
(Yes, this is an at least 9 year old feature request)
Diffstat (limited to 'g10/packet.h')
-rw-r--r-- | g10/packet.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/g10/packet.h b/g10/packet.h index 80238fcea..5cef17543 100644 --- a/g10/packet.h +++ b/g10/packet.h @@ -644,7 +644,10 @@ int proc_signature_packets (ctrl_t ctrl, void *ctx, iobuf_t a, strlist_t signedfiles, const char *sigfile ); int proc_signature_packets_by_fd (ctrl_t ctrl, void *anchor, IOBUF a, gnupg_fd_t signed_data_fd); -int proc_encryption_packets (ctrl_t ctrl, void *ctx, iobuf_t a); +gpg_error_t proc_encryption_packets (ctrl_t ctrl, void *ctx, iobuf_t a, + DEK **r_dek, + struct pubkey_enc_list **r_list); + int list_packets( iobuf_t a ); const byte *issuer_fpr_raw (PKT_signature *sig, size_t *r_len); @@ -673,7 +676,9 @@ struct parse_packet_ctx_s struct packet_struct last_pkt; /* The last parsed packet. */ int free_last_pkt; /* Indicates that LAST_PKT must be freed. */ int skip_meta; /* Skip ring trust packets. */ + int only_fookey_enc; /* Stop if the packet is not {sym,pub}key_enc. */ unsigned int n_parsed_packets; /* Number of parsed packets. */ + int last_ctb; /* The last CTB read. */ }; typedef struct parse_packet_ctx_s *parse_packet_ctx_t; @@ -683,7 +688,9 @@ typedef struct parse_packet_ctx_s *parse_packet_ctx_t; (a)->last_pkt.pkt.generic= NULL;\ (a)->free_last_pkt = 0; \ (a)->skip_meta = 0; \ + (a)->only_fookey_enc = 0; \ (a)->n_parsed_packets = 0; \ + (a)->last_ctb = 1; \ } while (0) #define deinit_parse_packet(a) do { \ |