From d528d0b065334b4c8c52e66441160e308b51d24f Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 9 Sep 2024 16:41:35 +0200 Subject: 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) --- g10/gpg.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'g10/gpg.h') diff --git a/g10/gpg.h b/g10/gpg.h index 167cdaf28..7646aa3ee 100644 --- a/g10/gpg.h +++ b/g10/gpg.h @@ -122,6 +122,15 @@ struct server_control_s unsigned char *secret_keygrips; size_t secret_keygrips_len; int no_more_secret_keygrips; + + /* This first flag is set to true if we are running a + * --add-recipients or --change-recipients command. The second if + * it is --change-recipients. */ + unsigned int modify_recipients:1; + unsigned int clear_recipients:1; + + /* Temporary used to pass the last read byte up the call chain. */ + int last_read_ctb; }; -- cgit v1.2.3