diff options
author | Werner Koch <[email protected]> | 2023-03-01 17:56:29 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2023-03-01 18:16:12 +0000 |
commit | ef5a48dd5178f61fd0ab1801d980102b2fe4d464 (patch) | |
tree | 549164d86c012114c5f04376ecd62bfb38a980fe /g10/getkey.c | |
parent | gpg: Allow adding of Additional Decryption Subkeys. (diff) | |
download | gnupg-ef5a48dd5178f61fd0ab1801d980102b2fe4d464.tar.gz gnupg-ef5a48dd5178f61fd0ab1801d980102b2fe4d464.zip |
gpg: Actually encrypt to ADSKs.
* g10/getkey.c (get_pubkey_fromfile): Add optional arg r_keyblock.
* g10/pkclist.c (find_and_check_key): Also encrypt to RENC subkeys.
--
GnuPG-bug-id: 6395
Diffstat (limited to 'g10/getkey.c')
-rw-r--r-- | g10/getkey.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index 3e94875b2..1b37c597d 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1718,7 +1718,8 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, * * This function returns 0 on success. Otherwise, an error code is * returned. In particular, GPG_ERR_NO_PUBKEY is returned if the key - * is not found. + * is not found. If R_KEYBLOCK is not NULL and a key was found the + * keyblock is stored there; otherwiese NULL is stored there. * * The self-signed data has already been merged into the public key * using merge_selfsigs. The caller must release the content of PK by @@ -1726,13 +1727,17 @@ get_best_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, * free_public_key). */ gpg_error_t -get_pubkey_fromfile (ctrl_t ctrl, PKT_public_key *pk, const char *fname) +get_pubkey_fromfile (ctrl_t ctrl, PKT_public_key *pk, const char *fname, + kbnode_t *r_keyblock) { gpg_error_t err; kbnode_t keyblock; kbnode_t found_key; unsigned int infoflags; + if (r_keyblock) + *r_keyblock = NULL; + err = read_key_from_file_or_buffer (ctrl, fname, NULL, 0, &keyblock); if (!err) { @@ -1747,7 +1752,10 @@ get_pubkey_fromfile (ctrl_t ctrl, PKT_public_key *pk, const char *fname) err = gpg_error (GPG_ERR_UNUSABLE_PUBKEY); } - release_kbnode (keyblock); + if (!err && r_keyblock) + *r_keyblock = keyblock; + else + release_kbnode (keyblock); return err; } |