1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-06 17:53:13 +02:00

relay: set Diffie-Hellman parameters on first SSL connection from a client (makes relay plugin load faster), reuse function gnutls_sec_param_to_pk_bits

This commit is contained in:
Sebastien Helleu
2012-07-30 09:28:27 +02:00
parent ee74131f69
commit 3f973f8cbc
3 changed files with 34 additions and 7 deletions
+24
View File
@@ -626,6 +626,7 @@ relay_client_new (int sock, const char *address, struct t_relay_server *server)
{
struct t_relay_client *new_client;
#ifdef HAVE_GNUTLS
int bits;
struct t_config_option *ptr_option;
#endif
@@ -664,6 +665,29 @@ relay_client_new (int sock, const char *address, struct t_relay_server *server)
weechat_prefix ("error"), RELAY_PLUGIN_NAME);
}
new_client->status = RELAY_STATUS_CONNECTING;
/*
* set Diffie-Hellman parameters on first SSL connection from a
* client (done only one time)
*/
if (!relay_gnutls_dh_params)
{
relay_gnutls_dh_params = malloc (sizeof (*relay_gnutls_dh_params));
if (relay_gnutls_dh_params)
{
gnutls_dh_params_init (relay_gnutls_dh_params);
#if LIBGNUTLS_VERSION_NUMBER >= 0x020c00
/* for gnutls >= 2.12.0 */
bits = gnutls_sec_param_to_pk_bits (GNUTLS_PK_DH,
GNUTLS_SEC_PARAM_LOW);
#else
/* default for old gnutls */
bits = 1024;
#endif
gnutls_dh_params_generate2 (*relay_gnutls_dh_params, bits);
gnutls_certificate_set_dh_params (relay_gnutls_x509_cred,
*relay_gnutls_dh_params);
}
}
gnutls_init (&(new_client->gnutls_sess), GNUTLS_SERVER);
if (relay_gnutls_priority_cache)
gnutls_priority_set (new_client->gnutls_sess, *relay_gnutls_priority_cache);
+9 -7
View File
@@ -38,8 +38,8 @@ int relay_network_init_ssl_cert_key_ok = 0;
#ifdef HAVE_GNUTLS
gnutls_certificate_credentials_t relay_gnutls_x509_cred;
gnutls_priority_t *relay_gnutls_priority_cache;
gnutls_dh_params_t relay_gnutls_dh_params;
gnutls_priority_t *relay_gnutls_priority_cache = NULL;
gnutls_dh_params_t *relay_gnutls_dh_params = NULL;
#endif
@@ -118,11 +118,6 @@ relay_network_init ()
gnutls_certificate_allocate_credentials (&relay_gnutls_x509_cred);
relay_network_set_ssl_cert_key (0);
/* Diffie-Hellman parameters */
gnutls_dh_params_init (&relay_gnutls_dh_params);
gnutls_dh_params_generate2 (relay_gnutls_dh_params, 1024);
gnutls_certificate_set_dh_params (relay_gnutls_x509_cred, relay_gnutls_dh_params);
/* priority */
relay_gnutls_priority_cache = malloc (sizeof (*relay_gnutls_priority_cache));
if (relay_gnutls_priority_cache)
@@ -155,6 +150,13 @@ relay_network_end ()
{
gnutls_priority_deinit (*relay_gnutls_priority_cache);
free (relay_gnutls_priority_cache);
relay_gnutls_priority_cache = NULL;
}
if (relay_gnutls_dh_params)
{
gnutls_dh_params_deinit (*relay_gnutls_dh_params);
free (relay_gnutls_dh_params);
relay_gnutls_dh_params = NULL;
}
gnutls_certificate_free_credentials (relay_gnutls_x509_cred);
#endif
+1
View File
@@ -30,6 +30,7 @@ extern int relay_network_init_ssl_cert_key_ok;
#ifdef HAVE_GNUTLS
extern gnutls_certificate_credentials_t relay_gnutls_x509_cred;
extern gnutls_priority_t *relay_gnutls_priority_cache;
extern gnutls_dh_params_t *relay_gnutls_dh_params;
#endif
extern void relay_network_set_ssl_cert_key (int verbose);