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,