diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2015-01-21 07:49:20 +0100 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2015-01-21 07:49:20 +0100 |
commit | b30ad7d7f600a3d36046bf1d8006ddc96dd778bf (patch) | |
tree | f38648746f624b23ed4d99d12db164edad48df92 /src | |
parent | 9a1af2d4a89faff30dd13eb4685ce6c75a4319a9 (diff) | |
download | weechat-b30ad7d7f600a3d36046bf1d8006ddc96dd778bf.zip |
irc: fix compilation of SASL "ecdsa-nist256p-challenge"
Gnutls >= 3.0.21 is now required for SASL "ecdsa-nist256p-challenge".
Gnutls >= 3.3.0 is required to display the public key when connecting.
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/irc/irc-sasl.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/plugins/irc/irc-sasl.c b/src/plugins/irc/irc-sasl.c index bc31b5b5a..ad90f5b74 100644 --- a/src/plugins/irc/irc-sasl.c +++ b/src/plugins/irc/irc-sasl.c @@ -27,8 +27,10 @@ #ifdef HAVE_GNUTLS #include <gnutls/gnutls.h> +#if LIBGNUTLS_VERSION_NUMBER >= 0x020a01 /* 2.10.1 */ #include <gnutls/abstract.h> #endif +#endif #include "../weechat-plugin.h" #include "irc.h" @@ -133,13 +135,18 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, const char *sasl_username, const char *sasl_key) { +#if defined(HAVE_GNUTLS) && (LIBGNUTLS_VERSION_NUMBER >= 0x030015) /* 3.0.21 */ char *data, *string, *answer_base64; int length_data, length_username, length, ret; - char *str_privkey, *pubkey, *pubkey_base64; + char *str_privkey; gnutls_x509_privkey_t x509_privkey; gnutls_privkey_t privkey; + gnutls_datum_t filedatum, decoded_data, signature; +#if LIBGNUTLS_VERSION_NUMBER >= 0x030300 /* 3.3.0 */ gnutls_ecc_curve_t curve; - gnutls_datum_t filedatum, x, y, k, decoded_data, signature; + gnutls_datum_t x, y, k; + char *pubkey, *pubkey_base64; +#endif answer_base64 = NULL; string = NULL; @@ -198,6 +205,7 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, return NULL; } +#if LIBGNUTLS_VERSION_NUMBER >= 0x030300 /* 3.3.0 */ /* read raw values in key, to display public key */ ret = gnutls_x509_privkey_export_ecc_raw (x509_privkey, &curve, &x, &y, &k); @@ -228,9 +236,10 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, gnutls_free (y.data); gnutls_free (k.data); } +#endif /* import private key in an abstract key structure */ - ret = gnutls_privkey_import_x509 (privkey, x509_privkey, 0); + ret = gnutls_privkey_import_x509 (privkey, x509_privkey, 0); /* gnutls >= 2.11.0 */ if (ret != GNUTLS_E_SUCCESS) { weechat_printf ( @@ -247,7 +256,7 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, decoded_data.data = (unsigned char *)data; decoded_data.size = length_data; - ret = gnutls_privkey_sign_hash (privkey, GNUTLS_DIG_SHA256, 0, + ret = gnutls_privkey_sign_hash (privkey, GNUTLS_DIG_SHA256, 0, /* gnutls >= 2.11.0 */ &decoded_data, &signature); if (ret != GNUTLS_E_SUCCESS) { @@ -285,6 +294,21 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server, } return answer_base64; + +#else /* no gnutls or gnutls < 3.0.21 */ + + /* make C compiler happy */ + (void) data_base64; + (void) sasl_username; + (void) sasl_key; + + weechat_printf (server->buffer, + _("%sgnutls: version >= 3.0.21 is required for SASL " + "\"ecdsa-nist256p-challenge\""), + weechat_prefix ("error")); + + return NULL; +#endif } /* |