mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
gpg: Prepare revocation keys for use with v5 keys.
* g10/packet.h (struct revocation_key): Add field 'fprlen'. * g10/parse-packet.c (parse_revkeys): Set fprlen and allow for v5 keys. Also fix reading of unitialized data at place where MAX_FINGERPRINT_LEN is used. * g10/revoke.c (gen_desig_revoke): Allow for v5 keys and use fprlen. Do an explicit compare to avoid reading unitialized data. * g10/sig-check.c (check_revocation_keys): Use the fprlen. * g10/getkey.c (merge_selfsigs_main): Do an explicit copy to avoid reading unitialized data. * g10/import.c (revocation_present): Use fprlen. * g10/keyedit.c (show_key_with_all_names): Use fprlen. (menu_addrevoker): Use fprlen. Allow for v5 keys. * g10/keygen.c (keygen_add_revkey): Use fprlen. (parse_revocation_key): Allow for v5 keys. * g10/keyid.c (keyid_from_fingerprint): Allow for v5 keys. Print a better error message in case of bogus fingerprints. * g10/keylist.c (print_revokers): Use fprlen. -- The reading of uninitialized data is harmless but we better fix it to make valgrind happy. More serious was that we always passed MAX_FINGERPRINT_LEN but we will need to support 20 and 32 octet fingerprints and MAX_FINGERPRINT_LEN would be too large for a v4. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
ba46a359b9
commit
c6e2ee0207
10 changed files with 66 additions and 40 deletions
10
g10/keyid.c
10
g10/keyid.c
|
@ -534,8 +534,9 @@ keyid_from_pk (PKT_public_key *pk, u32 *keyid)
|
|||
|
||||
|
||||
/*
|
||||
* Get the keyid from the fingerprint. This function is simple for most
|
||||
* keys, but has to do a keylookup for old stayle keys.
|
||||
* Get the keyid from the fingerprint. This function is simple for
|
||||
* most keys, but has to do a key lookup for old v3 keys where the
|
||||
* keyid is not part of the fingerprint.
|
||||
*/
|
||||
u32
|
||||
keyid_from_fingerprint (ctrl_t ctrl, const byte *fprint,
|
||||
|
@ -546,7 +547,7 @@ keyid_from_fingerprint (ctrl_t ctrl, const byte *fprint,
|
|||
if( !keyid )
|
||||
keyid = dummy_keyid;
|
||||
|
||||
if (fprint_len != 20)
|
||||
if (fprint_len != 20 && fprint_len != 32)
|
||||
{
|
||||
/* This is special as we have to lookup the key first. */
|
||||
PKT_public_key pk;
|
||||
|
@ -556,7 +557,8 @@ keyid_from_fingerprint (ctrl_t ctrl, const byte *fprint,
|
|||
rc = get_pubkey_byfprint (ctrl, &pk, NULL, fprint, fprint_len);
|
||||
if( rc )
|
||||
{
|
||||
log_error("Oops: keyid_from_fingerprint: no pubkey\n");
|
||||
log_printhex (fprint, fprint_len,
|
||||
"Oops: keyid_from_fingerprint: no pubkey; fpr:");
|
||||
keyid[0] = 0;
|
||||
keyid[1] = 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue