Explorar el Código

Allow to set keypair for a connection.

tags/0.9.0
Vsevolod Stakhov hace 9 años
padre
commit
a5fdfa3a5a
Se han modificado 2 ficheros con 44 adiciones y 0 borrados
  1. 34
    0
      src/libutil/http.c
  2. 10
    0
      src/libutil/http.h

+ 34
- 0
src/libutil/http.c Ver fichero

@@ -888,6 +888,11 @@ rspamd_http_connection_free (struct rspamd_http_connection *conn)

priv = conn->priv;
rspamd_http_connection_reset (conn);

if (priv->local_key) {
g_slice_free1 (sizeof (*priv->local_key), priv->local_key);
}

g_slice_free1 (sizeof (struct rspamd_http_connection_private), priv);
g_slice_free1 (sizeof (struct rspamd_http_connection), conn);
}
@@ -1534,3 +1539,32 @@ rspamd_http_router_free (struct rspamd_http_connection_router *router)
g_slice_free1 (sizeof (struct rspamd_http_connection_router), router);
}
}

gboolean
rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
gchar *key, gsize keylen)
{
guchar *decoded;
gsize decoded_len;
struct rspamd_http_connection_private *priv = conn->priv;

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,
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);

return TRUE;
}
g_free (decoded);
}

return FALSE;
}

+ 10
- 0
src/libutil/http.h Ver fichero

@@ -147,6 +147,16 @@ struct rspamd_http_connection * rspamd_http_connection_new (
unsigned opts,
enum rspamd_http_connection_type type);

/**
* Load the encryption keypair for this connection
* @param conn connection structure
* @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
*/
gboolean rspamd_http_connection_set_key (struct rspamd_http_connection *conn,
gchar *key, gsize keylen);

/**
* Handle a request using socket fd and user data ud
* @param conn connection structure

Cargando…
Cancelar
Guardar