From 3897bdc37d7667ffb5414dcea91802de3342b9e9 Mon Sep 17 00:00:00 2001 From: Panu Matilainen Date: Fri, 8 Aug 2008 09:26:30 +0300 Subject: [PATCH] Add couple of new rpmPubkey() methods - rpmPubkeyDig() to retrieve parsed OpenPGP parameters of key - rpmPubkeyBase64() to return base64 encoding of the key --- rpmio/rpmkeyring.c | 30 ++++++++++++++++++++++++++++++ rpmio/rpmkeyring.h | 14 ++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/rpmio/rpmkeyring.c b/rpmio/rpmkeyring.c index 1dfc6ee..0ffbe1e 100644 --- a/rpmio/rpmkeyring.c +++ b/rpmio/rpmkeyring.c @@ -165,6 +165,36 @@ rpmPubkey rpmPubkeyUnlink(rpmPubkey key) return NULL; } +pgpDig rpmPubkeyDig(rpmPubkey key) +{ + pgpDig dig = NULL; + static unsigned char zeros[] = + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + if (key == NULL) + return NULL; + + dig = pgpNewDig(); + if (pgpPrtPkts(key->pkt, key->pktlen, dig, 0) == 0) { + pgpDigParams pubp = &dig->pubkey; + if (!memcmp(pubp->signid, zeros, sizeof(pubp->signid)) || + !memcmp(pubp->time, zeros, sizeof(pubp->time)) || + pubp->userid == NULL) { + dig = pgpFreeDig(dig); + } + } + return dig; +} + +char * rpmPubkeyBase64(rpmPubkey key) +{ + char *enc = NULL; + + if (key) { + enc = b64encode(key->pkt, key->pktlen, -1); + } + return enc; +} + rpmRC rpmKeyringLookup(rpmKeyring keyring, pgpDig sig) { rpmRC res = RPMRC_NOKEY; diff --git a/rpmio/rpmkeyring.h b/rpmio/rpmkeyring.h index a39d375..6ba4767 100644 --- a/rpmio/rpmkeyring.h +++ b/rpmio/rpmkeyring.h @@ -86,4 +86,18 @@ rpmPubkey rpmPubkeyLink(rpmPubkey key); */ rpmPubkey rpmPubkeyUnlink(rpmPubkey key); +/** \ingroup rpmkeyring + * Parse OpenPGP pubkey parameters. + * @param key Pubkey + * @return parsed output of pubkey packet parameters + */ +pgpDig rpmPubkeyDig(rpmPubkey key); + +/** \ingroup rpmkeyring + * Return base64 encoding of pubkey + * @param key Pubkey + * @return base64 encoded pubkey (malloced), NULL on error + */ +char * rpmPubkeyBase64(rpmPubkey key); + #endif /* _RPMKEYDB_H */ -- 2.7.4