bool *selfsig, bool *othersig)
{
struct openpgp_packet_list *tmpsig;
- struct openpgp_publickey *sigkey = NULL;
+ struct openpgp_publickey *sigkeys = NULL, *curkey;
onak_status_t ret;
uint8_t hashtype;
uint8_t hash[64];
}
}
- if (remove && dbctx->fetch_key_id(dbctx, sigid,
- &sigkey, false)) {
+ if (remove) {
+ dbctx->fetch_key_id(dbctx, sigid,
+ &sigkeys, false);
+ }
+
+ /*
+ * A 64 bit collision is probably a sign of something
+ * sneaky happening, but if the signature verifies we
+ * should keep it.
+ */
+ for (curkey = sigkeys; curkey != NULL;
+ curkey = curkey->next) {
- ret = onak_check_hash_sig(sigkey,
+ ret = onak_check_hash_sig(curkey,
(*sigs)->packet,
hash, hashtype);
if (othersig != NULL) {
*othersig = true;
}
+ break;
}
-
- free_publickey(sigkey);
- sigkey = NULL;
}
+
+ free_publickey(sigkeys);
+ sigkeys = NULL;
}
#endif