aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyring.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2021-06-03 04:29:29 +0000
committerNIIBE Yutaka <[email protected]>2021-06-03 04:32:25 +0000
commit9668ee097a1474299b8debecb1ee38620a327082 (patch)
tree7ba0a88c43394a4a8b5836f1a5b4c9afc63e678b /g10/keyring.c
parentcommon: Allow for GCM decryption in de-vs mode. (diff)
downloadgnupg-9668ee097a1474299b8debecb1ee38620a327082.tar.gz
gnupg-9668ee097a1474299b8debecb1ee38620a327082.zip
gpg: Support KEYGRIP search with traditional keyring.
* g10/keyring.c (keyring_search): Handle KEYDB_SEARCH_MODE_KEYGRIP. -- GnuPG-bug-id: 5469 Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'g10/keyring.c')
-rw-r--r--g10/keyring.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/g10/keyring.c b/g10/keyring.c
index e044cab1a..baddf5d54 100644
--- a/g10/keyring.c
+++ b/g10/keyring.c
@@ -968,7 +968,7 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
int save_mode;
off_t offset, main_offset;
size_t n;
- int need_uid, need_words, need_keyid, need_fpr, any_skip;
+ int need_uid, need_words, need_keyid, need_fpr, any_skip, need_grip;
int pk_no, uid_no;
int initial_skip;
int scanned_from_start;
@@ -976,9 +976,10 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
PKT_user_id *uid = NULL;
PKT_public_key *pk = NULL;
u32 aki[2];
+ unsigned char grip[KEYGRIP_LEN];
/* figure out what information we need */
- need_uid = need_words = need_keyid = need_fpr = any_skip = 0;
+ need_uid = need_words = need_keyid = need_fpr = any_skip = need_grip = 0;
for (n=0; n < ndesc; n++)
{
switch (desc[n].mode)
@@ -1005,8 +1006,11 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
/* always restart the search in this mode */
keyring_search_reset (hd);
break;
+ case KEYDB_SEARCH_MODE_KEYGRIP:
+ need_grip = 1;
+ break;
default: break;
- }
+ }
if (desc[n].skipfnc)
{
any_skip = 1;
@@ -1143,6 +1147,8 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
}
if (need_keyid)
keyid_from_pk (pk, aki);
+ if (need_grip)
+ keygrip_from_pk (pk, grip);
if (use_key_present_hash
&& !key_present_hash_ready
@@ -1197,6 +1203,10 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc,
if (pk)
goto found;
break;
+ case KEYDB_SEARCH_MODE_KEYGRIP:
+ if (pk && !memcmp (desc[n].u.grip, grip, KEYGRIP_LEN))
+ goto found;
+ break;
default:
rc = GPG_ERR_INV_ARG;
goto found;