From 8aebe159657d9df2b1688b0e4cf5d5b75c6d30f7 Mon Sep 17 00:00:00 2001 From: Martin Kaiser Date: Mon, 9 Dec 2013 17:51:48 +0000 Subject: [PATCH] fix compilation without GNUTLS and libgcrypt move from_hex_char() and from_hex() outside ifdef gnutls add dummy ssl_generate_pre_master_secret() this should fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9529 svn path=/trunk/; revision=53884 --- epan/dissectors/packet-ssl-utils.c | 74 +++++++++++++++++------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/epan/dissectors/packet-ssl-utils.c b/epan/dissectors/packet-ssl-utils.c index a19ac10151..987df803e1 100644 --- a/epan/dissectors/packet-ssl-utils.c +++ b/epan/dissectors/packet-ssl-utils.c @@ -1351,6 +1351,40 @@ ssl_data_set(StringInfo* str, const guchar* data, guint len) str->data_len = len; } + +static guint8 +from_hex_char(gchar c) { + if ((c >= '0') && (c <= '9')) + return c - '0'; + if ((c >= 'A') && (c <= 'F')) + return c - 'A' + 10; + if ((c >= 'a') && (c <= 'f')) + return c - 'a' + 10; + return 16; +} + +/* from_hex converts |hex_len| bytes of hex data from |in| and sets |*out| to + * the result. |out->data| will be allocated using se_alloc. Returns TRUE on + * success. */ +static gboolean from_hex(StringInfo* out, const char* in, gsize hex_len) { + gsize i; + + if (hex_len & 1) + return FALSE; + + out->data_len = (guint)hex_len/2; + out->data = (guchar *)wmem_alloc(wmem_file_scope(), out->data_len); + for (i = 0; i < out->data_len; i++) { + guint8 a = from_hex_char(in[i*2]); + guint8 b = from_hex_char(in[i*2 + 1]); + if (a == 16 || b == 16) + return FALSE; + out->data[i] = a << 4 | b; + } + return TRUE; +} + + #if defined(HAVE_LIBGNUTLS) && defined(HAVE_LIBGCRYPT) /* hmac abstraction layer */ @@ -2307,38 +2341,6 @@ ssl_create_decoder(SslCipherSuite *cipher_suite, gint compression, } -static guint8 -from_hex_char(gchar c) { - if ((c >= '0') && (c <= '9')) - return c - '0'; - if ((c >= 'A') && (c <= 'F')) - return c - 'A' + 10; - if ((c >= 'a') && (c <= 'f')) - return c - 'a' + 10; - return 16; -} - -/* from_hex converts |hex_len| bytes of hex data from |in| and sets |*out| to - * the result. |out->data| will be allocated using se_alloc. Returns TRUE on - * success. */ -static gboolean from_hex(StringInfo* out, const char* in, gsize hex_len) { - gsize i; - - if (hex_len & 1) - return FALSE; - - out->data_len = (guint)hex_len/2; - out->data = (guchar *)wmem_alloc(wmem_file_scope(), out->data_len); - for (i = 0; i < out->data_len; i++) { - guint8 a = from_hex_char(in[i*2]); - guint8 b = from_hex_char(in[i*2 + 1]); - if (a == 16 || b == 16) - return FALSE; - out->data[i] = a << 4 | b; - } - return TRUE; -} - int ssl_generate_pre_master_secret(SslDecryptSession *ssl_session, guint32 length, tvbuff_t *tvb, guint32 offset, @@ -3662,6 +3664,14 @@ ssl_find_cipher(int num,SslCipherSuite* cs) return 0; } int +ssl_generate_pre_master_secret(SslDecryptSession *ssl_session _U_, + guint32 length _U_, tvbuff_t *tvb _U_, guint32 offset _U_, + const gchar *ssl_psk _U_, const gchar *keylog_filename _U_) +{ + ssl_debug_printf("ssl_generate_pre_master_secret: impossible without gnutls.\n"); + return 0; +} +int ssl_generate_keyring_material(SslDecryptSession*ssl) { ssl_debug_printf("ssl_generate_keyring_material: impossible without gnutls. ssl %p\n",