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