aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asn1/acse/Makefile.nmake4
-rw-r--r--asn1/acse/acse.cnf26
-rw-r--r--asn1/acse/packet-acse-template.c12
-rw-r--r--asn1/cms/Makefile.nmake4
-rw-r--r--asn1/cms/cms.cnf42
-rw-r--r--asn1/cms/packet-cms-template.c76
-rw-r--r--asn1/ess/ExtendedSecurityServices.asn29
-rw-r--r--asn1/ess/Makefile.nmake4
-rw-r--r--asn1/ess/ess.cnf5
-rw-r--r--asn1/rtse/Makefile.nmake4
-rw-r--r--asn1/rtse/packet-rtse-template.c1
-rw-r--r--asn1/rtse/rtse.cnf40
-rw-r--r--asn1/s4406/Makefile.nmake4
-rw-r--r--asn1/s4406/s4406.asn21
-rw-r--r--asn1/s4406/s4406.cnf25
-rw-r--r--asn1/x411/Makefile.nmake4
-rw-r--r--asn1/x411/packet-x411-template.c10
-rw-r--r--asn1/x411/x411.cnf308
-rw-r--r--asn1/x420/x420.cnf20
-rw-r--r--asn1/x509af/AuthenticationFramework.asn23
-rw-r--r--asn1/x509af/Makefile.nmake4
-rw-r--r--asn1/x509af/packet-x509af-template.c7
-rw-r--r--asn1/x509af/packet-x509af-template.h2
-rw-r--r--asn1/x509af/x509af.cnf29
-rw-r--r--asn1/x509if/Makefile.nmake4
-rw-r--r--asn1/x509if/packet-x509if-template.c21
-rw-r--r--asn1/x509if/packet-x509if-template.h2
-rw-r--r--asn1/x509if/x509if-exp.cnf2
-rw-r--r--asn1/x509if/x509if.cnf107
-rw-r--r--asn1/x509sat/Makefile.nmake4
-rw-r--r--asn1/x509sat/SelectedAttributeTypes.asn10
-rw-r--r--asn1/x509sat/x509sat.cnf21
-rw-r--r--epan/dissectors/packet-acse.c38
-rw-r--r--epan/dissectors/packet-cms.c130
-rw-r--r--epan/dissectors/packet-ess.c238
-rw-r--r--epan/dissectors/packet-rtse.c43
-rw-r--r--epan/dissectors/packet-rtse.h2
-rw-r--r--epan/dissectors/packet-s4406.c123
-rw-r--r--epan/dissectors/packet-s5066.c4
-rw-r--r--epan/dissectors/packet-x411.c326
-rw-r--r--epan/dissectors/packet-x411.h2
-rw-r--r--epan/dissectors/packet-x509af.c149
-rw-r--r--epan/dissectors/packet-x509af.h4
-rw-r--r--epan/dissectors/packet-x509if.c171
-rw-r--r--epan/dissectors/packet-x509if.h5
-rw-r--r--epan/dissectors/packet-x509sat.c194
-rw-r--r--epan/dissectors/packet-x509sat.h2
47 files changed, 2086 insertions, 220 deletions
diff --git a/asn1/acse/Makefile.nmake b/asn1/acse/Makefile.nmake
index 72b766eeba..9c5b15df58 100644
--- a/asn1/acse/Makefile.nmake
+++ b/asn1/acse/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/acse/acse.cnf b/asn1/acse/acse.cnf
index 5a72fa3690..b22d1c6e6a 100644
--- a/asn1/acse/acse.cnf
+++ b/asn1/acse/acse.cnf
@@ -102,4 +102,30 @@ ACRQ-apdu/aSO-context-name aCRQ_aSO_context_name
#.FN_BODY EXTERNAL/encoding/single-ASN1-type
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, top_tree ? top_tree : tree);
+#.FN_PARS Release-request-reason
+ VAL_PTR=&reason
+
+#.FN_BODY Release-request-reason
+ int reason = -1;
+
+ %(DEFAULT_BODY)s
+
+ if((reason != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Release-Request (%%s)", val_to_str(reason, acse_Release_request_reason_vals, "reason(%%d)"));
+
+
+#.FN_PARS Release-response-reason
+ VAL_PTR=&reason
+
+#.FN_BODY Release-response-reason
+ int reason = -1;
+
+ %(DEFAULT_BODY)s
+
+ if((reason != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Release-Response (%%s)", val_to_str(reason, acse_Release_request_reason_vals, "reason(%%d)"));
+
+
+
+
#.END
diff --git a/asn1/acse/packet-acse-template.c b/asn1/acse/packet-acse-template.c
index 0e32bcaa57..7218dff4c2 100644
--- a/asn1/acse/packet-acse-template.c
+++ b/asn1/acse/packet-acse-template.c
@@ -52,7 +52,7 @@
#include "packet-pres.h"
#include "packet-x509if.h"
-#define PNAME "ACSE"
+#define PNAME "ISO 8650-1 OSI Association Control Service"
#define PSNAME "ACSE"
#define PFNAME "acse"
@@ -154,8 +154,6 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
proto_tree *tree=NULL;
char *oid;
- /* save parent_tree so subdissectors can create new top nodes */
- top_tree=parent_tree;
/* first, try to check length */
/* do we have at least 2 bytes */
@@ -181,6 +179,9 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
}
}
}
+ /* save parent_tree so subdissectors can create new top nodes */
+ top_tree=parent_tree;
+
/* ACSE has only AARQ,AARE,RLRQ,RLRE,ABRT type of pdu */
/* reject everything else */
/* data pdu is not ACSE pdu and has to go directly to app dissector */
@@ -205,8 +206,10 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
proto_tree_add_text(parent_tree, tvb, offset, -1,
"dissector is not available");
}
+ top_tree = NULL;
return;
default:
+ top_tree = NULL;
return;
}
@@ -232,7 +235,8 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
break;
}
}
-
+
+top_tree = NULL;
}
/*--- proto_register_acse ----------------------------------------------*/
diff --git a/asn1/cms/Makefile.nmake b/asn1/cms/Makefile.nmake
index 21948a74a3..4bbaef8195 100644
--- a/asn1/cms/Makefile.nmake
+++ b/asn1/cms/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/cms/cms.cnf b/asn1/cms/cms.cnf
index 2c09a38d58..95e29b91c1 100644
--- a/asn1/cms/cms.cnf
+++ b/asn1/cms/cms.cnf
@@ -46,6 +46,13 @@ Countersignature B "1.2.840.113549.1.9.6" "id-counterSignature"
#.FIELD_RENAME
SignerInfo/signature signatureValue
RecipientEncryptedKey/rid rekRid
+EncryptedContentInfo/contentType encryptedContentType
+
+#.FN_BODY ContentInfo
+ top_tree = tree;
+ %(DEFAULT_BODY)s
+ content_tvb = NULL;
+ top_tree = NULL;
#.FN_BODY ContentInfo/contentType
offset = dissect_ber_object_identifier_str(FALSE, pinfo, tree, tvb, offset,
@@ -64,13 +71,16 @@ RecipientEncryptedKey/rid rekRid
gint32 tag;
guint32 len;
int pdu_offset = offset;
+ int content_offset;
/* XXX Do we care about printing out the octet string? */
- offset = dissect_cms_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_cms_eContent);
+ offset = dissect_cms_OCTET_STRING(FALSE, tvb, offset, pinfo, NULL, hf_cms_eContent);
pdu_offset = get_ber_identifier(tvb, pdu_offset, &class, &pc, &tag);
- pdu_offset = get_ber_length(tree, tvb, pdu_offset, &len, &ind);
- pdu_offset = call_ber_oid_callback(object_identifier_id, tvb, pdu_offset, pinfo, tree);
+ content_offset = pdu_offset = get_ber_length(tree, tvb, pdu_offset, &len, &ind);
+ pdu_offset = call_ber_oid_callback(object_identifier_id, tvb, pdu_offset, pinfo, top_tree ? top_tree : tree);
+
+ content_tvb = tvb_new_subset(tvb, content_offset, len, -1);
#.FN_PARS OtherKeyAttribute/keyAttrId
FN_VARIANT = _str HF_INDEX = hf_cms_ci_contentType VAL_PTR = &object_identifier_id
@@ -78,13 +88,39 @@ RecipientEncryptedKey/rid rekRid
#.FN_BODY OtherKeyAttribute/keyAttr
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+
#.FN_PARS Attribute/attrType
FN_VARIANT = _str HF_INDEX = hf_cms_attrType VAL_PTR = &object_identifier_id
+#.FN_BODY Attribute/attrType
+ char *name = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(object_identifier_id) {
+ name = get_ber_oid_name(object_identifier_id);
+ proto_item_append_text(tree, " (%%s)", name ? name : object_identifier_id);
+ }
+
#.FN_BODY AttributeValue
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+#.FN_BODY MessageDigest
+ proto_item *pi;
+ int old_offset = offset;
+
+ %(DEFAULT_BODY)s
+
+ pi = get_ber_last_created_item();
+
+ /* move past TLV */
+ old_offset = get_ber_identifier(tvb, old_offset, NULL, NULL, NULL);
+ old_offset = get_ber_length(tree, tvb, old_offset, NULL, NULL);
+
+ if(content_tvb)
+ cms_verify_msg_digest(pi, content_tvb, x509af_get_last_algorithm_id(), tvb, old_offset);
+
#.END
diff --git a/asn1/cms/packet-cms-template.c b/asn1/cms/packet-cms-template.c
index c52c79da72..48115551a1 100644
--- a/asn1/cms/packet-cms-template.c
+++ b/asn1/cms/packet-cms-template.c
@@ -39,6 +39,9 @@
#include "packet-x509af.h"
#include "packet-x509if.h"
+#include <epan/sha1.h>
+#include <epan/crypt-md5.h>
+
#define PNAME "Cryptographic Message Syntax"
#define PSNAME "CMS"
#define PFNAME "cms"
@@ -55,9 +58,80 @@ static int dissect_cms_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, in
static const char *object_identifier_id;
+static tvbuff_t *content_tvb = NULL;
-#include "packet-cms-fn.c"
+static proto_tree *top_tree=NULL;
+
+#define HASH_SHA1 "1.3.14.3.2.26"
+#define SHA1_BUFFER_SIZE 20
+
+#define HASH_MD5 "1.2.840.113549.2.5"
+#define MD5_BUFFER_SIZE 16
+
+
+/* SHA-2 variants */
+#define HASH_SHA224 "2.16.840.1.101.3.4.2.4"
+#define SHA224_BUFFER_SIZE 32 /* actually 28 */
+#define HASH_SHA256 "2.16.840.1.101.3.4.2.1"
+#define SHA256_BUFFER_SIZE 32
+
+unsigned char digest_buf[MAX(SHA1_BUFFER_SIZE, MD5_BUFFER_SIZE)];
+
+static void
+cms_verify_msg_digest(proto_item *pi, tvbuff_t *content, char *alg, tvbuff_t *tvb, int offset)
+{
+ sha1_context sha1_ctx;
+ md5_state_t md5_ctx;
+ int i= 0, buffer_size = 0;
+
+ /* we only support two algorithms at the moment - if we do add SHA2
+ we should add a registration process to use a registration process */
+
+ if(strcmp(alg, HASH_SHA1) == 0) {
+
+ sha1_starts(&sha1_ctx);
+
+ sha1_update(&sha1_ctx,
+ (guint8*)tvb_get_ptr(content, 0, tvb_length(content)),
+ tvb_length(content));
+ sha1_finish(&sha1_ctx, digest_buf);
+
+ buffer_size = SHA1_BUFFER_SIZE;
+
+ } else if(strcmp(alg, HASH_MD5) == 0) {
+
+ md5_init(&md5_ctx);
+
+ md5_append(&md5_ctx,
+ (const guint8*) tvb_get_ptr(content, 0, tvb_length(content)),
+ tvb_length(content));
+
+ md5_finish(&md5_ctx, digest_buf);
+
+ buffer_size = MD5_BUFFER_SIZE;
+ }
+
+ if(buffer_size) {
+ /* compare our computed hash with what we have received */
+
+ if(tvb_bytes_exist(tvb, offset, buffer_size) &&
+ (memcmp(tvb_get_ptr(tvb, offset, buffer_size), digest_buf, buffer_size) != 0)) {
+ proto_item_append_text(pi, " [incorrect, should be ");
+ for(i = 0; i < buffer_size; i++)
+ proto_item_append_text(pi, "%02X", digest_buf[i]);
+
+ proto_item_append_text(pi, "]");
+ }
+ else
+ proto_item_append_text(pi, " [correct]");
+ } else {
+ proto_item_append_text(pi, " [unable to verify]");
+ }
+
+}
+
+#include "packet-cms-fn.c"
/*--- proto_register_cms ----------------------------------------------*/
void proto_register_cms(void) {
diff --git a/asn1/ess/ExtendedSecurityServices.asn b/asn1/ess/ExtendedSecurityServices.asn
index 69b2979c6d..06a0eeb192 100644
--- a/asn1/ess/ExtendedSecurityServices.asn
+++ b/asn1/ess/ExtendedSecurityServices.asn
@@ -191,6 +191,35 @@ SecurityCategory ::= SEQUENCE {
--VALUE NOTATION ::= value (VALUE OBJECT IDENTIFIER)
--END
+-- this is a commonly used definition of security categories
+
+RestrictiveTag ::= SEQUENCE {
+ tagName OBJECT IDENTIFIER,
+ attributeFlags BIT STRING
+}
+
+EnumeratedTag ::= SEQUENCE {
+ tagName OBJECT IDENTIFIER,
+ attributeList SET OF SecurityAttribute
+}
+
+PermissiveTag ::= SEQUENCE {
+ tagName OBJECT IDENTIFIER,
+ attributeFlags BIT STRING
+}
+
+SecurityAttribute ::= INTEGER
+
+InformativeTag ::= SEQUENCE {
+ tagName OBJECT IDENTIFIER,
+ attributes FreeFormField
+}
+
+FreeFormField ::= CHOICE {
+ bitSetAttributes BIT STRING,
+ securityAttributes SET OF SecurityAttribute
+}
+
-- Section 3.4
diff --git a/asn1/ess/Makefile.nmake b/asn1/ess/Makefile.nmake
index 3fd2af8b37..acc6e626bf 100644
--- a/asn1/ess/Makefile.nmake
+++ b/asn1/ess/Makefile.nmake
@@ -43,6 +43,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/ess/ess.cnf b/asn1/ess/ess.cnf
index 10c2caa3ae..e788eced90 100644
--- a/asn1/ess/ess.cnf
+++ b/asn1/ess/ess.cnf
@@ -28,6 +28,11 @@ EquivalentLabels B "1.2.840.113549.1.9.16.2.9" "id-aa-equivalentLabels"
MLExpansionHistory B "1.2.840.113549.1.9.16.2.3" "id-aa-mlExpandHistory"
SigningCertificate B "1.2.840.113549.1.9.16.2.12" "id-aa-signingCertificate"
+RestrictiveTag B "2.16.840.1.101.2.1.8.3.0" "id-restrictiveAttributes"
+EnumeratedTag B "2.16.840.1.101.2.1.8.3.1" "id-enumeratedPermissiveAttributes"
+PermissiveTag B "2.16.840.1.101.2.1.8.3.2" "id-restrictiveAttributes"
+InformativeTag B "2.16.840.1.101.2.1.8.3.3" "id-informativeAttributes"
+EnumeratedTag B "2.16.840.1.101.2.1.8.3.4" "id-enumeratedRestrictiveAttributes"
#.NO_EMIT
diff --git a/asn1/rtse/Makefile.nmake b/asn1/rtse/Makefile.nmake
index 91bb36c1f9..740198a277 100644
--- a/asn1/rtse/Makefile.nmake
+++ b/asn1/rtse/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/rtse/packet-rtse-template.c b/asn1/rtse/packet-rtse-template.c
index dbf689682e..27c2b9f6cb 100644
--- a/asn1/rtse/packet-rtse-template.c
+++ b/asn1/rtse/packet-rtse-template.c
@@ -50,6 +50,7 @@ int proto_rtse = -1;
static struct SESSION_DATA_STRUCTURE* session = NULL;
static char object_identifier_id[MAX_OID_STR_LEN];
+static gboolean open_request=FALSE;
/* indirect_reference, used to pick up the signalling so we know what
kind of data is transferred in SES_DATA_TRANSFER_PDUs */
static guint32 indir_ref=0;
diff --git a/asn1/rtse/rtse.cnf b/asn1/rtse/rtse.cnf
index 37519bc9f0..8ba90ffed0 100644
--- a/asn1/rtse/rtse.cnf
+++ b/asn1/rtse/rtse.cnf
@@ -38,19 +38,16 @@ EXTERNAL
if((session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) != NULL)
session->ros_op = (ROS_OP_BIND | ROS_OP_ARGUMENT);
-
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
- RTORQapdu_set, hf_index, ett_rtse_RTORQapdu);
-
+ open_request=TRUE;
+ %(DEFAULT_BODY)s
+ open_request=FALSE;
#.FN_BODY RTOACapdu
if((session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) != NULL)
session->ros_op = (ROS_OP_BIND | ROS_OP_RESULT);
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
- RTOACapdu_set, hf_index, ett_rtse_RTOACapdu);
-
+ %(DEFAULT_BODY)s
#.FN_BODY T_open
@@ -135,4 +132,33 @@ EXTERNAL
offset = dissect_ber_integer(TRUE, pinfo, tree, tvb, offset, hf_index, &app_proto);
+#.FN_BODY SessionConnectionIdentifier
+ if(open_request && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Recover");
+ %(DEFAULT_BODY)s
+
+#.FN_PARS T61String
+ VAL_PTR=&string
+#.FN_BODY T61String
+ tvbuff_t *string = NULL;
+ %(DEFAULT_BODY)s
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %%s", tvb_format_text(string, 0, tvb_length(string)));
+
+#.FN_PARS CommonReference
+ VAL_PTR=&string
+#.FN_BODY CommonReference
+ tvbuff_t *string = NULL;
+ %(DEFAULT_BODY)s
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %%s", tvb_format_text(string, 0, tvb_length(string)));
+
+#.FN_PARS OCTET_STRING
+ VAL_PTR=&string
+#.FN_BODY OCTET_STRING
+ tvbuff_t *string = NULL;
+ %(DEFAULT_BODY)s
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %%s", tvb_format_text(string, 0, tvb_length(string)));
+
#.END
diff --git a/asn1/s4406/Makefile.nmake b/asn1/s4406/Makefile.nmake
index e7a8714826..bc53951d7b 100644
--- a/asn1/s4406/Makefile.nmake
+++ b/asn1/s4406/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/s4406/s4406.asn b/asn1/s4406/s4406.asn
index c1f8773d2a..f9251dba39 100644
--- a/asn1/s4406/s4406.asn
+++ b/asn1/s4406/s4406.asn
@@ -130,7 +130,7 @@ OriginatorReference ::= MilitaryString
-- VALUE MMHSPrecedence
-- ::= id-nato-mmhs-mm-primary-precedence
-MMHSPrecedence ::= INTEGER {deferred (0), routine (1), priority (2), immediate (3),
+PrimaryPrecedence ::= INTEGER {deferred (0), routine (1), priority (2), immediate (3),
flash (4), override (5),
-- these are used by some National systems XXX need to verify
ecp(16), critic(17), override(18)}
@@ -145,6 +145,13 @@ MMHSPrecedence ::= INTEGER {deferred (0), routine (1), priority (2), immediate (
-- VALUE MMHSPrecedence
-- ::= id-nato-mmhs-mm-copy-precedence
+-- we have expanded MMHSPrecedence to PrimaryPrecedence and CopyPrecedence to
+-- all rules to be written to highlight high priority messages.
+CopyPrecedence ::= INTEGER {deferred (0), routine (1), priority (2), immediate (3),
+ flash (4), override (5),
+-- these are used by some National systems XXX need to verify
+ ecp(16), critic(17), override(18)}
+
-- Note: Values 0 to 15 are reserved for NATO defined precedence levels.
-- Values 16 to 31 are reserved for national user.
@@ -200,13 +207,19 @@ OtherRecipientDesignator ::= SET {
-- ::= id-nato-mmhs-mm-pilot-forwarding-info
PilotInformation ::= SEQUENCE {
- pilotPrecedence [0] MMHSPrecedence OPTIONAL,
+ pilotPrecedence [0] PilotPrecedence OPTIONAL,
-- Note: Values 0 to 15 are reserved for NATO defined precedence levels.
-- Values 16 to 31 are reserved for national use.
pilotRecipient [1] SEQUENCE OF ORDescriptor OPTIONAL,
pilotSecurity [2] --Message--SecurityLabel OPTIONAL,
pilotHandling [3] SEQUENCE OF MilitaryString OPTIONAL}
+PilotPrecedence ::= INTEGER {deferred (0), routine (1), priority (2), immediate (3),
+ flash (4), override (5),
+-- these are used by some National systems XXX need to verify
+ ecp(16), critic(17), override(18)}
+
+
-- Acp127 message identifier
-- a string to store routing indicator, station serial number and julian file
@@ -261,4 +274,8 @@ BodyPartSequenceNumber ::= INTEGER
-- Annex B for instruction on the use of its replacement, the
-- ESSSecurityLabel.
+PriorityLevelQualifier ::= ENUMERATED {
+ low(0),
+ high(1) }
+
END -- of Military heading extensions used in MMS
diff --git a/asn1/s4406/s4406.cnf b/asn1/s4406/s4406.cnf
index 5d123aa9c5..f5850b38bc 100644
--- a/asn1/s4406/s4406.cnf
+++ b/asn1/s4406/s4406.cnf
@@ -15,7 +15,8 @@ MessageType/type message_type_type
OtherRecipientDesignator/type other_recipient_type
#.PDU
-MMHSPrecedence
+PrimaryPrecedence
+CopyPrecedence
MessageType
AddressListDesignator
ExemptedAddress
@@ -32,8 +33,8 @@ OriginatorPlad
SecurityInformationLabels
#.REGISTER
-MMHSPrecedence B "1.3.26.0.4406.0.2.0" "primary-precedence"
-MMHSPrecedence B "1.3.26.0.4406.0.2.1" "copy-precedence"
+PrimaryPrecedence B "1.3.26.0.4406.0.2.0" "primary-precedence"
+CopyPrecedence B "1.3.26.0.4406.0.2.1" "copy-precedence"
MessageType B "1.3.26.0.4406.0.2.2" "message-type"
AddressListDesignator B "1.3.26.0.4406.0.2.3" "address-list-indicator"
ExemptedAddress B "1.3.26.0.4406.0.2.4" "exempted-address"
@@ -49,5 +50,23 @@ Acp127MessageIdentifier B "1.3.26.0.4406.0.2.13" "acp127-message-identifierr"
OriginatorPlad B "1.3.26.0.4406.0.2.14" "originator-plad"
SecurityInformationLabels B "1.3.26.0.4406.0.2.17" "information-labels"
+PriorityLevelQualifier B "1.3.26.0.4406.0.8.0" "priority-level-qualifier"
+
#.FN_BODY T_dist_value
/* XXX: not implemented */
+
+#.FN_PARS PrimaryPrecedence
+ VAL_PTR=&precedence
+#.FN_BODY PrimaryPrecedence
+ int precedence = -1;
+ %(DEFAULT_BODY)s
+ if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (primary=%%s)", val_to_str(precedence, s4406_PrimaryPrecedence_vals, "precedence(%%d)"));
+
+#.FN_PARS CopyPrecedence
+ VAL_PTR=&precedence
+#.FN_BODY CopyPrecedence
+ int precedence = -1;
+ %(DEFAULT_BODY)s
+ if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (copy=%%s)", val_to_str(precedence, s4406_CopyPrecedence_vals, "precedence(%%d)"));
diff --git a/asn1/x411/Makefile.nmake b/asn1/x411/Makefile.nmake
index 4686fd8f5a..0f6db775d6 100644
--- a/asn1/x411/Makefile.nmake
+++ b/asn1/x411/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/x411/packet-x411-template.c b/asn1/x411/packet-x411-template.c
index f0c68d266d..58c90a98bf 100644
--- a/asn1/x411/packet-x411-template.c
+++ b/asn1/x411/packet-x411-template.c
@@ -55,8 +55,14 @@
int proto_x411 = -1;
static struct SESSION_DATA_STRUCTURE* session = NULL;
-static int extension_id = 0; /* integer extension id */
-static const char *object_identifier_id; /* content type identifier */
+static int extension_id = -1; /* integer extension id */
+static char *object_identifier_id; /* extensions identifier */
+static char *content_type_id; /* content type identifier */
+
+#define MAX_ORA_STR_LEN 256
+static char *oraddress = NULL;
+static gboolean doing_address=FALSE;
+static proto_item *address_item;
static proto_tree *top_tree=NULL;
diff --git a/asn1/x411/x411.cnf b/asn1/x411/x411.cnf
index 72cdef65c7..1b67c0d54d 100644
--- a/asn1/x411/x411.cnf
+++ b/asn1/x411/x411.cnf
@@ -192,8 +192,16 @@ UniversalOrganizationalUnitNames B "x411.extension-attribute.27" "universal-orga
/*XXX not implemented yet */
#.FN_BODY ExtensionValue
-
- offset=call_x411_oid_callback("x411.extension", tvb, offset, pinfo, tree);
+ char *name;
+
+ if(extension_id != -1)
+ offset=call_x411_oid_callback("x411.extension", tvb, offset, pinfo, tree);
+ else if(object_identifier_id) {
+ call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+ name = get_ber_oid_name(object_identifier_id);
+ proto_item_append_text(tree, " (%%s)", name ? name : object_identifier_id);
+ }
+
#.FN_BODY CategoryValue
@@ -219,9 +227,15 @@ UniversalOrganizationalUnitNames B "x411.extension-attribute.27" "universal-orga
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
}
+
+ if(doing_address)
+ g_strlcat(oraddress, "/C=", MAX_ORA_STR_LEN);
+
offset = dissect_ber_choice(pinfo, tree, tvb, offset,
CountryName_choice, hf_index, ett_x411_CountryName, NULL);
+
+
#.FN_BODY AdministrationDomainName
gint8 class;
gboolean pc, ind_field;
@@ -236,6 +250,9 @@ UniversalOrganizationalUnitNames B "x411.extension-attribute.27" "universal-orga
offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
}
+ if(doing_address)
+ g_strlcat(oraddress, "/A=", MAX_ORA_STR_LEN);
+
offset = dissect_ber_choice(pinfo, tree, tvb, offset,
AdministrationDomainName_choice, hf_index, ett_x411_AdministrationDomainName, NULL);
@@ -262,9 +279,30 @@ UniversalOrganizationalUnitNames B "x411.extension-attribute.27" "universal-orga
#.FN_PARS INTEGER
VAL_PTR = &extension_id
-#.FN_PARS ExtendedContentType
+#.FN_PARS OBJECT_IDENTIFIER
FN_VARIANT = _str VAL_PTR = &object_identifier_id
+#.FN_BODY OBJECT_IDENTIFIER
+
+ %(DEFAULT_BODY)s
+ extension_id = -1;
+
+#.FN_PARS ExtendedContentType
+ FN_VARIANT = _str VAL_PTR = &content_type_id
+
+#.FN_BODY ExtendedContentType
+ char *name = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(content_type_id) {
+ name = get_ber_oid_name(content_type_id);
+
+ if(!name) name = content_type_id;
+
+ proto_item_append_text(tree, " (%%s)", name);
+ }
+
#.FN_PARS BuiltInContentType
VAL_PTR = &ict
@@ -289,22 +327,272 @@ UniversalOrganizationalUnitNames B "x411.extension-attribute.27" "universal-orga
tvbuff_t *next_tvb;
/* we can do this now constructed octet strings are supported */
- offset = dissect_ber_octet_string(FALSE, pinfo, tree, tvb, offset, hf_index, &next_tvb);
+ offset = dissect_ber_octet_string(FALSE, pinfo, NULL, tvb, offset, hf_index, &next_tvb);
- if (next_tvb)
- (void) call_ber_oid_callback(object_identifier_id, next_tvb, 0, pinfo, top_tree ? top_tree : tree);
+ if (next_tvb && content_type_id)
+ (void) call_ber_oid_callback(content_type_id, next_tvb, 0, pinfo, top_tree ? top_tree : tree);
#.FN_PARS MTAName
VAL_PTR = &mtaname
#.FN_BODY MTAName
- tvbuff_t *mtaname;
+ tvbuff_t *mtaname = NULL;
%(DEFAULT_BODY)s
- if (check_col(pinfo->cinfo, COL_INFO)) {
- col_append_fstr(pinfo->cinfo, COL_INFO, " %%s", tvb_get_string(mtaname, 0, tvb_length(mtaname)));
+ if(doing_address) {
+
+ proto_item_append_text(address_item, " %%s", tvb_format_text(mtaname, 0, tvb_length(mtaname)));
+
+ } else {
+
+ if (check_col(pinfo->cinfo, COL_INFO) && mtaname) {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %%s", tvb_format_text(mtaname, 0, tvb_length(mtaname)));
}
-#.END
+ }
+
+#.FN_PARS X121Address
+ VAL_PTR=&string
+
+#.FN_BODY X121Address
+ tvbuff_t *string = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/X121=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+
+#.FN_PARS TerminalIdentifier
+ VAL_PTR=&string
+
+#.FN_BODY TerminalIdentifier
+ tvbuff_t *string = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/UA-ID=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+#.FN_BODY PrivateDomainName
+
+ if(doing_address)
+ g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
+
+ %(DEFAULT_BODY)s
+
+#.FN_BODY PrivateDomainIdentifier
+
+ if(doing_address)
+ g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
+
+ %(DEFAULT_BODY)s
+
+#.FN_PARS OrganizationName
+ VAL_PTR=&string
+
+#.FN_BODY OrganizationName
+ tvbuff_t *string = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/O=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+#.FN_PARS CommonName
+ VAL_PTR=&string
+
+#.FN_BODY CommonName
+ tvbuff_t *string = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/CN=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+
+
+#.FN_PARS NumericString
+ VAL_PTR=&nstring
+
+#.FN_BODY NumericString
+ tvbuff_t *nstring = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && nstring)
+ g_strlcat(oraddress, tvb_format_text(nstring, 0, tvb_length(nstring)), MAX_ORA_STR_LEN);
+
+#.FN_PARS TeletexString
+
+#.FN_BODY TeletexString
+ tvbuff_t *tstring = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && tstring)
+ g_strlcat(oraddress, tvb_format_text(tstring, 0, tvb_length(tstring)), MAX_ORA_STR_LEN);
+
+#.FN_PARS PrintableString
+ VAL_PTR=&pstring
+
+#.FN_BODY PrintableString
+ tvbuff_t *pstring = NULL;
+ char *fmt = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && pstring) {
+ if(hf_index == hf_x411_printable_surname) fmt = "/S=";
+ else if(hf_index == hf_x411_printable_given_name) fmt = "/G=";
+ else if(hf_index == hf_x411_printable_initials) fmt = "/I=";
+ else if(hf_index == hf_x411_printable_generation_qualifier) fmt = "/GQ=";
+ else if(hf_index == hf_x411_printable_type) fmt = "/DD.";
+ else if(hf_index == hf_x411_printable_value) fmt = "=";
+
+ if(fmt)
+ g_strlcat(oraddress, fmt, MAX_ORA_STR_LEN);
+
+ g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+
+ }
+
+#.FN_BODY ORAddress
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ doing_address = TRUE;
+ address_item = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(*oraddress && address_item)
+ proto_item_append_text(address_item, " %%s/", oraddress);
+
+ doing_address = FALSE;
+
+#.FN_BODY ORName
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ address_item = NULL;
+ doing_address = TRUE;
+
+ %(DEFAULT_BODY)s
+
+ if(*oraddress && address_item)
+ proto_item_append_text(address_item, " (%%s/)", oraddress);
+
+ doing_address = FALSE;
+
+#.FN_BODY GlobalDomainIdentifier
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ address_item = tree;
+
+ %(DEFAULT_BODY)s
+
+ if(*oraddress)
+ proto_item_append_text(address_item, " (%%s/", oraddress);
+
+
+#.FN_PARS LocalIdentifier
+ VAL_PTR=&id
+
+#.FN_BODY LocalIdentifier
+ tvbuff_t *id = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(doing_address && id)
+ proto_item_append_text(address_item, " $ %%s)", tvb_format_text(id, 0, tvb_length(id)));
+
+#.FN_BODY MTSIdentifier
+
+ doing_address = TRUE;
+
+ %(DEFAULT_BODY)s
+
+ doing_address = FALSE;
+
+#.FN_BODY BuiltInStandardAttributes
+
+ address_item = tree;
+
+ %(DEFAULT_BODY)s
+
+#.FN_BODY TraceInformationElement
+
+ doing_address = TRUE;
+
+ %(DEFAULT_BODY)s
+
+ doing_address = FALSE;
+
+#.FN_BODY InternalTraceInformationElement
+
+ doing_address = TRUE;
+
+ %(DEFAULT_BODY)s
+
+ doing_address = FALSE;
+
+
+#.FN_BODY DomainSuppliedInformation
+
+ doing_address = FALSE;
+
+ %(DEFAULT_BODY)s
+
+ doing_address = TRUE;
+ proto_item_append_text(tree, ")");
+
+#.FN_BODY MTASuppliedInformation
+
+ doing_address = FALSE;
+
+ %(DEFAULT_BODY)s
+
+ doing_address = TRUE;
+ proto_item_append_text(tree, ")");
+
+#.FN_PARS Time
+ VAL_PTR = &arrival
+
+#.FN_BODY Time
+ tvbuff_t *arrival = NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(arrival)
+ proto_item_append_text(address_item, " %%s", tvb_format_text(arrival, 0, tvb_length(arrival)));
+
+#.FN_PARS RoutingAction
+ VAL_PTR = &action
+
+#.FN_BODY RoutingAction
+ int action = 0;
+
+ %(DEFAULT_BODY)s
+
+ proto_item_append_text(address_item, " %%s", val_to_str(action, x411_RoutingAction_vals, "action(%%d)"));
+
+#.FN_PARS MTABindError
+ VAL_PTR=&error
+
+#.FN_BODY MTABindError
+ int error = -1;
+ %(DEFAULT_BODY)s
+ if((error != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (%%s)", val_to_str(error, x411_MTABindError_vals, "error(%%d)"));
+
+
+#.END
diff --git a/asn1/x420/x420.cnf b/asn1/x420/x420.cnf
index 564089c8a3..1ea117d1dc 100644
--- a/asn1/x420/x420.cnf
+++ b/asn1/x420/x420.cnf
@@ -62,22 +62,34 @@ IPMAssemblyInstructions B "2.6.1.17.2" "id-mst-assembly-instructions"
#.FN_BODY IPM
- %(DEFAULT_BODY)s
if((hf_index == hf_x420_ipm) && check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, " Message");
+ %(DEFAULT_BODY)s
+
#.FN_BODY IPN
- %(DEFAULT_BODY)s
if((hf_index == hf_x420_ipn) && check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, " Notification");
+ %(DEFAULT_BODY)s
+
+#.FN_PARS SubjectField
+ VAL_PTR=&subject
+
+#.FN_BODY SubjectField
+ tvbuff_t *subject=NULL;
+
+ %(DEFAULT_BODY)s
+
+ if(subject && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (%%s)", tvb_format_text(subject, 0, tvb_length(subject)));
+
+
#.FN_BODY Interchange_Data_Element
-/*ARGSUSED*/
/* XXX Not implemented yet */
#.FN_BODY NationallyDefinedBodyPart
-/*ARGSUSED*/
/* XXX Not implemented yet */
diff --git a/asn1/x509af/AuthenticationFramework.asn b/asn1/x509af/AuthenticationFramework.asn
index c51f7f1223..050015e4c6 100644
--- a/asn1/x509af/AuthenticationFramework.asn
+++ b/asn1/x509af/AuthenticationFramework.asn
@@ -14,7 +14,7 @@ IMPORTS
basicAccessControl, certificateExtensions
FROM UsefulDefinitions {joint-iso-itu-t ds(5) module(1)
usefulDefinitions(0) 3}
- Name, ATTRIBUTE, AttributeType, MATCHING-RULE, Attribute
+ Name, ATTRIBUTE, AttributeType, MATCHING-RULE, Attribute, RDNSequence
FROM InformationFramework informationFramework
ub-user-password
FROM UpperBounds upperBounds
@@ -32,9 +32,9 @@ Certificate ::= SEQUENCE {
version [0] Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
- issuer Name,
+ issuer Name,
validity Validity,
- subject Name,
+ subject SubjectName,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueIdentifier [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- if present, version must be v2 or v3
@@ -46,6 +46,11 @@ Certificate ::= SEQUENCE {
encrypted BIT STRING
}
+-- imported to allow labelling
+SubjectName ::= CHOICE {
+ rdnSequence RDNSequence
+}
+
Version ::= INTEGER {v1(0), v2(1), v3(2)}
CertificateSerialNumber ::= INTEGER
@@ -122,7 +127,7 @@ CertificateList ::= SEQUENCE {
version Version OPTIONAL,
-- if present, version must be v2
signature AlgorithmIdentifier,
- issuer Name,
+ issuer Name,
thisUpdate Time,
nextUpdate Time OPTIONAL,
revokedCertificates
@@ -192,7 +197,7 @@ AttCertValidityPeriod ::= SEQUENCE {
AttributeCertificateAssertion ::= SEQUENCE {
subject
[0] CHOICE {baseCertificateID [0] IssuerSerial,
- subjectName [1] Name} OPTIONAL,
+ subjectName [1] SubjectName} OPTIONAL,
issuer [1] Name OPTIONAL,
attCertValidity [2] GeneralizedTime OPTIONAL,
attType [3] SET OF AttributeType OPTIONAL
@@ -264,6 +269,14 @@ id-at-attributeCertificateRevocationList OBJECT IDENTIFIER ::= {id-at 59}
--id-mr-attributeCertificateMatch OBJECT IDENTIFIER ::= {id-mr 42}
+-- these are sneaked in from DSS - a separate dissector seems OTT
+
+DSS-Params ::= SEQUENCE {
+ p INTEGER,
+ q INTEGER,
+ g INTEGER
+}
+
END
-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
diff --git a/asn1/x509af/Makefile.nmake b/asn1/x509af/Makefile.nmake
index b88a7c8596..1e14d4f63d 100644
--- a/asn1/x509af/Makefile.nmake
+++ b/asn1/x509af/Makefile.nmake
@@ -37,5 +37,5 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/x509af/packet-x509af-template.c b/asn1/x509af/packet-x509af-template.c
index 393a052eea..c289bda7da 100644
--- a/asn1/x509af/packet-x509af-template.c
+++ b/asn1/x509af/packet-x509af-template.c
@@ -55,13 +55,14 @@ static gint ett_pkix_crl = -1;
#include "packet-x509af-ett.c"
static const char *algorithm_id;
-
-
static const char *extension_id;
-
#include "packet-x509af-fn.c"
+char *x509af_get_last_algorithm_id() {
+ return algorithm_id;
+}
+
static int
dissect_pkix_crl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
diff --git a/asn1/x509af/packet-x509af-template.h b/asn1/x509af/packet-x509af-template.h
index aee498631c..bd1b0cf86c 100644
--- a/asn1/x509af/packet-x509af-template.h
+++ b/asn1/x509af/packet-x509af-template.h
@@ -28,5 +28,7 @@
#include "packet-x509af-exp.h"
+extern char* x509af_get_last_algorithm_id();
+
#endif /* PACKET_X509AF_H */
diff --git a/asn1/x509af/x509af.cnf b/asn1/x509af/x509af.cnf
index 4bde694356..182b1a6d48 100644
--- a/asn1/x509af/x509af.cnf
+++ b/asn1/x509af/x509af.cnf
@@ -47,6 +47,7 @@ CertificatePair B "2.5.4.40" "id-at-crossCertificatePair"
AttributeCertificate B "2.5.4.58" "id-at-attributeCertificate"
CertificateList B "2.5.4.59" "id-at-attributeCertificateRevocationList"
+DSS-Params B "1.2.840.10040.4.1" "id-dsa"
#.NO_EMIT
#.TYPE_RENAME
@@ -69,6 +70,16 @@ CertificateList/signedCertificateList/revokedCertificates/_item/userCertificate
#.FN_PARS AlgorithmIdentifier/algorithmId
FN_VARIANT = _str HF_INDEX = hf_x509af_algorithm_id VAL_PTR = &algorithm_id
+#.FN_BODY AlgorithmIdentifier/algorithmId
+ char *name;
+
+ %(DEFAULT_BODY)s
+
+ if(algorithm_id) {
+ name = get_ber_oid_name(algorithm_id);
+
+ proto_item_append_text(tree, " (%%s)", name ? name : algorithm_id);
+ }
#.FN_BODY AlgorithmIdentifier/parameters
offset=call_ber_oid_callback(algorithm_id, tvb, offset, pinfo, tree);
@@ -76,6 +87,17 @@ CertificateList/signedCertificateList/revokedCertificates/_item/userCertificate
#.FN_PARS Extension/extnId
FN_VARIANT = _str HF_INDEX = hf_x509af_extension_id VAL_PTR = &extension_id
+#.FN_BODY Extension/extnId
+ char *name;
+
+ %(DEFAULT_BODY)s
+
+ if(extension_id) {
+ name = get_ber_oid_name(extension_id);
+
+ proto_item_append_text(tree, " (%%s)", name ? name : extension_id);
+ }
+
#.FN_BODY Extension/extnValue
gint8 class;
gboolean pc, ind;
@@ -86,3 +108,10 @@ CertificateList/signedCertificateList/revokedCertificates/_item/userCertificate
offset = dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind);
offset=call_ber_oid_callback(extension_id, tvb, offset, pinfo, tree);
+#.FN_BODY SubjectName
+
+ %(DEFAULT_BODY)s
+
+ proto_item_append_text(proto_item_get_parent(tree), " (%%s)", x509if_get_last_dn());
+
+#.END
diff --git a/asn1/x509if/Makefile.nmake b/asn1/x509if/Makefile.nmake
index a2daf38060..2d562986b4 100644
--- a/asn1/x509if/Makefile.nmake
+++ b/asn1/x509if/Makefile.nmake
@@ -37,5 +37,5 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/x509if/packet-x509if-template.c b/asn1/x509if/packet-x509if-template.c
index a53ddcc364..847231eebe 100644
--- a/asn1/x509if/packet-x509if-template.c
+++ b/asn1/x509if/packet-x509if-template.c
@@ -45,15 +45,32 @@
/* Initialize the protocol and registered fields */
int proto_x509if = -1;
static int hf_x509if_object_identifier_id = -1;
+static int hf_x509if_any_string = -1;
#include "packet-x509if-hf.c"
/* Initialize the subtree pointers */
#include "packet-x509if-ett.c"
static const char *object_identifier_id;
+static proto_tree *top_of_dn = NULL;
+static proto_tree *top_of_rdn = NULL;
+
+static gboolean rdn_one_value = FALSE; /* have we seen one value in an RDN yet */
+static gboolean dn_one_rdn = FALSE; /* have we seen one RDN in a DN yet */
+static gboolean doing_dn = TRUE;
+
+#define MAX_RDN_STR_LEN 64
+#define MAX_DN_STR_LEN (20 * MAX_RDN_STR_LEN)
+
+static char *last_dn = NULL;
+static char *last_rdn = NULL;
#include "packet-x509if-fn.c"
+const char * x509if_get_last_dn()
+{
+ return last_dn;
+}
/*--- proto_register_x509if ----------------------------------------------*/
void proto_register_x509if(void) {
@@ -63,6 +80,9 @@ void proto_register_x509if(void) {
{ &hf_x509if_object_identifier_id,
{ "Id", "x509if.id", FT_STRING, BASE_NONE, NULL, 0,
"Object identifier Id", HFILL }},
+ { &hf_x509if_any_string,
+ { "AnyString", "x509if.any.String", FT_BYTES, BASE_HEX,
+ NULL, 0, "This is any String", HFILL }},
#include "packet-x509if-hfarr.c"
};
@@ -84,5 +104,6 @@ void proto_register_x509if(void) {
/*--- proto_reg_handoff_x509if -------------------------------------------*/
void proto_reg_handoff_x509if(void) {
+
}
diff --git a/asn1/x509if/packet-x509if-template.h b/asn1/x509if/packet-x509if-template.h
index 1326b15a40..d1614911df 100644
--- a/asn1/x509if/packet-x509if-template.h
+++ b/asn1/x509if/packet-x509if-template.h
@@ -28,5 +28,7 @@
#include "packet-x509if-exp.h"
+extern const char * x509if_get_last_dn();
+
#endif /* PACKET_X509IF_H */
diff --git a/asn1/x509if/x509if-exp.cnf b/asn1/x509if/x509if-exp.cnf
index ff9802e1d5..bc2429db1f 100644
--- a/asn1/x509if/x509if-exp.cnf
+++ b/asn1/x509if/x509if-exp.cnf
@@ -1,4 +1,5 @@
#.IMPORT_TAG
+AttributeValue BER_CLASS_ANY 0
Attribute BER_CLASS_UNI BER_UNI_TAG_SEQUENCE
AttributeType BER_CLASS_UNI BER_UNI_TAG_OID
Context BER_CLASS_UNI BER_UNI_TAG_SEQUENCE
@@ -41,6 +42,7 @@ MRSubstitution BER_CLASS_UNI BER_UNI_TAG_SEQUENCE
#.END
#.TYPE_ATTR
+AttributeValue TYPE = FT_NONE DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
Attribute TYPE = FT_NONE DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
AttributeType TYPE = FT_STRING DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
Context TYPE = FT_NONE DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
diff --git a/asn1/x509if/x509if.cnf b/asn1/x509if/x509if.cnf
index d59a97022a..63f964bca7 100644
--- a/asn1/x509if/x509if.cnf
+++ b/asn1/x509if/x509if.cnf
@@ -16,6 +16,7 @@ AttributeType
AttributeTypeAndDistinguishedValue
AttributeTypeAssertion
AttributeUsage
+AttributeValue
AttributeValueAssertion
BaseDistance
ChopSpecification
@@ -49,6 +50,10 @@ SearchRuleDescription
SearchRuleId
SubtreeSpecification
+#.PDU
+DistinguishedName
+Name
+
#.NO_EMIT
#.TYPE_RENAME
@@ -93,9 +98,48 @@ RequestAttribute/selectedValues/_item ra_selectedValues_item
#.FN_PARS AttributeId
FN_VARIANT = _str HF_INDEX = hf_x509if_object_identifier_id VAL_PTR = &object_identifier_id
+#.FN_BODY AttributeId
+ char *name;
+
+ %(DEFAULT_BODY)s
+
+ if(object_identifier_id) {
+ /* see if we can find a nice name */
+ name = get_ber_oid_name(object_identifier_id);
+ if(!name) name = object_identifier_id;
+
+ if(doing_dn) { /* append it to the RDN */
+ g_strlcat(last_rdn, name, MAX_RDN_STR_LEN);
+ g_strlcat(last_rdn, "=", MAX_RDN_STR_LEN);
+
+ /* append it to the tree */
+ proto_item_append_text(tree, " (%%s=", name);
+ }
+ }
+
#.FN_BODY AttributeValue
+ int old_offset = offset;
+ tvbuff_t *out_tvb;
+ char *value = NULL;
+
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+ /* try and dissect as a string */
+ dissect_ber_octet_string(FALSE, pinfo, NULL, tvb, old_offset, hf_x509if_any_string, &out_tvb);
+
+ if(out_tvb) {
+ /* it was a string - format it */
+ value = tvb_format_text(out_tvb, 0, tvb_length(out_tvb));
+
+ if(doing_dn) {
+ g_strlcat(last_rdn, value, MAX_RDN_STR_LEN);
+
+ /* append it to the tree*/
+ proto_item_append_text(tree, "%%s)", value);
+ }
+
+ }
+
#.FN_BODY SelectedValues
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
@@ -108,6 +152,69 @@ RequestAttribute/selectedValues/_item ra_selectedValues_item
#.FN_BODY ValuesWithContextValue
offset=call_ber_oid_callback("unknown", tvb, offset, pinfo, tree);
+#.FN_BODY RelativeDistinguishedName
+ char *temp_dn;
+
+ rdn_one_value = FALSE;
+ top_of_rdn = tree;
+ last_rdn = ep_alloc(MAX_DN_STR_LEN); *last_rdn = '\0';
+ doing_dn = TRUE;
+
+ %(DEFAULT_BODY)s
+
+ /* we've finished - close the bracket */
+ proto_item_append_text(top_of_rdn, " (%%s)", last_rdn);
+
+ /* now append this to the DN */
+ if(*last_dn) {
+ temp_dn = ep_alloc(MAX_DN_STR_LEN); /* is there a better way to use ep_alloc here ? */
+ g_snprintf(temp_dn, MAX_DN_STR_LEN, "%%s,%%s", last_rdn, last_dn);
+ last_dn[0] = '\0';
+ g_strlcat(last_dn, temp_dn, MAX_DN_STR_LEN);
+ } else
+ g_strlcat(last_dn, last_rdn, MAX_DN_STR_LEN);
+
+ doing_dn = FALSE;
+ last_rdn = NULL; /* it will get freed when the next packet is dissected */
+
+#.FN_BODY RelativeDistinguishedName/_item
+
+ if(!rdn_one_value) {
+ top_of_rdn = tree;
+ } else {
+
+ if(doing_dn)
+ /* this is an additional value - delimit */
+ g_strlcat(last_rdn, "+", MAX_RDN_STR_LEN);
+ }
+
+ %(DEFAULT_BODY)s
+
+ rdn_one_value = TRUE;
+
+#.FN_BODY RDNSequence
+
+ dn_one_rdn = FALSE; /* reset */
+ last_dn = ep_alloc(MAX_RDN_STR_LEN); *last_dn = '\0';
+ top_of_dn = NULL;
+
+ %(DEFAULT_BODY)s
+
+ /* we've finished - append the dn */
+ proto_item_append_text(top_of_dn, " (%%s)", last_dn);
+
+
+#.FN_BODY RDNSequence/_item
+
+ if(!dn_one_rdn) {
+ /* this is the first element - record the top */
+ top_of_dn = tree;
+ }
+
+ %(DEFAULT_BODY)s
+
+ dn_one_rdn = TRUE;
+
#.END
diff --git a/asn1/x509sat/Makefile.nmake b/asn1/x509sat/Makefile.nmake
index 8b6b884f5f..25d633f0f1 100644
--- a/asn1/x509sat/Makefile.nmake
+++ b/asn1/x509sat/Makefile.nmake
@@ -37,6 +37,6 @@ fix_eol: generate_dissector
del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
copy_files: generate_dissector fix_eol
- xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d
- xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
diff --git a/asn1/x509sat/SelectedAttributeTypes.asn b/asn1/x509sat/SelectedAttributeTypes.asn
index aba6a6278d..e4f3fc6474 100644
--- a/asn1/x509sat/SelectedAttributeTypes.asn
+++ b/asn1/x509sat/SelectedAttributeTypes.asn
@@ -218,11 +218,11 @@ CountryName ::= PrintableString
-- ID id-at-searchGuide
-- }
--- XXX Asn2eth bug it can not handle SET for BER, only for PER
--- Guide ::= SET {
--- objectClass [0] OBJECT IDENTIFIER OPTIONAL,
--- criteria [1] Criteria
--- }
+
+Guide ::= SET {
+ objectClass [0] OBJECT IDENTIFIER OPTIONAL,
+ criteria [1] Criteria
+}
Criteria ::= CHOICE {
type [0] CriteriaItem,
diff --git a/asn1/x509sat/x509sat.cnf b/asn1/x509sat/x509sat.cnf
index 6cf27891cf..c112117295 100644
--- a/asn1/x509sat/x509sat.cnf
+++ b/asn1/x509sat/x509sat.cnf
@@ -40,6 +40,27 @@ XDayOf
ZonalResult
ZonalSelect
+#.PDU
+CaseIgnoreListMatch
+CountryName
+Criteria
+DayTime
+DayTimeBand
+DestinationIndicator
+DirectoryString
+EnhancedGuide
+FacsimileTelephoneNumber
+Guide
+InternationalISDNNumber
+NameAndOptionalUID
+PostalAddress
+PreferredDeliveryMethod
+PresentationAddress
+TelephoneNumber
+TelexNumber
+UniqueIdentifier
+X121Address
+
#.REGISTER
CountryName B "2.5.4.6" "id-at-countryName"
DirectoryString B "2.5.4.2" "id-at-knowledgeInformation"
diff --git a/epan/dissectors/packet-acse.c b/epan/dissectors/packet-acse.c
index 6cedf275dc..86b2078e5c 100644
--- a/epan/dissectors/packet-acse.c
+++ b/epan/dissectors/packet-acse.c
@@ -59,7 +59,7 @@
#include "packet-pres.h"
#include "packet-x509if.h"
-#define PNAME "ACSE"
+#define PNAME "ISO 8650-1 OSI Association Control Service"
#define PSNAME "ACSE"
#define PFNAME "acse"
@@ -1398,8 +1398,16 @@ static const value_string acse_Release_request_reason_vals[] = {
static int
dissect_acse_Release_request_reason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ int reason = -1;
+
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &reason);
+
+
+ if((reason != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Release-Request (%s)", val_to_str(reason, acse_Release_request_reason_vals, "reason(%d)"));
+
+
return offset;
}
@@ -1438,8 +1446,18 @@ static const value_string acse_Release_response_reason_vals[] = {
static int
dissect_acse_Release_response_reason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ int reason = -1;
+
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &reason);
+
+
+ if((reason != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Release-Response (%s)", val_to_str(reason, acse_Release_request_reason_vals, "reason(%d)"));
+
+
+
+
return offset;
}
@@ -1848,8 +1866,6 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
proto_tree *tree=NULL;
char *oid;
- /* save parent_tree so subdissectors can create new top nodes */
- top_tree=parent_tree;
/* first, try to check length */
/* do we have at least 2 bytes */
@@ -1875,6 +1891,9 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
}
}
}
+ /* save parent_tree so subdissectors can create new top nodes */
+ top_tree=parent_tree;
+
/* ACSE has only AARQ,AARE,RLRQ,RLRE,ABRT type of pdu */
/* reject everything else */
/* data pdu is not ACSE pdu and has to go directly to app dissector */
@@ -1899,8 +1918,10 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
proto_tree_add_text(parent_tree, tvb, offset, -1,
"dissector is not available");
}
+ top_tree = NULL;
return;
default:
+ top_tree = NULL;
return;
}
@@ -1926,7 +1947,8 @@ dissect_acse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
break;
}
}
-
+
+top_tree = NULL;
}
/*--- proto_register_acse ----------------------------------------------*/
diff --git a/epan/dissectors/packet-cms.c b/epan/dissectors/packet-cms.c
index 6eeef3220f..cedae74489 100644
--- a/epan/dissectors/packet-cms.c
+++ b/epan/dissectors/packet-cms.c
@@ -46,6 +46,9 @@
#include "packet-x509af.h"
#include "packet-x509if.h"
+#include <epan/sha1.h>
+#include <epan/crypt-md5.h>
+
#define PNAME "Cryptographic Message Syntax"
#define PSNAME "CMS"
#define PFNAME "cms"
@@ -97,7 +100,7 @@ static int hf_cms_encryptedContentInfo = -1; /* EncryptedContentInfo */
static int hf_cms_unprotectedAttrs = -1; /* UnprotectedAttributes */
static int hf_cms_certs = -1; /* CertificateSet */
static int hf_cms_RecipientInfos_item = -1; /* RecipientInfo */
-static int hf_cms_contentType1 = -1; /* ContentType */
+static int hf_cms_encryptedContentType = -1; /* ContentType */
static int hf_cms_contentEncryptionAlgorithm = -1; /* ContentEncryptionAlgorithmIdentifier */
static int hf_cms_encryptedContent = -1; /* EncryptedContent */
static int hf_cms_UnprotectedAttributes_item = -1; /* Attribute */
@@ -198,6 +201,78 @@ static int dissect_cms_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, in
static const char *object_identifier_id;
+static tvbuff_t *content_tvb = NULL;
+
+static proto_tree *top_tree=NULL;
+
+#define HASH_SHA1 "1.3.14.3.2.26"
+#define SHA1_BUFFER_SIZE 20
+
+#define HASH_MD5 "1.2.840.113549.2.5"
+#define MD5_BUFFER_SIZE 16
+
+
+/* SHA-2 variants */
+#define HASH_SHA224 "2.16.840.1.101.3.4.2.4"
+#define SHA224_BUFFER_SIZE 32 /* actually 28 */
+#define HASH_SHA256 "2.16.840.1.101.3.4.2.1"
+#define SHA256_BUFFER_SIZE 32
+
+unsigned char digest_buf[MAX(SHA1_BUFFER_SIZE, MD5_BUFFER_SIZE)];
+
+static void
+cms_verify_msg_digest(proto_item *pi, tvbuff_t *content, char *alg, tvbuff_t *tvb, int offset)
+{
+ sha1_context sha1_ctx;
+ md5_state_t md5_ctx;
+ int i= 0, buffer_size = 0;
+
+ /* we only support two algorithms at the moment - if we do add SHA2
+ we should add a registration process to use a registration process */
+
+ if(strcmp(alg, HASH_SHA1) == 0) {
+
+ sha1_starts(&sha1_ctx);
+
+ sha1_update(&sha1_ctx,
+ (guint8*)tvb_get_ptr(content, 0, tvb_length(content)),
+ tvb_length(content));
+
+ sha1_finish(&sha1_ctx, digest_buf);
+
+ buffer_size = SHA1_BUFFER_SIZE;
+
+ } else if(strcmp(alg, HASH_MD5) == 0) {
+
+ md5_init(&md5_ctx);
+
+ md5_append(&md5_ctx,
+ (const guint8*) tvb_get_ptr(content, 0, tvb_length(content)),
+ tvb_length(content));
+
+ md5_finish(&md5_ctx, digest_buf);
+
+ buffer_size = MD5_BUFFER_SIZE;
+ }
+
+ if(buffer_size) {
+ /* compare our computed hash with what we have received */
+
+ if(tvb_bytes_exist(tvb, offset, buffer_size) &&
+ (memcmp(tvb_get_ptr(tvb, offset, buffer_size), digest_buf, buffer_size) != 0)) {
+ proto_item_append_text(pi, " [incorrect, should be ");
+ for(i = 0; i < buffer_size; i++)
+ proto_item_append_text(pi, "%02X", digest_buf[i]);
+
+ proto_item_append_text(pi, "]");
+ }
+ else
+ proto_item_append_text(pi, " [correct]");
+ } else {
+ proto_item_append_text(pi, " [unable to verify]");
+ }
+
+}
/*--- Included file: packet-cms-fn.c ---*/
@@ -231,8 +306,8 @@ dissect_cms_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pa
return offset;
}
-static int dissect_contentType1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_cms_ContentType(FALSE, tvb, offset, pinfo, tree, hf_cms_contentType1);
+static int dissect_encryptedContentType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_cms_ContentType(FALSE, tvb, offset, pinfo, tree, hf_cms_encryptedContentType);
}
@@ -271,9 +346,14 @@ static const ber_sequence_t ContentInfo_sequence[] = {
int
dissect_cms_ContentInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ top_tree = tree;
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
ContentInfo_sequence, hf_index, ett_cms_ContentInfo);
+ content_tvb = NULL;
+ top_tree = NULL;
+
+
return offset;
}
@@ -356,13 +436,16 @@ dissect_cms_T_eContent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pac
gint32 tag;
guint32 len;
int pdu_offset = offset;
+ int content_offset;
/* XXX Do we care about printing out the octet string? */
- offset = dissect_cms_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_cms_eContent);
+ offset = dissect_cms_OCTET_STRING(FALSE, tvb, offset, pinfo, NULL, hf_cms_eContent);
pdu_offset = get_ber_identifier(tvb, pdu_offset, &class, &pc, &tag);
- pdu_offset = get_ber_length(tree, tvb, pdu_offset, &len, &ind);
- pdu_offset = call_ber_oid_callback(object_identifier_id, tvb, pdu_offset, pinfo, tree);
+ content_offset = pdu_offset = get_ber_length(tree, tvb, pdu_offset, &len, &ind);
+ pdu_offset = call_ber_oid_callback(object_identifier_id, tvb, pdu_offset, pinfo, top_tree ? top_tree : tree);
+
+ content_tvb = tvb_new_subset(tvb, content_offset, len, -1);
return offset;
@@ -393,7 +476,16 @@ static int dissect_encapContentInfo(packet_info *pinfo, proto_tree *tree, tvbuff
static int
dissect_cms_T_attrType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_cms_attrType, &object_identifier_id);
+ char *name = NULL;
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_cms_attrType, &object_identifier_id);
+
+
+ if(object_identifier_id) {
+ name = get_ber_oid_name(object_identifier_id);
+ proto_item_append_text(tree, " (%s)", name ? name : object_identifier_id);
+ }
+
return offset;
}
@@ -962,6 +1054,7 @@ dissect_cms_T_keyAttr(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pack
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+
return offset;
}
static int dissect_keyAttr(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1207,7 +1300,7 @@ static int dissect_encryptedContent_impl(packet_info *pinfo, proto_tree *tree, t
static const ber_sequence_t EncryptedContentInfo_sequence[] = {
- { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_contentType1 },
+ { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_encryptedContentType },
{ BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contentEncryptionAlgorithm },
{ BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryptedContent_impl },
{ 0, 0, 0, NULL }
@@ -1371,9 +1464,23 @@ dissect_cms_AuthenticatedData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
static int
dissect_cms_MessageDigest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ proto_item *pi;
+ int old_offset = offset;
+
+ offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
NULL);
+
+ pi = get_ber_last_created_item();
+
+ /* move past TLV */
+ old_offset = get_ber_identifier(tvb, old_offset, NULL, NULL, NULL);
+ old_offset = get_ber_length(tree, tvb, old_offset, NULL, NULL);
+
+ if(content_tvb)
+ cms_verify_msg_digest(pi, content_tvb, x509af_get_last_algorithm_id(), tvb, old_offset);
+
+
return offset;
}
@@ -1468,7 +1575,6 @@ static void dissect_Countersignature_PDU(tvbuff_t *tvb, packet_info *pinfo, prot
/*--- End of included file: packet-cms-fn.c ---*/
-
/*--- proto_register_cms ----------------------------------------------*/
void proto_register_cms(void) {
@@ -1645,7 +1751,7 @@ void proto_register_cms(void) {
{ "Item", "cms.RecipientInfos_item",
FT_UINT32, BASE_DEC, VALS(cms_RecipientInfo_vals), 0,
"RecipientInfos/_item", HFILL }},
- { &hf_cms_contentType1,
+ { &hf_cms_encryptedContentType,
{ "contentType", "cms.contentType",
FT_STRING, BASE_NONE, NULL, 0,
"EncryptedContentInfo/contentType", HFILL }},
diff --git a/epan/dissectors/packet-ess.c b/epan/dissectors/packet-ess.c
index 65b0e5d523..f80a50f183 100644
--- a/epan/dissectors/packet-ess.c
+++ b/epan/dissectors/packet-ess.c
@@ -63,6 +63,10 @@ static int hf_ess_ContentHints_PDU = -1; /* ContentHints */
static int hf_ess_MsgSigDigest_PDU = -1; /* MsgSigDigest */
static int hf_ess_ContentReference_PDU = -1; /* ContentReference */
static int hf_ess_ESSSecurityLabel_PDU = -1; /* ESSSecurityLabel */
+static int hf_ess_RestrictiveTag_PDU = -1; /* RestrictiveTag */
+static int hf_ess_EnumeratedTag_PDU = -1; /* EnumeratedTag */
+static int hf_ess_PermissiveTag_PDU = -1; /* PermissiveTag */
+static int hf_ess_InformativeTag_PDU = -1; /* InformativeTag */
static int hf_ess_EquivalentLabels_PDU = -1; /* EquivalentLabels */
static int hf_ess_MLExpansionHistory_PDU = -1; /* MLExpansionHistory */
static int hf_ess_SigningCertificate_PDU = -1; /* SigningCertificate */
@@ -86,6 +90,14 @@ static int hf_ess_utf8String = -1; /* UTF8String */
static int hf_ess_SecurityCategories_item = -1; /* SecurityCategory */
static int hf_ess_type = -1; /* T_type */
static int hf_ess_value = -1; /* T_value */
+static int hf_ess_tagName = -1; /* OBJECT_IDENTIFIER */
+static int hf_ess_attributeFlags = -1; /* BIT_STRING */
+static int hf_ess_attributeList = -1; /* SET_OF_SecurityAttribute */
+static int hf_ess_attributeList_item = -1; /* SecurityAttribute */
+static int hf_ess_attributes = -1; /* FreeFormField */
+static int hf_ess_bitSetAttributes = -1; /* BIT_STRING */
+static int hf_ess_securityAttributes = -1; /* SET_OF_SecurityAttribute */
+static int hf_ess_securityAttributes_item = -1; /* SecurityAttribute */
static int hf_ess_EquivalentLabels_item = -1; /* ESSSecurityLabel */
static int hf_ess_MLExpansionHistory_item = -1; /* MLData */
static int hf_ess_mailListIdentifier = -1; /* EntityIdentifier */
@@ -124,6 +136,12 @@ static gint ett_ess_ESSSecurityLabel = -1;
static gint ett_ess_ESSPrivacyMark = -1;
static gint ett_ess_SecurityCategories = -1;
static gint ett_ess_SecurityCategory = -1;
+static gint ett_ess_RestrictiveTag = -1;
+static gint ett_ess_EnumeratedTag = -1;
+static gint ett_ess_SET_OF_SecurityAttribute = -1;
+static gint ett_ess_PermissiveTag = -1;
+static gint ett_ess_InformativeTag = -1;
+static gint ett_ess_FreeFormField = -1;
static gint ett_ess_EquivalentLabels = -1;
static gint ett_ess_MLExpansionHistory = -1;
static gint ett_ess_MLData = -1;
@@ -534,6 +552,155 @@ static int dissect_EquivalentLabels_item(packet_info *pinfo, proto_tree *tree, t
}
+
+static int
+dissect_ess_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
+
+ return offset;
+}
+static int dissect_tagName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_ess_tagName);
+}
+
+
+
+static int
+dissect_ess_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+ NULL, hf_index, -1,
+ NULL);
+
+ return offset;
+}
+static int dissect_attributeFlags(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_ess_attributeFlags);
+}
+static int dissect_bitSetAttributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_ess_bitSetAttributes);
+}
+
+
+static const ber_sequence_t RestrictiveTag_sequence[] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tagName },
+ { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_attributeFlags },
+ { 0, 0, 0, NULL }
+};
+
+static int
+dissect_ess_RestrictiveTag(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ RestrictiveTag_sequence, hf_index, ett_ess_RestrictiveTag);
+
+ return offset;
+}
+
+
+
+static int
+dissect_ess_SecurityAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ NULL);
+
+ return offset;
+}
+static int dissect_attributeList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_SecurityAttribute(FALSE, tvb, offset, pinfo, tree, hf_ess_attributeList_item);
+}
+static int dissect_securityAttributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_SecurityAttribute(FALSE, tvb, offset, pinfo, tree, hf_ess_securityAttributes_item);
+}
+
+
+static const ber_sequence_t SET_OF_SecurityAttribute_set_of[1] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_attributeList_item },
+};
+
+static int
+dissect_ess_SET_OF_SecurityAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+ SET_OF_SecurityAttribute_set_of, hf_index, ett_ess_SET_OF_SecurityAttribute);
+
+ return offset;
+}
+static int dissect_attributeList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_SET_OF_SecurityAttribute(FALSE, tvb, offset, pinfo, tree, hf_ess_attributeList);
+}
+static int dissect_securityAttributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_SET_OF_SecurityAttribute(FALSE, tvb, offset, pinfo, tree, hf_ess_securityAttributes);
+}
+
+
+static const ber_sequence_t EnumeratedTag_sequence[] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tagName },
+ { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_attributeList },
+ { 0, 0, 0, NULL }
+};
+
+static int
+dissect_ess_EnumeratedTag(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ EnumeratedTag_sequence, hf_index, ett_ess_EnumeratedTag);
+
+ return offset;
+}
+
+
+static const ber_sequence_t PermissiveTag_sequence[] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tagName },
+ { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_attributeFlags },
+ { 0, 0, 0, NULL }
+};
+
+static int
+dissect_ess_PermissiveTag(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ PermissiveTag_sequence, hf_index, ett_ess_PermissiveTag);
+
+ return offset;
+}
+
+
+static const value_string ess_FreeFormField_vals[] = {
+ { 0, "bitSetAttributes" },
+ { 1, "securityAttributes" },
+ { 0, NULL }
+};
+
+static const ber_choice_t FreeFormField_choice[] = {
+ { 0, BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_bitSetAttributes },
+ { 1, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_securityAttributes },
+ { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_ess_FreeFormField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+ FreeFormField_choice, hf_index, ett_ess_FreeFormField,
+ NULL);
+
+ return offset;
+}
+static int dissect_attributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_ess_FreeFormField(FALSE, tvb, offset, pinfo, tree, hf_ess_attributes);
+}
+
+
+static const ber_sequence_t InformativeTag_sequence[] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_tagName },
+ { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_attributes },
+ { 0, 0, 0, NULL }
+};
+
+static int
+dissect_ess_InformativeTag(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ InformativeTag_sequence, hf_index, ett_ess_InformativeTag);
+
+ return offset;
+}
+
+
static const ber_sequence_t EquivalentLabels_sequence_of[1] = {
{ BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_EquivalentLabels_item },
};
@@ -773,6 +940,18 @@ static void dissect_ContentReference_PDU(tvbuff_t *tvb, packet_info *pinfo, prot
static void dissect_ESSSecurityLabel_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_ess_ESSSecurityLabel(FALSE, tvb, 0, pinfo, tree, hf_ess_ESSSecurityLabel_PDU);
}
+static void dissect_RestrictiveTag_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_ess_RestrictiveTag(FALSE, tvb, 0, pinfo, tree, hf_ess_RestrictiveTag_PDU);
+}
+static void dissect_EnumeratedTag_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_ess_EnumeratedTag(FALSE, tvb, 0, pinfo, tree, hf_ess_EnumeratedTag_PDU);
+}
+static void dissect_PermissiveTag_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_ess_PermissiveTag(FALSE, tvb, 0, pinfo, tree, hf_ess_PermissiveTag_PDU);
+}
+static void dissect_InformativeTag_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_ess_InformativeTag(FALSE, tvb, 0, pinfo, tree, hf_ess_InformativeTag_PDU);
+}
static void dissect_EquivalentLabels_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_ess_EquivalentLabels(FALSE, tvb, 0, pinfo, tree, hf_ess_EquivalentLabels_PDU);
}
@@ -827,6 +1006,22 @@ void proto_register_ess(void) {
{ "ESSSecurityLabel", "ess.ESSSecurityLabel",
FT_NONE, BASE_NONE, NULL, 0,
"ESSSecurityLabel", HFILL }},
+ { &hf_ess_RestrictiveTag_PDU,
+ { "RestrictiveTag", "ess.RestrictiveTag",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "RestrictiveTag", HFILL }},
+ { &hf_ess_EnumeratedTag_PDU,
+ { "EnumeratedTag", "ess.EnumeratedTag",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "EnumeratedTag", HFILL }},
+ { &hf_ess_PermissiveTag_PDU,
+ { "PermissiveTag", "ess.PermissiveTag",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PermissiveTag", HFILL }},
+ { &hf_ess_InformativeTag_PDU,
+ { "InformativeTag", "ess.InformativeTag",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "InformativeTag", HFILL }},
{ &hf_ess_EquivalentLabels_PDU,
{ "EquivalentLabels", "ess.EquivalentLabels",
FT_UINT32, BASE_DEC, NULL, 0,
@@ -919,6 +1114,38 @@ void proto_register_ess(void) {
{ "value", "ess.value",
FT_NONE, BASE_NONE, NULL, 0,
"SecurityCategory/value", HFILL }},
+ { &hf_ess_tagName,
+ { "tagName", "ess.tagName",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "", HFILL }},
+ { &hf_ess_attributeFlags,
+ { "attributeFlags", "ess.attributeFlags",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "", HFILL }},
+ { &hf_ess_attributeList,
+ { "attributeList", "ess.attributeList",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "EnumeratedTag/attributeList", HFILL }},
+ { &hf_ess_attributeList_item,
+ { "Item", "ess.attributeList_item",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "EnumeratedTag/attributeList/_item", HFILL }},
+ { &hf_ess_attributes,
+ { "attributes", "ess.attributes",
+ FT_UINT32, BASE_DEC, VALS(ess_FreeFormField_vals), 0,
+ "InformativeTag/attributes", HFILL }},
+ { &hf_ess_bitSetAttributes,
+ { "bitSetAttributes", "ess.bitSetAttributes",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "FreeFormField/bitSetAttributes", HFILL }},
+ { &hf_ess_securityAttributes,
+ { "securityAttributes", "ess.securityAttributes",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "FreeFormField/securityAttributes", HFILL }},
+ { &hf_ess_securityAttributes_item,
+ { "Item", "ess.securityAttributes_item",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "FreeFormField/securityAttributes/_item", HFILL }},
{ &hf_ess_EquivalentLabels_item,
{ "Item", "ess.EquivalentLabels_item",
FT_NONE, BASE_NONE, NULL, 0,
@@ -1019,6 +1246,12 @@ void proto_register_ess(void) {
&ett_ess_ESSPrivacyMark,
&ett_ess_SecurityCategories,
&ett_ess_SecurityCategory,
+ &ett_ess_RestrictiveTag,
+ &ett_ess_EnumeratedTag,
+ &ett_ess_SET_OF_SecurityAttribute,
+ &ett_ess_PermissiveTag,
+ &ett_ess_InformativeTag,
+ &ett_ess_FreeFormField,
&ett_ess_EquivalentLabels,
&ett_ess_MLExpansionHistory,
&ett_ess_MLData,
@@ -1059,6 +1292,11 @@ void proto_reg_handoff_ess(void) {
register_ber_oid_dissector("1.2.840.113549.1.9.16.2.9", dissect_EquivalentLabels_PDU, proto_ess, "id-aa-equivalentLabels");
register_ber_oid_dissector("1.2.840.113549.1.9.16.2.3", dissect_MLExpansionHistory_PDU, proto_ess, "id-aa-mlExpandHistory");
register_ber_oid_dissector("1.2.840.113549.1.9.16.2.12", dissect_SigningCertificate_PDU, proto_ess, "id-aa-signingCertificate");
+ register_ber_oid_dissector("2.16.840.1.101.2.1.8.3.0", dissect_RestrictiveTag_PDU, proto_ess, "id-restrictiveAttributes");
+ register_ber_oid_dissector("2.16.840.1.101.2.1.8.3.1", dissect_EnumeratedTag_PDU, proto_ess, "id-enumeratedPermissiveAttributes");
+ register_ber_oid_dissector("2.16.840.1.101.2.1.8.3.2", dissect_PermissiveTag_PDU, proto_ess, "id-restrictiveAttributes");
+ register_ber_oid_dissector("2.16.840.1.101.2.1.8.3.3", dissect_InformativeTag_PDU, proto_ess, "id-informativeAttributes");
+ register_ber_oid_dissector("2.16.840.1.101.2.1.8.3.4", dissect_EnumeratedTag_PDU, proto_ess, "id-enumeratedRestrictiveAttributes");
/*--- End of included file: packet-ess-dis-tab.c ---*/
diff --git a/epan/dissectors/packet-rtse.c b/epan/dissectors/packet-rtse.c
index fd0ab5806e..bd976a3a19 100644
--- a/epan/dissectors/packet-rtse.c
+++ b/epan/dissectors/packet-rtse.c
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-rtse.c */
+/* .\packet-rtse.c */
/* ../../tools/asn2eth.py -X -b -e -p rtse -c rtse.cnf -s packet-rtse-template rtse.asn */
/* Input file: packet-rtse-template.c */
@@ -57,6 +57,7 @@ int proto_rtse = -1;
static struct SESSION_DATA_STRUCTURE* session = NULL;
static char object_identifier_id[MAX_OID_STR_LEN];
+static gboolean open_request=FALSE;
/* indirect_reference, used to pick up the signalling so we know what
kind of data is transferred in SES_DATA_TRANSFER_PDUs */
static guint32 indir_ref=0;
@@ -260,9 +261,14 @@ static int dissect_open(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int
static int
dissect_rtse_T61String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
+ tvbuff_t *string = NULL;
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %s", tvb_format_text(string, 0, tvb_length(string)));
+
return offset;
}
@@ -274,8 +280,13 @@ static int dissect_t61String(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb
static int
dissect_rtse_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ tvbuff_t *string = NULL;
+ offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &string);
+
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %s", tvb_format_text(string, 0, tvb_length(string)));
+
return offset;
}
@@ -315,9 +326,14 @@ static int dissect_callingSSuserReference(packet_info *pinfo, proto_tree *tree,
static int
dissect_rtse_CommonReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
+ tvbuff_t *string = NULL;
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+ if(open_request && string && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %s", tvb_format_text(string, 0, tvb_length(string)));
+
return offset;
}
@@ -349,9 +365,13 @@ static const ber_sequence_t SessionConnectionIdentifier_sequence[] = {
static int
dissect_rtse_SessionConnectionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ if(open_request && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "Recover");
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
SessionConnectionIdentifier_sequence, hf_index, ett_rtse_SessionConnectionIdentifier);
+
+
return offset;
}
static int dissect_recover_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -421,10 +441,11 @@ dissect_rtse_RTORQapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pac
if((session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) != NULL)
session->ros_op = (ROS_OP_BIND | ROS_OP_ARGUMENT);
-
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+ open_request=TRUE;
+ offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
RTORQapdu_set, hf_index, ett_rtse_RTORQapdu);
+ open_request=FALSE;
return offset;
@@ -447,7 +468,7 @@ dissect_rtse_RTOACapdu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pac
if((session = (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data)) != NULL)
session->ros_op = (ROS_OP_BIND | ROS_OP_RESULT);
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+ offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
RTOACapdu_set, hf_index, ett_rtse_RTOACapdu);
diff --git a/epan/dissectors/packet-rtse.h b/epan/dissectors/packet-rtse.h
index a60066f714..32e25ebb39 100644
--- a/epan/dissectors/packet-rtse.h
+++ b/epan/dissectors/packet-rtse.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-rtse.h */
+/* .\packet-rtse.h */
/* ../../tools/asn2eth.py -X -b -e -p rtse -c rtse.cnf -s packet-rtse-template rtse.asn */
/* Input file: packet-rtse-template.h */
diff --git a/epan/dissectors/packet-s4406.c b/epan/dissectors/packet-s4406.c
index 34c6166e5e..c205ccae4c 100644
--- a/epan/dissectors/packet-s4406.c
+++ b/epan/dissectors/packet-s4406.c
@@ -66,7 +66,8 @@ static int hf_s4406_HandlingInstructions_PDU = -1; /* HandlingInstructions */
static int hf_s4406_MessageInstructions_PDU = -1; /* MessageInstructions */
static int hf_s4406_CodressMessage_PDU = -1; /* CodressMessage */
static int hf_s4406_OriginatorReference_PDU = -1; /* OriginatorReference */
-static int hf_s4406_MMHSPrecedence_PDU = -1; /* MMHSPrecedence */
+static int hf_s4406_PrimaryPrecedence_PDU = -1; /* PrimaryPrecedence */
+static int hf_s4406_CopyPrecedence_PDU = -1; /* CopyPrecedence */
static int hf_s4406_MessageType_PDU = -1; /* MessageType */
static int hf_s4406_AddressListDesignator_PDU = -1; /* AddressListDesignator */
static int hf_s4406_OtherRecipientDesignator_PDU = -1; /* OtherRecipientDesignator */
@@ -74,6 +75,7 @@ static int hf_s4406_PilotInformation_PDU = -1; /* PilotInformation */
static int hf_s4406_Acp127MessageIdentifier_PDU = -1; /* Acp127MessageIdentifier */
static int hf_s4406_OriginatorPlad_PDU = -1; /* OriginatorPlad */
static int hf_s4406_SecurityInformationLabels_PDU = -1; /* SecurityInformationLabels */
+static int hf_s4406_PriorityLevelQualifier_PDU = -1; /* PriorityLevelQualifier */
static int hf_s4406_sics = -1; /* SEQUENCE_OF_Sic */
static int hf_s4406_sics_item = -1; /* Sic */
static int hf_s4406_dist_Extensions = -1; /* SEQUENCE_OF_DistributionExtensionField */
@@ -90,7 +92,7 @@ static int hf_s4406_notificationRequest = -1; /* AddressListRequest */
static int hf_s4406_replyRequest = -1; /* AddressListRequest */
static int hf_s4406_other_recipient_type = -1; /* OtherRecipientType */
static int hf_s4406_designator = -1; /* MilitaryString */
-static int hf_s4406_pilotPrecedence = -1; /* MMHSPrecedence */
+static int hf_s4406_pilotPrecedence = -1; /* PilotPrecedence */
static int hf_s4406_pilotRecipient = -1; /* SEQUENCE_OF_ORDescriptor */
static int hf_s4406_pilotRecipient_item = -1; /* ORDescriptor */
static int hf_s4406_pilotSecurity = -1; /* SecurityLabel */
@@ -222,6 +224,7 @@ static int
dissect_s4406_T_dist_value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
/* XXX: not implemented */
+
return offset;
}
static int dissect_dist_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -346,7 +349,7 @@ dissect_s4406_OriginatorReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int
}
-static const value_string s4406_MMHSPrecedence_vals[] = {
+static const value_string s4406_PrimaryPrecedence_vals[] = {
{ 0, "deferred" },
{ 1, "routine" },
{ 2, "priority" },
@@ -361,14 +364,43 @@ static const value_string s4406_MMHSPrecedence_vals[] = {
static int
-dissect_s4406_MMHSPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+dissect_s4406_PrimaryPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ int precedence = -1;
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &precedence);
+
+ if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (primary=%s)", val_to_str(precedence, s4406_PrimaryPrecedence_vals, "precedence(%d)"));
+
return offset;
}
-static int dissect_pilotPrecedence_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_s4406_MMHSPrecedence(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotPrecedence);
+
+
+static const value_string s4406_CopyPrecedence_vals[] = {
+ { 0, "deferred" },
+ { 1, "routine" },
+ { 2, "priority" },
+ { 3, "immediate" },
+ { 4, "flash" },
+ { 5, "override" },
+ { 16, "ecp" },
+ { 17, "critic" },
+ { 18, "override" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_s4406_CopyPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ int precedence = -1;
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &precedence);
+
+ if((precedence != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (copy=%s)", val_to_str(precedence, s4406_CopyPrecedence_vals, "precedence(%d)"));
+
+ return offset;
}
@@ -513,6 +545,32 @@ dissect_s4406_OtherRecipientDesignator(gboolean implicit_tag _U_, tvbuff_t *tvb,
}
+static const value_string s4406_PilotPrecedence_vals[] = {
+ { 0, "deferred" },
+ { 1, "routine" },
+ { 2, "priority" },
+ { 3, "immediate" },
+ { 4, "flash" },
+ { 5, "override" },
+ { 16, "ecp" },
+ { 17, "critic" },
+ { 18, "override" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_s4406_PilotPrecedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ NULL);
+
+ return offset;
+}
+static int dissect_pilotPrecedence_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_s4406_PilotPrecedence(TRUE, tvb, offset, pinfo, tree, hf_s4406_pilotPrecedence);
+}
+
+
static const ber_sequence_t SEQUENCE_OF_ORDescriptor_sequence_of[1] = {
{ BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_pilotRecipient_item },
};
@@ -642,6 +700,22 @@ dissect_s4406_SecurityInformationLabels(gboolean implicit_tag _U_, tvbuff_t *tvb
return offset;
}
+
+static const value_string s4406_PriorityLevelQualifier_vals[] = {
+ { 0, "low" },
+ { 1, "high" },
+ { 0, NULL }
+};
+
+
+static int
+dissect_s4406_PriorityLevelQualifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ NULL);
+
+ return offset;
+}
+
/*--- PDUs ---*/
static void dissect_ExemptedAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
@@ -665,8 +739,11 @@ static void dissect_CodressMessage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_
static void dissect_OriginatorReference_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_s4406_OriginatorReference(FALSE, tvb, 0, pinfo, tree, hf_s4406_OriginatorReference_PDU);
}
-static void dissect_MMHSPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
- dissect_s4406_MMHSPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_MMHSPrecedence_PDU);
+static void dissect_PrimaryPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_s4406_PrimaryPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_PrimaryPrecedence_PDU);
+}
+static void dissect_CopyPrecedence_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_s4406_CopyPrecedence(FALSE, tvb, 0, pinfo, tree, hf_s4406_CopyPrecedence_PDU);
}
static void dissect_MessageType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_s4406_MessageType(FALSE, tvb, 0, pinfo, tree, hf_s4406_MessageType_PDU);
@@ -689,6 +766,9 @@ static void dissect_OriginatorPlad_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_
static void dissect_SecurityInformationLabels_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_s4406_SecurityInformationLabels(FALSE, tvb, 0, pinfo, tree, hf_s4406_SecurityInformationLabels_PDU);
}
+static void dissect_PriorityLevelQualifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_s4406_PriorityLevelQualifier(FALSE, tvb, 0, pinfo, tree, hf_s4406_PriorityLevelQualifier_PDU);
+}
/*--- End of included file: packet-s4406-fn.c ---*/
@@ -757,10 +837,14 @@ void proto_register_s4406(void) {
{ "OriginatorReference", "s4406.OriginatorReference",
FT_STRING, BASE_NONE, NULL, 0,
"OriginatorReference", HFILL }},
- { &hf_s4406_MMHSPrecedence_PDU,
- { "MMHSPrecedence", "s4406.MMHSPrecedence",
- FT_INT32, BASE_DEC, VALS(s4406_MMHSPrecedence_vals), 0,
- "MMHSPrecedence", HFILL }},
+ { &hf_s4406_PrimaryPrecedence_PDU,
+ { "PrimaryPrecedence", "s4406.PrimaryPrecedence",
+ FT_INT32, BASE_DEC, VALS(s4406_PrimaryPrecedence_vals), 0,
+ "PrimaryPrecedence", HFILL }},
+ { &hf_s4406_CopyPrecedence_PDU,
+ { "CopyPrecedence", "s4406.CopyPrecedence",
+ FT_INT32, BASE_DEC, VALS(s4406_CopyPrecedence_vals), 0,
+ "CopyPrecedence", HFILL }},
{ &hf_s4406_MessageType_PDU,
{ "MessageType", "s4406.MessageType",
FT_NONE, BASE_NONE, NULL, 0,
@@ -789,6 +873,10 @@ void proto_register_s4406(void) {
{ "SecurityInformationLabels", "s4406.SecurityInformationLabels",
FT_NONE, BASE_NONE, NULL, 0,
"SecurityInformationLabels", HFILL }},
+ { &hf_s4406_PriorityLevelQualifier_PDU,
+ { "PriorityLevelQualifier", "s4406.PriorityLevelQualifier",
+ FT_UINT32, BASE_DEC, VALS(s4406_PriorityLevelQualifier_vals), 0,
+ "PriorityLevelQualifier", HFILL }},
{ &hf_s4406_sics,
{ "sics", "s4406.sics",
FT_UINT32, BASE_DEC, NULL, 0,
@@ -855,7 +943,7 @@ void proto_register_s4406(void) {
"OtherRecipientDesignator/designator", HFILL }},
{ &hf_s4406_pilotPrecedence,
{ "pilotPrecedence", "s4406.pilotPrecedence",
- FT_INT32, BASE_DEC, VALS(s4406_MMHSPrecedence_vals), 0,
+ FT_INT32, BASE_DEC, VALS(s4406_PilotPrecedence_vals), 0,
"PilotInformation/pilotPrecedence", HFILL }},
{ &hf_s4406_pilotRecipient,
{ "pilotRecipient", "s4406.pilotRecipient",
@@ -947,8 +1035,8 @@ void proto_reg_handoff_s4406(void) {
/*--- Included file: packet-s4406-dis-tab.c ---*/
- register_ber_oid_dissector("1.3.26.0.4406.0.2.0", dissect_MMHSPrecedence_PDU, proto_s4406, "primary-precedence");
- register_ber_oid_dissector("1.3.26.0.4406.0.2.1", dissect_MMHSPrecedence_PDU, proto_s4406, "copy-precedence");
+ register_ber_oid_dissector("1.3.26.0.4406.0.2.0", dissect_PrimaryPrecedence_PDU, proto_s4406, "primary-precedence");
+ register_ber_oid_dissector("1.3.26.0.4406.0.2.1", dissect_CopyPrecedence_PDU, proto_s4406, "copy-precedence");
register_ber_oid_dissector("1.3.26.0.4406.0.2.2", dissect_MessageType_PDU, proto_s4406, "message-type");
register_ber_oid_dissector("1.3.26.0.4406.0.2.3", dissect_AddressListDesignator_PDU, proto_s4406, "address-list-indicator");
register_ber_oid_dissector("1.3.26.0.4406.0.2.4", dissect_ExemptedAddress_PDU, proto_s4406, "exempted-address");
@@ -963,6 +1051,7 @@ void proto_reg_handoff_s4406(void) {
register_ber_oid_dissector("1.3.26.0.4406.0.2.13", dissect_Acp127MessageIdentifier_PDU, proto_s4406, "acp127-message-identifierr");
register_ber_oid_dissector("1.3.26.0.4406.0.2.14", dissect_OriginatorPlad_PDU, proto_s4406, "originator-plad");
register_ber_oid_dissector("1.3.26.0.4406.0.2.17", dissect_SecurityInformationLabels_PDU, proto_s4406, "information-labels");
+ register_ber_oid_dissector("1.3.26.0.4406.0.8.0", dissect_PriorityLevelQualifier_PDU, proto_s4406, "priority-level-qualifier");
/*--- End of included file: packet-s4406-dis-tab.c ---*/
diff --git a/epan/dissectors/packet-s5066.c b/epan/dissectors/packet-s5066.c
index 568e1e5ca1..a9e3da8d0c 100644
--- a/epan/dissectors/packet-s5066.c
+++ b/epan/dissectors/packet-s5066.c
@@ -641,7 +641,7 @@ proto_register_s5066(void)
{ "Number of errored blocks", "s5066.21.err_blocks", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
},
{ &hf_s5066_21_nrx_blocks,
- { "Number of non-received blocks", "s5066.21.nrx_blocks", FT_UINT16, BASE_DEC, NULL, 0x0F, "", HFILL }
+ { "Number of non-received blocks", "s5066.21.nrx_blocks", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
},
/* Type 22: S_UNIDATA_REQUEST_CONFIRM */
{ &hf_s5066_22_unused,
@@ -702,7 +702,7 @@ proto_register_s5066(void)
{ "Number of errored blocks", "s5066.25.err_blocks", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
},
{ &hf_s5066_25_nrx_blocks,
- { "Number of non-received blocks", "s5066.25.nrx_blocks", FT_UINT16, BASE_DEC, NULL, 0x0F, "", HFILL }
+ { "Number of non-received blocks", "s5066.25.nrx_blocks", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
},
/* Type 26: S_EXPEDITED_UNIDATA_REQUEST_CONFIRM */
{ &hf_s5066_26_unused,
diff --git a/epan/dissectors/packet-x411.c b/epan/dissectors/packet-x411.c
index de8f7231f6..0b4ee643d6 100644
--- a/epan/dissectors/packet-x411.c
+++ b/epan/dissectors/packet-x411.c
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x411.c */
+/* .\packet-x411.c */
/* ../../tools/asn2eth.py -X -b -e -p x411 -c x411.cnf -s packet-x411-template x411.asn */
/* Input file: packet-x411-template.c */
@@ -62,8 +62,14 @@
int proto_x411 = -1;
static struct SESSION_DATA_STRUCTURE* session = NULL;
-static int extension_id = 0; /* integer extension id */
-static const char *object_identifier_id; /* content type identifier */
+static int extension_id = -1; /* integer extension id */
+static char *object_identifier_id; /* extensions identifier */
+static char *content_type_id; /* content type identifier */
+
+#define MAX_ORA_STR_LEN 256
+static char *oraddress = NULL;
+static gboolean doing_address=FALSE;
+static proto_item *address_item;
static proto_tree *top_tree=NULL;
@@ -720,15 +726,23 @@ static int dissect_empty_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *
static int
dissect_x411_MTAName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- tvbuff_t *mtaname;
+ tvbuff_t *mtaname = NULL;
offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
pinfo, tree, tvb, offset, hf_index,
&mtaname);
- if (check_col(pinfo->cinfo, COL_INFO)) {
- col_append_fstr(pinfo->cinfo, COL_INFO, " %s", tvb_get_string(mtaname, 0, tvb_length(mtaname)));
+ if(doing_address) {
+
+ proto_item_append_text(address_item, " %s", tvb_format_text(mtaname, 0, tvb_length(mtaname)));
+
+ } else {
+
+ if (check_col(pinfo->cinfo, COL_INFO) && mtaname) {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " %s", tvb_format_text(mtaname, 0, tvb_length(mtaname)));
+ }
+
}
@@ -905,7 +919,11 @@ static int dissect_privacy_mark(packet_info *pinfo, proto_tree *tree, tvbuff_t *
static int
dissect_x411_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &object_identifier_id);
+
+ extension_id = -1;
+
return offset;
}
@@ -1112,8 +1130,14 @@ static const value_string x411_MTABindError_vals[] = {
static int
dissect_x411_MTABindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ int error = -1;
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &error);
+
+ if((error != -1) && check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", val_to_str(error, x411_MTABindError_vals, "error(%d)"));
+
+
return offset;
}
@@ -1122,9 +1146,16 @@ dissect_x411_MTABindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
static int
dissect_x411_NumericString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
+ tvbuff_t *nstring = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &nstring);
+
+
+ if(doing_address && nstring)
+ g_strlcat(oraddress, tvb_format_text(nstring, 0, tvb_length(nstring)), MAX_ORA_STR_LEN);
+
return offset;
}
@@ -1151,9 +1182,29 @@ static int dissect_sub_address_impl(packet_info *pinfo, proto_tree *tree, tvbuff
static int
dissect_x411_PrintableString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+ tvbuff_t *pstring = NULL;
+ char *fmt = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &pstring);
+
+
+ if(doing_address && pstring) {
+ if(hf_index == hf_x411_printable_surname) fmt = "/S=";
+ else if(hf_index == hf_x411_printable_given_name) fmt = "/G=";
+ else if(hf_index == hf_x411_printable_initials) fmt = "/I=";
+ else if(hf_index == hf_x411_printable_generation_qualifier) fmt = "/GQ=";
+ else if(hf_index == hf_x411_printable_type) fmt = "/DD.";
+ else if(hf_index == hf_x411_printable_value) fmt = "=";
+
+ if(fmt)
+ g_strlcat(oraddress, fmt, MAX_ORA_STR_LEN);
+
+ g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+
+ }
+
return offset;
}
@@ -1224,10 +1275,16 @@ dissect_x411_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, p
offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
}
+
+ if(doing_address)
+ g_strlcat(oraddress, "/C=", MAX_ORA_STR_LEN);
+
offset = dissect_ber_choice(pinfo, tree, tvb, offset,
CountryName_choice, hf_index, ett_x411_CountryName, NULL);
+
+
return offset;
}
static int dissect_country_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1262,6 +1319,9 @@ dissect_x411_AdministrationDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb,
offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
}
+ if(doing_address)
+ g_strlcat(oraddress, "/A=", MAX_ORA_STR_LEN);
+
offset = dissect_ber_choice(pinfo, tree, tvb, offset,
AdministrationDomainName_choice, hf_index, ett_x411_AdministrationDomainName, NULL);
@@ -1290,10 +1350,16 @@ static const ber_choice_t PrivateDomainIdentifier_choice[] = {
static int
dissect_x411_PrivateDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+
+ if(doing_address)
+ g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
+
+ offset = dissect_ber_choice(pinfo, tree, tvb, offset,
PrivateDomainIdentifier_choice, hf_index, ett_x411_PrivateDomainIdentifier,
NULL);
+
+
return offset;
}
static int dissect_private_domain_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1313,9 +1379,19 @@ static const ber_sequence_t GlobalDomainIdentifier_sequence[] = {
static int
dissect_x411_GlobalDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ address_item = tree;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
GlobalDomainIdentifier_sequence, hf_index, ett_x411_GlobalDomainIdentifier);
+
+ if(*oraddress)
+ proto_item_append_text(address_item, " (%s/", oraddress);
+
+
+
return offset;
}
static int dissect_global_domain_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1332,9 +1408,16 @@ static int dissect_attempted_domain(packet_info *pinfo, proto_tree *tree, tvbuff
static int
dissect_x411_LocalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+ tvbuff_t *id = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &id);
+
+
+ if(doing_address && id)
+ proto_item_append_text(address_item, " $ %s)", tvb_format_text(id, 0, tvb_length(id)));
+
return offset;
}
@@ -1351,9 +1434,16 @@ static const ber_sequence_t MTSIdentifier_sequence[] = {
static int
dissect_x411_MTSIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ doing_address = TRUE;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
MTSIdentifier_sequence, hf_index, ett_x411_MTSIdentifier);
+
+ doing_address = FALSE;
+
+
return offset;
}
@@ -1373,9 +1463,19 @@ static int dissect_message_identifier(packet_info *pinfo, proto_tree *tree, tvbu
static int
dissect_x411_X121Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
+ tvbuff_t *string = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/X121=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+
return offset;
}
@@ -1396,9 +1496,18 @@ static int dissect_network_address_impl(packet_info *pinfo, proto_tree *tree, tv
static int
dissect_x411_TerminalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+ tvbuff_t *string = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/UA-ID=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
return offset;
}
@@ -1421,10 +1530,16 @@ static const ber_choice_t PrivateDomainName_choice[] = {
static int
dissect_x411_PrivateDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+
+ if(doing_address)
+ g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
+
+ offset = dissect_ber_choice(pinfo, tree, tvb, offset,
PrivateDomainName_choice, hf_index, ett_x411_PrivateDomainName,
NULL);
+
+
return offset;
}
static int dissect_private_domain_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1435,9 +1550,18 @@ static int dissect_private_domain_name_impl(packet_info *pinfo, proto_tree *tree
static int
dissect_x411_OrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+ tvbuff_t *string = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/O=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
return offset;
}
@@ -1525,9 +1649,14 @@ static const ber_sequence_t BuiltInStandardAttributes_sequence[] = {
static int
dissect_x411_BuiltInStandardAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ address_item = tree;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
BuiltInStandardAttributes_sequence, hf_index, ett_x411_BuiltInStandardAttributes);
+
+
return offset;
}
static int dissect_built_in_standard_attributes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1649,9 +1778,21 @@ static const ber_sequence_t ORName_sequence[] = {
int
dissect_x411_ORName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ address_item = NULL;
+ doing_address = TRUE;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
ORName_sequence, hf_index, ett_x411_ORName);
+
+ if(*oraddress && address_item)
+ proto_item_append_text(address_item, " (%s/)", oraddress);
+
+ doing_address = FALSE;
+
+
return offset;
}
static int dissect_exact_match_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1768,10 +1909,18 @@ static int dissect_g3_facsimile_impl(packet_info *pinfo, proto_tree *tree, tvbuf
static int
dissect_x411_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
+ tvbuff_t *tstring = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
pinfo, tree, tvb, offset, hf_index,
NULL);
+
+ if(doing_address && tstring)
+ g_strlcat(oraddress, tvb_format_text(tstring, 0, tvb_length(tstring)), MAX_ORA_STR_LEN);
+
+
+
return offset;
}
static int dissect_teletex_surname_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -1944,7 +2093,19 @@ static int dissect_built_in_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
static int
dissect_x411_ExtendedContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &object_identifier_id);
+ char *name = NULL;
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &content_type_id);
+
+
+ if(content_type_id) {
+ name = get_ber_oid_name(content_type_id);
+
+ if(!name) name = content_type_id;
+
+ proto_item_append_text(tree, " (%s)", name);
+ }
+
return offset;
}
@@ -2071,9 +2232,16 @@ static int dissect_per_message_indicators(packet_info *pinfo, proto_tree *tree,
static int
dissect_x411_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
+ tvbuff_t *arrival = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &arrival);
+
+
+ if(arrival)
+ proto_item_append_text(address_item, " %s", tvb_format_text(arrival, 0, tvb_length(arrival)));
+
return offset;
}
@@ -2198,8 +2366,14 @@ static const value_string x411_RoutingAction_vals[] = {
static int
dissect_x411_RoutingAction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+ int action = 0;
+
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ &action);
+
+
+ proto_item_append_text(address_item, " %s", val_to_str(action, x411_RoutingAction_vals, "action(%d)"));
+
return offset;
}
@@ -2266,9 +2440,17 @@ static const ber_sequence_t DomainSuppliedInformation_set[] = {
static int
dissect_x411_DomainSuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+
+ doing_address = FALSE;
+
+ offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
DomainSuppliedInformation_set, hf_index, ett_x411_DomainSuppliedInformation);
+
+ doing_address = TRUE;
+ proto_item_append_text(tree, ")");
+
+
return offset;
}
static int dissect_domain_supplied_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -2284,9 +2466,16 @@ static const ber_sequence_t TraceInformationElement_sequence[] = {
static int
dissect_x411_TraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ doing_address = TRUE;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
TraceInformationElement_sequence, hf_index, ett_x411_TraceInformationElement);
+
+ doing_address = FALSE;
+
+
return offset;
}
static int dissect_TraceInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -2358,8 +2547,16 @@ static int dissect_criticality_impl(packet_info *pinfo, proto_tree *tree, tvbuff
static int
dissect_x411_ExtensionValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-
- offset=call_x411_oid_callback("x411.extension", tvb, offset, pinfo, tree);
+ char *name;
+
+ if(extension_id != -1)
+ offset=call_x411_oid_callback("x411.extension", tvb, offset, pinfo, tree);
+ else if(object_identifier_id) {
+ call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+ name = get_ber_oid_name(object_identifier_id);
+ proto_item_append_text(tree, " (%s)", name ? name : object_identifier_id);
+ }
+
return offset;
@@ -2555,10 +2752,10 @@ dissect_x411_Content(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packe
tvbuff_t *next_tvb;
/* we can do this now constructed octet strings are supported */
- offset = dissect_ber_octet_string(FALSE, pinfo, tree, tvb, offset, hf_index, &next_tvb);
+ offset = dissect_ber_octet_string(FALSE, pinfo, NULL, tvb, offset, hf_index, &next_tvb);
- if (next_tvb)
- (void) call_ber_oid_callback(object_identifier_id, next_tvb, 0, pinfo, top_tree ? top_tree : tree);
+ if (next_tvb && content_type_id)
+ (void) call_ber_oid_callback(content_type_id, next_tvb, 0, pinfo, top_tree ? top_tree : tree);
return offset;
@@ -3226,9 +3423,17 @@ static const ber_sequence_t MTASuppliedInformation_set[] = {
static int
dissect_x411_MTASuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+
+ doing_address = FALSE;
+
+ offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
MTASuppliedInformation_set, hf_index, ett_x411_MTASuppliedInformation);
+
+ doing_address = TRUE;
+ proto_item_append_text(tree, ")");
+
+
return offset;
}
static int dissect_mta_supplied_information(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -3245,9 +3450,17 @@ static const ber_sequence_t InternalTraceInformationElement_sequence[] = {
static int
dissect_x411_InternalTraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ doing_address = TRUE;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
InternalTraceInformationElement_sequence, hf_index, ett_x411_InternalTraceInformationElement);
+
+ doing_address = FALSE;
+
+
+
return offset;
}
static int dissect_InternalTraceInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -5142,9 +5355,21 @@ static const ber_sequence_t ORAddress_sequence[] = {
static int
dissect_x411_ORAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+
+ oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';
+ doing_address = TRUE;
+ address_item = NULL;
+
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
ORAddress_sequence, hf_index, ett_x411_ORAddress);
+
+ if(*oraddress && address_item)
+ proto_item_append_text(address_item, " %s/", oraddress);
+
+ doing_address = FALSE;
+
+
return offset;
}
@@ -5637,9 +5862,20 @@ dissect_x411_CertificateSelectors(gboolean implicit_tag _U_, tvbuff_t *tvb, int
static int
dissect_x411_CommonName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+ tvbuff_t *string = NULL;
+
+ offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
pinfo, tree, tvb, offset, hf_index,
- NULL);
+ &string);
+
+
+ if(doing_address && string) {
+ g_strlcat(oraddress, "/CN=", MAX_ORA_STR_LEN);
+ g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+ }
+
+
+
return offset;
}
diff --git a/epan/dissectors/packet-x411.h b/epan/dissectors/packet-x411.h
index 4477b3c394..cde0bd7408 100644
--- a/epan/dissectors/packet-x411.h
+++ b/epan/dissectors/packet-x411.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x411.h */
+/* .\packet-x411.h */
/* ../../tools/asn2eth.py -X -b -e -p x411 -c x411.cnf -s packet-x411-template x411.asn */
/* Input file: packet-x411-template.h */
diff --git a/epan/dissectors/packet-x509af.c b/epan/dissectors/packet-x509af.c
index 81a0ced855..07fc887feb 100644
--- a/epan/dissectors/packet-x509af.c
+++ b/epan/dissectors/packet-x509af.c
@@ -62,19 +62,21 @@ static int hf_x509af_Certificate_PDU = -1; /* Certificate */
static int hf_x509af_CertificatePair_PDU = -1; /* CertificatePair */
static int hf_x509af_CertificateList_PDU = -1; /* CertificateList */
static int hf_x509af_AttributeCertificate_PDU = -1; /* AttributeCertificate */
+static int hf_x509af_DSS_Params_PDU = -1; /* DSS_Params */
static int hf_x509af_signedCertificate = -1; /* T_signedCertificate */
static int hf_x509af_version = -1; /* Version */
static int hf_x509af_serialNumber = -1; /* CertificateSerialNumber */
static int hf_x509af_signature = -1; /* AlgorithmIdentifier */
static int hf_x509af_issuer = -1; /* Name */
static int hf_x509af_validity = -1; /* Validity */
-static int hf_x509af_subject = -1; /* Name */
+static int hf_x509af_subject = -1; /* SubjectName */
static int hf_x509af_subjectPublicKeyInfo = -1; /* SubjectPublicKeyInfo */
static int hf_x509af_issuerUniqueIdentifier = -1; /* UniqueIdentifier */
static int hf_x509af_subjectUniqueIdentifier = -1; /* UniqueIdentifier */
static int hf_x509af_extensions = -1; /* Extensions */
static int hf_x509af_algorithmIdentifier = -1; /* AlgorithmIdentifier */
static int hf_x509af_encrypted = -1; /* BIT_STRING */
+static int hf_x509af_rdnSequence = -1; /* RDNSequence */
static int hf_x509af_algorithmId = -1; /* T_algorithmId */
static int hf_x509af_parameters = -1; /* T_parameters */
static int hf_x509af_notBefore = -1; /* Time */
@@ -122,11 +124,14 @@ static int hf_x509af_issuerUID = -1; /* UniqueIdentifier */
static int hf_x509af_notBeforeTime = -1; /* GeneralizedTime */
static int hf_x509af_notAfterTime = -1; /* GeneralizedTime */
static int hf_x509af_assertion_subject = -1; /* AssertionSubject */
-static int hf_x509af_assertionSubjectName = -1; /* Name */
+static int hf_x509af_assertionSubjectName = -1; /* SubjectName */
static int hf_x509af_assertionIssuer = -1; /* Name */
static int hf_x509af_attCertValidity = -1; /* GeneralizedTime */
static int hf_x509af_attType = -1; /* SET_OF_AttributeType */
static int hf_x509af_attType_item = -1; /* AttributeType */
+static int hf_x509af_p = -1; /* INTEGER */
+static int hf_x509af_q = -1; /* INTEGER */
+static int hf_x509af_g = -1; /* INTEGER */
/*--- End of included file: packet-x509af-hf.c ---*/
@@ -138,6 +143,7 @@ static gint ett_pkix_crl = -1;
static gint ett_x509af_Certificate = -1;
static gint ett_x509af_T_signedCertificate = -1;
+static gint ett_x509af_SubjectName = -1;
static gint ett_x509af_AlgorithmIdentifier = -1;
static gint ett_x509af_Validity = -1;
static gint ett_x509af_SubjectPublicKeyInfo = -1;
@@ -166,17 +172,15 @@ static gint ett_x509af_AttCertValidityPeriod = -1;
static gint ett_x509af_AttributeCertificateAssertion = -1;
static gint ett_x509af_AssertionSubject = -1;
static gint ett_x509af_SET_OF_AttributeType = -1;
+static gint ett_x509af_DSS_Params = -1;
/*--- End of included file: packet-x509af-ett.c ---*/
static const char *algorithm_id;
-
-
static const char *extension_id;
-
/*--- Included file: packet-x509af-fn.c ---*/
/*--- Fields for imported types ---*/
@@ -184,15 +188,15 @@ static const char *extension_id;
static int dissect_issuer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_x509af_issuer);
}
-static int dissect_subject(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_x509af_subject);
-}
static int dissect_issuerUniqueIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509sat_UniqueIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x509af_issuerUniqueIdentifier);
}
static int dissect_subjectUniqueIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509sat_UniqueIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x509af_subjectUniqueIdentifier);
}
+static int dissect_rdnSequence(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509if_RDNSequence(FALSE, tvb, offset, pinfo, tree, hf_x509af_rdnSequence);
+}
static int dissect_infoSubjectName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509ce_GeneralNames(FALSE, tvb, offset, pinfo, tree, hf_x509af_infoSubjectName);
}
@@ -208,9 +212,6 @@ static int dissect_issuerUniqueID(packet_info *pinfo, proto_tree *tree, tvbuff_t
static int dissect_issuerUID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509sat_UniqueIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x509af_issuerUID);
}
-static int dissect_assertionSubjectName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_x509af_assertionSubjectName);
-}
static int dissect_assertionIssuer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_x509af_assertionIssuer);
}
@@ -261,7 +262,17 @@ static int dissect_serial(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, i
static int
dissect_x509af_T_algorithmId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509af_algorithm_id, &algorithm_id);
+ char *name;
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509af_algorithm_id, &algorithm_id);
+
+
+ if(algorithm_id) {
+ name = get_ber_oid_name(algorithm_id);
+
+ proto_item_append_text(tree, " (%s)", name ? name : algorithm_id);
+ }
+
return offset;
}
@@ -397,6 +408,37 @@ static int dissect_validity(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
}
+static const value_string x509af_SubjectName_vals[] = {
+ { 0, "rdnSequence" },
+ { 0, NULL }
+};
+
+static const ber_choice_t SubjectName_choice[] = {
+ { 0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_rdnSequence },
+ { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_x509af_SubjectName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+
+ offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+ SubjectName_choice, hf_index, ett_x509af_SubjectName,
+ NULL);
+
+
+ proto_item_append_text(proto_item_get_parent(tree), " (%s)", x509if_get_last_dn());
+
+
+ return offset;
+}
+static int dissect_subject(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509af_SubjectName(FALSE, tvb, offset, pinfo, tree, hf_x509af_subject);
+}
+static int dissect_assertionSubjectName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509af_SubjectName(FALSE, tvb, offset, pinfo, tree, hf_x509af_assertionSubjectName);
+}
+
+
static int
dissect_x509af_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
@@ -435,7 +477,17 @@ static int dissect_subjectPublicKeyInfo(packet_info *pinfo, proto_tree *tree, tv
static int
dissect_x509af_T_extnId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509af_extension_id, &extension_id);
+ char *name;
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509af_extension_id, &extension_id);
+
+
+ if(extension_id) {
+ name = get_ber_oid_name(extension_id);
+
+ proto_item_append_text(tree, " (%s)", name ? name : extension_id);
+ }
+
return offset;
}
@@ -523,7 +575,7 @@ static const ber_sequence_t T_signedCertificate_sequence[] = {
{ BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature },
{ BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_issuer },
{ BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_validity },
- { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_subject },
+ { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_subject },
{ BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subjectPublicKeyInfo },
{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_issuerUniqueIdentifier_impl },
{ BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subjectUniqueIdentifier_impl },
@@ -972,6 +1024,41 @@ dissect_x509af_AttributeCertificateAssertion(gboolean implicit_tag _U_, tvbuff_t
return offset;
}
+
+
+static int
+dissect_x509af_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ NULL);
+
+ return offset;
+}
+static int dissect_p(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509af_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509af_p);
+}
+static int dissect_q(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509af_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509af_q);
+}
+static int dissect_g(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509af_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509af_g);
+}
+
+
+static const ber_sequence_t DSS_Params_sequence[] = {
+ { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_p },
+ { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_q },
+ { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_g },
+ { 0, 0, 0, NULL }
+};
+
+static int
+dissect_x509af_DSS_Params(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+ DSS_Params_sequence, hf_index, ett_x509af_DSS_Params);
+
+ return offset;
+}
+
/*--- PDUs ---*/
static void dissect_Certificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
@@ -986,11 +1073,18 @@ static void dissect_CertificateList_PDU(tvbuff_t *tvb, packet_info *pinfo, proto
static void dissect_AttributeCertificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_x509af_AttributeCertificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_AttributeCertificate_PDU);
}
+static void dissect_DSS_Params_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509af_DSS_Params(FALSE, tvb, 0, pinfo, tree, hf_x509af_DSS_Params_PDU);
+}
/*--- End of included file: packet-x509af-fn.c ---*/
+char *x509af_get_last_algorithm_id() {
+ return algorithm_id;
+}
+
static int
dissect_pkix_crl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
@@ -1048,6 +1142,10 @@ void proto_register_x509af(void) {
{ "AttributeCertificate", "x509af.AttributeCertificate",
FT_NONE, BASE_NONE, NULL, 0,
"AttributeCertificate", HFILL }},
+ { &hf_x509af_DSS_Params_PDU,
+ { "DSS-Params", "x509af.DSS_Params",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DSS-Params", HFILL }},
{ &hf_x509af_signedCertificate,
{ "signedCertificate", "x509af.signedCertificate",
FT_NONE, BASE_NONE, NULL, 0,
@@ -1074,7 +1172,7 @@ void proto_register_x509af(void) {
"Certificate/signedCertificate/validity", HFILL }},
{ &hf_x509af_subject,
{ "subject", "x509af.subject",
- FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
+ FT_UINT32, BASE_DEC, VALS(x509af_SubjectName_vals), 0,
"Certificate/signedCertificate/subject", HFILL }},
{ &hf_x509af_subjectPublicKeyInfo,
{ "subjectPublicKeyInfo", "x509af.subjectPublicKeyInfo",
@@ -1100,6 +1198,10 @@ void proto_register_x509af(void) {
{ "encrypted", "x509af.encrypted",
FT_BYTES, BASE_HEX, NULL, 0,
"", HFILL }},
+ { &hf_x509af_rdnSequence,
+ { "rdnSequence", "x509af.rdnSequence",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "SubjectName/rdnSequence", HFILL }},
{ &hf_x509af_algorithmId,
{ "algorithmId", "x509af.algorithmId",
FT_STRING, BASE_NONE, NULL, 0,
@@ -1290,7 +1392,7 @@ void proto_register_x509af(void) {
"AttributeCertificateAssertion/subject", HFILL }},
{ &hf_x509af_assertionSubjectName,
{ "subjectName", "x509af.subjectName",
- FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
+ FT_UINT32, BASE_DEC, VALS(x509af_SubjectName_vals), 0,
"AttributeCertificateAssertion/subject/subjectName", HFILL }},
{ &hf_x509af_assertionIssuer,
{ "issuer", "x509af.issuer",
@@ -1308,6 +1410,18 @@ void proto_register_x509af(void) {
{ "Item", "x509af.attType_item",
FT_STRING, BASE_NONE, NULL, 0,
"AttributeCertificateAssertion/attType/_item", HFILL }},
+ { &hf_x509af_p,
+ { "p", "x509af.p",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DSS-Params/p", HFILL }},
+ { &hf_x509af_q,
+ { "q", "x509af.q",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DSS-Params/q", HFILL }},
+ { &hf_x509af_g,
+ { "g", "x509af.g",
+ FT_INT32, BASE_DEC, NULL, 0,
+ "DSS-Params/g", HFILL }},
/*--- End of included file: packet-x509af-hfarr.c ---*/
@@ -1321,6 +1435,7 @@ void proto_register_x509af(void) {
&ett_x509af_Certificate,
&ett_x509af_T_signedCertificate,
+ &ett_x509af_SubjectName,
&ett_x509af_AlgorithmIdentifier,
&ett_x509af_Validity,
&ett_x509af_SubjectPublicKeyInfo,
@@ -1349,6 +1464,7 @@ void proto_register_x509af(void) {
&ett_x509af_AttributeCertificateAssertion,
&ett_x509af_AssertionSubject,
&ett_x509af_SET_OF_AttributeType,
+ &ett_x509af_DSS_Params,
/*--- End of included file: packet-x509af-ettarr.c ---*/
@@ -1381,6 +1497,7 @@ void proto_reg_handoff_x509af(void) {
register_ber_oid_dissector("2.5.4.40", dissect_CertificatePair_PDU, proto_x509af, "id-at-crossCertificatePair");
register_ber_oid_dissector("2.5.4.58", dissect_AttributeCertificate_PDU, proto_x509af, "id-at-attributeCertificate");
register_ber_oid_dissector("2.5.4.59", dissect_CertificateList_PDU, proto_x509af, "id-at-attributeCertificateRevocationList");
+ register_ber_oid_dissector("1.2.840.10040.4.1", dissect_DSS_Params_PDU, proto_x509af, "id-dsa");
/*--- End of included file: packet-x509af-dis-tab.c ---*/
diff --git a/epan/dissectors/packet-x509af.h b/epan/dissectors/packet-x509af.h
index 226ef584f3..ad6f0fe6f2 100644
--- a/epan/dissectors/packet-x509af.h
+++ b/epan/dissectors/packet-x509af.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x509af.h */
+/* .\packet-x509af.h */
/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
/* Input file: packet-x509af-template.h */
@@ -64,5 +64,7 @@ int dissect_x509af_AttributeCertificateAssertion(gboolean implicit_tag, tvbuff_t
/*--- End of included file: packet-x509af-exp.h ---*/
+extern char* x509af_get_last_algorithm_id();
+
#endif /* PACKET_X509AF_H */
diff --git a/epan/dissectors/packet-x509if.c b/epan/dissectors/packet-x509if.c
index 8422135071..8f73c40437 100644
--- a/epan/dissectors/packet-x509if.c
+++ b/epan/dissectors/packet-x509if.c
@@ -52,9 +52,12 @@
/* Initialize the protocol and registered fields */
int proto_x509if = -1;
static int hf_x509if_object_identifier_id = -1;
+static int hf_x509if_any_string = -1;
/*--- Included file: packet-x509if-hf.c ---*/
+static int hf_x509if_Name_PDU = -1; /* Name */
+static int hf_x509if_DistinguishedName_PDU = -1; /* DistinguishedName */
static int hf_x509if_type = -1; /* AttributeId */
static int hf_x509if_values = -1; /* SET_OF_AttributeValue */
static int hf_x509if_values_item = -1; /* AttributeValue */
@@ -78,8 +81,8 @@ static int hf_x509if_ca_contextValues_item = -1; /* ContextValue */
static int hf_x509if_ata_assertedContexts = -1; /* SEQUENCE_OF_ContextAssertion */
static int hf_x509if_assertedContexts_item = -1; /* ContextAssertion */
static int hf_x509if_rdnSequence = -1; /* RDNSequence */
-static int hf_x509if_RDNSequence_item = -1; /* RelativeDistinguishedName */
-static int hf_x509if_RelativeDistinguishedName_item = -1; /* AttributeTypeAndDistinguishedValue */
+static int hf_x509if_RDNSequence_item = -1; /* RDNSequence_item */
+static int hf_x509if_RelativeDistinguishedName_item = -1; /* RelativeDistinguishedName_item */
static int hf_x509if_atadv_value = -1; /* AttributeValue */
static int hf_x509if_primaryDistinguished = -1; /* BOOLEAN */
static int hf_x509if_valueswithContext = -1; /* T_valWithContext */
@@ -277,6 +280,18 @@ static gint ett_x509if_MRSubstitution = -1;
static const char *object_identifier_id;
+static proto_tree *top_of_dn = NULL;
+static proto_tree *top_of_rdn = NULL;
+
+static gboolean rdn_one_value = FALSE; /* have we seen one value in an RDN yet */
+static gboolean dn_one_rdn = FALSE; /* have we seen one RDN in a DN yet */
+static gboolean doing_dn = TRUE;
+
+#define MAX_RDN_STR_LEN 64
+#define MAX_DN_STR_LEN (20 * MAX_RDN_STR_LEN)
+
+static char *last_dn = NULL;
+static char *last_rdn = NULL;
/*--- Included file: packet-x509if-fn.c ---*/
@@ -348,7 +363,25 @@ static int dissect_description(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
static int
dissect_x509if_AttributeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
+ char *name;
+
+ offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
+
+
+ if(object_identifier_id) {
+ /* see if we can find a nice name */
+ name = get_ber_oid_name(object_identifier_id);
+ if(!name) name = object_identifier_id;
+
+ if(doing_dn) { /* append it to the RDN */
+ g_strlcat(last_rdn, name, MAX_RDN_STR_LEN);
+ g_strlcat(last_rdn, "=", MAX_RDN_STR_LEN);
+
+ /* append it to the tree */
+ proto_item_append_text(tree, " (%s=", name);
+ }
+ }
+
return offset;
}
@@ -376,10 +409,30 @@ static int dissect_restrictionType(packet_info *pinfo, proto_tree *tree, tvbuff_
-static int
+int
dissect_x509if_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ int old_offset = offset;
+ tvbuff_t *out_tvb;
+ char *value = NULL;
+
offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+ /* try and dissect as a string */
+ dissect_ber_octet_string(FALSE, pinfo, NULL, tvb, old_offset, hf_x509if_any_string, &out_tvb);
+
+ if(out_tvb) {
+ /* it was a string - format it */
+ value = tvb_format_text(out_tvb, 0, tvb_length(out_tvb));
+
+ if(doing_dn) {
+ g_strlcat(last_rdn, value, MAX_RDN_STR_LEN);
+
+ /* append it to the tree*/
+ proto_item_append_text(tree, "%s)", value);
+ }
+
+ }
+
return offset;
}
@@ -776,8 +829,31 @@ dissect_x509if_AttributeTypeAndDistinguishedValue(gboolean implicit_tag _U_, tvb
return offset;
}
+
+
+
+static int
+dissect_x509if_RelativeDistinguishedName_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+
+ if(!rdn_one_value) {
+ top_of_rdn = tree;
+ } else {
+
+ if(doing_dn)
+ /* this is an additional value - delimit */
+ g_strlcat(last_rdn, "+", MAX_RDN_STR_LEN);
+ }
+
+ offset = dissect_x509if_AttributeTypeAndDistinguishedValue(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+
+ rdn_one_value = TRUE;
+
+
+ return offset;
+}
static int dissect_RelativeDistinguishedName_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509if_AttributeTypeAndDistinguishedValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_RelativeDistinguishedName_item);
+ return dissect_x509if_RelativeDistinguishedName_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_RelativeDistinguishedName_item);
}
@@ -787,13 +863,56 @@ static const ber_sequence_t RelativeDistinguishedName_set_of[1] = {
int
dissect_x509if_RelativeDistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+ char *temp_dn;
+
+ rdn_one_value = FALSE;
+ top_of_rdn = tree;
+ last_rdn = ep_alloc(MAX_DN_STR_LEN); *last_rdn = '\0';
+ doing_dn = TRUE;
+
+ offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
RelativeDistinguishedName_set_of, hf_index, ett_x509if_RelativeDistinguishedName);
+
+ /* we've finished - close the bracket */
+ proto_item_append_text(top_of_rdn, " (%s)", last_rdn);
+
+ /* now append this to the DN */
+ if(*last_dn) {
+ temp_dn = ep_alloc(MAX_DN_STR_LEN); /* is there a better way to use ep_alloc here ? */
+ g_snprintf(temp_dn, MAX_DN_STR_LEN, "%s,%s", last_rdn, last_dn);
+ last_dn[0] = '\0';
+ g_strlcat(last_dn, temp_dn, MAX_DN_STR_LEN);
+ } else
+ g_strlcat(last_dn, last_rdn, MAX_DN_STR_LEN);
+
+ doing_dn = FALSE;
+ last_rdn = NULL; /* it will get freed when the next packet is dissected */
+
+
+ return offset;
+}
+
+
+
+static int
+dissect_x509if_RDNSequence_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+
+ if(!dn_one_rdn) {
+ /* this is the first element - record the top */
+ top_of_dn = tree;
+ }
+
+ offset = dissect_x509if_RelativeDistinguishedName(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+
+ dn_one_rdn = TRUE;
+
+
return offset;
}
static int dissect_RDNSequence_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509if_RelativeDistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_x509if_RDNSequence_item);
+ return dissect_x509if_RDNSequence_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_RDNSequence_item);
}
@@ -803,9 +922,20 @@ static const ber_sequence_t RDNSequence_sequence_of[1] = {
int
dissect_x509if_RDNSequence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+
+ dn_one_rdn = FALSE; /* reset */
+ last_dn = ep_alloc(MAX_RDN_STR_LEN); *last_dn = '\0';
+ top_of_dn = NULL;
+
+ offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
RDNSequence_sequence_of, hf_index, ett_x509if_RDNSequence);
+
+ /* we've finished - append the dn */
+ proto_item_append_text(top_of_dn, " (%s)", last_dn);
+
+
+
return offset;
}
static int dissect_rdnSequence(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -2020,10 +2150,23 @@ dissect_x509if_OutputValues(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset
return offset;
}
+/*--- PDUs ---*/
+
+static void dissect_Name_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509if_Name(FALSE, tvb, 0, pinfo, tree, hf_x509if_Name_PDU);
+}
+static void dissect_DistinguishedName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509if_DistinguishedName(FALSE, tvb, 0, pinfo, tree, hf_x509if_DistinguishedName_PDU);
+}
+
/*--- End of included file: packet-x509if-fn.c ---*/
+const char * x509if_get_last_dn()
+{
+ return last_dn;
+}
/*--- proto_register_x509if ----------------------------------------------*/
void proto_register_x509if(void) {
@@ -2033,10 +2176,21 @@ void proto_register_x509if(void) {
{ &hf_x509if_object_identifier_id,
{ "Id", "x509if.id", FT_STRING, BASE_NONE, NULL, 0,
"Object identifier Id", HFILL }},
+ { &hf_x509if_any_string,
+ { "AnyString", "x509if.any.String", FT_BYTES, BASE_HEX,
+ NULL, 0, "This is any String", HFILL }},
/*--- Included file: packet-x509if-hfarr.c ---*/
+ { &hf_x509if_Name_PDU,
+ { "Name", "x509if.Name",
+ FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
+ "Name", HFILL }},
+ { &hf_x509if_DistinguishedName_PDU,
+ { "DistinguishedName", "x509if.DistinguishedName",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "DistinguishedName", HFILL }},
{ &hf_x509if_type,
{ "type", "x509if.type",
FT_STRING, BASE_NONE, NULL, 0,
@@ -2689,5 +2843,6 @@ void proto_register_x509if(void) {
/*--- proto_reg_handoff_x509if -------------------------------------------*/
void proto_reg_handoff_x509if(void) {
+
}
diff --git a/epan/dissectors/packet-x509if.h b/epan/dissectors/packet-x509if.h
index 044fa42425..d5b0920f96 100644
--- a/epan/dissectors/packet-x509if.h
+++ b/epan/dissectors/packet-x509if.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x509if.h */
+/* .\packet-x509if.h */
/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
/* Input file: packet-x509if-template.h */
@@ -43,6 +43,7 @@ extern const value_string x509if_ImposedSubset_vals[];
extern const value_string x509if_ContextCombination_vals[];
extern const value_string x509if_AttributeCombination_vals[];
extern const value_string x509if_OutputValues_vals[];
+int dissect_x509if_AttributeValue(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
int dissect_x509if_Attribute(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
int dissect_x509if_AttributeType(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
int dissect_x509if_Context(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
@@ -86,5 +87,7 @@ int dissect_x509if_MRSubstitution(gboolean implicit_tag, tvbuff_t *tvb, int offs
/*--- End of included file: packet-x509if-exp.h ---*/
+extern const char * x509if_get_last_dn();
+
#endif /* PACKET_X509IF_H */
diff --git a/epan/dissectors/packet-x509sat.c b/epan/dissectors/packet-x509sat.c
index 52bbf2cd96..133792b761 100644
--- a/epan/dissectors/packet-x509sat.c
+++ b/epan/dissectors/packet-x509sat.c
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x509sat.c */
+/* .\packet-x509sat.c */
/* ../../tools/asn2eth.py -X -b -e -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
/* Input file: packet-x509sat-template.c */
@@ -55,9 +55,26 @@ int proto_x509sat = -1;
/*--- Included file: packet-x509sat-hf.c ---*/
static int hf_x509sat_DirectoryString_PDU = -1; /* DirectoryString */
+static int hf_x509sat_UniqueIdentifier_PDU = -1; /* UniqueIdentifier */
static int hf_x509sat_CountryName_PDU = -1; /* CountryName */
+static int hf_x509sat_Guide_PDU = -1; /* Guide */
+static int hf_x509sat_Criteria_PDU = -1; /* Criteria */
+static int hf_x509sat_EnhancedGuide_PDU = -1; /* EnhancedGuide */
+static int hf_x509sat_PostalAddress_PDU = -1; /* PostalAddress */
static int hf_x509sat_TelephoneNumber_PDU = -1; /* TelephoneNumber */
static int hf_x509sat_TelexNumber_PDU = -1; /* TelexNumber */
+static int hf_x509sat_FacsimileTelephoneNumber_PDU = -1; /* FacsimileTelephoneNumber */
+static int hf_x509sat_X121Address_PDU = -1; /* X121Address */
+static int hf_x509sat_InternationalISDNNumber_PDU = -1; /* InternationalISDNNumber */
+static int hf_x509sat_DestinationIndicator_PDU = -1; /* DestinationIndicator */
+static int hf_x509sat_PreferredDeliveryMethod_PDU = -1; /* PreferredDeliveryMethod */
+static int hf_x509sat_PresentationAddress_PDU = -1; /* PresentationAddress */
+static int hf_x509sat_NameAndOptionalUID_PDU = -1; /* NameAndOptionalUID */
+static int hf_x509sat_CaseIgnoreListMatch_PDU = -1; /* CaseIgnoreListMatch */
+static int hf_x509sat_DayTimeBand_PDU = -1; /* DayTimeBand */
+static int hf_x509sat_DayTime_PDU = -1; /* DayTime */
+static int hf_x509sat_objectClass = -1; /* OBJECT_IDENTIFIER */
+static int hf_x509sat_criteria = -1; /* Criteria */
static int hf_x509sat_type = -1; /* CriteriaItem */
static int hf_x509sat_and = -1; /* SET_OF_Criteria */
static int hf_x509sat_and_item = -1; /* Criteria */
@@ -69,8 +86,6 @@ static int hf_x509sat_substrings = -1; /* AttributeType */
static int hf_x509sat_greaterOrEqual = -1; /* AttributeType */
static int hf_x509sat_lessOrEqual = -1; /* AttributeType */
static int hf_x509sat_approximateMatch = -1; /* AttributeType */
-static int hf_x509sat_objectClass = -1; /* OBJECT_IDENTIFIER */
-static int hf_x509sat_criteria = -1; /* Criteria */
static int hf_x509sat_subset = -1; /* T_subset */
static int hf_x509sat_PostalAddress_item = -1; /* DirectoryString */
static int hf_x509sat_telexNumber = -1; /* PrintableString */
@@ -187,6 +202,7 @@ static int hf_x509sat_T_bitNamedDays_saturday = -1;
/*--- Included file: packet-x509sat-ett.c ---*/
+static gint ett_x509sat_Guide = -1;
static gint ett_x509sat_Criteria = -1;
static gint ett_x509sat_SET_OF_Criteria = -1;
static gint ett_x509sat_CriteriaItem = -1;
@@ -245,6 +261,9 @@ static gint ett_x509sat_LocaleContextSyntax = -1;
/* Criteria -> Criteria */
int dissect_x509sat_Criteria(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+static int dissect_criteria(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509sat_Criteria(FALSE, tvb, offset, pinfo, tree, hf_x509sat_criteria);
+}
static int dissect_and_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509sat_Criteria(FALSE, tvb, offset, pinfo, tree, hf_x509sat_and_item);
}
@@ -254,9 +273,6 @@ static int dissect_or_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
static int dissect_not(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
return dissect_x509sat_Criteria(FALSE, tvb, offset, pinfo, tree, hf_x509sat_not);
}
-static int dissect_criteria(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509sat_Criteria(FALSE, tvb, offset, pinfo, tree, hf_x509sat_criteria);
-}
/*--- Fields for imported types ---*/
@@ -343,6 +359,27 @@ dissect_x509sat_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset
}
+
+static int
+dissect_x509sat_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
+
+ return offset;
+}
+static int dissect_objectClass(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_objectClass);
+}
+static int dissect_profiles_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_profiles_item);
+}
+static int dissect_matchingRuleUsed(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_matchingRuleUsed);
+}
+static int dissect_localeID1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+ return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_localeID1);
+}
+
+
static const value_string x509sat_CriteriaItem_vals[] = {
{ 0, "equality" },
{ 1, "substrings" },
@@ -419,26 +456,19 @@ dissect_x509sat_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, p
}
+static const ber_sequence_t Guide_set[] = {
+ { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_objectClass },
+ { BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_criteria },
+ { 0, 0, 0, NULL }
+};
static int
-dissect_x509sat_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
- offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index,
- NULL);
+dissect_x509sat_Guide(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+ offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+ Guide_set, hf_index, ett_x509sat_Guide);
return offset;
}
-static int dissect_objectClass(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_objectClass);
-}
-static int dissect_profiles_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_profiles_item);
-}
-static int dissect_matchingRuleUsed(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_matchingRuleUsed);
-}
-static int dissect_localeID1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
- return dissect_x509sat_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509sat_localeID1);
-}
static const value_string x509sat_T_subset_vals[] = {
@@ -1559,15 +1589,60 @@ dissect_x509sat_LocaleContextSyntax(gboolean implicit_tag _U_, tvbuff_t *tvb, in
static void dissect_DirectoryString_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_x509sat_DirectoryString(FALSE, tvb, 0, pinfo, tree, hf_x509sat_DirectoryString_PDU);
}
+static void dissect_UniqueIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_UniqueIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509sat_UniqueIdentifier_PDU);
+}
static void dissect_CountryName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_x509sat_CountryName(FALSE, tvb, 0, pinfo, tree, hf_x509sat_CountryName_PDU);
}
+static void dissect_Guide_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_Guide(FALSE, tvb, 0, pinfo, tree, hf_x509sat_Guide_PDU);
+}
+static void dissect_Criteria_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_Criteria(FALSE, tvb, 0, pinfo, tree, hf_x509sat_Criteria_PDU);
+}
+static void dissect_EnhancedGuide_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_EnhancedGuide(FALSE, tvb, 0, pinfo, tree, hf_x509sat_EnhancedGuide_PDU);
+}
+static void dissect_PostalAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_PostalAddress(FALSE, tvb, 0, pinfo, tree, hf_x509sat_PostalAddress_PDU);
+}
static void dissect_TelephoneNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_x509sat_TelephoneNumber(FALSE, tvb, 0, pinfo, tree, hf_x509sat_TelephoneNumber_PDU);
}
static void dissect_TelexNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
dissect_x509sat_TelexNumber(FALSE, tvb, 0, pinfo, tree, hf_x509sat_TelexNumber_PDU);
}
+static void dissect_FacsimileTelephoneNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_FacsimileTelephoneNumber(FALSE, tvb, 0, pinfo, tree, hf_x509sat_FacsimileTelephoneNumber_PDU);
+}
+static void dissect_X121Address_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_X121Address(FALSE, tvb, 0, pinfo, tree, hf_x509sat_X121Address_PDU);
+}
+static void dissect_InternationalISDNNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_InternationalISDNNumber(FALSE, tvb, 0, pinfo, tree, hf_x509sat_InternationalISDNNumber_PDU);
+}
+static void dissect_DestinationIndicator_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_DestinationIndicator(FALSE, tvb, 0, pinfo, tree, hf_x509sat_DestinationIndicator_PDU);
+}
+static void dissect_PreferredDeliveryMethod_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_PreferredDeliveryMethod(FALSE, tvb, 0, pinfo, tree, hf_x509sat_PreferredDeliveryMethod_PDU);
+}
+static void dissect_PresentationAddress_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_PresentationAddress(FALSE, tvb, 0, pinfo, tree, hf_x509sat_PresentationAddress_PDU);
+}
+static void dissect_NameAndOptionalUID_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_NameAndOptionalUID(FALSE, tvb, 0, pinfo, tree, hf_x509sat_NameAndOptionalUID_PDU);
+}
+static void dissect_CaseIgnoreListMatch_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_CaseIgnoreListMatch(FALSE, tvb, 0, pinfo, tree, hf_x509sat_CaseIgnoreListMatch_PDU);
+}
+static void dissect_DayTimeBand_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_DayTimeBand(FALSE, tvb, 0, pinfo, tree, hf_x509sat_DayTimeBand_PDU);
+}
+static void dissect_DayTime_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+ dissect_x509sat_DayTime(FALSE, tvb, 0, pinfo, tree, hf_x509sat_DayTime_PDU);
+}
/*--- End of included file: packet-x509sat-fn.c ---*/
@@ -1586,10 +1661,30 @@ void proto_register_x509sat(void) {
{ "DirectoryString", "x509sat.DirectoryString",
FT_STRING, BASE_NONE, NULL, 0,
"DirectoryString", HFILL }},
+ { &hf_x509sat_UniqueIdentifier_PDU,
+ { "UniqueIdentifier", "x509sat.UniqueIdentifier",
+ FT_BYTES, BASE_HEX, NULL, 0,
+ "UniqueIdentifier", HFILL }},
{ &hf_x509sat_CountryName_PDU,
{ "CountryName", "x509sat.CountryName",
FT_STRING, BASE_NONE, NULL, 0,
"CountryName", HFILL }},
+ { &hf_x509sat_Guide_PDU,
+ { "Guide", "x509sat.Guide",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "Guide", HFILL }},
+ { &hf_x509sat_Criteria_PDU,
+ { "Criteria", "x509sat.Criteria",
+ FT_UINT32, BASE_DEC, VALS(x509sat_Criteria_vals), 0,
+ "Criteria", HFILL }},
+ { &hf_x509sat_EnhancedGuide_PDU,
+ { "EnhancedGuide", "x509sat.EnhancedGuide",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "EnhancedGuide", HFILL }},
+ { &hf_x509sat_PostalAddress_PDU,
+ { "PostalAddress", "x509sat.PostalAddress",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PostalAddress", HFILL }},
{ &hf_x509sat_TelephoneNumber_PDU,
{ "TelephoneNumber", "x509sat.TelephoneNumber",
FT_STRING, BASE_NONE, NULL, 0,
@@ -1598,6 +1693,54 @@ void proto_register_x509sat(void) {
{ "TelexNumber", "x509sat.TelexNumber",
FT_NONE, BASE_NONE, NULL, 0,
"TelexNumber", HFILL }},
+ { &hf_x509sat_FacsimileTelephoneNumber_PDU,
+ { "FacsimileTelephoneNumber", "x509sat.FacsimileTelephoneNumber",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "FacsimileTelephoneNumber", HFILL }},
+ { &hf_x509sat_X121Address_PDU,
+ { "X121Address", "x509sat.X121Address",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "X121Address", HFILL }},
+ { &hf_x509sat_InternationalISDNNumber_PDU,
+ { "InternationalISDNNumber", "x509sat.InternationalISDNNumber",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "InternationalISDNNumber", HFILL }},
+ { &hf_x509sat_DestinationIndicator_PDU,
+ { "DestinationIndicator", "x509sat.DestinationIndicator",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "DestinationIndicator", HFILL }},
+ { &hf_x509sat_PreferredDeliveryMethod_PDU,
+ { "PreferredDeliveryMethod", "x509sat.PreferredDeliveryMethod",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "PreferredDeliveryMethod", HFILL }},
+ { &hf_x509sat_PresentationAddress_PDU,
+ { "PresentationAddress", "x509sat.PresentationAddress",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "PresentationAddress", HFILL }},
+ { &hf_x509sat_NameAndOptionalUID_PDU,
+ { "NameAndOptionalUID", "x509sat.NameAndOptionalUID",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "NameAndOptionalUID", HFILL }},
+ { &hf_x509sat_CaseIgnoreListMatch_PDU,
+ { "CaseIgnoreListMatch", "x509sat.CaseIgnoreListMatch",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "CaseIgnoreListMatch", HFILL }},
+ { &hf_x509sat_DayTimeBand_PDU,
+ { "DayTimeBand", "x509sat.DayTimeBand",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DayTimeBand", HFILL }},
+ { &hf_x509sat_DayTime_PDU,
+ { "DayTime", "x509sat.DayTime",
+ FT_NONE, BASE_NONE, NULL, 0,
+ "DayTime", HFILL }},
+ { &hf_x509sat_objectClass,
+ { "objectClass", "x509sat.objectClass",
+ FT_STRING, BASE_NONE, NULL, 0,
+ "", HFILL }},
+ { &hf_x509sat_criteria,
+ { "criteria", "x509sat.criteria",
+ FT_UINT32, BASE_DEC, VALS(x509sat_Criteria_vals), 0,
+ "", HFILL }},
{ &hf_x509sat_type,
{ "type", "x509sat.type",
FT_UINT32, BASE_DEC, VALS(x509sat_CriteriaItem_vals), 0,
@@ -1642,14 +1785,6 @@ void proto_register_x509sat(void) {
{ "approximateMatch", "x509sat.approximateMatch",
FT_STRING, BASE_NONE, NULL, 0,
"CriteriaItem/approximateMatch", HFILL }},
- { &hf_x509sat_objectClass,
- { "objectClass", "x509sat.objectClass",
- FT_STRING, BASE_NONE, NULL, 0,
- "EnhancedGuide/objectClass", HFILL }},
- { &hf_x509sat_criteria,
- { "criteria", "x509sat.criteria",
- FT_UINT32, BASE_DEC, VALS(x509sat_Criteria_vals), 0,
- "EnhancedGuide/criteria", HFILL }},
{ &hf_x509sat_subset,
{ "subset", "x509sat.subset",
FT_INT32, BASE_DEC, VALS(x509sat_T_subset_vals), 0,
@@ -2088,6 +2223,7 @@ void proto_register_x509sat(void) {
/*--- Included file: packet-x509sat-ettarr.c ---*/
+ &ett_x509sat_Guide,
&ett_x509sat_Criteria,
&ett_x509sat_SET_OF_Criteria,
&ett_x509sat_CriteriaItem,
diff --git a/epan/dissectors/packet-x509sat.h b/epan/dissectors/packet-x509sat.h
index e2fc9b5d5a..461ae474c2 100644
--- a/epan/dissectors/packet-x509sat.h
+++ b/epan/dissectors/packet-x509sat.h
@@ -1,6 +1,6 @@
/* Do not modify this file. */
/* It is created automatically by the ASN.1 to Ethereal dissector compiler */
-/* ./packet-x509sat.h */
+/* .\packet-x509sat.h */
/* ../../tools/asn2eth.py -X -b -e -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
/* Input file: packet-x509sat-template.h */