|
|
affdba |
diff --git a/epan/dissectors/packet-dtls.c b/epan/dissectors/packet-dtls.c
|
|
|
affdba |
index f0c8a3e..5e287e0 100644
|
|
|
affdba |
--- a/epan/dissectors/packet-dtls.c
|
|
|
affdba |
+++ b/epan/dissectors/packet-dtls.c
|
|
|
affdba |
@@ -119,6 +119,9 @@ static gint hf_dtls_handshake_extensions_len = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_extension_type = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_extension_len = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_extension_data = -1;
|
|
|
affdba |
+static gint hf_ssl_handshake_extension_elliptic_curves_len = -1;
|
|
|
affdba |
+static gint hf_ssl_handshake_extension_elliptic_curves = -1;
|
|
|
affdba |
+static gint hf_ssl_handshake_extension_elliptic_curve = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_session_ticket_lifetime_hint = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_session_ticket_len = -1;
|
|
|
affdba |
static gint hf_dtls_handshake_session_ticket = -1;
|
|
|
affdba |
@@ -165,6 +168,7 @@ static gint ett_dtls_heartbeat = -1;
|
|
|
affdba |
static gint ett_dtls_cipher_suites = -1;
|
|
|
affdba |
static gint ett_dtls_comp_methods = -1;
|
|
|
affdba |
static gint ett_dtls_extension = -1;
|
|
|
affdba |
+static gint ett_dtls_extension_curves = -1;
|
|
|
affdba |
static gint ett_dtls_new_ses_ticket = -1;
|
|
|
affdba |
static gint ett_dtls_certs = -1;
|
|
|
affdba |
static gint ett_dtls_cert_types = -1;
|
|
|
affdba |
@@ -1654,6 +1658,43 @@ dissect_dtls_hnd_hello_common(tvbuff_t *tvb, proto_tree *tree,
|
|
|
affdba |
}
|
|
|
affdba |
|
|
|
affdba |
static gint
|
|
|
affdba |
+dissect_dtls_hnd_hello_ext_elliptic_curves(tvbuff_t *tvb,
|
|
|
affdba |
+ proto_tree *tree, guint32 offset)
|
|
|
affdba |
+{
|
|
|
affdba |
+ gint16 curves_length;
|
|
|
affdba |
+ proto_tree *curves_tree;
|
|
|
affdba |
+ proto_item *ti;
|
|
|
affdba |
+
|
|
|
affdba |
+ curves_length = tvb_get_ntohs(tvb, offset);
|
|
|
affdba |
+ proto_tree_add_item(tree, hf_ssl_handshake_extension_elliptic_curves_len,
|
|
|
affdba |
+ tvb, offset, 2, ENC_BIG_ENDIAN);
|
|
|
affdba |
+
|
|
|
affdba |
+ offset += 2;
|
|
|
affdba |
+ tvb_ensure_bytes_exist(tvb, offset, curves_length);
|
|
|
affdba |
+ ti = proto_tree_add_none_format(tree,
|
|
|
affdba |
+ hf_ssl_handshake_extension_elliptic_curves,
|
|
|
affdba |
+ tvb, offset, curves_length,
|
|
|
affdba |
+ "Elliptic curves (%d curve%s)",
|
|
|
affdba |
+ curves_length / 2,
|
|
|
affdba |
+ plurality(curves_length/2, "", "s"));
|
|
|
affdba |
+
|
|
|
affdba |
+ /* make this a subtree */
|
|
|
affdba |
+ curves_tree = proto_item_add_subtree(ti, ett_dtls_extension_curves);
|
|
|
affdba |
+
|
|
|
affdba |
+ /* loop over all curves */
|
|
|
affdba |
+ while (curves_length > 0)
|
|
|
affdba |
+ {
|
|
|
affdba |
+ proto_tree_add_item(curves_tree,
|
|
|
affdba |
+ hf_ssl_handshake_extension_elliptic_curve,
|
|
|
affdba |
+ tvb, offset, 2, ENC_BIG_ENDIAN);
|
|
|
affdba |
+ offset += 2;
|
|
|
affdba |
+ curves_length -= 2;
|
|
|
affdba |
+ }
|
|
|
affdba |
+
|
|
|
affdba |
+ return offset;
|
|
|
affdba |
+}
|
|
|
affdba |
+
|
|
|
affdba |
+static gint
|
|
|
affdba |
dissect_dtls_hnd_hello_ext(tvbuff_t *tvb,
|
|
|
affdba |
proto_tree *tree, guint32 offset, guint32 left)
|
|
|
affdba |
{
|
|
|
affdba |
@@ -1700,6 +1741,9 @@ dissect_dtls_hnd_hello_ext(tvbuff_t *tvb,
|
|
|
affdba |
tvb, offset, 1, ENC_BIG_ENDIAN);
|
|
|
affdba |
offset += ext_len;
|
|
|
affdba |
break;
|
|
|
affdba |
+ case SSL_HND_HELLO_EXT_ELLIPTIC_CURVES:
|
|
|
affdba |
+ offset = dissect_dtls_hnd_hello_ext_elliptic_curves(tvb, ext_tree, offset);
|
|
|
affdba |
+ break;
|
|
|
affdba |
default:
|
|
|
affdba |
proto_tree_add_bytes_format(ext_tree, hf_dtls_handshake_extension_data,
|
|
|
affdba |
tvb, offset, ext_len, NULL,
|
|
|
affdba |
@@ -2534,6 +2578,21 @@ proto_register_dtls(void)
|
|
|
affdba |
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
|
affdba |
"Hello Extension data", HFILL }
|
|
|
affdba |
},
|
|
|
affdba |
+ { &hf_ssl_handshake_extension_elliptic_curves_len,
|
|
|
affdba |
+ { "Elliptic Curves Length", "dtls.handshake.extensions_elliptic_curves_length",
|
|
|
affdba |
+ FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
|
affdba |
+ "Length of elliptic curves field", HFILL }
|
|
|
affdba |
+ },
|
|
|
affdba |
+ { &hf_ssl_handshake_extension_elliptic_curves,
|
|
|
affdba |
+ { "Elliptic Curves List", "dtls.handshake.extensions_elliptic_curves",
|
|
|
affdba |
+ FT_NONE, BASE_NONE, NULL, 0x0,
|
|
|
affdba |
+ "List of elliptic curves supported", HFILL }
|
|
|
affdba |
+ },
|
|
|
affdba |
+ { &hf_ssl_handshake_extension_elliptic_curve,
|
|
|
affdba |
+ { "Elliptic curve", "dtls.handshake.extensions_elliptic_curve",
|
|
|
affdba |
+ FT_UINT16, BASE_HEX, VALS(ssl_extension_curves), 0x0,
|
|
|
affdba |
+ NULL, HFILL }
|
|
|
affdba |
+ },
|
|
|
affdba |
{ &hf_dtls_handshake_session_ticket_lifetime_hint,
|
|
|
affdba |
{ "Session Ticket Lifetime Hint", "dtls.handshake.session_ticket_lifetime_hint",
|
|
|
affdba |
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
|
affdba |
@@ -2707,6 +2766,7 @@ proto_register_dtls(void)
|
|
|
affdba |
&ett_dtls_cipher_suites,
|
|
|
affdba |
&ett_dtls_comp_methods,
|
|
|
affdba |
&ett_dtls_extension,
|
|
|
affdba |
+ &ett_dtls_extension_curves,
|
|
|
affdba |
&ett_dtls_new_ses_ticket,
|
|
|
affdba |
&ett_dtls_certs,
|
|
|
affdba |
&ett_dtls_cert_types,
|