75f96454f1bafdeca8ad9bbfd4bdd1c4e3373d5a
[obnox/wireshark/wip.git] / epan / dissectors / packet-x509if.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-x509if.c                                                            */
4 /* ../../tools/asn2wrs.py -b -e -p x509if -c ./x509if.cnf -s ./packet-x509if-template -D . InformationFramework.asn ServiceAdministration.asn */
5
6 /* Input file: packet-x509if-template.c */
7
8 #line 1 "packet-x509if-template.c"
9 /* packet-x509if.c
10  * Routines for X.509 Information Framework packet dissection
11  *  Ronnie Sahlberg 2004
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/oids.h>
41 #include <epan/asn1.h>
42
43 #include "packet-ber.h"
44 #include "packet-dap.h"
45 #include "packet-x509if.h"
46 #include "packet-x509sat.h"
47 #include <epan/strutil.h>
48
49 #define PNAME  "X.509 Information Framework"
50 #define PSNAME "X509IF"
51 #define PFNAME "x509if"
52
53 /* Initialize the protocol and registered fields */
54 static int proto_x509if = -1;
55 static int hf_x509if_object_identifier_id = -1;
56 static int hf_x509if_any_string = -1;
57
58 /*--- Included file: packet-x509if-hf.c ---*/
59 #line 1 "packet-x509if-hf.c"
60 static int hf_x509if_DistinguishedName_PDU = -1;  /* DistinguishedName */
61 static int hf_x509if_SubtreeSpecification_PDU = -1;  /* SubtreeSpecification */
62 static int hf_x509if_HierarchyLevel_PDU = -1;     /* HierarchyLevel */
63 static int hf_x509if_HierarchyBelow_PDU = -1;     /* HierarchyBelow */
64 static int hf_x509if_type = -1;                   /* T_type */
65 static int hf_x509if_values = -1;                 /* T_values */
66 static int hf_x509if_values_item = -1;            /* T_values_item */
67 static int hf_x509if_valuesWithContext = -1;      /* T_valuesWithContext */
68 static int hf_x509if_valuesWithContext_item = -1;  /* T_valuesWithContext_item */
69 static int hf_x509if_value = -1;                  /* T_value */
70 static int hf_x509if_contextList = -1;            /* SET_SIZE_1_MAX_OF_Context */
71 static int hf_x509if_contextList_item = -1;       /* Context */
72 static int hf_x509if_contextType = -1;            /* T_contextType */
73 static int hf_x509if_contextValues = -1;          /* T_contextValues */
74 static int hf_x509if_contextValues_item = -1;     /* T_contextValues_item */
75 static int hf_x509if_fallback = -1;               /* BOOLEAN */
76 static int hf_x509if_type_01 = -1;                /* T_type_01 */
77 static int hf_x509if_assertion = -1;              /* T_assertion */
78 static int hf_x509if_assertedContexts = -1;       /* T_assertedContexts */
79 static int hf_x509if_allContexts = -1;            /* NULL */
80 static int hf_x509if_selectedContexts = -1;       /* SET_SIZE_1_MAX_OF_ContextAssertion */
81 static int hf_x509if_selectedContexts_item = -1;  /* ContextAssertion */
82 static int hf_x509if_ca_contextType = -1;         /* T_ca_contextType */
83 static int hf_x509if_ca_contextValues = -1;       /* T_ca_contextValues */
84 static int hf_x509if_ca_contextValues_item = -1;  /* T_ca_contextValues_item */
85 static int hf_x509if_type_02 = -1;                /* OBJECT_IDENTIFIER */
86 static int hf_x509if_ata_assertedContexts = -1;   /* SEQUENCE_SIZE_1_MAX_OF_ContextAssertion */
87 static int hf_x509if_ata_assertedContexts_item = -1;  /* ContextAssertion */
88 static int hf_x509if_rdnSequence = -1;            /* RDNSequence */
89 static int hf_x509if_RDNSequence_item = -1;       /* RDNSequence_item */
90 static int hf_x509if_RelativeDistinguishedName_item = -1;  /* RelativeDistinguishedName_item */
91 static int hf_x509if_type_03 = -1;                /* T_type_02 */
92 static int hf_x509if_atadv_value = -1;            /* T_atadv_value */
93 static int hf_x509if_primaryDistinguished = -1;   /* BOOLEAN */
94 static int hf_x509if_valueswithContext = -1;      /* T_valWithContext */
95 static int hf_x509if_valueswithContext_item = -1;  /* T_valWithContext_item */
96 static int hf_x509if_distingAttrValue = -1;       /* T_distingAttrValue */
97 static int hf_x509if_chopSpecificExclusions = -1;  /* T_chopSpecificExclusions */
98 static int hf_x509if_chopSpecificExclusions_item = -1;  /* T_chopSpecificExclusions_item */
99 static int hf_x509if_chopBefore = -1;             /* LocalName */
100 static int hf_x509if_chopAfter = -1;              /* LocalName */
101 static int hf_x509if_minimum = -1;                /* BaseDistance */
102 static int hf_x509if_maximum = -1;                /* BaseDistance */
103 static int hf_x509if_item = -1;                   /* OBJECT_IDENTIFIER */
104 static int hf_x509if_refinement_and = -1;         /* SET_OF_Refinement */
105 static int hf_x509if_refinement_and_item = -1;    /* Refinement */
106 static int hf_x509if_refinement_or = -1;          /* SET_OF_Refinement */
107 static int hf_x509if_refinement_or_item = -1;     /* Refinement */
108 static int hf_x509if_refinement_not = -1;         /* Refinement */
109 static int hf_x509if_ruleIdentifier = -1;         /* RuleIdentifier */
110 static int hf_x509if_nameForm = -1;               /* OBJECT_IDENTIFIER */
111 static int hf_x509if_superiorStructureRules = -1;  /* SET_SIZE_1_MAX_OF_RuleIdentifier */
112 static int hf_x509if_superiorStructureRules_item = -1;  /* RuleIdentifier */
113 static int hf_x509if_structuralObjectClass = -1;  /* OBJECT_IDENTIFIER */
114 static int hf_x509if_auxiliaries = -1;            /* T_auxiliaries */
115 static int hf_x509if_auxiliaries_item = -1;       /* OBJECT_IDENTIFIER */
116 static int hf_x509if_mandatory = -1;              /* T_mandatory */
117 static int hf_x509if_mandatory_item = -1;         /* OBJECT_IDENTIFIER */
118 static int hf_x509if_optional = -1;               /* T_optional */
119 static int hf_x509if_optional_item = -1;          /* OBJECT_IDENTIFIER */
120 static int hf_x509if_precluded = -1;              /* T_precluded */
121 static int hf_x509if_precluded_item = -1;         /* OBJECT_IDENTIFIER */
122 static int hf_x509if_attributeType = -1;          /* OBJECT_IDENTIFIER */
123 static int hf_x509if_mandatoryContexts = -1;      /* T_mandatoryContexts */
124 static int hf_x509if_mandatoryContexts_item = -1;  /* OBJECT_IDENTIFIER */
125 static int hf_x509if_optionalContexts = -1;       /* T_optionalContexts */
126 static int hf_x509if_optionalContexts_item = -1;  /* OBJECT_IDENTIFIER */
127 static int hf_x509if_id = -1;                     /* INTEGER */
128 static int hf_x509if_dmdId = -1;                  /* OBJECT_IDENTIFIER */
129 static int hf_x509if_attributeType_01 = -1;       /* T_attributeType */
130 static int hf_x509if_includeSubtypes = -1;        /* BOOLEAN */
131 static int hf_x509if_ra_selectedValues = -1;      /* T_ra_selectedValues */
132 static int hf_x509if_ra_selectedValues_item = -1;  /* T_ra_selectedValues_item */
133 static int hf_x509if_defaultValues = -1;          /* T_defaultValues */
134 static int hf_x509if_defaultValues_item = -1;     /* T_defaultValues_item */
135 static int hf_x509if_entryType = -1;              /* T_entryType */
136 static int hf_x509if_ra_values = -1;              /* T_ra_values */
137 static int hf_x509if_ra_values_item = -1;         /* T_ra_values_item */
138 static int hf_x509if_contexts = -1;               /* SEQUENCE_SIZE_0_MAX_OF_ContextProfile */
139 static int hf_x509if_contexts_item = -1;          /* ContextProfile */
140 static int hf_x509if_contextCombination = -1;     /* ContextCombination */
141 static int hf_x509if_matchingUse = -1;            /* SEQUENCE_SIZE_1_MAX_OF_MatchingUse */
142 static int hf_x509if_matchingUse_item = -1;       /* MatchingUse */
143 static int hf_x509if_contextType_01 = -1;         /* T_contextType_01 */
144 static int hf_x509if_contextValue = -1;           /* T_contextValue */
145 static int hf_x509if_contextValue_item = -1;      /* T_contextValue_item */
146 static int hf_x509if_context = -1;                /* OBJECT_IDENTIFIER */
147 static int hf_x509if_contextcombination_and = -1;  /* SEQUENCE_OF_ContextCombination */
148 static int hf_x509if_contextcombination_and_item = -1;  /* ContextCombination */
149 static int hf_x509if_contextcombination_or = -1;  /* SEQUENCE_OF_ContextCombination */
150 static int hf_x509if_contextcombination_or_item = -1;  /* ContextCombination */
151 static int hf_x509if_contextcombination_not = -1;  /* ContextCombination */
152 static int hf_x509if_restrictionType = -1;        /* T_restrictionType */
153 static int hf_x509if_restrictionValue = -1;       /* T_restrictionValue */
154 static int hf_x509if_attribute = -1;              /* AttributeType */
155 static int hf_x509if_and = -1;                    /* SEQUENCE_OF_AttributeCombination */
156 static int hf_x509if_and_item = -1;               /* AttributeCombination */
157 static int hf_x509if_or = -1;                     /* SEQUENCE_OF_AttributeCombination */
158 static int hf_x509if_or_item = -1;                /* AttributeCombination */
159 static int hf_x509if_not = -1;                    /* AttributeCombination */
160 static int hf_x509if_attributeType_02 = -1;       /* T_attributeType_01 */
161 static int hf_x509if_outputValues = -1;           /* T_outputValues */
162 static int hf_x509if_selectedValues = -1;         /* T_selectedValues */
163 static int hf_x509if_selectedValues_item = -1;    /* T_selectedValues_item */
164 static int hf_x509if_matchedValuesOnly = -1;      /* NULL */
165 static int hf_x509if_contexts_01 = -1;            /* SEQUENCE_SIZE_1_MAX_OF_ContextProfile */
166 static int hf_x509if_serviceControls = -1;        /* ServiceControlOptions */
167 static int hf_x509if_searchOptions = -1;          /* SearchControlOptions */
168 static int hf_x509if_hierarchyOptions = -1;       /* HierarchySelections */
169 static int hf_x509if_default = -1;                /* INTEGER */
170 static int hf_x509if_max = -1;                    /* INTEGER */
171 static int hf_x509if_basic = -1;                  /* MRMapping */
172 static int hf_x509if_tightenings = -1;            /* SEQUENCE_SIZE_1_MAX_OF_MRMapping */
173 static int hf_x509if_tightenings_item = -1;       /* MRMapping */
174 static int hf_x509if_relaxations = -1;            /* SEQUENCE_SIZE_1_MAX_OF_MRMapping */
175 static int hf_x509if_relaxations_item = -1;       /* MRMapping */
176 static int hf_x509if_maximum_relaxation = -1;     /* INTEGER */
177 static int hf_x509if_minimum_relaxation = -1;     /* INTEGER */
178 static int hf_x509if_mapping = -1;                /* SEQUENCE_SIZE_1_MAX_OF_Mapping */
179 static int hf_x509if_mapping_item = -1;           /* Mapping */
180 static int hf_x509if_substitution = -1;           /* SEQUENCE_SIZE_1_MAX_OF_MRSubstitution */
181 static int hf_x509if_substitution_item = -1;      /* MRSubstitution */
182 static int hf_x509if_mappingFunction = -1;        /* OBJECT_IDENTIFIER */
183 static int hf_x509if_level = -1;                  /* INTEGER */
184 static int hf_x509if_oldMatchingRule = -1;        /* OBJECT_IDENTIFIER */
185 static int hf_x509if_newMatchingRule = -1;        /* OBJECT_IDENTIFIER */
186 static int hf_x509if_base = -1;                   /* LocalName */
187 static int hf_x509if_specificExclusions = -1;     /* T_specificExclusions */
188 static int hf_x509if_specificExclusions_item = -1;  /* T_specificExclusions_item */
189 static int hf_x509if_specificationFilter = -1;    /* Refinement */
190 static int hf_x509if_serviceType = -1;            /* OBJECT_IDENTIFIER */
191 static int hf_x509if_userClass = -1;              /* INTEGER */
192 static int hf_x509if_inputAttributeTypes = -1;    /* SEQUENCE_SIZE_0_MAX_OF_RequestAttribute */
193 static int hf_x509if_inputAttributeTypes_item = -1;  /* RequestAttribute */
194 static int hf_x509if_attributeCombination = -1;   /* AttributeCombination */
195 static int hf_x509if_outputAttributeTypes = -1;   /* SEQUENCE_SIZE_1_MAX_OF_ResultAttribute */
196 static int hf_x509if_outputAttributeTypes_item = -1;  /* ResultAttribute */
197 static int hf_x509if_defaultControls = -1;        /* ControlOptions */
198 static int hf_x509if_mandatoryControls = -1;      /* ControlOptions */
199 static int hf_x509if_searchRuleControls = -1;     /* ControlOptions */
200 static int hf_x509if_familyGrouping = -1;         /* FamilyGrouping */
201 static int hf_x509if_familyReturn = -1;           /* FamilyReturn */
202 static int hf_x509if_relaxation = -1;             /* RelaxationPolicy */
203 static int hf_x509if_additionalControl = -1;      /* SEQUENCE_SIZE_1_MAX_OF_AttributeType */
204 static int hf_x509if_additionalControl_item = -1;  /* AttributeType */
205 static int hf_x509if_allowedSubset = -1;          /* AllowedSubset */
206 static int hf_x509if_imposedSubset = -1;          /* ImposedSubset */
207 static int hf_x509if_entryLimit = -1;             /* EntryLimit */
208 static int hf_x509if_name = -1;                   /* SET_SIZE_1_MAX_OF_DirectoryString */
209 static int hf_x509if_name_item = -1;              /* DirectoryString */
210 static int hf_x509if_description = -1;            /* DirectoryString */
211 /* named bits */
212 static int hf_x509if_AllowedSubset_baseObject = -1;
213 static int hf_x509if_AllowedSubset_oneLevel = -1;
214 static int hf_x509if_AllowedSubset_wholeSubtree = -1;
215
216 /*--- End of included file: packet-x509if-hf.c ---*/
217 #line 50 "packet-x509if-template.c"
218
219 /* Initialize the subtree pointers */
220
221 /*--- Included file: packet-x509if-ett.c ---*/
222 #line 1 "packet-x509if-ett.c"
223 static gint ett_x509if_Attribute = -1;
224 static gint ett_x509if_T_values = -1;
225 static gint ett_x509if_T_valuesWithContext = -1;
226 static gint ett_x509if_T_valuesWithContext_item = -1;
227 static gint ett_x509if_SET_SIZE_1_MAX_OF_Context = -1;
228 static gint ett_x509if_Context = -1;
229 static gint ett_x509if_T_contextValues = -1;
230 static gint ett_x509if_AttributeValueAssertion = -1;
231 static gint ett_x509if_T_assertedContexts = -1;
232 static gint ett_x509if_SET_SIZE_1_MAX_OF_ContextAssertion = -1;
233 static gint ett_x509if_ContextAssertion = -1;
234 static gint ett_x509if_T_ca_contextValues = -1;
235 static gint ett_x509if_AttributeTypeAssertion = -1;
236 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextAssertion = -1;
237 static gint ett_x509if_Name = -1;
238 static gint ett_x509if_RDNSequence = -1;
239 static gint ett_x509if_RelativeDistinguishedName = -1;
240 static gint ett_x509if_AttributeTypeAndDistinguishedValue = -1;
241 static gint ett_x509if_T_valWithContext = -1;
242 static gint ett_x509if_T_valWithContext_item = -1;
243 static gint ett_x509if_SubtreeSpecification = -1;
244 static gint ett_x509if_ChopSpecification = -1;
245 static gint ett_x509if_T_chopSpecificExclusions = -1;
246 static gint ett_x509if_T_chopSpecificExclusions_item = -1;
247 static gint ett_x509if_Refinement = -1;
248 static gint ett_x509if_SET_OF_Refinement = -1;
249 static gint ett_x509if_DITStructureRule = -1;
250 static gint ett_x509if_SET_SIZE_1_MAX_OF_RuleIdentifier = -1;
251 static gint ett_x509if_DITContentRule = -1;
252 static gint ett_x509if_T_auxiliaries = -1;
253 static gint ett_x509if_T_mandatory = -1;
254 static gint ett_x509if_T_optional = -1;
255 static gint ett_x509if_T_precluded = -1;
256 static gint ett_x509if_DITContextUse = -1;
257 static gint ett_x509if_T_mandatoryContexts = -1;
258 static gint ett_x509if_T_optionalContexts = -1;
259 static gint ett_x509if_SearchRuleDescription = -1;
260 static gint ett_x509if_SearchRule = -1;
261 static gint ett_x509if_SearchRuleId = -1;
262 static gint ett_x509if_AllowedSubset = -1;
263 static gint ett_x509if_RequestAttribute = -1;
264 static gint ett_x509if_T_ra_selectedValues = -1;
265 static gint ett_x509if_T_defaultValues = -1;
266 static gint ett_x509if_T_defaultValues_item = -1;
267 static gint ett_x509if_T_ra_values = -1;
268 static gint ett_x509if_SEQUENCE_SIZE_0_MAX_OF_ContextProfile = -1;
269 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MatchingUse = -1;
270 static gint ett_x509if_ContextProfile = -1;
271 static gint ett_x509if_T_contextValue = -1;
272 static gint ett_x509if_ContextCombination = -1;
273 static gint ett_x509if_SEQUENCE_OF_ContextCombination = -1;
274 static gint ett_x509if_MatchingUse = -1;
275 static gint ett_x509if_AttributeCombination = -1;
276 static gint ett_x509if_SEQUENCE_OF_AttributeCombination = -1;
277 static gint ett_x509if_ResultAttribute = -1;
278 static gint ett_x509if_T_outputValues = -1;
279 static gint ett_x509if_T_selectedValues = -1;
280 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextProfile = -1;
281 static gint ett_x509if_ControlOptions = -1;
282 static gint ett_x509if_EntryLimit = -1;
283 static gint ett_x509if_RelaxationPolicy = -1;
284 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRMapping = -1;
285 static gint ett_x509if_MRMapping = -1;
286 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_Mapping = -1;
287 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRSubstitution = -1;
288 static gint ett_x509if_Mapping = -1;
289 static gint ett_x509if_MRSubstitution = -1;
290 static gint ett_x509if_T_specificExclusions = -1;
291 static gint ett_x509if_T_specificExclusions_item = -1;
292 static gint ett_x509if_SEQUENCE_SIZE_0_MAX_OF_RequestAttribute = -1;
293 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ResultAttribute = -1;
294 static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType = -1;
295 static gint ett_x509if_SET_SIZE_1_MAX_OF_DirectoryString = -1;
296
297 /*--- End of included file: packet-x509if-ett.c ---*/
298 #line 53 "packet-x509if-template.c"
299
300 static const char *object_identifier_id;
301 static proto_tree *top_of_dn = NULL;
302 static proto_tree *top_of_rdn = NULL;
303
304 static gboolean rdn_one_value = FALSE; /* have we seen one value in an RDN yet */
305 static gboolean dn_one_rdn = FALSE; /* have we seen one RDN in a DN yet */
306 static gboolean doing_dn = TRUE;
307 static gboolean doing_attr = FALSE;
308
309 #define MAX_RDN_STR_LEN   64
310 #define MAX_DN_STR_LEN    (20 * MAX_RDN_STR_LEN)
311
312 static char *last_dn = NULL;
313 static char *last_rdn = NULL;
314
315 static int ava_hf_index;
316 #define MAX_FMT_VALS   32
317 static value_string fmt_vals[MAX_FMT_VALS];
318 #define MAX_AVA_STR_LEN   64
319 static char *last_ava = NULL;
320
321
322 /*--- Included file: packet-x509if-fn.c ---*/
323 #line 1 "packet-x509if-fn.c"
324 /*--- Cyclic dependencies ---*/
325
326 /* Refinement -> Refinement/and -> Refinement */
327 /* Refinement -> Refinement */
328 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_);
329
330 /* ContextCombination -> ContextCombination/and -> ContextCombination */
331 /* ContextCombination -> ContextCombination */
332 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_);
333
334 /* AttributeCombination -> AttributeCombination/and -> AttributeCombination */
335 /* AttributeCombination -> AttributeCombination */
336 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_);
337
338
339
340
341 static int
342 dissect_x509if_T_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
343   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
344
345   return offset;
346 }
347
348
349
350 static int
351 dissect_x509if_T_values_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_) {
352 #line 310 "x509if.cnf"
353   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
354
355
356
357   return offset;
358 }
359
360
361 static const ber_sequence_t T_values_set_of[1] = {
362   { &hf_x509if_values_item  , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_values_item },
363 };
364
365 static int
366 dissect_x509if_T_values(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
367   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
368                                  T_values_set_of, hf_index, ett_x509if_T_values);
369
370   return offset;
371 }
372
373
374
375 static int
376 dissect_x509if_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
377 #line 280 "x509if.cnf"
378   offset=call_ber_oid_callback("unknown", tvb, offset, actx->pinfo, tree);
379
380
381
382   return offset;
383 }
384
385
386
387 static int
388 dissect_x509if_T_contextType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
389   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
390
391   return offset;
392 }
393
394
395
396 static int
397 dissect_x509if_T_contextValues_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_) {
398 #line 292 "x509if.cnf"
399   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
400
401
402
403   return offset;
404 }
405
406
407 static const ber_sequence_t T_contextValues_set_of[1] = {
408   { &hf_x509if_contextValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextValues_item },
409 };
410
411 static int
412 dissect_x509if_T_contextValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
413   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
414                                  T_contextValues_set_of, hf_index, ett_x509if_T_contextValues);
415
416   return offset;
417 }
418
419
420
421 static int
422 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_) {
423   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
424
425   return offset;
426 }
427
428
429 static const ber_sequence_t Context_sequence[] = {
430   { &hf_x509if_contextType  , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextType },
431   { &hf_x509if_contextValues, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextValues },
432   { &hf_x509if_fallback     , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_BOOLEAN },
433   { NULL, 0, 0, 0, NULL }
434 };
435
436 int
437 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_) {
438   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
439                                    Context_sequence, hf_index, ett_x509if_Context);
440
441   return offset;
442 }
443
444
445 static const ber_sequence_t SET_SIZE_1_MAX_OF_Context_set_of[1] = {
446   { &hf_x509if_contextList_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Context },
447 };
448
449 static int
450 dissect_x509if_SET_SIZE_1_MAX_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_) {
451   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
452                                  SET_SIZE_1_MAX_OF_Context_set_of, hf_index, ett_x509if_SET_SIZE_1_MAX_OF_Context);
453
454   return offset;
455 }
456
457
458 static const ber_sequence_t T_valuesWithContext_item_sequence[] = {
459   { &hf_x509if_value        , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_value },
460   { &hf_x509if_contextList  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_SIZE_1_MAX_OF_Context },
461   { NULL, 0, 0, 0, NULL }
462 };
463
464 static int
465 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_) {
466   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
467                                    T_valuesWithContext_item_sequence, hf_index, ett_x509if_T_valuesWithContext_item);
468
469   return offset;
470 }
471
472
473 static const ber_sequence_t T_valuesWithContext_set_of[1] = {
474   { &hf_x509if_valuesWithContext_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_valuesWithContext_item },
475 };
476
477 static int
478 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_) {
479   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
480                                  T_valuesWithContext_set_of, hf_index, ett_x509if_T_valuesWithContext);
481
482   return offset;
483 }
484
485
486 static const ber_sequence_t Attribute_sequence[] = {
487   { &hf_x509if_type         , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_type },
488   { &hf_x509if_values       , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_T_values },
489   { &hf_x509if_valuesWithContext, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_valuesWithContext },
490   { NULL, 0, 0, 0, NULL }
491 };
492
493 int
494 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_) {
495 #line 411 "x509if.cnf"
496         doing_attr = TRUE;
497
498           offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
499                                    Attribute_sequence, hf_index, ett_x509if_Attribute);
500
501
502         doing_attr = FALSE;
503
504
505   return offset;
506 }
507
508
509
510 int
511 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_) {
512   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
513
514   return offset;
515 }
516
517
518
519 int
520 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_) {
521 #line 298 "x509if.cnf"
522   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
523
524
525
526   return offset;
527 }
528
529
530
531 static int
532 dissect_x509if_T_type_01(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
533   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
534
535   return offset;
536 }
537
538
539
540 static int
541 dissect_x509if_T_assertion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
542 #line 304 "x509if.cnf"
543   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
544
545
546
547   return offset;
548 }
549
550
551
552 static int
553 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_) {
554   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
555
556   return offset;
557 }
558
559
560
561 static int
562 dissect_x509if_T_ca_contextType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
563   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
564
565   return offset;
566 }
567
568
569
570 static int
571 dissect_x509if_T_ca_contextValues_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_) {
572 #line 184 "x509if.cnf"
573   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
574
575
576
577   return offset;
578 }
579
580
581 static const ber_sequence_t T_ca_contextValues_set_of[1] = {
582   { &hf_x509if_ca_contextValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ca_contextValues_item },
583 };
584
585 static int
586 dissect_x509if_T_ca_contextValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
587   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
588                                  T_ca_contextValues_set_of, hf_index, ett_x509if_T_ca_contextValues);
589
590   return offset;
591 }
592
593
594 static const ber_sequence_t ContextAssertion_sequence[] = {
595   { &hf_x509if_ca_contextType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ca_contextType },
596   { &hf_x509if_ca_contextValues, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ca_contextValues },
597   { NULL, 0, 0, 0, NULL }
598 };
599
600 int
601 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_) {
602   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
603                                    ContextAssertion_sequence, hf_index, ett_x509if_ContextAssertion);
604
605   return offset;
606 }
607
608
609 static const ber_sequence_t SET_SIZE_1_MAX_OF_ContextAssertion_set_of[1] = {
610   { &hf_x509if_selectedContexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
611 };
612
613 static int
614 dissect_x509if_SET_SIZE_1_MAX_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_) {
615   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
616                                  SET_SIZE_1_MAX_OF_ContextAssertion_set_of, hf_index, ett_x509if_SET_SIZE_1_MAX_OF_ContextAssertion);
617
618   return offset;
619 }
620
621
622 static const value_string x509if_T_assertedContexts_vals[] = {
623   {   0, "allContexts" },
624   {   1, "selectedContexts" },
625   { 0, NULL }
626 };
627
628 static const ber_choice_t T_assertedContexts_choice[] = {
629   {   0, &hf_x509if_allContexts  , BER_CLASS_CON, 0, 0, dissect_x509if_NULL },
630   {   1, &hf_x509if_selectedContexts, BER_CLASS_CON, 1, 0, dissect_x509if_SET_SIZE_1_MAX_OF_ContextAssertion },
631   { 0, NULL, 0, 0, 0, NULL }
632 };
633
634 static int
635 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_) {
636   offset = dissect_ber_choice(actx, tree, tvb, offset,
637                                  T_assertedContexts_choice, hf_index, ett_x509if_T_assertedContexts,
638                                  NULL);
639
640   return offset;
641 }
642
643
644 static const ber_sequence_t AttributeValueAssertion_sequence[] = {
645   { &hf_x509if_type_01      , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_type_01 },
646   { &hf_x509if_assertion    , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_assertion },
647   { &hf_x509if_assertedContexts, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_assertedContexts },
648   { NULL, 0, 0, 0, NULL }
649 };
650
651 int
652 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_) {
653 #line 402 "x509if.cnf"
654
655         ava_hf_index = hf_index;
656         last_ava = ep_alloc(MAX_AVA_STR_LEN); *last_ava = '\0';
657
658           offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
659                                    AttributeValueAssertion_sequence, hf_index, ett_x509if_AttributeValueAssertion);
660
661
662         ava_hf_index=-1;
663
664
665
666   return offset;
667 }
668
669
670
671 static int
672 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_) {
673   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
674
675   return offset;
676 }
677
678
679 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_ContextAssertion_sequence_of[1] = {
680   { &hf_x509if_ata_assertedContexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
681 };
682
683 static int
684 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
685   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
686                                       SEQUENCE_SIZE_1_MAX_OF_ContextAssertion_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextAssertion);
687
688   return offset;
689 }
690
691
692 static const ber_sequence_t AttributeTypeAssertion_sequence[] = {
693   { &hf_x509if_type_02      , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
694   { &hf_x509if_ata_assertedContexts, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextAssertion },
695   { NULL, 0, 0, 0, NULL }
696 };
697
698 int
699 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_) {
700   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
701                                    AttributeTypeAssertion_sequence, hf_index, ett_x509if_AttributeTypeAssertion);
702
703   return offset;
704 }
705
706
707
708 static int
709 dissect_x509if_T_type_02(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
710 #line 190 "x509if.cnf"
711   const char *fmt; 
712   const char *name;
713
714     offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
715
716
717   if(object_identifier_id) {
718     /* see if we can find a nice name */
719     name = oid_resolved_from_string(object_identifier_id);
720     if(!name) name = object_identifier_id;    
721
722     if(doing_dn) { /* append it to the RDN */
723       g_strlcat(last_rdn, name, MAX_RDN_STR_LEN);
724       g_strlcat(last_rdn, "=", MAX_RDN_STR_LEN);
725
726      /* append it to the tree */
727      proto_item_append_text(tree, " (%s=", name);
728     }
729
730     if(doing_attr) {
731       /* append it to the parent item */
732       proto_item_append_text(tree, " (%s)", name);
733     }
734
735     if((fmt = val_to_str(hf_index, fmt_vals, "")) && *fmt) {
736       /* we have a format */
737       last_ava = ep_alloc(MAX_AVA_STR_LEN); *last_ava = '\0';
738
739       g_snprintf(last_ava, MAX_AVA_STR_LEN, "%s %s", name, fmt);
740
741       proto_item_append_text(tree, " %s", last_ava);
742
743     }
744   }
745
746
747
748   return offset;
749 }
750
751
752
753 static int
754 dissect_x509if_T_atadv_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
755 #line 225 "x509if.cnf"
756   int old_offset = offset;
757   tvbuff_t      *out_tvb;
758   char          *value = NULL;
759   const char    *fmt; 
760   const char    *name = NULL;
761   const char    *orig_oid = object_identifier_id;
762
763   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
764
765   /* in dissecting the value we may have overridden the OID of the value - which is
766      a problem if there are multiple values */
767   object_identifier_id = orig_oid;
768
769   /* try and dissect as a string */
770   dissect_ber_octet_string(FALSE, actx, NULL, tvb, old_offset, hf_x509if_any_string, &out_tvb);
771   
772   /* should also try and dissect as an OID and integer */
773   /* of course, if I can look up the syntax .... */
774
775   if(out_tvb) {
776     /* it was a string - format it */
777     value = tvb_format_text(out_tvb, 0, tvb_length(out_tvb));
778
779     if(doing_dn) {
780       g_strlcat(last_rdn, value, MAX_RDN_STR_LEN);
781
782       /* append it to the tree*/
783       proto_item_append_text(tree, "%s)", value);
784     }
785
786     if((fmt = val_to_str(ava_hf_index, fmt_vals, "")) && *fmt) {
787       /* we have a format */
788
789     if(!(name = oid_resolved_from_string(object_identifier_id)))
790       name = object_identifier_id;
791     g_snprintf(last_ava, MAX_AVA_STR_LEN, "%s %s %s", name, fmt, value);
792
793     proto_item_append_text(tree, " %s", last_ava);
794
795     }
796   }
797
798
799
800   return offset;
801 }
802
803
804
805 static int
806 dissect_x509if_T_distingAttrValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
807 #line 325 "x509if.cnf"
808   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
809
810
811
812   return offset;
813 }
814
815
816 static const ber_sequence_t T_valWithContext_item_sequence[] = {
817   { &hf_x509if_distingAttrValue, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_T_distingAttrValue },
818   { &hf_x509if_contextList  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_SET_SIZE_1_MAX_OF_Context },
819   { NULL, 0, 0, 0, NULL }
820 };
821
822 static int
823 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_) {
824   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
825                                    T_valWithContext_item_sequence, hf_index, ett_x509if_T_valWithContext_item);
826
827   return offset;
828 }
829
830
831 static const ber_sequence_t T_valWithContext_set_of[1] = {
832   { &hf_x509if_valueswithContext_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_valWithContext_item },
833 };
834
835 static int
836 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_) {
837   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
838                                  T_valWithContext_set_of, hf_index, ett_x509if_T_valWithContext);
839
840   return offset;
841 }
842
843
844 static const ber_sequence_t AttributeTypeAndDistinguishedValue_sequence[] = {
845   { &hf_x509if_type_03      , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_type_02 },
846   { &hf_x509if_atadv_value  , BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_atadv_value },
847   { &hf_x509if_primaryDistinguished, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_BOOLEAN },
848   { &hf_x509if_valueswithContext, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_valWithContext },
849   { NULL, 0, 0, 0, NULL }
850 };
851
852 int
853 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_) {
854   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
855                                    AttributeTypeAndDistinguishedValue_sequence, hf_index, ett_x509if_AttributeTypeAndDistinguishedValue);
856
857   return offset;
858 }
859
860
861
862 static int
863 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_) {
864 #line 356 "x509if.cnf"
865
866   if(!rdn_one_value) {
867     top_of_rdn = tree;
868   } else {
869
870    if(doing_dn)  
871      /* this is an additional value - delimit */
872      g_strlcat(last_rdn, "+", MAX_RDN_STR_LEN);
873   }
874
875     offset = dissect_x509if_AttributeTypeAndDistinguishedValue(implicit_tag, tvb, offset, actx, tree, hf_index);
876
877
878   rdn_one_value = TRUE;
879
880
881
882   return offset;
883 }
884
885
886 static const ber_sequence_t RelativeDistinguishedName_set_of[1] = {
887   { &hf_x509if_RelativeDistinguishedName_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RelativeDistinguishedName_item },
888 };
889
890 int
891 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_) {
892 #line 328 "x509if.cnf"
893   char *temp_dn;
894
895   rdn_one_value = FALSE;
896   top_of_rdn = tree;
897   last_rdn = ep_alloc(MAX_DN_STR_LEN); *last_rdn = '\0';
898   doing_dn = TRUE;
899
900     offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
901                                  RelativeDistinguishedName_set_of, hf_index, ett_x509if_RelativeDistinguishedName);
902
903
904   /* we've finished - close the bracket */
905   proto_item_append_text(top_of_rdn, " (%s)", last_rdn);
906
907   /* now append this to the DN */
908   if (last_dn) {
909     if(*last_dn) {
910       temp_dn = ep_alloc(MAX_DN_STR_LEN); /* is there a better way to use ep_alloc here ? */
911       g_snprintf(temp_dn, MAX_DN_STR_LEN, "%s,%s", last_rdn, last_dn);
912       last_dn[0] = '\0';
913       g_strlcat(last_dn, temp_dn, MAX_DN_STR_LEN);
914     } else {
915       g_strlcat(last_dn, last_rdn, MAX_DN_STR_LEN);
916     }
917   }
918
919   doing_dn = FALSE;
920   last_rdn = NULL; /* it will get freed when the next packet is dissected */
921
922
923
924   return offset;
925 }
926
927
928
929 static int
930 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_) {
931 #line 391 "x509if.cnf"
932
933   if(!dn_one_rdn)  {
934     /* this is the first element - record the top */
935     top_of_dn = tree;
936   } 
937
938     offset = dissect_x509if_RelativeDistinguishedName(implicit_tag, tvb, offset, actx, tree, hf_index);
939
940
941   dn_one_rdn = TRUE;
942
943
944
945   return offset;
946 }
947
948
949 static const ber_sequence_t RDNSequence_sequence_of[1] = {
950   { &hf_x509if_RDNSequence_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_RDNSequence_item },
951 };
952
953 int
954 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_) {
955 #line 371 "x509if.cnf"
956   const char *fmt; 
957
958   dn_one_rdn = FALSE; /* reset */
959   last_dn = ep_alloc(MAX_DN_STR_LEN); *last_dn = '\0';
960   top_of_dn = NULL;
961
962     offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
963                                       RDNSequence_sequence_of, hf_index, ett_x509if_RDNSequence);
964
965
966   /* we've finished - append the dn */
967   proto_item_append_text(top_of_dn, " (%s)", last_dn);
968
969  /* see if we should append this to the col info */
970   if(check_col(actx->pinfo->cinfo, COL_INFO) &&
971      (fmt = val_to_str(hf_index, fmt_vals, "")) && *fmt) {
972       /* we have a format */
973         col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s%s", fmt, last_dn);
974   }
975
976
977
978
979   return offset;
980 }
981
982
983 const value_string x509if_Name_vals[] = {
984   {   0, "rdnSequence" },
985   { 0, NULL }
986 };
987
988 static const ber_choice_t Name_choice[] = {
989   {   0, &hf_x509if_rdnSequence  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RDNSequence },
990   { 0, NULL, 0, 0, 0, NULL }
991 };
992
993 int
994 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_) {
995   offset = dissect_ber_choice(actx, tree, tvb, offset,
996                                  Name_choice, hf_index, ett_x509if_Name,
997                                  NULL);
998
999   return offset;
1000 }
1001
1002
1003
1004 int
1005 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_) {
1006   offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, actx, tree, hf_index);
1007
1008   return offset;
1009 }
1010
1011
1012
1013 int
1014 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_) {
1015   offset = dissect_x509if_RDNSequence(implicit_tag, tvb, offset, actx, tree, hf_index);
1016
1017   return offset;
1018 }
1019
1020
1021 static const value_string x509if_T_specificExclusions_item_vals[] = {
1022   {   0, "chopBefore" },
1023   {   1, "chopAfter" },
1024   { 0, NULL }
1025 };
1026
1027 static const ber_choice_t T_specificExclusions_item_choice[] = {
1028   {   0, &hf_x509if_chopBefore   , BER_CLASS_CON, 0, 0, dissect_x509if_LocalName },
1029   {   1, &hf_x509if_chopAfter    , BER_CLASS_CON, 1, 0, dissect_x509if_LocalName },
1030   { 0, NULL, 0, 0, 0, NULL }
1031 };
1032
1033 static int
1034 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_) {
1035   offset = dissect_ber_choice(actx, tree, tvb, offset,
1036                                  T_specificExclusions_item_choice, hf_index, ett_x509if_T_specificExclusions_item,
1037                                  NULL);
1038
1039   return offset;
1040 }
1041
1042
1043 static const ber_sequence_t T_specificExclusions_set_of[1] = {
1044   { &hf_x509if_specificExclusions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_specificExclusions_item },
1045 };
1046
1047 static int
1048 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_) {
1049   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1050                                  T_specificExclusions_set_of, hf_index, ett_x509if_T_specificExclusions);
1051
1052   return offset;
1053 }
1054
1055
1056
1057 static int
1058 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_) {
1059   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1060                                                 NULL);
1061
1062   return offset;
1063 }
1064
1065
1066 static const ber_sequence_t SET_OF_Refinement_set_of[1] = {
1067   { &hf_x509if_refinement_and_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_Refinement },
1068 };
1069
1070 static int
1071 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_) {
1072   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1073                                  SET_OF_Refinement_set_of, hf_index, ett_x509if_SET_OF_Refinement);
1074
1075   return offset;
1076 }
1077
1078
1079 const value_string x509if_Refinement_vals[] = {
1080   {   0, "item" },
1081   {   1, "and" },
1082   {   2, "or" },
1083   {   3, "not" },
1084   { 0, NULL }
1085 };
1086
1087 static const ber_choice_t Refinement_choice[] = {
1088   {   0, &hf_x509if_item         , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
1089   {   1, &hf_x509if_refinement_and, BER_CLASS_CON, 1, 0, dissect_x509if_SET_OF_Refinement },
1090   {   2, &hf_x509if_refinement_or, BER_CLASS_CON, 2, 0, dissect_x509if_SET_OF_Refinement },
1091   {   3, &hf_x509if_refinement_not, BER_CLASS_CON, 3, 0, dissect_x509if_Refinement },
1092   { 0, NULL, 0, 0, 0, NULL }
1093 };
1094
1095 int
1096 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_) {
1097   offset = dissect_ber_choice(actx, tree, tvb, offset,
1098                                  Refinement_choice, hf_index, ett_x509if_Refinement,
1099                                  NULL);
1100
1101   return offset;
1102 }
1103
1104
1105 static const ber_sequence_t SubtreeSpecification_sequence[] = {
1106   { &hf_x509if_base         , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_LocalName },
1107   { &hf_x509if_specificExclusions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_specificExclusions },
1108   { &hf_x509if_minimum      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
1109   { &hf_x509if_maximum      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
1110   { &hf_x509if_specificationFilter, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_Refinement },
1111   { NULL, 0, 0, 0, NULL }
1112 };
1113
1114 int
1115 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_) {
1116   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1117                                    SubtreeSpecification_sequence, hf_index, ett_x509if_SubtreeSpecification);
1118
1119   return offset;
1120 }
1121
1122
1123 static const value_string x509if_T_chopSpecificExclusions_item_vals[] = {
1124   {   0, "chopBefore" },
1125   {   1, "chopAfter" },
1126   { 0, NULL }
1127 };
1128
1129 static const ber_choice_t T_chopSpecificExclusions_item_choice[] = {
1130   {   0, &hf_x509if_chopBefore   , BER_CLASS_CON, 0, 0, dissect_x509if_LocalName },
1131   {   1, &hf_x509if_chopAfter    , BER_CLASS_CON, 1, 0, dissect_x509if_LocalName },
1132   { 0, NULL, 0, 0, 0, NULL }
1133 };
1134
1135 static int
1136 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_) {
1137   offset = dissect_ber_choice(actx, tree, tvb, offset,
1138                                  T_chopSpecificExclusions_item_choice, hf_index, ett_x509if_T_chopSpecificExclusions_item,
1139                                  NULL);
1140
1141   return offset;
1142 }
1143
1144
1145 static const ber_sequence_t T_chopSpecificExclusions_set_of[1] = {
1146   { &hf_x509if_chopSpecificExclusions_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_chopSpecificExclusions_item },
1147 };
1148
1149 static int
1150 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_) {
1151   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1152                                  T_chopSpecificExclusions_set_of, hf_index, ett_x509if_T_chopSpecificExclusions);
1153
1154   return offset;
1155 }
1156
1157
1158 static const ber_sequence_t ChopSpecification_sequence[] = {
1159   { &hf_x509if_chopSpecificExclusions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_chopSpecificExclusions },
1160   { &hf_x509if_minimum      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
1161   { &hf_x509if_maximum      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_BaseDistance },
1162   { NULL, 0, 0, 0, NULL }
1163 };
1164
1165 int
1166 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_) {
1167   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1168                                    ChopSpecification_sequence, hf_index, ett_x509if_ChopSpecification);
1169
1170   return offset;
1171 }
1172
1173
1174 const value_string x509if_AttributeUsage_vals[] = {
1175   {   0, "userApplications" },
1176   {   1, "directoryOperation" },
1177   {   2, "distributedOperation" },
1178   {   3, "dSAOperation" },
1179   { 0, NULL }
1180 };
1181
1182
1183 int
1184 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_) {
1185   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1186                                   NULL);
1187
1188   return offset;
1189 }
1190
1191
1192
1193 int
1194 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_) {
1195   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1196                                                 NULL);
1197
1198   return offset;
1199 }
1200
1201
1202 static const ber_sequence_t SET_SIZE_1_MAX_OF_RuleIdentifier_set_of[1] = {
1203   { &hf_x509if_superiorStructureRules_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_RuleIdentifier },
1204 };
1205
1206 static int
1207 dissect_x509if_SET_SIZE_1_MAX_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_) {
1208   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1209                                  SET_SIZE_1_MAX_OF_RuleIdentifier_set_of, hf_index, ett_x509if_SET_SIZE_1_MAX_OF_RuleIdentifier);
1210
1211   return offset;
1212 }
1213
1214
1215 static const ber_sequence_t DITStructureRule_sequence[] = {
1216   { &hf_x509if_ruleIdentifier, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_RuleIdentifier },
1217   { &hf_x509if_nameForm     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1218   { &hf_x509if_superiorStructureRules, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_SET_SIZE_1_MAX_OF_RuleIdentifier },
1219   { NULL, 0, 0, 0, NULL }
1220 };
1221
1222 int
1223 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_) {
1224   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1225                                    DITStructureRule_sequence, hf_index, ett_x509if_DITStructureRule);
1226
1227   return offset;
1228 }
1229
1230
1231 static const ber_sequence_t T_auxiliaries_set_of[1] = {
1232   { &hf_x509if_auxiliaries_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1233 };
1234
1235 static int
1236 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_) {
1237   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1238                                  T_auxiliaries_set_of, hf_index, ett_x509if_T_auxiliaries);
1239
1240   return offset;
1241 }
1242
1243
1244 static const ber_sequence_t T_mandatory_set_of[1] = {
1245   { &hf_x509if_mandatory_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1246 };
1247
1248 static int
1249 dissect_x509if_T_mandatory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1250   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1251                                  T_mandatory_set_of, hf_index, ett_x509if_T_mandatory);
1252
1253   return offset;
1254 }
1255
1256
1257 static const ber_sequence_t T_optional_set_of[1] = {
1258   { &hf_x509if_optional_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1259 };
1260
1261 static int
1262 dissect_x509if_T_optional(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1263   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1264                                  T_optional_set_of, hf_index, ett_x509if_T_optional);
1265
1266   return offset;
1267 }
1268
1269
1270 static const ber_sequence_t T_precluded_set_of[1] = {
1271   { &hf_x509if_precluded_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1272 };
1273
1274 static int
1275 dissect_x509if_T_precluded(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1276   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1277                                  T_precluded_set_of, hf_index, ett_x509if_T_precluded);
1278
1279   return offset;
1280 }
1281
1282
1283 static const ber_sequence_t DITContentRule_sequence[] = {
1284   { &hf_x509if_structuralObjectClass, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1285   { &hf_x509if_auxiliaries  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_auxiliaries },
1286   { &hf_x509if_mandatory    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_mandatory },
1287   { &hf_x509if_optional     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_T_optional },
1288   { &hf_x509if_precluded    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_T_precluded },
1289   { NULL, 0, 0, 0, NULL }
1290 };
1291
1292 int
1293 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_) {
1294   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1295                                    DITContentRule_sequence, hf_index, ett_x509if_DITContentRule);
1296
1297   return offset;
1298 }
1299
1300
1301 static const ber_sequence_t T_mandatoryContexts_set_of[1] = {
1302   { &hf_x509if_mandatoryContexts_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1303 };
1304
1305 static int
1306 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_) {
1307   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1308                                  T_mandatoryContexts_set_of, hf_index, ett_x509if_T_mandatoryContexts);
1309
1310   return offset;
1311 }
1312
1313
1314 static const ber_sequence_t T_optionalContexts_set_of[1] = {
1315   { &hf_x509if_optionalContexts_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1316 };
1317
1318 static int
1319 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_) {
1320   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1321                                  T_optionalContexts_set_of, hf_index, ett_x509if_T_optionalContexts);
1322
1323   return offset;
1324 }
1325
1326
1327 static const ber_sequence_t DITContextUse_sequence[] = {
1328   { &hf_x509if_attributeType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1329   { &hf_x509if_mandatoryContexts, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_mandatoryContexts },
1330   { &hf_x509if_optionalContexts, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_T_optionalContexts },
1331   { NULL, 0, 0, 0, NULL }
1332 };
1333
1334 int
1335 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_) {
1336   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1337                                    DITContextUse_sequence, hf_index, ett_x509if_DITContextUse);
1338
1339   return offset;
1340 }
1341
1342
1343
1344 static int
1345 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_) {
1346   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1347                                                 NULL);
1348
1349   return offset;
1350 }
1351
1352
1353
1354 static int
1355 dissect_x509if_T_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_) {
1356   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
1357
1358   return offset;
1359 }
1360
1361
1362
1363 static int
1364 dissect_x509if_T_ra_selectedValues_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_) {
1365 #line 271 "x509if.cnf"
1366   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
1367
1368
1369
1370   return offset;
1371 }
1372
1373
1374 static const ber_sequence_t T_ra_selectedValues_sequence_of[1] = {
1375   { &hf_x509if_ra_selectedValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ra_selectedValues_item },
1376 };
1377
1378 static int
1379 dissect_x509if_T_ra_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_) {
1380   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1381                                       T_ra_selectedValues_sequence_of, hf_index, ett_x509if_T_ra_selectedValues);
1382
1383   return offset;
1384 }
1385
1386
1387
1388 static int
1389 dissect_x509if_T_entryType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1390   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
1391
1392   return offset;
1393 }
1394
1395
1396
1397 static int
1398 dissect_x509if_T_ra_values_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_) {
1399 #line 277 "x509if.cnf"
1400   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
1401
1402
1403
1404   return offset;
1405 }
1406
1407
1408 static const ber_sequence_t T_ra_values_sequence_of[1] = {
1409   { &hf_x509if_ra_values_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ra_values_item },
1410 };
1411
1412 static int
1413 dissect_x509if_T_ra_values(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1414   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1415                                       T_ra_values_sequence_of, hf_index, ett_x509if_T_ra_values);
1416
1417   return offset;
1418 }
1419
1420
1421 static const ber_sequence_t T_defaultValues_item_sequence[] = {
1422   { &hf_x509if_entryType    , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_entryType },
1423   { &hf_x509if_ra_values    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_ra_values },
1424   { NULL, 0, 0, 0, NULL }
1425 };
1426
1427 static int
1428 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_) {
1429   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1430                                    T_defaultValues_item_sequence, hf_index, ett_x509if_T_defaultValues_item);
1431
1432   return offset;
1433 }
1434
1435
1436 static const ber_sequence_t T_defaultValues_sequence_of[1] = {
1437   { &hf_x509if_defaultValues_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_defaultValues_item },
1438 };
1439
1440 static int
1441 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_) {
1442   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1443                                       T_defaultValues_sequence_of, hf_index, ett_x509if_T_defaultValues);
1444
1445   return offset;
1446 }
1447
1448
1449
1450 static int
1451 dissect_x509if_T_contextType_01(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1452   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
1453
1454   return offset;
1455 }
1456
1457
1458
1459 static int
1460 dissect_x509if_T_contextValue_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_) {
1461 #line 316 "x509if.cnf"
1462   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
1463
1464
1465
1466   return offset;
1467 }
1468
1469
1470 static const ber_sequence_t T_contextValue_sequence_of[1] = {
1471   { &hf_x509if_contextValue_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextValue_item },
1472 };
1473
1474 static int
1475 dissect_x509if_T_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_) {
1476   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1477                                       T_contextValue_sequence_of, hf_index, ett_x509if_T_contextValue);
1478
1479   return offset;
1480 }
1481
1482
1483 static const ber_sequence_t ContextProfile_sequence[] = {
1484   { &hf_x509if_contextType_01, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextType_01 },
1485   { &hf_x509if_contextValue , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_T_contextValue },
1486   { NULL, 0, 0, 0, NULL }
1487 };
1488
1489 int
1490 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_) {
1491   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1492                                    ContextProfile_sequence, hf_index, ett_x509if_ContextProfile);
1493
1494   return offset;
1495 }
1496
1497
1498 static const ber_sequence_t SEQUENCE_SIZE_0_MAX_OF_ContextProfile_sequence_of[1] = {
1499   { &hf_x509if_contexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextProfile },
1500 };
1501
1502 static int
1503 dissect_x509if_SEQUENCE_SIZE_0_MAX_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_) {
1504   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1505                                       SEQUENCE_SIZE_0_MAX_OF_ContextProfile_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_0_MAX_OF_ContextProfile);
1506
1507   return offset;
1508 }
1509
1510
1511 static const ber_sequence_t SEQUENCE_OF_ContextCombination_sequence_of[1] = {
1512   { &hf_x509if_contextcombination_and_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_ContextCombination },
1513 };
1514
1515 static int
1516 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_) {
1517   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1518                                       SEQUENCE_OF_ContextCombination_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_ContextCombination);
1519
1520   return offset;
1521 }
1522
1523
1524 const value_string x509if_ContextCombination_vals[] = {
1525   {   0, "context" },
1526   {   1, "and" },
1527   {   2, "or" },
1528   {   3, "not" },
1529   { 0, NULL }
1530 };
1531
1532 static const ber_choice_t ContextCombination_choice[] = {
1533   {   0, &hf_x509if_context      , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
1534   {   1, &hf_x509if_contextcombination_and, BER_CLASS_CON, 1, 0, dissect_x509if_SEQUENCE_OF_ContextCombination },
1535   {   2, &hf_x509if_contextcombination_or, BER_CLASS_CON, 2, 0, dissect_x509if_SEQUENCE_OF_ContextCombination },
1536   {   3, &hf_x509if_contextcombination_not, BER_CLASS_CON, 3, 0, dissect_x509if_ContextCombination },
1537   { 0, NULL, 0, 0, 0, NULL }
1538 };
1539
1540 int
1541 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_) {
1542   offset = dissect_ber_choice(actx, tree, tvb, offset,
1543                                  ContextCombination_choice, hf_index, ett_x509if_ContextCombination,
1544                                  NULL);
1545
1546   return offset;
1547 }
1548
1549
1550
1551 static int
1552 dissect_x509if_T_restrictionType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1553   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
1554
1555   return offset;
1556 }
1557
1558
1559
1560 static int
1561 dissect_x509if_T_restrictionValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1562 #line 322 "x509if.cnf"
1563   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
1564
1565
1566
1567   return offset;
1568 }
1569
1570
1571 static const ber_sequence_t MatchingUse_sequence[] = {
1572   { &hf_x509if_restrictionType, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_restrictionType },
1573   { &hf_x509if_restrictionValue, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_restrictionValue },
1574   { NULL, 0, 0, 0, NULL }
1575 };
1576
1577 int
1578 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_) {
1579   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1580                                    MatchingUse_sequence, hf_index, ett_x509if_MatchingUse);
1581
1582   return offset;
1583 }
1584
1585
1586 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_MatchingUse_sequence_of[1] = {
1587   { &hf_x509if_matchingUse_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MatchingUse },
1588 };
1589
1590 static int
1591 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1592   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1593                                       SEQUENCE_SIZE_1_MAX_OF_MatchingUse_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MatchingUse);
1594
1595   return offset;
1596 }
1597
1598
1599 static const ber_sequence_t RequestAttribute_sequence[] = {
1600   { &hf_x509if_attributeType_01, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_attributeType },
1601   { &hf_x509if_includeSubtypes, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_BOOLEAN },
1602   { &hf_x509if_ra_selectedValues, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_T_ra_selectedValues },
1603   { &hf_x509if_defaultValues, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_T_defaultValues },
1604   { &hf_x509if_contexts     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_0_MAX_OF_ContextProfile },
1605   { &hf_x509if_contextCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_ContextCombination },
1606   { &hf_x509if_matchingUse  , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_MatchingUse },
1607   { NULL, 0, 0, 0, NULL }
1608 };
1609
1610 int
1611 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_) {
1612   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1613                                    RequestAttribute_sequence, hf_index, ett_x509if_RequestAttribute);
1614
1615   return offset;
1616 }
1617
1618
1619 static const ber_sequence_t SEQUENCE_SIZE_0_MAX_OF_RequestAttribute_sequence_of[1] = {
1620   { &hf_x509if_inputAttributeTypes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_RequestAttribute },
1621 };
1622
1623 static int
1624 dissect_x509if_SEQUENCE_SIZE_0_MAX_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_) {
1625   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1626                                       SEQUENCE_SIZE_0_MAX_OF_RequestAttribute_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_0_MAX_OF_RequestAttribute);
1627
1628   return offset;
1629 }
1630
1631
1632 static const ber_sequence_t SEQUENCE_OF_AttributeCombination_sequence_of[1] = {
1633   { &hf_x509if_and_item     , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
1634 };
1635
1636 static int
1637 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_) {
1638   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1639                                       SEQUENCE_OF_AttributeCombination_sequence_of, hf_index, ett_x509if_SEQUENCE_OF_AttributeCombination);
1640
1641   return offset;
1642 }
1643
1644
1645 const value_string x509if_AttributeCombination_vals[] = {
1646   {   0, "attribute" },
1647   {   1, "and" },
1648   {   2, "or" },
1649   {   3, "not" },
1650   { 0, NULL }
1651 };
1652
1653 static const ber_choice_t AttributeCombination_choice[] = {
1654   {   0, &hf_x509if_attribute    , BER_CLASS_CON, 0, 0, dissect_x509if_AttributeType },
1655   {   1, &hf_x509if_and          , BER_CLASS_CON, 1, 0, dissect_x509if_SEQUENCE_OF_AttributeCombination },
1656   {   2, &hf_x509if_or           , BER_CLASS_CON, 2, 0, dissect_x509if_SEQUENCE_OF_AttributeCombination },
1657   {   3, &hf_x509if_not          , BER_CLASS_CON, 3, 0, dissect_x509if_AttributeCombination },
1658   { 0, NULL, 0, 0, 0, NULL }
1659 };
1660
1661 int
1662 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_) {
1663   offset = dissect_ber_choice(actx, tree, tvb, offset,
1664                                  AttributeCombination_choice, hf_index, ett_x509if_AttributeCombination,
1665                                  NULL);
1666
1667   return offset;
1668 }
1669
1670
1671
1672 static int
1673 dissect_x509if_T_attributeType_01(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1674   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_x509if_object_identifier_id, &object_identifier_id);
1675
1676   return offset;
1677 }
1678
1679
1680
1681 static int
1682 dissect_x509if_T_selectedValues_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_) {
1683 #line 286 "x509if.cnf"
1684   offset=call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
1685
1686
1687
1688   return offset;
1689 }
1690
1691
1692 static const ber_sequence_t T_selectedValues_sequence_of[1] = {
1693   { &hf_x509if_selectedValues_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x509if_T_selectedValues_item },
1694 };
1695
1696 static int
1697 dissect_x509if_T_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_) {
1698   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1699                                       T_selectedValues_sequence_of, hf_index, ett_x509if_T_selectedValues);
1700
1701   return offset;
1702 }
1703
1704
1705 static const value_string x509if_T_outputValues_vals[] = {
1706   {   0, "selectedValues" },
1707   {   1, "matchedValuesOnly" },
1708   { 0, NULL }
1709 };
1710
1711 static const ber_choice_t T_outputValues_choice[] = {
1712   {   0, &hf_x509if_selectedValues, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_T_selectedValues },
1713   {   1, &hf_x509if_matchedValuesOnly, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x509if_NULL },
1714   { 0, NULL, 0, 0, 0, NULL }
1715 };
1716
1717 static int
1718 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_) {
1719   offset = dissect_ber_choice(actx, tree, tvb, offset,
1720                                  T_outputValues_choice, hf_index, ett_x509if_T_outputValues,
1721                                  NULL);
1722
1723   return offset;
1724 }
1725
1726
1727 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_ContextProfile_sequence_of[1] = {
1728   { &hf_x509if_contexts_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextProfile },
1729 };
1730
1731 static int
1732 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1733   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1734                                       SEQUENCE_SIZE_1_MAX_OF_ContextProfile_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextProfile);
1735
1736   return offset;
1737 }
1738
1739
1740 static const ber_sequence_t ResultAttribute_sequence[] = {
1741   { &hf_x509if_attributeType_02, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_T_attributeType_01 },
1742   { &hf_x509if_outputValues , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x509if_T_outputValues },
1743   { &hf_x509if_contexts_01  , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextProfile },
1744   { NULL, 0, 0, 0, NULL }
1745 };
1746
1747 int
1748 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_) {
1749   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1750                                    ResultAttribute_sequence, hf_index, ett_x509if_ResultAttribute);
1751
1752   return offset;
1753 }
1754
1755
1756 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_ResultAttribute_sequence_of[1] = {
1757   { &hf_x509if_outputAttributeTypes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ResultAttribute },
1758 };
1759
1760 static int
1761 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1762   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1763                                       SEQUENCE_SIZE_1_MAX_OF_ResultAttribute_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ResultAttribute);
1764
1765   return offset;
1766 }
1767
1768
1769 static const ber_sequence_t ControlOptions_sequence[] = {
1770   { &hf_x509if_serviceControls, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dap_ServiceControlOptions },
1771   { &hf_x509if_searchOptions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dap_SearchControlOptions },
1772   { &hf_x509if_hierarchyOptions, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dap_HierarchySelections },
1773   { NULL, 0, 0, 0, NULL }
1774 };
1775
1776 int
1777 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_) {
1778   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1779                                    ControlOptions_sequence, hf_index, ett_x509if_ControlOptions);
1780
1781   return offset;
1782 }
1783
1784
1785 static const ber_sequence_t Mapping_sequence[] = {
1786   { &hf_x509if_mappingFunction, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_OBJECT_IDENTIFIER },
1787   { &hf_x509if_level        , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
1788   { NULL, 0, 0, 0, NULL }
1789 };
1790
1791 int
1792 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_) {
1793   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1794                                    Mapping_sequence, hf_index, ett_x509if_Mapping);
1795
1796   return offset;
1797 }
1798
1799
1800 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_Mapping_sequence_of[1] = {
1801   { &hf_x509if_mapping_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Mapping },
1802 };
1803
1804 static int
1805 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1806   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1807                                       SEQUENCE_SIZE_1_MAX_OF_Mapping_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_Mapping);
1808
1809   return offset;
1810 }
1811
1812
1813 static const ber_sequence_t MRSubstitution_sequence[] = {
1814   { &hf_x509if_attribute    , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1815   { &hf_x509if_oldMatchingRule, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
1816   { &hf_x509if_newMatchingRule, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
1817   { NULL, 0, 0, 0, NULL }
1818 };
1819
1820 int
1821 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_) {
1822   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1823                                    MRSubstitution_sequence, hf_index, ett_x509if_MRSubstitution);
1824
1825   return offset;
1826 }
1827
1828
1829 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_MRSubstitution_sequence_of[1] = {
1830   { &hf_x509if_substitution_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MRSubstitution },
1831 };
1832
1833 static int
1834 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1835   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1836                                       SEQUENCE_SIZE_1_MAX_OF_MRSubstitution_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRSubstitution);
1837
1838   return offset;
1839 }
1840
1841
1842 static const ber_sequence_t MRMapping_sequence[] = {
1843   { &hf_x509if_mapping      , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_Mapping },
1844   { &hf_x509if_substitution , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_MRSubstitution },
1845   { NULL, 0, 0, 0, NULL }
1846 };
1847
1848 int
1849 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_) {
1850   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1851                                    MRMapping_sequence, hf_index, ett_x509if_MRMapping);
1852
1853   return offset;
1854 }
1855
1856
1857 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_MRMapping_sequence_of[1] = {
1858   { &hf_x509if_tightenings_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_MRMapping },
1859 };
1860
1861 static int
1862 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1863   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1864                                       SEQUENCE_SIZE_1_MAX_OF_MRMapping_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRMapping);
1865
1866   return offset;
1867 }
1868
1869
1870 static const ber_sequence_t RelaxationPolicy_sequence[] = {
1871   { &hf_x509if_basic        , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_x509if_MRMapping },
1872   { &hf_x509if_tightenings  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_MRMapping },
1873   { &hf_x509if_relaxations  , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_MRMapping },
1874   { &hf_x509if_maximum_relaxation, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
1875   { &hf_x509if_minimum_relaxation, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
1876   { NULL, 0, 0, 0, NULL }
1877 };
1878
1879 int
1880 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_) {
1881   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1882                                    RelaxationPolicy_sequence, hf_index, ett_x509if_RelaxationPolicy);
1883
1884   return offset;
1885 }
1886
1887
1888 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_AttributeType_sequence_of[1] = {
1889   { &hf_x509if_additionalControl_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1890 };
1891
1892 static int
1893 dissect_x509if_SEQUENCE_SIZE_1_MAX_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_) {
1894   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1895                                       SEQUENCE_SIZE_1_MAX_OF_AttributeType_sequence_of, hf_index, ett_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType);
1896
1897   return offset;
1898 }
1899
1900
1901 static const asn_namedbit AllowedSubset_bits[] = {
1902   {  0, &hf_x509if_AllowedSubset_baseObject, -1, -1, "baseObject", NULL },
1903   {  1, &hf_x509if_AllowedSubset_oneLevel, -1, -1, "oneLevel", NULL },
1904   {  2, &hf_x509if_AllowedSubset_wholeSubtree, -1, -1, "wholeSubtree", NULL },
1905   { 0, NULL, 0, 0, NULL, NULL }
1906 };
1907
1908 int
1909 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_) {
1910   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
1911                                     AllowedSubset_bits, hf_index, ett_x509if_AllowedSubset,
1912                                     NULL);
1913
1914   return offset;
1915 }
1916
1917
1918 const value_string x509if_ImposedSubset_vals[] = {
1919   {   0, "baseObject" },
1920   {   1, "oneLevel" },
1921   {   2, "wholeSubtree" },
1922   { 0, NULL }
1923 };
1924
1925
1926 int
1927 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_) {
1928   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1929                                   NULL);
1930
1931   return offset;
1932 }
1933
1934
1935 static const ber_sequence_t EntryLimit_sequence[] = {
1936   { &hf_x509if_default      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
1937   { &hf_x509if_max          , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
1938   { NULL, 0, 0, 0, NULL }
1939 };
1940
1941 int
1942 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_) {
1943   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1944                                    EntryLimit_sequence, hf_index, ett_x509if_EntryLimit);
1945
1946   return offset;
1947 }
1948
1949
1950 static const ber_sequence_t SET_SIZE_1_MAX_OF_DirectoryString_set_of[1] = {
1951   { &hf_x509if_name_item    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_x509sat_DirectoryString },
1952 };
1953
1954 static int
1955 dissect_x509if_SET_SIZE_1_MAX_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_) {
1956   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1957                                  SET_SIZE_1_MAX_OF_DirectoryString_set_of, hf_index, ett_x509if_SET_SIZE_1_MAX_OF_DirectoryString);
1958
1959   return offset;
1960 }
1961
1962
1963 static const ber_sequence_t SearchRuleDescription_sequence[] = {
1964   { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
1965   { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
1966   { &hf_x509if_serviceType  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
1967   { &hf_x509if_userClass    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
1968   { &hf_x509if_inputAttributeTypes, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_0_MAX_OF_RequestAttribute },
1969   { &hf_x509if_attributeCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
1970   { &hf_x509if_outputAttributeTypes, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_ResultAttribute },
1971   { &hf_x509if_defaultControls, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
1972   { &hf_x509if_mandatoryControls, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
1973   { &hf_x509if_searchRuleControls, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
1974   { &hf_x509if_familyGrouping, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dap_FamilyGrouping },
1975   { &hf_x509if_familyReturn , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_dap_FamilyReturn },
1976   { &hf_x509if_relaxation   , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_x509if_RelaxationPolicy },
1977   { &hf_x509if_additionalControl, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType },
1978   { &hf_x509if_allowedSubset, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_x509if_AllowedSubset },
1979   { &hf_x509if_imposedSubset, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_x509if_ImposedSubset },
1980   { &hf_x509if_entryLimit   , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_x509if_EntryLimit },
1981   { &hf_x509if_name         , BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_x509if_SET_SIZE_1_MAX_OF_DirectoryString },
1982   { &hf_x509if_description  , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509sat_DirectoryString },
1983   { NULL, 0, 0, 0, NULL }
1984 };
1985
1986 int
1987 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_) {
1988   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1989                                    SearchRuleDescription_sequence, hf_index, ett_x509if_SearchRuleDescription);
1990
1991   return offset;
1992 }
1993
1994
1995
1996 static int
1997 dissect_x509if_HierarchyLevel(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1998   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1999                                                 NULL);
2000
2001   return offset;
2002 }
2003
2004
2005
2006 static int
2007 dissect_x509if_HierarchyBelow(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2008   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
2009
2010   return offset;
2011 }
2012
2013
2014 static const ber_sequence_t SearchRule_sequence[] = {
2015   { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
2016   { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
2017   { &hf_x509if_serviceType  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_x509if_OBJECT_IDENTIFIER },
2018   { &hf_x509if_userClass    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x509if_INTEGER },
2019   { &hf_x509if_inputAttributeTypes, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_0_MAX_OF_RequestAttribute },
2020   { &hf_x509if_attributeCombination, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_x509if_AttributeCombination },
2021   { &hf_x509if_outputAttributeTypes, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_ResultAttribute },
2022   { &hf_x509if_defaultControls, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
2023   { &hf_x509if_mandatoryControls, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
2024   { &hf_x509if_searchRuleControls, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_x509if_ControlOptions },
2025   { &hf_x509if_familyGrouping, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dap_FamilyGrouping },
2026   { &hf_x509if_familyReturn , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_dap_FamilyReturn },
2027   { &hf_x509if_relaxation   , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_x509if_RelaxationPolicy },
2028   { &hf_x509if_additionalControl, BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType },
2029   { &hf_x509if_allowedSubset, BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL, dissect_x509if_AllowedSubset },
2030   { &hf_x509if_imposedSubset, BER_CLASS_CON, 14, BER_FLAGS_OPTIONAL, dissect_x509if_ImposedSubset },
2031   { &hf_x509if_entryLimit   , BER_CLASS_CON, 15, BER_FLAGS_OPTIONAL, dissect_x509if_EntryLimit },
2032   { NULL, 0, 0, 0, NULL }
2033 };
2034
2035 int
2036 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_) {
2037   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2038                                    SearchRule_sequence, hf_index, ett_x509if_SearchRule);
2039
2040   return offset;
2041 }
2042
2043
2044 static const ber_sequence_t SearchRuleId_sequence[] = {
2045   { &hf_x509if_id           , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x509if_INTEGER },
2046   { &hf_x509if_dmdId        , BER_CLASS_CON, 0, 0, dissect_x509if_OBJECT_IDENTIFIER },
2047   { NULL, 0, 0, 0, NULL }
2048 };
2049
2050 int
2051 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_) {
2052   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
2053                                    SearchRuleId_sequence, hf_index, ett_x509if_SearchRuleId);
2054
2055   return offset;
2056 }
2057
2058 /*--- PDUs ---*/
2059
2060 static void dissect_DistinguishedName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2061   asn1_ctx_t asn1_ctx;
2062   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2063   dissect_x509if_DistinguishedName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x509if_DistinguishedName_PDU);
2064 }
2065 static void dissect_SubtreeSpecification_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2066   asn1_ctx_t asn1_ctx;
2067   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2068   dissect_x509if_SubtreeSpecification(FALSE, tvb, 0, &asn1_ctx, tree, hf_x509if_SubtreeSpecification_PDU);
2069 }
2070 static void dissect_HierarchyLevel_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2071   asn1_ctx_t asn1_ctx;
2072   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2073   dissect_x509if_HierarchyLevel(FALSE, tvb, 0, &asn1_ctx, tree, hf_x509if_HierarchyLevel_PDU);
2074 }
2075 static void dissect_HierarchyBelow_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2076   asn1_ctx_t asn1_ctx;
2077   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2078   dissect_x509if_HierarchyBelow(FALSE, tvb, 0, &asn1_ctx, tree, hf_x509if_HierarchyBelow_PDU);
2079 }
2080
2081
2082 /*--- End of included file: packet-x509if-fn.c ---*/
2083 #line 76 "packet-x509if-template.c"
2084
2085 const char * x509if_get_last_dn(void)
2086 {
2087   return last_dn;
2088 }
2089
2090 gboolean x509if_register_fmt(int hf_index, const gchar *fmt)
2091 {
2092   static int idx = 0;
2093
2094   if(idx < (MAX_FMT_VALS - 1)) {
2095
2096     fmt_vals[idx].value = hf_index;
2097     fmt_vals[idx].strptr = fmt;
2098
2099     idx++;
2100
2101     fmt_vals[idx].value = 0;
2102     fmt_vals[idx].strptr = NULL;
2103
2104     return TRUE;
2105
2106   } else 
2107     return FALSE; /* couldn't register it */
2108
2109 }
2110
2111 const char * x509if_get_last_ava(void)
2112 {
2113   return last_ava;
2114 }
2115
2116 /*--- proto_register_x509if ----------------------------------------------*/
2117 void proto_register_x509if(void) {
2118
2119   /* List of fields */
2120   static hf_register_info hf[] = {
2121     { &hf_x509if_object_identifier_id, 
2122       { "Id", "x509if.id", FT_OID, BASE_NONE, NULL, 0,
2123         "Object identifier Id", HFILL }},
2124     { &hf_x509if_any_string, 
2125       { "AnyString", "x509if.any.String", FT_BYTES, BASE_NONE,
2126             NULL, 0, "This is any String", HFILL }},
2127                          
2128
2129 /*--- Included file: packet-x509if-hfarr.c ---*/
2130 #line 1 "packet-x509if-hfarr.c"
2131     { &hf_x509if_DistinguishedName_PDU,
2132       { "DistinguishedName", "x509if.DistinguishedName",
2133         FT_UINT32, BASE_DEC, NULL, 0,
2134         NULL, HFILL }},
2135     { &hf_x509if_SubtreeSpecification_PDU,
2136       { "SubtreeSpecification", "x509if.SubtreeSpecification",
2137         FT_NONE, BASE_NONE, NULL, 0,
2138         NULL, HFILL }},
2139     { &hf_x509if_HierarchyLevel_PDU,
2140       { "HierarchyLevel", "x509if.HierarchyLevel",
2141         FT_INT32, BASE_DEC, NULL, 0,
2142         NULL, HFILL }},
2143     { &hf_x509if_HierarchyBelow_PDU,
2144       { "HierarchyBelow", "x509if.HierarchyBelow",
2145         FT_BOOLEAN, BASE_NONE, NULL, 0,
2146         NULL, HFILL }},
2147     { &hf_x509if_type,
2148       { "type", "x509if.type",
2149         FT_OID, BASE_NONE, NULL, 0,
2150         NULL, HFILL }},
2151     { &hf_x509if_values,
2152       { "values", "x509if.values",
2153         FT_UINT32, BASE_DEC, NULL, 0,
2154         NULL, HFILL }},
2155     { &hf_x509if_values_item,
2156       { "values item", "x509if.values_item",
2157         FT_NONE, BASE_NONE, NULL, 0,
2158         NULL, HFILL }},
2159     { &hf_x509if_valuesWithContext,
2160       { "valuesWithContext", "x509if.valuesWithContext",
2161         FT_UINT32, BASE_DEC, NULL, 0,
2162         NULL, HFILL }},
2163     { &hf_x509if_valuesWithContext_item,
2164       { "valuesWithContext item", "x509if.valuesWithContext_item",
2165         FT_NONE, BASE_NONE, NULL, 0,
2166         "T_valuesWithContext_item", HFILL }},
2167     { &hf_x509if_value,
2168       { "value", "x509if.value",
2169         FT_NONE, BASE_NONE, NULL, 0,
2170         NULL, HFILL }},
2171     { &hf_x509if_contextList,
2172       { "contextList", "x509if.contextList",
2173         FT_UINT32, BASE_DEC, NULL, 0,
2174         "SET_SIZE_1_MAX_OF_Context", HFILL }},
2175     { &hf_x509if_contextList_item,
2176       { "Context", "x509if.Context",
2177         FT_NONE, BASE_NONE, NULL, 0,
2178         NULL, HFILL }},
2179     { &hf_x509if_contextType,
2180       { "contextType", "x509if.contextType",
2181         FT_OID, BASE_NONE, NULL, 0,
2182         NULL, HFILL }},
2183     { &hf_x509if_contextValues,
2184       { "contextValues", "x509if.contextValues",
2185         FT_UINT32, BASE_DEC, NULL, 0,
2186         NULL, HFILL }},
2187     { &hf_x509if_contextValues_item,
2188       { "contextValues item", "x509if.contextValues_item",
2189         FT_NONE, BASE_NONE, NULL, 0,
2190         NULL, HFILL }},
2191     { &hf_x509if_fallback,
2192       { "fallback", "x509if.fallback",
2193         FT_BOOLEAN, BASE_NONE, NULL, 0,
2194         "BOOLEAN", HFILL }},
2195     { &hf_x509if_type_01,
2196       { "type", "x509if.type",
2197         FT_OID, BASE_NONE, NULL, 0,
2198         "T_type_01", HFILL }},
2199     { &hf_x509if_assertion,
2200       { "assertion", "x509if.assertion",
2201         FT_NONE, BASE_NONE, NULL, 0,
2202         NULL, HFILL }},
2203     { &hf_x509if_assertedContexts,
2204       { "assertedContexts", "x509if.assertedContexts",
2205         FT_UINT32, BASE_DEC, VALS(x509if_T_assertedContexts_vals), 0,
2206         NULL, HFILL }},
2207     { &hf_x509if_allContexts,
2208       { "allContexts", "x509if.allContexts",
2209         FT_NONE, BASE_NONE, NULL, 0,
2210         NULL, HFILL }},
2211     { &hf_x509if_selectedContexts,
2212       { "selectedContexts", "x509if.selectedContexts",
2213         FT_UINT32, BASE_DEC, NULL, 0,
2214         "SET_SIZE_1_MAX_OF_ContextAssertion", HFILL }},
2215     { &hf_x509if_selectedContexts_item,
2216       { "ContextAssertion", "x509if.ContextAssertion",
2217         FT_NONE, BASE_NONE, NULL, 0,
2218         NULL, HFILL }},
2219     { &hf_x509if_ca_contextType,
2220       { "contextType", "x509if.contextType",
2221         FT_OID, BASE_NONE, NULL, 0,
2222         "T_ca_contextType", HFILL }},
2223     { &hf_x509if_ca_contextValues,
2224       { "contextValues", "x509if.contextValues",
2225         FT_UINT32, BASE_DEC, NULL, 0,
2226         "T_ca_contextValues", HFILL }},
2227     { &hf_x509if_ca_contextValues_item,
2228       { "contextValues item", "x509if.contextValues_item",
2229         FT_NONE, BASE_NONE, NULL, 0,
2230         "T_ca_contextValues_item", HFILL }},
2231     { &hf_x509if_type_02,
2232       { "type", "x509if.type",
2233         FT_OID, BASE_NONE, NULL, 0,
2234         "OBJECT_IDENTIFIER", HFILL }},
2235     { &hf_x509if_ata_assertedContexts,
2236       { "assertedContexts", "x509if.assertedContexts",
2237         FT_UINT32, BASE_DEC, NULL, 0,
2238         "SEQUENCE_SIZE_1_MAX_OF_ContextAssertion", HFILL }},
2239     { &hf_x509if_ata_assertedContexts_item,
2240       { "ContextAssertion", "x509if.ContextAssertion",
2241         FT_NONE, BASE_NONE, NULL, 0,
2242         NULL, HFILL }},
2243     { &hf_x509if_rdnSequence,
2244       { "rdnSequence", "x509if.rdnSequence",
2245         FT_UINT32, BASE_DEC, NULL, 0,
2246         NULL, HFILL }},
2247     { &hf_x509if_RDNSequence_item,
2248       { "RDNSequence item", "x509if.RDNSequence_item",
2249         FT_UINT32, BASE_DEC, NULL, 0,
2250         NULL, HFILL }},
2251     { &hf_x509if_RelativeDistinguishedName_item,
2252       { "RelativeDistinguishedName item", "x509if.RelativeDistinguishedName_item",
2253         FT_NONE, BASE_NONE, NULL, 0,
2254         NULL, HFILL }},
2255     { &hf_x509if_type_03,
2256       { "type", "x509if.type",
2257         FT_OID, BASE_NONE, NULL, 0,
2258         "T_type_02", HFILL }},
2259     { &hf_x509if_atadv_value,
2260       { "value", "x509if.value",
2261         FT_NONE, BASE_NONE, NULL, 0,
2262         "T_atadv_value", HFILL }},
2263     { &hf_x509if_primaryDistinguished,
2264       { "primaryDistinguished", "x509if.primaryDistinguished",
2265         FT_BOOLEAN, BASE_NONE, NULL, 0,
2266         "BOOLEAN", HFILL }},
2267     { &hf_x509if_valueswithContext,
2268       { "valuesWithContext", "x509if.valuesWithContext",
2269         FT_UINT32, BASE_DEC, NULL, 0,
2270         "T_valWithContext", HFILL }},
2271     { &hf_x509if_valueswithContext_item,
2272       { "valuesWithContext item", "x509if.valuesWithContext_item",
2273         FT_NONE, BASE_NONE, NULL, 0,
2274         "T_valWithContext_item", HFILL }},
2275     { &hf_x509if_distingAttrValue,
2276       { "distingAttrValue", "x509if.distingAttrValue",
2277         FT_NONE, BASE_NONE, NULL, 0,
2278         NULL, HFILL }},
2279     { &hf_x509if_chopSpecificExclusions,
2280       { "specificExclusions", "x509if.specificExclusions",
2281         FT_UINT32, BASE_DEC, NULL, 0,
2282         "T_chopSpecificExclusions", HFILL }},
2283     { &hf_x509if_chopSpecificExclusions_item,
2284       { "specificExclusions item", "x509if.specificExclusions_item",
2285         FT_UINT32, BASE_DEC, VALS(x509if_T_chopSpecificExclusions_item_vals), 0,
2286         "T_chopSpecificExclusions_item", HFILL }},
2287     { &hf_x509if_chopBefore,
2288       { "chopBefore", "x509if.chopBefore",
2289         FT_UINT32, BASE_DEC, NULL, 0,
2290         "LocalName", HFILL }},
2291     { &hf_x509if_chopAfter,
2292       { "chopAfter", "x509if.chopAfter",
2293         FT_UINT32, BASE_DEC, NULL, 0,
2294         "LocalName", HFILL }},
2295     { &hf_x509if_minimum,
2296       { "minimum", "x509if.minimum",
2297         FT_UINT32, BASE_DEC, NULL, 0,
2298         "BaseDistance", HFILL }},
2299     { &hf_x509if_maximum,
2300       { "maximum", "x509if.maximum",
2301         FT_UINT32, BASE_DEC, NULL, 0,
2302         "BaseDistance", HFILL }},
2303     { &hf_x509if_item,
2304       { "item", "x509if.item",
2305         FT_OID, BASE_NONE, NULL, 0,
2306         "OBJECT_IDENTIFIER", HFILL }},
2307     { &hf_x509if_refinement_and,
2308       { "and", "x509if.and",
2309         FT_UINT32, BASE_DEC, NULL, 0,
2310         "SET_OF_Refinement", HFILL }},
2311     { &hf_x509if_refinement_and_item,
2312       { "Refinement", "x509if.Refinement",
2313         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
2314         NULL, HFILL }},
2315     { &hf_x509if_refinement_or,
2316       { "or", "x509if.or",
2317         FT_UINT32, BASE_DEC, NULL, 0,
2318         "SET_OF_Refinement", HFILL }},
2319     { &hf_x509if_refinement_or_item,
2320       { "Refinement", "x509if.Refinement",
2321         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
2322         NULL, HFILL }},
2323     { &hf_x509if_refinement_not,
2324       { "not", "x509if.not",
2325         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
2326         "Refinement", HFILL }},
2327     { &hf_x509if_ruleIdentifier,
2328       { "ruleIdentifier", "x509if.ruleIdentifier",
2329         FT_INT32, BASE_DEC, NULL, 0,
2330         NULL, HFILL }},
2331     { &hf_x509if_nameForm,
2332       { "nameForm", "x509if.nameForm",
2333         FT_OID, BASE_NONE, NULL, 0,
2334         "OBJECT_IDENTIFIER", HFILL }},
2335     { &hf_x509if_superiorStructureRules,
2336       { "superiorStructureRules", "x509if.superiorStructureRules",
2337         FT_UINT32, BASE_DEC, NULL, 0,
2338         "SET_SIZE_1_MAX_OF_RuleIdentifier", HFILL }},
2339     { &hf_x509if_superiorStructureRules_item,
2340       { "RuleIdentifier", "x509if.RuleIdentifier",
2341         FT_INT32, BASE_DEC, NULL, 0,
2342         NULL, HFILL }},
2343     { &hf_x509if_structuralObjectClass,
2344       { "structuralObjectClass", "x509if.structuralObjectClass",
2345         FT_OID, BASE_NONE, NULL, 0,
2346         "OBJECT_IDENTIFIER", HFILL }},
2347     { &hf_x509if_auxiliaries,
2348       { "auxiliaries", "x509if.auxiliaries",
2349         FT_UINT32, BASE_DEC, NULL, 0,
2350         NULL, HFILL }},
2351     { &hf_x509if_auxiliaries_item,
2352       { "auxiliaries item", "x509if.auxiliaries_item",
2353         FT_OID, BASE_NONE, NULL, 0,
2354         "OBJECT_IDENTIFIER", HFILL }},
2355     { &hf_x509if_mandatory,
2356       { "mandatory", "x509if.mandatory",
2357         FT_UINT32, BASE_DEC, NULL, 0,
2358         NULL, HFILL }},
2359     { &hf_x509if_mandatory_item,
2360       { "mandatory item", "x509if.mandatory_item",
2361         FT_OID, BASE_NONE, NULL, 0,
2362         "OBJECT_IDENTIFIER", HFILL }},
2363     { &hf_x509if_optional,
2364       { "optional", "x509if.optional",
2365         FT_UINT32, BASE_DEC, NULL, 0,
2366         NULL, HFILL }},
2367     { &hf_x509if_optional_item,
2368       { "optional item", "x509if.optional_item",
2369         FT_OID, BASE_NONE, NULL, 0,
2370         "OBJECT_IDENTIFIER", HFILL }},
2371     { &hf_x509if_precluded,
2372       { "precluded", "x509if.precluded",
2373         FT_UINT32, BASE_DEC, NULL, 0,
2374         NULL, HFILL }},
2375     { &hf_x509if_precluded_item,
2376       { "precluded item", "x509if.precluded_item",
2377         FT_OID, BASE_NONE, NULL, 0,
2378         "OBJECT_IDENTIFIER", HFILL }},
2379     { &hf_x509if_attributeType,
2380       { "attributeType", "x509if.attributeType",
2381         FT_OID, BASE_NONE, NULL, 0,
2382         "OBJECT_IDENTIFIER", HFILL }},
2383     { &hf_x509if_mandatoryContexts,
2384       { "mandatoryContexts", "x509if.mandatoryContexts",
2385         FT_UINT32, BASE_DEC, NULL, 0,
2386         NULL, HFILL }},
2387     { &hf_x509if_mandatoryContexts_item,
2388       { "mandatoryContexts item", "x509if.mandatoryContexts_item",
2389         FT_OID, BASE_NONE, NULL, 0,
2390         "OBJECT_IDENTIFIER", HFILL }},
2391     { &hf_x509if_optionalContexts,
2392       { "optionalContexts", "x509if.optionalContexts",
2393         FT_UINT32, BASE_DEC, NULL, 0,
2394         NULL, HFILL }},
2395     { &hf_x509if_optionalContexts_item,
2396       { "optionalContexts item", "x509if.optionalContexts_item",
2397         FT_OID, BASE_NONE, NULL, 0,
2398         "OBJECT_IDENTIFIER", HFILL }},
2399     { &hf_x509if_id,
2400       { "id", "x509if.id",
2401         FT_INT32, BASE_DEC, NULL, 0,
2402         "INTEGER", HFILL }},
2403     { &hf_x509if_dmdId,
2404       { "dmdId", "x509if.dmdId",
2405         FT_OID, BASE_NONE, NULL, 0,
2406         "OBJECT_IDENTIFIER", HFILL }},
2407     { &hf_x509if_attributeType_01,
2408       { "attributeType", "x509if.attributeType",
2409         FT_OID, BASE_NONE, NULL, 0,
2410         NULL, HFILL }},
2411     { &hf_x509if_includeSubtypes,
2412       { "includeSubtypes", "x509if.includeSubtypes",
2413         FT_BOOLEAN, BASE_NONE, NULL, 0,
2414         "BOOLEAN", HFILL }},
2415     { &hf_x509if_ra_selectedValues,
2416       { "selectedValues", "x509if.selectedValues",
2417         FT_UINT32, BASE_DEC, NULL, 0,
2418         "T_ra_selectedValues", HFILL }},
2419     { &hf_x509if_ra_selectedValues_item,
2420       { "selectedValues item", "x509if.selectedValues_item",
2421         FT_NONE, BASE_NONE, NULL, 0,
2422         "T_ra_selectedValues_item", HFILL }},
2423     { &hf_x509if_defaultValues,
2424       { "defaultValues", "x509if.defaultValues",
2425         FT_UINT32, BASE_DEC, NULL, 0,
2426         NULL, HFILL }},
2427     { &hf_x509if_defaultValues_item,
2428       { "defaultValues item", "x509if.defaultValues_item",
2429         FT_NONE, BASE_NONE, NULL, 0,
2430         NULL, HFILL }},
2431     { &hf_x509if_entryType,
2432       { "entryType", "x509if.entryType",
2433         FT_OID, BASE_NONE, NULL, 0,
2434         NULL, HFILL }},
2435     { &hf_x509if_ra_values,
2436       { "values", "x509if.values",
2437         FT_UINT32, BASE_DEC, NULL, 0,
2438         "T_ra_values", HFILL }},
2439     { &hf_x509if_ra_values_item,
2440       { "values item", "x509if.values_item",
2441         FT_NONE, BASE_NONE, NULL, 0,
2442         "T_ra_values_item", HFILL }},
2443     { &hf_x509if_contexts,
2444       { "contexts", "x509if.contexts",
2445         FT_UINT32, BASE_DEC, NULL, 0,
2446         "SEQUENCE_SIZE_0_MAX_OF_ContextProfile", HFILL }},
2447     { &hf_x509if_contexts_item,
2448       { "ContextProfile", "x509if.ContextProfile",
2449         FT_NONE, BASE_NONE, NULL, 0,
2450         NULL, HFILL }},
2451     { &hf_x509if_contextCombination,
2452       { "contextCombination", "x509if.contextCombination",
2453         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
2454         NULL, HFILL }},
2455     { &hf_x509if_matchingUse,
2456       { "matchingUse", "x509if.matchingUse",
2457         FT_UINT32, BASE_DEC, NULL, 0,
2458         "SEQUENCE_SIZE_1_MAX_OF_MatchingUse", HFILL }},
2459     { &hf_x509if_matchingUse_item,
2460       { "MatchingUse", "x509if.MatchingUse",
2461         FT_NONE, BASE_NONE, NULL, 0,
2462         NULL, HFILL }},
2463     { &hf_x509if_contextType_01,
2464       { "contextType", "x509if.contextType",
2465         FT_OID, BASE_NONE, NULL, 0,
2466         "T_contextType_01", HFILL }},
2467     { &hf_x509if_contextValue,
2468       { "contextValue", "x509if.contextValue",
2469         FT_UINT32, BASE_DEC, NULL, 0,
2470         NULL, HFILL }},
2471     { &hf_x509if_contextValue_item,
2472       { "contextValue item", "x509if.contextValue_item",
2473         FT_NONE, BASE_NONE, NULL, 0,
2474         NULL, HFILL }},
2475     { &hf_x509if_context,
2476       { "context", "x509if.context",
2477         FT_OID, BASE_NONE, NULL, 0,
2478         "OBJECT_IDENTIFIER", HFILL }},
2479     { &hf_x509if_contextcombination_and,
2480       { "and", "x509if.and",
2481         FT_UINT32, BASE_DEC, NULL, 0,
2482         "SEQUENCE_OF_ContextCombination", HFILL }},
2483     { &hf_x509if_contextcombination_and_item,
2484       { "ContextCombination", "x509if.ContextCombination",
2485         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
2486         NULL, HFILL }},
2487     { &hf_x509if_contextcombination_or,
2488       { "or", "x509if.or",
2489         FT_UINT32, BASE_DEC, NULL, 0,
2490         "SEQUENCE_OF_ContextCombination", HFILL }},
2491     { &hf_x509if_contextcombination_or_item,
2492       { "ContextCombination", "x509if.ContextCombination",
2493         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
2494         NULL, HFILL }},
2495     { &hf_x509if_contextcombination_not,
2496       { "not", "x509if.not",
2497         FT_UINT32, BASE_DEC, VALS(x509if_ContextCombination_vals), 0,
2498         "ContextCombination", HFILL }},
2499     { &hf_x509if_restrictionType,
2500       { "restrictionType", "x509if.restrictionType",
2501         FT_OID, BASE_NONE, NULL, 0,
2502         NULL, HFILL }},
2503     { &hf_x509if_restrictionValue,
2504       { "restrictionValue", "x509if.restrictionValue",
2505         FT_NONE, BASE_NONE, NULL, 0,
2506         NULL, HFILL }},
2507     { &hf_x509if_attribute,
2508       { "attribute", "x509if.attribute",
2509         FT_OID, BASE_NONE, NULL, 0,
2510         "AttributeType", HFILL }},
2511     { &hf_x509if_and,
2512       { "and", "x509if.and",
2513         FT_UINT32, BASE_DEC, NULL, 0,
2514         "SEQUENCE_OF_AttributeCombination", HFILL }},
2515     { &hf_x509if_and_item,
2516       { "AttributeCombination", "x509if.AttributeCombination",
2517         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
2518         NULL, HFILL }},
2519     { &hf_x509if_or,
2520       { "or", "x509if.or",
2521         FT_UINT32, BASE_DEC, NULL, 0,
2522         "SEQUENCE_OF_AttributeCombination", HFILL }},
2523     { &hf_x509if_or_item,
2524       { "AttributeCombination", "x509if.AttributeCombination",
2525         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
2526         NULL, HFILL }},
2527     { &hf_x509if_not,
2528       { "not", "x509if.not",
2529         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
2530         "AttributeCombination", HFILL }},
2531     { &hf_x509if_attributeType_02,
2532       { "attributeType", "x509if.attributeType",
2533         FT_OID, BASE_NONE, NULL, 0,
2534         "T_attributeType_01", HFILL }},
2535     { &hf_x509if_outputValues,
2536       { "outputValues", "x509if.outputValues",
2537         FT_UINT32, BASE_DEC, VALS(x509if_T_outputValues_vals), 0,
2538         NULL, HFILL }},
2539     { &hf_x509if_selectedValues,
2540       { "selectedValues", "x509if.selectedValues",
2541         FT_UINT32, BASE_DEC, NULL, 0,
2542         NULL, HFILL }},
2543     { &hf_x509if_selectedValues_item,
2544       { "selectedValues item", "x509if.selectedValues_item",
2545         FT_NONE, BASE_NONE, NULL, 0,
2546         NULL, HFILL }},
2547     { &hf_x509if_matchedValuesOnly,
2548       { "matchedValuesOnly", "x509if.matchedValuesOnly",
2549         FT_NONE, BASE_NONE, NULL, 0,
2550         NULL, HFILL }},
2551     { &hf_x509if_contexts_01,
2552       { "contexts", "x509if.contexts",
2553         FT_UINT32, BASE_DEC, NULL, 0,
2554         "SEQUENCE_SIZE_1_MAX_OF_ContextProfile", HFILL }},
2555     { &hf_x509if_serviceControls,
2556       { "serviceControls", "x509if.serviceControls",
2557         FT_NONE, BASE_NONE, NULL, 0,
2558         "ServiceControlOptions", HFILL }},
2559     { &hf_x509if_searchOptions,
2560       { "searchOptions", "x509if.searchOptions",
2561         FT_NONE, BASE_NONE, NULL, 0,
2562         "SearchControlOptions", HFILL }},
2563     { &hf_x509if_hierarchyOptions,
2564       { "hierarchyOptions", "x509if.hierarchyOptions",
2565         FT_NONE, BASE_NONE, NULL, 0,
2566         "HierarchySelections", HFILL }},
2567     { &hf_x509if_default,
2568       { "default", "x509if.default",
2569         FT_INT32, BASE_DEC, NULL, 0,
2570         "INTEGER", HFILL }},
2571     { &hf_x509if_max,
2572       { "max", "x509if.max",
2573         FT_INT32, BASE_DEC, NULL, 0,
2574         "INTEGER", HFILL }},
2575     { &hf_x509if_basic,
2576       { "basic", "x509if.basic",
2577         FT_NONE, BASE_NONE, NULL, 0,
2578         "MRMapping", HFILL }},
2579     { &hf_x509if_tightenings,
2580       { "tightenings", "x509if.tightenings",
2581         FT_UINT32, BASE_DEC, NULL, 0,
2582         "SEQUENCE_SIZE_1_MAX_OF_MRMapping", HFILL }},
2583     { &hf_x509if_tightenings_item,
2584       { "MRMapping", "x509if.MRMapping",
2585         FT_NONE, BASE_NONE, NULL, 0,
2586         NULL, HFILL }},
2587     { &hf_x509if_relaxations,
2588       { "relaxations", "x509if.relaxations",
2589         FT_UINT32, BASE_DEC, NULL, 0,
2590         "SEQUENCE_SIZE_1_MAX_OF_MRMapping", HFILL }},
2591     { &hf_x509if_relaxations_item,
2592       { "MRMapping", "x509if.MRMapping",
2593         FT_NONE, BASE_NONE, NULL, 0,
2594         NULL, HFILL }},
2595     { &hf_x509if_maximum_relaxation,
2596       { "maximum", "x509if.maximum",
2597         FT_INT32, BASE_DEC, NULL, 0,
2598         "INTEGER", HFILL }},
2599     { &hf_x509if_minimum_relaxation,
2600       { "minimum", "x509if.minimum",
2601         FT_INT32, BASE_DEC, NULL, 0,
2602         "INTEGER", HFILL }},
2603     { &hf_x509if_mapping,
2604       { "mapping", "x509if.mapping",
2605         FT_UINT32, BASE_DEC, NULL, 0,
2606         "SEQUENCE_SIZE_1_MAX_OF_Mapping", HFILL }},
2607     { &hf_x509if_mapping_item,
2608       { "Mapping", "x509if.Mapping",
2609         FT_NONE, BASE_NONE, NULL, 0,
2610         NULL, HFILL }},
2611     { &hf_x509if_substitution,
2612       { "substitution", "x509if.substitution",
2613         FT_UINT32, BASE_DEC, NULL, 0,
2614         "SEQUENCE_SIZE_1_MAX_OF_MRSubstitution", HFILL }},
2615     { &hf_x509if_substitution_item,
2616       { "MRSubstitution", "x509if.MRSubstitution",
2617         FT_NONE, BASE_NONE, NULL, 0,
2618         NULL, HFILL }},
2619     { &hf_x509if_mappingFunction,
2620       { "mappingFunction", "x509if.mappingFunction",
2621         FT_OID, BASE_NONE, NULL, 0,
2622         "OBJECT_IDENTIFIER", HFILL }},
2623     { &hf_x509if_level,
2624       { "level", "x509if.level",
2625         FT_INT32, BASE_DEC, NULL, 0,
2626         "INTEGER", HFILL }},
2627     { &hf_x509if_oldMatchingRule,
2628       { "oldMatchingRule", "x509if.oldMatchingRule",
2629         FT_OID, BASE_NONE, NULL, 0,
2630         "OBJECT_IDENTIFIER", HFILL }},
2631     { &hf_x509if_newMatchingRule,
2632       { "newMatchingRule", "x509if.newMatchingRule",
2633         FT_OID, BASE_NONE, NULL, 0,
2634         "OBJECT_IDENTIFIER", HFILL }},
2635     { &hf_x509if_base,
2636       { "base", "x509if.base",
2637         FT_UINT32, BASE_DEC, NULL, 0,
2638         "LocalName", HFILL }},
2639     { &hf_x509if_specificExclusions,
2640       { "specificExclusions", "x509if.specificExclusions",
2641         FT_UINT32, BASE_DEC, NULL, 0,
2642         NULL, HFILL }},
2643     { &hf_x509if_specificExclusions_item,
2644       { "specificExclusions item", "x509if.specificExclusions_item",
2645         FT_UINT32, BASE_DEC, VALS(x509if_T_specificExclusions_item_vals), 0,
2646         NULL, HFILL }},
2647     { &hf_x509if_specificationFilter,
2648       { "specificationFilter", "x509if.specificationFilter",
2649         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
2650         "Refinement", HFILL }},
2651     { &hf_x509if_serviceType,
2652       { "serviceType", "x509if.serviceType",
2653         FT_OID, BASE_NONE, NULL, 0,
2654         "OBJECT_IDENTIFIER", HFILL }},
2655     { &hf_x509if_userClass,
2656       { "userClass", "x509if.userClass",
2657         FT_INT32, BASE_DEC, NULL, 0,
2658         "INTEGER", HFILL }},
2659     { &hf_x509if_inputAttributeTypes,
2660       { "inputAttributeTypes", "x509if.inputAttributeTypes",
2661         FT_UINT32, BASE_DEC, NULL, 0,
2662         "SEQUENCE_SIZE_0_MAX_OF_RequestAttribute", HFILL }},
2663     { &hf_x509if_inputAttributeTypes_item,
2664       { "RequestAttribute", "x509if.RequestAttribute",
2665         FT_NONE, BASE_NONE, NULL, 0,
2666         NULL, HFILL }},
2667     { &hf_x509if_attributeCombination,
2668       { "attributeCombination", "x509if.attributeCombination",
2669         FT_UINT32, BASE_DEC, VALS(x509if_AttributeCombination_vals), 0,
2670         NULL, HFILL }},
2671     { &hf_x509if_outputAttributeTypes,
2672       { "outputAttributeTypes", "x509if.outputAttributeTypes",
2673         FT_UINT32, BASE_DEC, NULL, 0,
2674         "SEQUENCE_SIZE_1_MAX_OF_ResultAttribute", HFILL }},
2675     { &hf_x509if_outputAttributeTypes_item,
2676       { "ResultAttribute", "x509if.ResultAttribute",
2677         FT_NONE, BASE_NONE, NULL, 0,
2678         NULL, HFILL }},
2679     { &hf_x509if_defaultControls,
2680       { "defaultControls", "x509if.defaultControls",
2681         FT_NONE, BASE_NONE, NULL, 0,
2682         "ControlOptions", HFILL }},
2683     { &hf_x509if_mandatoryControls,
2684       { "mandatoryControls", "x509if.mandatoryControls",
2685         FT_NONE, BASE_NONE, NULL, 0,
2686         "ControlOptions", HFILL }},
2687     { &hf_x509if_searchRuleControls,
2688       { "searchRuleControls", "x509if.searchRuleControls",
2689         FT_NONE, BASE_NONE, NULL, 0,
2690         "ControlOptions", HFILL }},
2691     { &hf_x509if_familyGrouping,
2692       { "familyGrouping", "x509if.familyGrouping",
2693         FT_NONE, BASE_NONE, NULL, 0,
2694         NULL, HFILL }},
2695     { &hf_x509if_familyReturn,
2696       { "familyReturn", "x509if.familyReturn",
2697         FT_NONE, BASE_NONE, NULL, 0,
2698         NULL, HFILL }},
2699     { &hf_x509if_relaxation,
2700       { "relaxation", "x509if.relaxation",
2701         FT_NONE, BASE_NONE, NULL, 0,
2702         "RelaxationPolicy", HFILL }},
2703     { &hf_x509if_additionalControl,
2704       { "additionalControl", "x509if.additionalControl",
2705         FT_UINT32, BASE_DEC, NULL, 0,
2706         "SEQUENCE_SIZE_1_MAX_OF_AttributeType", HFILL }},
2707     { &hf_x509if_additionalControl_item,
2708       { "AttributeType", "x509if.AttributeType",
2709         FT_OID, BASE_NONE, NULL, 0,
2710         NULL, HFILL }},
2711     { &hf_x509if_allowedSubset,
2712       { "allowedSubset", "x509if.allowedSubset",
2713         FT_BYTES, BASE_NONE, NULL, 0,
2714         NULL, HFILL }},
2715     { &hf_x509if_imposedSubset,
2716       { "imposedSubset", "x509if.imposedSubset",
2717         FT_UINT32, BASE_DEC, VALS(x509if_ImposedSubset_vals), 0,
2718         NULL, HFILL }},
2719     { &hf_x509if_entryLimit,
2720       { "entryLimit", "x509if.entryLimit",
2721         FT_NONE, BASE_NONE, NULL, 0,
2722         NULL, HFILL }},
2723     { &hf_x509if_name,
2724       { "name", "x509if.name",
2725         FT_UINT32, BASE_DEC, NULL, 0,
2726         "SET_SIZE_1_MAX_OF_DirectoryString", HFILL }},
2727     { &hf_x509if_name_item,
2728       { "DirectoryString", "x509if.DirectoryString",
2729         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
2730         NULL, HFILL }},
2731     { &hf_x509if_description,
2732       { "description", "x509if.description",
2733         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
2734         "DirectoryString", HFILL }},
2735     { &hf_x509if_AllowedSubset_baseObject,
2736       { "baseObject", "x509if.baseObject",
2737         FT_BOOLEAN, 8, NULL, 0x80,
2738         NULL, HFILL }},
2739     { &hf_x509if_AllowedSubset_oneLevel,
2740       { "oneLevel", "x509if.oneLevel",
2741         FT_BOOLEAN, 8, NULL, 0x40,
2742         NULL, HFILL }},
2743     { &hf_x509if_AllowedSubset_wholeSubtree,
2744       { "wholeSubtree", "x509if.wholeSubtree",
2745         FT_BOOLEAN, 8, NULL, 0x20,
2746         NULL, HFILL }},
2747
2748 /*--- End of included file: packet-x509if-hfarr.c ---*/
2749 #line 121 "packet-x509if-template.c"
2750   };
2751
2752   /* List of subtrees */
2753   static gint *ett[] = {
2754
2755 /*--- Included file: packet-x509if-ettarr.c ---*/
2756 #line 1 "packet-x509if-ettarr.c"
2757     &ett_x509if_Attribute,
2758     &ett_x509if_T_values,
2759     &ett_x509if_T_valuesWithContext,
2760     &ett_x509if_T_valuesWithContext_item,
2761     &ett_x509if_SET_SIZE_1_MAX_OF_Context,
2762     &ett_x509if_Context,
2763     &ett_x509if_T_contextValues,
2764     &ett_x509if_AttributeValueAssertion,
2765     &ett_x509if_T_assertedContexts,
2766     &ett_x509if_SET_SIZE_1_MAX_OF_ContextAssertion,
2767     &ett_x509if_ContextAssertion,
2768     &ett_x509if_T_ca_contextValues,
2769     &ett_x509if_AttributeTypeAssertion,
2770     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextAssertion,
2771     &ett_x509if_Name,
2772     &ett_x509if_RDNSequence,
2773     &ett_x509if_RelativeDistinguishedName,
2774     &ett_x509if_AttributeTypeAndDistinguishedValue,
2775     &ett_x509if_T_valWithContext,
2776     &ett_x509if_T_valWithContext_item,
2777     &ett_x509if_SubtreeSpecification,
2778     &ett_x509if_ChopSpecification,
2779     &ett_x509if_T_chopSpecificExclusions,
2780     &ett_x509if_T_chopSpecificExclusions_item,
2781     &ett_x509if_Refinement,
2782     &ett_x509if_SET_OF_Refinement,
2783     &ett_x509if_DITStructureRule,
2784     &ett_x509if_SET_SIZE_1_MAX_OF_RuleIdentifier,
2785     &ett_x509if_DITContentRule,
2786     &ett_x509if_T_auxiliaries,
2787     &ett_x509if_T_mandatory,
2788     &ett_x509if_T_optional,
2789     &ett_x509if_T_precluded,
2790     &ett_x509if_DITContextUse,
2791     &ett_x509if_T_mandatoryContexts,
2792     &ett_x509if_T_optionalContexts,
2793     &ett_x509if_SearchRuleDescription,
2794     &ett_x509if_SearchRule,
2795     &ett_x509if_SearchRuleId,
2796     &ett_x509if_AllowedSubset,
2797     &ett_x509if_RequestAttribute,
2798     &ett_x509if_T_ra_selectedValues,
2799     &ett_x509if_T_defaultValues,
2800     &ett_x509if_T_defaultValues_item,
2801     &ett_x509if_T_ra_values,
2802     &ett_x509if_SEQUENCE_SIZE_0_MAX_OF_ContextProfile,
2803     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MatchingUse,
2804     &ett_x509if_ContextProfile,
2805     &ett_x509if_T_contextValue,
2806     &ett_x509if_ContextCombination,
2807     &ett_x509if_SEQUENCE_OF_ContextCombination,
2808     &ett_x509if_MatchingUse,
2809     &ett_x509if_AttributeCombination,
2810     &ett_x509if_SEQUENCE_OF_AttributeCombination,
2811     &ett_x509if_ResultAttribute,
2812     &ett_x509if_T_outputValues,
2813     &ett_x509if_T_selectedValues,
2814     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ContextProfile,
2815     &ett_x509if_ControlOptions,
2816     &ett_x509if_EntryLimit,
2817     &ett_x509if_RelaxationPolicy,
2818     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRMapping,
2819     &ett_x509if_MRMapping,
2820     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_Mapping,
2821     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_MRSubstitution,
2822     &ett_x509if_Mapping,
2823     &ett_x509if_MRSubstitution,
2824     &ett_x509if_T_specificExclusions,
2825     &ett_x509if_T_specificExclusions_item,
2826     &ett_x509if_SEQUENCE_SIZE_0_MAX_OF_RequestAttribute,
2827     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_ResultAttribute,
2828     &ett_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType,
2829     &ett_x509if_SET_SIZE_1_MAX_OF_DirectoryString,
2830
2831 /*--- End of included file: packet-x509if-ettarr.c ---*/
2832 #line 126 "packet-x509if-template.c"
2833   };
2834
2835   /* Register protocol */
2836   proto_x509if = proto_register_protocol(PNAME, PSNAME, PFNAME);
2837
2838   /* Register fields and subtrees */
2839   proto_register_field_array(proto_x509if, hf, array_length(hf));
2840   proto_register_subtree_array(ett, array_length(ett));
2841
2842   /* initialise array */
2843   fmt_vals[0].value = 0;
2844   fmt_vals[0].strptr = NULL;
2845
2846 }
2847
2848
2849 /*--- proto_reg_handoff_x509if -------------------------------------------*/
2850 void proto_reg_handoff_x509if(void) {
2851
2852 /*--- Included file: packet-x509if-dis-tab.c ---*/
2853 #line 1 "packet-x509if-dis-tab.c"
2854   register_ber_oid_dissector("2.5.4.1", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aliasedEntryName");
2855   register_ber_oid_dissector("2.5.4.31", dissect_DistinguishedName_PDU, proto_x509if, "id-at-member");
2856   register_ber_oid_dissector("2.5.4.32", dissect_DistinguishedName_PDU, proto_x509if, "id-at-owner");
2857   register_ber_oid_dissector("2.5.4.33", dissect_DistinguishedName_PDU, proto_x509if, "id-at-roleOccupant");
2858   register_ber_oid_dissector("2.5.4.34", dissect_DistinguishedName_PDU, proto_x509if, "id-at-seeAlso");
2859   register_ber_oid_dissector("2.5.4.49", dissect_DistinguishedName_PDU, proto_x509if, "id-at-distinguishedName");
2860   register_ber_oid_dissector("2.5.18.3", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-creatorsName");
2861   register_ber_oid_dissector("2.5.18.4", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-modifiersName");
2862   register_ber_oid_dissector("2.5.18.6", dissect_SubtreeSpecification_PDU, proto_x509if, "id-oa-subtreeSpecification");
2863   register_ber_oid_dissector("2.5.18.10", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-subschemaSubentry");
2864   register_ber_oid_dissector("2.5.18.11", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-accessControlSubentry");
2865   register_ber_oid_dissector("2.5.18.12", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-collectiveAttributeSubentry");
2866   register_ber_oid_dissector("2.5.18.13", dissect_DistinguishedName_PDU, proto_x509if, "id-oa-contextDefaultSubentry");
2867   register_ber_oid_dissector("2.5.18.17", dissect_HierarchyLevel_PDU, proto_x509if, "id-oa-hierarchyLevel");
2868   register_ber_oid_dissector("2.5.18.18", dissect_HierarchyBelow_PDU, proto_x509if, "iid-oa-hierarchyBelow");
2869   register_ber_oid_dissector("2.6.5.2.5", dissect_DistinguishedName_PDU, proto_x509if, "id-at-mhs-message-store-dn");
2870   register_ber_oid_dissector("2.6.5.2.14", dissect_DistinguishedName_PDU, proto_x509if, "id-at-mhs-dl-related-lists");
2871   register_ber_oid_dissector("2.16.840.1.101.2.2.1.3", dissect_DistinguishedName_PDU, proto_x509if, "id-at-alternateRecipient");
2872   register_ber_oid_dissector("2.16.840.1.101.2.2.1.4", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedOrganization");
2873   register_ber_oid_dissector("2.16.840.1.101.2.2.1.6", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedPLA");
2874   register_ber_oid_dissector("2.16.840.1.101.2.2.1.49", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aliasPointer");
2875   register_ber_oid_dissector("2.16.840.1.101.2.2.1.61", dissect_DistinguishedName_PDU, proto_x509if, "id-at-listPointer");
2876   register_ber_oid_dissector("2.16.840.1.101.2.2.1.110", dissect_DistinguishedName_PDU, proto_x509if, "id-at-administrator");
2877   register_ber_oid_dissector("2.16.840.1.101.2.2.1.111", dissect_DistinguishedName_PDU, proto_x509if, "id-at-aigsExpanded");
2878   register_ber_oid_dissector("2.16.840.1.101.2.2.1.113", dissect_DistinguishedName_PDU, proto_x509if, "id-at-associatedAL");
2879   register_ber_oid_dissector("2.16.840.1.101.2.2.1.114", dissect_DistinguishedName_PDU, proto_x509if, "id-at-copyMember");
2880   register_ber_oid_dissector("2.16.840.1.101.2.2.1.117", dissect_DistinguishedName_PDU, proto_x509if, "id-at-guard");
2881   register_ber_oid_dissector("2.16.840.1.101.2.2.1.121", dissect_DistinguishedName_PDU, proto_x509if, "id-at-networkDN");
2882   register_ber_oid_dissector("2.16.840.1.101.2.2.1.138", dissect_DistinguishedName_PDU, proto_x509if, "id-at-plasServed");
2883   register_ber_oid_dissector("2.16.840.1.101.2.2.1.139", dissect_DistinguishedName_PDU, proto_x509if, "id-at-deployed");
2884   register_ber_oid_dissector("2.16.840.1.101.2.2.1.140", dissect_DistinguishedName_PDU, proto_x509if, "id-at-garrison");
2885
2886
2887 /*--- End of included file: packet-x509if-dis-tab.c ---*/
2888 #line 145 "packet-x509if-template.c"
2889 }
2890