Ethereal-dev: Re: [Ethereal-dev] Re: 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: "Ronnie Sahlberg" <[email protected]>
Date: Fri, 30 Jul 2004 18:36:38 +1000
Looks good by optical examination.   I will test it later and check it in if
there are no issues.
Only one small detail, I think the HF field should be FT_NONE really, but
will verify and check in a
change if required.

Adding OIDs are not that difficult.
Please see packet-pkcs.[ch] and  asn1/pkcs1/* for examples on how I added
some for some pkinit users.





----- Original Message ----- 
From: "Yaniv Kaul"
Sent: Friday, July 30, 2004 3:06 AM
Subject: [Ethereal-dev] Re: packet-ssl.c patch for certificates


> Same patch as output of 'svn diff' (not 'cvs diff'). Does it matter?
>
> Yaniv Kaul wrote:
>
> > 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 */
> >
> >
>


----------------------------------------------------------------------------
----


> Index: packet-ssl.c
> ===================================================================
> --- packet-ssl.c (revision 11567)
> +++ packet-ssl.c (working copy)
> @@ -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 */
>


----------------------------------------------------------------------------
----


> _______________________________________________
> Ethereal-dev mailing list
> [email protected]
> http://www.ethereal.com/mailman/listinfo/ethereal-dev
>