Add couple of new rpmPubkey() methods
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 8 Aug 2008 06:26:30 +0000 (09:26 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 8 Aug 2008 06:26:30 +0000 (09:26 +0300)
- rpmPubkeyDig() to retrieve parsed OpenPGP parameters of key
- rpmPubkeyBase64() to return base64 encoding of the key

rpmio/rpmkeyring.c
rpmio/rpmkeyring.h

index 1dfc6ee..0ffbe1e 100644 (file)
@@ -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;
index a39d375..6ba4767 100644 (file)
@@ -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 */