X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=keydb.c;h=deedc4994e5f4441938ab3ef709c4e44e46034ba;hb=5cb163e87c7f0717aa94ca281a56e572c2a6c8f3;hp=f92c252667a95eeb23bed61d76f763d69031e6a7;hpb=357fbc65bfab230bbf12313e8b458d8325a6174f;p=onak.git diff --git a/keydb.c b/keydb.c index f92c252..deedc49 100644 --- a/keydb.c +++ b/keydb.c @@ -200,17 +200,16 @@ int generic_update_keys(struct onak_dbctx *dbctx, struct openpgp_publickey *curkey = NULL; struct openpgp_publickey *oldkey = NULL; struct openpgp_publickey *prev = NULL; + struct openpgp_fingerprint fp; int newkeys = 0; bool intrans; - uint64_t keyid; for (curkey = *keys; curkey != NULL; curkey = curkey->next) { intrans = dbctx->starttrans(dbctx); - get_keyid(curkey, &keyid); + get_fingerprint(curkey->publickey, &fp); logthing(LOGTHING_INFO, - "Fetching key 0x%" PRIX64 ", result: %d", - keyid, - dbctx->fetch_key_id(dbctx, keyid, &oldkey, + "Fetching key, result: %d", + dbctx->fetch_key_fp(dbctx, &fp, &oldkey, intrans)); /* @@ -273,13 +272,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);