From 20982bbd7539d2032f4d6249a2654c245445521d Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 7 Aug 2020 12:41:47 +0900 Subject: [PATCH] gpg: Fix short key ID for v5key. * g10/keyid.c (keyid_from_pk): Return keyid[0] for v5key. * g10/keyring.c (keyring_search): Handle short key ID for v5key. -- GnuPG-bug-id: 5000 Signed-off-by: NIIBE Yutaka --- g10/keyid.c | 5 ++++- g10/keyring.c | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/g10/keyid.c b/g10/keyid.c index d3fc29a98..23712e2a4 100644 --- a/g10/keyid.c +++ b/g10/keyid.c @@ -567,7 +567,10 @@ keyid_from_pk (PKT_public_key *pk, u32 *keyid) keyid[0] = pk->keyid[0]; keyid[1] = pk->keyid[1]; - return keyid[1]; /*FIXME:shortkeyid is different for v5*/ + if (pk->fprlen == 32) + return keyid[0]; + else + return keyid[1]; } diff --git a/g10/keyring.c b/g10/keyring.c index 992c280d2..9cd66db3a 100644 --- a/g10/keyring.c +++ b/g10/keyring.c @@ -1174,8 +1174,10 @@ keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, break; case KEYDB_SEARCH_MODE_SHORT_KID: - if (pk && desc[n].u.kid[1] == aki[1]) - goto found; + if (pk + && ((pk->fprlen == 32 && desc[n].u.kid[1] == aki[0]) + || (pk->fprlen != 32 && desc[n].u.kid[1] == aki[1]))) + goto found; break; case KEYDB_SEARCH_MODE_LONG_KID: if (pk && desc[n].u.kid[0] == aki[0]