Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-ieee1609dot2.c
blob355cbd9e3de62211d0876adb5610af525d49f898
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-ieee1609dot2.c */
4 /* asn2wrs.py -q -L -p ieee1609dot2 -c ./ieee1609dot2.cnf -s ./packet-ieee1609dot2-template -D . -O ../.. IEEE1609dot2BaseTypes.asn Ieee1609Dot2CrlBaseTypes.asn Ieee1609Dot2Crl.asn Ieee1609Dot2.asn IEEE1609dot12.asn */
6 /* packet-IEEE1609dot2.c
7 * Routines for IEEE 1609.2
8 * Copyright 2018, Anders Broman <anders.broman@ericsson.com>
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
17 /* Also contains IEEE std 1609.12
18 * section 4.1.3 PSID allocations
21 #include "config.h"
23 #include <stdlib.h>
24 #include <time.h>
26 #include <epan/packet.h>
27 #include <epan/conversation.h>
28 #include <epan/oids.h>
29 #include <epan/asn1.h>
30 #include <epan/proto_data.h>
31 #include <wsutil/array.h>
33 #include "packet-oer.h"
34 #include "packet-ieee1609dot2.h"
36 #define PNAME "IEEE1609dot2"
37 #define PSNAME "IEEE1609dot2"
38 #define PFNAME "ieee1609dot2"
40 void proto_register_ieee1609dot2(void);
41 void proto_reg_handoff_ieee1609dot2(void);
43 /* Initialize the protocol and registered fields */
44 int proto_ieee1609dot2;
45 dissector_handle_t proto_ieee1609dot2_handle;
46 static int hf_ieee1609dot2_SecuredCrl_PDU; /* SecuredCrl */
47 static int hf_ieee1609dot2_Ieee1609Dot2Data_PDU; /* Ieee1609Dot2Data */
48 static int hf_ieee1609dot2_SequenceOfUint8_item; /* Uint8 */
49 static int hf_ieee1609dot2_SequenceOfUint16_item; /* Uint16 */
50 static int hf_ieee1609dot2_SequenceOfHashedId3_item; /* HashedId3 */
51 static int hf_ieee1609dot2_start; /* Time32 */
52 static int hf_ieee1609dot2_duration; /* Duration */
53 static int hf_ieee1609dot2_microseconds; /* Uint16 */
54 static int hf_ieee1609dot2_milliseconds; /* Uint16 */
55 static int hf_ieee1609dot2_seconds; /* Uint16 */
56 static int hf_ieee1609dot2_minutes; /* Uint16 */
57 static int hf_ieee1609dot2_hours; /* Uint16 */
58 static int hf_ieee1609dot2_sixtyHours; /* Uint16 */
59 static int hf_ieee1609dot2_years; /* Uint16 */
60 static int hf_ieee1609dot2_circularRegion; /* CircularRegion */
61 static int hf_ieee1609dot2_rectangularRegion; /* SequenceOfRectangularRegion */
62 static int hf_ieee1609dot2_polygonalRegion; /* PolygonalRegion */
63 static int hf_ieee1609dot2_identifiedRegion; /* SequenceOfIdentifiedRegion */
64 static int hf_ieee1609dot2_center; /* TwoDLocation */
65 static int hf_ieee1609dot2_radius; /* Uint16 */
66 static int hf_ieee1609dot2_northWest; /* TwoDLocation */
67 static int hf_ieee1609dot2_southEast; /* TwoDLocation */
68 static int hf_ieee1609dot2_SequenceOfRectangularRegion_item; /* RectangularRegion */
69 static int hf_ieee1609dot2_PolygonalRegion_item; /* TwoDLocation */
70 static int hf_ieee1609dot2_latitude; /* Latitude */
71 static int hf_ieee1609dot2_longitude; /* Longitude */
72 static int hf_ieee1609dot2_countryOnly; /* UnCountryId */
73 static int hf_ieee1609dot2_countryAndRegions; /* CountryAndRegions */
74 static int hf_ieee1609dot2_countryAndSubregions; /* CountryAndSubregions */
75 static int hf_ieee1609dot2_SequenceOfIdentifiedRegion_item; /* IdentifiedRegion */
76 static int hf_ieee1609dot2_regions; /* SequenceOfUint8 */
77 static int hf_ieee1609dot2_regionAndSubregions; /* SequenceOfRegionAndSubregions */
78 static int hf_ieee1609dot2_rasRegion; /* Uint8 */
79 static int hf_ieee1609dot2_subregions; /* SequenceOfUint16 */
80 static int hf_ieee1609dot2_SequenceOfRegionAndSubregions_item; /* RegionAndSubregions */
81 static int hf_ieee1609dot2_elevation; /* Elevation */
82 static int hf_ieee1609dot2_ecdsaNistP256Signature; /* EcdsaP256Signature */
83 static int hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature; /* EcdsaP256Signature */
84 static int hf_ieee1609dot2_ecdsaBrainpoolP384r1Signature; /* EcdsaP384Signature */
85 static int hf_ieee1609dot2_ecdsaNistP384Signature; /* EcdsaP384Signature */
86 static int hf_ieee1609dot2_sm2Signature; /* EcsigP256Signature */
87 static int hf_ieee1609dot2_rSig; /* EccP256CurvePoint */
88 static int hf_ieee1609dot2_sSig; /* OCTET_STRING_SIZE_32 */
89 static int hf_ieee1609dot2_ecdsap384RSig; /* EccP384CurvePoint */
90 static int hf_ieee1609dot2_ecdsap384SSig; /* OCTET_STRING_SIZE_48 */
91 static int hf_ieee1609dot2_ecsigp256RSig; /* OCTET_STRING_SIZE_32 */
92 static int hf_ieee1609dot2_x_only; /* OCTET_STRING_SIZE_32 */
93 static int hf_ieee1609dot2_fill; /* NULL */
94 static int hf_ieee1609dot2_compressed_y_0; /* OCTET_STRING_SIZE_32 */
95 static int hf_ieee1609dot2_compressed_y_1; /* OCTET_STRING_SIZE_32 */
96 static int hf_ieee1609dot2_uncompressedP256; /* T_uncompressedP256 */
97 static int hf_ieee1609dot2_x; /* OCTET_STRING_SIZE_32 */
98 static int hf_ieee1609dot2_y; /* OCTET_STRING_SIZE_32 */
99 static int hf_ieee1609dot2_eccp384cpXOnly; /* OCTET_STRING_SIZE_48 */
100 static int hf_ieee1609dot2_eccp384cpCompressed_y_0; /* OCTET_STRING_SIZE_48 */
101 static int hf_ieee1609dot2_eccp384cpCompressed_y_1; /* OCTET_STRING_SIZE_48 */
102 static int hf_ieee1609dot2_uncompressedP384; /* T_uncompressedP384 */
103 static int hf_ieee1609dot2_eccp384cpX; /* OCTET_STRING_SIZE_48 */
104 static int hf_ieee1609dot2_eccp384cpY; /* OCTET_STRING_SIZE_48 */
105 static int hf_ieee1609dot2_v; /* EccP256CurvePoint */
106 static int hf_ieee1609dot2_c; /* OCTET_STRING_SIZE_16 */
107 static int hf_ieee1609dot2_t; /* OCTET_STRING_SIZE_16 */
108 static int hf_ieee1609dot2_t_01; /* OCTET_STRING_SIZE_32 */
109 static int hf_ieee1609dot2_public; /* PublicEncryptionKey */
110 static int hf_ieee1609dot2_symmetric; /* SymmetricEncryptionKey */
111 static int hf_ieee1609dot2_supportedSymmAlg; /* SymmAlgorithm */
112 static int hf_ieee1609dot2_publicKey; /* BasePublicEncryptionKey */
113 static int hf_ieee1609dot2_eciesNistP256; /* EccP256CurvePoint */
114 static int hf_ieee1609dot2_eciesBrainpoolP256r1; /* EccP256CurvePoint */
115 static int hf_ieee1609dot2_ecencSm2; /* EccP256CurvePoint */
116 static int hf_ieee1609dot2_ecdsaNistP256; /* EccP256CurvePoint */
117 static int hf_ieee1609dot2_ecdsaBrainpoolP256r1; /* EccP256CurvePoint */
118 static int hf_ieee1609dot2_ecdsaBrainpoolP384r1; /* EccP384CurvePoint */
119 static int hf_ieee1609dot2_ecdsaNistP384; /* EccP384CurvePoint */
120 static int hf_ieee1609dot2_ecsigSm2; /* EccP256CurvePoint */
121 static int hf_ieee1609dot2_aes128Ccm; /* OCTET_STRING_SIZE_16 */
122 static int hf_ieee1609dot2_sm4Ccm; /* OCTET_STRING_SIZE_16 */
123 static int hf_ieee1609dot2_psPsid; /* T_psPsid */
124 static int hf_ieee1609dot2_ssp; /* ServiceSpecificPermissions */
125 static int hf_ieee1609dot2_SequenceOfPsidSsp_item; /* PsidSsp */
126 static int hf_ieee1609dot2_opaque; /* T_opaque */
127 static int hf_ieee1609dot2_bitmapSsp; /* BitmapSsp */
128 static int hf_ieee1609dot2_psid; /* Psid */
129 static int hf_ieee1609dot2_sspRange; /* SspRange */
130 static int hf_ieee1609dot2_SequenceOfPsidSspRange_item; /* PsidSspRange */
131 static int hf_ieee1609dot2_srRange; /* SequenceOfOctetString */
132 static int hf_ieee1609dot2_all; /* NULL */
133 static int hf_ieee1609dot2_bitmapSspRange; /* BitmapSspRange */
134 static int hf_ieee1609dot2_sspValue; /* OCTET_STRING_SIZE_1_32 */
135 static int hf_ieee1609dot2_sspBitmask; /* OCTET_STRING_SIZE_1_32 */
136 static int hf_ieee1609dot2_SequenceOfOctetString_item; /* OCTET_STRING_SIZE_0_MAX */
137 static int hf_ieee1609dot2_jValue; /* OCTET_STRING_SIZE_4 */
138 static int hf_ieee1609dot2_value; /* OCTET_STRING_SIZE_9 */
139 static int hf_ieee1609dot2_SequenceOfLinkageSeed_item; /* LinkageSeed */
140 static int hf_ieee1609dot2_version; /* Uint8_1 */
141 static int hf_ieee1609dot2_crlSeries; /* CrlSeries */
142 static int hf_ieee1609dot2_crlCraca; /* HashedId8 */
143 static int hf_ieee1609dot2_issueDate; /* Time32 */
144 static int hf_ieee1609dot2_nextCrl; /* Time32 */
145 static int hf_ieee1609dot2_priorityInfo; /* CrlPriorityInfo */
146 static int hf_ieee1609dot2_typeSpecific; /* TypeSpecificCrlContents */
147 static int hf_ieee1609dot2_priority; /* Uint8 */
148 static int hf_ieee1609dot2_fullHashCrl; /* ToBeSignedHashIdCrl */
149 static int hf_ieee1609dot2_deltaHashCrl; /* ToBeSignedHashIdCrl */
150 static int hf_ieee1609dot2_fullLinkedCrl; /* ToBeSignedLinkageValueCrl */
151 static int hf_ieee1609dot2_deltaLinkedCrl; /* ToBeSignedLinkageValueCrl */
152 static int hf_ieee1609dot2_fullLinkedCrlWithAlg; /* ToBeSignedLinkageValueCrlWithAlgIdentifier */
153 static int hf_ieee1609dot2_deltaLinkedCrlWithAlg; /* ToBeSignedLinkageValueCrlWithAlgIdentifier */
154 static int hf_ieee1609dot2_crlSerial; /* Uint32 */
155 static int hf_ieee1609dot2_entries; /* SequenceOfHashBasedRevocationInfo */
156 static int hf_ieee1609dot2_SequenceOfHashBasedRevocationInfo_item; /* HashBasedRevocationInfo */
157 static int hf_ieee1609dot2_hashedId; /* HashedId10 */
158 static int hf_ieee1609dot2_expiry; /* Time32 */
159 static int hf_ieee1609dot2_iRev; /* IValue */
160 static int hf_ieee1609dot2_indexWithinI; /* Uint8 */
161 static int hf_ieee1609dot2_individual; /* SequenceOfJMaxGroup */
162 static int hf_ieee1609dot2_groups; /* SequenceOfGroupCrlEntry */
163 static int hf_ieee1609dot2_groupsSingleSeed; /* SequenceOfGroupSingleSeedCrlEntry */
164 static int hf_ieee1609dot2_SequenceOfJMaxGroup_item; /* JMaxGroup */
165 static int hf_ieee1609dot2_jmax; /* Uint8 */
166 static int hf_ieee1609dot2_contents; /* SequenceOfLAGroup */
167 static int hf_ieee1609dot2_SequenceOfLAGroup_item; /* LAGroup */
168 static int hf_ieee1609dot2_la1Id; /* LaId */
169 static int hf_ieee1609dot2_la2Id; /* LaId */
170 static int hf_ieee1609dot2_contents_01; /* SequenceOfIMaxGroup */
171 static int hf_ieee1609dot2_SequenceOfIMaxGroup_item; /* IMaxGroup */
172 static int hf_ieee1609dot2_iMax; /* Uint16 */
173 static int hf_ieee1609dot2_contents_02; /* SequenceOfIndividualRevocation */
174 static int hf_ieee1609dot2_singleSeed; /* SequenceOfLinkageSeed */
175 static int hf_ieee1609dot2_SequenceOfIndividualRevocation_item; /* IndividualRevocation */
176 static int hf_ieee1609dot2_linkageSeed1; /* LinkageSeed */
177 static int hf_ieee1609dot2_linkageSeed2; /* LinkageSeed */
178 static int hf_ieee1609dot2_SequenceOfGroupCrlEntry_item; /* GroupCrlEntry */
179 static int hf_ieee1609dot2_seedEvolution; /* SeedEvolutionFunctionIdentifier */
180 static int hf_ieee1609dot2_lvGeneration; /* LvGenerationFunctionIdentifier */
181 static int hf_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry_item; /* GroupSingleSeedCrlEntry */
182 static int hf_ieee1609dot2_laId; /* LaId */
183 static int hf_ieee1609dot2_linkageSeed; /* LinkageSeed */
184 static int hf_ieee1609dot2_content; /* SecuredCrlContent */
185 static int hf_ieee1609dot2_signedData; /* CrlSignedData */
186 static int hf_ieee1609dot2_tbsData; /* CrlToBeSignedData */
187 static int hf_ieee1609dot2_payload; /* CrlSignedDataPayload */
188 static int hf_ieee1609dot2_headerInfo; /* HeaderInfo */
189 static int hf_ieee1609dot2_data; /* Ieee1609Dot2CrlData */
190 static int hf_ieee1609dot2_content_01; /* Ieee1609Dot2CrlContent */
191 static int hf_ieee1609dot2_unsecuredData; /* CrlContents */
192 static int hf_ieee1609dot2_protocolVersion; /* Uint8_3 */
193 static int hf_ieee1609dot2_content_02; /* Ieee1609Dot2Content */
194 static int hf_ieee1609dot2_unsecuredData_01; /* T_unsecuredData */
195 static int hf_ieee1609dot2_signedData_01; /* SignedData */
196 static int hf_ieee1609dot2_encryptedData; /* EncryptedData */
197 static int hf_ieee1609dot2_signedCertificateRequest; /* Opaque */
198 static int hf_ieee1609dot2_signedX509CertificateRequest; /* Opaque */
199 static int hf_ieee1609dot2_hashId; /* HashAlgorithm */
200 static int hf_ieee1609dot2_tbsData_01; /* ToBeSignedData */
201 static int hf_ieee1609dot2_signer; /* SignerIdentifier */
202 static int hf_ieee1609dot2_signature; /* Signature */
203 static int hf_ieee1609dot2_payload_01; /* SignedDataPayload */
204 static int hf_ieee1609dot2_data_01; /* Ieee1609Dot2Data */
205 static int hf_ieee1609dot2_extDataHash; /* HashedData */
206 static int hf_ieee1609dot2_omitted; /* NULL */
207 static int hf_ieee1609dot2_sha256HashedData; /* HashedId32 */
208 static int hf_ieee1609dot2_sha384HashedData; /* HashedId48 */
209 static int hf_ieee1609dot2_sm3HashedData; /* HashedId32 */
210 static int hf_ieee1609dot2_hiPsid; /* T_hiPsid */
211 static int hf_ieee1609dot2_generationTime; /* Time64 */
212 static int hf_ieee1609dot2_expiryTime; /* Time64 */
213 static int hf_ieee1609dot2_generationLocation; /* ThreeDLocation */
214 static int hf_ieee1609dot2_p2pcdLearningRequest; /* HashedId3 */
215 static int hf_ieee1609dot2_missingCrlIdentifier; /* MissingCrlIdentifier */
216 static int hf_ieee1609dot2_encryptionKey; /* EncryptionKey */
217 static int hf_ieee1609dot2_inlineP2pcdRequest; /* SequenceOfHashedId3 */
218 static int hf_ieee1609dot2_requestedCertificate; /* Certificate */
219 static int hf_ieee1609dot2_pduFunctionalType; /* PduFunctionalType */
220 static int hf_ieee1609dot2_contributedExtensions; /* ContributedExtensionBlocks */
221 static int hf_ieee1609dot2_cracaId; /* HashedId3 */
222 static int hf_ieee1609dot2_ContributedExtensionBlocks_item; /* ContributedExtensionBlock */
223 static int hf_ieee1609dot2_contributorId; /* HeaderInfoContributorId */
224 static int hf_ieee1609dot2_extns; /* T_extns */
225 static int hf_ieee1609dot2_extns_item; /* T_extns_item */
226 static int hf_ieee1609dot2_digest; /* HashedId8 */
227 static int hf_ieee1609dot2_certificate; /* SequenceOfCertificate */
228 static int hf_ieee1609dot2_siSelf; /* NULL */
229 static int hf_ieee1609dot2_recipients; /* SequenceOfRecipientInfo */
230 static int hf_ieee1609dot2_ciphertext; /* SymmetricCiphertext */
231 static int hf_ieee1609dot2_pskRecipInfo; /* PreSharedKeyRecipientInfo */
232 static int hf_ieee1609dot2_symmRecipInfo; /* SymmRecipientInfo */
233 static int hf_ieee1609dot2_certRecipInfo; /* PKRecipientInfo */
234 static int hf_ieee1609dot2_signedDataRecipInfo; /* PKRecipientInfo */
235 static int hf_ieee1609dot2_rekRecipInfo; /* PKRecipientInfo */
236 static int hf_ieee1609dot2_SequenceOfRecipientInfo_item; /* RecipientInfo */
237 static int hf_ieee1609dot2_recipientId; /* HashedId8 */
238 static int hf_ieee1609dot2_sriEncKey; /* SymmetricCiphertext */
239 static int hf_ieee1609dot2_encKey; /* EncryptedDataEncryptionKey */
240 static int hf_ieee1609dot2_edeEciesNistP256; /* EciesP256EncryptedKey */
241 static int hf_ieee1609dot2_edekEciesBrainpoolP256r1; /* EciesP256EncryptedKey */
242 static int hf_ieee1609dot2_ecencSm2256; /* EcencP256EncryptedKey */
243 static int hf_ieee1609dot2_aes128ccm; /* One28BitCcmCiphertext */
244 static int hf_ieee1609dot2_sm4Ccm_01; /* One28BitCcmCiphertext */
245 static int hf_ieee1609dot2_nonce; /* OCTET_STRING_SIZE_12 */
246 static int hf_ieee1609dot2_ccmCiphertext; /* Opaque */
247 static int hf_ieee1609dot2_SequenceOfCertificate_item; /* Certificate */
248 static int hf_ieee1609dot2_version_01; /* Uint8_3 */
249 static int hf_ieee1609dot2_type; /* CertificateType */
250 static int hf_ieee1609dot2_issuer; /* IssuerIdentifier */
251 static int hf_ieee1609dot2_toBeSigned; /* ToBeSignedCertificate */
252 static int hf_ieee1609dot2_sha256AndDigest; /* HashedId8 */
253 static int hf_ieee1609dot2_iiSelf; /* HashAlgorithm */
254 static int hf_ieee1609dot2_sha384AndDigest; /* HashedId8 */
255 static int hf_ieee1609dot2_sm3AndDigest; /* HashedId8 */
256 static int hf_ieee1609dot2_certificateId; /* CertificateId */
257 static int hf_ieee1609dot2_validityPeriod; /* ValidityPeriod */
258 static int hf_ieee1609dot2_region; /* GeographicRegion */
259 static int hf_ieee1609dot2_assuranceLevel; /* SubjectAssurance */
260 static int hf_ieee1609dot2_appPermissions; /* SequenceOfPsidSsp */
261 static int hf_ieee1609dot2_certIssuePermissions; /* SequenceOfPsidGroupPermissions */
262 static int hf_ieee1609dot2_certRequestPermissions; /* SequenceOfPsidGroupPermissions */
263 static int hf_ieee1609dot2_canRequestRollover; /* NULL */
264 static int hf_ieee1609dot2_tbscEncryptionKey; /* PublicEncryptionKey */
265 static int hf_ieee1609dot2_verifyKeyIndicator; /* VerificationKeyIndicator */
266 static int hf_ieee1609dot2_flags; /* T_flags */
267 static int hf_ieee1609dot2_appExtensions; /* SequenceOfAppExtensions */
268 static int hf_ieee1609dot2_certIssueExtensions; /* SequenceOfCertIssueExtensions */
269 static int hf_ieee1609dot2_certRequestExtension; /* SequenceOfCertRequestExtensions */
270 static int hf_ieee1609dot2_linkageData; /* LinkageData */
271 static int hf_ieee1609dot2_name; /* Hostname */
272 static int hf_ieee1609dot2_binaryId; /* OCTET_STRING_SIZE_1_64 */
273 static int hf_ieee1609dot2_none; /* NULL */
274 static int hf_ieee1609dot2_iCert; /* IValue */
275 static int hf_ieee1609dot2_linkage_value; /* LinkageValue */
276 static int hf_ieee1609dot2_group_linkage_value; /* GroupLinkageValue */
277 static int hf_ieee1609dot2_subjectPermissions; /* SubjectPermissions */
278 static int hf_ieee1609dot2_minChainLength; /* INTEGER */
279 static int hf_ieee1609dot2_chainLengthRange; /* INTEGER */
280 static int hf_ieee1609dot2_eeType; /* EndEntityType */
281 static int hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item; /* PsidGroupPermissions */
282 static int hf_ieee1609dot2_explicit; /* SequenceOfPsidSspRange */
283 static int hf_ieee1609dot2_verificationKey; /* PublicVerificationKey */
284 static int hf_ieee1609dot2_reconstructionValue; /* EccP256CurvePoint */
285 static int hf_ieee1609dot2_SequenceOfAppExtensions_item; /* AppExtension */
286 static int hf_ieee1609dot2_id; /* ExtId */
287 static int hf_ieee1609dot2_content_03; /* T_content */
288 static int hf_ieee1609dot2_SequenceOfCertIssueExtensions_item; /* CertIssueExtension */
289 static int hf_ieee1609dot2_permissions; /* T_permissions */
290 static int hf_ieee1609dot2_specific; /* T_specific */
291 static int hf_ieee1609dot2_SequenceOfCertRequestExtensions_item; /* CertRequestExtension */
292 static int hf_ieee1609dot2_permissions_01; /* T_permissions_01 */
293 static int hf_ieee1609dot2_content_04; /* T_content_01 */
294 /* named bits */
295 static int hf_ieee1609dot2_T_flags_usesCubk;
296 static int hf_ieee1609dot2_EndEntityType_app;
297 static int hf_ieee1609dot2_EndEntityType_enrol;
299 /* Initialize the subtree pointers */
300 static int ett_ieee1609dot2_ssp;
301 static int ett_ieee1609dot2_SequenceOfUint8;
302 static int ett_ieee1609dot2_SequenceOfUint16;
303 static int ett_ieee1609dot2_SequenceOfHashedId3;
304 static int ett_ieee1609dot2_ValidityPeriod;
305 static int ett_ieee1609dot2_Duration;
306 static int ett_ieee1609dot2_GeographicRegion;
307 static int ett_ieee1609dot2_CircularRegion;
308 static int ett_ieee1609dot2_RectangularRegion;
309 static int ett_ieee1609dot2_SequenceOfRectangularRegion;
310 static int ett_ieee1609dot2_PolygonalRegion;
311 static int ett_ieee1609dot2_TwoDLocation;
312 static int ett_ieee1609dot2_IdentifiedRegion;
313 static int ett_ieee1609dot2_SequenceOfIdentifiedRegion;
314 static int ett_ieee1609dot2_CountryAndRegions;
315 static int ett_ieee1609dot2_CountryAndSubregions;
316 static int ett_ieee1609dot2_RegionAndSubregions;
317 static int ett_ieee1609dot2_SequenceOfRegionAndSubregions;
318 static int ett_ieee1609dot2_ThreeDLocation;
319 static int ett_ieee1609dot2_Signature;
320 static int ett_ieee1609dot2_EcdsaP256Signature;
321 static int ett_ieee1609dot2_EcdsaP384Signature;
322 static int ett_ieee1609dot2_EcsigP256Signature;
323 static int ett_ieee1609dot2_EccP256CurvePoint;
324 static int ett_ieee1609dot2_T_uncompressedP256;
325 static int ett_ieee1609dot2_EccP384CurvePoint;
326 static int ett_ieee1609dot2_T_uncompressedP384;
327 static int ett_ieee1609dot2_EciesP256EncryptedKey;
328 static int ett_ieee1609dot2_EcencP256EncryptedKey;
329 static int ett_ieee1609dot2_EncryptionKey;
330 static int ett_ieee1609dot2_PublicEncryptionKey;
331 static int ett_ieee1609dot2_BasePublicEncryptionKey;
332 static int ett_ieee1609dot2_PublicVerificationKey;
333 static int ett_ieee1609dot2_SymmetricEncryptionKey;
334 static int ett_ieee1609dot2_PsidSsp;
335 static int ett_ieee1609dot2_SequenceOfPsidSsp;
336 static int ett_ieee1609dot2_ServiceSpecificPermissions;
337 static int ett_ieee1609dot2_PsidSspRange;
338 static int ett_ieee1609dot2_SequenceOfPsidSspRange;
339 static int ett_ieee1609dot2_SspRange;
340 static int ett_ieee1609dot2_BitmapSspRange;
341 static int ett_ieee1609dot2_SequenceOfOctetString;
342 static int ett_ieee1609dot2_GroupLinkageValue;
343 static int ett_ieee1609dot2_SequenceOfLinkageSeed;
344 static int ett_ieee1609dot2_CrlContents;
345 static int ett_ieee1609dot2_CrlPriorityInfo;
346 static int ett_ieee1609dot2_TypeSpecificCrlContents;
347 static int ett_ieee1609dot2_ToBeSignedHashIdCrl;
348 static int ett_ieee1609dot2_SequenceOfHashBasedRevocationInfo;
349 static int ett_ieee1609dot2_HashBasedRevocationInfo;
350 static int ett_ieee1609dot2_ToBeSignedLinkageValueCrl;
351 static int ett_ieee1609dot2_SequenceOfJMaxGroup;
352 static int ett_ieee1609dot2_JMaxGroup;
353 static int ett_ieee1609dot2_SequenceOfLAGroup;
354 static int ett_ieee1609dot2_LAGroup;
355 static int ett_ieee1609dot2_SequenceOfIMaxGroup;
356 static int ett_ieee1609dot2_IMaxGroup;
357 static int ett_ieee1609dot2_SequenceOfIndividualRevocation;
358 static int ett_ieee1609dot2_IndividualRevocation;
359 static int ett_ieee1609dot2_SequenceOfGroupCrlEntry;
360 static int ett_ieee1609dot2_GroupCrlEntry;
361 static int ett_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier;
362 static int ett_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry;
363 static int ett_ieee1609dot2_GroupSingleSeedCrlEntry;
364 static int ett_ieee1609dot2_SecuredCrl;
365 static int ett_ieee1609dot2_SecuredCrlContent;
366 static int ett_ieee1609dot2_CrlSignedData;
367 static int ett_ieee1609dot2_CrlToBeSignedData;
368 static int ett_ieee1609dot2_CrlSignedDataPayload;
369 static int ett_ieee1609dot2_Ieee1609Dot2CrlData;
370 static int ett_ieee1609dot2_Ieee1609Dot2CrlContent;
371 static int ett_ieee1609dot2_Ieee1609Dot2Data;
372 static int ett_ieee1609dot2_Ieee1609Dot2Content;
373 static int ett_ieee1609dot2_SignedData;
374 static int ett_ieee1609dot2_ToBeSignedData;
375 static int ett_ieee1609dot2_SignedDataPayload;
376 static int ett_ieee1609dot2_HashedData;
377 static int ett_ieee1609dot2_HeaderInfo;
378 static int ett_ieee1609dot2_MissingCrlIdentifier;
379 static int ett_ieee1609dot2_ContributedExtensionBlocks;
380 static int ett_ieee1609dot2_ContributedExtensionBlock;
381 static int ett_ieee1609dot2_T_extns;
382 static int ett_ieee1609dot2_SignerIdentifier;
383 static int ett_ieee1609dot2_EncryptedData;
384 static int ett_ieee1609dot2_RecipientInfo;
385 static int ett_ieee1609dot2_SequenceOfRecipientInfo;
386 static int ett_ieee1609dot2_SymmRecipientInfo;
387 static int ett_ieee1609dot2_PKRecipientInfo;
388 static int ett_ieee1609dot2_EncryptedDataEncryptionKey;
389 static int ett_ieee1609dot2_SymmetricCiphertext;
390 static int ett_ieee1609dot2_One28BitCcmCiphertext;
391 static int ett_ieee1609dot2_SequenceOfCertificate;
392 static int ett_ieee1609dot2_CertificateBase;
393 static int ett_ieee1609dot2_IssuerIdentifier;
394 static int ett_ieee1609dot2_ToBeSignedCertificate;
395 static int ett_ieee1609dot2_T_flags;
396 static int ett_ieee1609dot2_CertificateId;
397 static int ett_ieee1609dot2_LinkageData;
398 static int ett_ieee1609dot2_EndEntityType;
399 static int ett_ieee1609dot2_PsidGroupPermissions;
400 static int ett_ieee1609dot2_SequenceOfPsidGroupPermissions;
401 static int ett_ieee1609dot2_SubjectPermissions;
402 static int ett_ieee1609dot2_VerificationKeyIndicator;
403 static int ett_ieee1609dot2_SequenceOfAppExtensions;
404 static int ett_ieee1609dot2_AppExtension;
405 static int ett_ieee1609dot2_SequenceOfCertIssueExtensions;
406 static int ett_ieee1609dot2_CertIssueExtension;
407 static int ett_ieee1609dot2_T_permissions;
408 static int ett_ieee1609dot2_SequenceOfCertRequestExtensions;
409 static int ett_ieee1609dot2_CertRequestExtension;
410 static int ett_ieee1609dot2_T_permissions_01;
412 static dissector_table_t unsecured_data_subdissector_table;
413 static dissector_table_t ssp_subdissector_table;
415 typedef struct ieee1609_private_data {
416 tvbuff_t *unsecured_data;
417 uint64_t psidssp; // psid for Service Specific Permissions
418 } ieee1609_private_data_t;
420 void
421 ieee1609dot2_set_next_default_psid(packet_info *pinfo, uint32_t psid)
423 p_add_proto_data(wmem_file_scope(), pinfo, proto_ieee1609dot2, 0, GUINT_TO_POINTER(psid));
426 /*--- Cyclic dependencies ---*/
428 /* Ieee1609Dot2Data -> Ieee1609Dot2Content -> SignedData -> ToBeSignedData -> SignedDataPayload -> Ieee1609Dot2Data */
429 static int dissect_ieee1609dot2_Ieee1609Dot2Data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
434 static int
435 dissect_ieee1609dot2_Uint8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
436 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
437 0U, 255U, NULL, false);
439 return offset;
444 static int
445 dissect_ieee1609dot2_Uint16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
446 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
447 0U, 65535U, NULL, false);
449 return offset;
454 static int
455 dissect_ieee1609dot2_Uint32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
456 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
457 0U, 4294967295U, NULL, false);
459 return offset;
464 static int
465 dissect_ieee1609dot2_Uint64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
466 offset = dissect_oer_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
467 0U, UINT64_C(18446744073709551615), NULL, false);
469 return offset;
473 static const oer_sequence_t SequenceOfUint8_sequence_of[1] = {
474 { &hf_ieee1609dot2_SequenceOfUint8_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
477 static int
478 dissect_ieee1609dot2_SequenceOfUint8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
479 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
480 ett_ieee1609dot2_SequenceOfUint8, SequenceOfUint8_sequence_of);
482 return offset;
486 static const oer_sequence_t SequenceOfUint16_sequence_of[1] = {
487 { &hf_ieee1609dot2_SequenceOfUint16_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
490 static int
491 dissect_ieee1609dot2_SequenceOfUint16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
492 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
493 ett_ieee1609dot2_SequenceOfUint16, SequenceOfUint16_sequence_of);
495 return offset;
500 static int
501 dissect_ieee1609dot2_Opaque(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
502 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
503 NO_BOUND, NO_BOUND, false, NULL);
505 return offset;
510 static int
511 dissect_ieee1609dot2_HashedId3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
512 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
513 3, 3, false, NULL);
515 return offset;
519 static const oer_sequence_t SequenceOfHashedId3_sequence_of[1] = {
520 { &hf_ieee1609dot2_SequenceOfHashedId3_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId3 },
523 static int
524 dissect_ieee1609dot2_SequenceOfHashedId3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
525 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
526 ett_ieee1609dot2_SequenceOfHashedId3, SequenceOfHashedId3_sequence_of);
528 return offset;
533 static int
534 dissect_ieee1609dot2_HashedId8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
535 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
536 8, 8, false, NULL);
538 return offset;
543 static int
544 dissect_ieee1609dot2_HashedId10(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
545 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
546 10, 10, false, NULL);
548 return offset;
553 static int
554 dissect_ieee1609dot2_HashedId32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
555 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
556 32, 32, false, NULL);
558 return offset;
563 static int
564 dissect_ieee1609dot2_HashedId48(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
565 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
566 48, 48, false, NULL);
568 return offset;
573 static int
574 dissect_ieee1609dot2_Time32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
575 offset = dissect_ieee1609dot2_Uint32(tvb, offset, actx, tree, hf_index);
577 return offset;
582 static int
583 dissect_ieee1609dot2_Time64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
584 offset = dissect_ieee1609dot2_Uint64(tvb, offset, actx, tree, hf_index);
586 return offset;
590 static const value_string ieee1609dot2_Duration_vals[] = {
591 { 0, "microseconds" },
592 { 1, "milliseconds" },
593 { 2, "seconds" },
594 { 3, "minutes" },
595 { 4, "hours" },
596 { 5, "sixtyHours" },
597 { 6, "years" },
598 { 0, NULL }
601 static const oer_choice_t Duration_choice[] = {
602 { 0, &hf_ieee1609dot2_microseconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
603 { 1, &hf_ieee1609dot2_milliseconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
604 { 2, &hf_ieee1609dot2_seconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
605 { 3, &hf_ieee1609dot2_minutes, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
606 { 4, &hf_ieee1609dot2_hours , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
607 { 5, &hf_ieee1609dot2_sixtyHours, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
608 { 6, &hf_ieee1609dot2_years , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
609 { 0, NULL, 0, NULL }
612 static int
613 dissect_ieee1609dot2_Duration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
614 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
615 ett_ieee1609dot2_Duration, Duration_choice,
616 NULL);
618 return offset;
622 static const oer_sequence_t ValidityPeriod_sequence[] = {
623 { &hf_ieee1609dot2_start , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Time32 },
624 { &hf_ieee1609dot2_duration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Duration },
625 { NULL, 0, 0, NULL }
628 static int
629 dissect_ieee1609dot2_ValidityPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
630 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
631 ett_ieee1609dot2_ValidityPeriod, ValidityPeriod_sequence);
633 return offset;
638 static int
639 dissect_ieee1609dot2_NinetyDegreeInt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
640 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
641 -900000000, 900000001U, NULL, false);
643 return offset;
648 static int
649 dissect_ieee1609dot2_Latitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
650 offset = dissect_ieee1609dot2_NinetyDegreeInt(tvb, offset, actx, tree, hf_index);
652 return offset;
657 static int
658 dissect_ieee1609dot2_OneEightyDegreeInt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
659 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
660 -1799999999, 1800000001U, NULL, false);
662 return offset;
667 static int
668 dissect_ieee1609dot2_Longitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
669 offset = dissect_ieee1609dot2_OneEightyDegreeInt(tvb, offset, actx, tree, hf_index);
671 return offset;
675 static const oer_sequence_t TwoDLocation_sequence[] = {
676 { &hf_ieee1609dot2_latitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Latitude },
677 { &hf_ieee1609dot2_longitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Longitude },
678 { NULL, 0, 0, NULL }
681 static int
682 dissect_ieee1609dot2_TwoDLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
683 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
684 ett_ieee1609dot2_TwoDLocation, TwoDLocation_sequence);
686 return offset;
690 static const oer_sequence_t CircularRegion_sequence[] = {
691 { &hf_ieee1609dot2_center , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
692 { &hf_ieee1609dot2_radius , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
693 { NULL, 0, 0, NULL }
696 static int
697 dissect_ieee1609dot2_CircularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
698 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
699 ett_ieee1609dot2_CircularRegion, CircularRegion_sequence);
701 return offset;
705 static const oer_sequence_t RectangularRegion_sequence[] = {
706 { &hf_ieee1609dot2_northWest, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
707 { &hf_ieee1609dot2_southEast, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
708 { NULL, 0, 0, NULL }
711 static int
712 dissect_ieee1609dot2_RectangularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
713 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
714 ett_ieee1609dot2_RectangularRegion, RectangularRegion_sequence);
716 return offset;
720 static const oer_sequence_t SequenceOfRectangularRegion_sequence_of[1] = {
721 { &hf_ieee1609dot2_SequenceOfRectangularRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RectangularRegion },
724 static int
725 dissect_ieee1609dot2_SequenceOfRectangularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
726 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
727 ett_ieee1609dot2_SequenceOfRectangularRegion, SequenceOfRectangularRegion_sequence_of);
729 return offset;
733 static const oer_sequence_t PolygonalRegion_sequence_of[1] = {
734 { &hf_ieee1609dot2_PolygonalRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
737 static int
738 dissect_ieee1609dot2_PolygonalRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
740 ett_ieee1609dot2_PolygonalRegion, PolygonalRegion_sequence_of,
741 3, NO_BOUND, false);
743 return offset;
748 static int
749 dissect_ieee1609dot2_UnCountryId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
750 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
752 return offset;
756 static const oer_sequence_t CountryAndRegions_sequence[] = {
757 { &hf_ieee1609dot2_countryOnly, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_UnCountryId },
758 { &hf_ieee1609dot2_regions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfUint8 },
759 { NULL, 0, 0, NULL }
762 static int
763 dissect_ieee1609dot2_CountryAndRegions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
764 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
765 ett_ieee1609dot2_CountryAndRegions, CountryAndRegions_sequence);
767 return offset;
771 static const oer_sequence_t RegionAndSubregions_sequence[] = {
772 { &hf_ieee1609dot2_rasRegion, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
773 { &hf_ieee1609dot2_subregions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfUint16 },
774 { NULL, 0, 0, NULL }
777 static int
778 dissect_ieee1609dot2_RegionAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
779 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
780 ett_ieee1609dot2_RegionAndSubregions, RegionAndSubregions_sequence);
782 return offset;
786 static const oer_sequence_t SequenceOfRegionAndSubregions_sequence_of[1] = {
787 { &hf_ieee1609dot2_SequenceOfRegionAndSubregions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RegionAndSubregions },
790 static int
791 dissect_ieee1609dot2_SequenceOfRegionAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
792 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
793 ett_ieee1609dot2_SequenceOfRegionAndSubregions, SequenceOfRegionAndSubregions_sequence_of);
795 return offset;
799 static const oer_sequence_t CountryAndSubregions_sequence[] = {
800 { &hf_ieee1609dot2_countryOnly, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_UnCountryId },
801 { &hf_ieee1609dot2_regionAndSubregions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfRegionAndSubregions },
802 { NULL, 0, 0, NULL }
805 static int
806 dissect_ieee1609dot2_CountryAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
807 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
808 ett_ieee1609dot2_CountryAndSubregions, CountryAndSubregions_sequence);
810 return offset;
814 static const value_string ieee1609dot2_IdentifiedRegion_vals[] = {
815 { 0, "countryOnly" },
816 { 1, "countryAndRegions" },
817 { 2, "countryAndSubregions" },
818 { 0, NULL }
821 static const oer_choice_t IdentifiedRegion_choice[] = {
822 { 0, &hf_ieee1609dot2_countryOnly, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_UnCountryId },
823 { 1, &hf_ieee1609dot2_countryAndRegions, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CountryAndRegions },
824 { 2, &hf_ieee1609dot2_countryAndSubregions, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CountryAndSubregions },
825 { 0, NULL, 0, NULL }
828 static int
829 dissect_ieee1609dot2_IdentifiedRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
830 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
831 ett_ieee1609dot2_IdentifiedRegion, IdentifiedRegion_choice,
832 NULL);
834 return offset;
838 static const oer_sequence_t SequenceOfIdentifiedRegion_sequence_of[1] = {
839 { &hf_ieee1609dot2_SequenceOfIdentifiedRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IdentifiedRegion },
842 static int
843 dissect_ieee1609dot2_SequenceOfIdentifiedRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
844 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
845 ett_ieee1609dot2_SequenceOfIdentifiedRegion, SequenceOfIdentifiedRegion_sequence_of);
847 return offset;
851 static const value_string ieee1609dot2_GeographicRegion_vals[] = {
852 { 0, "circularRegion" },
853 { 1, "rectangularRegion" },
854 { 2, "polygonalRegion" },
855 { 3, "identifiedRegion" },
856 { 0, NULL }
859 static const oer_choice_t GeographicRegion_choice[] = {
860 { 0, &hf_ieee1609dot2_circularRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CircularRegion },
861 { 1, &hf_ieee1609dot2_rectangularRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfRectangularRegion },
862 { 2, &hf_ieee1609dot2_polygonalRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_PolygonalRegion },
863 { 3, &hf_ieee1609dot2_identifiedRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfIdentifiedRegion },
864 { 0, NULL, 0, NULL }
867 static int
868 dissect_ieee1609dot2_GeographicRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
869 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
870 ett_ieee1609dot2_GeographicRegion, GeographicRegion_choice,
871 NULL);
873 return offset;
878 static int
879 dissect_ieee1609dot2_Elevation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
880 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
882 return offset;
886 static const oer_sequence_t ThreeDLocation_sequence[] = {
887 { &hf_ieee1609dot2_latitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Latitude },
888 { &hf_ieee1609dot2_longitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Longitude },
889 { &hf_ieee1609dot2_elevation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Elevation },
890 { NULL, 0, 0, NULL }
893 static int
894 dissect_ieee1609dot2_ThreeDLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
895 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
896 ett_ieee1609dot2_ThreeDLocation, ThreeDLocation_sequence);
898 return offset;
903 static int
904 dissect_ieee1609dot2_OCTET_STRING_SIZE_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
905 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
906 32, 32, false, NULL);
908 return offset;
913 static int
914 dissect_ieee1609dot2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
915 offset = dissect_oer_null(tvb, offset, actx, tree, hf_index);
917 return offset;
921 static const oer_sequence_t T_uncompressedP256_sequence[] = {
922 { &hf_ieee1609dot2_x , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
923 { &hf_ieee1609dot2_y , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
924 { NULL, 0, 0, NULL }
927 static int
928 dissect_ieee1609dot2_T_uncompressedP256(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
929 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
930 ett_ieee1609dot2_T_uncompressedP256, T_uncompressedP256_sequence);
932 return offset;
936 static const value_string ieee1609dot2_EccP256CurvePoint_vals[] = {
937 { 0, "x-only" },
938 { 1, "fill" },
939 { 2, "compressed-y-0" },
940 { 3, "compressed-y-1" },
941 { 4, "uncompressedP256" },
942 { 0, NULL }
945 static const oer_choice_t EccP256CurvePoint_choice[] = {
946 { 0, &hf_ieee1609dot2_x_only , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
947 { 1, &hf_ieee1609dot2_fill , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_NULL },
948 { 2, &hf_ieee1609dot2_compressed_y_0, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
949 { 3, &hf_ieee1609dot2_compressed_y_1, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
950 { 4, &hf_ieee1609dot2_uncompressedP256, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_T_uncompressedP256 },
951 { 0, NULL, 0, NULL }
954 static int
955 dissect_ieee1609dot2_EccP256CurvePoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
956 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
957 ett_ieee1609dot2_EccP256CurvePoint, EccP256CurvePoint_choice,
958 NULL);
960 return offset;
964 static const oer_sequence_t EcdsaP256Signature_sequence[] = {
965 { &hf_ieee1609dot2_rSig , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP256CurvePoint },
966 { &hf_ieee1609dot2_sSig , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
967 { NULL, 0, 0, NULL }
970 static int
971 dissect_ieee1609dot2_EcdsaP256Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
972 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
973 ett_ieee1609dot2_EcdsaP256Signature, EcdsaP256Signature_sequence);
975 return offset;
980 static int
981 dissect_ieee1609dot2_OCTET_STRING_SIZE_48(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
982 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
983 48, 48, false, NULL);
985 return offset;
989 static const oer_sequence_t T_uncompressedP384_sequence[] = {
990 { &hf_ieee1609dot2_eccp384cpX, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
991 { &hf_ieee1609dot2_eccp384cpY, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
992 { NULL, 0, 0, NULL }
995 static int
996 dissect_ieee1609dot2_T_uncompressedP384(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
997 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
998 ett_ieee1609dot2_T_uncompressedP384, T_uncompressedP384_sequence);
1000 return offset;
1004 static const value_string ieee1609dot2_EccP384CurvePoint_vals[] = {
1005 { 0, "x-only" },
1006 { 1, "fill" },
1007 { 2, "compressed-y-0" },
1008 { 3, "compressed-y-1" },
1009 { 4, "uncompressedP384" },
1010 { 0, NULL }
1013 static const oer_choice_t EccP384CurvePoint_choice[] = {
1014 { 0, &hf_ieee1609dot2_eccp384cpXOnly, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
1015 { 1, &hf_ieee1609dot2_fill , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_NULL },
1016 { 2, &hf_ieee1609dot2_eccp384cpCompressed_y_0, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
1017 { 3, &hf_ieee1609dot2_eccp384cpCompressed_y_1, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
1018 { 4, &hf_ieee1609dot2_uncompressedP384, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_T_uncompressedP384 },
1019 { 0, NULL, 0, NULL }
1022 static int
1023 dissect_ieee1609dot2_EccP384CurvePoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1024 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1025 ett_ieee1609dot2_EccP384CurvePoint, EccP384CurvePoint_choice,
1026 NULL);
1028 return offset;
1032 static const oer_sequence_t EcdsaP384Signature_sequence[] = {
1033 { &hf_ieee1609dot2_ecdsap384RSig, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP384CurvePoint },
1034 { &hf_ieee1609dot2_ecdsap384SSig, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_48 },
1035 { NULL, 0, 0, NULL }
1038 static int
1039 dissect_ieee1609dot2_EcdsaP384Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1040 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1041 ett_ieee1609dot2_EcdsaP384Signature, EcdsaP384Signature_sequence);
1043 return offset;
1047 static const oer_sequence_t EcsigP256Signature_sequence[] = {
1048 { &hf_ieee1609dot2_ecsigp256RSig, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
1049 { &hf_ieee1609dot2_sSig , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
1050 { NULL, 0, 0, NULL }
1053 static int
1054 dissect_ieee1609dot2_EcsigP256Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1055 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1056 ett_ieee1609dot2_EcsigP256Signature, EcsigP256Signature_sequence);
1058 return offset;
1062 static const value_string ieee1609dot2_Signature_vals[] = {
1063 { 0, "ecdsaNistP256Signature" },
1064 { 1, "ecdsaBrainpoolP256r1Signature" },
1065 { 2, "ecdsaBrainpoolP384r1Signature" },
1066 { 3, "ecdsaNistP384Signature" },
1067 { 4, "sm2Signature" },
1068 { 0, NULL }
1071 static const oer_choice_t Signature_choice[] = {
1072 { 0, &hf_ieee1609dot2_ecdsaNistP256Signature, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EcdsaP256Signature },
1073 { 1, &hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EcdsaP256Signature },
1074 { 2, &hf_ieee1609dot2_ecdsaBrainpoolP384r1Signature, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EcdsaP384Signature },
1075 { 3, &hf_ieee1609dot2_ecdsaNistP384Signature, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EcdsaP384Signature },
1076 { 4, &hf_ieee1609dot2_sm2Signature, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EcsigP256Signature },
1077 { 0, NULL, 0, NULL }
1080 static int
1081 dissect_ieee1609dot2_Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1082 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1083 ett_ieee1609dot2_Signature, Signature_choice,
1084 NULL);
1086 return offset;
1090 static const value_string ieee1609dot2_SymmAlgorithm_vals[] = {
1091 { 0, "aes128Ccm" },
1092 { 1, "sm4Ccm" },
1093 { 0, NULL }
1097 static int
1098 dissect_ieee1609dot2_SymmAlgorithm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1099 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
1100 1, NULL, true, 1, NULL);
1102 return offset;
1106 static const value_string ieee1609dot2_HashAlgorithm_vals[] = {
1107 { 0, "sha256" },
1108 { 1, "sha384" },
1109 { 2, "sm3" },
1110 { 0, NULL }
1114 static int
1115 dissect_ieee1609dot2_HashAlgorithm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1116 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
1117 1, NULL, true, 2, NULL);
1119 return offset;
1124 static int
1125 dissect_ieee1609dot2_OCTET_STRING_SIZE_16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1126 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1127 16, 16, false, NULL);
1129 return offset;
1133 static const oer_sequence_t EciesP256EncryptedKey_sequence[] = {
1134 { &hf_ieee1609dot2_v , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP256CurvePoint },
1135 { &hf_ieee1609dot2_c , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
1136 { &hf_ieee1609dot2_t , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
1137 { NULL, 0, 0, NULL }
1140 static int
1141 dissect_ieee1609dot2_EciesP256EncryptedKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1142 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1143 ett_ieee1609dot2_EciesP256EncryptedKey, EciesP256EncryptedKey_sequence);
1145 return offset;
1149 static const oer_sequence_t EcencP256EncryptedKey_sequence[] = {
1150 { &hf_ieee1609dot2_v , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP256CurvePoint },
1151 { &hf_ieee1609dot2_c , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
1152 { &hf_ieee1609dot2_t_01 , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
1153 { NULL, 0, 0, NULL }
1156 static int
1157 dissect_ieee1609dot2_EcencP256EncryptedKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1158 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1159 ett_ieee1609dot2_EcencP256EncryptedKey, EcencP256EncryptedKey_sequence);
1161 return offset;
1165 static const value_string ieee1609dot2_BasePublicEncryptionKey_vals[] = {
1166 { 0, "eciesNistP256" },
1167 { 1, "eciesBrainpoolP256r1" },
1168 { 2, "ecencSm2" },
1169 { 0, NULL }
1172 static const oer_choice_t BasePublicEncryptionKey_choice[] = {
1173 { 0, &hf_ieee1609dot2_eciesNistP256, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
1174 { 1, &hf_ieee1609dot2_eciesBrainpoolP256r1, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
1175 { 2, &hf_ieee1609dot2_ecencSm2, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EccP256CurvePoint },
1176 { 0, NULL, 0, NULL }
1179 static int
1180 dissect_ieee1609dot2_BasePublicEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1181 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1182 ett_ieee1609dot2_BasePublicEncryptionKey, BasePublicEncryptionKey_choice,
1183 NULL);
1185 return offset;
1189 static const oer_sequence_t PublicEncryptionKey_sequence[] = {
1190 { &hf_ieee1609dot2_supportedSymmAlg, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmAlgorithm },
1191 { &hf_ieee1609dot2_publicKey, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_BasePublicEncryptionKey },
1192 { NULL, 0, 0, NULL }
1195 static int
1196 dissect_ieee1609dot2_PublicEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1197 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1198 ett_ieee1609dot2_PublicEncryptionKey, PublicEncryptionKey_sequence);
1200 return offset;
1204 static const value_string ieee1609dot2_SymmetricEncryptionKey_vals[] = {
1205 { 0, "aes128Ccm" },
1206 { 1, "sm4Ccm" },
1207 { 0, NULL }
1210 static const oer_choice_t SymmetricEncryptionKey_choice[] = {
1211 { 0, &hf_ieee1609dot2_aes128Ccm, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
1212 { 1, &hf_ieee1609dot2_sm4Ccm , ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
1213 { 0, NULL, 0, NULL }
1216 static int
1217 dissect_ieee1609dot2_SymmetricEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1218 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1219 ett_ieee1609dot2_SymmetricEncryptionKey, SymmetricEncryptionKey_choice,
1220 NULL);
1222 return offset;
1226 static const value_string ieee1609dot2_EncryptionKey_vals[] = {
1227 { 0, "public" },
1228 { 1, "symmetric" },
1229 { 0, NULL }
1232 static const oer_choice_t EncryptionKey_choice[] = {
1233 { 0, &hf_ieee1609dot2_public , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PublicEncryptionKey },
1234 { 1, &hf_ieee1609dot2_symmetric, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_SymmetricEncryptionKey },
1235 { 0, NULL, 0, NULL }
1238 static int
1239 dissect_ieee1609dot2_EncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1240 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1241 ett_ieee1609dot2_EncryptionKey, EncryptionKey_choice,
1242 NULL);
1244 return offset;
1248 static const value_string ieee1609dot2_PublicVerificationKey_vals[] = {
1249 { 0, "ecdsaNistP256" },
1250 { 1, "ecdsaBrainpoolP256r1" },
1251 { 2, "ecdsaBrainpoolP384r1" },
1252 { 3, "ecdsaNistP384" },
1253 { 4, "ecsigSm2" },
1254 { 0, NULL }
1257 static const oer_choice_t PublicVerificationKey_choice[] = {
1258 { 0, &hf_ieee1609dot2_ecdsaNistP256, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
1259 { 1, &hf_ieee1609dot2_ecdsaBrainpoolP256r1, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
1260 { 2, &hf_ieee1609dot2_ecdsaBrainpoolP384r1, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EccP384CurvePoint },
1261 { 3, &hf_ieee1609dot2_ecdsaNistP384, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EccP384CurvePoint },
1262 { 4, &hf_ieee1609dot2_ecsigSm2, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EccP256CurvePoint },
1263 { 0, NULL, 0, NULL }
1266 static int
1267 dissect_ieee1609dot2_PublicVerificationKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1268 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1269 ett_ieee1609dot2_PublicVerificationKey, PublicVerificationKey_choice,
1270 NULL);
1272 return offset;
1276 const val64_string ieee1609dot2_Psid_vals[] = {
1277 { psid_system, "psid-system" },
1278 { psid_electronic_fee_collection, "psid-electronic-fee-collection" },
1279 { psid_freight_fleet_management, "psid-freight-fleet-management" },
1280 { psid_public_transport, "psid-public-transport" },
1281 { psid_traffic_traveller_information, "psid-traffic-traveller-information" },
1282 { psid_traffic_control, "psid-traffic-control" },
1283 { psid_parking_management, "psid-parking-management" },
1284 { psid_geographic_road_database, "psid-geographic-road-database" },
1285 { psid_medium_range_preinformation, "psid-medium-range-preinformation" },
1286 { psid_man_machine_interface, "psid-man-machine-interface" },
1287 { psid_intersystem_interface, "psid-intersystem-interface" },
1288 { psid_automatic_vehicle_identification, "psid-automatic-vehicle-identification" },
1289 { psid_emergency_warning, "psid-emergency-warning" },
1290 { psid_private, "psid-private" },
1291 { psid_multi_purpose_payment, "psid-multi-purpose-payment" },
1292 { psid_dsrc_resource_manager, "psid-dsrc-resource-manager" },
1293 { psid_after_theft_systems, "psid-after-theft-systems" },
1294 { psid_cruise_assist_highway_system, "psid-cruise-assist-highway-system" },
1295 { psid_multi_purpose_information_system, "psid-multi-purpose-information-system" },
1296 { psid_multi_mobile_information_system, "psid-multi-mobile-information-system" },
1297 { psid_efc_compliance_check_communication_applications, "psid-efc-compliance-check-communication-applications" },
1298 { psid_efc_localisation_augmentation_communication_applications, "psid-efc-localisation-augmentation-communication-applications" },
1299 { psid_iso_cen_dsrc_applications_0x16, "psid-iso-cen-dsrc-applications-0x16" },
1300 { psid_iso_cen_dsrc_applications_0x17, "psid-iso-cen-dsrc-applications-0x17" },
1301 { psid_iso_cen_dsrc_applications_0x18, "psid-iso-cen-dsrc-applications-0x18" },
1302 { psid_iso_cen_dsrc_applications_0x19, "psid-iso-cen-dsrc-applications-0x19" },
1303 { psid_iso_cen_dsrc_applications_0x1a, "psid-iso-cen-dsrc-applications-0x1a" },
1304 { psid_iso_cen_dsrc_applications_0x1b, "psid-iso-cen-dsrc-applications-0x1b" },
1305 { psid_iso_cen_dsrc_applications_0x1c, "psid-iso-cen-dsrc-applications-0x1c" },
1306 { psid_private_use_0x1d, "psid-private-use-0x1d" },
1307 { psid_private_use_0x1e, "psid-private-use-0x1e" },
1308 { psid_iso_cen_dsrc_applications_0x1f, "psid-iso-cen-dsrc-applications-0x1f" },
1309 { psid_vehicle_to_vehicle_safety_and_awarenesss, "psid-vehicle-to-vehicle-safety-and-awarenesss" },
1310 { psid_limited_sensor_vehicle_to_vehicle_safety_and_awarenesss, "psid-limited-sensor-vehicle-to-vehicle-safety-and-awarenesss" },
1311 { psid_tracked_vehicle_safety_and_awarenesss, "psid-tracked-vehicle-safety-and-awarenesss" },
1312 { psid_wave_security_managements, "psid-wave-security-managements" },
1313 { psid_ca_basic_services, "psid-ca-basic-services" },
1314 { psid_den_basic_services, "psid-den-basic-services" },
1315 { psid_misbehavior_reporting_for_common_applications, "psid-misbehavior-reporting-for-common-applications" },
1316 { psid_vulnerable_road_users_safety_applications, "psid-vulnerable-road-users-safety-applications" },
1317 { psid_testings, "psid-testings" },
1318 { psid_differential_gps_corrections_uncompressed, "psid-differential-gps-corrections-uncompressed" },
1319 { psid_differential_gps_corrections_compressed, "psid-differential-gps-corrections-compressed" },
1320 { psid_intersection_safety_and_awareness, "psid-intersection-safety-and-awareness" },
1321 { psid_traveller_information_and_roadside_signage, "psid-traveller-information-and-roadside-signage" },
1322 { psid_mobile_probe_exchanges, "psid-mobile-probe-exchanges" },
1323 { psid_emergency_and_erratic_vehicles_present_in_roadway, "psid-emergency-and-erratic-vehicles-present-in-roadway" },
1324 { psid_remote_management_protocol_execution, "psid-remote-management-protocol-execution" },
1325 { psid_wave_service_advertisement, "psid-wave-service-advertisement" },
1326 { psid_peer_to_peer_distribution_of_security_management_information, "psid-peer-to-peer-distribution-of-security-management-information" },
1327 { psid_traffic_light_manoeuver_service, "psid-traffic-light-manoeuver-service" },
1328 { psid_road_and_lane_topology_service, "psid-road-and-lane-topology-service" },
1329 { psid_infrastructure_to_vehicle_information_service, "psid-infrastructure-to-vehicle-information-service" },
1330 { psid_traffic_light_control_requests_service, "psid-traffic-light-control-requests-service" },
1331 { psid_geonetworking_management_communications, "psid-geonetworking-management-communications" },
1332 { psid_certificate_revocation_list_application, "psid-certificate-revocation-list-application" },
1333 { psid_traffic_light_control_status_service, "psid-traffic-light-control-status-service" },
1334 { psid_collective_perception_service, "psid-collective-perception-service" },
1335 { psid_vehicle_initiated_distress_notivication, "psid-vehicle-initiated-distress-notivication" },
1336 { psid_fast_service_advertisement_protocol, "psid-fast-service-advertisement-protocol" },
1337 { psid_its_station_internal_management_communications_protocol, "psid-its-station-internal-management-communications-protocol" },
1338 { psid_veniam_delay_tolerant_networking, "psid-veniam-delay-tolerant-networking" },
1339 { psid_transcore_software_update, "psid-transcore-software-update" },
1340 { psid_sra_private_applications_0x204084, "psid-sra-private-applications-0x204084" },
1341 { psid_sra_private_applications_0x204085, "psid-sra-private-applications-0x204085" },
1342 { psid_sra_private_applications_0x204086, "psid-sra-private-applications-0x204086" },
1343 { psid_sra_private_applications_0x204087, "psid-sra-private-applications-0x204087" },
1344 { psid_ipv6_routing, "psid-ipv6-routing" },
1345 { 0, NULL }
1349 static int
1350 dissect_ieee1609dot2_Psid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1351 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
1352 0U, NO_BOUND, NULL, false);
1354 return offset;
1359 static int
1360 dissect_ieee1609dot2_T_psPsid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1361 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
1362 0U, NO_BOUND, &((ieee1609_private_data_t*)actx->private_data)->psidssp, false);
1365 return offset;
1370 static int
1371 dissect_ieee1609dot2_T_opaque(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1372 tvbuff_t *ssp;
1373 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
1375 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1376 0, NO_BOUND, false, &ssp);
1377 if (ssp) {
1378 // Create subtree
1379 proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ieee1609dot2_ssp);
1380 /* Call next dissector here */
1381 dissector_try_uint(ssp_subdissector_table, (uint32_t) my_private_data->psidssp, ssp, actx->pinfo, subtree);
1384 return offset;
1389 static int
1390 dissect_ieee1609dot2_BitmapSsp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1391 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1392 0, 31, false, NULL);
1394 return offset;
1398 static const value_string ieee1609dot2_ServiceSpecificPermissions_vals[] = {
1399 { 0, "opaque" },
1400 { 1, "bitmapSsp" },
1401 { 0, NULL }
1404 static const oer_choice_t ServiceSpecificPermissions_choice[] = {
1405 { 0, &hf_ieee1609dot2_opaque , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_T_opaque },
1406 { 1, &hf_ieee1609dot2_bitmapSsp, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_BitmapSsp },
1407 { 0, NULL, 0, NULL }
1410 static int
1411 dissect_ieee1609dot2_ServiceSpecificPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1412 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1413 ett_ieee1609dot2_ServiceSpecificPermissions, ServiceSpecificPermissions_choice,
1414 NULL);
1416 return offset;
1420 static const oer_sequence_t PsidSsp_sequence[] = {
1421 { &hf_ieee1609dot2_psPsid , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_psPsid },
1422 { &hf_ieee1609dot2_ssp , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_ServiceSpecificPermissions },
1423 { NULL, 0, 0, NULL }
1426 static int
1427 dissect_ieee1609dot2_PsidSsp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1428 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1429 ett_ieee1609dot2_PsidSsp, PsidSsp_sequence);
1431 return offset;
1435 static const oer_sequence_t SequenceOfPsidSsp_sequence_of[1] = {
1436 { &hf_ieee1609dot2_SequenceOfPsidSsp_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidSsp },
1439 static int
1440 dissect_ieee1609dot2_SequenceOfPsidSsp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1441 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1442 ett_ieee1609dot2_SequenceOfPsidSsp, SequenceOfPsidSsp_sequence_of);
1444 return offset;
1449 static int
1450 dissect_ieee1609dot2_OCTET_STRING_SIZE_0_MAX(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1451 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1452 0, NO_BOUND, false, NULL);
1454 return offset;
1458 static const oer_sequence_t SequenceOfOctetString_sequence_of[1] = {
1459 { &hf_ieee1609dot2_SequenceOfOctetString_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_0_MAX },
1462 static int
1463 dissect_ieee1609dot2_SequenceOfOctetString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1464 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1465 ett_ieee1609dot2_SequenceOfOctetString, SequenceOfOctetString_sequence_of,
1466 0, NO_BOUND, false);
1468 return offset;
1473 static int
1474 dissect_ieee1609dot2_OCTET_STRING_SIZE_1_32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1475 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1476 1, 32, false, NULL);
1478 return offset;
1482 static const oer_sequence_t BitmapSspRange_sequence[] = {
1483 { &hf_ieee1609dot2_sspValue, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_1_32 },
1484 { &hf_ieee1609dot2_sspBitmask, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_1_32 },
1485 { NULL, 0, 0, NULL }
1488 static int
1489 dissect_ieee1609dot2_BitmapSspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1490 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1491 ett_ieee1609dot2_BitmapSspRange, BitmapSspRange_sequence);
1493 return offset;
1497 static const value_string ieee1609dot2_SspRange_vals[] = {
1498 { 0, "opaque" },
1499 { 1, "all" },
1500 { 2, "bitmapSspRange" },
1501 { 0, NULL }
1504 static const oer_choice_t SspRange_choice[] = {
1505 { 0, &hf_ieee1609dot2_srRange, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfOctetString },
1506 { 1, &hf_ieee1609dot2_all , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
1507 { 2, &hf_ieee1609dot2_bitmapSspRange, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_BitmapSspRange },
1508 { 0, NULL, 0, NULL }
1511 static int
1512 dissect_ieee1609dot2_SspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1513 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1514 ett_ieee1609dot2_SspRange, SspRange_choice,
1515 NULL);
1517 return offset;
1521 static const oer_sequence_t PsidSspRange_sequence[] = {
1522 { &hf_ieee1609dot2_psid , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Psid },
1523 { &hf_ieee1609dot2_sspRange, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_SspRange },
1524 { NULL, 0, 0, NULL }
1527 static int
1528 dissect_ieee1609dot2_PsidSspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1529 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1530 ett_ieee1609dot2_PsidSspRange, PsidSspRange_sequence);
1532 return offset;
1536 static const oer_sequence_t SequenceOfPsidSspRange_sequence_of[1] = {
1537 { &hf_ieee1609dot2_SequenceOfPsidSspRange_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidSspRange },
1540 static int
1541 dissect_ieee1609dot2_SequenceOfPsidSspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1542 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1543 ett_ieee1609dot2_SequenceOfPsidSspRange, SequenceOfPsidSspRange_sequence_of);
1545 return offset;
1550 static int
1551 dissect_ieee1609dot2_SubjectAssurance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1552 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1553 1, 1, false, NULL);
1555 return offset;
1560 static int
1561 dissect_ieee1609dot2_CrlSeries(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1562 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
1564 return offset;
1569 static int
1570 dissect_ieee1609dot2_IValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1571 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
1573 return offset;
1578 static int
1579 dissect_ieee1609dot2_Hostname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1580 offset = dissect_oer_UTF8String(tvb, offset, actx, tree, hf_index,
1581 0, 255, false);
1583 return offset;
1588 static int
1589 dissect_ieee1609dot2_LinkageValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1590 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1591 9, 9, false, NULL);
1593 return offset;
1598 static int
1599 dissect_ieee1609dot2_OCTET_STRING_SIZE_4(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1600 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1601 4, 4, false, NULL);
1603 return offset;
1608 static int
1609 dissect_ieee1609dot2_OCTET_STRING_SIZE_9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1610 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1611 9, 9, false, NULL);
1613 return offset;
1617 static const oer_sequence_t GroupLinkageValue_sequence[] = {
1618 { &hf_ieee1609dot2_jValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_4 },
1619 { &hf_ieee1609dot2_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_9 },
1620 { NULL, 0, 0, NULL }
1623 static int
1624 dissect_ieee1609dot2_GroupLinkageValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1625 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1626 ett_ieee1609dot2_GroupLinkageValue, GroupLinkageValue_sequence);
1628 return offset;
1633 static int
1634 dissect_ieee1609dot2_LaId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1635 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1636 2, 2, false, NULL);
1638 return offset;
1643 static int
1644 dissect_ieee1609dot2_LinkageSeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1645 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1646 16, 16, false, NULL);
1648 return offset;
1652 static const oer_sequence_t SequenceOfLinkageSeed_sequence_of[1] = {
1653 { &hf_ieee1609dot2_SequenceOfLinkageSeed_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1656 static int
1657 dissect_ieee1609dot2_SequenceOfLinkageSeed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1658 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1659 ett_ieee1609dot2_SequenceOfLinkageSeed, SequenceOfLinkageSeed_sequence_of);
1661 return offset;
1665 static const value_string ieee1609dot2_ExtId_vals[] = {
1666 { 1, "certExtId-OperatingOrganization" },
1667 { 0, NULL }
1671 static int
1672 dissect_ieee1609dot2_ExtId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1673 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
1674 0U, 255U, NULL, false);
1676 return offset;
1681 static int
1682 dissect_ieee1609dot2_Uint8_1(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1683 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
1684 1U, 1U, NULL, false);
1686 return offset;
1690 static const oer_sequence_t CrlPriorityInfo_sequence[] = {
1691 { &hf_ieee1609dot2_priority, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Uint8 },
1692 { NULL, 0, 0, NULL }
1695 static int
1696 dissect_ieee1609dot2_CrlPriorityInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1697 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1698 ett_ieee1609dot2_CrlPriorityInfo, CrlPriorityInfo_sequence);
1700 return offset;
1704 static const oer_sequence_t HashBasedRevocationInfo_sequence[] = {
1705 { &hf_ieee1609dot2_hashedId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId10 },
1706 { &hf_ieee1609dot2_expiry , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Time32 },
1707 { NULL, 0, 0, NULL }
1710 static int
1711 dissect_ieee1609dot2_HashBasedRevocationInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1712 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1713 ett_ieee1609dot2_HashBasedRevocationInfo, HashBasedRevocationInfo_sequence);
1715 return offset;
1719 static const oer_sequence_t SequenceOfHashBasedRevocationInfo_sequence_of[1] = {
1720 { &hf_ieee1609dot2_SequenceOfHashBasedRevocationInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashBasedRevocationInfo },
1723 static int
1724 dissect_ieee1609dot2_SequenceOfHashBasedRevocationInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1725 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1726 ett_ieee1609dot2_SequenceOfHashBasedRevocationInfo, SequenceOfHashBasedRevocationInfo_sequence_of);
1728 return offset;
1732 static const oer_sequence_t ToBeSignedHashIdCrl_sequence[] = {
1733 { &hf_ieee1609dot2_crlSerial, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint32 },
1734 { &hf_ieee1609dot2_entries, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfHashBasedRevocationInfo },
1735 { NULL, 0, 0, NULL }
1738 static int
1739 dissect_ieee1609dot2_ToBeSignedHashIdCrl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1740 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1741 ett_ieee1609dot2_ToBeSignedHashIdCrl, ToBeSignedHashIdCrl_sequence);
1743 return offset;
1747 static const oer_sequence_t IndividualRevocation_sequence[] = {
1748 { &hf_ieee1609dot2_linkageSeed1, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1749 { &hf_ieee1609dot2_linkageSeed2, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1750 { NULL, 0, 0, NULL }
1753 static int
1754 dissect_ieee1609dot2_IndividualRevocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1755 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1756 ett_ieee1609dot2_IndividualRevocation, IndividualRevocation_sequence);
1758 return offset;
1762 static const oer_sequence_t SequenceOfIndividualRevocation_sequence_of[1] = {
1763 { &hf_ieee1609dot2_SequenceOfIndividualRevocation_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IndividualRevocation },
1766 static int
1767 dissect_ieee1609dot2_SequenceOfIndividualRevocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1768 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1769 ett_ieee1609dot2_SequenceOfIndividualRevocation, SequenceOfIndividualRevocation_sequence_of,
1770 0, NO_BOUND, false);
1772 return offset;
1776 static const oer_sequence_t IMaxGroup_sequence[] = {
1777 { &hf_ieee1609dot2_iMax , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
1778 { &hf_ieee1609dot2_contents_02, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfIndividualRevocation },
1779 { &hf_ieee1609dot2_singleSeed, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfLinkageSeed },
1780 { NULL, 0, 0, NULL }
1783 static int
1784 dissect_ieee1609dot2_IMaxGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1785 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1786 ett_ieee1609dot2_IMaxGroup, IMaxGroup_sequence);
1788 return offset;
1792 static const oer_sequence_t SequenceOfIMaxGroup_sequence_of[1] = {
1793 { &hf_ieee1609dot2_SequenceOfIMaxGroup_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IMaxGroup },
1796 static int
1797 dissect_ieee1609dot2_SequenceOfIMaxGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1798 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1799 ett_ieee1609dot2_SequenceOfIMaxGroup, SequenceOfIMaxGroup_sequence_of);
1801 return offset;
1805 static const oer_sequence_t LAGroup_sequence[] = {
1806 { &hf_ieee1609dot2_la1Id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LaId },
1807 { &hf_ieee1609dot2_la2Id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LaId },
1808 { &hf_ieee1609dot2_contents_01, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfIMaxGroup },
1809 { NULL, 0, 0, NULL }
1812 static int
1813 dissect_ieee1609dot2_LAGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1814 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1815 ett_ieee1609dot2_LAGroup, LAGroup_sequence);
1817 return offset;
1821 static const oer_sequence_t SequenceOfLAGroup_sequence_of[1] = {
1822 { &hf_ieee1609dot2_SequenceOfLAGroup_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LAGroup },
1825 static int
1826 dissect_ieee1609dot2_SequenceOfLAGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1827 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1828 ett_ieee1609dot2_SequenceOfLAGroup, SequenceOfLAGroup_sequence_of);
1830 return offset;
1834 static const oer_sequence_t JMaxGroup_sequence[] = {
1835 { &hf_ieee1609dot2_jmax , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
1836 { &hf_ieee1609dot2_contents, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfLAGroup },
1837 { NULL, 0, 0, NULL }
1840 static int
1841 dissect_ieee1609dot2_JMaxGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1842 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1843 ett_ieee1609dot2_JMaxGroup, JMaxGroup_sequence);
1845 return offset;
1849 static const oer_sequence_t SequenceOfJMaxGroup_sequence_of[1] = {
1850 { &hf_ieee1609dot2_SequenceOfJMaxGroup_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_JMaxGroup },
1853 static int
1854 dissect_ieee1609dot2_SequenceOfJMaxGroup(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1855 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1856 ett_ieee1609dot2_SequenceOfJMaxGroup, SequenceOfJMaxGroup_sequence_of);
1858 return offset;
1862 static const oer_sequence_t GroupCrlEntry_sequence[] = {
1863 { &hf_ieee1609dot2_iMax , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
1864 { &hf_ieee1609dot2_la1Id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LaId },
1865 { &hf_ieee1609dot2_linkageSeed1, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1866 { &hf_ieee1609dot2_la2Id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LaId },
1867 { &hf_ieee1609dot2_linkageSeed2, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1868 { NULL, 0, 0, NULL }
1871 static int
1872 dissect_ieee1609dot2_GroupCrlEntry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1873 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1874 ett_ieee1609dot2_GroupCrlEntry, GroupCrlEntry_sequence);
1876 return offset;
1880 static const oer_sequence_t SequenceOfGroupCrlEntry_sequence_of[1] = {
1881 { &hf_ieee1609dot2_SequenceOfGroupCrlEntry_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_GroupCrlEntry },
1884 static int
1885 dissect_ieee1609dot2_SequenceOfGroupCrlEntry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1886 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1887 ett_ieee1609dot2_SequenceOfGroupCrlEntry, SequenceOfGroupCrlEntry_sequence_of);
1889 return offset;
1893 static const oer_sequence_t GroupSingleSeedCrlEntry_sequence[] = {
1894 { &hf_ieee1609dot2_iMax , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
1895 { &hf_ieee1609dot2_laId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LaId },
1896 { &hf_ieee1609dot2_linkageSeed, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageSeed },
1897 { NULL, 0, 0, NULL }
1900 static int
1901 dissect_ieee1609dot2_GroupSingleSeedCrlEntry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1902 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1903 ett_ieee1609dot2_GroupSingleSeedCrlEntry, GroupSingleSeedCrlEntry_sequence);
1905 return offset;
1909 static const oer_sequence_t SequenceOfGroupSingleSeedCrlEntry_sequence_of[1] = {
1910 { &hf_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_GroupSingleSeedCrlEntry },
1913 static int
1914 dissect_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1915 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1916 ett_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry, SequenceOfGroupSingleSeedCrlEntry_sequence_of);
1918 return offset;
1922 static const oer_sequence_t ToBeSignedLinkageValueCrl_sequence[] = {
1923 { &hf_ieee1609dot2_iRev , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IValue },
1924 { &hf_ieee1609dot2_indexWithinI, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
1925 { &hf_ieee1609dot2_individual, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfJMaxGroup },
1926 { &hf_ieee1609dot2_groups , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfGroupCrlEntry },
1927 { &hf_ieee1609dot2_groupsSingleSeed, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry },
1928 { NULL, 0, 0, NULL }
1931 static int
1932 dissect_ieee1609dot2_ToBeSignedLinkageValueCrl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1933 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1934 ett_ieee1609dot2_ToBeSignedLinkageValueCrl, ToBeSignedLinkageValueCrl_sequence);
1936 return offset;
1941 static int
1942 dissect_ieee1609dot2_SeedEvolutionFunctionIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1943 offset = dissect_oer_null(tvb, offset, actx, tree, hf_index);
1945 return offset;
1950 static int
1951 dissect_ieee1609dot2_LvGenerationFunctionIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1952 offset = dissect_oer_null(tvb, offset, actx, tree, hf_index);
1954 return offset;
1958 static const oer_sequence_t ToBeSignedLinkageValueCrlWithAlgIdentifier_sequence[] = {
1959 { &hf_ieee1609dot2_iRev , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IValue },
1960 { &hf_ieee1609dot2_indexWithinI, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
1961 { &hf_ieee1609dot2_seedEvolution, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SeedEvolutionFunctionIdentifier },
1962 { &hf_ieee1609dot2_lvGeneration, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LvGenerationFunctionIdentifier },
1963 { &hf_ieee1609dot2_individual, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfJMaxGroup },
1964 { &hf_ieee1609dot2_groups , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfGroupCrlEntry },
1965 { &hf_ieee1609dot2_groupsSingleSeed, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry },
1966 { NULL, 0, 0, NULL }
1969 static int
1970 dissect_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1971 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1972 ett_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier, ToBeSignedLinkageValueCrlWithAlgIdentifier_sequence);
1974 return offset;
1978 static const value_string ieee1609dot2_TypeSpecificCrlContents_vals[] = {
1979 { 0, "fullHashCrl" },
1980 { 1, "deltaHashCrl" },
1981 { 2, "fullLinkedCrl" },
1982 { 3, "deltaLinkedCrl" },
1983 { 4, "fullLinkedCrlWithAlg" },
1984 { 5, "deltaLinkedCrlWithAlg" },
1985 { 0, NULL }
1988 static const oer_choice_t TypeSpecificCrlContents_choice[] = {
1989 { 0, &hf_ieee1609dot2_fullHashCrl, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_ToBeSignedHashIdCrl },
1990 { 1, &hf_ieee1609dot2_deltaHashCrl, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_ToBeSignedHashIdCrl },
1991 { 2, &hf_ieee1609dot2_fullLinkedCrl, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_ToBeSignedLinkageValueCrl },
1992 { 3, &hf_ieee1609dot2_deltaLinkedCrl, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_ToBeSignedLinkageValueCrl },
1993 { 4, &hf_ieee1609dot2_fullLinkedCrlWithAlg, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier },
1994 { 5, &hf_ieee1609dot2_deltaLinkedCrlWithAlg, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier },
1995 { 0, NULL, 0, NULL }
1998 static int
1999 dissect_ieee1609dot2_TypeSpecificCrlContents(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2000 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2001 ett_ieee1609dot2_TypeSpecificCrlContents, TypeSpecificCrlContents_choice,
2002 NULL);
2004 return offset;
2008 static const oer_sequence_t CrlContents_sequence[] = {
2009 { &hf_ieee1609dot2_version, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8_1 },
2010 { &hf_ieee1609dot2_crlSeries, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSeries },
2011 { &hf_ieee1609dot2_crlCraca, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId8 },
2012 { &hf_ieee1609dot2_issueDate, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Time32 },
2013 { &hf_ieee1609dot2_nextCrl, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Time32 },
2014 { &hf_ieee1609dot2_priorityInfo, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlPriorityInfo },
2015 { &hf_ieee1609dot2_typeSpecific, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TypeSpecificCrlContents },
2016 { NULL, 0, 0, NULL }
2019 static int
2020 dissect_ieee1609dot2_CrlContents(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2021 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2022 ett_ieee1609dot2_CrlContents, CrlContents_sequence);
2024 return offset;
2028 static const value_string ieee1609dot2_Ieee1609Dot2CrlContent_vals[] = {
2029 { 0, "unsecuredData" },
2030 { 0, NULL }
2033 static const oer_choice_t Ieee1609Dot2CrlContent_choice[] = {
2034 { 0, &hf_ieee1609dot2_unsecuredData, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_CrlContents },
2035 { 0, NULL, 0, NULL }
2038 static int
2039 dissect_ieee1609dot2_Ieee1609Dot2CrlContent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2040 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2041 ett_ieee1609dot2_Ieee1609Dot2CrlContent, Ieee1609Dot2CrlContent_choice,
2042 NULL);
2044 return offset;
2048 static const oer_sequence_t Ieee1609Dot2CrlData_sequence[] = {
2049 { &hf_ieee1609dot2_content_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Ieee1609Dot2CrlContent },
2050 { NULL, 0, 0, NULL }
2053 static int
2054 dissect_ieee1609dot2_Ieee1609Dot2CrlData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2055 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2056 ett_ieee1609dot2_Ieee1609Dot2CrlData, Ieee1609Dot2CrlData_sequence);
2058 return offset;
2062 static const oer_sequence_t CrlSignedDataPayload_sequence[] = {
2063 { &hf_ieee1609dot2_data , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_Ieee1609Dot2CrlData },
2064 { NULL, 0, 0, NULL }
2067 static int
2068 dissect_ieee1609dot2_CrlSignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2069 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2070 ett_ieee1609dot2_CrlSignedDataPayload, CrlSignedDataPayload_sequence);
2072 return offset;
2077 static int
2078 dissect_ieee1609dot2_T_hiPsid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2079 uint64_t psid;
2080 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
2082 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
2083 0U, NO_BOUND, &psid, false);
2084 if ((my_private_data != NULL) && (my_private_data->unsecured_data != NULL)) {
2085 /* Call next dissector here */
2086 ieee1609dot2_set_next_default_psid(actx->pinfo, (uint32_t)psid);
2087 dissector_try_uint(unsecured_data_subdissector_table, (uint32_t) psid, my_private_data->unsecured_data, actx->pinfo, tree);
2088 my_private_data->unsecured_data = NULL;
2092 return offset;
2096 static const oer_sequence_t MissingCrlIdentifier_sequence[] = {
2097 { &hf_ieee1609dot2_cracaId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId3 },
2098 { &hf_ieee1609dot2_crlSeries, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSeries },
2099 { NULL, 0, 0, NULL }
2102 static int
2103 dissect_ieee1609dot2_MissingCrlIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2104 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2105 ett_ieee1609dot2_MissingCrlIdentifier, MissingCrlIdentifier_sequence);
2107 return offset;
2112 static int
2113 dissect_ieee1609dot2_Uint8_3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2114 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
2115 3U, 3U, NULL, false);
2117 return offset;
2121 static const value_string ieee1609dot2_CertificateType_vals[] = {
2122 { 0, "explicit" },
2123 { 1, "implicit" },
2124 { 0, NULL }
2128 static int
2129 dissect_ieee1609dot2_CertificateType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2130 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
2131 2, NULL, true, 0, NULL);
2133 return offset;
2137 static const value_string ieee1609dot2_IssuerIdentifier_vals[] = {
2138 { 0, "sha256AndDigest" },
2139 { 1, "self" },
2140 { 2, "sha384AndDigest" },
2141 { 3, "sm3AndDigest" },
2142 { 0, NULL }
2145 static const oer_choice_t IssuerIdentifier_choice[] = {
2146 { 0, &hf_ieee1609dot2_sha256AndDigest, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashedId8 },
2147 { 1, &hf_ieee1609dot2_iiSelf , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashAlgorithm },
2148 { 2, &hf_ieee1609dot2_sha384AndDigest, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_HashedId8 },
2149 { 3, &hf_ieee1609dot2_sm3AndDigest, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_HashedId8 },
2150 { 0, NULL, 0, NULL }
2153 static int
2154 dissect_ieee1609dot2_IssuerIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2155 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2156 ett_ieee1609dot2_IssuerIdentifier, IssuerIdentifier_choice,
2157 NULL);
2159 return offset;
2163 static const oer_sequence_t LinkageData_sequence[] = {
2164 { &hf_ieee1609dot2_iCert , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IValue },
2165 { &hf_ieee1609dot2_linkage_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageValue },
2166 { &hf_ieee1609dot2_group_linkage_value, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_GroupLinkageValue },
2167 { NULL, 0, 0, NULL }
2170 static int
2171 dissect_ieee1609dot2_LinkageData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2172 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2173 ett_ieee1609dot2_LinkageData, LinkageData_sequence);
2175 return offset;
2180 static int
2181 dissect_ieee1609dot2_OCTET_STRING_SIZE_1_64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2182 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
2183 1, 64, false, NULL);
2185 return offset;
2189 static const value_string ieee1609dot2_CertificateId_vals[] = {
2190 { 0, "linkageData" },
2191 { 1, "name" },
2192 { 2, "binaryId" },
2193 { 3, "none" },
2194 { 0, NULL }
2197 static const oer_choice_t CertificateId_choice[] = {
2198 { 0, &hf_ieee1609dot2_linkageData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_LinkageData },
2199 { 1, &hf_ieee1609dot2_name , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_Hostname },
2200 { 2, &hf_ieee1609dot2_binaryId, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_OCTET_STRING_SIZE_1_64 },
2201 { 3, &hf_ieee1609dot2_none , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
2202 { 0, NULL, 0, NULL }
2205 static int
2206 dissect_ieee1609dot2_CertificateId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2207 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2208 ett_ieee1609dot2_CertificateId, CertificateId_choice,
2209 NULL);
2211 return offset;
2215 static const value_string ieee1609dot2_SubjectPermissions_vals[] = {
2216 { 0, "explicit" },
2217 { 1, "all" },
2218 { 0, NULL }
2221 static const oer_choice_t SubjectPermissions_choice[] = {
2222 { 0, &hf_ieee1609dot2_explicit, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfPsidSspRange },
2223 { 1, &hf_ieee1609dot2_all , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
2224 { 0, NULL, 0, NULL }
2227 static int
2228 dissect_ieee1609dot2_SubjectPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2229 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2230 ett_ieee1609dot2_SubjectPermissions, SubjectPermissions_choice,
2231 NULL);
2233 return offset;
2238 static int
2239 dissect_ieee1609dot2_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2240 offset = dissect_oer_integer(tvb, offset, actx, tree, hf_index, NULL);
2242 return offset;
2246 static int * const EndEntityType_bits[] = {
2247 &hf_ieee1609dot2_EndEntityType_app,
2248 &hf_ieee1609dot2_EndEntityType_enrol,
2249 NULL
2252 static int
2253 dissect_ieee1609dot2_EndEntityType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2254 offset = dissect_oer_bit_string(tvb, offset, actx, tree, hf_index,
2255 8, 8, false, EndEntityType_bits, 2, NULL, NULL);
2257 return offset;
2261 static const oer_sequence_t PsidGroupPermissions_sequence[] = {
2262 { &hf_ieee1609dot2_subjectPermissions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SubjectPermissions },
2263 { &hf_ieee1609dot2_minChainLength, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_INTEGER },
2264 { &hf_ieee1609dot2_chainLengthRange, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_INTEGER },
2265 { &hf_ieee1609dot2_eeType , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_EndEntityType },
2266 { NULL, 0, 0, NULL }
2269 static int
2270 dissect_ieee1609dot2_PsidGroupPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2271 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2272 ett_ieee1609dot2_PsidGroupPermissions, PsidGroupPermissions_sequence);
2274 return offset;
2278 static const oer_sequence_t SequenceOfPsidGroupPermissions_sequence_of[1] = {
2279 { &hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidGroupPermissions },
2282 static int
2283 dissect_ieee1609dot2_SequenceOfPsidGroupPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2284 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
2285 ett_ieee1609dot2_SequenceOfPsidGroupPermissions, SequenceOfPsidGroupPermissions_sequence_of);
2287 return offset;
2291 static const value_string ieee1609dot2_VerificationKeyIndicator_vals[] = {
2292 { 0, "verificationKey" },
2293 { 1, "reconstructionValue" },
2294 { 0, NULL }
2297 static const oer_choice_t VerificationKeyIndicator_choice[] = {
2298 { 0, &hf_ieee1609dot2_verificationKey, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_PublicVerificationKey },
2299 { 1, &hf_ieee1609dot2_reconstructionValue, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
2300 { 0, NULL, 0, NULL }
2303 static int
2304 dissect_ieee1609dot2_VerificationKeyIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2305 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2306 ett_ieee1609dot2_VerificationKeyIndicator, VerificationKeyIndicator_choice,
2307 NULL);
2309 return offset;
2313 static int * const T_flags_bits[] = {
2314 &hf_ieee1609dot2_T_flags_usesCubk,
2315 NULL
2318 static int
2319 dissect_ieee1609dot2_T_flags(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2320 offset = dissect_oer_bit_string(tvb, offset, actx, tree, hf_index,
2321 8, 8, false, T_flags_bits, 1, NULL, NULL);
2323 return offset;
2328 static int
2329 dissect_ieee1609dot2_T_content(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2330 offset = dissect_oer_open_type(tvb, offset, actx, tree, hf_index, NULL);
2332 return offset;
2336 static const oer_sequence_t AppExtension_sequence[] = {
2337 { &hf_ieee1609dot2_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ExtId },
2338 { &hf_ieee1609dot2_content_03, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_content },
2339 { NULL, 0, 0, NULL }
2342 static int
2343 dissect_ieee1609dot2_AppExtension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2344 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2345 ett_ieee1609dot2_AppExtension, AppExtension_sequence);
2347 return offset;
2351 static const oer_sequence_t SequenceOfAppExtensions_sequence_of[1] = {
2352 { &hf_ieee1609dot2_SequenceOfAppExtensions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_AppExtension },
2355 static int
2356 dissect_ieee1609dot2_SequenceOfAppExtensions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2357 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2358 ett_ieee1609dot2_SequenceOfAppExtensions, SequenceOfAppExtensions_sequence_of,
2359 1, NO_BOUND, false);
2361 return offset;
2366 static int
2367 dissect_ieee1609dot2_T_specific(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2368 offset = dissect_oer_open_type(tvb, offset, actx, tree, hf_index, NULL);
2370 return offset;
2374 static const value_string ieee1609dot2_T_permissions_vals[] = {
2375 { 0, "specific" },
2376 { 1, "all" },
2377 { 0, NULL }
2380 static const oer_choice_t T_permissions_choice[] = {
2381 { 0, &hf_ieee1609dot2_specific, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_T_specific },
2382 { 1, &hf_ieee1609dot2_all , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_NULL },
2383 { 0, NULL, 0, NULL }
2386 static int
2387 dissect_ieee1609dot2_T_permissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2388 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2389 ett_ieee1609dot2_T_permissions, T_permissions_choice,
2390 NULL);
2392 return offset;
2396 static const oer_sequence_t CertIssueExtension_sequence[] = {
2397 { &hf_ieee1609dot2_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ExtId },
2398 { &hf_ieee1609dot2_permissions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_permissions },
2399 { NULL, 0, 0, NULL }
2402 static int
2403 dissect_ieee1609dot2_CertIssueExtension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2404 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2405 ett_ieee1609dot2_CertIssueExtension, CertIssueExtension_sequence);
2407 return offset;
2411 static const oer_sequence_t SequenceOfCertIssueExtensions_sequence_of[1] = {
2412 { &hf_ieee1609dot2_SequenceOfCertIssueExtensions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertIssueExtension },
2415 static int
2416 dissect_ieee1609dot2_SequenceOfCertIssueExtensions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2417 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2418 ett_ieee1609dot2_SequenceOfCertIssueExtensions, SequenceOfCertIssueExtensions_sequence_of,
2419 1, NO_BOUND, false);
2421 return offset;
2426 static int
2427 dissect_ieee1609dot2_T_content_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2428 offset = dissect_oer_open_type(tvb, offset, actx, tree, hf_index, NULL);
2430 return offset;
2434 static const value_string ieee1609dot2_T_permissions_01_vals[] = {
2435 { 0, "content" },
2436 { 1, "all" },
2437 { 0, NULL }
2440 static const oer_choice_t T_permissions_01_choice[] = {
2441 { 0, &hf_ieee1609dot2_content_04, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_T_content_01 },
2442 { 1, &hf_ieee1609dot2_all , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_NULL },
2443 { 0, NULL, 0, NULL }
2446 static int
2447 dissect_ieee1609dot2_T_permissions_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2448 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2449 ett_ieee1609dot2_T_permissions_01, T_permissions_01_choice,
2450 NULL);
2452 return offset;
2456 static const oer_sequence_t CertRequestExtension_sequence[] = {
2457 { &hf_ieee1609dot2_id , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ExtId },
2458 { &hf_ieee1609dot2_permissions_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_permissions_01 },
2459 { NULL, 0, 0, NULL }
2462 static int
2463 dissect_ieee1609dot2_CertRequestExtension(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2464 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2465 ett_ieee1609dot2_CertRequestExtension, CertRequestExtension_sequence);
2467 return offset;
2471 static const oer_sequence_t SequenceOfCertRequestExtensions_sequence_of[1] = {
2472 { &hf_ieee1609dot2_SequenceOfCertRequestExtensions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertRequestExtension },
2475 static int
2476 dissect_ieee1609dot2_SequenceOfCertRequestExtensions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2477 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2478 ett_ieee1609dot2_SequenceOfCertRequestExtensions, SequenceOfCertRequestExtensions_sequence_of,
2479 1, NO_BOUND, false);
2481 return offset;
2485 static const oer_sequence_t ToBeSignedCertificate_sequence[] = {
2486 { &hf_ieee1609dot2_certificateId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertificateId },
2487 { &hf_ieee1609dot2_cracaId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId3 },
2488 { &hf_ieee1609dot2_crlSeries, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSeries },
2489 { &hf_ieee1609dot2_validityPeriod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ValidityPeriod },
2490 { &hf_ieee1609dot2_region , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_GeographicRegion },
2491 { &hf_ieee1609dot2_assuranceLevel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SubjectAssurance },
2492 { &hf_ieee1609dot2_appPermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidSsp },
2493 { &hf_ieee1609dot2_certIssuePermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidGroupPermissions },
2494 { &hf_ieee1609dot2_certRequestPermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidGroupPermissions },
2495 { &hf_ieee1609dot2_canRequestRollover, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_NULL },
2496 { &hf_ieee1609dot2_tbscEncryptionKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_PublicEncryptionKey },
2497 { &hf_ieee1609dot2_verifyKeyIndicator, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_VerificationKeyIndicator },
2498 { &hf_ieee1609dot2_flags , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_T_flags },
2499 { &hf_ieee1609dot2_appExtensions, ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfAppExtensions },
2500 { &hf_ieee1609dot2_certIssueExtensions, ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfCertIssueExtensions },
2501 { &hf_ieee1609dot2_certRequestExtension, ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfCertRequestExtensions },
2502 { NULL, 0, 0, NULL }
2505 static int
2506 dissect_ieee1609dot2_ToBeSignedCertificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2507 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2508 ett_ieee1609dot2_ToBeSignedCertificate, ToBeSignedCertificate_sequence);
2510 return offset;
2514 static const oer_sequence_t CertificateBase_sequence[] = {
2515 { &hf_ieee1609dot2_version_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8_3 },
2516 { &hf_ieee1609dot2_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertificateType },
2517 { &hf_ieee1609dot2_issuer , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IssuerIdentifier },
2518 { &hf_ieee1609dot2_toBeSigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ToBeSignedCertificate },
2519 { &hf_ieee1609dot2_signature, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_Signature },
2520 { NULL, 0, 0, NULL }
2523 static int
2524 dissect_ieee1609dot2_CertificateBase(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2525 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2526 ett_ieee1609dot2_CertificateBase, CertificateBase_sequence);
2528 return offset;
2533 static int
2534 dissect_ieee1609dot2_Certificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2535 offset = dissect_ieee1609dot2_CertificateBase(tvb, offset, actx, tree, hf_index);
2537 return offset;
2541 static const value_string ieee1609dot2_PduFunctionalType_vals[] = {
2542 { 1, "tlsHandshake" },
2543 { 2, "iso21177ExtendedAuth" },
2544 { 3, "iso21177SessionExtension" },
2545 { 0, NULL }
2549 static int
2550 dissect_ieee1609dot2_PduFunctionalType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2551 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
2552 0U, 255U, NULL, false);
2554 return offset;
2558 static const value_string ieee1609dot2_HeaderInfoContributorId_vals[] = {
2559 { 1, "ieee1609HeaderInfoContributorId" },
2560 { 2, "etsiHeaderInfoContributorId" },
2561 { 0, NULL }
2565 static int
2566 dissect_ieee1609dot2_HeaderInfoContributorId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2567 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
2568 0U, 255U, NULL, false);
2570 return offset;
2575 static int
2576 dissect_ieee1609dot2_T_extns_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2577 offset = dissect_oer_open_type(tvb, offset, actx, tree, hf_index, NULL);
2579 return offset;
2583 static const oer_sequence_t T_extns_sequence_of[1] = {
2584 { &hf_ieee1609dot2_extns_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_extns_item },
2587 static int
2588 dissect_ieee1609dot2_T_extns(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2589 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2590 ett_ieee1609dot2_T_extns, T_extns_sequence_of,
2591 1, NO_BOUND, false);
2593 return offset;
2597 static const oer_sequence_t ContributedExtensionBlock_sequence[] = {
2598 { &hf_ieee1609dot2_contributorId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HeaderInfoContributorId },
2599 { &hf_ieee1609dot2_extns , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_extns },
2600 { NULL, 0, 0, NULL }
2603 static int
2604 dissect_ieee1609dot2_ContributedExtensionBlock(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2605 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2606 ett_ieee1609dot2_ContributedExtensionBlock, ContributedExtensionBlock_sequence);
2608 return offset;
2612 static const oer_sequence_t ContributedExtensionBlocks_sequence_of[1] = {
2613 { &hf_ieee1609dot2_ContributedExtensionBlocks_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ContributedExtensionBlock },
2616 static int
2617 dissect_ieee1609dot2_ContributedExtensionBlocks(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2618 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
2619 ett_ieee1609dot2_ContributedExtensionBlocks, ContributedExtensionBlocks_sequence_of,
2620 1, NO_BOUND, false);
2622 return offset;
2626 static const oer_sequence_t HeaderInfo_sequence[] = {
2627 { &hf_ieee1609dot2_hiPsid , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_hiPsid },
2628 { &hf_ieee1609dot2_generationTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Time64 },
2629 { &hf_ieee1609dot2_expiryTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Time64 },
2630 { &hf_ieee1609dot2_generationLocation, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_ThreeDLocation },
2631 { &hf_ieee1609dot2_p2pcdLearningRequest, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_HashedId3 },
2632 { &hf_ieee1609dot2_missingCrlIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_MissingCrlIdentifier },
2633 { &hf_ieee1609dot2_encryptionKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_EncryptionKey },
2634 { &hf_ieee1609dot2_inlineP2pcdRequest, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfHashedId3 },
2635 { &hf_ieee1609dot2_requestedCertificate, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_Certificate },
2636 { &hf_ieee1609dot2_pduFunctionalType, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_PduFunctionalType },
2637 { &hf_ieee1609dot2_contributedExtensions, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_ContributedExtensionBlocks },
2638 { NULL, 0, 0, NULL }
2641 static int
2642 dissect_ieee1609dot2_HeaderInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2643 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2644 ett_ieee1609dot2_HeaderInfo, HeaderInfo_sequence);
2646 return offset;
2650 static const oer_sequence_t CrlToBeSignedData_sequence[] = {
2651 { &hf_ieee1609dot2_payload, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSignedDataPayload },
2652 { &hf_ieee1609dot2_headerInfo, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HeaderInfo },
2653 { NULL, 0, 0, NULL }
2656 static int
2657 dissect_ieee1609dot2_CrlToBeSignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2658 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2659 ett_ieee1609dot2_CrlToBeSignedData, CrlToBeSignedData_sequence);
2661 return offset;
2665 static const oer_sequence_t CrlSignedData_sequence[] = {
2666 { &hf_ieee1609dot2_tbsData, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlToBeSignedData },
2667 { NULL, 0, 0, NULL }
2670 static int
2671 dissect_ieee1609dot2_CrlSignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2672 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2673 ett_ieee1609dot2_CrlSignedData, CrlSignedData_sequence);
2675 return offset;
2679 static const value_string ieee1609dot2_SecuredCrlContent_vals[] = {
2680 { 0, "signedData" },
2681 { 0, NULL }
2684 static const oer_choice_t SecuredCrlContent_choice[] = {
2685 { 0, &hf_ieee1609dot2_signedData, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_CrlSignedData },
2686 { 0, NULL, 0, NULL }
2689 static int
2690 dissect_ieee1609dot2_SecuredCrlContent(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2691 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2692 ett_ieee1609dot2_SecuredCrlContent, SecuredCrlContent_choice,
2693 NULL);
2695 return offset;
2699 static const oer_sequence_t SecuredCrl_sequence[] = {
2700 { &hf_ieee1609dot2_content, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SecuredCrlContent },
2701 { NULL, 0, 0, NULL }
2704 static int
2705 dissect_ieee1609dot2_SecuredCrl(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2706 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2707 ett_ieee1609dot2_SecuredCrl, SecuredCrl_sequence);
2709 return offset;
2714 static int
2715 dissect_ieee1609dot2_T_unsecuredData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2716 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
2718 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
2719 NO_BOUND, NO_BOUND, false, &my_private_data->unsecured_data);
2721 if (my_private_data->unsecured_data) {
2722 // psid may also be provided in HeaderInfo
2723 uint32_t psid = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_ieee1609dot2, 0));
2724 if (psid) {
2725 /* Call next dissector here */
2726 dissector_try_uint(unsecured_data_subdissector_table, psid, my_private_data->unsecured_data, actx->pinfo, tree);
2727 my_private_data->unsecured_data = NULL;
2729 // else: wait for the HeaderInfo for a second chance to dissect the content
2733 return offset;
2737 static const value_string ieee1609dot2_HashedData_vals[] = {
2738 { 0, "sha256HashedData" },
2739 { 1, "sha384HashedData" },
2740 { 2, "sm3HashedData" },
2741 { 0, NULL }
2744 static const oer_choice_t HashedData_choice[] = {
2745 { 0, &hf_ieee1609dot2_sha256HashedData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashedId32 },
2746 { 1, &hf_ieee1609dot2_sha384HashedData, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_HashedId48 },
2747 { 2, &hf_ieee1609dot2_sm3HashedData, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_HashedId32 },
2748 { 0, NULL, 0, NULL }
2751 static int
2752 dissect_ieee1609dot2_HashedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2753 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2754 ett_ieee1609dot2_HashedData, HashedData_choice,
2755 NULL);
2757 return offset;
2761 static const oer_sequence_t SignedDataPayload_sequence[] = {
2762 { &hf_ieee1609dot2_data_01, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Ieee1609Dot2Data },
2763 { &hf_ieee1609dot2_extDataHash, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_HashedData },
2764 { &hf_ieee1609dot2_omitted, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_ieee1609dot2_NULL },
2765 { NULL, 0, 0, NULL }
2768 static int
2769 dissect_ieee1609dot2_SignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2770 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2771 ett_ieee1609dot2_SignedDataPayload, SignedDataPayload_sequence);
2773 return offset;
2777 static const oer_sequence_t ToBeSignedData_sequence[] = {
2778 { &hf_ieee1609dot2_payload_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SignedDataPayload },
2779 { &hf_ieee1609dot2_headerInfo, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HeaderInfo },
2780 { NULL, 0, 0, NULL }
2783 static int
2784 dissect_ieee1609dot2_ToBeSignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2785 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2786 ett_ieee1609dot2_ToBeSignedData, ToBeSignedData_sequence);
2788 return offset;
2792 static const oer_sequence_t SequenceOfCertificate_sequence_of[1] = {
2793 { &hf_ieee1609dot2_SequenceOfCertificate_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Certificate },
2796 static int
2797 dissect_ieee1609dot2_SequenceOfCertificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2798 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
2799 ett_ieee1609dot2_SequenceOfCertificate, SequenceOfCertificate_sequence_of);
2801 return offset;
2805 static const value_string ieee1609dot2_SignerIdentifier_vals[] = {
2806 { 0, "digest" },
2807 { 1, "certificate" },
2808 { 2, "self" },
2809 { 0, NULL }
2812 static const oer_choice_t SignerIdentifier_choice[] = {
2813 { 0, &hf_ieee1609dot2_digest , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashedId8 },
2814 { 1, &hf_ieee1609dot2_certificate, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfCertificate },
2815 { 2, &hf_ieee1609dot2_siSelf , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
2816 { 0, NULL, 0, NULL }
2819 static int
2820 dissect_ieee1609dot2_SignerIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2821 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2822 ett_ieee1609dot2_SignerIdentifier, SignerIdentifier_choice,
2823 NULL);
2825 return offset;
2829 static const oer_sequence_t SignedData_sequence[] = {
2830 { &hf_ieee1609dot2_hashId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashAlgorithm },
2831 { &hf_ieee1609dot2_tbsData_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ToBeSignedData },
2832 { &hf_ieee1609dot2_signer , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SignerIdentifier },
2833 { &hf_ieee1609dot2_signature, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Signature },
2834 { NULL, 0, 0, NULL }
2837 static int
2838 dissect_ieee1609dot2_SignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2839 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2840 ett_ieee1609dot2_SignedData, SignedData_sequence);
2842 return offset;
2847 static int
2848 dissect_ieee1609dot2_PreSharedKeyRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2849 offset = dissect_ieee1609dot2_HashedId8(tvb, offset, actx, tree, hf_index);
2851 return offset;
2856 static int
2857 dissect_ieee1609dot2_OCTET_STRING_SIZE_12(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2858 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
2859 12, 12, false, NULL);
2861 return offset;
2865 static const oer_sequence_t One28BitCcmCiphertext_sequence[] = {
2866 { &hf_ieee1609dot2_nonce , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_12 },
2867 { &hf_ieee1609dot2_ccmCiphertext, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Opaque },
2868 { NULL, 0, 0, NULL }
2871 static int
2872 dissect_ieee1609dot2_One28BitCcmCiphertext(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2873 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2874 ett_ieee1609dot2_One28BitCcmCiphertext, One28BitCcmCiphertext_sequence);
2876 return offset;
2880 static const value_string ieee1609dot2_SymmetricCiphertext_vals[] = {
2881 { 0, "aes128ccm" },
2882 { 1, "sm4Ccm" },
2883 { 0, NULL }
2886 static const oer_choice_t SymmetricCiphertext_choice[] = {
2887 { 0, &hf_ieee1609dot2_aes128ccm, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_One28BitCcmCiphertext },
2888 { 1, &hf_ieee1609dot2_sm4Ccm_01, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_One28BitCcmCiphertext },
2889 { 0, NULL, 0, NULL }
2892 static int
2893 dissect_ieee1609dot2_SymmetricCiphertext(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2894 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2895 ett_ieee1609dot2_SymmetricCiphertext, SymmetricCiphertext_choice,
2896 NULL);
2898 return offset;
2902 static const oer_sequence_t SymmRecipientInfo_sequence[] = {
2903 { &hf_ieee1609dot2_recipientId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId8 },
2904 { &hf_ieee1609dot2_sriEncKey, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmetricCiphertext },
2905 { NULL, 0, 0, NULL }
2908 static int
2909 dissect_ieee1609dot2_SymmRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2910 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2911 ett_ieee1609dot2_SymmRecipientInfo, SymmRecipientInfo_sequence);
2913 return offset;
2917 static const value_string ieee1609dot2_EncryptedDataEncryptionKey_vals[] = {
2918 { 0, "eciesNistP256" },
2919 { 1, "eciesBrainpoolP256r1" },
2920 { 2, "ecencSm2256" },
2921 { 0, NULL }
2924 static const oer_choice_t EncryptedDataEncryptionKey_choice[] = {
2925 { 0, &hf_ieee1609dot2_edeEciesNistP256, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EciesP256EncryptedKey },
2926 { 1, &hf_ieee1609dot2_edekEciesBrainpoolP256r1, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EciesP256EncryptedKey },
2927 { 2, &hf_ieee1609dot2_ecencSm2256, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_EcencP256EncryptedKey },
2928 { 0, NULL, 0, NULL }
2931 static int
2932 dissect_ieee1609dot2_EncryptedDataEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2933 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2934 ett_ieee1609dot2_EncryptedDataEncryptionKey, EncryptedDataEncryptionKey_choice,
2935 NULL);
2937 return offset;
2941 static const oer_sequence_t PKRecipientInfo_sequence[] = {
2942 { &hf_ieee1609dot2_recipientId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId8 },
2943 { &hf_ieee1609dot2_encKey , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EncryptedDataEncryptionKey },
2944 { NULL, 0, 0, NULL }
2947 static int
2948 dissect_ieee1609dot2_PKRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2949 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
2950 ett_ieee1609dot2_PKRecipientInfo, PKRecipientInfo_sequence);
2952 return offset;
2956 static const value_string ieee1609dot2_RecipientInfo_vals[] = {
2957 { 0, "pskRecipInfo" },
2958 { 1, "symmRecipInfo" },
2959 { 2, "certRecipInfo" },
2960 { 3, "signedDataRecipInfo" },
2961 { 4, "rekRecipInfo" },
2962 { 0, NULL }
2965 static const oer_choice_t RecipientInfo_choice[] = {
2966 { 0, &hf_ieee1609dot2_pskRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PreSharedKeyRecipientInfo },
2967 { 1, &hf_ieee1609dot2_symmRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_SymmRecipientInfo },
2968 { 2, &hf_ieee1609dot2_certRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
2969 { 3, &hf_ieee1609dot2_signedDataRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
2970 { 4, &hf_ieee1609dot2_rekRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
2971 { 0, NULL, 0, NULL }
2974 static int
2975 dissect_ieee1609dot2_RecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2976 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
2977 ett_ieee1609dot2_RecipientInfo, RecipientInfo_choice,
2978 NULL);
2980 return offset;
2984 static const oer_sequence_t SequenceOfRecipientInfo_sequence_of[1] = {
2985 { &hf_ieee1609dot2_SequenceOfRecipientInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RecipientInfo },
2988 static int
2989 dissect_ieee1609dot2_SequenceOfRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
2990 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
2991 ett_ieee1609dot2_SequenceOfRecipientInfo, SequenceOfRecipientInfo_sequence_of);
2993 return offset;
2997 static const oer_sequence_t EncryptedData_sequence[] = {
2998 { &hf_ieee1609dot2_recipients, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfRecipientInfo },
2999 { &hf_ieee1609dot2_ciphertext, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmetricCiphertext },
3000 { NULL, 0, 0, NULL }
3003 static int
3004 dissect_ieee1609dot2_EncryptedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3005 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
3006 ett_ieee1609dot2_EncryptedData, EncryptedData_sequence);
3008 return offset;
3012 static const value_string ieee1609dot2_Ieee1609Dot2Content_vals[] = {
3013 { 0, "unsecuredData" },
3014 { 1, "signedData" },
3015 { 2, "encryptedData" },
3016 { 3, "signedCertificateRequest" },
3017 { 4, "signedX509CertificateRequest" },
3018 { 0, NULL }
3021 static const oer_choice_t Ieee1609Dot2Content_choice[] = {
3022 { 0, &hf_ieee1609dot2_unsecuredData_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_T_unsecuredData },
3023 { 1, &hf_ieee1609dot2_signedData_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SignedData },
3024 { 2, &hf_ieee1609dot2_encryptedData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EncryptedData },
3025 { 3, &hf_ieee1609dot2_signedCertificateRequest, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_Opaque },
3026 { 4, &hf_ieee1609dot2_signedX509CertificateRequest, ASN1_NOT_EXTENSION_ROOT, dissect_ieee1609dot2_Opaque },
3027 { 0, NULL, 0, NULL }
3030 static int
3031 dissect_ieee1609dot2_Ieee1609Dot2Content(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3032 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
3033 ett_ieee1609dot2_Ieee1609Dot2Content, Ieee1609Dot2Content_choice,
3034 NULL);
3036 return offset;
3040 static const oer_sequence_t Ieee1609Dot2Data_sequence[] = {
3041 { &hf_ieee1609dot2_protocolVersion, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8_3 },
3042 { &hf_ieee1609dot2_content_02, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Ieee1609Dot2Content },
3043 { NULL, 0, 0, NULL }
3046 static int
3047 dissect_ieee1609dot2_Ieee1609Dot2Data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
3048 // Ieee1609Dot2Data -> Ieee1609Dot2Content -> SignedData -> ToBeSignedData -> SignedDataPayload -> Ieee1609Dot2Data
3049 actx->pinfo->dissection_depth += 5;
3050 increment_dissection_depth(actx->pinfo);
3051 actx->private_data = (void*)wmem_new0(actx->pinfo->pool, ieee1609_private_data_t);
3052 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
3053 ett_ieee1609dot2_Ieee1609Dot2Data, Ieee1609Dot2Data_sequence);
3055 actx->pinfo->dissection_depth -= 5;
3056 decrement_dissection_depth(actx->pinfo);
3057 return offset;
3060 /*--- PDUs ---*/
3062 static int dissect_SecuredCrl_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
3063 int offset = 0;
3064 asn1_ctx_t asn1_ctx;
3065 asn1_ctx_init(&asn1_ctx, ASN1_ENC_OER, true, pinfo);
3066 offset = dissect_ieee1609dot2_SecuredCrl(tvb, offset, &asn1_ctx, tree, hf_ieee1609dot2_SecuredCrl_PDU);
3067 return offset;
3069 static int dissect_Ieee1609Dot2Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
3070 int offset = 0;
3071 asn1_ctx_t asn1_ctx;
3072 asn1_ctx_init(&asn1_ctx, ASN1_ENC_OER, true, pinfo);
3073 offset = dissect_ieee1609dot2_Ieee1609Dot2Data(tvb, offset, &asn1_ctx, tree, hf_ieee1609dot2_Ieee1609Dot2Data_PDU);
3074 return offset;
3079 static void
3080 ieee1609dot2_NinetyDegreeInt_fmt(char *s, uint32_t v)
3082 int32_t lat = (int32_t)v;
3083 if (lat == 900000001) {
3084 snprintf(s, ITEM_LABEL_LENGTH, "unavailable(%d)", lat);
3085 } else {
3086 snprintf(s, ITEM_LABEL_LENGTH, "%u°%u'%.3f\"%c (%d)",
3087 abs(lat) / 10000000,
3088 abs(lat) % 10000000 * 6 / 1000000,
3089 abs(lat) % 10000000 * 6 % 1000000 * 6.0 / 100000.0,
3090 (lat >= 0) ? 'N' : 'S',
3091 lat);
3095 static void
3096 ieee1609dot2_OneEightyDegreeInt_fmt(char *s, uint32_t v)
3098 int32_t lng = (int32_t)v;
3099 if (lng == 1800000001) {
3100 snprintf(s, ITEM_LABEL_LENGTH, "unavailable(%d)", lng);
3101 } else {
3102 snprintf(s, ITEM_LABEL_LENGTH, "%u°%u'%.3f\"%c (%d)",
3103 abs(lng) / 10000000,
3104 abs(lng) % 10000000 * 6 / 1000000,
3105 abs(lng) % 10000000 * 6 % 1000000 * 6.0 / 100000.0,
3106 (lng >= 0) ? 'E' : 'W',
3107 lng);
3112 static void
3113 ieee1609dot2_Time32_fmt(char *s, uint32_t v)
3115 time_t secs = v + 1072915200 - 5;
3116 struct tm *tm = gmtime(&secs);
3117 snprintf(s, ITEM_LABEL_LENGTH, "%u-%02u-%02u %02u:%02u:%02u (%u)",
3118 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, v
3122 static void
3123 ieee1609dot2_Time64_fmt(char *s, uint64_t v)
3125 time_t secs = v / 1000000 + 1072915200 - 5;
3126 uint32_t usecs = v % 1000000;
3127 struct tm *tm = gmtime(&secs);
3128 snprintf(s, ITEM_LABEL_LENGTH, "%u-%02u-%02u %02u:%02u:%02u.%06u (%" PRIu64 ")",
3129 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, usecs, v
3133 /*--- proto_register_ieee1609dot2 ----------------------------------------------*/
3134 void proto_register_ieee1609dot2(void) {
3136 /* List of fields */
3137 static hf_register_info hf[] = {
3138 { &hf_ieee1609dot2_SecuredCrl_PDU,
3139 { "SecuredCrl", "ieee1609dot2.SecuredCrl_element",
3140 FT_NONE, BASE_NONE, NULL, 0,
3141 NULL, HFILL }},
3142 { &hf_ieee1609dot2_Ieee1609Dot2Data_PDU,
3143 { "Ieee1609Dot2Data", "ieee1609dot2.Ieee1609Dot2Data_element",
3144 FT_NONE, BASE_NONE, NULL, 0,
3145 NULL, HFILL }},
3146 { &hf_ieee1609dot2_SequenceOfUint8_item,
3147 { "Uint8", "ieee1609dot2.Uint8",
3148 FT_UINT32, BASE_DEC, NULL, 0,
3149 NULL, HFILL }},
3150 { &hf_ieee1609dot2_SequenceOfUint16_item,
3151 { "Uint16", "ieee1609dot2.Uint16",
3152 FT_UINT32, BASE_DEC, NULL, 0,
3153 NULL, HFILL }},
3154 { &hf_ieee1609dot2_SequenceOfHashedId3_item,
3155 { "HashedId3", "ieee1609dot2.HashedId3",
3156 FT_BYTES, BASE_NONE, NULL, 0,
3157 NULL, HFILL }},
3158 { &hf_ieee1609dot2_start,
3159 { "start", "ieee1609dot2.start",
3160 FT_UINT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time32_fmt), 0,
3161 "Time32", HFILL }},
3162 { &hf_ieee1609dot2_duration,
3163 { "duration", "ieee1609dot2.duration",
3164 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Duration_vals), 0,
3165 NULL, HFILL }},
3166 { &hf_ieee1609dot2_microseconds,
3167 { "microseconds", "ieee1609dot2.microseconds",
3168 FT_UINT32, BASE_DEC, NULL, 0,
3169 "Uint16", HFILL }},
3170 { &hf_ieee1609dot2_milliseconds,
3171 { "milliseconds", "ieee1609dot2.milliseconds",
3172 FT_UINT32, BASE_DEC, NULL, 0,
3173 "Uint16", HFILL }},
3174 { &hf_ieee1609dot2_seconds,
3175 { "seconds", "ieee1609dot2.seconds",
3176 FT_UINT32, BASE_DEC, NULL, 0,
3177 "Uint16", HFILL }},
3178 { &hf_ieee1609dot2_minutes,
3179 { "minutes", "ieee1609dot2.minutes",
3180 FT_UINT32, BASE_DEC, NULL, 0,
3181 "Uint16", HFILL }},
3182 { &hf_ieee1609dot2_hours,
3183 { "hours", "ieee1609dot2.hours",
3184 FT_UINT32, BASE_DEC, NULL, 0,
3185 "Uint16", HFILL }},
3186 { &hf_ieee1609dot2_sixtyHours,
3187 { "sixtyHours", "ieee1609dot2.sixtyHours",
3188 FT_UINT32, BASE_DEC, NULL, 0,
3189 "Uint16", HFILL }},
3190 { &hf_ieee1609dot2_years,
3191 { "years", "ieee1609dot2.years",
3192 FT_UINT32, BASE_DEC, NULL, 0,
3193 "Uint16", HFILL }},
3194 { &hf_ieee1609dot2_circularRegion,
3195 { "circularRegion", "ieee1609dot2.circularRegion_element",
3196 FT_NONE, BASE_NONE, NULL, 0,
3197 NULL, HFILL }},
3198 { &hf_ieee1609dot2_rectangularRegion,
3199 { "rectangularRegion", "ieee1609dot2.rectangularRegion",
3200 FT_UINT32, BASE_DEC, NULL, 0,
3201 "SequenceOfRectangularRegion", HFILL }},
3202 { &hf_ieee1609dot2_polygonalRegion,
3203 { "polygonalRegion", "ieee1609dot2.polygonalRegion",
3204 FT_UINT32, BASE_DEC, NULL, 0,
3205 NULL, HFILL }},
3206 { &hf_ieee1609dot2_identifiedRegion,
3207 { "identifiedRegion", "ieee1609dot2.identifiedRegion",
3208 FT_UINT32, BASE_DEC, NULL, 0,
3209 "SequenceOfIdentifiedRegion", HFILL }},
3210 { &hf_ieee1609dot2_center,
3211 { "center", "ieee1609dot2.center_element",
3212 FT_NONE, BASE_NONE, NULL, 0,
3213 "TwoDLocation", HFILL }},
3214 { &hf_ieee1609dot2_radius,
3215 { "radius", "ieee1609dot2.radius",
3216 FT_UINT32, BASE_DEC, NULL, 0,
3217 "Uint16", HFILL }},
3218 { &hf_ieee1609dot2_northWest,
3219 { "northWest", "ieee1609dot2.northWest_element",
3220 FT_NONE, BASE_NONE, NULL, 0,
3221 "TwoDLocation", HFILL }},
3222 { &hf_ieee1609dot2_southEast,
3223 { "southEast", "ieee1609dot2.southEast_element",
3224 FT_NONE, BASE_NONE, NULL, 0,
3225 "TwoDLocation", HFILL }},
3226 { &hf_ieee1609dot2_SequenceOfRectangularRegion_item,
3227 { "RectangularRegion", "ieee1609dot2.RectangularRegion_element",
3228 FT_NONE, BASE_NONE, NULL, 0,
3229 NULL, HFILL }},
3230 { &hf_ieee1609dot2_PolygonalRegion_item,
3231 { "TwoDLocation", "ieee1609dot2.TwoDLocation_element",
3232 FT_NONE, BASE_NONE, NULL, 0,
3233 NULL, HFILL }},
3234 { &hf_ieee1609dot2_latitude,
3235 { "latitude", "ieee1609dot2.latitude",
3236 FT_INT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_NinetyDegreeInt_fmt), 0,
3237 NULL, HFILL }},
3238 { &hf_ieee1609dot2_longitude,
3239 { "longitude", "ieee1609dot2.longitude",
3240 FT_INT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_OneEightyDegreeInt_fmt), 0,
3241 NULL, HFILL }},
3242 { &hf_ieee1609dot2_countryOnly,
3243 { "countryOnly", "ieee1609dot2.countryOnly",
3244 FT_UINT32, BASE_DEC, NULL, 0,
3245 "UnCountryId", HFILL }},
3246 { &hf_ieee1609dot2_countryAndRegions,
3247 { "countryAndRegions", "ieee1609dot2.countryAndRegions_element",
3248 FT_NONE, BASE_NONE, NULL, 0,
3249 NULL, HFILL }},
3250 { &hf_ieee1609dot2_countryAndSubregions,
3251 { "countryAndSubregions", "ieee1609dot2.countryAndSubregions_element",
3252 FT_NONE, BASE_NONE, NULL, 0,
3253 NULL, HFILL }},
3254 { &hf_ieee1609dot2_SequenceOfIdentifiedRegion_item,
3255 { "IdentifiedRegion", "ieee1609dot2.IdentifiedRegion",
3256 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_IdentifiedRegion_vals), 0,
3257 NULL, HFILL }},
3258 { &hf_ieee1609dot2_regions,
3259 { "regions", "ieee1609dot2.regions",
3260 FT_UINT32, BASE_DEC, NULL, 0,
3261 "SequenceOfUint8", HFILL }},
3262 { &hf_ieee1609dot2_regionAndSubregions,
3263 { "regionAndSubregions", "ieee1609dot2.regionAndSubregions",
3264 FT_UINT32, BASE_DEC, NULL, 0,
3265 "SequenceOfRegionAndSubregions", HFILL }},
3266 { &hf_ieee1609dot2_rasRegion,
3267 { "region", "ieee1609dot2.rasRegion",
3268 FT_UINT32, BASE_DEC, NULL, 0,
3269 "Uint8", HFILL }},
3270 { &hf_ieee1609dot2_subregions,
3271 { "subregions", "ieee1609dot2.subregions",
3272 FT_UINT32, BASE_DEC, NULL, 0,
3273 "SequenceOfUint16", HFILL }},
3274 { &hf_ieee1609dot2_SequenceOfRegionAndSubregions_item,
3275 { "RegionAndSubregions", "ieee1609dot2.RegionAndSubregions_element",
3276 FT_NONE, BASE_NONE, NULL, 0,
3277 NULL, HFILL }},
3278 { &hf_ieee1609dot2_elevation,
3279 { "elevation", "ieee1609dot2.elevation",
3280 FT_UINT32, BASE_DEC, NULL, 0,
3281 NULL, HFILL }},
3282 { &hf_ieee1609dot2_ecdsaNistP256Signature,
3283 { "ecdsaNistP256Signature", "ieee1609dot2.ecdsaNistP256Signature_element",
3284 FT_NONE, BASE_NONE, NULL, 0,
3285 "EcdsaP256Signature", HFILL }},
3286 { &hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature,
3287 { "ecdsaBrainpoolP256r1Signature", "ieee1609dot2.ecdsaBrainpoolP256r1Signature_element",
3288 FT_NONE, BASE_NONE, NULL, 0,
3289 "EcdsaP256Signature", HFILL }},
3290 { &hf_ieee1609dot2_ecdsaBrainpoolP384r1Signature,
3291 { "ecdsaBrainpoolP384r1Signature", "ieee1609dot2.ecdsaBrainpoolP384r1Signature_element",
3292 FT_NONE, BASE_NONE, NULL, 0,
3293 "EcdsaP384Signature", HFILL }},
3294 { &hf_ieee1609dot2_ecdsaNistP384Signature,
3295 { "ecdsaNistP384Signature", "ieee1609dot2.ecdsaNistP384Signature_element",
3296 FT_NONE, BASE_NONE, NULL, 0,
3297 "EcdsaP384Signature", HFILL }},
3298 { &hf_ieee1609dot2_sm2Signature,
3299 { "sm2Signature", "ieee1609dot2.sm2Signature_element",
3300 FT_NONE, BASE_NONE, NULL, 0,
3301 "EcsigP256Signature", HFILL }},
3302 { &hf_ieee1609dot2_rSig,
3303 { "rSig", "ieee1609dot2.rSig",
3304 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3305 "EccP256CurvePoint", HFILL }},
3306 { &hf_ieee1609dot2_sSig,
3307 { "sSig", "ieee1609dot2.sSig",
3308 FT_BYTES, BASE_NONE, NULL, 0,
3309 "OCTET_STRING_SIZE_32", HFILL }},
3310 { &hf_ieee1609dot2_ecdsap384RSig,
3311 { "rSig", "ieee1609dot2.ecdsap384RSig",
3312 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP384CurvePoint_vals), 0,
3313 "EccP384CurvePoint", HFILL }},
3314 { &hf_ieee1609dot2_ecdsap384SSig,
3315 { "sSig", "ieee1609dot2.ecdsap384SSig",
3316 FT_BYTES, BASE_NONE, NULL, 0,
3317 "OCTET_STRING_SIZE_48", HFILL }},
3318 { &hf_ieee1609dot2_ecsigp256RSig,
3319 { "rSig", "ieee1609dot2.ecsigp256RSig",
3320 FT_BYTES, BASE_NONE, NULL, 0,
3321 "OCTET_STRING_SIZE_32", HFILL }},
3322 { &hf_ieee1609dot2_x_only,
3323 { "x-only", "ieee1609dot2.x_only",
3324 FT_BYTES, BASE_NONE, NULL, 0,
3325 "OCTET_STRING_SIZE_32", HFILL }},
3326 { &hf_ieee1609dot2_fill,
3327 { "fill", "ieee1609dot2.fill_element",
3328 FT_NONE, BASE_NONE, NULL, 0,
3329 NULL, HFILL }},
3330 { &hf_ieee1609dot2_compressed_y_0,
3331 { "compressed-y-0", "ieee1609dot2.compressed_y_0",
3332 FT_BYTES, BASE_NONE, NULL, 0,
3333 "OCTET_STRING_SIZE_32", HFILL }},
3334 { &hf_ieee1609dot2_compressed_y_1,
3335 { "compressed-y-1", "ieee1609dot2.compressed_y_1",
3336 FT_BYTES, BASE_NONE, NULL, 0,
3337 "OCTET_STRING_SIZE_32", HFILL }},
3338 { &hf_ieee1609dot2_uncompressedP256,
3339 { "uncompressedP256", "ieee1609dot2.uncompressedP256_element",
3340 FT_NONE, BASE_NONE, NULL, 0,
3341 NULL, HFILL }},
3342 { &hf_ieee1609dot2_x,
3343 { "x", "ieee1609dot2.x",
3344 FT_BYTES, BASE_NONE, NULL, 0,
3345 "OCTET_STRING_SIZE_32", HFILL }},
3346 { &hf_ieee1609dot2_y,
3347 { "y", "ieee1609dot2.y",
3348 FT_BYTES, BASE_NONE, NULL, 0,
3349 "OCTET_STRING_SIZE_32", HFILL }},
3350 { &hf_ieee1609dot2_eccp384cpXOnly,
3351 { "x-only", "ieee1609dot2.eccp384cpXOnly",
3352 FT_BYTES, BASE_NONE, NULL, 0,
3353 "OCTET_STRING_SIZE_48", HFILL }},
3354 { &hf_ieee1609dot2_eccp384cpCompressed_y_0,
3355 { "compressed-y-0", "ieee1609dot2.eccp384cpCompressed_y_0",
3356 FT_BYTES, BASE_NONE, NULL, 0,
3357 "OCTET_STRING_SIZE_48", HFILL }},
3358 { &hf_ieee1609dot2_eccp384cpCompressed_y_1,
3359 { "compressed-y-1", "ieee1609dot2.eccp384cpCompressed_y_1",
3360 FT_BYTES, BASE_NONE, NULL, 0,
3361 "OCTET_STRING_SIZE_48", HFILL }},
3362 { &hf_ieee1609dot2_uncompressedP384,
3363 { "uncompressedP384", "ieee1609dot2.uncompressedP384_element",
3364 FT_NONE, BASE_NONE, NULL, 0,
3365 NULL, HFILL }},
3366 { &hf_ieee1609dot2_eccp384cpX,
3367 { "x", "ieee1609dot2.eccp384cpX",
3368 FT_BYTES, BASE_NONE, NULL, 0,
3369 "OCTET_STRING_SIZE_48", HFILL }},
3370 { &hf_ieee1609dot2_eccp384cpY,
3371 { "y", "ieee1609dot2.eccp384cpY",
3372 FT_BYTES, BASE_NONE, NULL, 0,
3373 "OCTET_STRING_SIZE_48", HFILL }},
3374 { &hf_ieee1609dot2_v,
3375 { "v", "ieee1609dot2.v",
3376 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3377 "EccP256CurvePoint", HFILL }},
3378 { &hf_ieee1609dot2_c,
3379 { "c", "ieee1609dot2.c",
3380 FT_BYTES, BASE_NONE, NULL, 0,
3381 "OCTET_STRING_SIZE_16", HFILL }},
3382 { &hf_ieee1609dot2_t,
3383 { "t", "ieee1609dot2.t",
3384 FT_BYTES, BASE_NONE, NULL, 0,
3385 "OCTET_STRING_SIZE_16", HFILL }},
3386 { &hf_ieee1609dot2_t_01,
3387 { "t", "ieee1609dot2.t",
3388 FT_BYTES, BASE_NONE, NULL, 0,
3389 "OCTET_STRING_SIZE_32", HFILL }},
3390 { &hf_ieee1609dot2_public,
3391 { "public", "ieee1609dot2.public_element",
3392 FT_NONE, BASE_NONE, NULL, 0,
3393 "PublicEncryptionKey", HFILL }},
3394 { &hf_ieee1609dot2_symmetric,
3395 { "symmetric", "ieee1609dot2.symmetric",
3396 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricEncryptionKey_vals), 0,
3397 "SymmetricEncryptionKey", HFILL }},
3398 { &hf_ieee1609dot2_supportedSymmAlg,
3399 { "supportedSymmAlg", "ieee1609dot2.supportedSymmAlg",
3400 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmAlgorithm_vals), 0,
3401 "SymmAlgorithm", HFILL }},
3402 { &hf_ieee1609dot2_publicKey,
3403 { "publicKey", "ieee1609dot2.publicKey",
3404 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_BasePublicEncryptionKey_vals), 0,
3405 "BasePublicEncryptionKey", HFILL }},
3406 { &hf_ieee1609dot2_eciesNistP256,
3407 { "eciesNistP256", "ieee1609dot2.eciesNistP256",
3408 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3409 "EccP256CurvePoint", HFILL }},
3410 { &hf_ieee1609dot2_eciesBrainpoolP256r1,
3411 { "eciesBrainpoolP256r1", "ieee1609dot2.eciesBrainpoolP256r1",
3412 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3413 "EccP256CurvePoint", HFILL }},
3414 { &hf_ieee1609dot2_ecencSm2,
3415 { "ecencSm2", "ieee1609dot2.ecencSm2",
3416 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3417 "EccP256CurvePoint", HFILL }},
3418 { &hf_ieee1609dot2_ecdsaNistP256,
3419 { "ecdsaNistP256", "ieee1609dot2.ecdsaNistP256",
3420 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3421 "EccP256CurvePoint", HFILL }},
3422 { &hf_ieee1609dot2_ecdsaBrainpoolP256r1,
3423 { "ecdsaBrainpoolP256r1", "ieee1609dot2.ecdsaBrainpoolP256r1",
3424 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3425 "EccP256CurvePoint", HFILL }},
3426 { &hf_ieee1609dot2_ecdsaBrainpoolP384r1,
3427 { "ecdsaBrainpoolP384r1", "ieee1609dot2.ecdsaBrainpoolP384r1",
3428 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP384CurvePoint_vals), 0,
3429 "EccP384CurvePoint", HFILL }},
3430 { &hf_ieee1609dot2_ecdsaNistP384,
3431 { "ecdsaNistP384", "ieee1609dot2.ecdsaNistP384",
3432 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP384CurvePoint_vals), 0,
3433 "EccP384CurvePoint", HFILL }},
3434 { &hf_ieee1609dot2_ecsigSm2,
3435 { "ecsigSm2", "ieee1609dot2.ecsigSm2",
3436 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
3437 "EccP256CurvePoint", HFILL }},
3438 { &hf_ieee1609dot2_aes128Ccm,
3439 { "aes128Ccm", "ieee1609dot2.aes128Ccm",
3440 FT_BYTES, BASE_NONE, NULL, 0,
3441 "OCTET_STRING_SIZE_16", HFILL }},
3442 { &hf_ieee1609dot2_sm4Ccm,
3443 { "sm4Ccm", "ieee1609dot2.sm4Ccm",
3444 FT_BYTES, BASE_NONE, NULL, 0,
3445 "OCTET_STRING_SIZE_16", HFILL }},
3446 { &hf_ieee1609dot2_psPsid,
3447 { "psid", "ieee1609dot2.psPsid",
3448 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
3449 "T_psPsid", HFILL }},
3450 { &hf_ieee1609dot2_ssp,
3451 { "ssp", "ieee1609dot2.ssp",
3452 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_ServiceSpecificPermissions_vals), 0,
3453 "ServiceSpecificPermissions", HFILL }},
3454 { &hf_ieee1609dot2_SequenceOfPsidSsp_item,
3455 { "PsidSsp", "ieee1609dot2.PsidSsp_element",
3456 FT_NONE, BASE_NONE, NULL, 0,
3457 NULL, HFILL }},
3458 { &hf_ieee1609dot2_opaque,
3459 { "opaque", "ieee1609dot2.opaque",
3460 FT_BYTES, BASE_NONE, NULL, 0,
3461 NULL, HFILL }},
3462 { &hf_ieee1609dot2_bitmapSsp,
3463 { "bitmapSsp", "ieee1609dot2.bitmapSsp",
3464 FT_BYTES, BASE_NONE, NULL, 0,
3465 NULL, HFILL }},
3466 { &hf_ieee1609dot2_psid,
3467 { "psid", "ieee1609dot2.psid",
3468 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
3469 NULL, HFILL }},
3470 { &hf_ieee1609dot2_sspRange,
3471 { "sspRange", "ieee1609dot2.sspRange",
3472 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SspRange_vals), 0,
3473 NULL, HFILL }},
3474 { &hf_ieee1609dot2_SequenceOfPsidSspRange_item,
3475 { "PsidSspRange", "ieee1609dot2.PsidSspRange_element",
3476 FT_NONE, BASE_NONE, NULL, 0,
3477 NULL, HFILL }},
3478 { &hf_ieee1609dot2_srRange,
3479 { "opaque", "ieee1609dot2.srRange.opaque",
3480 FT_UINT32, BASE_DEC, NULL, 0,
3481 "SequenceOfOctetString", HFILL }},
3482 { &hf_ieee1609dot2_all,
3483 { "all", "ieee1609dot2.all_element",
3484 FT_NONE, BASE_NONE, NULL, 0,
3485 NULL, HFILL }},
3486 { &hf_ieee1609dot2_bitmapSspRange,
3487 { "bitmapSspRange", "ieee1609dot2.bitmapSspRange_element",
3488 FT_NONE, BASE_NONE, NULL, 0,
3489 NULL, HFILL }},
3490 { &hf_ieee1609dot2_sspValue,
3491 { "sspValue", "ieee1609dot2.sspValue",
3492 FT_BYTES, BASE_NONE, NULL, 0,
3493 "OCTET_STRING_SIZE_1_32", HFILL }},
3494 { &hf_ieee1609dot2_sspBitmask,
3495 { "sspBitmask", "ieee1609dot2.sspBitmask",
3496 FT_BYTES, BASE_NONE, NULL, 0,
3497 "OCTET_STRING_SIZE_1_32", HFILL }},
3498 { &hf_ieee1609dot2_SequenceOfOctetString_item,
3499 { "SequenceOfOctetString item", "ieee1609dot2.SequenceOfOctetString_item",
3500 FT_BYTES, BASE_NONE, NULL, 0,
3501 "OCTET_STRING_SIZE_0_MAX", HFILL }},
3502 { &hf_ieee1609dot2_jValue,
3503 { "jValue", "ieee1609dot2.jValue",
3504 FT_BYTES, BASE_NONE, NULL, 0,
3505 "OCTET_STRING_SIZE_4", HFILL }},
3506 { &hf_ieee1609dot2_value,
3507 { "value", "ieee1609dot2.value",
3508 FT_BYTES, BASE_NONE, NULL, 0,
3509 "OCTET_STRING_SIZE_9", HFILL }},
3510 { &hf_ieee1609dot2_SequenceOfLinkageSeed_item,
3511 { "LinkageSeed", "ieee1609dot2.LinkageSeed",
3512 FT_BYTES, BASE_NONE, NULL, 0,
3513 NULL, HFILL }},
3514 { &hf_ieee1609dot2_version,
3515 { "version", "ieee1609dot2.version",
3516 FT_UINT32, BASE_DEC, NULL, 0,
3517 "Uint8_1", HFILL }},
3518 { &hf_ieee1609dot2_crlSeries,
3519 { "crlSeries", "ieee1609dot2.crlSeries",
3520 FT_UINT32, BASE_DEC, NULL, 0,
3521 NULL, HFILL }},
3522 { &hf_ieee1609dot2_crlCraca,
3523 { "crlCraca", "ieee1609dot2.crlCraca",
3524 FT_BYTES, BASE_NONE, NULL, 0,
3525 "HashedId8", HFILL }},
3526 { &hf_ieee1609dot2_issueDate,
3527 { "issueDate", "ieee1609dot2.issueDate",
3528 FT_UINT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time32_fmt), 0,
3529 "Time32", HFILL }},
3530 { &hf_ieee1609dot2_nextCrl,
3531 { "nextCrl", "ieee1609dot2.nextCrl",
3532 FT_UINT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time32_fmt), 0,
3533 "Time32", HFILL }},
3534 { &hf_ieee1609dot2_priorityInfo,
3535 { "priorityInfo", "ieee1609dot2.priorityInfo_element",
3536 FT_NONE, BASE_NONE, NULL, 0,
3537 "CrlPriorityInfo", HFILL }},
3538 { &hf_ieee1609dot2_typeSpecific,
3539 { "typeSpecific", "ieee1609dot2.typeSpecific",
3540 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_TypeSpecificCrlContents_vals), 0,
3541 "TypeSpecificCrlContents", HFILL }},
3542 { &hf_ieee1609dot2_priority,
3543 { "priority", "ieee1609dot2.priority",
3544 FT_UINT32, BASE_DEC, NULL, 0,
3545 "Uint8", HFILL }},
3546 { &hf_ieee1609dot2_fullHashCrl,
3547 { "fullHashCrl", "ieee1609dot2.fullHashCrl_element",
3548 FT_NONE, BASE_NONE, NULL, 0,
3549 "ToBeSignedHashIdCrl", HFILL }},
3550 { &hf_ieee1609dot2_deltaHashCrl,
3551 { "deltaHashCrl", "ieee1609dot2.deltaHashCrl_element",
3552 FT_NONE, BASE_NONE, NULL, 0,
3553 "ToBeSignedHashIdCrl", HFILL }},
3554 { &hf_ieee1609dot2_fullLinkedCrl,
3555 { "fullLinkedCrl", "ieee1609dot2.fullLinkedCrl_element",
3556 FT_NONE, BASE_NONE, NULL, 0,
3557 "ToBeSignedLinkageValueCrl", HFILL }},
3558 { &hf_ieee1609dot2_deltaLinkedCrl,
3559 { "deltaLinkedCrl", "ieee1609dot2.deltaLinkedCrl_element",
3560 FT_NONE, BASE_NONE, NULL, 0,
3561 "ToBeSignedLinkageValueCrl", HFILL }},
3562 { &hf_ieee1609dot2_fullLinkedCrlWithAlg,
3563 { "fullLinkedCrlWithAlg", "ieee1609dot2.fullLinkedCrlWithAlg_element",
3564 FT_NONE, BASE_NONE, NULL, 0,
3565 "ToBeSignedLinkageValueCrlWithAlgIdentifier", HFILL }},
3566 { &hf_ieee1609dot2_deltaLinkedCrlWithAlg,
3567 { "deltaLinkedCrlWithAlg", "ieee1609dot2.deltaLinkedCrlWithAlg_element",
3568 FT_NONE, BASE_NONE, NULL, 0,
3569 "ToBeSignedLinkageValueCrlWithAlgIdentifier", HFILL }},
3570 { &hf_ieee1609dot2_crlSerial,
3571 { "crlSerial", "ieee1609dot2.crlSerial",
3572 FT_UINT32, BASE_DEC, NULL, 0,
3573 "Uint32", HFILL }},
3574 { &hf_ieee1609dot2_entries,
3575 { "entries", "ieee1609dot2.entries",
3576 FT_UINT32, BASE_DEC, NULL, 0,
3577 "SequenceOfHashBasedRevocationInfo", HFILL }},
3578 { &hf_ieee1609dot2_SequenceOfHashBasedRevocationInfo_item,
3579 { "HashBasedRevocationInfo", "ieee1609dot2.HashBasedRevocationInfo_element",
3580 FT_NONE, BASE_NONE, NULL, 0,
3581 NULL, HFILL }},
3582 { &hf_ieee1609dot2_hashedId,
3583 { "id", "ieee1609dot2.hashedId",
3584 FT_BYTES, BASE_NONE, NULL, 0,
3585 "HashedId10", HFILL }},
3586 { &hf_ieee1609dot2_expiry,
3587 { "expiry", "ieee1609dot2.expiry",
3588 FT_UINT32, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time32_fmt), 0,
3589 "Time32", HFILL }},
3590 { &hf_ieee1609dot2_iRev,
3591 { "iRev", "ieee1609dot2.iRev",
3592 FT_UINT32, BASE_DEC, NULL, 0,
3593 "IValue", HFILL }},
3594 { &hf_ieee1609dot2_indexWithinI,
3595 { "indexWithinI", "ieee1609dot2.indexWithinI",
3596 FT_UINT32, BASE_DEC, NULL, 0,
3597 "Uint8", HFILL }},
3598 { &hf_ieee1609dot2_individual,
3599 { "individual", "ieee1609dot2.individual",
3600 FT_UINT32, BASE_DEC, NULL, 0,
3601 "SequenceOfJMaxGroup", HFILL }},
3602 { &hf_ieee1609dot2_groups,
3603 { "groups", "ieee1609dot2.groups",
3604 FT_UINT32, BASE_DEC, NULL, 0,
3605 "SequenceOfGroupCrlEntry", HFILL }},
3606 { &hf_ieee1609dot2_groupsSingleSeed,
3607 { "groupsSingleSeed", "ieee1609dot2.groupsSingleSeed",
3608 FT_UINT32, BASE_DEC, NULL, 0,
3609 "SequenceOfGroupSingleSeedCrlEntry", HFILL }},
3610 { &hf_ieee1609dot2_SequenceOfJMaxGroup_item,
3611 { "JMaxGroup", "ieee1609dot2.JMaxGroup_element",
3612 FT_NONE, BASE_NONE, NULL, 0,
3613 NULL, HFILL }},
3614 { &hf_ieee1609dot2_jmax,
3615 { "jmax", "ieee1609dot2.jmax",
3616 FT_UINT32, BASE_DEC, NULL, 0,
3617 "Uint8", HFILL }},
3618 { &hf_ieee1609dot2_contents,
3619 { "contents", "ieee1609dot2.contents",
3620 FT_UINT32, BASE_DEC, NULL, 0,
3621 "SequenceOfLAGroup", HFILL }},
3622 { &hf_ieee1609dot2_SequenceOfLAGroup_item,
3623 { "LAGroup", "ieee1609dot2.LAGroup_element",
3624 FT_NONE, BASE_NONE, NULL, 0,
3625 NULL, HFILL }},
3626 { &hf_ieee1609dot2_la1Id,
3627 { "la1Id", "ieee1609dot2.la1Id",
3628 FT_BYTES, BASE_NONE, NULL, 0,
3629 "LaId", HFILL }},
3630 { &hf_ieee1609dot2_la2Id,
3631 { "la2Id", "ieee1609dot2.la2Id",
3632 FT_BYTES, BASE_NONE, NULL, 0,
3633 "LaId", HFILL }},
3634 { &hf_ieee1609dot2_contents_01,
3635 { "contents", "ieee1609dot2.contents",
3636 FT_UINT32, BASE_DEC, NULL, 0,
3637 "SequenceOfIMaxGroup", HFILL }},
3638 { &hf_ieee1609dot2_SequenceOfIMaxGroup_item,
3639 { "IMaxGroup", "ieee1609dot2.IMaxGroup_element",
3640 FT_NONE, BASE_NONE, NULL, 0,
3641 NULL, HFILL }},
3642 { &hf_ieee1609dot2_iMax,
3643 { "iMax", "ieee1609dot2.iMax",
3644 FT_UINT32, BASE_DEC, NULL, 0,
3645 "Uint16", HFILL }},
3646 { &hf_ieee1609dot2_contents_02,
3647 { "contents", "ieee1609dot2.contents",
3648 FT_UINT32, BASE_DEC, NULL, 0,
3649 "SequenceOfIndividualRevocation", HFILL }},
3650 { &hf_ieee1609dot2_singleSeed,
3651 { "singleSeed", "ieee1609dot2.singleSeed",
3652 FT_UINT32, BASE_DEC, NULL, 0,
3653 "SequenceOfLinkageSeed", HFILL }},
3654 { &hf_ieee1609dot2_SequenceOfIndividualRevocation_item,
3655 { "IndividualRevocation", "ieee1609dot2.IndividualRevocation_element",
3656 FT_NONE, BASE_NONE, NULL, 0,
3657 NULL, HFILL }},
3658 { &hf_ieee1609dot2_linkageSeed1,
3659 { "linkageSeed1", "ieee1609dot2.linkageSeed1",
3660 FT_BYTES, BASE_NONE, NULL, 0,
3661 "LinkageSeed", HFILL }},
3662 { &hf_ieee1609dot2_linkageSeed2,
3663 { "linkageSeed2", "ieee1609dot2.linkageSeed2",
3664 FT_BYTES, BASE_NONE, NULL, 0,
3665 "LinkageSeed", HFILL }},
3666 { &hf_ieee1609dot2_SequenceOfGroupCrlEntry_item,
3667 { "GroupCrlEntry", "ieee1609dot2.GroupCrlEntry_element",
3668 FT_NONE, BASE_NONE, NULL, 0,
3669 NULL, HFILL }},
3670 { &hf_ieee1609dot2_seedEvolution,
3671 { "seedEvolution", "ieee1609dot2.seedEvolution_element",
3672 FT_NONE, BASE_NONE, NULL, 0,
3673 "SeedEvolutionFunctionIdentifier", HFILL }},
3674 { &hf_ieee1609dot2_lvGeneration,
3675 { "lvGeneration", "ieee1609dot2.lvGeneration_element",
3676 FT_NONE, BASE_NONE, NULL, 0,
3677 "LvGenerationFunctionIdentifier", HFILL }},
3678 { &hf_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry_item,
3679 { "GroupSingleSeedCrlEntry", "ieee1609dot2.GroupSingleSeedCrlEntry_element",
3680 FT_NONE, BASE_NONE, NULL, 0,
3681 NULL, HFILL }},
3682 { &hf_ieee1609dot2_laId,
3683 { "laId", "ieee1609dot2.laId",
3684 FT_BYTES, BASE_NONE, NULL, 0,
3685 NULL, HFILL }},
3686 { &hf_ieee1609dot2_linkageSeed,
3687 { "linkageSeed", "ieee1609dot2.linkageSeed",
3688 FT_BYTES, BASE_NONE, NULL, 0,
3689 NULL, HFILL }},
3690 { &hf_ieee1609dot2_content,
3691 { "content", "ieee1609dot2.content",
3692 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SecuredCrlContent_vals), 0,
3693 "SecuredCrlContent", HFILL }},
3694 { &hf_ieee1609dot2_signedData,
3695 { "signedData", "ieee1609dot2.signedData_element",
3696 FT_NONE, BASE_NONE, NULL, 0,
3697 "CrlSignedData", HFILL }},
3698 { &hf_ieee1609dot2_tbsData,
3699 { "tbsData", "ieee1609dot2.tbsData_element",
3700 FT_NONE, BASE_NONE, NULL, 0,
3701 "CrlToBeSignedData", HFILL }},
3702 { &hf_ieee1609dot2_payload,
3703 { "payload", "ieee1609dot2.payload_element",
3704 FT_NONE, BASE_NONE, NULL, 0,
3705 "CrlSignedDataPayload", HFILL }},
3706 { &hf_ieee1609dot2_headerInfo,
3707 { "headerInfo", "ieee1609dot2.headerInfo_element",
3708 FT_NONE, BASE_NONE, NULL, 0,
3709 NULL, HFILL }},
3710 { &hf_ieee1609dot2_data,
3711 { "data", "ieee1609dot2.data_element",
3712 FT_NONE, BASE_NONE, NULL, 0,
3713 "Ieee1609Dot2CrlData", HFILL }},
3714 { &hf_ieee1609dot2_content_01,
3715 { "content", "ieee1609dot2.content",
3716 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Ieee1609Dot2CrlContent_vals), 0,
3717 "Ieee1609Dot2CrlContent", HFILL }},
3718 { &hf_ieee1609dot2_unsecuredData,
3719 { "unsecuredData", "ieee1609dot2.unsecuredData_element",
3720 FT_NONE, BASE_NONE, NULL, 0,
3721 "CrlContents", HFILL }},
3722 { &hf_ieee1609dot2_protocolVersion,
3723 { "protocolVersion", "ieee1609dot2.protocolVersion",
3724 FT_UINT32, BASE_DEC, NULL, 0,
3725 "Uint8_3", HFILL }},
3726 { &hf_ieee1609dot2_content_02,
3727 { "content", "ieee1609dot2.content",
3728 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Ieee1609Dot2Content_vals), 0,
3729 "Ieee1609Dot2Content", HFILL }},
3730 { &hf_ieee1609dot2_unsecuredData_01,
3731 { "unsecuredData", "ieee1609dot2.unsecuredData",
3732 FT_BYTES, BASE_NONE, NULL, 0,
3733 NULL, HFILL }},
3734 { &hf_ieee1609dot2_signedData_01,
3735 { "signedData", "ieee1609dot2.signedData_element",
3736 FT_NONE, BASE_NONE, NULL, 0,
3737 NULL, HFILL }},
3738 { &hf_ieee1609dot2_encryptedData,
3739 { "encryptedData", "ieee1609dot2.encryptedData_element",
3740 FT_NONE, BASE_NONE, NULL, 0,
3741 NULL, HFILL }},
3742 { &hf_ieee1609dot2_signedCertificateRequest,
3743 { "signedCertificateRequest", "ieee1609dot2.signedCertificateRequest",
3744 FT_BYTES, BASE_NONE, NULL, 0,
3745 "Opaque", HFILL }},
3746 { &hf_ieee1609dot2_signedX509CertificateRequest,
3747 { "signedX509CertificateRequest", "ieee1609dot2.signedX509CertificateRequest",
3748 FT_BYTES, BASE_NONE, NULL, 0,
3749 "Opaque", HFILL }},
3750 { &hf_ieee1609dot2_hashId,
3751 { "hashId", "ieee1609dot2.hashId",
3752 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashAlgorithm_vals), 0,
3753 "HashAlgorithm", HFILL }},
3754 { &hf_ieee1609dot2_tbsData_01,
3755 { "tbsData", "ieee1609dot2.tbsData_element",
3756 FT_NONE, BASE_NONE, NULL, 0,
3757 "ToBeSignedData", HFILL }},
3758 { &hf_ieee1609dot2_signer,
3759 { "signer", "ieee1609dot2.signer",
3760 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SignerIdentifier_vals), 0,
3761 "SignerIdentifier", HFILL }},
3762 { &hf_ieee1609dot2_signature,
3763 { "signature", "ieee1609dot2.signature",
3764 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Signature_vals), 0,
3765 NULL, HFILL }},
3766 { &hf_ieee1609dot2_payload_01,
3767 { "payload", "ieee1609dot2.payload_element",
3768 FT_NONE, BASE_NONE, NULL, 0,
3769 "SignedDataPayload", HFILL }},
3770 { &hf_ieee1609dot2_data_01,
3771 { "data", "ieee1609dot2.data_element",
3772 FT_NONE, BASE_NONE, NULL, 0,
3773 "Ieee1609Dot2Data", HFILL }},
3774 { &hf_ieee1609dot2_extDataHash,
3775 { "extDataHash", "ieee1609dot2.extDataHash",
3776 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashedData_vals), 0,
3777 "HashedData", HFILL }},
3778 { &hf_ieee1609dot2_omitted,
3779 { "omitted", "ieee1609dot2.omitted_element",
3780 FT_NONE, BASE_NONE, NULL, 0,
3781 NULL, HFILL }},
3782 { &hf_ieee1609dot2_sha256HashedData,
3783 { "sha256HashedData", "ieee1609dot2.sha256HashedData",
3784 FT_BYTES, BASE_NONE, NULL, 0,
3785 "HashedId32", HFILL }},
3786 { &hf_ieee1609dot2_sha384HashedData,
3787 { "sha384HashedData", "ieee1609dot2.sha384HashedData",
3788 FT_BYTES, BASE_NONE, NULL, 0,
3789 "HashedId48", HFILL }},
3790 { &hf_ieee1609dot2_sm3HashedData,
3791 { "sm3HashedData", "ieee1609dot2.sm3HashedData",
3792 FT_BYTES, BASE_NONE, NULL, 0,
3793 "HashedId32", HFILL }},
3794 { &hf_ieee1609dot2_hiPsid,
3795 { "psid", "ieee1609dot2.hiPsid",
3796 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
3797 "T_hiPsid", HFILL }},
3798 { &hf_ieee1609dot2_generationTime,
3799 { "generationTime", "ieee1609dot2.generationTime",
3800 FT_UINT64, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time64_fmt), 0,
3801 "Time64", HFILL }},
3802 { &hf_ieee1609dot2_expiryTime,
3803 { "expiryTime", "ieee1609dot2.expiryTime",
3804 FT_UINT64, BASE_CUSTOM, CF_FUNC(ieee1609dot2_Time64_fmt), 0,
3805 "Time64", HFILL }},
3806 { &hf_ieee1609dot2_generationLocation,
3807 { "generationLocation", "ieee1609dot2.generationLocation_element",
3808 FT_NONE, BASE_NONE, NULL, 0,
3809 "ThreeDLocation", HFILL }},
3810 { &hf_ieee1609dot2_p2pcdLearningRequest,
3811 { "p2pcdLearningRequest", "ieee1609dot2.p2pcdLearningRequest",
3812 FT_BYTES, BASE_NONE, NULL, 0,
3813 "HashedId3", HFILL }},
3814 { &hf_ieee1609dot2_missingCrlIdentifier,
3815 { "missingCrlIdentifier", "ieee1609dot2.missingCrlIdentifier_element",
3816 FT_NONE, BASE_NONE, NULL, 0,
3817 NULL, HFILL }},
3818 { &hf_ieee1609dot2_encryptionKey,
3819 { "encryptionKey", "ieee1609dot2.encryptionKey",
3820 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EncryptionKey_vals), 0,
3821 NULL, HFILL }},
3822 { &hf_ieee1609dot2_inlineP2pcdRequest,
3823 { "inlineP2pcdRequest", "ieee1609dot2.inlineP2pcdRequest",
3824 FT_UINT32, BASE_DEC, NULL, 0,
3825 "SequenceOfHashedId3", HFILL }},
3826 { &hf_ieee1609dot2_requestedCertificate,
3827 { "requestedCertificate", "ieee1609dot2.requestedCertificate_element",
3828 FT_NONE, BASE_NONE, NULL, 0,
3829 "Certificate", HFILL }},
3830 { &hf_ieee1609dot2_pduFunctionalType,
3831 { "pduFunctionalType", "ieee1609dot2.pduFunctionalType",
3832 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_PduFunctionalType_vals), 0,
3833 NULL, HFILL }},
3834 { &hf_ieee1609dot2_contributedExtensions,
3835 { "contributedExtensions", "ieee1609dot2.contributedExtensions",
3836 FT_UINT32, BASE_DEC, NULL, 0,
3837 "ContributedExtensionBlocks", HFILL }},
3838 { &hf_ieee1609dot2_cracaId,
3839 { "cracaId", "ieee1609dot2.cracaId",
3840 FT_BYTES, BASE_NONE, NULL, 0,
3841 "HashedId3", HFILL }},
3842 { &hf_ieee1609dot2_ContributedExtensionBlocks_item,
3843 { "ContributedExtensionBlock", "ieee1609dot2.ContributedExtensionBlock_element",
3844 FT_NONE, BASE_NONE, NULL, 0,
3845 NULL, HFILL }},
3846 { &hf_ieee1609dot2_contributorId,
3847 { "contributorId", "ieee1609dot2.contributorId",
3848 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HeaderInfoContributorId_vals), 0,
3849 "HeaderInfoContributorId", HFILL }},
3850 { &hf_ieee1609dot2_extns,
3851 { "extns", "ieee1609dot2.extns",
3852 FT_UINT32, BASE_DEC, NULL, 0,
3853 NULL, HFILL }},
3854 { &hf_ieee1609dot2_extns_item,
3855 { "extns item", "ieee1609dot2.extns_item_element",
3856 FT_NONE, BASE_NONE, NULL, 0,
3857 NULL, HFILL }},
3858 { &hf_ieee1609dot2_digest,
3859 { "digest", "ieee1609dot2.digest",
3860 FT_BYTES, BASE_NONE, NULL, 0,
3861 "HashedId8", HFILL }},
3862 { &hf_ieee1609dot2_certificate,
3863 { "certificate", "ieee1609dot2.certificate",
3864 FT_UINT32, BASE_DEC, NULL, 0,
3865 "SequenceOfCertificate", HFILL }},
3866 { &hf_ieee1609dot2_siSelf,
3867 { "self", "ieee1609dot2.siSelf_element",
3868 FT_NONE, BASE_NONE, NULL, 0,
3869 NULL, HFILL }},
3870 { &hf_ieee1609dot2_recipients,
3871 { "recipients", "ieee1609dot2.recipients",
3872 FT_UINT32, BASE_DEC, NULL, 0,
3873 "SequenceOfRecipientInfo", HFILL }},
3874 { &hf_ieee1609dot2_ciphertext,
3875 { "ciphertext", "ieee1609dot2.ciphertext",
3876 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricCiphertext_vals), 0,
3877 "SymmetricCiphertext", HFILL }},
3878 { &hf_ieee1609dot2_pskRecipInfo,
3879 { "pskRecipInfo", "ieee1609dot2.pskRecipInfo",
3880 FT_BYTES, BASE_NONE, NULL, 0,
3881 "PreSharedKeyRecipientInfo", HFILL }},
3882 { &hf_ieee1609dot2_symmRecipInfo,
3883 { "symmRecipInfo", "ieee1609dot2.symmRecipInfo_element",
3884 FT_NONE, BASE_NONE, NULL, 0,
3885 "SymmRecipientInfo", HFILL }},
3886 { &hf_ieee1609dot2_certRecipInfo,
3887 { "certRecipInfo", "ieee1609dot2.certRecipInfo_element",
3888 FT_NONE, BASE_NONE, NULL, 0,
3889 "PKRecipientInfo", HFILL }},
3890 { &hf_ieee1609dot2_signedDataRecipInfo,
3891 { "signedDataRecipInfo", "ieee1609dot2.signedDataRecipInfo_element",
3892 FT_NONE, BASE_NONE, NULL, 0,
3893 "PKRecipientInfo", HFILL }},
3894 { &hf_ieee1609dot2_rekRecipInfo,
3895 { "rekRecipInfo", "ieee1609dot2.rekRecipInfo_element",
3896 FT_NONE, BASE_NONE, NULL, 0,
3897 "PKRecipientInfo", HFILL }},
3898 { &hf_ieee1609dot2_SequenceOfRecipientInfo_item,
3899 { "RecipientInfo", "ieee1609dot2.RecipientInfo",
3900 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_RecipientInfo_vals), 0,
3901 NULL, HFILL }},
3902 { &hf_ieee1609dot2_recipientId,
3903 { "recipientId", "ieee1609dot2.recipientId",
3904 FT_BYTES, BASE_NONE, NULL, 0,
3905 "HashedId8", HFILL }},
3906 { &hf_ieee1609dot2_sriEncKey,
3907 { "encKey", "ieee1609dot2.sriEncKey",
3908 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricCiphertext_vals), 0,
3909 "SymmetricCiphertext", HFILL }},
3910 { &hf_ieee1609dot2_encKey,
3911 { "encKey", "ieee1609dot2.encKey",
3912 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EncryptedDataEncryptionKey_vals), 0,
3913 "EncryptedDataEncryptionKey", HFILL }},
3914 { &hf_ieee1609dot2_edeEciesNistP256,
3915 { "eciesNistP256", "ieee1609dot2.edeEciesNistP256_element",
3916 FT_NONE, BASE_NONE, NULL, 0,
3917 "EciesP256EncryptedKey", HFILL }},
3918 { &hf_ieee1609dot2_edekEciesBrainpoolP256r1,
3919 { "eciesBrainpoolP256r1", "ieee1609dot2.edekEciesBrainpoolP256r1_element",
3920 FT_NONE, BASE_NONE, NULL, 0,
3921 "EciesP256EncryptedKey", HFILL }},
3922 { &hf_ieee1609dot2_ecencSm2256,
3923 { "ecencSm2256", "ieee1609dot2.ecencSm2256_element",
3924 FT_NONE, BASE_NONE, NULL, 0,
3925 "EcencP256EncryptedKey", HFILL }},
3926 { &hf_ieee1609dot2_aes128ccm,
3927 { "aes128ccm", "ieee1609dot2.aes128ccm_element",
3928 FT_NONE, BASE_NONE, NULL, 0,
3929 "One28BitCcmCiphertext", HFILL }},
3930 { &hf_ieee1609dot2_sm4Ccm_01,
3931 { "sm4Ccm", "ieee1609dot2.sm4Ccm_element",
3932 FT_NONE, BASE_NONE, NULL, 0,
3933 "One28BitCcmCiphertext", HFILL }},
3934 { &hf_ieee1609dot2_nonce,
3935 { "nonce", "ieee1609dot2.nonce",
3936 FT_BYTES, BASE_NONE, NULL, 0,
3937 "OCTET_STRING_SIZE_12", HFILL }},
3938 { &hf_ieee1609dot2_ccmCiphertext,
3939 { "ccmCiphertext", "ieee1609dot2.ccmCiphertext",
3940 FT_BYTES, BASE_NONE, NULL, 0,
3941 "Opaque", HFILL }},
3942 { &hf_ieee1609dot2_SequenceOfCertificate_item,
3943 { "Certificate", "ieee1609dot2.Certificate_element",
3944 FT_NONE, BASE_NONE, NULL, 0,
3945 NULL, HFILL }},
3946 { &hf_ieee1609dot2_version_01,
3947 { "version", "ieee1609dot2.version",
3948 FT_UINT32, BASE_DEC, NULL, 0,
3949 "Uint8_3", HFILL }},
3950 { &hf_ieee1609dot2_type,
3951 { "type", "ieee1609dot2.type",
3952 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_CertificateType_vals), 0,
3953 "CertificateType", HFILL }},
3954 { &hf_ieee1609dot2_issuer,
3955 { "issuer", "ieee1609dot2.issuer",
3956 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_IssuerIdentifier_vals), 0,
3957 "IssuerIdentifier", HFILL }},
3958 { &hf_ieee1609dot2_toBeSigned,
3959 { "toBeSigned", "ieee1609dot2.toBeSigned_element",
3960 FT_NONE, BASE_NONE, NULL, 0,
3961 "ToBeSignedCertificate", HFILL }},
3962 { &hf_ieee1609dot2_sha256AndDigest,
3963 { "sha256AndDigest", "ieee1609dot2.sha256AndDigest",
3964 FT_BYTES, BASE_NONE, NULL, 0,
3965 "HashedId8", HFILL }},
3966 { &hf_ieee1609dot2_iiSelf,
3967 { "self", "ieee1609dot2.iiSelf",
3968 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashAlgorithm_vals), 0,
3969 "HashAlgorithm", HFILL }},
3970 { &hf_ieee1609dot2_sha384AndDigest,
3971 { "sha384AndDigest", "ieee1609dot2.sha384AndDigest",
3972 FT_BYTES, BASE_NONE, NULL, 0,
3973 "HashedId8", HFILL }},
3974 { &hf_ieee1609dot2_sm3AndDigest,
3975 { "sm3AndDigest", "ieee1609dot2.sm3AndDigest",
3976 FT_BYTES, BASE_NONE, NULL, 0,
3977 "HashedId8", HFILL }},
3978 { &hf_ieee1609dot2_certificateId,
3979 { "id", "ieee1609dot2.certificateId",
3980 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_CertificateId_vals), 0,
3981 "CertificateId", HFILL }},
3982 { &hf_ieee1609dot2_validityPeriod,
3983 { "validityPeriod", "ieee1609dot2.validityPeriod_element",
3984 FT_NONE, BASE_NONE, NULL, 0,
3985 NULL, HFILL }},
3986 { &hf_ieee1609dot2_region,
3987 { "region", "ieee1609dot2.region",
3988 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_GeographicRegion_vals), 0,
3989 "GeographicRegion", HFILL }},
3990 { &hf_ieee1609dot2_assuranceLevel,
3991 { "assuranceLevel", "ieee1609dot2.assuranceLevel",
3992 FT_BYTES, BASE_NONE, NULL, 0,
3993 "SubjectAssurance", HFILL }},
3994 { &hf_ieee1609dot2_appPermissions,
3995 { "appPermissions", "ieee1609dot2.appPermissions",
3996 FT_UINT32, BASE_DEC, NULL, 0,
3997 "SequenceOfPsidSsp", HFILL }},
3998 { &hf_ieee1609dot2_certIssuePermissions,
3999 { "certIssuePermissions", "ieee1609dot2.certIssuePermissions",
4000 FT_UINT32, BASE_DEC, NULL, 0,
4001 "SequenceOfPsidGroupPermissions", HFILL }},
4002 { &hf_ieee1609dot2_certRequestPermissions,
4003 { "certRequestPermissions", "ieee1609dot2.certRequestPermissions",
4004 FT_UINT32, BASE_DEC, NULL, 0,
4005 "SequenceOfPsidGroupPermissions", HFILL }},
4006 { &hf_ieee1609dot2_canRequestRollover,
4007 { "canRequestRollover", "ieee1609dot2.canRequestRollover_element",
4008 FT_NONE, BASE_NONE, NULL, 0,
4009 NULL, HFILL }},
4010 { &hf_ieee1609dot2_tbscEncryptionKey,
4011 { "encryptionKey", "ieee1609dot2.tbscEncryptionKey_element",
4012 FT_NONE, BASE_NONE, NULL, 0,
4013 "PublicEncryptionKey", HFILL }},
4014 { &hf_ieee1609dot2_verifyKeyIndicator,
4015 { "verifyKeyIndicator", "ieee1609dot2.verifyKeyIndicator",
4016 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_VerificationKeyIndicator_vals), 0,
4017 "VerificationKeyIndicator", HFILL }},
4018 { &hf_ieee1609dot2_flags,
4019 { "flags", "ieee1609dot2.flags",
4020 FT_BYTES, BASE_NONE, NULL, 0,
4021 NULL, HFILL }},
4022 { &hf_ieee1609dot2_appExtensions,
4023 { "appExtensions", "ieee1609dot2.appExtensions",
4024 FT_UINT32, BASE_DEC, NULL, 0,
4025 "SequenceOfAppExtensions", HFILL }},
4026 { &hf_ieee1609dot2_certIssueExtensions,
4027 { "certIssueExtensions", "ieee1609dot2.certIssueExtensions",
4028 FT_UINT32, BASE_DEC, NULL, 0,
4029 "SequenceOfCertIssueExtensions", HFILL }},
4030 { &hf_ieee1609dot2_certRequestExtension,
4031 { "certRequestExtension", "ieee1609dot2.certRequestExtension",
4032 FT_UINT32, BASE_DEC, NULL, 0,
4033 "SequenceOfCertRequestExtensions", HFILL }},
4034 { &hf_ieee1609dot2_linkageData,
4035 { "linkageData", "ieee1609dot2.linkageData_element",
4036 FT_NONE, BASE_NONE, NULL, 0,
4037 NULL, HFILL }},
4038 { &hf_ieee1609dot2_name,
4039 { "name", "ieee1609dot2.name",
4040 FT_STRING, BASE_NONE, NULL, 0,
4041 "Hostname", HFILL }},
4042 { &hf_ieee1609dot2_binaryId,
4043 { "binaryId", "ieee1609dot2.binaryId",
4044 FT_BYTES, BASE_NONE, NULL, 0,
4045 "OCTET_STRING_SIZE_1_64", HFILL }},
4046 { &hf_ieee1609dot2_none,
4047 { "none", "ieee1609dot2.none_element",
4048 FT_NONE, BASE_NONE, NULL, 0,
4049 NULL, HFILL }},
4050 { &hf_ieee1609dot2_iCert,
4051 { "iCert", "ieee1609dot2.iCert",
4052 FT_UINT32, BASE_DEC, NULL, 0,
4053 "IValue", HFILL }},
4054 { &hf_ieee1609dot2_linkage_value,
4055 { "linkage-value", "ieee1609dot2.linkage_value",
4056 FT_BYTES, BASE_NONE, NULL, 0,
4057 "LinkageValue", HFILL }},
4058 { &hf_ieee1609dot2_group_linkage_value,
4059 { "group-linkage-value", "ieee1609dot2.group_linkage_value_element",
4060 FT_NONE, BASE_NONE, NULL, 0,
4061 "GroupLinkageValue", HFILL }},
4062 { &hf_ieee1609dot2_subjectPermissions,
4063 { "subjectPermissions", "ieee1609dot2.subjectPermissions",
4064 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SubjectPermissions_vals), 0,
4065 NULL, HFILL }},
4066 { &hf_ieee1609dot2_minChainLength,
4067 { "minChainLength", "ieee1609dot2.minChainLength",
4068 FT_INT32, BASE_DEC, NULL, 0,
4069 "INTEGER", HFILL }},
4070 { &hf_ieee1609dot2_chainLengthRange,
4071 { "chainLengthRange", "ieee1609dot2.chainLengthRange",
4072 FT_INT32, BASE_DEC, NULL, 0,
4073 "INTEGER", HFILL }},
4074 { &hf_ieee1609dot2_eeType,
4075 { "eeType", "ieee1609dot2.eeType",
4076 FT_BYTES, BASE_NONE, NULL, 0,
4077 "EndEntityType", HFILL }},
4078 { &hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item,
4079 { "PsidGroupPermissions", "ieee1609dot2.PsidGroupPermissions_element",
4080 FT_NONE, BASE_NONE, NULL, 0,
4081 NULL, HFILL }},
4082 { &hf_ieee1609dot2_explicit,
4083 { "explicit", "ieee1609dot2.explicit",
4084 FT_UINT32, BASE_DEC, NULL, 0,
4085 "SequenceOfPsidSspRange", HFILL }},
4086 { &hf_ieee1609dot2_verificationKey,
4087 { "verificationKey", "ieee1609dot2.verificationKey",
4088 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_PublicVerificationKey_vals), 0,
4089 "PublicVerificationKey", HFILL }},
4090 { &hf_ieee1609dot2_reconstructionValue,
4091 { "reconstructionValue", "ieee1609dot2.reconstructionValue",
4092 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
4093 "EccP256CurvePoint", HFILL }},
4094 { &hf_ieee1609dot2_SequenceOfAppExtensions_item,
4095 { "AppExtension", "ieee1609dot2.AppExtension_element",
4096 FT_NONE, BASE_NONE, NULL, 0,
4097 NULL, HFILL }},
4098 { &hf_ieee1609dot2_id,
4099 { "id", "ieee1609dot2.id",
4100 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_ExtId_vals), 0,
4101 "ExtId", HFILL }},
4102 { &hf_ieee1609dot2_content_03,
4103 { "content", "ieee1609dot2.content_element",
4104 FT_NONE, BASE_NONE, NULL, 0,
4105 NULL, HFILL }},
4106 { &hf_ieee1609dot2_SequenceOfCertIssueExtensions_item,
4107 { "CertIssueExtension", "ieee1609dot2.CertIssueExtension_element",
4108 FT_NONE, BASE_NONE, NULL, 0,
4109 NULL, HFILL }},
4110 { &hf_ieee1609dot2_permissions,
4111 { "permissions", "ieee1609dot2.permissions",
4112 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_T_permissions_vals), 0,
4113 NULL, HFILL }},
4114 { &hf_ieee1609dot2_specific,
4115 { "specific", "ieee1609dot2.specific_element",
4116 FT_NONE, BASE_NONE, NULL, 0,
4117 NULL, HFILL }},
4118 { &hf_ieee1609dot2_SequenceOfCertRequestExtensions_item,
4119 { "CertRequestExtension", "ieee1609dot2.CertRequestExtension_element",
4120 FT_NONE, BASE_NONE, NULL, 0,
4121 NULL, HFILL }},
4122 { &hf_ieee1609dot2_permissions_01,
4123 { "permissions", "ieee1609dot2.permissions",
4124 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_T_permissions_01_vals), 0,
4125 "T_permissions_01", HFILL }},
4126 { &hf_ieee1609dot2_content_04,
4127 { "content", "ieee1609dot2.content_element",
4128 FT_NONE, BASE_NONE, NULL, 0,
4129 "T_content_01", HFILL }},
4130 { &hf_ieee1609dot2_T_flags_usesCubk,
4131 { "usesCubk", "ieee1609dot2.T.flags.usesCubk",
4132 FT_BOOLEAN, 8, NULL, 0x80,
4133 NULL, HFILL }},
4134 { &hf_ieee1609dot2_EndEntityType_app,
4135 { "app", "ieee1609dot2.EndEntityType.app",
4136 FT_BOOLEAN, 8, NULL, 0x80,
4137 NULL, HFILL }},
4138 { &hf_ieee1609dot2_EndEntityType_enrol,
4139 { "enrol", "ieee1609dot2.EndEntityType.enrol",
4140 FT_BOOLEAN, 8, NULL, 0x40,
4141 NULL, HFILL }},
4144 /* List of subtrees */
4145 static int *ett[] = {
4146 &ett_ieee1609dot2_SequenceOfUint8,
4147 &ett_ieee1609dot2_SequenceOfUint16,
4148 &ett_ieee1609dot2_SequenceOfHashedId3,
4149 &ett_ieee1609dot2_ValidityPeriod,
4150 &ett_ieee1609dot2_Duration,
4151 &ett_ieee1609dot2_GeographicRegion,
4152 &ett_ieee1609dot2_CircularRegion,
4153 &ett_ieee1609dot2_RectangularRegion,
4154 &ett_ieee1609dot2_SequenceOfRectangularRegion,
4155 &ett_ieee1609dot2_PolygonalRegion,
4156 &ett_ieee1609dot2_TwoDLocation,
4157 &ett_ieee1609dot2_IdentifiedRegion,
4158 &ett_ieee1609dot2_SequenceOfIdentifiedRegion,
4159 &ett_ieee1609dot2_CountryAndRegions,
4160 &ett_ieee1609dot2_CountryAndSubregions,
4161 &ett_ieee1609dot2_RegionAndSubregions,
4162 &ett_ieee1609dot2_SequenceOfRegionAndSubregions,
4163 &ett_ieee1609dot2_ThreeDLocation,
4164 &ett_ieee1609dot2_Signature,
4165 &ett_ieee1609dot2_EcdsaP256Signature,
4166 &ett_ieee1609dot2_EcdsaP384Signature,
4167 &ett_ieee1609dot2_EcsigP256Signature,
4168 &ett_ieee1609dot2_EccP256CurvePoint,
4169 &ett_ieee1609dot2_T_uncompressedP256,
4170 &ett_ieee1609dot2_EccP384CurvePoint,
4171 &ett_ieee1609dot2_T_uncompressedP384,
4172 &ett_ieee1609dot2_EciesP256EncryptedKey,
4173 &ett_ieee1609dot2_EcencP256EncryptedKey,
4174 &ett_ieee1609dot2_EncryptionKey,
4175 &ett_ieee1609dot2_PublicEncryptionKey,
4176 &ett_ieee1609dot2_BasePublicEncryptionKey,
4177 &ett_ieee1609dot2_PublicVerificationKey,
4178 &ett_ieee1609dot2_SymmetricEncryptionKey,
4179 &ett_ieee1609dot2_PsidSsp,
4180 &ett_ieee1609dot2_SequenceOfPsidSsp,
4181 &ett_ieee1609dot2_ServiceSpecificPermissions,
4182 &ett_ieee1609dot2_PsidSspRange,
4183 &ett_ieee1609dot2_SequenceOfPsidSspRange,
4184 &ett_ieee1609dot2_SspRange,
4185 &ett_ieee1609dot2_BitmapSspRange,
4186 &ett_ieee1609dot2_SequenceOfOctetString,
4187 &ett_ieee1609dot2_GroupLinkageValue,
4188 &ett_ieee1609dot2_SequenceOfLinkageSeed,
4189 &ett_ieee1609dot2_CrlContents,
4190 &ett_ieee1609dot2_CrlPriorityInfo,
4191 &ett_ieee1609dot2_TypeSpecificCrlContents,
4192 &ett_ieee1609dot2_ToBeSignedHashIdCrl,
4193 &ett_ieee1609dot2_SequenceOfHashBasedRevocationInfo,
4194 &ett_ieee1609dot2_HashBasedRevocationInfo,
4195 &ett_ieee1609dot2_ToBeSignedLinkageValueCrl,
4196 &ett_ieee1609dot2_SequenceOfJMaxGroup,
4197 &ett_ieee1609dot2_JMaxGroup,
4198 &ett_ieee1609dot2_SequenceOfLAGroup,
4199 &ett_ieee1609dot2_LAGroup,
4200 &ett_ieee1609dot2_SequenceOfIMaxGroup,
4201 &ett_ieee1609dot2_IMaxGroup,
4202 &ett_ieee1609dot2_SequenceOfIndividualRevocation,
4203 &ett_ieee1609dot2_IndividualRevocation,
4204 &ett_ieee1609dot2_SequenceOfGroupCrlEntry,
4205 &ett_ieee1609dot2_GroupCrlEntry,
4206 &ett_ieee1609dot2_ToBeSignedLinkageValueCrlWithAlgIdentifier,
4207 &ett_ieee1609dot2_SequenceOfGroupSingleSeedCrlEntry,
4208 &ett_ieee1609dot2_GroupSingleSeedCrlEntry,
4209 &ett_ieee1609dot2_SecuredCrl,
4210 &ett_ieee1609dot2_SecuredCrlContent,
4211 &ett_ieee1609dot2_CrlSignedData,
4212 &ett_ieee1609dot2_CrlToBeSignedData,
4213 &ett_ieee1609dot2_CrlSignedDataPayload,
4214 &ett_ieee1609dot2_Ieee1609Dot2CrlData,
4215 &ett_ieee1609dot2_Ieee1609Dot2CrlContent,
4216 &ett_ieee1609dot2_Ieee1609Dot2Data,
4217 &ett_ieee1609dot2_Ieee1609Dot2Content,
4218 &ett_ieee1609dot2_SignedData,
4219 &ett_ieee1609dot2_ToBeSignedData,
4220 &ett_ieee1609dot2_SignedDataPayload,
4221 &ett_ieee1609dot2_HashedData,
4222 &ett_ieee1609dot2_HeaderInfo,
4223 &ett_ieee1609dot2_MissingCrlIdentifier,
4224 &ett_ieee1609dot2_ContributedExtensionBlocks,
4225 &ett_ieee1609dot2_ContributedExtensionBlock,
4226 &ett_ieee1609dot2_T_extns,
4227 &ett_ieee1609dot2_SignerIdentifier,
4228 &ett_ieee1609dot2_EncryptedData,
4229 &ett_ieee1609dot2_RecipientInfo,
4230 &ett_ieee1609dot2_SequenceOfRecipientInfo,
4231 &ett_ieee1609dot2_SymmRecipientInfo,
4232 &ett_ieee1609dot2_PKRecipientInfo,
4233 &ett_ieee1609dot2_EncryptedDataEncryptionKey,
4234 &ett_ieee1609dot2_SymmetricCiphertext,
4235 &ett_ieee1609dot2_One28BitCcmCiphertext,
4236 &ett_ieee1609dot2_SequenceOfCertificate,
4237 &ett_ieee1609dot2_CertificateBase,
4238 &ett_ieee1609dot2_IssuerIdentifier,
4239 &ett_ieee1609dot2_ToBeSignedCertificate,
4240 &ett_ieee1609dot2_T_flags,
4241 &ett_ieee1609dot2_CertificateId,
4242 &ett_ieee1609dot2_LinkageData,
4243 &ett_ieee1609dot2_EndEntityType,
4244 &ett_ieee1609dot2_PsidGroupPermissions,
4245 &ett_ieee1609dot2_SequenceOfPsidGroupPermissions,
4246 &ett_ieee1609dot2_SubjectPermissions,
4247 &ett_ieee1609dot2_VerificationKeyIndicator,
4248 &ett_ieee1609dot2_SequenceOfAppExtensions,
4249 &ett_ieee1609dot2_AppExtension,
4250 &ett_ieee1609dot2_SequenceOfCertIssueExtensions,
4251 &ett_ieee1609dot2_CertIssueExtension,
4252 &ett_ieee1609dot2_T_permissions,
4253 &ett_ieee1609dot2_SequenceOfCertRequestExtensions,
4254 &ett_ieee1609dot2_CertRequestExtension,
4255 &ett_ieee1609dot2_T_permissions_01,
4256 &ett_ieee1609dot2_ssp,
4259 /* Register protocol */
4260 proto_ieee1609dot2 = proto_register_protocol(PNAME, PSNAME, PFNAME);
4262 /* Register fields and subtrees */
4263 proto_register_field_array(proto_ieee1609dot2, hf, array_length(hf));
4264 proto_register_subtree_array(ett, array_length(ett));
4266 proto_ieee1609dot2_handle = register_dissector("ieee1609dot2.data", dissect_Ieee1609Dot2Data_PDU, proto_ieee1609dot2);
4268 // See TS17419_ITS-AID_AssignedNumbers
4269 unsecured_data_subdissector_table = register_dissector_table("ieee1609dot2.psid",
4270 "ATS-AID/PSID based dissector for unsecured/signed data", proto_ieee1609dot2, FT_UINT32, BASE_HEX);
4271 ssp_subdissector_table = register_dissector_table("ieee1609dot2.ssp",
4272 "ATS-AID/PSID based dissector for Service Specific Permissions (SSP)", proto_ieee1609dot2, FT_UINT32, BASE_HEX);
4276 void proto_reg_handoff_ieee1609dot2(void) {
4277 dissector_add_string("media_type", "application/x-its", proto_ieee1609dot2_handle);
4278 dissector_add_string("media_type", "application/x-its-request", proto_ieee1609dot2_handle);
4279 dissector_add_string("media_type", "application/x-its-response", proto_ieee1609dot2_handle);
4281 dissector_add_uint("ieee1609dot2.psid", psid_certificate_revocation_list_application, create_dissector_handle(dissect_SecuredCrl_PDU, proto_ieee1609dot2));
4282 //dissector_add_uint_range_with_preference("udp.port", "56000,56001", proto_ieee1609dot2_handle);