X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb.c;h=f8d5a0bd8ef60248157542ee55ec356a06a0ae4d;hb=4b6032dbfb20e041043cfa0b6b84145f49a98a11;hp=f92c252667a95eeb23bed61d76f763d69031e6a7;hpb=357fbc65bfab230bbf12313e8b458d8325a6174f;p=onak.git diff --git a/keydb.c b/keydb.c index f92c252..f8d5a0b 100644 --- a/keydb.c +++ b/keydb.c @@ -273,13 +273,23 @@ static int generic_fetch_key_fp(struct onak_dbctx *dbctx, /* * We assume if the backend is using this function it's not storing * anything bigger than the 64 bit key ID and just truncate the - * fingerprint to get that value. This doesn't work for v3 keys, + * fingerprint to get that value. v4 keys want the lowest 64 bits, v5 + * keys need the top 64 bits. This doesn't work for v3 keys, * but there's no way to map from v3 fingerprint to v3 key ID so * if the backend can't do it we're going to fail anyway. */ keyid = 0; - for (i = (fingerprint->length - 8); i < fingerprint->length; i++) { - keyid = (keyid << 8) + fingerprint->fp[i]; + if (fingerprint->length == 20) { + /* v4 */ + for (i = (fingerprint->length - 8); i < fingerprint->length; + i++) { + keyid = (keyid << 8) + fingerprint->fp[i]; + } + } else { + /* v5 */ + for (i = 0; i < 8; i++) { + keyid = (keyid << 8) + fingerprint->fp[i]; + } } return dbctx->fetch_key_id(dbctx, keyid, publickey, intrans);