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