forked from osmocom/wireshark
Updates from Alexandre P. Ferreira.
svn path=/trunk/; revision=3396
This commit is contained in:
parent
923ee151b7
commit
a7db881896
392
packet-wtls.c
392
packet-wtls.c
|
@ -2,7 +2,7 @@
|
||||||
*
|
*
|
||||||
* Routines to dissect WTLS component of WAP traffic.
|
* Routines to dissect WTLS component of WAP traffic.
|
||||||
*
|
*
|
||||||
* $Id: packet-wtls.c,v 1.7 2001/04/19 23:02:43 guy Exp $
|
* $Id: packet-wtls.c,v 1.8 2001/05/02 22:37:06 guy Exp $
|
||||||
*
|
*
|
||||||
* Ethereal - Network traffic analyzer
|
* Ethereal - Network traffic analyzer
|
||||||
* By Gerald Combs <gerald@zing.org>
|
* By Gerald Combs <gerald@zing.org>
|
||||||
|
@ -74,6 +74,7 @@ static int hf_wtls_hands_cli_hello_version = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_gmt = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_gmt = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_random = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_random = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_session = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_session = HF_EMPTY;
|
||||||
|
static int hf_wtls_hands_cli_hello_session_str = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_cli_key_id = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_cli_key_id = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_cli_key_len = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_cli_key_len = HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_trust_key_id = HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_trust_key_id = HF_EMPTY;
|
||||||
|
@ -85,10 +86,9 @@ static int hf_wtls_hands_cli_hello_key_identifier_type =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_key_identifier_charset =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_key_identifier_charset =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_key_identifier_size =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_key_identifier_size =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_key_identifier =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_key_identifier =HF_EMPTY;
|
||||||
|
static int hf_wtls_hands_cli_hello_key_identifier_str =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_cipher_suite =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_cipher_suite =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_cipher_suite_item =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_cipher_suite_item =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_cipher_bulk =HF_EMPTY;
|
|
||||||
static int hf_wtls_hands_cli_hello_cipher_mac =HF_EMPTY;
|
|
||||||
static int hf_wtls_hands_cli_hello_compression_methods =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_compression_methods =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_compression =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_compression =HF_EMPTY;
|
||||||
static int hf_wtls_hands_cli_hello_sequence_mode =HF_EMPTY;
|
static int hf_wtls_hands_cli_hello_sequence_mode =HF_EMPTY;
|
||||||
|
@ -98,6 +98,7 @@ static int hf_wtls_hands_serv_hello_version = HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_gmt = HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_gmt = HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_random = HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_random = HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_session = HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_session = HF_EMPTY;
|
||||||
|
static int hf_wtls_hands_serv_hello_session_str = HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_cli_key_id =HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_cli_key_id =HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_cipher_suite_item =HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_cipher_suite_item =HF_EMPTY;
|
||||||
static int hf_wtls_hands_serv_hello_cipher_bulk =HF_EMPTY;
|
static int hf_wtls_hands_serv_hello_cipher_bulk =HF_EMPTY;
|
||||||
|
@ -455,6 +456,8 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
guint public_key = 0;
|
guint public_key = 0;
|
||||||
guint signature = 0;
|
guint signature = 0;
|
||||||
char valStr[1024];
|
char valStr[1024];
|
||||||
|
char *valBulk = NULL;
|
||||||
|
char *valMac = NULL;
|
||||||
|
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_item *cli_key_item;
|
proto_item *cli_key_item;
|
||||||
|
@ -491,8 +494,32 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
tvb,offset,12,bo_big_endian);
|
tvb,offset,12,bo_big_endian);
|
||||||
offset+=12;
|
offset+=12;
|
||||||
count = tvb_get_guint8(tvb, offset);
|
count = tvb_get_guint8(tvb, offset);
|
||||||
ti = proto_tree_add_item (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session,
|
switch(count) {
|
||||||
tvb,offset,count+1,bo_big_endian);
|
case 0:
|
||||||
|
ti = proto_tree_add_string (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session_str,
|
||||||
|
tvb,offset,count+1,"NULL");
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_guint8(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntohs(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 3 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntoh24(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 4 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntohl(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ti = proto_tree_add_string (wtls_msg_type_item_tree, hf_wtls_hands_cli_hello_session_str,
|
||||||
|
tvb,offset,count+1,"Too big");
|
||||||
|
break;
|
||||||
|
}
|
||||||
offset+=1+count;
|
offset+=1+count;
|
||||||
|
|
||||||
/* process client_key_ids structure */
|
/* process client_key_ids structure */
|
||||||
|
@ -560,70 +587,75 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
|
|
||||||
/* identifier present in next field */
|
/* identifier present in next field */
|
||||||
/* note: value 0x0 means no identifier */
|
/* note: value 0x0 means no identifier */
|
||||||
if (value == 0x01) { /* text identifier */
|
switch(value) {
|
||||||
/* not tested */
|
case 0x01 : /* text identifier */
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
/* not teste */
|
||||||
hf_wtls_hands_cli_hello_key_identifier_charset,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
tvb,offset,2,bo_big_endian);
|
hf_wtls_hands_cli_hello_key_identifier_charset,
|
||||||
offset+=2;
|
tvb,offset,2,bo_big_endian);
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
offset+=2;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
tvb,offset,1,bo_big_endian);
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
offset++;
|
tvb,offset,1,bo_big_endian);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
offset++;
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
strncpy(valStr,tvb_get_ptr (tvb, offset, size),size);
|
||||||
tvb,offset,size,bo_big_endian);
|
valStr[size]=0;
|
||||||
offset+=size;
|
ti = proto_tree_add_string(
|
||||||
client_size+=size+3;
|
wtls_msg_type_item_sub_sub_tree,
|
||||||
|
hf_wtls_hands_cli_hello_key_identifier_str,
|
||||||
|
tvb, offset,size,valStr);
|
||||||
|
offset+=size;
|
||||||
|
client_size+=size+3;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "text id size = %d, client_size = %d\n",
|
fprintf(stderr, "text id size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0x02) { /* binary identifier */
|
case 0x02 : /* binary identifier */
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
tvb,offset,1,bo_big_endian);
|
tvb,offset,1,bo_big_endian);
|
||||||
offset++;
|
offset++;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,size,bo_big_endian);
|
tvb,offset,size,bo_big_endian);
|
||||||
offset+=size;
|
offset+=size;
|
||||||
client_size+=size+1;
|
client_size+=size+1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "binary id size = %d, client_size = %d\n",
|
fprintf(stderr, "binary id size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0xfe) { /* SHA-1 hash of the public key */
|
case 0xfe : /* SHA-1 hash of the public key */
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,20,bo_big_endian);
|
tvb,offset,20,bo_big_endian);
|
||||||
offset+=20;
|
offset+=20;
|
||||||
client_size+=20;
|
client_size+=20;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "SHA-1 hash size = 20, client_size = %d\n",
|
fprintf(stderr, "SHA-1 hash size = 20, client_size = %d\n",
|
||||||
client_size);
|
client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0xff) { /* X.509 distinguished name */
|
case 0xff : /* X.509 distinguished name */
|
||||||
/* not tested */
|
/* not tested */
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
tvb,offset,1,bo_big_endian);
|
tvb,offset,1,bo_big_endian);
|
||||||
offset++;
|
offset++;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,size,bo_big_endian);
|
tvb,offset,size,bo_big_endian);
|
||||||
offset+=size;
|
offset+=size;
|
||||||
client_size+=size+1;
|
client_size+=size+1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "X.509 name size = %d, client_size = %d\n",
|
fprintf(stderr, "X.509 name size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
proto_item_set_len(cli_key_item, client_size);
|
proto_item_set_len(cli_key_item, client_size);
|
||||||
|
@ -693,71 +725,76 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
|
|
||||||
/* identifier present in next field */
|
/* identifier present in next field */
|
||||||
/* note: value 0x0 means no identifier */
|
/* note: value 0x0 means no identifier */
|
||||||
if (value == 0x01) { /* text identifier */
|
switch (value) {
|
||||||
/* not tested */
|
case 0x01 : /* text identifier */
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
/* not temasted */
|
||||||
hf_wtls_hands_cli_hello_key_identifier_charset,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
tvb,offset,2,bo_big_endian);
|
hf_wtls_hands_cli_hello_key_identifier_charset,
|
||||||
offset+=2;
|
tvb,offset,2,bo_big_endian);
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
offset+=2;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
tvb,offset,1,bo_big_endian);
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
offset++;
|
tvb,offset,1,bo_big_endian);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
offset++;
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
strncpy(valStr,tvb_get_ptr (tvb, offset, size),size);
|
||||||
tvb,offset,size,bo_big_endian);
|
valStr[size]=0;
|
||||||
offset+=size;
|
ti = proto_tree_add_string(
|
||||||
client_size+=size+3;
|
wtls_msg_type_item_sub_sub_tree,
|
||||||
|
hf_wtls_hands_cli_hello_key_identifier_str,
|
||||||
|
tvb, offset,size,valStr);
|
||||||
|
offset+=size;
|
||||||
|
client_size+=size+3;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "text id size = %d, client_size = %d\n",
|
fprintf(stderr, "text id size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0x02) { /* binary identifier */
|
case 0x02 : /* binary identifier */
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
tvb,offset,1,bo_big_endian);
|
tvb,offset,1,bo_big_endian);
|
||||||
offset++;
|
offset++;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,size,bo_big_endian);
|
tvb,offset,size,bo_big_endian);
|
||||||
offset+=size;
|
offset+=size;
|
||||||
client_size+=size+1;
|
client_size+=size+1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "binary id size = %d, client_size = %d\n",
|
fprintf(stderr, "binary id size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0xfe) { /* SHA-1 hash of the public key */
|
case 0xfe : /* SHA-1 hash of the public key */
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,20,bo_big_endian);
|
tvb,offset,20,bo_big_endian);
|
||||||
offset+=20;
|
offset+=20;
|
||||||
client_size+=20;
|
client_size+=20;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "SHA-1 hash size = 20, client_size = %d\n",
|
fprintf(stderr, "SHA-1 hash size = 20, client_size = %d\n",
|
||||||
client_size);
|
client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
}
|
break;
|
||||||
else if (value == 0xff) { /* X.509 distinguished name */
|
case 0xff : /* X.509 distinguished name */
|
||||||
/* not tested */
|
/* not testet */
|
||||||
size = tvb_get_guint8 (tvb, offset);
|
size = tvb_get_guint8 (tvb, offset);
|
||||||
/* need to fetch identifier and display it */
|
/* need to fetch identifier and display it */
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier_size,
|
hf_wtls_hands_cli_hello_key_identifier_size,
|
||||||
tvb,offset,1,bo_big_endian);
|
tvb,offset,1,bo_big_endian);
|
||||||
offset++;
|
offset++;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
||||||
hf_wtls_hands_cli_hello_key_identifier,
|
hf_wtls_hands_cli_hello_key_identifier,
|
||||||
tvb,offset,size,bo_big_endian);
|
tvb,offset,size,bo_big_endian);
|
||||||
offset+=size;
|
offset+=size;
|
||||||
client_size+=size+1;
|
client_size+=size+1;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "X.509 name size = %d, client_size = %d\n",
|
fprintf(stderr, "X.509 name size = %d, client_size = %d\n",
|
||||||
size, client_size);
|
size, client_size);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
proto_item_set_len(cli_key_item, client_size);
|
proto_item_set_len(cli_key_item, client_size);
|
||||||
}
|
}
|
||||||
|
@ -770,23 +807,39 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
wtls_msg_type_item_sub_tree = proto_item_add_subtree(ti, ett_wtls_msg_type_item_sub);
|
wtls_msg_type_item_sub_tree = proto_item_add_subtree(ti, ett_wtls_msg_type_item_sub);
|
||||||
offset+=1;
|
offset+=1;
|
||||||
for (;count > 0;count-=client_size) {
|
for (;count > 0;count-=client_size) {
|
||||||
cli_key_item = proto_tree_add_item(wtls_msg_type_item_sub_tree,
|
value = tvb_get_guint8 (tvb, offset);
|
||||||
hf_wtls_hands_cli_hello_cipher_suite_item, tvb, offset,1,
|
valBulk = match_strval(value, wtls_vals_cipher_bulk);
|
||||||
bo_little_endian);
|
offset++;
|
||||||
client_size=1;
|
client_size=1;
|
||||||
wtls_msg_type_item_sub_sub_tree = proto_item_add_subtree(cli_key_item,
|
valMac = match_strval(tvb_get_guint8 (tvb, offset), wtls_vals_cipher_mac);
|
||||||
ett_wtls_msg_type_item_sub_sub);
|
if (valBulk != NULL)
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
{
|
||||||
hf_wtls_hands_cli_hello_cipher_bulk,
|
if (valMac != NULL)
|
||||||
tvb,offset,1,bo_big_endian);
|
{
|
||||||
offset++;
|
snprintf(valStr,1024,"%s, %s",valBulk,valMac);
|
||||||
value = tvb_get_guint8 (tvb, offset);
|
}
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_sub_sub_tree,
|
else
|
||||||
hf_wtls_hands_cli_hello_cipher_mac,
|
{
|
||||||
tvb,offset,1,bo_big_endian);
|
snprintf(valStr,1024,"%s, Unknow MAC (0x%02x)",valBulk,tvb_get_guint8 (tvb, offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (valMac != NULL)
|
||||||
|
{
|
||||||
|
snprintf(valStr,1024,"Unknow Bulk (0x%02x), %s",value,valMac);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(valStr,1024,"Unknow Bulk (0x%02x), Unknow MAC (0x%02x)",value,
|
||||||
|
tvb_get_guint8 (tvb, offset));
|
||||||
|
}
|
||||||
|
}
|
||||||
offset++;
|
offset++;
|
||||||
client_size++;
|
client_size++;
|
||||||
proto_item_set_len(cli_key_item, client_size);
|
cli_key_item = proto_tree_add_string(wtls_msg_type_item_sub_tree,
|
||||||
|
hf_wtls_hands_cli_hello_cipher_suite_item, tvb, offset-2,2,
|
||||||
|
valStr);
|
||||||
}
|
}
|
||||||
count = tvb_get_guint8 (tvb, offset);
|
count = tvb_get_guint8 (tvb, offset);
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_tree,
|
||||||
|
@ -826,8 +879,32 @@ dissect_wtls_handshake(proto_tree *tree, tvbuff_t *tvb, guint offset, guint coun
|
||||||
tvb,offset,12,bo_big_endian);
|
tvb,offset,12,bo_big_endian);
|
||||||
offset+=12;
|
offset+=12;
|
||||||
count = tvb_get_guint8(tvb, offset);
|
count = tvb_get_guint8(tvb, offset);
|
||||||
ti = proto_tree_add_item (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session,
|
switch(count) {
|
||||||
tvb,offset,count+1,bo_big_endian);
|
case 0:
|
||||||
|
ti = proto_tree_add_string (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session_str,
|
||||||
|
tvb,offset,count+1,"NULL");
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_guint8(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntohs(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 3 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntoh24(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
case 4 :
|
||||||
|
ti = proto_tree_add_uint (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session,
|
||||||
|
tvb,offset,count+1,tvb_get_ntohl(tvb,offset+1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ti = proto_tree_add_string (wtls_msg_type_item_tree, hf_wtls_hands_serv_hello_session_str,
|
||||||
|
tvb,offset,count+1,"Too big");
|
||||||
|
break;
|
||||||
|
}
|
||||||
offset+=1+count;
|
offset+=1+count;
|
||||||
ti = proto_tree_add_item(wtls_msg_type_item_tree,
|
ti = proto_tree_add_item(wtls_msg_type_item_tree,
|
||||||
hf_wtls_hands_serv_hello_cli_key_id,
|
hf_wtls_hands_serv_hello_cli_key_id,
|
||||||
|
@ -1148,7 +1225,14 @@ proto_register_wtls(void)
|
||||||
{ &hf_wtls_hands_cli_hello_session,
|
{ &hf_wtls_hands_cli_hello_session,
|
||||||
{ "Session ID",
|
{ "Session ID",
|
||||||
"wsp.wtls.handshake.client_hello.sessionid",
|
"wsp.wtls.handshake.client_hello.sessionid",
|
||||||
FT_NONE, BASE_DEC, NULL, 0x00,
|
FT_UINT32, BASE_DEC, NULL, 0x00,
|
||||||
|
"Session ID"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ &hf_wtls_hands_cli_hello_session_str,
|
||||||
|
{ "Session ID",
|
||||||
|
"wsp.wtls.handshake.client_hello.session.str",
|
||||||
|
FT_STRING, BASE_DEC, NULL, 0x00,
|
||||||
"Session ID"
|
"Session ID"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1211,7 +1295,7 @@ proto_register_wtls(void)
|
||||||
{ &hf_wtls_hands_cli_hello_key_identifier_charset,
|
{ &hf_wtls_hands_cli_hello_key_identifier_charset,
|
||||||
{ "Identifier CharSet",
|
{ "Identifier CharSet",
|
||||||
"wsp.wtls.handshake.client_hello.ident_charset",
|
"wsp.wtls.handshake.client_hello.ident_charset",
|
||||||
FT_NONE, BASE_DEC, NULL, 0x00,
|
FT_UINT16, BASE_HEX, VALS ( vals_character_sets ), 0x00,
|
||||||
"Identifier CharSet"
|
"Identifier CharSet"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1229,6 +1313,13 @@ proto_register_wtls(void)
|
||||||
"Identifier"
|
"Identifier"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{ &hf_wtls_hands_cli_hello_key_identifier_str,
|
||||||
|
{ "Identifier Name",
|
||||||
|
"wsp.wtls.handshake.client_hello.ident_name",
|
||||||
|
FT_STRING, BASE_HEX, NULL, 0x00,
|
||||||
|
"Identifier Name"
|
||||||
|
}
|
||||||
|
},
|
||||||
{ &hf_wtls_hands_cli_hello_cipher_suite,
|
{ &hf_wtls_hands_cli_hello_cipher_suite,
|
||||||
{ "Cipher Suites",
|
{ "Cipher Suites",
|
||||||
"wsp.wtls.handshake.client_hello.ciphers",
|
"wsp.wtls.handshake.client_hello.ciphers",
|
||||||
|
@ -1239,24 +1330,10 @@ proto_register_wtls(void)
|
||||||
{ &hf_wtls_hands_cli_hello_cipher_suite_item,
|
{ &hf_wtls_hands_cli_hello_cipher_suite_item,
|
||||||
{ "Cipher",
|
{ "Cipher",
|
||||||
"wsp.wtls.handshake.client_hello.cipher",
|
"wsp.wtls.handshake.client_hello.cipher",
|
||||||
FT_NONE, BASE_DEC, NULL, 0x00,
|
FT_STRING, BASE_DEC, NULL, 0x00,
|
||||||
"Cipher"
|
"Cipher"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ &hf_wtls_hands_cli_hello_cipher_bulk,
|
|
||||||
{ "Cipher Bulk",
|
|
||||||
"wsp.wtls.handshake.client_hello.cipher.bulk",
|
|
||||||
FT_UINT8, BASE_HEX, VALS ( wtls_vals_cipher_bulk ), 0x00,
|
|
||||||
"Cipher Bulk"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ &hf_wtls_hands_cli_hello_cipher_mac,
|
|
||||||
{ "Cipher MAC",
|
|
||||||
"wsp.wtls.handshake.client_hello.cipher.mac",
|
|
||||||
FT_UINT8, BASE_HEX, VALS ( wtls_vals_cipher_mac ), 0x00,
|
|
||||||
"Cipher MAC"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ &hf_wtls_hands_cli_hello_compression_methods,
|
{ &hf_wtls_hands_cli_hello_compression_methods,
|
||||||
{ "Compression Methods",
|
{ "Compression Methods",
|
||||||
"wsp.wtls.handshake.client_hello.comp_methods",
|
"wsp.wtls.handshake.client_hello.comp_methods",
|
||||||
|
@ -1316,7 +1393,14 @@ proto_register_wtls(void)
|
||||||
{ &hf_wtls_hands_serv_hello_session,
|
{ &hf_wtls_hands_serv_hello_session,
|
||||||
{ "Session ID",
|
{ "Session ID",
|
||||||
"wsp.wtls.handshake.server_hello.sessionid",
|
"wsp.wtls.handshake.server_hello.sessionid",
|
||||||
FT_NONE, BASE_DEC, NULL, 0x00,
|
FT_UINT32, BASE_DEC, NULL, 0x00,
|
||||||
|
"Session ID"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ &hf_wtls_hands_serv_hello_session_str,
|
||||||
|
{ "Session ID",
|
||||||
|
"wsp.wtls.handshake.server_hello.session.str",
|
||||||
|
FT_STRING, BASE_DEC, NULL, 0x00,
|
||||||
"Session ID"
|
"Session ID"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1497,7 +1581,7 @@ proto_register_wtls(void)
|
||||||
},
|
},
|
||||||
{ &hf_wtls_hands_certificate_wtls_rsa_modules,
|
{ &hf_wtls_hands_certificate_wtls_rsa_modules,
|
||||||
{ "RSA Modulus Size",
|
{ "RSA Modulus Size",
|
||||||
"wsp.wtls.handshake.certificate.rsa.modulus",
|
"wsp.wtls.handshake.certificate.rsa.modules",
|
||||||
FT_UINT32, BASE_DEC, NULL, 0x00,
|
FT_UINT32, BASE_DEC, NULL, 0x00,
|
||||||
"RSA Modulus Size"
|
"RSA Modulus Size"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue