Ethereal-dev: [Ethereal-dev] packet-ssl.c patch for certificates
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Yaniv Kaul <ykaul@xxxxxxxxxxxx>
Date: Thu, 29 Jul 2004 18:53:25 +0200
Attached please find a patch to packet-ssl.c which adds the long-waited
certificates dissection.
There's a lot more to do, of course.Specifically, I don't know how to add OIDs (the algorithms OIDs, for example).
--- packet-ssl.orig.c 2004-07-29 06:18:36.000000000 +0200 +++ packet-ssl.c 2004-07-29 16:48:34.000000000 +0200 @@ -96,6 +96,7 @@ #include <epan/conversation.h> #include "prefs.h" +#include "packet-x509af.h" static gboolean ssl_desegment = TRUE; @@ -170,6 +171,7 @@ static int hf_pct_handshake_hash_spec = -1; static int hf_pct_handshake_cert_spec = -1; static int hf_pct_handshake_cert = -1; +static int hf_pct_handshake_server_cert = -1; static int hf_pct_handshake_exch_spec = -1; static int hf_pct_handshake_hash = -1; static int hf_pct_handshake_cipher = -1; @@ -713,7 +715,7 @@ guint32 offset); static void dissect_ssl3_hnd_cert(tvbuff_t *tvb, - proto_tree *tree, guint32 offset); + proto_tree *tree, guint32 offset, packet_info *pinfo); static void dissect_ssl3_hnd_cert_req(tvbuff_t *tvb, proto_tree *tree, @@ -756,10 +758,10 @@ /* server hello dissector */ static void dissect_ssl2_hnd_server_hello(tvbuff_t *tvb, proto_tree *tree, - guint32 offset); + guint32 offset, packet_info *pinfo); static void dissect_pct_msg_server_hello(tvbuff_t *tvb, proto_tree *tree, - guint32 offset); + guint32 offset, packet_info *pinfo); static void dissect_pct_msg_server_verify(tvbuff_t *tvb, @@ -1427,7 +1429,7 @@ break; case SSL_HND_CERTIFICATE: - dissect_ssl3_hnd_cert(tvb, ssl_hand_tree, offset); + dissect_ssl3_hnd_cert(tvb, ssl_hand_tree, offset, pinfo); break; case SSL_HND_SERVER_KEY_EXCHG: @@ -1650,7 +1652,7 @@ static void dissect_ssl3_hnd_cert(tvbuff_t *tvb, - proto_tree *tree, guint32 offset) + proto_tree *tree, guint32 offset, packet_info *pinfo) { /* opaque ASN.1Cert<2^24-1>; @@ -1698,14 +1700,15 @@ tvb, offset, 3, FALSE); offset += 3; - proto_tree_add_bytes_format(subtree, + /*proto_tree_add_bytes_format(subtree, hf_ssl_handshake_certificate, tvb, offset, cert_length, tvb_get_ptr(tvb, offset, cert_length), "Certificate (%u byte%s)", cert_length, plurality(cert_length, "", "s")); - + */ + dissect_x509af_Certificate(FALSE, tvb, offset, pinfo, subtree, hf_ssl_handshake_certificate); offset += cert_length; } } @@ -2075,7 +2078,7 @@ break; case SSL2_HND_SERVER_HELLO: - dissect_ssl2_hnd_server_hello(tvb, ssl_record_tree, offset); + dissect_ssl2_hnd_server_hello(tvb, ssl_record_tree, offset, pinfo); break; case SSL2_HND_ERROR: @@ -2099,7 +2102,7 @@ dissect_pct_msg_client_hello(tvb, ssl_record_tree, offset); break; case PCT_MSG_SERVER_HELLO: - dissect_pct_msg_server_hello(tvb, ssl_record_tree, offset); + dissect_pct_msg_server_hello(tvb, ssl_record_tree, offset, pinfo); break; case PCT_MSG_CLIENT_MASTER_KEY: dissect_pct_msg_client_master_key(tvb, ssl_record_tree, offset); @@ -2322,7 +2325,7 @@ } static void -dissect_pct_msg_server_hello(tvbuff_t *tvb, proto_tree *tree, guint32 offset) +dissect_pct_msg_server_hello(tvbuff_t *tvb, proto_tree *tree, guint32 offset, packet_info *pinfo) { /* structure: char SH_MSG_SERVER_HELLO @@ -2405,7 +2408,8 @@ offset += 2; if(SH_CERT_LENGTH) { - proto_tree_add_text(tree, tvb, offset, SH_CERT_LENGTH, "Server Certificate (%d bytes)", SH_CERT_LENGTH); + dissect_x509af_Certificate(FALSE, tvb, offset, pinfo, tree, hf_pct_handshake_server_cert); + //proto_tree_add_text(tree, tvb, offset, SH_CERT_LENGTH, "Server Certificate (%d bytes)", SH_CERT_LENGTH); offset += SH_CERT_LENGTH; } @@ -2622,7 +2626,7 @@ static void dissect_ssl2_hnd_server_hello(tvbuff_t *tvb, - proto_tree *tree, guint32 offset) + proto_tree *tree, guint32 offset, packet_info *pinfo) { /* struct { * uint8 msg_type; @@ -2696,13 +2700,15 @@ /* now the variable length fields */ if (certificate_length > 0) { - proto_tree_add_bytes_format(tree, hf_ssl_handshake_certificate, + /*proto_tree_add_bytes_format(tree, hf_ssl_handshake_certificate, tvb, offset, certificate_length, tvb_get_ptr(tvb, offset, certificate_length), "Certificate (%u byte%s)", certificate_length, plurality(certificate_length, "", "s")); - offset += certificate_length; + */ + dissect_x509af_Certificate(FALSE, tvb, offset, pinfo, tree, hf_ssl_handshake_certificate); + offset += certificate_length; } if (cipher_spec_length > 0) @@ -3386,7 +3392,7 @@ "PCT Certificate specification", HFILL } }, { &hf_pct_handshake_cert, - { "Cert Spec", "pct.handshake.cert", + { "Cert", "pct.handshake.cert", FT_UINT16, BASE_HEX, VALS(pct_cert_type), 0x0, "PCT Certificate", HFILL } }, @@ -3410,6 +3416,11 @@ FT_UINT16, BASE_HEX, VALS(pct_error_code), 0x0, "PCT Error Code", HFILL } }, + { &hf_pct_handshake_server_cert, + { "Server Cert", "pct.handshake.server_cert", + FT_BYTES, BASE_NONE, NULL , 0x0, + "PCT Server Certificate", HFILL } + }, }; /* Setup protocol subtree array */
- Follow-Ups:
- [Ethereal-dev] Re: packet-ssl.c patch for certificates
- From: Yaniv Kaul
- [Ethereal-dev] Re: packet-ssl.c patch for certificates
- Prev by Date: [Ethereal-dev] New field types proposal
- Next by Date: RE: [Ethereal-dev] CRC wish list
- Previous by thread: Re: [Ethereal-dev] New field types proposal
- Next by thread: [Ethereal-dev] Re: packet-ssl.c patch for certificates
- Index(es):