uint8_t *pkt;
size_t pktlen;
pgpKeyID_t keyid;
+ pgpDigParams pgpkey;
int nrefs;
};
rpmPubkey rpmPubkeyNew(const uint8_t *pkt, size_t pktlen)
{
rpmPubkey key = NULL;
+ pgpDigParams pgpkey = NULL;
pgpKeyID_t keyid;
if (pkt == NULL || pktlen == 0)
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));
if (key->nrefs > 1)
return rpmPubkeyUnlink(key);
+ pgpDigParamsFree(key->pgpkey);
free(key->pkt);
free(key);
return NULL;