]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Add more utilities to operate with keypairs
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 5 Feb 2016 23:53:57 +0000 (23:53 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 5 Feb 2016 23:53:57 +0000 (23:53 +0000)
src/libcryptobox/keypair.c
src/libcryptobox/keypair.h

index 61a5f687d459abfd6aca776bad0d567d80541fa4..0cd6f9eb38d21d8a026ef0506ab28ba7f22faac5 100644 (file)
@@ -451,6 +451,21 @@ rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk)
        return pk->id;
 }
 
+const guchar *
+rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
+               guint *len)
+{
+       guchar *ret = NULL;
+       guint rlen;
+
+       ret = rspamd_cryptobox_pubkey_pk (pk, &rlen);
+
+       if (len) {
+               *len = rlen;
+       }
+
+       return ret;
+}
 
 static void
 rspamd_keypair_print_component (guchar *data, gsize datalen,
@@ -513,3 +528,32 @@ rspamd_keypair_print (struct rspamd_cryptobox_keypair *kp, guint how)
 
        return res;
 }
+
+const guchar *
+rspamd_keypair_component (struct rspamd_cryptobox_keypair *kp,
+               guint ncomp, guint *len)
+{
+       guint rlen = 0;
+       const guchar *ret = NULL;
+
+       g_assert (kp != NULL);
+
+       switch (ncomp) {
+       case RSPAMD_KEYPAIR_COMPONENT_ID:
+               rlen = sizeof (kp->id);
+               ret = kp->id;
+               break;
+       case RSPAMD_KEYPAIR_COMPONENT_PK:
+               ret = rspamd_cryptobox_keypair_pk (kp, &rlen);
+               break;
+       case RSPAMD_KEYPAIR_COMPONENT_SK:
+               ret = rspamd_cryptobox_keypair_sk (kp, &rlen);
+               break;
+       }
+
+       if (len) {
+               *len = rlen;
+       }
+
+       return ret;
+}
index bd82b64ae55c7c8ea2d0677ad738ec1afd7f0e06..613c1296d968c8a593f2a35788c2514b8fa1dc9d 100644 (file)
@@ -148,6 +148,14 @@ const guchar * rspamd_keypair_get_id (struct rspamd_cryptobox_keypair *kp);
  */
 const guchar * rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk);
 
+/**
+ * Get raw public key from pubkey opaque structure
+ * @param pk
+ * @param len
+ * @return
+ */
+const guchar * rspamd_pubkey_get_pk (struct rspamd_cryptobox_pubkey *pk,
+               guint *len);
 
 /** Print pubkey */
 #define RSPAMD_KEYPAIR_PUBKEY 0x1
@@ -171,4 +179,20 @@ const guchar * rspamd_pubkey_get_id (struct rspamd_cryptobox_pubkey *pk);
 GString *rspamd_keypair_print (struct rspamd_cryptobox_keypair *kp,
                guint how);
 
+/** Get keypair pubkey ID */
+#define RSPAMD_KEYPAIR_COMPONENT_ID 0
+/** Get keypair public key */
+#define RSPAMD_KEYPAIR_COMPONENT_PK 1
+/** Get keypair private key */
+#define RSPAMD_KEYPAIR_COMPONENT_SK 2
+/**
+ * Get specific component of a keypair
+ * @param kp keypair
+ * @param ncomp component number
+ * @param len length of input
+ * @return raw content of the component
+ */
+const guchar * rspamd_keypair_component (struct rspamd_cryptobox_keypair *kp,
+               guint ncomp, guint *len);
+
 #endif /* SRC_LIBCRYPTOBOX_KEYPAIR_H_ */