Get rid of dissect_ber_boolean_value() and change the signature of
[obnox/wireshark/wip.git] / epan / dissectors / packet-x509if.c
index 8670f141712d64a593fe4b35d69b7cbef81d5e9c..798ea8a475afa3b3e88668348d97b4cf358062cc 100644 (file)
@@ -1,18 +1,19 @@
 /* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* ./packet-x509if.c                                                          */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
+/* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
+/* packet-x509if.c                                                            */
+/* ../../tools/asn2wrs.py -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
 
 /* Input file: packet-x509if-template.c */
 
+#line 1 "packet-x509if-template.c"
 /* packet-x509if.c
  * Routines for X.509 Information Framework packet dissection
  *  Ronnie Sahlberg 2004
  *
  * $Id$
  *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
  * This program is free software; you can redistribute it and/or
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
+#include <epan/oids.h>
+#include <epan/asn1.h>
 
 #include <stdio.h>
 #include <string.h>
 
-#include "packet-x509if.h"
 #include "packet-ber.h"
+#include "packet-x509if.h"
 #include "packet-x509sat.h"
 #include <epan/emem.h>
 #include <epan/strutil.h>
@@ -57,7 +60,7 @@ static int hf_x509if_object_identifier_id = -1;
 static int hf_x509if_any_string = -1;
 
 /*--- Included file: packet-x509if-hf.c ---*/
-
+#line 1 "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 */
@@ -81,7 +84,7 @@ static int hf_x509if_ca_contextType = -1;         /* ContextId */
 static int hf_x509if_ca_contextValues = -1;       /* SET_OF_ContextValue */
 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_ata_assertedContexts_item = -1;  /* ContextAssertion */
 static int hf_x509if_rdnSequence = -1;            /* RDNSequence */
 static int hf_x509if_RDNSequence_item = -1;       /* RDNSequence_item */
 static int hf_x509if_RelativeDistinguishedName_item = -1;  /* RelativeDistinguishedName_item */
@@ -202,12 +205,12 @@ static int hf_x509if_AllowedSubset_oneLevel = -1;
 static int hf_x509if_AllowedSubset_wholeSubtree = -1;
 
 /*--- End of included file: packet-x509if-hf.c ---*/
-
+#line 54 "packet-x509if-template.c"
 
 /* Initialize the subtree pointers */
 
 /*--- Included file: packet-x509if-ett.c ---*/
-
+#line 1 "packet-x509if-ett.c"
 static gint ett_x509if_Attribute = -1;
 static gint ett_x509if_SET_OF_AttributeValue = -1;
 static gint ett_x509if_T_valuesWithContext = -1;
@@ -279,7 +282,7 @@ static gint ett_x509if_Mapping = -1;
 static gint ett_x509if_MRSubstitution = -1;
 
 /*--- End of included file: packet-x509if-ett.c ---*/
-
+#line 57 "packet-x509if-template.c"
 
 static const char *object_identifier_id;
 static proto_tree *top_of_dn = NULL;
@@ -295,84 +298,44 @@ static gboolean doing_dn = TRUE;
 static char *last_dn = NULL;
 static char *last_rdn = NULL;
 
+static int ava_hf_index;
+#define MAX_FMT_VALS   32
+static value_string fmt_vals[MAX_FMT_VALS];
+#define MAX_AVA_STR_LEN   64
+static char *last_ava = NULL;
 
-/*--- Included file: packet-x509if-fn.c ---*/
 
+/*--- Included file: packet-x509if-fn.c ---*/
+#line 1 "packet-x509if-fn.c"
 /*--- Cyclic dependencies ---*/
 
 /* Refinement -> Refinement/and -> Refinement */
 /* Refinement -> Refinement */
-int dissect_x509if_Refinement(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
-
-static int dissect_specificationFilter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_specificationFilter);
-}
-static int dissect_refinement_and_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_refinement_and_item);
-}
-static int dissect_refinement_or_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_refinement_or_item);
-}
-static int dissect_refinement_not(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_refinement_not);
-}
+int dissect_x509if_Refinement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
 
 /* ContextCombination -> ContextCombination/and -> ContextCombination */
 /* ContextCombination -> ContextCombination */
-int dissect_x509if_ContextCombination(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
-
-static int dissect_contextCombination(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextCombination);
-}
-static int dissect_contextcombination_and_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextcombination_and_item);
-}
-static int dissect_contextcombination_or_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextcombination_or_item);
-}
-static int dissect_contextcombination_not(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextcombination_not);
-}
+int dissect_x509if_ContextCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
 
 /* AttributeCombination -> AttributeCombination/and -> AttributeCombination */
 /* AttributeCombination -> AttributeCombination */
-int dissect_x509if_AttributeCombination(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_x509if_AttributeCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
 
-static int dissect_attributeCombination(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_attributeCombination);
-}
-static int dissect_and_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_and_item);
-}
-static int dissect_or_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_or_item);
-}
-static int dissect_not(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_not);
-}
-
-
-/*--- Fields for imported types ---*/
-
-static int dissect_name_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_DirectoryString(FALSE, tvb, offset, pinfo, tree, hf_x509if_name_item);
-}
-static int dissect_description(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_DirectoryString(FALSE, tvb, offset, pinfo, tree, hf_x509if_description);
-}
 
 
 
 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_) {
-  char *name;
+dissect_x509if_AttributeId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 137 "x509if.cnf"
+  const char *fmt; 
+  const char *name;
 
-    offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
+    offset = dissect_ber_object_identifier_str(implicit_tag, actx, 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);
+    name = oid_resolved_from_string(object_identifier_id);
     if(!name) name = object_identifier_id;    
 
     if(doing_dn) { /* append it to the RDN */
@@ -382,46 +345,47 @@ dissect_x509if_AttributeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
      /* append it to the tree */
      proto_item_append_text(tree, " (%s=", name);
     }
+
+    if((fmt = val_to_str(hf_index, fmt_vals, "")) && *fmt) {
+      /* we have a format */
+      last_ava = ep_alloc(MAX_AVA_STR_LEN); *last_ava = '\0';
+
+      g_snprintf(last_ava, MAX_AVA_STR_LEN, "%s %s", name, fmt);
+
+      proto_item_append_text(tree, " %s", last_ava);
+
+    }
   }
 
 
+
   return offset;
 }
-static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_type);
-}
-static int dissect_contextType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextType);
-}
-static int dissect_mandatory_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_mandatory_item);
-}
-static int dissect_optional_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_optional_item);
-}
-static int dissect_precluded_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_precluded_item);
-}
-static int dissect_attributeType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_attributeType);
-}
-static int dissect_restrictionType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_restrictionType);
-}
 
 
 
 int
-dissect_x509if_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_x509if_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 167 "x509if.cnf"
   int old_offset = offset;
   tvbuff_t     *out_tvb;
-  char *value = NULL;
-  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+  char         *value = NULL;
+  const char   *fmt; 
+  const char   *name = NULL;
+  const char    *orig_oid = object_identifier_id;
+
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
+
+  /* in dissecting the value we may have overridden the OID of the value - which is
+     a problem if there are multiple values */
+  object_identifier_id = orig_oid;
 
   /* try and dissect as a string */
-  dissect_ber_octet_string(FALSE, pinfo, NULL, tvb, old_offset, hf_x509if_any_string, &out_tvb);
+  dissect_ber_octet_string(FALSE, actx, NULL, tvb, old_offset, hf_x509if_any_string, &out_tvb);
   
+  /* should also try and dissect as an OID and integer */
+  /* of course, if I can look up the syntax .... */
+
   if(out_tvb) {
     /* it was a string - format it */
     value = tvb_format_text(out_tvb, 0, tvb_length(out_tvb));
@@ -433,169 +397,125 @@ dissect_x509if_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
       proto_item_append_text(tree, "%s)", value);
     }
 
+    if((fmt = val_to_str(ava_hf_index, fmt_vals, "")) && *fmt) {
+      /* we have a format */
+
+    if(!(name = oid_resolved_from_string(object_identifier_id)))
+      name = object_identifier_id;
+    g_snprintf(last_ava, MAX_AVA_STR_LEN, "%s %s %s", name, fmt, value);
+
+    proto_item_append_text(tree, " %s", last_ava);
+
+    }
   }
 
 
+
   return offset;
 }
-static int dissect_values_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_values_item);
-}
-static int dissect_contextValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextValues_item);
-}
-static int dissect_assertion(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_assertion);
-}
-static int dissect_atadv_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_atadv_value);
-}
-static int dissect_contextValue_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextValue_item);
-}
-static int dissect_restrictionValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_restrictionValue);
-}
-static int dissect_selectedValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_selectedValues_item);
-}
 
 
 
 static int
-dissect_x509if_ValuesWithContextValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset=call_ber_oid_callback("unknown", tvb, offset, pinfo, tree);
+dissect_x509if_ValuesWithContextValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 219 "x509if.cnf"
+  offset=call_ber_oid_callback("unknown", tvb, offset, actx->pinfo, tree);
+
 
 
   return offset;
 }
-static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ValuesWithContextValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_value);
-}
-static int dissect_distingAttrValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ValuesWithContextValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_distingAttrValue);
-}
 
 
 static const ber_sequence_t SET_OF_AttributeValue_set_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_values_item },
+  { &hf_x509if_values_item  , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeValue },
 };
 
 static int
-dissect_x509if_SET_OF_AttributeValue(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,
+dissect_x509if_SET_OF_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_AttributeValue_set_of, hf_index, ett_x509if_SET_OF_AttributeValue);
 
   return offset;
 }
-static int dissect_values(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_values);
-}
-static int dissect_contextValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextValues);
-}
 
 
 
 static int
-dissect_x509if_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
+dissect_x509if_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
-static int dissect_fallback(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_x509if_fallback);
-}
-static int dissect_primaryDistinguished(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_x509if_primaryDistinguished);
-}
-static int dissect_obsolete(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_x509if_obsolete);
-}
-static int dissect_includeSubtypes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_x509if_includeSubtypes);
-}
 
 
 static const ber_sequence_t Context_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_contextType },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_contextValues },
-  { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_fallback },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_contextType  , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_contextValues, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_AttributeValue },
+  { &hf_x509if_fallback     , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_BOOLEAN },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_Context(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,
+dissect_x509if_Context(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    Context_sequence, hf_index, ett_x509if_Context);
 
   return offset;
 }
-static int dissect_contextList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Context(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextList_item);
-}
 
 
 static const ber_sequence_t SET_OF_Context_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contextList_item },
+  { &hf_x509if_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Context },
 };
 
 static int
-dissect_x509if_SET_OF_Context(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,
+dissect_x509if_SET_OF_Context(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_Context_set_of, hf_index, ett_x509if_SET_OF_Context);
 
   return offset;
 }
-static int dissect_contextList(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_Context(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextList);
-}
 
 
 static const ber_sequence_t T_valuesWithContext_item_sequence[] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_value },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_contextList },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_value        , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_ValuesWithContextValue },
+  { &hf_x509if_contextList  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_Context },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_valuesWithContext_item(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,
+dissect_x509if_T_valuesWithContext_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_valuesWithContext_item_sequence, hf_index, ett_x509if_T_valuesWithContext_item);
 
   return offset;
 }
-static int dissect_valuesWithContext_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_valuesWithContext_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_valuesWithContext_item);
-}
 
 
 static const ber_sequence_t T_valuesWithContext_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_valuesWithContext_item },
+  { &hf_x509if_valuesWithContext_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_valuesWithContext_item },
 };
 
 static int
-dissect_x509if_T_valuesWithContext(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,
+dissect_x509if_T_valuesWithContext(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_valuesWithContext_set_of, hf_index, ett_x509if_T_valuesWithContext);
 
   return offset;
 }
-static int dissect_valuesWithContext(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_valuesWithContext(FALSE, tvb, offset, pinfo, tree, hf_x509if_valuesWithContext);
-}
 
 
 static const ber_sequence_t Attribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_values },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_valuesWithContext },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_type         , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_values       , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_AttributeValue },
+  { &hf_x509if_valuesWithContext, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_valuesWithContext },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_Attribute(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,
+dissect_x509if_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    Attribute_sequence, hf_index, ett_x509if_Attribute);
 
   return offset;
@@ -604,110 +524,82 @@ dissect_x509if_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, p
 
 
 int
-dissect_x509if_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_x509if_AttributeId(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_x509if_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x509if_AttributeId(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_additionalControl_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509if_additionalControl_item);
-}
-static int dissect_attribute(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509if_attribute);
-}
 
 
 
 static int
-dissect_x509if_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
+dissect_x509if_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
 
   return offset;
 }
-static int dissect_allContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_NULL(FALSE, tvb, offset, pinfo, tree, hf_x509if_allContexts);
-}
-static int dissect_matchedValuesOnly(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_NULL(FALSE, tvb, offset, pinfo, tree, hf_x509if_matchedValuesOnly);
-}
 
 
 
 static int
-dissect_x509if_ContextId(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);
+dissect_x509if_ContextId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
 
   return offset;
 }
-static int dissect_ca_contextType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextId(FALSE, tvb, offset, pinfo, tree, hf_x509if_ca_contextType);
-}
 
 
 
 static int
-dissect_x509if_ContextValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+dissect_x509if_ContextValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 131 "x509if.cnf"
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
+
 
 
   return offset;
 }
-static int dissect_ca_contextValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_ca_contextValues_item);
-}
 
 
 static const ber_sequence_t SET_OF_ContextValue_set_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_ca_contextValues_item },
+  { &hf_x509if_ca_contextValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextValue },
 };
 
 static int
-dissect_x509if_SET_OF_ContextValue(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,
+dissect_x509if_SET_OF_ContextValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_ContextValue_set_of, hf_index, ett_x509if_SET_OF_ContextValue);
 
   return offset;
 }
-static int dissect_ca_contextValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_ContextValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_ca_contextValues);
-}
 
 
 static const ber_sequence_t ContextAssertion_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_ca_contextType },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ca_contextValues },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_ca_contextType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextId },
+  { &hf_x509if_ca_contextValues, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_ContextValue },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ContextAssertion(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,
+dissect_x509if_ContextAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ContextAssertion_sequence, hf_index, ett_x509if_ContextAssertion);
 
   return offset;
 }
-static int dissect_selectedContexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_x509if_selectedContexts_item);
-}
-static int dissect_assertedContexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_x509if_assertedContexts_item);
-}
 
 
 static const ber_sequence_t SET_OF_ContextAssertion_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_selectedContexts_item },
+  { &hf_x509if_selectedContexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
 };
 
 static int
-dissect_x509if_SET_OF_ContextAssertion(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,
+dissect_x509if_SET_OF_ContextAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_ContextAssertion_set_of, hf_index, ett_x509if_SET_OF_ContextAssertion);
 
   return offset;
 }
-static int dissect_selectedContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_x509if_selectedContexts);
-}
 
 
 static const value_string x509if_T_assertedContexts_vals[] = {
@@ -717,65 +609,69 @@ static const value_string x509if_T_assertedContexts_vals[] = {
 };
 
 static const ber_choice_t T_assertedContexts_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_allContexts },
-  {   1, BER_CLASS_CON, 1, 0, dissect_selectedContexts },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_allContexts  , BER_CLASS_CON, 0, 0, dissect_x509if_NULL },
+  {   1, &hf_x509if_selectedContexts, BER_CLASS_CON, 1, 0, dissect_x509if_SET_OF_ContextAssertion },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_assertedContexts(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,
+dissect_x509if_T_assertedContexts(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  T_assertedContexts_choice, hf_index, ett_x509if_T_assertedContexts,
                                  NULL);
 
   return offset;
 }
-static int dissect_assertedContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_assertedContexts(FALSE, tvb, offset, pinfo, tree, hf_x509if_assertedContexts);
-}
 
 
 static const ber_sequence_t AttributeValueAssertion_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_assertion },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_assertedContexts },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_type         , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_assertion    , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeValue },
+  { &hf_x509if_assertedContexts, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_assertedContexts },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_AttributeValueAssertion(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,
+dissect_x509if_AttributeValueAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 296 "x509if.cnf"
+
+       ava_hf_index = hf_index;
+       last_ava = ep_alloc(MAX_AVA_STR_LEN); *last_ava = '\0';
+
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    AttributeValueAssertion_sequence, hf_index, ett_x509if_AttributeValueAssertion);
 
+
+       ava_hf_index=-1;
+
+
+
   return offset;
 }
 
 
 static const ber_sequence_t SEQUENCE_OF_ContextAssertion_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_assertedContexts_item },
+  { &hf_x509if_ata_assertedContexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_ContextAssertion(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,
+dissect_x509if_SEQUENCE_OF_ContextAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_ContextAssertion_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_ContextAssertion);
 
   return offset;
 }
-static int dissect_ata_assertedContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_x509if_ata_assertedContexts);
-}
 
 
 static const ber_sequence_t AttributeTypeAssertion_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ata_assertedContexts },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_type         , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_ata_assertedContexts, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_OF_ContextAssertion },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_AttributeTypeAssertion(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,
+dissect_x509if_AttributeTypeAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    AttributeTypeAssertion_sequence, hf_index, ett_x509if_AttributeTypeAssertion);
 
   return offset;
@@ -783,50 +679,44 @@ dissect_x509if_AttributeTypeAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb,
 
 
 static const ber_sequence_t T_valWithContext_item_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_distingAttrValue },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_contextList },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_distingAttrValue, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_ValuesWithContextValue },
+  { &hf_x509if_contextList  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_Context },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_valWithContext_item(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,
+dissect_x509if_T_valWithContext_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_valWithContext_item_sequence, hf_index, ett_x509if_T_valWithContext_item);
 
   return offset;
 }
-static int dissect_valueswithContext_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_valWithContext_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_valueswithContext_item);
-}
 
 
 static const ber_sequence_t T_valWithContext_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_valueswithContext_item },
+  { &hf_x509if_valueswithContext_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_valWithContext_item },
 };
 
 static int
-dissect_x509if_T_valWithContext(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,
+dissect_x509if_T_valWithContext(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_valWithContext_set_of, hf_index, ett_x509if_T_valWithContext);
 
   return offset;
 }
-static int dissect_valueswithContext(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_valWithContext(FALSE, tvb, offset, pinfo, tree, hf_x509if_valueswithContext);
-}
 
 
 static const ber_sequence_t AttributeTypeAndDistinguishedValue_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_atadv_value },
-  { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_primaryDistinguished },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_valueswithContext },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_type         , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_atadv_value  , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeValue },
+  { &hf_x509if_primaryDistinguished, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_BOOLEAN },
+  { &hf_x509if_valueswithContext, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_valWithContext },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_AttributeTypeAndDistinguishedValue(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,
+dissect_x509if_AttributeTypeAndDistinguishedValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    AttributeTypeAndDistinguishedValue_sequence, hf_index, ett_x509if_AttributeTypeAndDistinguishedValue);
 
   return offset;
@@ -835,7 +725,8 @@ dissect_x509if_AttributeTypeAndDistinguishedValue(gboolean implicit_tag _U_, tvb
 
 
 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_) {
+dissect_x509if_RelativeDistinguishedName_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 250 "x509if.cnf"
 
   if(!rdn_one_value) {
     top_of_rdn = tree;
@@ -846,25 +737,24 @@ dissect_x509if_RelativeDistinguishedName_item(gboolean implicit_tag _U_, tvbuff_
      g_strlcat(last_rdn, "+", MAX_RDN_STR_LEN);
   }
 
-    offset = dissect_x509if_AttributeTypeAndDistinguishedValue(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+    offset = dissect_x509if_AttributeTypeAndDistinguishedValue(implicit_tag, tvb, offset, actx, 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_RelativeDistinguishedName_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_RelativeDistinguishedName_item);
-}
 
 
 static const ber_sequence_t RelativeDistinguishedName_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RelativeDistinguishedName_item },
+  { &hf_x509if_RelativeDistinguishedName_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RelativeDistinguishedName_item },
 };
 
 int
-dissect_x509if_RelativeDistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_x509if_RelativeDistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 222 "x509if.cnf"
   char *temp_dn;
 
   rdn_one_value = FALSE;
@@ -872,7 +762,7 @@ dissect_x509if_RelativeDistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tv
   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,
+    offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  RelativeDistinguishedName_set_of, hf_index, ett_x509if_RelativeDistinguishedName);
 
 
@@ -880,69 +770,79 @@ dissect_x509if_RelativeDistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tv
   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);
+  if (last_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_) {
+dissect_x509if_RDNSequence_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 285 "x509if.cnf"
 
   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);
+    offset = dissect_x509if_RelativeDistinguishedName(implicit_tag, tvb, offset, actx, 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_RDNSequence_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_RDNSequence_item);
-}
 
 
 static const ber_sequence_t RDNSequence_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_RDNSequence_item },
+  { &hf_x509if_RDNSequence_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_RDNSequence_item },
 };
 
 int
-dissect_x509if_RDNSequence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_x509if_RDNSequence(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 265 "x509if.cnf"
+  const char *fmt; 
 
   dn_one_rdn = FALSE; /* reset */
-  last_dn = ep_alloc(MAX_RDN_STR_LEN); *last_dn = '\0';
+  last_dn = ep_alloc(MAX_DN_STR_LEN); *last_dn = '\0';
   top_of_dn = NULL;
 
-    offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+    offset = dissect_ber_sequence_of(implicit_tag, actx, 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);
 
+ /* see if we should append this to the col info */
+  if(check_col(actx->pinfo->cinfo, COL_INFO) &&
+     (fmt = val_to_str(hf_index, fmt_vals, "")) && *fmt) {
+      /* we have a format */
+       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s%s", fmt, last_dn);
+  }
+
+
 
 
   return offset;
 }
-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_x509if_rdnSequence);
-}
 
 
 const value_string x509if_Name_vals[] = {
@@ -951,13 +851,13 @@ const value_string x509if_Name_vals[] = {
 };
 
 static const ber_choice_t Name_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_rdnSequence },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_rdnSequence  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RDNSequence },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_Name(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,
+dissect_x509if_Name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  Name_choice, hf_index, ett_x509if_Name,
                                  NULL);
 
@@ -967,8 +867,8 @@ dissect_x509if_Name(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet
 
 
 int
-dissect_x509if_DistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_x509if_DistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -976,20 +876,11 @@ dissect_x509if_DistinguishedName(gboolean implicit_tag _U_, tvbuff_t *tvb, int o
 
 
 int
-dissect_x509if_LocalName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_x509if_LocalName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_base(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_LocalName(FALSE, tvb, offset, pinfo, tree, hf_x509if_base);
-}
-static int dissect_chopBefore(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_LocalName(FALSE, tvb, offset, pinfo, tree, hf_x509if_chopBefore);
-}
-static int dissect_chopAfter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_LocalName(FALSE, tvb, offset, pinfo, tree, hf_x509if_chopAfter);
-}
 
 
 static const value_string x509if_T_specificExclusions_item_vals[] = {
@@ -999,118 +890,64 @@ static const value_string x509if_T_specificExclusions_item_vals[] = {
 };
 
 static const ber_choice_t T_specificExclusions_item_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_chopBefore },
-  {   1, BER_CLASS_CON, 1, 0, dissect_chopAfter },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_chopBefore   , BER_CLASS_CON, 0, 0, dissect_x509if_LocalName },
+  {   1, &hf_x509if_chopAfter    , BER_CLASS_CON, 1, 0, dissect_x509if_LocalName },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_specificExclusions_item(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,
+dissect_x509if_T_specificExclusions_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  T_specificExclusions_item_choice, hf_index, ett_x509if_T_specificExclusions_item,
                                  NULL);
 
   return offset;
 }
-static int dissect_specificExclusions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_specificExclusions_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_specificExclusions_item);
-}
 
 
 static const ber_sequence_t T_specificExclusions_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_specificExclusions_item },
+  { &hf_x509if_specificExclusions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_specificExclusions_item },
 };
 
 static int
-dissect_x509if_T_specificExclusions(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,
+dissect_x509if_T_specificExclusions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_specificExclusions_set_of, hf_index, ett_x509if_T_specificExclusions);
 
   return offset;
 }
-static int dissect_specificExclusions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_specificExclusions(FALSE, tvb, offset, pinfo, tree, hf_x509if_specificExclusions);
-}
 
 
 
-int
-dissect_x509if_BaseDistance(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,
+static int
+dissect_x509if_BaseDistance(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_minimum(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BaseDistance(FALSE, tvb, offset, pinfo, tree, hf_x509if_minimum);
-}
-static int dissect_maximum(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_BaseDistance(FALSE, tvb, offset, pinfo, tree, hf_x509if_maximum);
-}
 
 
 
 static int
-dissect_x509if_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_x509if_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
-static int dissect_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_item);
-}
-static int dissect_nameForm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_nameForm);
-}
-static int dissect_structuralObjectClass(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_structuralObjectClass);
-}
-static int dissect_auxiliaries_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_auxiliaries_item);
-}
-static int dissect_mandatoryContexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_mandatoryContexts_item);
-}
-static int dissect_optionalContexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_optionalContexts_item);
-}
-static int dissect_dmdId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_dmdId);
-}
-static int dissect_serviceType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_serviceType);
-}
-static int dissect_context(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_context);
-}
-static int dissect_mappingFunction(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_mappingFunction);
-}
-static int dissect_oldMatchingRule(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_oldMatchingRule);
-}
-static int dissect_newMatchingRule(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_x509if_newMatchingRule);
-}
 
 
 static const ber_sequence_t SET_OF_Refinement_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_refinement_and_item },
+  { &hf_x509if_refinement_and_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_Refinement },
 };
 
 static int
-dissect_x509if_SET_OF_Refinement(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,
+dissect_x509if_SET_OF_Refinement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_Refinement_set_of, hf_index, ett_x509if_SET_OF_Refinement);
 
   return offset;
 }
-static int dissect_refinement_and(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_refinement_and);
-}
-static int dissect_refinement_or(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_Refinement(FALSE, tvb, offset, pinfo, tree, hf_x509if_refinement_or);
-}
 
 
 const value_string x509if_Refinement_vals[] = {
@@ -1122,16 +959,16 @@ const value_string x509if_Refinement_vals[] = {
 };
 
 static const ber_choice_t Refinement_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_item },
-  {   1, BER_CLASS_CON, 1, 0, dissect_refinement_and },
-  {   2, BER_CLASS_CON, 2, 0, dissect_refinement_or },
-  {   3, BER_CLASS_CON, 3, 0, dissect_refinement_not },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_item         , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
+  {   1, &hf_x509if_refinement_and, BER_CLASS_CON, 1, 0, dissect_x509if_SET_OF_Refinement },
+  {   2, &hf_x509if_refinement_or, BER_CLASS_CON, 2, 0, dissect_x509if_SET_OF_Refinement },
+  {   3, &hf_x509if_refinement_not, BER_CLASS_CON, 3, 0, dissect_x509if_Refinement },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_Refinement(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,
+dissect_x509if_Refinement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  Refinement_choice, hf_index, ett_x509if_Refinement,
                                  NULL);
 
@@ -1140,17 +977,17 @@ dissect_x509if_Refinement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
 
 
 static const ber_sequence_t SubtreeSpecification_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_base },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_specificExclusions },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_minimum },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_maximum },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_specificationFilter },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_base         , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_LocalName },
+  { &hf_x509if_specificExclusions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_specificExclusions },
+  { &hf_x509if_minimum      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
+  { &hf_x509if_maximum      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
+  { &hf_x509if_specificationFilter, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_Refinement },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_SubtreeSpecification(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,
+dissect_x509if_SubtreeSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SubtreeSpecification_sequence, hf_index, ett_x509if_SubtreeSpecification);
 
   return offset;
@@ -1164,50 +1001,44 @@ static const value_string x509if_T_chopSpecificExclusions_item_vals[] = {
 };
 
 static const ber_choice_t T_chopSpecificExclusions_item_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_chopBefore },
-  {   1, BER_CLASS_CON, 1, 0, dissect_chopAfter },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_chopBefore   , BER_CLASS_CON, 0, 0, dissect_x509if_LocalName },
+  {   1, &hf_x509if_chopAfter    , BER_CLASS_CON, 1, 0, dissect_x509if_LocalName },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_chopSpecificExclusions_item(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,
+dissect_x509if_T_chopSpecificExclusions_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  T_chopSpecificExclusions_item_choice, hf_index, ett_x509if_T_chopSpecificExclusions_item,
                                  NULL);
 
   return offset;
 }
-static int dissect_chopSpecificExclusions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_chopSpecificExclusions_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_chopSpecificExclusions_item);
-}
 
 
 static const ber_sequence_t T_chopSpecificExclusions_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_chopSpecificExclusions_item },
+  { &hf_x509if_chopSpecificExclusions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_chopSpecificExclusions_item },
 };
 
 static int
-dissect_x509if_T_chopSpecificExclusions(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,
+dissect_x509if_T_chopSpecificExclusions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_chopSpecificExclusions_set_of, hf_index, ett_x509if_T_chopSpecificExclusions);
 
   return offset;
 }
-static int dissect_chopSpecificExclusions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_chopSpecificExclusions(FALSE, tvb, offset, pinfo, tree, hf_x509if_chopSpecificExclusions);
-}
 
 
 static const ber_sequence_t ChopSpecification_sequence[] = {
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_chopSpecificExclusions },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_minimum },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_maximum },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_chopSpecificExclusions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_chopSpecificExclusions },
+  { &hf_x509if_minimum      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
+  { &hf_x509if_maximum      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ChopSpecification(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,
+dissect_x509if_ChopSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ChopSpecification_sequence, hf_index, ett_x509if_ChopSpecification);
 
   return offset;
@@ -1223,8 +1054,8 @@ static const value_string x509if_ObjectClassKind_vals[] = {
 
 
 static int
-dissect_x509if_ObjectClassKind(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,
+dissect_x509if_ObjectClassKind(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
@@ -1241,8 +1072,8 @@ const value_string x509if_AttributeUsage_vals[] = {
 
 
 int
-dissect_x509if_AttributeUsage(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,
+dissect_x509if_AttributeUsage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
@@ -1251,46 +1082,37 @@ dissect_x509if_AttributeUsage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
 
 
 int
-dissect_x509if_RuleIdentifier(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,
+dissect_x509if_RuleIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_ruleIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_RuleIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x509if_ruleIdentifier);
-}
-static int dissect_superiorStructureRules_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_RuleIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x509if_superiorStructureRules_item);
-}
 
 
 static const ber_sequence_t SET_OF_RuleIdentifier_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_superiorStructureRules_item },
+  { &hf_x509if_superiorStructureRules_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_RuleIdentifier },
 };
 
 static int
-dissect_x509if_SET_OF_RuleIdentifier(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,
+dissect_x509if_SET_OF_RuleIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_RuleIdentifier_set_of, hf_index, ett_x509if_SET_OF_RuleIdentifier);
 
   return offset;
 }
-static int dissect_superiorStructureRules(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_RuleIdentifier(FALSE, tvb, offset, pinfo, tree, hf_x509if_superiorStructureRules);
-}
 
 
 static const ber_sequence_t DITStructureRule_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_ruleIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_nameForm },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_superiorStructureRules },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_ruleIdentifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_RuleIdentifier },
+  { &hf_x509if_nameForm     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_superiorStructureRules, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_SET_OF_RuleIdentifier },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_DITStructureRule(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,
+dissect_x509if_DITStructureRule(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    DITStructureRule_sequence, hf_index, ett_x509if_DITStructureRule);
 
   return offset;
@@ -1298,55 +1120,43 @@ dissect_x509if_DITStructureRule(gboolean implicit_tag _U_, tvbuff_t *tvb, int of
 
 
 static const ber_sequence_t T_auxiliaries_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_auxiliaries_item },
+  { &hf_x509if_auxiliaries_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
 };
 
 static int
-dissect_x509if_T_auxiliaries(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,
+dissect_x509if_T_auxiliaries(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_auxiliaries_set_of, hf_index, ett_x509if_T_auxiliaries);
 
   return offset;
 }
-static int dissect_auxiliaries(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_auxiliaries(FALSE, tvb, offset, pinfo, tree, hf_x509if_auxiliaries);
-}
 
 
 static const ber_sequence_t SET_SIZE_1_MAX_OF_AttributeId_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_mandatory_item },
+  { &hf_x509if_mandatory_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
 };
 
 static int
-dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId(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,
+dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_SIZE_1_MAX_OF_AttributeId_set_of, hf_index, ett_x509if_SET_SIZE_1_MAX_OF_AttributeId);
 
   return offset;
 }
-static int dissect_mandatory(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_mandatory);
-}
-static int dissect_optional(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_optional);
-}
-static int dissect_precluded(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId(FALSE, tvb, offset, pinfo, tree, hf_x509if_precluded);
-}
 
 
 static const ber_sequence_t DITContentRule_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_structuralObjectClass },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_auxiliaries },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_mandatory },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_optional },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_precluded },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_structuralObjectClass, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_auxiliaries  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_auxiliaries },
+  { &hf_x509if_mandatory    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId },
+  { &hf_x509if_optional     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId },
+  { &hf_x509if_precluded    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SET_SIZE_1_MAX_OF_AttributeId },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_DITContentRule(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,
+dissect_x509if_DITContentRule(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    DITContentRule_sequence, hf_index, ett_x509if_DITContentRule);
 
   return offset;
@@ -1354,47 +1164,41 @@ dissect_x509if_DITContentRule(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
 
 
 static const ber_sequence_t T_mandatoryContexts_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_mandatoryContexts_item },
+  { &hf_x509if_mandatoryContexts_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
 };
 
 static int
-dissect_x509if_T_mandatoryContexts(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,
+dissect_x509if_T_mandatoryContexts(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_mandatoryContexts_set_of, hf_index, ett_x509if_T_mandatoryContexts);
 
   return offset;
 }
-static int dissect_mandatoryContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_mandatoryContexts(FALSE, tvb, offset, pinfo, tree, hf_x509if_mandatoryContexts);
-}
 
 
 static const ber_sequence_t T_optionalContexts_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_optionalContexts_item },
+  { &hf_x509if_optionalContexts_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
 };
 
 static int
-dissect_x509if_T_optionalContexts(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,
+dissect_x509if_T_optionalContexts(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  T_optionalContexts_set_of, hf_index, ett_x509if_T_optionalContexts);
 
   return offset;
 }
-static int dissect_optionalContexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_optionalContexts(FALSE, tvb, offset, pinfo, tree, hf_x509if_optionalContexts);
-}
 
 
 static const ber_sequence_t DITContextUse_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attributeType },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_mandatoryContexts },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_optionalContexts },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_attributeType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_mandatoryContexts, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_mandatoryContexts },
+  { &hf_x509if_optionalContexts, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_T_optionalContexts },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_DITContextUse(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,
+dissect_x509if_DITContextUse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    DITContextUse_sequence, hf_index, ett_x509if_DITContextUse);
 
   return offset;
@@ -1403,209 +1207,153 @@ dissect_x509if_DITContextUse(gboolean implicit_tag _U_, tvbuff_t *tvb, int offse
 
 
 static int
-dissect_x509if_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,
+dissect_x509if_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_id(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_id);
-}
-static int dissect_userClass(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_userClass);
-}
-static int dissect_default(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_default);
-}
-static int dissect_max(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_max);
-}
-static int dissect_maximum_relaxation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_maximum_relaxation);
-}
-static int dissect_minimum_relaxation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_minimum_relaxation);
-}
-static int dissect_level(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509if_level);
-}
 
 
 
 static int
-dissect_x509if_SelectedValues(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+dissect_x509if_SelectedValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 210 "x509if.cnf"
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
+
 
 
   return offset;
 }
-static int dissect_ra_selectedValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SelectedValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_ra_selectedValues_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_SelectedValues_sequence_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_ra_selectedValues_item },
+  { &hf_x509if_ra_selectedValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_SelectedValues },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_SelectedValues(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,
+dissect_x509if_SEQUENCE_OF_SelectedValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_SelectedValues_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_SelectedValues);
 
   return offset;
 }
-static int dissect_ra_selectedValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_SelectedValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_ra_selectedValues);
-}
 
 
 
 static int
-dissect_x509if_DefaultValueType(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);
+dissect_x509if_DefaultValueType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
 
   return offset;
 }
-static int dissect_entryType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_DefaultValueType(FALSE, tvb, offset, pinfo, tree, hf_x509if_entryType);
-}
 
 
 
 static int
-dissect_x509if_DefaultValueValues(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+dissect_x509if_DefaultValueValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 216 "x509if.cnf"
+  offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
+
 
 
   return offset;
 }
-static int dissect_ra_values_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_DefaultValueValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_ra_values_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_DefaultValueValues_sequence_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_ra_values_item },
+  { &hf_x509if_ra_values_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_DefaultValueValues },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_DefaultValueValues(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,
+dissect_x509if_SEQUENCE_OF_DefaultValueValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_DefaultValueValues_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_DefaultValueValues);
 
   return offset;
 }
-static int dissect_ra_values(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_DefaultValueValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_ra_values);
-}
 
 
 static const ber_sequence_t T_defaultValues_item_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_entryType },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ra_values },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_entryType    , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_DefaultValueType },
+  { &hf_x509if_ra_values    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_OF_DefaultValueValues },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_defaultValues_item(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,
+dissect_x509if_T_defaultValues_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_defaultValues_item_sequence, hf_index, ett_x509if_T_defaultValues_item);
 
   return offset;
 }
-static int dissect_defaultValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_defaultValues_item(FALSE, tvb, offset, pinfo, tree, hf_x509if_defaultValues_item);
-}
 
 
 static const ber_sequence_t T_defaultValues_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_defaultValues_item },
+  { &hf_x509if_defaultValues_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_defaultValues_item },
 };
 
 static int
-dissect_x509if_T_defaultValues(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,
+dissect_x509if_T_defaultValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       T_defaultValues_sequence_of, hf_index, ett_x509if_T_defaultValues);
 
   return offset;
 }
-static int dissect_defaultValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_defaultValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_defaultValues);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_AttributeValue_sequence_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_contextValue_item },
+  { &hf_x509if_contextValue_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeValue },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_AttributeValue(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,
+dissect_x509if_SEQUENCE_OF_AttributeValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_AttributeValue_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_AttributeValue);
 
   return offset;
 }
-static int dissect_contextValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextValue);
-}
-static int dissect_selectedValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_AttributeValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_selectedValues);
-}
 
 
 static const ber_sequence_t ContextProfile_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_contextType },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_contextValue },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_contextType  , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_contextValue , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_OF_AttributeValue },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ContextProfile(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,
+dissect_x509if_ContextProfile(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ContextProfile_sequence, hf_index, ett_x509if_ContextProfile);
 
   return offset;
 }
-static int dissect_contexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextProfile(FALSE, tvb, offset, pinfo, tree, hf_x509if_contexts_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_ContextProfile_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contexts_item },
+  { &hf_x509if_contexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextProfile },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_ContextProfile(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,
+dissect_x509if_SEQUENCE_OF_ContextProfile(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_ContextProfile_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_ContextProfile);
 
   return offset;
 }
-static int dissect_contexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_ContextProfile(FALSE, tvb, offset, pinfo, tree, hf_x509if_contexts);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_ContextCombination_sequence_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_contextcombination_and_item },
+  { &hf_x509if_contextcombination_and_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_ContextCombination },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_ContextCombination(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,
+dissect_x509if_SEQUENCE_OF_ContextCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_ContextCombination_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_ContextCombination);
 
   return offset;
 }
-static int dissect_contextcombination_and(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextcombination_and);
-}
-static int dissect_contextcombination_or(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_ContextCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_contextcombination_or);
-}
 
 
 const value_string x509if_ContextCombination_vals[] = {
@@ -1617,16 +1365,16 @@ const value_string x509if_ContextCombination_vals[] = {
 };
 
 static const ber_choice_t ContextCombination_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_context },
-  {   1, BER_CLASS_CON, 1, 0, dissect_contextcombination_and },
-  {   2, BER_CLASS_CON, 2, 0, dissect_contextcombination_or },
-  {   3, BER_CLASS_CON, 3, 0, dissect_contextcombination_not },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_context      , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
+  {   1, &hf_x509if_contextcombination_and, BER_CLASS_CON, 1, 0, dissect_x509if_SEQUENCE_OF_ContextCombination },
+  {   2, &hf_x509if_contextcombination_or, BER_CLASS_CON, 2, 0, dissect_x509if_SEQUENCE_OF_ContextCombination },
+  {   3, &hf_x509if_contextcombination_not, BER_CLASS_CON, 3, 0, dissect_x509if_ContextCombination },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ContextCombination(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,
+dissect_x509if_ContextCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  ContextCombination_choice, hf_index, ett_x509if_ContextCombination,
                                  NULL);
 
@@ -1635,95 +1383,77 @@ dissect_x509if_ContextCombination(gboolean implicit_tag _U_, tvbuff_t *tvb, int
 
 
 static const ber_sequence_t MatchingUse_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_restrictionType },
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_restrictionValue },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_restrictionType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_restrictionValue, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeValue },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_MatchingUse(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,
+dissect_x509if_MatchingUse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    MatchingUse_sequence, hf_index, ett_x509if_MatchingUse);
 
   return offset;
 }
-static int dissect_matchingUse_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_MatchingUse(FALSE, tvb, offset, pinfo, tree, hf_x509if_matchingUse_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_MatchingUse_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_matchingUse_item },
+  { &hf_x509if_matchingUse_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MatchingUse },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_MatchingUse(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,
+dissect_x509if_SEQUENCE_OF_MatchingUse(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_MatchingUse_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_MatchingUse);
 
   return offset;
 }
-static int dissect_matchingUse(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_MatchingUse(FALSE, tvb, offset, pinfo, tree, hf_x509if_matchingUse);
-}
 
 
 static const ber_sequence_t RequestAttribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attributeType },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_includeSubtypes },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_ra_selectedValues },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_defaultValues },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_contexts },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_contextCombination },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_matchingUse },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_attributeType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_includeSubtypes, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_BOOLEAN },
+  { &hf_x509if_ra_selectedValues, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_SelectedValues },
+  { &hf_x509if_defaultValues, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_T_defaultValues },
+  { &hf_x509if_contexts     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_ContextProfile },
+  { &hf_x509if_contextCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_ContextCombination },
+  { &hf_x509if_matchingUse  , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_MatchingUse },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_RequestAttribute(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,
+dissect_x509if_RequestAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    RequestAttribute_sequence, hf_index, ett_x509if_RequestAttribute);
 
   return offset;
 }
-static int dissect_inputAttributeTypes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_RequestAttribute(FALSE, tvb, offset, pinfo, tree, hf_x509if_inputAttributeTypes_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_RequestAttribute_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_inputAttributeTypes_item },
+  { &hf_x509if_inputAttributeTypes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RequestAttribute },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_RequestAttribute(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,
+dissect_x509if_SEQUENCE_OF_RequestAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_RequestAttribute_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_RequestAttribute);
 
   return offset;
 }
-static int dissect_inputAttributeTypes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_RequestAttribute(FALSE, tvb, offset, pinfo, tree, hf_x509if_inputAttributeTypes);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_AttributeCombination_sequence_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_and_item },
+  { &hf_x509if_and_item     , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_AttributeCombination(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,
+dissect_x509if_SEQUENCE_OF_AttributeCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_AttributeCombination_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_AttributeCombination);
 
   return offset;
 }
-static int dissect_and(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_and);
-}
-static int dissect_or(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_AttributeCombination(FALSE, tvb, offset, pinfo, tree, hf_x509if_or);
-}
 
 
 const value_string x509if_AttributeCombination_vals[] = {
@@ -1735,16 +1465,16 @@ const value_string x509if_AttributeCombination_vals[] = {
 };
 
 static const ber_choice_t AttributeCombination_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_attribute },
-  {   1, BER_CLASS_CON, 1, 0, dissect_and },
-  {   2, BER_CLASS_CON, 2, 0, dissect_or },
-  {   3, BER_CLASS_CON, 3, 0, dissect_not },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_attribute    , BER_CLASS_CON, 0, 0, dissect_x509if_AttributeType },
+  {   1, &hf_x509if_and          , BER_CLASS_CON, 1, 0, dissect_x509if_SEQUENCE_OF_AttributeCombination },
+  {   2, &hf_x509if_or           , BER_CLASS_CON, 2, 0, dissect_x509if_SEQUENCE_OF_AttributeCombination },
+  {   3, &hf_x509if_not          , BER_CLASS_CON, 3, 0, dissect_x509if_AttributeCombination },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_AttributeCombination(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,
+dissect_x509if_AttributeCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  AttributeCombination_choice, hf_index, ett_x509if_AttributeCombination,
                                  NULL);
 
@@ -1759,228 +1489,177 @@ static const value_string x509if_T_outputValues_vals[] = {
 };
 
 static const ber_choice_t T_outputValues_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_selectedValues },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_matchedValuesOnly },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_selectedValues, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_OF_AttributeValue },
+  {   1, &hf_x509if_matchedValuesOnly, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x509if_NULL },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x509if_T_outputValues(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,
+dissect_x509if_T_outputValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  T_outputValues_choice, hf_index, ett_x509if_T_outputValues,
                                  NULL);
 
   return offset;
 }
-static int dissect_outputValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_T_outputValues(FALSE, tvb, offset, pinfo, tree, hf_x509if_outputValues);
-}
 
 
 static const ber_sequence_t ResultAttribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attributeType },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_outputValues },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_contexts },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_attributeType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeId },
+  { &hf_x509if_outputValues , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_outputValues },
+  { &hf_x509if_contexts     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_ContextProfile },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ResultAttribute(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,
+dissect_x509if_ResultAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ResultAttribute_sequence, hf_index, ett_x509if_ResultAttribute);
 
   return offset;
 }
-static int dissect_outputAttributeTypes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ResultAttribute(FALSE, tvb, offset, pinfo, tree, hf_x509if_outputAttributeTypes_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_ResultAttribute_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_outputAttributeTypes_item },
+  { &hf_x509if_outputAttributeTypes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ResultAttribute },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_ResultAttribute(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,
+dissect_x509if_SEQUENCE_OF_ResultAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_ResultAttribute_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_ResultAttribute);
 
   return offset;
 }
-static int dissect_outputAttributeTypes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_ResultAttribute(FALSE, tvb, offset, pinfo, tree, hf_x509if_outputAttributeTypes);
-}
 
 
 static const ber_sequence_t ControlOptions_sequence[] = {
-  { 0, 0, 0, NULL }
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_ControlOptions(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,
+dissect_x509if_ControlOptions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ControlOptions_sequence, hf_index, ett_x509if_ControlOptions);
 
   return offset;
 }
-static int dissect_defaultControls(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ControlOptions(FALSE, tvb, offset, pinfo, tree, hf_x509if_defaultControls);
-}
-static int dissect_mandatoryControls(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ControlOptions(FALSE, tvb, offset, pinfo, tree, hf_x509if_mandatoryControls);
-}
-static int dissect_searchRuleControls(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ControlOptions(FALSE, tvb, offset, pinfo, tree, hf_x509if_searchRuleControls);
-}
 
 
 static const ber_sequence_t Mapping_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_mappingFunction },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_level },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_mappingFunction, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_level        , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_Mapping(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,
+dissect_x509if_Mapping(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    Mapping_sequence, hf_index, ett_x509if_Mapping);
 
   return offset;
 }
-static int dissect_mapping_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Mapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_mapping_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_Mapping_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_mapping_item },
+  { &hf_x509if_mapping_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Mapping },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_Mapping(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,
+dissect_x509if_SEQUENCE_OF_Mapping(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_Mapping_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_Mapping);
 
   return offset;
 }
-static int dissect_mapping(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_Mapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_mapping);
-}
 
 
 static const ber_sequence_t MRSubstitution_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attribute },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_oldMatchingRule },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_newMatchingRule },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_attribute    , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
+  { &hf_x509if_oldMatchingRule, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_newMatchingRule, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_MRSubstitution(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,
+dissect_x509if_MRSubstitution(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    MRSubstitution_sequence, hf_index, ett_x509if_MRSubstitution);
 
   return offset;
 }
-static int dissect_substitution_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_MRSubstitution(FALSE, tvb, offset, pinfo, tree, hf_x509if_substitution_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_MRSubstitution_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_substitution_item },
+  { &hf_x509if_substitution_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MRSubstitution },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_MRSubstitution(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,
+dissect_x509if_SEQUENCE_OF_MRSubstitution(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_MRSubstitution_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_MRSubstitution);
 
   return offset;
 }
-static int dissect_substitution(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_MRSubstitution(FALSE, tvb, offset, pinfo, tree, hf_x509if_substitution);
-}
 
 
 static const ber_sequence_t MRMapping_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_mapping },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_substitution },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_mapping      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_Mapping },
+  { &hf_x509if_substitution , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_MRSubstitution },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_MRMapping(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,
+dissect_x509if_MRMapping(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    MRMapping_sequence, hf_index, ett_x509if_MRMapping);
 
   return offset;
 }
-static int dissect_basic(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_MRMapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_basic);
-}
-static int dissect_tightenings_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_MRMapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_tightenings_item);
-}
-static int dissect_relaxations_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_MRMapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_relaxations_item);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_MRMapping_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_tightenings_item },
+  { &hf_x509if_tightenings_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MRMapping },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_MRMapping(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,
+dissect_x509if_SEQUENCE_OF_MRMapping(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_MRMapping_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_MRMapping);
 
   return offset;
 }
-static int dissect_tightenings(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_MRMapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_tightenings);
-}
-static int dissect_relaxations(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_MRMapping(FALSE, tvb, offset, pinfo, tree, hf_x509if_relaxations);
-}
 
 
 static const ber_sequence_t RelaxationPolicy_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_basic },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_tightenings },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_relaxations },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_maximum_relaxation },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_minimum_relaxation },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_basic        , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_MRMapping },
+  { &hf_x509if_tightenings  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_MRMapping },
+  { &hf_x509if_relaxations  , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_MRMapping },
+  { &hf_x509if_maximum_relaxation, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
+  { &hf_x509if_minimum_relaxation, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_RelaxationPolicy(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,
+dissect_x509if_RelaxationPolicy(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    RelaxationPolicy_sequence, hf_index, ett_x509if_RelaxationPolicy);
 
   return offset;
 }
-static int dissect_relaxation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_RelaxationPolicy(FALSE, tvb, offset, pinfo, tree, hf_x509if_relaxation);
-}
 
 
 static const ber_sequence_t SEQUENCE_OF_AttributeType_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_additionalControl_item },
+  { &hf_x509if_additionalControl_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
 };
 
 static int
-dissect_x509if_SEQUENCE_OF_AttributeType(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,
+dissect_x509if_SEQUENCE_OF_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_OF_AttributeType_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_AttributeType);
 
   return offset;
 }
-static int dissect_additionalControl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SEQUENCE_OF_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509if_additionalControl);
-}
 
 
 static const asn_namedbit AllowedSubset_bits[] = {
@@ -1991,16 +1670,13 @@ static const asn_namedbit AllowedSubset_bits[] = {
 };
 
 int
-dissect_x509if_AllowedSubset(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,
+dissect_x509if_AllowedSubset(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
                                     AllowedSubset_bits, hf_index, ett_x509if_AllowedSubset,
                                     NULL);
 
   return offset;
 }
-static int dissect_allowedSubset(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AllowedSubset(FALSE, tvb, offset, pinfo, tree, hf_x509if_allowedSubset);
-}
 
 
 const value_string x509if_ImposedSubset_vals[] = {
@@ -2012,76 +1688,67 @@ const value_string x509if_ImposedSubset_vals[] = {
 
 
 int
-dissect_x509if_ImposedSubset(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,
+dissect_x509if_ImposedSubset(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_imposedSubset(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ImposedSubset(FALSE, tvb, offset, pinfo, tree, hf_x509if_imposedSubset);
-}
 
 
 static const ber_sequence_t EntryLimit_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_default },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_max },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_default      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { &hf_x509if_max          , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_EntryLimit(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,
+dissect_x509if_EntryLimit(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    EntryLimit_sequence, hf_index, ett_x509if_EntryLimit);
 
   return offset;
 }
-static int dissect_entryLimit(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_EntryLimit(FALSE, tvb, offset, pinfo, tree, hf_x509if_entryLimit);
-}
 
 
 static const ber_sequence_t SET_OF_DirectoryString_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_name_item },
+  { &hf_x509if_name_item    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_x509sat_DirectoryString },
 };
 
 static int
-dissect_x509if_SET_OF_DirectoryString(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,
+dissect_x509if_SET_OF_DirectoryString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_DirectoryString_set_of, hf_index, ett_x509if_SET_OF_DirectoryString);
 
   return offset;
 }
-static int dissect_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SET_OF_DirectoryString(FALSE, tvb, offset, pinfo, tree, hf_x509if_name);
-}
 
 
 static const ber_sequence_t SearchRuleDescription_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_id },
-  { BER_CLASS_CON, 0, 0, dissect_dmdId },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_serviceType },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_userClass },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_inputAttributeTypes },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_attributeCombination },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_outputAttributeTypes },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_defaultControls },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_mandatoryControls },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_searchRuleControls },
-  { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_relaxation },
-  { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_additionalControl },
-  { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_allowedSubset },
-  { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_imposedSubset },
-  { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_entryLimit },
-  { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_name },
-  { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_description },
-  { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_obsolete },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_serviceType  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_userClass    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
+  { &hf_x509if_inputAttributeTypes, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_RequestAttribute },
+  { &hf_x509if_attributeCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
+  { &hf_x509if_outputAttributeTypes, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_ResultAttribute },
+  { &hf_x509if_defaultControls, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_mandatoryControls, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_searchRuleControls, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_relaxation   , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_x509if_RelaxationPolicy },
+  { &hf_x509if_additionalControl, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_AttributeType },
+  { &hf_x509if_allowedSubset, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_x509if_AllowedSubset },
+  { &hf_x509if_imposedSubset, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_x509if_ImposedSubset },
+  { &hf_x509if_entryLimit   , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_x509if_EntryLimit },
+  { &hf_x509if_name         , BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_x509if_SET_OF_DirectoryString },
+  { &hf_x509if_description  , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509sat_DirectoryString },
+  { &hf_x509if_obsolete     , BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_x509if_BOOLEAN },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_SearchRuleDescription(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,
+dissect_x509if_SearchRuleDescription(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SearchRuleDescription_sequence, hf_index, ett_x509if_SearchRuleDescription);
 
   return offset;
@@ -2089,27 +1756,27 @@ dissect_x509if_SearchRuleDescription(gboolean implicit_tag _U_, tvbuff_t *tvb, i
 
 
 static const ber_sequence_t SearchRule_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_id },
-  { BER_CLASS_CON, 0, 0, dissect_dmdId },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_serviceType },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_userClass },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_inputAttributeTypes },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_attributeCombination },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_outputAttributeTypes },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_defaultControls },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_mandatoryControls },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_searchRuleControls },
-  { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_relaxation },
-  { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_additionalControl },
-  { BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_allowedSubset },
-  { BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_imposedSubset },
-  { BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_entryLimit },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_serviceType  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
+  { &hf_x509if_userClass    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
+  { &hf_x509if_inputAttributeTypes, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_RequestAttribute },
+  { &hf_x509if_attributeCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
+  { &hf_x509if_outputAttributeTypes, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_ResultAttribute },
+  { &hf_x509if_defaultControls, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_mandatoryControls, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_searchRuleControls, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
+  { &hf_x509if_relaxation   , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_x509if_RelaxationPolicy },
+  { &hf_x509if_additionalControl, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_OF_AttributeType },
+  { &hf_x509if_allowedSubset, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_x509if_AllowedSubset },
+  { &hf_x509if_imposedSubset, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_x509if_ImposedSubset },
+  { &hf_x509if_entryLimit   , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_x509if_EntryLimit },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_SearchRule(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,
+dissect_x509if_SearchRule(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SearchRule_sequence, hf_index, ett_x509if_SearchRule);
 
   return offset;
@@ -2117,14 +1784,14 @@ dissect_x509if_SearchRule(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
 
 
 static const ber_sequence_t SearchRuleId_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_id },
-  { BER_CLASS_CON, 0, 0, dissect_dmdId },
-  { 0, 0, 0, NULL }
+  { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
+  { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_SearchRuleId(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,
+dissect_x509if_SearchRuleId(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SearchRuleId_sequence, hf_index, ett_x509if_SearchRuleId);
 
   return offset;
@@ -2138,14 +1805,14 @@ const value_string x509if_OutputValues_vals[] = {
 };
 
 static const ber_choice_t OutputValues_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_selectedValues },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_matchedValuesOnly },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_x509if_selectedValues, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_OF_AttributeValue },
+  {   1, &hf_x509if_matchedValuesOnly, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x509if_NULL },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x509if_OutputValues(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,
+dissect_x509if_OutputValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
                                  OutputValues_choice, hf_index, ett_x509if_OutputValues,
                                  NULL);
 
@@ -2154,29 +1821,59 @@ dissect_x509if_OutputValues(gboolean implicit_tag _U_, tvbuff_t *tvb, int 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_Name_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x509if_Name(FALSE, tvb, 0, &asn1_ctx, 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);
+static void dissect_DistinguishedName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x509if_DistinguishedName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x509if_DistinguishedName_PDU);
 }
 
 
 /*--- End of included file: packet-x509if-fn.c ---*/
+#line 79 "packet-x509if-template.c"
 
-
-const char * x509if_get_last_dn()
+const char * x509if_get_last_dn(void)
 {
   return last_dn;
 }
 
+gboolean x509if_register_fmt(int hf_index, const gchar *fmt)
+{
+  static int idx = 0;
+
+  if(idx < (MAX_FMT_VALS - 1)) {
+
+    fmt_vals[idx].value = hf_index;
+    fmt_vals[idx].strptr = fmt;
+
+    idx++;
+
+    fmt_vals[idx].value = 0;
+    fmt_vals[idx].strptr = NULL;
+
+    return TRUE;
+
+  } else 
+    return FALSE; /* couldn't register it */
+
+}
+
+const char * x509if_get_last_ava(void)
+{
+  return last_ava;
+}
+
 /*--- proto_register_x509if ----------------------------------------------*/
 void proto_register_x509if(void) {
 
   /* List of fields */
   static hf_register_info hf[] = {
     { &hf_x509if_object_identifier_id, 
-      { "Id", "x509if.id", FT_STRING, BASE_NONE, NULL, 0,
+      { "Id", "x509if.id", FT_OID, BASE_NONE, NULL, 0,
        "Object identifier Id", HFILL }},
     { &hf_x509if_any_string, 
       { "AnyString", "x509if.any.String", FT_BYTES, BASE_HEX,
@@ -2184,559 +1881,559 @@ void proto_register_x509if(void) {
                         
 
 /*--- Included file: packet-x509if-hfarr.c ---*/
-
+#line 1 "packet-x509if-hfarr.c"
     { &hf_x509if_Name_PDU,
       { "Name", "x509if.Name",
         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
-        "Name", HFILL }},
+        "x509if.Name", HFILL }},
     { &hf_x509if_DistinguishedName_PDU,
       { "DistinguishedName", "x509if.DistinguishedName",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DistinguishedName", HFILL }},
+        "x509if.DistinguishedName", HFILL }},
     { &hf_x509if_type,
       { "type", "x509if.type",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_values,
       { "values", "x509if.values",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Attribute/values", HFILL }},
+        "x509if.SET_OF_AttributeValue", HFILL }},
     { &hf_x509if_values_item,
       { "Item", "x509if.values_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Attribute/values/_item", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_valuesWithContext,
       { "valuesWithContext", "x509if.valuesWithContext",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Attribute/valuesWithContext", HFILL }},
+        "x509if.T_valuesWithContext", HFILL }},
     { &hf_x509if_valuesWithContext_item,
       { "Item", "x509if.valuesWithContext_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Attribute/valuesWithContext/_item", HFILL }},
+        "x509if.T_valuesWithContext_item", HFILL }},
     { &hf_x509if_value,
       { "value", "x509if.value",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Attribute/valuesWithContext/_item/value", HFILL }},
+        "x509if.ValuesWithContextValue", HFILL }},
     { &hf_x509if_contextList,
       { "contextList", "x509if.contextList",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SET_OF_Context", HFILL }},
     { &hf_x509if_contextList_item,
       { "Item", "x509if.contextList_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.Context", HFILL }},
     { &hf_x509if_contextType,
       { "contextType", "x509if.contextType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_contextValues,
       { "contextValues", "x509if.contextValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Context/contextValues", HFILL }},
+        "x509if.SET_OF_AttributeValue", HFILL }},
     { &hf_x509if_contextValues_item,
       { "Item", "x509if.contextValues_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Context/contextValues/_item", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_fallback,
       { "fallback", "x509if.fallback",
         FT_BOOLEAN, 8, NULL, 0,
-        "Context/fallback", HFILL }},
+        "x509if.BOOLEAN", HFILL }},
     { &hf_x509if_assertion,
       { "assertion", "x509if.assertion",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeValueAssertion/assertion", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_assertedContexts,
       { "assertedContexts", "x509if.assertedContexts",
         FT_UINT32, BASE_DEC, VALS(x509if_T_assertedContexts_vals), 0,
-        "AttributeValueAssertion/assertedContexts", HFILL }},
+        "x509if.T_assertedContexts", HFILL }},
     { &hf_x509if_allContexts,
       { "allContexts", "x509if.allContexts",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeValueAssertion/assertedContexts/allContexts", HFILL }},
+        "x509if.NULL", HFILL }},
     { &hf_x509if_selectedContexts,
       { "selectedContexts", "x509if.selectedContexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "AttributeValueAssertion/assertedContexts/selectedContexts", HFILL }},
+        "x509if.SET_OF_ContextAssertion", HFILL }},
     { &hf_x509if_selectedContexts_item,
       { "Item", "x509if.selectedContexts_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeValueAssertion/assertedContexts/selectedContexts/_item", HFILL }},
+        "x509if.ContextAssertion", HFILL }},
     { &hf_x509if_ca_contextType,
       { "contextType", "x509if.contextType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "ContextAssertion/contextType", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.ContextId", HFILL }},
     { &hf_x509if_ca_contextValues,
       { "contextValues", "x509if.contextValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ContextAssertion/contextValues", HFILL }},
+        "x509if.SET_OF_ContextValue", HFILL }},
     { &hf_x509if_ca_contextValues_item,
       { "Item", "x509if.contextValues_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ContextAssertion/contextValues/_item", HFILL }},
+        "x509if.ContextValue", HFILL }},
     { &hf_x509if_ata_assertedContexts,
       { "assertedContexts", "x509if.assertedContexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "AttributeTypeAssertion/assertedContexts", HFILL }},
-    { &hf_x509if_assertedContexts_item,
+        "x509if.SEQUENCE_OF_ContextAssertion", HFILL }},
+    { &hf_x509if_ata_assertedContexts_item,
       { "Item", "x509if.assertedContexts_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeTypeAssertion/assertedContexts/_item", HFILL }},
+        "x509if.ContextAssertion", HFILL }},
     { &hf_x509if_rdnSequence,
       { "rdnSequence", "x509if.rdnSequence",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Name/rdnSequence", HFILL }},
+        "x509if.RDNSequence", HFILL }},
     { &hf_x509if_RDNSequence_item,
       { "Item", "x509if.RDNSequence_item",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RDNSequence/_item", HFILL }},
+        "x509if.RDNSequence_item", HFILL }},
     { &hf_x509if_RelativeDistinguishedName_item,
       { "Item", "x509if.RelativeDistinguishedName_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RelativeDistinguishedName/_item", HFILL }},
+        "x509if.RelativeDistinguishedName_item", HFILL }},
     { &hf_x509if_atadv_value,
       { "value", "x509if.value",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeTypeAndDistinguishedValue/value", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_primaryDistinguished,
       { "primaryDistinguished", "x509if.primaryDistinguished",
         FT_BOOLEAN, 8, NULL, 0,
-        "AttributeTypeAndDistinguishedValue/primaryDistinguished", HFILL }},
+        "x509if.BOOLEAN", HFILL }},
     { &hf_x509if_valueswithContext,
       { "valuesWithContext", "x509if.valuesWithContext",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "AttributeTypeAndDistinguishedValue/valuesWithContext", HFILL }},
+        "x509if.T_valWithContext", HFILL }},
     { &hf_x509if_valueswithContext_item,
       { "Item", "x509if.valuesWithContext_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeTypeAndDistinguishedValue/valuesWithContext/_item", HFILL }},
+        "x509if.T_valWithContext_item", HFILL }},
     { &hf_x509if_distingAttrValue,
       { "distingAttrValue", "x509if.distingAttrValue",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AttributeTypeAndDistinguishedValue/valuesWithContext/_item/distingAttrValue", HFILL }},
+        "x509if.ValuesWithContextValue", HFILL }},
     { &hf_x509if_base,
       { "base", "x509if.base",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "SubtreeSpecification/base", HFILL }},
+        "x509if.LocalName", HFILL }},
     { &hf_x509if_specificExclusions,
       { "specificExclusions", "x509if.specificExclusions",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "SubtreeSpecification/specificExclusions", HFILL }},
+        "x509if.T_specificExclusions", HFILL }},
     { &hf_x509if_specificExclusions_item,
       { "Item", "x509if.specificExclusions_item",
         FT_UINT32, BASE_DEC, VALS(x509if_T_specificExclusions_item_vals), 0,
-        "SubtreeSpecification/specificExclusions/_item", HFILL }},
+        "x509if.T_specificExclusions_item", HFILL }},
     { &hf_x509if_chopBefore,
       { "chopBefore", "x509if.chopBefore",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.LocalName", HFILL }},
     { &hf_x509if_chopAfter,
       { "chopAfter", "x509if.chopAfter",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.LocalName", HFILL }},
     { &hf_x509if_minimum,
       { "minimum", "x509if.minimum",
         FT_INT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.BaseDistance", HFILL }},
     { &hf_x509if_maximum,
       { "maximum", "x509if.maximum",
         FT_INT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.BaseDistance", HFILL }},
     { &hf_x509if_specificationFilter,
       { "specificationFilter", "x509if.specificationFilter",
         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
-        "SubtreeSpecification/specificationFilter", HFILL }},
+        "x509if.Refinement", HFILL }},
     { &hf_x509if_chopSpecificExclusions,
       { "specificExclusions", "x509if.specificExclusions",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ChopSpecification/specificExclusions", HFILL }},
+        "x509if.T_chopSpecificExclusions", HFILL }},
     { &hf_x509if_chopSpecificExclusions_item,
       { "Item", "x509if.specificExclusions_item",
         FT_UINT32, BASE_DEC, VALS(x509if_T_chopSpecificExclusions_item_vals), 0,
-        "ChopSpecification/specificExclusions/_item", HFILL }},
+        "x509if.T_chopSpecificExclusions_item", HFILL }},
     { &hf_x509if_item,
       { "item", "x509if.item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "Refinement/item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_refinement_and,
       { "and", "x509if.and",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Refinement/and", HFILL }},
+        "x509if.SET_OF_Refinement", HFILL }},
     { &hf_x509if_refinement_and_item,
       { "Item", "x509if.and_item",
         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
-        "Refinement/and/_item", HFILL }},
+        "x509if.Refinement", HFILL }},
     { &hf_x509if_refinement_or,
       { "or", "x509if.or",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Refinement/or", HFILL }},
+        "x509if.SET_OF_Refinement", HFILL }},
     { &hf_x509if_refinement_or_item,
       { "Item", "x509if.or_item",
         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
-        "Refinement/or/_item", HFILL }},
+        "x509if.Refinement", HFILL }},
     { &hf_x509if_refinement_not,
       { "not", "x509if.not",
         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
-        "Refinement/not", HFILL }},
+        "x509if.Refinement", HFILL }},
     { &hf_x509if_ruleIdentifier,
       { "ruleIdentifier", "x509if.ruleIdentifier",
         FT_INT32, BASE_DEC, NULL, 0,
-        "DITStructureRule/ruleIdentifier", HFILL }},
+        "x509if.RuleIdentifier", HFILL }},
     { &hf_x509if_nameForm,
       { "nameForm", "x509if.nameForm",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITStructureRule/nameForm", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_superiorStructureRules,
       { "superiorStructureRules", "x509if.superiorStructureRules",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITStructureRule/superiorStructureRules", HFILL }},
+        "x509if.SET_OF_RuleIdentifier", HFILL }},
     { &hf_x509if_superiorStructureRules_item,
       { "Item", "x509if.superiorStructureRules_item",
         FT_INT32, BASE_DEC, NULL, 0,
-        "DITStructureRule/superiorStructureRules/_item", HFILL }},
+        "x509if.RuleIdentifier", HFILL }},
     { &hf_x509if_structuralObjectClass,
       { "structuralObjectClass", "x509if.structuralObjectClass",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContentRule/structuralObjectClass", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_auxiliaries,
       { "auxiliaries", "x509if.auxiliaries",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContentRule/auxiliaries", HFILL }},
+        "x509if.T_auxiliaries", HFILL }},
     { &hf_x509if_auxiliaries_item,
       { "Item", "x509if.auxiliaries_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContentRule/auxiliaries/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_mandatory,
       { "mandatory", "x509if.mandatory",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContentRule/mandatory", HFILL }},
+        "x509if.SET_SIZE_1_MAX_OF_AttributeId", HFILL }},
     { &hf_x509if_mandatory_item,
       { "Item", "x509if.mandatory_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContentRule/mandatory/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_optional,
       { "optional", "x509if.optional",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContentRule/optional", HFILL }},
+        "x509if.SET_SIZE_1_MAX_OF_AttributeId", HFILL }},
     { &hf_x509if_optional_item,
       { "Item", "x509if.optional_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContentRule/optional/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_precluded,
       { "precluded", "x509if.precluded",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContentRule/precluded", HFILL }},
+        "x509if.SET_SIZE_1_MAX_OF_AttributeId", HFILL }},
     { &hf_x509if_precluded_item,
       { "Item", "x509if.precluded_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContentRule/precluded/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_attributeType,
       { "attributeType", "x509if.attributeType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_mandatoryContexts,
       { "mandatoryContexts", "x509if.mandatoryContexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContextUse/mandatoryContexts", HFILL }},
+        "x509if.T_mandatoryContexts", HFILL }},
     { &hf_x509if_mandatoryContexts_item,
       { "Item", "x509if.mandatoryContexts_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContextUse/mandatoryContexts/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_optionalContexts,
       { "optionalContexts", "x509if.optionalContexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "DITContextUse/optionalContexts", HFILL }},
+        "x509if.T_optionalContexts", HFILL }},
     { &hf_x509if_optionalContexts_item,
       { "Item", "x509if.optionalContexts_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "DITContextUse/optionalContexts/_item", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_id,
       { "id", "x509if.id",
         FT_INT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_dmdId,
       { "dmdId", "x509if.dmdId",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_serviceType,
       { "serviceType", "x509if.serviceType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_userClass,
       { "userClass", "x509if.userClass",
         FT_INT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_inputAttributeTypes,
       { "inputAttributeTypes", "x509if.inputAttributeTypes",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SEQUENCE_OF_RequestAttribute", HFILL }},
     { &hf_x509if_inputAttributeTypes_item,
       { "Item", "x509if.inputAttributeTypes_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.RequestAttribute", HFILL }},
     { &hf_x509if_attributeCombination,
       { "attributeCombination", "x509if.attributeCombination",
         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
-        "", HFILL }},
+        "x509if.AttributeCombination", HFILL }},
     { &hf_x509if_outputAttributeTypes,
       { "outputAttributeTypes", "x509if.outputAttributeTypes",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SEQUENCE_OF_ResultAttribute", HFILL }},
     { &hf_x509if_outputAttributeTypes_item,
       { "Item", "x509if.outputAttributeTypes_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.ResultAttribute", HFILL }},
     { &hf_x509if_defaultControls,
       { "defaultControls", "x509if.defaultControls",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.ControlOptions", HFILL }},
     { &hf_x509if_mandatoryControls,
       { "mandatoryControls", "x509if.mandatoryControls",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.ControlOptions", HFILL }},
     { &hf_x509if_searchRuleControls,
       { "searchRuleControls", "x509if.searchRuleControls",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.ControlOptions", HFILL }},
     { &hf_x509if_relaxation,
       { "relaxation", "x509if.relaxation",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.RelaxationPolicy", HFILL }},
     { &hf_x509if_additionalControl,
       { "additionalControl", "x509if.additionalControl",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SEQUENCE_OF_AttributeType", HFILL }},
     { &hf_x509if_additionalControl_item,
       { "Item", "x509if.additionalControl_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeType", HFILL }},
     { &hf_x509if_allowedSubset,
       { "allowedSubset", "x509if.allowedSubset",
         FT_BYTES, BASE_HEX, NULL, 0,
-        "", HFILL }},
+        "x509if.AllowedSubset", HFILL }},
     { &hf_x509if_imposedSubset,
       { "imposedSubset", "x509if.imposedSubset",
         FT_UINT32, BASE_DEC, VALS(x509if_ImposedSubset_vals), 0,
-        "", HFILL }},
+        "x509if.ImposedSubset", HFILL }},
     { &hf_x509if_entryLimit,
       { "entryLimit", "x509if.entryLimit",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.EntryLimit", HFILL }},
     { &hf_x509if_name,
       { "name", "x509if.name",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "SearchRuleDescription/name", HFILL }},
+        "x509if.SET_OF_DirectoryString", HFILL }},
     { &hf_x509if_name_item,
       { "Item", "x509if.name_item",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "SearchRuleDescription/name/_item", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
+        "x509sat.DirectoryString", HFILL }},
     { &hf_x509if_description,
       { "description", "x509if.description",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "SearchRuleDescription/description", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
+        "x509sat.DirectoryString", HFILL }},
     { &hf_x509if_obsolete,
       { "obsolete", "x509if.obsolete",
         FT_BOOLEAN, 8, NULL, 0,
-        "SearchRuleDescription/obsolete", HFILL }},
+        "x509if.BOOLEAN", HFILL }},
     { &hf_x509if_includeSubtypes,
       { "includeSubtypes", "x509if.includeSubtypes",
         FT_BOOLEAN, 8, NULL, 0,
-        "RequestAttribute/includeSubtypes", HFILL }},
+        "x509if.BOOLEAN", HFILL }},
     { &hf_x509if_ra_selectedValues,
       { "selectedValues", "x509if.selectedValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RequestAttribute/selectedValues", HFILL }},
+        "x509if.SEQUENCE_OF_SelectedValues", HFILL }},
     { &hf_x509if_ra_selectedValues_item,
       { "Item", "x509if.selectedValues_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RequestAttribute/selectedValues/_item", HFILL }},
+        "x509if.SelectedValues", HFILL }},
     { &hf_x509if_defaultValues,
       { "defaultValues", "x509if.defaultValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RequestAttribute/defaultValues", HFILL }},
+        "x509if.T_defaultValues", HFILL }},
     { &hf_x509if_defaultValues_item,
       { "Item", "x509if.defaultValues_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RequestAttribute/defaultValues/_item", HFILL }},
+        "x509if.T_defaultValues_item", HFILL }},
     { &hf_x509if_entryType,
       { "entryType", "x509if.entryType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "RequestAttribute/defaultValues/_item/entryType", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.DefaultValueType", HFILL }},
     { &hf_x509if_ra_values,
       { "values", "x509if.values",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RequestAttribute/defaultValues/_item/values", HFILL }},
+        "x509if.SEQUENCE_OF_DefaultValueValues", HFILL }},
     { &hf_x509if_ra_values_item,
       { "Item", "x509if.values_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RequestAttribute/defaultValues/_item/values/_item", HFILL }},
+        "x509if.DefaultValueValues", HFILL }},
     { &hf_x509if_contexts,
       { "contexts", "x509if.contexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SEQUENCE_OF_ContextProfile", HFILL }},
     { &hf_x509if_contexts_item,
       { "Item", "x509if.contexts_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.ContextProfile", HFILL }},
     { &hf_x509if_contextCombination,
       { "contextCombination", "x509if.contextCombination",
         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
-        "RequestAttribute/contextCombination", HFILL }},
+        "x509if.ContextCombination", HFILL }},
     { &hf_x509if_matchingUse,
       { "matchingUse", "x509if.matchingUse",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RequestAttribute/matchingUse", HFILL }},
+        "x509if.SEQUENCE_OF_MatchingUse", HFILL }},
     { &hf_x509if_matchingUse_item,
       { "Item", "x509if.matchingUse_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RequestAttribute/matchingUse/_item", HFILL }},
+        "x509if.MatchingUse", HFILL }},
     { &hf_x509if_contextValue,
       { "contextValue", "x509if.contextValue",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ContextProfile/contextValue", HFILL }},
+        "x509if.SEQUENCE_OF_AttributeValue", HFILL }},
     { &hf_x509if_contextValue_item,
       { "Item", "x509if.contextValue_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ContextProfile/contextValue/_item", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_context,
       { "context", "x509if.context",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "ContextCombination/context", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_contextcombination_and,
       { "and", "x509if.and",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ContextCombination/and", HFILL }},
+        "x509if.SEQUENCE_OF_ContextCombination", HFILL }},
     { &hf_x509if_contextcombination_and_item,
       { "Item", "x509if.and_item",
         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
-        "ContextCombination/and/_item", HFILL }},
+        "x509if.ContextCombination", HFILL }},
     { &hf_x509if_contextcombination_or,
       { "or", "x509if.or",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ContextCombination/or", HFILL }},
+        "x509if.SEQUENCE_OF_ContextCombination", HFILL }},
     { &hf_x509if_contextcombination_or_item,
       { "Item", "x509if.or_item",
         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
-        "ContextCombination/or/_item", HFILL }},
+        "x509if.ContextCombination", HFILL }},
     { &hf_x509if_contextcombination_not,
       { "not", "x509if.not",
         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
-        "ContextCombination/not", HFILL }},
+        "x509if.ContextCombination", HFILL }},
     { &hf_x509if_restrictionType,
       { "restrictionType", "x509if.restrictionType",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "MatchingUse/restrictionType", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeId", HFILL }},
     { &hf_x509if_restrictionValue,
       { "restrictionValue", "x509if.restrictionValue",
         FT_NONE, BASE_NONE, NULL, 0,
-        "MatchingUse/restrictionValue", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_attribute,
       { "attribute", "x509if.attribute",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.AttributeType", HFILL }},
     { &hf_x509if_and,
       { "and", "x509if.and",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "AttributeCombination/and", HFILL }},
+        "x509if.SEQUENCE_OF_AttributeCombination", HFILL }},
     { &hf_x509if_and_item,
       { "Item", "x509if.and_item",
         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
-        "AttributeCombination/and/_item", HFILL }},
+        "x509if.AttributeCombination", HFILL }},
     { &hf_x509if_or,
       { "or", "x509if.or",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "AttributeCombination/or", HFILL }},
+        "x509if.SEQUENCE_OF_AttributeCombination", HFILL }},
     { &hf_x509if_or_item,
       { "Item", "x509if.or_item",
         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
-        "AttributeCombination/or/_item", HFILL }},
+        "x509if.AttributeCombination", HFILL }},
     { &hf_x509if_not,
       { "not", "x509if.not",
         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
-        "AttributeCombination/not", HFILL }},
+        "x509if.AttributeCombination", HFILL }},
     { &hf_x509if_outputValues,
       { "outputValues", "x509if.outputValues",
         FT_UINT32, BASE_DEC, VALS(x509if_T_outputValues_vals), 0,
-        "ResultAttribute/outputValues", HFILL }},
+        "x509if.T_outputValues", HFILL }},
     { &hf_x509if_selectedValues,
       { "selectedValues", "x509if.selectedValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.SEQUENCE_OF_AttributeValue", HFILL }},
     { &hf_x509if_selectedValues_item,
       { "Item", "x509if.selectedValues_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.AttributeValue", HFILL }},
     { &hf_x509if_matchedValuesOnly,
       { "matchedValuesOnly", "x509if.matchedValuesOnly",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.NULL", HFILL }},
     { &hf_x509if_default,
       { "default", "x509if.default",
         FT_INT32, BASE_DEC, NULL, 0,
-        "EntryLimit/default", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_max,
       { "max", "x509if.max",
         FT_INT32, BASE_DEC, NULL, 0,
-        "EntryLimit/max", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_basic,
       { "basic", "x509if.basic",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RelaxationPolicy/basic", HFILL }},
+        "x509if.MRMapping", HFILL }},
     { &hf_x509if_tightenings,
       { "tightenings", "x509if.tightenings",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RelaxationPolicy/tightenings", HFILL }},
+        "x509if.SEQUENCE_OF_MRMapping", HFILL }},
     { &hf_x509if_tightenings_item,
       { "Item", "x509if.tightenings_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RelaxationPolicy/tightenings/_item", HFILL }},
+        "x509if.MRMapping", HFILL }},
     { &hf_x509if_relaxations,
       { "relaxations", "x509if.relaxations",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "RelaxationPolicy/relaxations", HFILL }},
+        "x509if.SEQUENCE_OF_MRMapping", HFILL }},
     { &hf_x509if_relaxations_item,
       { "Item", "x509if.relaxations_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "RelaxationPolicy/relaxations/_item", HFILL }},
+        "x509if.MRMapping", HFILL }},
     { &hf_x509if_maximum_relaxation,
       { "maximum", "x509if.maximum",
         FT_INT32, BASE_DEC, NULL, 0,
-        "RelaxationPolicy/maximum", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_minimum_relaxation,
       { "minimum", "x509if.minimum",
         FT_INT32, BASE_DEC, NULL, 0,
-        "RelaxationPolicy/minimum", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_mapping,
       { "mapping", "x509if.mapping",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "MRMapping/mapping", HFILL }},
+        "x509if.SEQUENCE_OF_Mapping", HFILL }},
     { &hf_x509if_mapping_item,
       { "Item", "x509if.mapping_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "MRMapping/mapping/_item", HFILL }},
+        "x509if.Mapping", HFILL }},
     { &hf_x509if_substitution,
       { "substitution", "x509if.substitution",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "MRMapping/substitution", HFILL }},
+        "x509if.SEQUENCE_OF_MRSubstitution", HFILL }},
     { &hf_x509if_substitution_item,
       { "Item", "x509if.substitution_item",
         FT_NONE, BASE_NONE, NULL, 0,
-        "MRMapping/substitution/_item", HFILL }},
+        "x509if.MRSubstitution", HFILL }},
     { &hf_x509if_mappingFunction,
       { "mappingFunction", "x509if.mappingFunction",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "Mapping/mappingFunction", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_level,
       { "level", "x509if.level",
         FT_INT32, BASE_DEC, NULL, 0,
-        "Mapping/level", HFILL }},
+        "x509if.INTEGER", HFILL }},
     { &hf_x509if_oldMatchingRule,
       { "oldMatchingRule", "x509if.oldMatchingRule",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "MRSubstitution/oldMatchingRule", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_newMatchingRule,
       { "newMatchingRule", "x509if.newMatchingRule",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "MRSubstitution/newMatchingRule", HFILL }},
+        FT_OID, BASE_NONE, NULL, 0,
+        "x509if.OBJECT_IDENTIFIER", HFILL }},
     { &hf_x509if_AllowedSubset_baseObject,
       { "baseObject", "x509if.baseObject",
         FT_BOOLEAN, 8, NULL, 0x80,
@@ -2751,14 +2448,14 @@ void proto_register_x509if(void) {
         "", HFILL }},
 
 /*--- End of included file: packet-x509if-hfarr.c ---*/
-
+#line 124 "packet-x509if-template.c"
   };
 
   /* List of subtrees */
   static gint *ett[] = {
 
 /*--- Included file: packet-x509if-ettarr.c ---*/
-
+#line 1 "packet-x509if-ettarr.c"
     &ett_x509if_Attribute,
     &ett_x509if_SET_OF_AttributeValue,
     &ett_x509if_T_valuesWithContext,
@@ -2830,7 +2527,7 @@ void proto_register_x509if(void) {
     &ett_x509if_MRSubstitution,
 
 /*--- End of included file: packet-x509if-ettarr.c ---*/
-
+#line 129 "packet-x509if-template.c"
   };
 
   /* Register protocol */
@@ -2840,11 +2537,49 @@ void proto_register_x509if(void) {
   proto_register_field_array(proto_x509if, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 
+  /* initialise array */
+  fmt_vals[0].value = 0;
+  fmt_vals[0].strptr = NULL;
+
 }
 
 
 /*--- proto_reg_handoff_x509if -------------------------------------------*/
 void proto_reg_handoff_x509if(void) {
 
+/*--- Included file: packet-x509if-dis-tab.c ---*/
+#line 1 "packet-x509if-dis-tab.c"
+  register_ber_oid_dissector("2.5.4.1", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aliasedEntryName");
+  register_ber_oid_dissector("2.5.4.31", dissect_DistinguishedName_PDU, proto_x509if, "id-at-member");
+  register_ber_oid_dissector("2.5.4.32", dissect_DistinguishedName_PDU, proto_x509if, "id-at-owner");
+  register_ber_oid_dissector("2.5.4.33", dissect_DistinguishedName_PDU, proto_x509if, "id-at-roleOccupant");
+  register_ber_oid_dissector("2.5.4.34", dissect_DistinguishedName_PDU, proto_x509if, "id-at-seeAlso");
+  register_ber_oid_dissector("2.5.4.49", dissect_DistinguishedName_PDU, proto_x509if, "id-at-distinguishedName");
+  register_ber_oid_dissector("2.5.18.3", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-creatorsName");
+  register_ber_oid_dissector("2.5.18.4", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-modifiersName");
+  register_ber_oid_dissector("2.5.18.10", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-subschemaSubentry");
+  register_ber_oid_dissector("2.5.18.11", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-subschemaSubentry");
+  register_ber_oid_dissector("2.5.18.12", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-collectiveAttributeSubentry");
+  register_ber_oid_dissector("2.5.18.13", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-contextDefaultSubentry");
+  register_ber_oid_dissector("2.6.5.2.5", dissect_DistinguishedName_PDU, proto_x509if, "id-at-mhs-message-store-dn");
+  register_ber_oid_dissector("2.6.5.2.14", dissect_DistinguishedName_PDU, proto_x509if, "id-at-mhs-dl-related-lists");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.3", dissect_DistinguishedName_PDU, proto_x509if, "id-at-alternateRecipient");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.4", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedOrganization");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.6", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedPLA");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.49", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aliasPointer");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.61", dissect_DistinguishedName_PDU, proto_x509if, "id-at-listPointer");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.110", dissect_DistinguishedName_PDU, proto_x509if, "id-at-administrator");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.111", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aigsExpanded");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.113", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedAL");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.114", dissect_DistinguishedName_PDU, proto_x509if, "id-at-copyMember");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.117", dissect_DistinguishedName_PDU, proto_x509if, "id-at-guard");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.121", dissect_DistinguishedName_PDU, proto_x509if, "id-at-networkDN");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.138", dissect_DistinguishedName_PDU, proto_x509if, "id-at-plasServed");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.139", dissect_DistinguishedName_PDU, proto_x509if, "id-at-deployed");
+  register_ber_oid_dissector("2.16.840.1.101.2.2.1.140", dissect_DistinguishedName_PDU, proto_x509if, "id-at-garrison");
+
+
+/*--- End of included file: packet-x509if-dis-tab.c ---*/
+#line 148 "packet-x509if-template.c"
 }