Coverage Report

Created: 2026-09-28 06:52

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