rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen) { rpmPubkey key = NULL; pgpDigParams pgpkey = NULL; pgpKeyID_t keyid; if (pkt == NULL || pktlen == 0) goto exit; if (pgpPubkeyFingerprint(pkt, pktlen, keyid)) goto exit; if (pgpPrtParams(pkt, pktlen, PGPTAG_PUBLIC_KEY, &pgpkey)) goto exit; key = xcalloc(1, sizeof(*key)); key->pkt = xmalloc(pktlen); key->pktlen = pktlen; key->pgpkey = pgpkey; key->nrefs = 0; memcpy(key->pkt, pkt, pktlen); memcpy(key->keyid, keyid, sizeof(keyid)); exit: return rpmPubkeyLink(key); }
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; }
rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen) { rpmPubkey key = NULL; if (pkt == NULL || pktlen == 0) goto exit; key = xcalloc(1, sizeof(*key)); pgpPubkeyFingerprint(pkt, pktlen, key->keyid); key->pkt = xmalloc(pktlen); key->pktlen = pktlen; key->nrefs = 0; memcpy(key->pkt, pkt, pktlen); exit: return rpmPubkeyLink(key); }
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; }