summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/ess
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/asn1/ess')
-rw-r--r--epan/dissectors/asn1/ess/CMakeLists.txt41
-rw-r--r--epan/dissectors/asn1/ess/ExtendedSecurityServices.asn297
-rw-r--r--epan/dissectors/asn1/ess/ess.cnf105
-rw-r--r--epan/dissectors/asn1/ess/packet-ess-template.c193
-rw-r--r--epan/dissectors/asn1/ess/packet-ess-template.h19
5 files changed, 655 insertions, 0 deletions
diff --git a/epan/dissectors/asn1/ess/CMakeLists.txt b/epan/dissectors/asn1/ess/CMakeLists.txt
new file mode 100644
index 00000000..e70581ae
--- /dev/null
+++ b/epan/dissectors/asn1/ess/CMakeLists.txt
@@ -0,0 +1,41 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+set( PROTOCOL_NAME ess )
+
+set( PROTO_OPT )
+
+set( EXT_ASN_FILE_LIST
+)
+
+set( ASN_FILE_LIST
+ ExtendedSecurityServices.asn
+)
+
+set( EXTRA_DIST
+ ${ASN_FILE_LIST}
+ packet-${PROTOCOL_NAME}-template.c
+ packet-${PROTOCOL_NAME}-template.h
+ ${PROTOCOL_NAME}.cnf
+)
+
+set( SRC_FILES
+ ${EXTRA_DIST}
+ ${EXT_ASN_FILE_LIST}
+)
+
+set( A2W_FLAGS -b -k -C )
+
+set( EXTRA_CNF
+ "${CMAKE_CURRENT_BINARY_DIR}/../cms/cms-exp.cnf"
+ "${CMAKE_CURRENT_BINARY_DIR}/../x509af/x509af-exp.cnf"
+ "${CMAKE_CURRENT_BINARY_DIR}/../x509ce/x509ce-exp.cnf"
+)
+
+ASN2WRS()
diff --git a/epan/dissectors/asn1/ess/ExtendedSecurityServices.asn b/epan/dissectors/asn1/ess/ExtendedSecurityServices.asn
new file mode 100644
index 00000000..a4845351
--- /dev/null
+++ b/epan/dissectors/asn1/ess/ExtendedSecurityServices.asn
@@ -0,0 +1,297 @@
+-- ExtendedSecurityServices as defined in RFC5035
+--
+-- The ASN definition has been modified to suit the Wireshark asn2wrs compiler
+--
+--
+--
+-- The original ASN.1 definition from RFC5035 contains the following
+-- copyright statement:
+--
+-- Full Copyright Statement
+--
+-- Copyright (C) The IETF Trust (2007).
+--
+-- This document is subject to the rights, licenses and restrictions
+-- contained in BCP 78, and except as set forth therein, the authors
+-- retain all their rights.
+--
+-- This document and the information contained herein are provided on an
+-- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+-- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
+-- THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
+-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
+-- THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+-- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+--
+
+ExtendedSecurityServices
+ { iso(1) member-body(2) us(840) rsadsi(113549)
+ pkcs(1) pkcs-9(9) smime(16) modules(0) id-mod-ess-2006(30) }
+
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+IMPORTS
+
+-- Cryptographic Message Syntax (CMS)
+ ContentType, IssuerAndSerialNumber
+ FROM CryptographicMessageSyntax {iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16)
+ modules(0) cms-2004(24)}
+
+-- X.509
+ AlgorithmIdentifier, CertificateSerialNumber
+ FROM AuthenticationFramework
+ {joint-iso-itu-t ds(5) module(1) authenticationFramework(7) 3}
+
+ SubjectKeyIdentifier, PolicyInformation, GeneralNames
+ FROM CertificateExtensions
+ {joint-iso-ccitt ds(5) module(1) certificateExtensions(26) 0};
+
+
+-- Extended Security Services
+
+-- The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1
+-- constructs in this module. A valid ASN.1 SEQUENCE can have zero or
+-- more entries. The SIZE (1..MAX) construct constrains the SEQUENCE to
+-- have at least one entry. MAX indicates the upper bound is unspecified.
+-- Implementations are free to choose an upper bound that suits their
+-- environment.
+
+-- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
+
+-- The contents are formatted as described in [UTF8]
+
+-- Section 2.7
+
+ReceiptRequest ::= SEQUENCE {
+ signedContentIdentifier ContentIdentifier,
+ receiptsFrom ReceiptsFrom,
+ receiptsTo SEQUENCE SIZE (1..ub-receiptsTo) OF GeneralNames
+}
+
+ub-receiptsTo INTEGER ::= 16
+
+id-aa-receiptRequest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 1}
+
+ContentIdentifier ::= OCTET STRING
+
+id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 7}
+
+ReceiptsFrom ::= CHOICE {
+ allOrFirstTier [0] AllOrFirstTier, -- formerly "allOrNone [0]AllOrNone"
+ receiptList [1] SEQUENCE OF GeneralNames
+}
+
+AllOrFirstTier ::= INTEGER { -- Formerly AllOrNone
+ allReceipts (0),
+ firstTierRecipients (1)
+}
+
+-- Section 2.8
+
+Receipt ::= SEQUENCE {
+ version ESSVersion,
+ contentType ContentType,
+ signedContentIdentifier ContentIdentifier,
+ originatorSignatureValue OCTET STRING
+}
+
+id-ct-receipt OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
+ rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-ct(1) 1}
+
+ESSVersion ::= INTEGER { v1(1) }
+
+-- Section 2.9
+
+ContentHints ::= SEQUENCE {
+ contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
+ contentType ContentType
+}
+
+id-aa-contentHint OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
+ rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 4}
+
+-- Section 2.10
+
+MsgSigDigest ::= OCTET STRING
+
+id-aa-msgSigDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 5}
+
+-- Section 2.11
+
+ContentReference ::= SEQUENCE {
+ contentType ContentType,
+ signedContentIdentifier ContentIdentifier,
+ originatorSignatureValue OCTET STRING
+}
+
+id-aa-contentReference OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 10 }
+
+-- Section 3.2
+
+ESSSecurityLabel ::= SET {
+ security-policy-identifier SecurityPolicyIdentifier,
+ security-classification SecurityClassification OPTIONAL,
+ privacy-mark ESSPrivacyMark OPTIONAL,
+ security-categories SecurityCategories OPTIONAL
+}
+
+ id-aa-securityLabel OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 2}
+
+SecurityPolicyIdentifier ::= OBJECT IDENTIFIER
+
+SecurityClassification ::= INTEGER {
+ unmarked (0),
+ unclassified (1),
+ restricted (2),
+ confidential (3),
+ secret (4),
+ top-secret (5)
+}(0..ub-integer-options)
+
+ub-integer-options INTEGER ::= 256
+
+ESSPrivacyMark ::= CHOICE {
+ pString PrintableString (SIZE (1..ub-privacy-mark-length)),
+ utf8String UTF8String (SIZE (1..MAX))
+}
+
+ub-privacy-mark-length INTEGER ::= 128
+
+SecurityCategories ::= SET SIZE (1..ub-security-categories) OF SecurityCategory
+
+ub-security-categories INTEGER ::= 64
+
+SecurityCategory ::= SEQUENCE {
+ type [0] OBJECT IDENTIFIER,
+ value [1] ANY DEFINED BY type
+}
+
+--Note: The aforementioned SecurityCategory syntax produces identical
+--hex encodings as the following SecurityCategory syntax that is
+--documented in the X.411 specification:
+--
+--SecurityCategory ::= SEQUENCE {
+-- type [0] SECURITY-CATEGORY,
+-- value [1] ANY DEFINED BY type }
+--
+--SECURITY-CATEGORY MACRO ::=
+--BEGIN
+--TYPE NOTATION ::= type | empty
+--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
+
+EquivalentLabels ::= SEQUENCE OF ESSSecurityLabel
+
+id-aa-equivalentLabels OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 9}
+
+-- Section 4.4
+
+MLExpansionHistory ::= SEQUENCE
+ SIZE (1..ub-ml-expansion-history) OF MLData
+
+id-aa-mlExpandHistory OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+ us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 3}
+
+ub-ml-expansion-history INTEGER ::= 64
+
+MLData ::= SEQUENCE {
+ mailListIdentifier EntityIdentifier,
+ expansionTime GeneralizedTime,
+ mlReceiptPolicy MLReceiptPolicy OPTIONAL
+}
+
+EntityIdentifier ::= CHOICE {
+ issuerAndSerialNumber IssuerAndSerialNumber,
+ subjectKeyIdentifier SubjectKeyIdentifier
+}
+
+MLReceiptPolicy ::= CHOICE {
+ none [0] NULL,
+ insteadOf [1] SEQUENCE SIZE (1..MAX) OF GeneralNames,
+ inAdditionTo [2] SEQUENCE SIZE (1..MAX) OF GeneralNames
+}
+
+-- Section 5.4
+
+SigningCertificate ::= SEQUENCE {
+ certs SEQUENCE OF ESSCertID,
+ policies SEQUENCE OF PolicyInformation OPTIONAL
+}
+
+id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1)
+ member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
+ smime(16) id-aa(2) 12 }
+
+SigningCertificateV2 ::= SEQUENCE {
+ certs SEQUENCE OF ESSCertIDv2,
+ policies SEQUENCE OF PolicyInformation OPTIONAL
+}
+
+id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1)
+ member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
+ smime(16) id-aa(2) 47 }
+
+id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2)
+ country(16) us(840) organization(1) gov(101)
+ csor(3) nistalgorithm(4) hashalgs(2) 1 }
+
+ESSCertIDv2 ::= SEQUENCE {
+ hashAlgorithm AlgorithmIdentifier
+ DEFAULT {algorithm id-sha256},
+ certHash Hash,
+ issuerSerial IssuerSerial OPTIONAL
+}
+
+ESSCertID ::= SEQUENCE {
+ certHash Hash,
+ issuerSerial IssuerSerial OPTIONAL
+}
+
+Hash ::= OCTET STRING -- SHA1 hash of entire certificate
+
+IssuerSerial ::= SEQUENCE {
+ issuer GeneralNames,
+ serialNumber CertificateSerialNumber
+}
+
+END -- of ExtendedSecurityServices
+
diff --git a/epan/dissectors/asn1/ess/ess.cnf b/epan/dissectors/asn1/ess/ess.cnf
new file mode 100644
index 00000000..85d040da
--- /dev/null
+++ b/epan/dissectors/asn1/ess/ess.cnf
@@ -0,0 +1,105 @@
+# ess.cnf
+# ExtendedSecurityServices conformation file
+
+#.IMPORT ../x509af/x509af-exp.cnf
+#.IMPORT ../x509ce/x509ce-exp.cnf
+#.IMPORT ../cms/cms-exp.cnf
+
+#.EXPORTS
+ESSSecurityLabel_PDU
+
+#.PDU
+
+#.REGISTER
+ReceiptRequest B "1.2.840.113549.1.9.16.2.1" "id-aa-receiptRequest"
+ContentIdentifier B "1.2.840.113549.1.9.16.2.7" "id-aa-contentIdentifier"
+Receipt B "1.2.840.113549.1.9.16.1.1" "id-ct-receipt"
+ContentHints B "1.2.840.113549.1.9.16.2.4" "id-aa-contentHint"
+MsgSigDigest B "1.2.840.113549.1.9.16.2.5" "id-aa-msgSigDigest"
+ContentReference B "1.2.840.113549.1.9.16.2.10" "id-aa-contentReference"
+ESSSecurityLabel B "1.2.840.113549.1.9.16.2.2" "id-aa-securityLabel"
+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"
+SigningCertificateV2 B "1.2.840.113549.1.9.16.2.47" "id-aa-signingCertificateV2"
+
+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-permissiveAttributes"
+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
+
+#.TYPE_RENAME
+
+#.FIELD_RENAME
+SigningCertificateV2/certs certsV2
+RestrictiveTag/tagName restrictiveTagName
+RestrictiveTag/attributeFlags restrictiveAttributeFlags
+PermissiveTag/tagName permissiveTagName
+PermissiveTag/attributeFlags permissiveAttributeFlags
+InformativeTag/tagName informativeTagName
+FreeFormField/bitSetAttributes informativeAttributeFlags
+
+#.FN_PARS SecurityCategory/type
+ FN_VARIANT = _str HF_INDEX = hf_ess_SecurityCategory_type_OID VAL_PTR = &object_identifier_id
+
+#.FN_BODY SecurityCategory/value
+ offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree, NULL);
+
+#.FN_PARS RestrictiveTag/tagName
+ FN_VARIANT = _str VAL_PTR = &object_identifier_id
+
+#.FN_PARS EnumeratedTag/tagName
+ FN_VARIANT = _str VAL_PTR = &object_identifier_id
+
+#.FN_PARS PermissiveTag/tagName
+ FN_VARIANT = _str VAL_PTR = &object_identifier_id
+
+#.FN_PARS InformativeTag/tagName
+ FN_VARIANT = _str VAL_PTR = &object_identifier_id
+
+#.FN_PARS SecurityAttribute
+ VAL_PTR = &attribute
+
+#.FN_BODY SecurityAttribute
+ guint32 attribute;
+
+ %(DEFAULT_BODY)s
+ ess_dissect_attribute (attribute, actx);
+
+#.FN_PARS RestrictiveTag/attributeFlags
+ VAL_PTR = &attributes
+
+#.FN_BODY RestrictiveTag/attributeFlags
+ tvbuff_t *attributes;
+
+ %(DEFAULT_BODY)s
+ ess_dissect_attribute_flags (attributes, actx);
+
+#.FN_PARS PermissiveTag/attributeFlags
+ VAL_PTR = &attributes
+
+#.FN_BODY PermissiveTag/attributeFlags
+ tvbuff_t *attributes;
+
+ %(DEFAULT_BODY)s
+ ess_dissect_attribute_flags (attributes, actx);
+
+#.FN_PARS FreeFormField/bitSetAttributes
+ VAL_PTR = &attributes
+
+#.FN_BODY FreeFormField/bitSetAttributes
+ tvbuff_t *attributes;
+
+ %(DEFAULT_BODY)s
+ ess_dissect_attribute_flags (attributes, actx);
+
+#.FN_BODY Receipt
+ col_set_str(actx->pinfo->cinfo, COL_PROTOCOL, "ESS");
+ col_set_str(actx->pinfo->cinfo, COL_INFO, "Signed Receipt");
+ %(DEFAULT_BODY)s
+
+#.END
+
diff --git a/epan/dissectors/asn1/ess/packet-ess-template.c b/epan/dissectors/asn1/ess/packet-ess-template.c
new file mode 100644
index 00000000..c8d579f9
--- /dev/null
+++ b/epan/dissectors/asn1/ess/packet-ess-template.c
@@ -0,0 +1,193 @@
+/* packet-ess.c
+ * Routines for RFC 2634 and RFC 5035 Extended Security Services packet
+ * dissection
+ * Ronnie Sahlberg 2004
+ * Stig Bjorlykke 2010
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "config.h"
+
+#include <epan/packet.h>
+#include <epan/asn1.h>
+#include <epan/prefs.h>
+#include <epan/uat.h>
+
+#include "packet-ber.h"
+#include "packet-ess.h"
+#include "packet-cms.h"
+#include "packet-x509ce.h"
+#include "packet-x509af.h"
+
+#define PNAME "Extended Security Services"
+#define PSNAME "ESS"
+#define PFNAME "ess"
+
+void proto_register_ess(void);
+void proto_reg_handoff_ess(void);
+
+typedef struct _ess_category_attributes_t {
+ char *oid;
+ guint lacv;
+ char *name;
+} ess_category_attributes_t;
+
+static ess_category_attributes_t *ess_category_attributes;
+static guint num_ess_category_attributes;
+
+/* Initialize the protocol and registered fields */
+static int proto_ess = -1;
+static int hf_ess_SecurityCategory_type_OID = -1;
+static int hf_ess_Category_attribute = -1;
+
+static gint ett_Category_attributes = -1;
+
+#include "packet-ess-hf.c"
+
+#include "packet-ess-val.h"
+
+/* Initialize the subtree pointers */
+#include "packet-ess-ett.c"
+
+static const char *object_identifier_id;
+
+UAT_CSTRING_CB_DEF(ess_category_attributes, oid, ess_category_attributes_t)
+UAT_DEC_CB_DEF(ess_category_attributes, lacv, ess_category_attributes_t)
+UAT_CSTRING_CB_DEF(ess_category_attributes, name, ess_category_attributes_t)
+
+static void *
+ess_copy_cb(void *dest, const void *orig, size_t len _U_)
+{
+ ess_category_attributes_t *u = (ess_category_attributes_t *)dest;
+ const ess_category_attributes_t *o = (const ess_category_attributes_t *)orig;
+
+ u->oid = g_strdup(o->oid);
+ u->lacv = o->lacv;
+ u->name = g_strdup(o->name);
+
+ return dest;
+}
+
+static void
+ess_free_cb(void *r)
+{
+ ess_category_attributes_t *u = (ess_category_attributes_t *)r;
+
+ g_free(u->oid);
+ g_free(u->name);
+}
+
+static void
+ess_dissect_attribute (guint32 value, asn1_ctx_t *actx)
+{
+ guint i;
+
+ for (i = 0; i < num_ess_category_attributes; i++) {
+ ess_category_attributes_t *u = &(ess_category_attributes[i]);
+
+ if ((strcmp (u->oid, object_identifier_id) == 0) &&
+ (u->lacv == value))
+ {
+ proto_item_append_text (actx->created_item, " (%s)", u->name);
+ break;
+ }
+ }
+}
+
+static void
+ess_dissect_attribute_flags (tvbuff_t *tvb, asn1_ctx_t *actx)
+{
+ proto_tree *tree;
+ guint8 *value;
+ guint i;
+
+ tree = proto_item_add_subtree (actx->created_item, ett_Category_attributes);
+ value = (guint8 *)tvb_memdup (actx->pinfo->pool, tvb, 0, tvb_captured_length (tvb));
+
+ for (i = 0; i < num_ess_category_attributes; i++) {
+ ess_category_attributes_t *u = &(ess_category_attributes[i]);
+
+ if ((strcmp (u->oid, object_identifier_id) == 0) &&
+ ((u->lacv / 8) < tvb_captured_length (tvb)) &&
+ (value[u->lacv / 8] & (1U << (7 - (u->lacv % 8)))))
+ {
+ proto_tree_add_string_format (tree, hf_ess_Category_attribute, tvb,
+ u->lacv / 8, 1, u->name,
+ "%s (%d)", u->name, u->lacv);
+ }
+ }
+}
+
+#include "packet-ess-fn.c"
+
+/*--- proto_register_ess ----------------------------------------------*/
+void proto_register_ess(void) {
+
+ /* List of fields */
+ static hf_register_info hf[] = {
+ { &hf_ess_SecurityCategory_type_OID,
+ { "type", "ess.type_OID", FT_STRING, BASE_NONE, NULL, 0,
+ "Type of Security Category", HFILL }},
+ { &hf_ess_Category_attribute,
+ { "Attribute", "ess.attribute", FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+#include "packet-ess-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_Category_attributes,
+#include "packet-ess-ettarr.c"
+ };
+
+ static uat_field_t attributes_flds[] = {
+ UAT_FLD_CSTRING(ess_category_attributes,oid, "Tag Set", "Category Tag Set (Object Identifier)"),
+ UAT_FLD_DEC(ess_category_attributes,lacv, "Value", "Label And Cert Value"),
+ UAT_FLD_CSTRING(ess_category_attributes,name, "Name", "Category Name"),
+ UAT_END_FIELDS
+ };
+
+ uat_t *attributes_uat = uat_new("ESS Category Attributes",
+ sizeof(ess_category_attributes_t),
+ "ess_category_attributes",
+ TRUE,
+ &ess_category_attributes,
+ &num_ess_category_attributes,
+ UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
+ "ChEssCategoryAttributes",
+ ess_copy_cb,
+ NULL,
+ ess_free_cb,
+ NULL,
+ NULL,
+ attributes_flds);
+
+ static module_t *ess_module;
+
+ /* Register protocol */
+ proto_ess = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_ess, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ ess_module = prefs_register_protocol(proto_ess, NULL);
+
+ prefs_register_uat_preference(ess_module, "attributes_table",
+ "ESS Category Attributes",
+ "ESS category attributes translation table",
+ attributes_uat);
+
+}
+
+
+/*--- proto_reg_handoff_ess -------------------------------------------*/
+void proto_reg_handoff_ess(void) {
+#include "packet-ess-dis-tab.c"
+}
+
diff --git a/epan/dissectors/asn1/ess/packet-ess-template.h b/epan/dissectors/asn1/ess/packet-ess-template.h
new file mode 100644
index 00000000..1b78c9ea
--- /dev/null
+++ b/epan/dissectors/asn1/ess/packet-ess-template.h
@@ -0,0 +1,19 @@
+/* packet-ess.h
+ * Routines for RFC5035 Extended Security Services packet dissection
+ * Ronnie Sahlberg 2004
+ * Stig Bjorlykke 2010
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef PACKET_ESS_H
+#define PACKET_ESS_H
+
+#include "packet-ess-exp.h"
+
+#endif /* PACKET_ESS_H */
+