]> source.dussan.org Git - rspamd.git/commitdiff
Rework key API to allow reusing of keypairs.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 28 Jan 2015 17:52:59 +0000 (17:52 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 28 Jan 2015 17:52:59 +0000 (17:52 +0000)
src/libutil/http.c
src/libutil/http.h

index 91cf43084daf2483a64465c2ae31e1996be9fc1e..84e4b26550e10a8dc2100bed9844c3af08d606d1 100644 (file)
@@ -1540,31 +1540,40 @@ rspamd_http_router_free (struct rspamd_http_connection_router *router)
        }
 }
 
-gboolean
-rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
-               gchar *key, gsize keylen)
+gpointer
+rspamd_http_connection_make_key (gchar *key, gsize keylen)
 {
        guchar *decoded;
        gsize decoded_len;
-       struct rspamd_http_connection_private *priv = conn->priv;
+       struct rspamd_http_keypair *kp;
 
        decoded = rspamd_decode_base32 (key, keylen, &decoded_len);
 
        if (decoded != NULL) {
                if (decoded_len == crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES) {
-                       priv->local_key = g_slice_alloc (sizeof (*priv->local_key));
-                       memcpy (priv->local_key->sk, decoded, crypto_box_SECRETKEYBYTES);
-                       memcpy (priv->local_key->pk, decoded + crypto_box_SECRETKEYBYTES,
+                       kp = g_slice_alloc (sizeof (*kp));
+                       memcpy (kp->sk, decoded, crypto_box_SECRETKEYBYTES);
+                       memcpy (kp->pk, decoded + crypto_box_SECRETKEYBYTES,
                                        crypto_box_PUBLICKEYBYTES);
-                       crypto_box_beforenm (priv->local_key->beforenm, priv->local_key->pk,
-                                       priv->local_key->sk);
-                       blake2b (priv->local_key->id, priv->local_key->pk, NULL,
-                                       sizeof (priv->local_key->id), sizeof (priv->local_key->pk), 0);
+                       crypto_box_beforenm (kp->beforenm, kp->pk,
+                                       kp->sk);
+                       blake2b (kp->id, kp->pk, NULL, sizeof (kp->id), sizeof (kp->pk), 0);
 
-                       return TRUE;
+                       return (gpointer)kp;
                }
                g_free (decoded);
        }
 
        return FALSE;
 }
+
+void
+rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
+               gpointer key)
+{
+       struct rspamd_http_connection_private *priv = conn->priv;
+       struct rspamd_http_keypair *kp = (struct rspamd_http_keypair *)key;
+
+       g_assert (key != NULL);
+       priv->local_key = kp;
+}
index 10634e2c79be2d7c875369ecdfabb32ba913d7c4..5234fe46b3380811b38e27a764c52c63eecc86bd 100644 (file)
@@ -148,14 +148,20 @@ struct rspamd_http_connection * rspamd_http_connection_new (
        enum rspamd_http_connection_type type);
 
 /**
- * Load the encryption keypair for this connection
- * @param conn connection structure
+ * Load the encryption keypair
  * @param key base32 encoded privkey and pubkey (in that order)
  * @param keylen length of base32 string
- * @return TRUE if a key has been loaded successfully
+ * @return opaque pointer pr NULL in case of error
+ */
+gpointer rspamd_http_connection_make_key (gchar *key, gsize keylen);
+
+/**
+ * Set key pointed by an opaque pointer
+ * @param conn connection structure
+ * @param key opaque key structure
  */
-gboolean rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
-               gchar *key, gsize keylen);
+void rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
+               gpointer key);
 
 /**
  * Handle a request using socket fd and user data ud