rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig) { rpmRC res = RPMRC_NOKEY; if (keyring && sig) { pgpDigParams sigp = &sig->signature; pgpDigParams pubp = &sig->pubkey; struct rpmPubkey_s needle, *key; needle.pkt = NULL; needle.pktlen = 0; memcpy(needle.keyid, sigp->signid, sizeof(needle.keyid)); if ((key = rpmKeyringFindKeyid(keyring, &needle))) { /* Retrieve parameters from pubkey packet(s) */ (void) pgpPrtPkts(key->pkt, key->pktlen, sig, 0); /* Do the parameters match the signature? */ if (sigp->pubkey_algo == pubp->pubkey_algo && memcmp(sigp->signid, pubp->signid, sizeof(sigp->signid)) == 0) { res = RPMRC_OK; } } } return res; }
int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key) { if (keyring == NULL || key == NULL) return -1; /* check if we already have this key */ if (rpmKeyringFindKeyid(keyring, key)) { return 1; } keyring->keys = xrealloc(keyring->keys, (keyring->numkeys + 1) * sizeof(rpmPubkey)); keyring->keys[keyring->numkeys] = rpmPubkeyLink(key); keyring->numkeys++; qsort(keyring->keys, keyring->numkeys, sizeof(*keyring->keys), keyidcmp); return 0; }
int rpmKeyringAddKey(rpmKeyring keyring, rpmPubkey key) { if (keyring == NULL || key == NULL) return -1; /* check if we already have this key */ if (rpmKeyringFindKeyid(keyring, key)) return 1; keyring->keys = xrealloc(keyring->keys, (keyring->numkeys + 1) * sizeof(*keyring->keys)); /*@-assignexpose -newreftrans @*/ keyring->keys[keyring->numkeys] = rpmPubkeyLink(key); /*@=assignexpose =newreftrans @*/ keyring->numkeys++; qsort(keyring->keys, keyring->numkeys, sizeof(*keyring->keys), keyidcmp); return 0; }
static rpmPubkey findbySig(rpmKeyring keyring, pgpDigParams sig) { rpmPubkey key = NULL; if (keyring && sig) { struct rpmPubkey_s needle; memset(&needle, 0, sizeof(needle)); memcpy(needle.keyid, sig->signid, sizeof(needle.keyid)); key = rpmKeyringFindKeyid(keyring, &needle); if (key) { pgpDigParams pub = key->pgpkey; /* Do the parameters match the signature? */ if ((sig->pubkey_algo != pub->pubkey_algo) || memcmp(sig->signid, pub->signid, sizeof(sig->signid))) { key = NULL; } } } return key; }