32
32
#include <epan/emem.h>
34
static gint ver_major, ver_minor, ver_patch;
35
ssl_data_set(StringInfo* str, guchar* data, guint len)
37
ssl_data_set(StringInfo* str, const guchar* data, guint len)
37
39
memcpy(str->data, data, len);
38
40
str->data_len = len;
1146
/* old relase of gnutls does not define the appropriate macros, so get
1147
* them from the string*/
1149
1150
ssl_get_version(gint* major, gint* minor, gint* patch)
1151
const gchar* str = gnutls_check_version(NULL);
1153
ssl_debug_printf("ssl_get_version: %s\n", str);
1154
sscanf(str, "%d.%d.%d", major, minor, patch);
1295
1295
ssl_lib_init(void)
1297
const gchar* str = gnutls_check_version(NULL);
1299
/* get library version */
1300
/* old relase of gnutls does not define the appropriate macros, so get
1301
* them from the string*/
1302
ssl_debug_printf("gnutls version: %s\n", str);
1303
sscanf(str, "%d.%d.%d", &ver_major, &ver_minor, &ver_patch);
1299
1306
#else /* HAVE_LIBGNUTLS */
1360
ssl_cipher_setiv(SSL_CIPHER_CTX *cipher, guchar* iv, gint iv_len)
1362
ssl_debug_printf("ssl_cipher_setiv: impossible without glutls.\n");
1352
1366
#endif /* HAVE_LIBGNUTLS */
1354
1368
/* get ssl data for this session. if no ssl data is found allocate a new one*/
1363
1377
ssl_session->client_random.data = ssl_session->_client_random;
1364
1378
ssl_session->server_random.data = ssl_session->_server_random;
1365
1379
ssl_session->master_secret.data_len = 48;
1380
ssl_session->server_data_for_iv.data = 0;
1381
ssl_session->server_data_for_iv.data = ssl_session->_server_data_for_iv;
1382
ssl_session->client_data_for_iv.data = 0;
1383
ssl_session->client_data_for_iv.data = ssl_session->_client_data_for_iv;
1366
1384
ssl_session->app_data_segment.data=NULL;
1367
1385
ssl_session->app_data_segment.data_len=0;
1459
1477
(assoc->tcp)?"TCP":"UDP", port, protocol, assoc->handle);
1480
if (!assoc->handle) {
1481
ssl_debug_printf("association_add could not find handle for protocol '%s', try to find 'data' dissector\n", protocol);
1482
assoc->handle = find_dissector("data");
1462
1485
if(!assoc->handle){
1463
1486
fprintf(stderr, "association_add() could not find handle for protocol:%s\n",protocol);
1594
ssl_add_data_info(gint proto, packet_info *pinfo, guchar* data, gint data_len, gint key, guint32 seq)
1596
SslDataInfo *rec, **prec;
1599
pi = p_get_proto_data(pinfo->fd, proto);
1602
pi = se_alloc0(sizeof(SslPacketInfo));
1603
p_add_proto_data(pinfo->fd, proto,pi);
1606
rec = se_alloc(sizeof(SslDataInfo)+data_len);
1608
rec->plain_data.data = (guchar*)(rec + 1);
1609
memcpy(rec->plain_data.data, data, data_len);
1610
rec->plain_data.data_len = data_len;
1612
rec->nxtseq = seq + data_len;
1616
prec = &pi->appl_data;
1617
while (*prec) prec = &(*prec)->next;
1620
ssl_debug_printf("ssl_add_data_info: new data inserted data_len = %d, seq = %u, nxtseq = %u\n",
1621
rec->plain_data.data_len, rec->seq, rec->nxtseq);
1625
ssl_get_data_info(int proto, packet_info *pinfo, gint key)
1629
pi = p_get_proto_data(pinfo->fd, proto);
1631
if (!pi) return NULL;
1633
rec = pi->appl_data;
1635
if (rec->key == key) return rec;
1570
1642
/* initialize/reset per capture state data (ssl sessions cache) */
1572
1644
ssl_common_init(GHashTable **session_hash , StringInfo * decrypted_data)
1595
1667
start = strdup(keys_list);
1597
ssl_debug_printf("ssl_init keys string %s\n", start);
1669
ssl_debug_printf("ssl_init keys string:\n%s\n", start);
1599
1671
gchar* addr, *port, *protocol, *filename;
1602
1674
/* split ip/file couple with ';' separator*/
1603
end = strchr(start, ';');
1675
end = strpbrk(start, ";\n\r");
1681
/* skip comments (in file) */
1682
if (addr[0] == '#') continue;
1609
1684
/* for each entry split ip, port, protocol, filename with ',' separator */
1610
1685
ssl_debug_printf("ssl_init found host entry %s\n", addr);
1611
1686
port = strchr(addr, ',');
1614
ssl_debug_printf("ssl_init entry malformed can't find port in %s\n", addr);
1689
ssl_debug_printf("ssl_init entry malformed can't find port in '%s'\n", addr);
1649
1724
fp = fopen(filename, "rb");
1651
1726
fprintf(stderr, "can't open file %s \n",filename);
1655
1730
private_key = ssl_load_key(fp);
1656
1731
if (!private_key) {
1657
1732
fprintf(stderr,"can't load private key from %s\n",