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 -p ieee1609dot2 -c ./ieee1609dot2.cnf -s ./packet-ieee1609dot2-template -D . -O ../.. IEEE1609dot2BaseTypes.asn IEEE1609dot2DataTypes.asn IEEE1609dot12.asn */
6 /* Input file: packet-ieee1609dot2-template.c */
8 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
9 /* packet-IEEE1609dot2.c
10 * Routines for IEEE 1609.2
11 * Copyright 2018, Anders Broman <anders.broman@ericsson.com>
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * SPDX-License-Identifier: GPL-2.0-or-later
20 /* Also contains IEEE std 1609.12
21 * section 4.1.3 PSID allocations
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>
32 #include "packet-oer.h"
33 #include "packet-ieee1609dot2.h"
35 #define PNAME "IEEE1609dot2"
36 #define PSNAME "IEEE1609dot2"
37 #define PFNAME "ieee1609dot2"
39 void proto_register_ieee1609dot2(void);
40 void proto_reg_handoff_ieee1609dot2(void);
42 /* Initialize the protocol and registered fields */
43 int proto_ieee1609dot2 = -1;
45 /*--- Included file: packet-ieee1609dot2-hf.c ---*/
46 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-hf.c"
47 static int hf_ieee1609dot2_Ieee1609Dot2Data_PDU = -1; /* Ieee1609Dot2Data */
48 static int hf_ieee1609dot2_SequenceOfUint8_item = -1; /* Uint8 */
49 static int hf_ieee1609dot2_SequenceOfUint16_item = -1; /* Uint16 */
50 static int hf_ieee1609dot2_start = -1; /* Time32 */
51 static int hf_ieee1609dot2_duration = -1; /* Duration */
52 static int hf_ieee1609dot2_microseconds = -1; /* Uint16 */
53 static int hf_ieee1609dot2_milliseconds = -1; /* Uint16 */
54 static int hf_ieee1609dot2_seconds = -1; /* Uint16 */
55 static int hf_ieee1609dot2_minutes = -1; /* Uint16 */
56 static int hf_ieee1609dot2_hours = -1; /* Uint16 */
57 static int hf_ieee1609dot2_sixtyHours = -1; /* Uint16 */
58 static int hf_ieee1609dot2_years = -1; /* Uint16 */
59 static int hf_ieee1609dot2_circularRegion = -1; /* CircularRegion */
60 static int hf_ieee1609dot2_rectangularRegion = -1; /* SequenceOfRectangularRegion */
61 static int hf_ieee1609dot2_polygonalRegion = -1; /* PolygonalRegion */
62 static int hf_ieee1609dot2_identifiedRegion = -1; /* SequenceOfIdentifiedRegion */
63 static int hf_ieee1609dot2_center = -1; /* TwoDLocation */
64 static int hf_ieee1609dot2_radius = -1; /* Uint16 */
65 static int hf_ieee1609dot2_northWest = -1; /* TwoDLocation */
66 static int hf_ieee1609dot2_southEast = -1; /* TwoDLocation */
67 static int hf_ieee1609dot2_SequenceOfRectangularRegion_item = -1; /* RectangularRegion */
68 static int hf_ieee1609dot2_PolygonalRegion_item = -1; /* TwoDLocation */
69 static int hf_ieee1609dot2_latitude = -1; /* Latitude */
70 static int hf_ieee1609dot2_longitude = -1; /* Longitude */
71 static int hf_ieee1609dot2_countryOnly = -1; /* CountryOnly */
72 static int hf_ieee1609dot2_countryAndRegions = -1; /* CountryAndRegions */
73 static int hf_ieee1609dot2_countryAndSubregions = -1; /* CountryAndSubregions */
74 static int hf_ieee1609dot2_SequenceOfIdentifiedRegion_item = -1; /* IdentifiedRegion */
75 static int hf_ieee1609dot2_regions = -1; /* SequenceOfUint8 */
76 static int hf_ieee1609dot2_country = -1; /* CountryOnly */
77 static int hf_ieee1609dot2_regionAndSubregions = -1; /* SequenceOfRegionAndSubregions */
78 static int hf_ieee1609dot2_region = -1; /* Uint8 */
79 static int hf_ieee1609dot2_subregions = -1; /* SequenceOfUint16 */
80 static int hf_ieee1609dot2_SequenceOfRegionAndSubregions_item = -1; /* RegionAndSubregions */
81 static int hf_ieee1609dot2_elevation = -1; /* Elevation */
82 static int hf_ieee1609dot2_ecdsaNistP256Signature = -1; /* EcdsaP256Signature */
83 static int hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature = -1; /* EcdsaP256Signature */
84 static int hf_ieee1609dot2_r = -1; /* EccP256CurvePoint */
85 static int hf_ieee1609dot2_s = -1; /* OCTET_STRING_SIZE_32 */
86 static int hf_ieee1609dot2_x_only = -1; /* OCTET_STRING_SIZE_32 */
87 static int hf_ieee1609dot2_fill = -1; /* NULL */
88 static int hf_ieee1609dot2_compressed_y_0 = -1; /* OCTET_STRING_SIZE_32 */
89 static int hf_ieee1609dot2_compressed_y_1 = -1; /* OCTET_STRING_SIZE_32 */
90 static int hf_ieee1609dot2_uncompressed = -1; /* T_uncompressed */
91 static int hf_ieee1609dot2_x = -1; /* OCTET_STRING_SIZE_32 */
92 static int hf_ieee1609dot2_y = -1; /* OCTET_STRING_SIZE_32 */
93 static int hf_ieee1609dot2_v = -1; /* EccP256CurvePoint */
94 static int hf_ieee1609dot2_c = -1; /* OCTET_STRING_SIZE_16 */
95 static int hf_ieee1609dot2_t = -1; /* OCTET_STRING_SIZE_16 */
96 static int hf_ieee1609dot2_public = -1; /* PublicEncryptionKey */
97 static int hf_ieee1609dot2_symmetric = -1; /* SymmetricEncryptionKey */
98 static int hf_ieee1609dot2_supportedSymmAlg = -1; /* SymmAlgorithm */
99 static int hf_ieee1609dot2_publicKey = -1; /* BasePublicEncryptionKey */
100 static int hf_ieee1609dot2_eciesNistP256 = -1; /* EccP256CurvePoint */
101 static int hf_ieee1609dot2_eciesBrainpoolP256r1 = -1; /* EccP256CurvePoint */
102 static int hf_ieee1609dot2_ecdsaNistP256 = -1; /* EccP256CurvePoint */
103 static int hf_ieee1609dot2_ecdsaBrainpoolP256r1 = -1; /* EccP256CurvePoint */
104 static int hf_ieee1609dot2_aes128Ccm = -1; /* OCTET_STRING_SIZE_16 */
105 static int hf_ieee1609dot2_psid = -1; /* T_psid */
106 static int hf_ieee1609dot2_ssp = -1; /* ServiceSpecificPermissions */
107 static int hf_ieee1609dot2_SequenceOfPsidSsp_item = -1; /* PsidSsp */
108 static int hf_ieee1609dot2_opaque = -1; /* T_opaque */
109 static int hf_ieee1609dot2_psid_01 = -1; /* Psid */
110 static int hf_ieee1609dot2_sspRange = -1; /* SspRange */
111 static int hf_ieee1609dot2_SequenceOfPsidSspRange_item = -1; /* PsidSspRange */
112 static int hf_ieee1609dot2_opaque_01 = -1; /* SequenceOfOctetString */
113 static int hf_ieee1609dot2_all = -1; /* NULL */
114 static int hf_ieee1609dot2_SequenceOfOctetString_item = -1; /* OCTET_STRING_SIZE_0_MAX */
115 static int hf_ieee1609dot2_jValue = -1; /* OCTET_STRING_SIZE_4 */
116 static int hf_ieee1609dot2_value = -1; /* OCTET_STRING_SIZE_9 */
117 static int hf_ieee1609dot2_data = -1; /* Ieee1609Dot2Data */
118 static int hf_ieee1609dot2_extDataHash = -1; /* HashedData */
119 static int hf_ieee1609dot2_protocolVersion = -1; /* Uint8 */
120 static int hf_ieee1609dot2_content = -1; /* Ieee1609Dot2Content */
121 static int hf_ieee1609dot2_unsecuredData = -1; /* T_unsecuredData */
122 static int hf_ieee1609dot2_signedData = -1; /* SignedData */
123 static int hf_ieee1609dot2_encryptedData = -1; /* EncryptedData */
124 static int hf_ieee1609dot2_signedCertificateRequest = -1; /* Opaque */
125 static int hf_ieee1609dot2_hashId = -1; /* HashAlgorithm */
126 static int hf_ieee1609dot2_tbsData = -1; /* ToBeSignedData */
127 static int hf_ieee1609dot2_signer = -1; /* SignerIdentifier */
128 static int hf_ieee1609dot2_signature = -1; /* Signature */
129 static int hf_ieee1609dot2_digest = -1; /* HashedId8 */
130 static int hf_ieee1609dot2_certificate = -1; /* SequenceOfCertificate */
131 static int hf_ieee1609dot2_self = -1; /* NULL */
132 static int hf_ieee1609dot2_payload = -1; /* SignedDataPayload */
133 static int hf_ieee1609dot2_headerInfo = -1; /* HeaderInfo */
134 static int hf_ieee1609dot2_sha256HashedData = -1; /* OCTET_STRING_SIZE_32 */
135 static int hf_ieee1609dot2_psid_02 = -1; /* T_psid_01 */
136 static int hf_ieee1609dot2_generationTime = -1; /* Time64 */
137 static int hf_ieee1609dot2_expiryTime = -1; /* Time64 */
138 static int hf_ieee1609dot2_generationLocation = -1; /* ThreeDLocation */
139 static int hf_ieee1609dot2_p2pcdLearningRequest = -1; /* HashedId3 */
140 static int hf_ieee1609dot2_missingCrlIdentifier = -1; /* MissingCrlIdentifier */
141 static int hf_ieee1609dot2_encryptionKey = -1; /* EncryptionKey */
142 static int hf_ieee1609dot2_cracaId = -1; /* HashedId3 */
143 static int hf_ieee1609dot2_crlSeries = -1; /* CrlSeries */
144 static int hf_ieee1609dot2_recipients = -1; /* SequenceOfRecipientInfo */
145 static int hf_ieee1609dot2_ciphertext = -1; /* SymmetricCiphertext */
146 static int hf_ieee1609dot2_pskRecipInfo = -1; /* PreSharedKeyRecipientInfo */
147 static int hf_ieee1609dot2_symmRecipInfo = -1; /* SymmRecipientInfo */
148 static int hf_ieee1609dot2_certRecipInfo = -1; /* PKRecipientInfo */
149 static int hf_ieee1609dot2_signedDataRecipInfo = -1; /* PKRecipientInfo */
150 static int hf_ieee1609dot2_rekRecipInfo = -1; /* PKRecipientInfo */
151 static int hf_ieee1609dot2_SequenceOfRecipientInfo_item = -1; /* RecipientInfo */
152 static int hf_ieee1609dot2_recipientId = -1; /* HashedId8 */
153 static int hf_ieee1609dot2_encKey = -1; /* SymmetricCiphertext */
154 static int hf_ieee1609dot2_encKey_01 = -1; /* EncryptedDataEncryptionKey */
155 static int hf_ieee1609dot2_eciesNistP256_01 = -1; /* EciesP256EncryptedKey */
156 static int hf_ieee1609dot2_eciesBrainpoolP256r1_01 = -1; /* EciesP256EncryptedKey */
157 static int hf_ieee1609dot2_aes128ccm = -1; /* AesCcmCiphertext */
158 static int hf_ieee1609dot2_nonce = -1; /* OCTET_STRING_SIZE_12 */
159 static int hf_ieee1609dot2_ccmCiphertext = -1; /* Opaque */
160 static int hf_ieee1609dot2_SequenceOfCertificate_item = -1; /* Certificate */
161 static int hf_ieee1609dot2_version = -1; /* Uint8 */
162 static int hf_ieee1609dot2_type = -1; /* CertificateType */
163 static int hf_ieee1609dot2_issuer = -1; /* IssuerIdentifier */
164 static int hf_ieee1609dot2_toBeSigned = -1; /* ToBeSignedCertificate */
165 static int hf_ieee1609dot2_sha256AndDigest = -1; /* HashedId8 */
166 static int hf_ieee1609dot2_self_01 = -1; /* HashAlgorithm */
167 static int hf_ieee1609dot2_id = -1; /* CertificateId */
168 static int hf_ieee1609dot2_validityPeriod = -1; /* ValidityPeriod */
169 static int hf_ieee1609dot2_region_01 = -1; /* GeographicRegion */
170 static int hf_ieee1609dot2_assuranceLevel = -1; /* SubjectAssurance */
171 static int hf_ieee1609dot2_appPermissions = -1; /* SequenceOfPsidSsp */
172 static int hf_ieee1609dot2_certIssuePermissions = -1; /* SequenceOfPsidGroupPermissions */
173 static int hf_ieee1609dot2_certRequestPermissions = -1; /* SequenceOfPsidGroupPermissions */
174 static int hf_ieee1609dot2_canRequestRollover = -1; /* NULL */
175 static int hf_ieee1609dot2_encryptionKey_01 = -1; /* PublicEncryptionKey */
176 static int hf_ieee1609dot2_verifyKeyIndicator = -1; /* VerificationKeyIndicator */
177 static int hf_ieee1609dot2_linkageData = -1; /* LinkageData */
178 static int hf_ieee1609dot2_name = -1; /* Hostname */
179 static int hf_ieee1609dot2_binaryId = -1; /* OCTET_STRING_SIZE_1_64 */
180 static int hf_ieee1609dot2_none = -1; /* NULL */
181 static int hf_ieee1609dot2_iCert = -1; /* IValue */
182 static int hf_ieee1609dot2_linkage_value = -1; /* LinkageValue */
183 static int hf_ieee1609dot2_group_linkage_value = -1; /* GroupLinkageValue */
184 static int hf_ieee1609dot2_appPermissions_01 = -1; /* SubjectPermissions */
185 static int hf_ieee1609dot2_minChainDepth = -1; /* INTEGER */
186 static int hf_ieee1609dot2_chainDepthRange = -1; /* INTEGER */
187 static int hf_ieee1609dot2_eeType = -1; /* EndEntityType */
188 static int hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item = -1; /* PsidGroupPermissions */
189 static int hf_ieee1609dot2_explicit = -1; /* SequenceOfPsidSspRange */
190 static int hf_ieee1609dot2_verificationKey = -1; /* PublicVerificationKey */
191 static int hf_ieee1609dot2_reconstructionValue = -1; /* EccP256CurvePoint */
193 static int hf_ieee1609dot2_EndEntityType_app = -1;
194 static int hf_ieee1609dot2_EndEntityType_enrol = -1;
196 /*--- End of included file: packet-ieee1609dot2-hf.c ---*/
197 #line 37 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
199 /* Initialize the subtree pointers */
200 static int ett_ieee1609dot2_ssp = -1;
202 /*--- Included file: packet-ieee1609dot2-ett.c ---*/
203 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-ett.c"
204 static gint ett_ieee1609dot2_SequenceOfUint8 = -1;
205 static gint ett_ieee1609dot2_SequenceOfUint16 = -1;
206 static gint ett_ieee1609dot2_ValidityPeriod = -1;
207 static gint ett_ieee1609dot2_Duration = -1;
208 static gint ett_ieee1609dot2_GeographicRegion = -1;
209 static gint ett_ieee1609dot2_CircularRegion = -1;
210 static gint ett_ieee1609dot2_RectangularRegion = -1;
211 static gint ett_ieee1609dot2_SequenceOfRectangularRegion = -1;
212 static gint ett_ieee1609dot2_PolygonalRegion = -1;
213 static gint ett_ieee1609dot2_TwoDLocation = -1;
214 static gint ett_ieee1609dot2_IdentifiedRegion = -1;
215 static gint ett_ieee1609dot2_SequenceOfIdentifiedRegion = -1;
216 static gint ett_ieee1609dot2_CountryAndRegions = -1;
217 static gint ett_ieee1609dot2_CountryAndSubregions = -1;
218 static gint ett_ieee1609dot2_RegionAndSubregions = -1;
219 static gint ett_ieee1609dot2_SequenceOfRegionAndSubregions = -1;
220 static gint ett_ieee1609dot2_ThreeDLocation = -1;
221 static gint ett_ieee1609dot2_Signature = -1;
222 static gint ett_ieee1609dot2_EcdsaP256Signature = -1;
223 static gint ett_ieee1609dot2_EccP256CurvePoint = -1;
224 static gint ett_ieee1609dot2_T_uncompressed = -1;
225 static gint ett_ieee1609dot2_EciesP256EncryptedKey = -1;
226 static gint ett_ieee1609dot2_EncryptionKey = -1;
227 static gint ett_ieee1609dot2_PublicEncryptionKey = -1;
228 static gint ett_ieee1609dot2_BasePublicEncryptionKey = -1;
229 static gint ett_ieee1609dot2_PublicVerificationKey = -1;
230 static gint ett_ieee1609dot2_SymmetricEncryptionKey = -1;
231 static gint ett_ieee1609dot2_PsidSsp = -1;
232 static gint ett_ieee1609dot2_SequenceOfPsidSsp = -1;
233 static gint ett_ieee1609dot2_ServiceSpecificPermissions = -1;
234 static gint ett_ieee1609dot2_PsidSspRange = -1;
235 static gint ett_ieee1609dot2_SequenceOfPsidSspRange = -1;
236 static gint ett_ieee1609dot2_SspRange = -1;
237 static gint ett_ieee1609dot2_SequenceOfOctetString = -1;
238 static gint ett_ieee1609dot2_GroupLinkageValue = -1;
239 static gint ett_ieee1609dot2_SignedDataPayload = -1;
240 static gint ett_ieee1609dot2_Ieee1609Dot2Data = -1;
241 static gint ett_ieee1609dot2_Ieee1609Dot2Content = -1;
242 static gint ett_ieee1609dot2_SignedData = -1;
243 static gint ett_ieee1609dot2_SignerIdentifier = -1;
244 static gint ett_ieee1609dot2_ToBeSignedData = -1;
245 static gint ett_ieee1609dot2_HashedData = -1;
246 static gint ett_ieee1609dot2_HeaderInfo = -1;
247 static gint ett_ieee1609dot2_MissingCrlIdentifier = -1;
248 static gint ett_ieee1609dot2_EncryptedData = -1;
249 static gint ett_ieee1609dot2_RecipientInfo = -1;
250 static gint ett_ieee1609dot2_SequenceOfRecipientInfo = -1;
251 static gint ett_ieee1609dot2_SymmRecipientInfo = -1;
252 static gint ett_ieee1609dot2_PKRecipientInfo = -1;
253 static gint ett_ieee1609dot2_EncryptedDataEncryptionKey = -1;
254 static gint ett_ieee1609dot2_SymmetricCiphertext = -1;
255 static gint ett_ieee1609dot2_AesCcmCiphertext = -1;
256 static gint ett_ieee1609dot2_SequenceOfCertificate = -1;
257 static gint ett_ieee1609dot2_CertificateBase = -1;
258 static gint ett_ieee1609dot2_IssuerIdentifier = -1;
259 static gint ett_ieee1609dot2_ToBeSignedCertificate = -1;
260 static gint ett_ieee1609dot2_CertificateId = -1;
261 static gint ett_ieee1609dot2_LinkageData = -1;
262 static gint ett_ieee1609dot2_EndEntityType = -1;
263 static gint ett_ieee1609dot2_PsidGroupPermissions = -1;
264 static gint ett_ieee1609dot2_SequenceOfPsidGroupPermissions = -1;
265 static gint ett_ieee1609dot2_SubjectPermissions = -1;
266 static gint ett_ieee1609dot2_VerificationKeyIndicator = -1;
268 /*--- End of included file: packet-ieee1609dot2-ett.c ---*/
269 #line 41 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
271 static dissector_table_t unsecured_data_subdissector_table;
272 static dissector_table_t ssp_subdissector_table;
274 typedef struct ieee1609_private_data {
275 tvbuff_t *unsecured_data;
276 guint64 psidssp; // psid for Service Specific Permissions
277 } ieee1609_private_data_t;
280 ieee1609dot2_set_next_default_psid(packet_info *pinfo, guint32 psid)
282 guint32 *ctxt = wmem_new0(wmem_file_scope(), guint32);
284 p_add_proto_data(wmem_file_scope(), pinfo, proto_ieee1609dot2, 0, (void*)ctxt);
288 /*--- Included file: packet-ieee1609dot2-fn.c ---*/
289 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-fn.c"
290 /*--- Cyclic dependencies ---*/
292 /* SignedDataPayload -> Ieee1609Dot2Data -> Ieee1609Dot2Content -> SignedData -> ToBeSignedData -> SignedDataPayload */
293 static int dissect_ieee1609dot2_SignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
299 dissect_ieee1609dot2_Uint8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
300 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
301 0U, 255U, NULL, FALSE);
309 dissect_ieee1609dot2_Uint16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
310 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
311 0U, 65535U, NULL, FALSE);
319 dissect_ieee1609dot2_Uint32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
320 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
321 0U, 4294967295U, NULL, FALSE);
329 dissect_ieee1609dot2_Uint64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
330 offset = dissect_oer_constrained_integer_64b(tvb, offset, actx, tree, hf_index,
331 0U, G_GUINT64_CONSTANT(18446744073709551615), NULL, FALSE);
337 static const oer_sequence_t SequenceOfUint8_sequence_of[1] = {
338 { &hf_ieee1609dot2_SequenceOfUint8_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
342 dissect_ieee1609dot2_SequenceOfUint8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
343 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
344 ett_ieee1609dot2_SequenceOfUint8, SequenceOfUint8_sequence_of);
350 static const oer_sequence_t SequenceOfUint16_sequence_of[1] = {
351 { &hf_ieee1609dot2_SequenceOfUint16_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
355 dissect_ieee1609dot2_SequenceOfUint16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
356 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
357 ett_ieee1609dot2_SequenceOfUint16, SequenceOfUint16_sequence_of);
365 dissect_ieee1609dot2_Opaque(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
366 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
367 NO_BOUND, NO_BOUND, FALSE, NULL);
375 dissect_ieee1609dot2_HashedId8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
376 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
385 dissect_ieee1609dot2_HashedId3(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
386 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
395 dissect_ieee1609dot2_Time32(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
396 offset = dissect_ieee1609dot2_Uint32(tvb, offset, actx, tree, hf_index);
404 dissect_ieee1609dot2_Time64(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
405 offset = dissect_ieee1609dot2_Uint64(tvb, offset, actx, tree, hf_index);
411 static const value_string ieee1609dot2_Duration_vals[] = {
412 { 0, "microseconds" },
413 { 1, "milliseconds" },
422 static const oer_choice_t Duration_choice[] = {
423 { 0, &hf_ieee1609dot2_microseconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
424 { 1, &hf_ieee1609dot2_milliseconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
425 { 2, &hf_ieee1609dot2_seconds, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
426 { 3, &hf_ieee1609dot2_minutes, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
427 { 4, &hf_ieee1609dot2_hours , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
428 { 5, &hf_ieee1609dot2_sixtyHours, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
429 { 6, &hf_ieee1609dot2_years , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_Uint16 },
434 dissect_ieee1609dot2_Duration(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
435 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
436 ett_ieee1609dot2_Duration, Duration_choice,
443 static const oer_sequence_t ValidityPeriod_sequence[] = {
444 { &hf_ieee1609dot2_start , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Time32 },
445 { &hf_ieee1609dot2_duration, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Duration },
450 dissect_ieee1609dot2_ValidityPeriod(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
451 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
452 ett_ieee1609dot2_ValidityPeriod, ValidityPeriod_sequence);
458 static const value_string ieee1609dot2_NinetyDegreeInt_vals[] = {
459 { -900000000, "min" },
460 { 900000000, "max" },
461 { 900000001, "unknown" },
467 dissect_ieee1609dot2_NinetyDegreeInt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
468 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
469 -900000000, 900000001U, NULL, FALSE);
477 dissect_ieee1609dot2_Latitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
478 offset = dissect_ieee1609dot2_NinetyDegreeInt(tvb, offset, actx, tree, hf_index);
484 static const value_string ieee1609dot2_OneEightyDegreeInt_vals[] = {
485 { -1799999999, "min" },
486 { 1800000000, "max" },
487 { 1800000001, "unknown" },
493 dissect_ieee1609dot2_OneEightyDegreeInt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
494 offset = dissect_oer_constrained_integer(tvb, offset, actx, tree, hf_index,
495 -1799999999, 1800000001U, NULL, FALSE);
503 dissect_ieee1609dot2_Longitude(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
504 offset = dissect_ieee1609dot2_OneEightyDegreeInt(tvb, offset, actx, tree, hf_index);
510 static const oer_sequence_t TwoDLocation_sequence[] = {
511 { &hf_ieee1609dot2_latitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Latitude },
512 { &hf_ieee1609dot2_longitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Longitude },
517 dissect_ieee1609dot2_TwoDLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
518 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
519 ett_ieee1609dot2_TwoDLocation, TwoDLocation_sequence);
525 static const oer_sequence_t CircularRegion_sequence[] = {
526 { &hf_ieee1609dot2_center , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
527 { &hf_ieee1609dot2_radius , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint16 },
532 dissect_ieee1609dot2_CircularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
533 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
534 ett_ieee1609dot2_CircularRegion, CircularRegion_sequence);
540 static const oer_sequence_t RectangularRegion_sequence[] = {
541 { &hf_ieee1609dot2_northWest, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
542 { &hf_ieee1609dot2_southEast, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
547 dissect_ieee1609dot2_RectangularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
548 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
549 ett_ieee1609dot2_RectangularRegion, RectangularRegion_sequence);
555 static const oer_sequence_t SequenceOfRectangularRegion_sequence_of[1] = {
556 { &hf_ieee1609dot2_SequenceOfRectangularRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RectangularRegion },
560 dissect_ieee1609dot2_SequenceOfRectangularRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
561 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
562 ett_ieee1609dot2_SequenceOfRectangularRegion, SequenceOfRectangularRegion_sequence_of);
568 static const oer_sequence_t PolygonalRegion_sequence_of[1] = {
569 { &hf_ieee1609dot2_PolygonalRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_TwoDLocation },
573 dissect_ieee1609dot2_PolygonalRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
574 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
575 ett_ieee1609dot2_PolygonalRegion, PolygonalRegion_sequence_of,
584 dissect_ieee1609dot2_CountryOnly(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
585 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
591 static const oer_sequence_t CountryAndRegions_sequence[] = {
592 { &hf_ieee1609dot2_countryOnly, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CountryOnly },
593 { &hf_ieee1609dot2_regions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfUint8 },
598 dissect_ieee1609dot2_CountryAndRegions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
599 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
600 ett_ieee1609dot2_CountryAndRegions, CountryAndRegions_sequence);
606 static const oer_sequence_t RegionAndSubregions_sequence[] = {
607 { &hf_ieee1609dot2_region , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
608 { &hf_ieee1609dot2_subregions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfUint16 },
613 dissect_ieee1609dot2_RegionAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
614 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
615 ett_ieee1609dot2_RegionAndSubregions, RegionAndSubregions_sequence);
621 static const oer_sequence_t SequenceOfRegionAndSubregions_sequence_of[1] = {
622 { &hf_ieee1609dot2_SequenceOfRegionAndSubregions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RegionAndSubregions },
626 dissect_ieee1609dot2_SequenceOfRegionAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
627 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
628 ett_ieee1609dot2_SequenceOfRegionAndSubregions, SequenceOfRegionAndSubregions_sequence_of);
634 static const oer_sequence_t CountryAndSubregions_sequence[] = {
635 { &hf_ieee1609dot2_country, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CountryOnly },
636 { &hf_ieee1609dot2_regionAndSubregions, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfRegionAndSubregions },
641 dissect_ieee1609dot2_CountryAndSubregions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
642 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
643 ett_ieee1609dot2_CountryAndSubregions, CountryAndSubregions_sequence);
649 static const value_string ieee1609dot2_IdentifiedRegion_vals[] = {
650 { 0, "countryOnly" },
651 { 1, "countryAndRegions" },
652 { 2, "countryAndSubregions" },
656 static const oer_choice_t IdentifiedRegion_choice[] = {
657 { 0, &hf_ieee1609dot2_countryOnly, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CountryOnly },
658 { 1, &hf_ieee1609dot2_countryAndRegions, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CountryAndRegions },
659 { 2, &hf_ieee1609dot2_countryAndSubregions, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CountryAndSubregions },
664 dissect_ieee1609dot2_IdentifiedRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
665 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
666 ett_ieee1609dot2_IdentifiedRegion, IdentifiedRegion_choice,
673 static const oer_sequence_t SequenceOfIdentifiedRegion_sequence_of[1] = {
674 { &hf_ieee1609dot2_SequenceOfIdentifiedRegion_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IdentifiedRegion },
678 dissect_ieee1609dot2_SequenceOfIdentifiedRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
679 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
680 ett_ieee1609dot2_SequenceOfIdentifiedRegion, SequenceOfIdentifiedRegion_sequence_of);
686 static const value_string ieee1609dot2_GeographicRegion_vals[] = {
687 { 0, "circularRegion" },
688 { 1, "rectangularRegion" },
689 { 2, "polygonalRegion" },
690 { 3, "identifiedRegion" },
694 static const oer_choice_t GeographicRegion_choice[] = {
695 { 0, &hf_ieee1609dot2_circularRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_CircularRegion },
696 { 1, &hf_ieee1609dot2_rectangularRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfRectangularRegion },
697 { 2, &hf_ieee1609dot2_polygonalRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_PolygonalRegion },
698 { 3, &hf_ieee1609dot2_identifiedRegion, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfIdentifiedRegion },
703 dissect_ieee1609dot2_GeographicRegion(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
704 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
705 ett_ieee1609dot2_GeographicRegion, GeographicRegion_choice,
714 dissect_ieee1609dot2_ElevInt(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
715 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
723 dissect_ieee1609dot2_Elevation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
724 offset = dissect_ieee1609dot2_ElevInt(tvb, offset, actx, tree, hf_index);
730 static const oer_sequence_t ThreeDLocation_sequence[] = {
731 { &hf_ieee1609dot2_latitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Latitude },
732 { &hf_ieee1609dot2_longitude, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Longitude },
733 { &hf_ieee1609dot2_elevation, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Elevation },
738 dissect_ieee1609dot2_ThreeDLocation(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
739 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
740 ett_ieee1609dot2_ThreeDLocation, ThreeDLocation_sequence);
748 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_) {
749 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
750 32, 32, FALSE, NULL);
758 dissect_ieee1609dot2_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
759 offset = dissect_oer_null(tvb, offset, actx, tree, hf_index);
765 static const oer_sequence_t T_uncompressed_sequence[] = {
766 { &hf_ieee1609dot2_x , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
767 { &hf_ieee1609dot2_y , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
772 dissect_ieee1609dot2_T_uncompressed(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
773 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
774 ett_ieee1609dot2_T_uncompressed, T_uncompressed_sequence);
780 static const value_string ieee1609dot2_EccP256CurvePoint_vals[] = {
783 { 2, "compressed-y-0" },
784 { 3, "compressed-y-1" },
785 { 4, "uncompressed" },
789 static const oer_choice_t EccP256CurvePoint_choice[] = {
790 { 0, &hf_ieee1609dot2_x_only , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
791 { 1, &hf_ieee1609dot2_fill , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_NULL },
792 { 2, &hf_ieee1609dot2_compressed_y_0, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
793 { 3, &hf_ieee1609dot2_compressed_y_1, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
794 { 4, &hf_ieee1609dot2_uncompressed, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_T_uncompressed },
799 dissect_ieee1609dot2_EccP256CurvePoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
800 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
801 ett_ieee1609dot2_EccP256CurvePoint, EccP256CurvePoint_choice,
808 static const oer_sequence_t EcdsaP256Signature_sequence[] = {
809 { &hf_ieee1609dot2_r , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP256CurvePoint },
810 { &hf_ieee1609dot2_s , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
815 dissect_ieee1609dot2_EcdsaP256Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
816 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
817 ett_ieee1609dot2_EcdsaP256Signature, EcdsaP256Signature_sequence);
823 static const value_string ieee1609dot2_Signature_vals[] = {
824 { 0, "ecdsaNistP256Signature" },
825 { 1, "ecdsaBrainpoolP256r1Signature" },
829 static const oer_choice_t Signature_choice[] = {
830 { 0, &hf_ieee1609dot2_ecdsaNistP256Signature, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EcdsaP256Signature },
831 { 1, &hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EcdsaP256Signature },
836 dissect_ieee1609dot2_Signature(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
837 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
838 ett_ieee1609dot2_Signature, Signature_choice,
845 static const value_string ieee1609dot2_SymmAlgorithm_vals[] = {
852 dissect_ieee1609dot2_SymmAlgorithm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
853 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
854 1, NULL, TRUE, 0, NULL);
860 static const value_string ieee1609dot2_HashAlgorithm_vals[] = {
867 dissect_ieee1609dot2_HashAlgorithm(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
868 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
869 1, NULL, TRUE, 0, NULL);
877 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_) {
878 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
879 16, 16, FALSE, NULL);
885 static const oer_sequence_t EciesP256EncryptedKey_sequence[] = {
886 { &hf_ieee1609dot2_v , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EccP256CurvePoint },
887 { &hf_ieee1609dot2_c , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
888 { &hf_ieee1609dot2_t , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
893 dissect_ieee1609dot2_EciesP256EncryptedKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
894 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
895 ett_ieee1609dot2_EciesP256EncryptedKey, EciesP256EncryptedKey_sequence);
901 static const value_string ieee1609dot2_BasePublicEncryptionKey_vals[] = {
902 { 0, "eciesNistP256" },
903 { 1, "eciesBrainpoolP256r1" },
907 static const oer_choice_t BasePublicEncryptionKey_choice[] = {
908 { 0, &hf_ieee1609dot2_eciesNistP256, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
909 { 1, &hf_ieee1609dot2_eciesBrainpoolP256r1, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
914 dissect_ieee1609dot2_BasePublicEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
915 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
916 ett_ieee1609dot2_BasePublicEncryptionKey, BasePublicEncryptionKey_choice,
923 static const oer_sequence_t PublicEncryptionKey_sequence[] = {
924 { &hf_ieee1609dot2_supportedSymmAlg, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmAlgorithm },
925 { &hf_ieee1609dot2_publicKey, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_BasePublicEncryptionKey },
930 dissect_ieee1609dot2_PublicEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
931 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
932 ett_ieee1609dot2_PublicEncryptionKey, PublicEncryptionKey_sequence);
938 static const value_string ieee1609dot2_SymmetricEncryptionKey_vals[] = {
943 static const oer_choice_t SymmetricEncryptionKey_choice[] = {
944 { 0, &hf_ieee1609dot2_aes128Ccm, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_OCTET_STRING_SIZE_16 },
949 dissect_ieee1609dot2_SymmetricEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
950 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
951 ett_ieee1609dot2_SymmetricEncryptionKey, SymmetricEncryptionKey_choice,
958 static const value_string ieee1609dot2_EncryptionKey_vals[] = {
964 static const oer_choice_t EncryptionKey_choice[] = {
965 { 0, &hf_ieee1609dot2_public , ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PublicEncryptionKey },
966 { 1, &hf_ieee1609dot2_symmetric, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_SymmetricEncryptionKey },
971 dissect_ieee1609dot2_EncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
972 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
973 ett_ieee1609dot2_EncryptionKey, EncryptionKey_choice,
980 static const value_string ieee1609dot2_PublicVerificationKey_vals[] = {
981 { 0, "ecdsaNistP256" },
982 { 1, "ecdsaBrainpoolP256r1" },
986 static const oer_choice_t PublicVerificationKey_choice[] = {
987 { 0, &hf_ieee1609dot2_ecdsaNistP256, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
988 { 1, &hf_ieee1609dot2_ecdsaBrainpoolP256r1, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
993 dissect_ieee1609dot2_PublicVerificationKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
994 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
995 ett_ieee1609dot2_PublicVerificationKey, PublicVerificationKey_choice,
1002 const val64_string ieee1609dot2_Psid_vals[] = {
1003 { psid_system, "psid-system" },
1004 { psid_electronic_fee_collection, "psid-electronic-fee-collection" },
1005 { psid_freight_fleet_management, "psid-freight-fleet-management" },
1006 { psid_public_transport, "psid-public-transport" },
1007 { psid_traffic_traveller_information, "psid-traffic-traveller-information" },
1008 { psid_traffic_control, "psid-traffic-control" },
1009 { psid_parking_management, "psid-parking-management" },
1010 { psid_geographic_road_database, "psid-geographic-road-database" },
1011 { psid_medium_range_preinformation, "psid-medium-range-preinformation" },
1012 { psid_man_machine_interface, "psid-man-machine-interface" },
1013 { psid_intersystem_interface, "psid-intersystem-interface" },
1014 { psid_automatic_vehicle_identification, "psid-automatic-vehicle-identification" },
1015 { psid_emergency_warning, "psid-emergency-warning" },
1016 { psid_private, "psid-private" },
1017 { psid_multi_purpose_payment, "psid-multi-purpose-payment" },
1018 { psid_dsrc_resource_manager, "psid-dsrc-resource-manager" },
1019 { psid_after_theft_systems, "psid-after-theft-systems" },
1020 { psid_cruise_assist_highway_system, "psid-cruise-assist-highway-system" },
1021 { psid_multi_purpose_information_system, "psid-multi-purpose-information-system" },
1022 { psid_multi_mobile_information_system, "psid-multi-mobile-information-system" },
1023 { psid_efc_compliance_check_communication_applications, "psid-efc-compliance-check-communication-applications" },
1024 { psid_efc_localisation_augmentation_communication_applications, "psid-efc-localisation-augmentation-communication-applications" },
1025 { psid_iso_cen_dsrc_applications_0x16, "psid-iso-cen-dsrc-applications-0x16" },
1026 { psid_iso_cen_dsrc_applications_0x17, "psid-iso-cen-dsrc-applications-0x17" },
1027 { psid_iso_cen_dsrc_applications_0x18, "psid-iso-cen-dsrc-applications-0x18" },
1028 { psid_iso_cen_dsrc_applications_0x19, "psid-iso-cen-dsrc-applications-0x19" },
1029 { psid_iso_cen_dsrc_applications_0x1a, "psid-iso-cen-dsrc-applications-0x1a" },
1030 { psid_iso_cen_dsrc_applications_0x1b, "psid-iso-cen-dsrc-applications-0x1b" },
1031 { psid_iso_cen_dsrc_applications_0x1c, "psid-iso-cen-dsrc-applications-0x1c" },
1032 { psid_private_use_0x1d, "psid-private-use-0x1d" },
1033 { psid_private_use_0x1e, "psid-private-use-0x1e" },
1034 { psid_iso_cen_dsrc_applications_0x1f, "psid-iso-cen-dsrc-applications-0x1f" },
1035 { psid_vehicle_to_vehicle_safety_and_awarenesss, "psid-vehicle-to-vehicle-safety-and-awarenesss" },
1036 { psid_limited_sensor_vehicle_to_vehicle_safety_and_awarenesss, "psid-limited-sensor-vehicle-to-vehicle-safety-and-awarenesss" },
1037 { psid_tracked_vehicle_safety_and_awarenesss, "psid-tracked-vehicle-safety-and-awarenesss" },
1038 { psid_wave_security_managements, "psid-wave-security-managements" },
1039 { psid_ca_basic_services, "psid-ca-basic-services" },
1040 { psid_den_basic_services, "psid-den-basic-services" },
1041 { psid_misbehavior_reporting_for_common_applications, "psid-misbehavior-reporting-for-common-applications" },
1042 { psid_vulnerable_road_users_safety_applications, "psid-vulnerable-road-users-safety-applications" },
1043 { psid_testings, "psid-testings" },
1044 { psid_differential_gps_corrections_uncompressed, "psid-differential-gps-corrections-uncompressed" },
1045 { psid_differential_gps_corrections_compressed, "psid-differential-gps-corrections-compressed" },
1046 { psid_intersection_safety_and_awareness, "psid-intersection-safety-and-awareness" },
1047 { psid_traveller_information_and_roadside_signage, "psid-traveller-information-and-roadside-signage" },
1048 { psid_mobile_probe_exchanges, "psid-mobile-probe-exchanges" },
1049 { psid_emergency_and_erratic_vehicles_present_in_roadway, "psid-emergency-and-erratic-vehicles-present-in-roadway" },
1050 { psid_remote_management_protocol_execution, "psid-remote-management-protocol-execution" },
1051 { psid_wave_service_advertisement, "psid-wave-service-advertisement" },
1052 { psid_peer_to_peer_distribution_of_security_management_information, "psid-peer-to-peer-distribution-of-security-management-information" },
1053 { psid_traffic_light_manoeuver_service, "psid-traffic-light-manoeuver-service" },
1054 { psid_road_and_lane_topology_service, "psid-road-and-lane-topology-service" },
1055 { psid_infrastructure_to_vehicle_information_service, "psid-infrastructure-to-vehicle-information-service" },
1056 { psid_traffic_light_control_service, "psid-traffic-light-control-service" },
1057 { psid_geonetworking_management_communications, "psid-geonetworking-management-communications" },
1058 { psid_certificate_revocation_list_application, "psid-certificate-revocation-list-application" },
1059 { psid_vehicle_initiated_distress_notivication, "psid-vehicle-initiated-distress-notivication" },
1060 { psid_fast_service_advertisement_protocol, "psid-fast-service-advertisement-protocol" },
1061 { psid_its_station_internal_management_communications_protocol, "psid-its-station-internal-management-communications-protocol" },
1062 { psid_veniam_delay_tolerant_networking, "psid-veniam-delay-tolerant-networking" },
1063 { psid_transcore_software_update, "psid-transcore-software-update" },
1064 { psid_sra_private_applications_0x204084, "psid-sra-private-applications-0x204084" },
1065 { psid_sra_private_applications_0x204085, "psid-sra-private-applications-0x204085" },
1066 { psid_sra_private_applications_0x204086, "psid-sra-private-applications-0x204086" },
1067 { psid_sra_private_applications_0x204087, "psid-sra-private-applications-0x204087" },
1068 { psid_ipv6_routing, "psid-ipv6-routing" },
1074 dissect_ieee1609dot2_Psid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1075 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
1076 0U, NO_BOUND, NULL, FALSE);
1084 dissect_ieee1609dot2_T_psid(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1085 #line 84 "./asn1/ieee1609dot2/ieee1609dot2.cnf"
1086 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
1087 0U, NO_BOUND, &((ieee1609_private_data_t*)actx->private_data)->psidssp, FALSE);
1097 dissect_ieee1609dot2_T_opaque(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1098 #line 88 "./asn1/ieee1609dot2/ieee1609dot2.cnf"
1100 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
1102 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1103 0, NO_BOUND, FALSE, &ssp);
1106 proto_tree *subtree = proto_item_add_subtree(actx->created_item, ett_ieee1609dot2_ssp);
1107 /* Call next dissector here */
1108 dissector_try_uint(ssp_subdissector_table, (guint32) my_private_data->psidssp, ssp, actx->pinfo, subtree);
1116 static const value_string ieee1609dot2_ServiceSpecificPermissions_vals[] = {
1121 static const oer_choice_t ServiceSpecificPermissions_choice[] = {
1122 { 0, &hf_ieee1609dot2_opaque , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_T_opaque },
1123 { 0, NULL, 0, NULL }
1127 dissect_ieee1609dot2_ServiceSpecificPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1128 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1129 ett_ieee1609dot2_ServiceSpecificPermissions, ServiceSpecificPermissions_choice,
1136 static const oer_sequence_t PsidSsp_sequence[] = {
1137 { &hf_ieee1609dot2_psid , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_psid },
1138 { &hf_ieee1609dot2_ssp , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_ServiceSpecificPermissions },
1139 { NULL, 0, 0, NULL }
1143 dissect_ieee1609dot2_PsidSsp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1144 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1145 ett_ieee1609dot2_PsidSsp, PsidSsp_sequence);
1151 static const oer_sequence_t SequenceOfPsidSsp_sequence_of[1] = {
1152 { &hf_ieee1609dot2_SequenceOfPsidSsp_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidSsp },
1156 dissect_ieee1609dot2_SequenceOfPsidSsp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1157 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1158 ett_ieee1609dot2_SequenceOfPsidSsp, SequenceOfPsidSsp_sequence_of);
1166 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_) {
1167 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1168 0, NO_BOUND, FALSE, NULL);
1174 static const oer_sequence_t SequenceOfOctetString_sequence_of[1] = {
1175 { &hf_ieee1609dot2_SequenceOfOctetString_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_0_MAX },
1179 dissect_ieee1609dot2_SequenceOfOctetString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1180 offset = dissect_oer_constrained_sequence_of(tvb, offset, actx, tree, hf_index,
1181 ett_ieee1609dot2_SequenceOfOctetString, SequenceOfOctetString_sequence_of,
1182 0, NO_BOUND, FALSE);
1188 static const value_string ieee1609dot2_SspRange_vals[] = {
1194 static const oer_choice_t SspRange_choice[] = {
1195 { 0, &hf_ieee1609dot2_opaque_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfOctetString },
1196 { 1, &hf_ieee1609dot2_all , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
1197 { 0, NULL, 0, NULL }
1201 dissect_ieee1609dot2_SspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1202 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1203 ett_ieee1609dot2_SspRange, SspRange_choice,
1210 static const oer_sequence_t PsidSspRange_sequence[] = {
1211 { &hf_ieee1609dot2_psid_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Psid },
1212 { &hf_ieee1609dot2_sspRange, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_SspRange },
1213 { NULL, 0, 0, NULL }
1217 dissect_ieee1609dot2_PsidSspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1218 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1219 ett_ieee1609dot2_PsidSspRange, PsidSspRange_sequence);
1225 static const oer_sequence_t SequenceOfPsidSspRange_sequence_of[1] = {
1226 { &hf_ieee1609dot2_SequenceOfPsidSspRange_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidSspRange },
1230 dissect_ieee1609dot2_SequenceOfPsidSspRange(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1231 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1232 ett_ieee1609dot2_SequenceOfPsidSspRange, SequenceOfPsidSspRange_sequence_of);
1240 dissect_ieee1609dot2_SubjectAssurance(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1241 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1250 dissect_ieee1609dot2_CrlSeries(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1251 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
1259 dissect_ieee1609dot2_IValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1260 offset = dissect_ieee1609dot2_Uint16(tvb, offset, actx, tree, hf_index);
1268 dissect_ieee1609dot2_Hostname(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1269 offset = dissect_oer_UTF8String(tvb, offset, actx, tree, hf_index,
1278 dissect_ieee1609dot2_LinkageValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1279 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1288 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_) {
1289 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1298 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_) {
1299 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1306 static const oer_sequence_t GroupLinkageValue_sequence[] = {
1307 { &hf_ieee1609dot2_jValue , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_4 },
1308 { &hf_ieee1609dot2_value , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_9 },
1309 { NULL, 0, 0, NULL }
1313 dissect_ieee1609dot2_GroupLinkageValue(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1314 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1315 ett_ieee1609dot2_GroupLinkageValue, GroupLinkageValue_sequence);
1323 dissect_ieee1609dot2_T_unsecuredData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1324 #line 51 "./asn1/ieee1609dot2/ieee1609dot2.cnf"
1325 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
1327 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1328 NO_BOUND, NO_BOUND, FALSE, &my_private_data->unsecured_data);
1330 if (my_private_data->unsecured_data) {
1331 // psid may also be provided in HeaderInfo
1332 guint32 *psid = (guint32*)p_get_proto_data(wmem_file_scope(), actx->pinfo, proto_ieee1609dot2, 0);
1334 /* Call next dissector here */
1335 dissector_try_uint(unsecured_data_subdissector_table, *psid, my_private_data->unsecured_data, actx->pinfo, tree);
1336 my_private_data->unsecured_data = NULL;
1338 // else: wait for the HeaderInfo for a second chance to dissect the content
1349 dissect_ieee1609dot2_T_psid_01(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1350 #line 70 "./asn1/ieee1609dot2/ieee1609dot2.cnf"
1352 ieee1609_private_data_t *my_private_data = (ieee1609_private_data_t*)actx->private_data;
1354 offset = dissect_oer_constrained_integer_64b_no_ub(tvb, offset, actx, tree, hf_index,
1355 0U, NO_BOUND, &psid, FALSE);
1356 if (my_private_data->unsecured_data) {
1357 /* Call next dissector here */
1358 dissector_try_uint(unsecured_data_subdissector_table, (guint32) psid, my_private_data->unsecured_data, actx->pinfo, tree);
1359 my_private_data->unsecured_data = NULL;
1368 static const oer_sequence_t MissingCrlIdentifier_sequence[] = {
1369 { &hf_ieee1609dot2_cracaId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId3 },
1370 { &hf_ieee1609dot2_crlSeries, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSeries },
1371 { NULL, 0, 0, NULL }
1375 dissect_ieee1609dot2_MissingCrlIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1376 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1377 ett_ieee1609dot2_MissingCrlIdentifier, MissingCrlIdentifier_sequence);
1383 static const oer_sequence_t HeaderInfo_sequence[] = {
1384 { &hf_ieee1609dot2_psid_02, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_T_psid_01 },
1385 { &hf_ieee1609dot2_generationTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Time64 },
1386 { &hf_ieee1609dot2_expiryTime, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Time64 },
1387 { &hf_ieee1609dot2_generationLocation, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_ThreeDLocation },
1388 { &hf_ieee1609dot2_p2pcdLearningRequest, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_HashedId3 },
1389 { &hf_ieee1609dot2_missingCrlIdentifier, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_MissingCrlIdentifier },
1390 { &hf_ieee1609dot2_encryptionKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_EncryptionKey },
1391 { NULL, 0, 0, NULL }
1395 dissect_ieee1609dot2_HeaderInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1396 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1397 ett_ieee1609dot2_HeaderInfo, HeaderInfo_sequence);
1403 static const oer_sequence_t ToBeSignedData_sequence[] = {
1404 { &hf_ieee1609dot2_payload, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SignedDataPayload },
1405 { &hf_ieee1609dot2_headerInfo, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HeaderInfo },
1406 { NULL, 0, 0, NULL }
1410 dissect_ieee1609dot2_ToBeSignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1411 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1412 ett_ieee1609dot2_ToBeSignedData, ToBeSignedData_sequence);
1418 static const value_string ieee1609dot2_CertificateType_vals[] = {
1426 dissect_ieee1609dot2_CertificateType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1427 offset = dissect_oer_enumerated(tvb, offset, actx, tree, hf_index,
1428 2, NULL, TRUE, 0, NULL);
1434 static const value_string ieee1609dot2_IssuerIdentifier_vals[] = {
1435 { 0, "sha256AndDigest" },
1440 static const oer_choice_t IssuerIdentifier_choice[] = {
1441 { 0, &hf_ieee1609dot2_sha256AndDigest, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashedId8 },
1442 { 1, &hf_ieee1609dot2_self_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashAlgorithm },
1443 { 0, NULL, 0, NULL }
1447 dissect_ieee1609dot2_IssuerIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1448 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1449 ett_ieee1609dot2_IssuerIdentifier, IssuerIdentifier_choice,
1456 static const oer_sequence_t LinkageData_sequence[] = {
1457 { &hf_ieee1609dot2_iCert , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IValue },
1458 { &hf_ieee1609dot2_linkage_value, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_LinkageValue },
1459 { &hf_ieee1609dot2_group_linkage_value, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_GroupLinkageValue },
1460 { NULL, 0, 0, NULL }
1464 dissect_ieee1609dot2_LinkageData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1465 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1466 ett_ieee1609dot2_LinkageData, LinkageData_sequence);
1474 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_) {
1475 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1476 1, 64, FALSE, NULL);
1482 static const value_string ieee1609dot2_CertificateId_vals[] = {
1483 { 0, "linkageData" },
1490 static const oer_choice_t CertificateId_choice[] = {
1491 { 0, &hf_ieee1609dot2_linkageData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_LinkageData },
1492 { 1, &hf_ieee1609dot2_name , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_Hostname },
1493 { 2, &hf_ieee1609dot2_binaryId, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_OCTET_STRING_SIZE_1_64 },
1494 { 3, &hf_ieee1609dot2_none , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
1495 { 0, NULL, 0, NULL }
1499 dissect_ieee1609dot2_CertificateId(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1500 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1501 ett_ieee1609dot2_CertificateId, CertificateId_choice,
1508 static const value_string ieee1609dot2_SubjectPermissions_vals[] = {
1514 static const oer_choice_t SubjectPermissions_choice[] = {
1515 { 0, &hf_ieee1609dot2_explicit, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfPsidSspRange },
1516 { 1, &hf_ieee1609dot2_all , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
1517 { 0, NULL, 0, NULL }
1521 dissect_ieee1609dot2_SubjectPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1522 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1523 ett_ieee1609dot2_SubjectPermissions, SubjectPermissions_choice,
1532 dissect_ieee1609dot2_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1533 offset = dissect_oer_integer(tvb, offset, actx, tree, hf_index, NULL);
1541 dissect_ieee1609dot2_EndEntityType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1542 offset = dissect_oer_bit_string(tvb, offset, actx, tree, hf_index,
1543 8, 8, FALSE, NULL, NULL);
1549 static const oer_sequence_t PsidGroupPermissions_sequence[] = {
1550 { &hf_ieee1609dot2_appPermissions_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SubjectPermissions },
1551 { &hf_ieee1609dot2_minChainDepth, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_INTEGER },
1552 { &hf_ieee1609dot2_chainDepthRange, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_INTEGER },
1553 { &hf_ieee1609dot2_eeType , ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_EndEntityType },
1554 { NULL, 0, 0, NULL }
1558 dissect_ieee1609dot2_PsidGroupPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1559 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1560 ett_ieee1609dot2_PsidGroupPermissions, PsidGroupPermissions_sequence);
1566 static const oer_sequence_t SequenceOfPsidGroupPermissions_sequence_of[1] = {
1567 { &hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_PsidGroupPermissions },
1571 dissect_ieee1609dot2_SequenceOfPsidGroupPermissions(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1572 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1573 ett_ieee1609dot2_SequenceOfPsidGroupPermissions, SequenceOfPsidGroupPermissions_sequence_of);
1579 static const value_string ieee1609dot2_VerificationKeyIndicator_vals[] = {
1580 { 0, "verificationKey" },
1581 { 1, "reconstructionValue" },
1585 static const oer_choice_t VerificationKeyIndicator_choice[] = {
1586 { 0, &hf_ieee1609dot2_verificationKey, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_PublicVerificationKey },
1587 { 1, &hf_ieee1609dot2_reconstructionValue, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EccP256CurvePoint },
1588 { 0, NULL, 0, NULL }
1592 dissect_ieee1609dot2_VerificationKeyIndicator(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1593 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1594 ett_ieee1609dot2_VerificationKeyIndicator, VerificationKeyIndicator_choice,
1601 static const oer_sequence_t ToBeSignedCertificate_sequence[] = {
1602 { &hf_ieee1609dot2_id , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertificateId },
1603 { &hf_ieee1609dot2_cracaId, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId3 },
1604 { &hf_ieee1609dot2_crlSeries, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CrlSeries },
1605 { &hf_ieee1609dot2_validityPeriod, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ValidityPeriod },
1606 { &hf_ieee1609dot2_region_01, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_GeographicRegion },
1607 { &hf_ieee1609dot2_assuranceLevel, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SubjectAssurance },
1608 { &hf_ieee1609dot2_appPermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidSsp },
1609 { &hf_ieee1609dot2_certIssuePermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidGroupPermissions },
1610 { &hf_ieee1609dot2_certRequestPermissions, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_SequenceOfPsidGroupPermissions },
1611 { &hf_ieee1609dot2_canRequestRollover, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_NULL },
1612 { &hf_ieee1609dot2_encryptionKey_01, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_PublicEncryptionKey },
1613 { &hf_ieee1609dot2_verifyKeyIndicator, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_VerificationKeyIndicator },
1614 { NULL, 0, 0, NULL }
1618 dissect_ieee1609dot2_ToBeSignedCertificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1619 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1620 ett_ieee1609dot2_ToBeSignedCertificate, ToBeSignedCertificate_sequence);
1626 static const oer_sequence_t CertificateBase_sequence[] = {
1627 { &hf_ieee1609dot2_version, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
1628 { &hf_ieee1609dot2_type , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_CertificateType },
1629 { &hf_ieee1609dot2_issuer , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_IssuerIdentifier },
1630 { &hf_ieee1609dot2_toBeSigned, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ToBeSignedCertificate },
1631 { &hf_ieee1609dot2_signature, ASN1_NO_EXTENSIONS , ASN1_OPTIONAL , dissect_ieee1609dot2_Signature },
1632 { NULL, 0, 0, NULL }
1636 dissect_ieee1609dot2_CertificateBase(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1637 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1638 ett_ieee1609dot2_CertificateBase, CertificateBase_sequence);
1646 dissect_ieee1609dot2_Certificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1647 offset = dissect_ieee1609dot2_CertificateBase(tvb, offset, actx, tree, hf_index);
1653 static const oer_sequence_t SequenceOfCertificate_sequence_of[1] = {
1654 { &hf_ieee1609dot2_SequenceOfCertificate_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Certificate },
1658 dissect_ieee1609dot2_SequenceOfCertificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1659 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1660 ett_ieee1609dot2_SequenceOfCertificate, SequenceOfCertificate_sequence_of);
1666 static const value_string ieee1609dot2_SignerIdentifier_vals[] = {
1668 { 1, "certificate" },
1673 static const oer_choice_t SignerIdentifier_choice[] = {
1674 { 0, &hf_ieee1609dot2_digest , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_HashedId8 },
1675 { 1, &hf_ieee1609dot2_certificate, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SequenceOfCertificate },
1676 { 2, &hf_ieee1609dot2_self , ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_NULL },
1677 { 0, NULL, 0, NULL }
1681 dissect_ieee1609dot2_SignerIdentifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1682 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1683 ett_ieee1609dot2_SignerIdentifier, SignerIdentifier_choice,
1690 static const oer_sequence_t SignedData_sequence[] = {
1691 { &hf_ieee1609dot2_hashId , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashAlgorithm },
1692 { &hf_ieee1609dot2_tbsData, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_ToBeSignedData },
1693 { &hf_ieee1609dot2_signer , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SignerIdentifier },
1694 { &hf_ieee1609dot2_signature, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Signature },
1695 { NULL, 0, 0, NULL }
1699 dissect_ieee1609dot2_SignedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1700 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1701 ett_ieee1609dot2_SignedData, SignedData_sequence);
1709 dissect_ieee1609dot2_PreSharedKeyRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1710 offset = dissect_ieee1609dot2_HashedId8(tvb, offset, actx, tree, hf_index);
1718 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_) {
1719 offset = dissect_oer_octet_string(tvb, offset, actx, tree, hf_index,
1720 12, 12, FALSE, NULL);
1726 static const oer_sequence_t AesCcmCiphertext_sequence[] = {
1727 { &hf_ieee1609dot2_nonce , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_OCTET_STRING_SIZE_12 },
1728 { &hf_ieee1609dot2_ccmCiphertext, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Opaque },
1729 { NULL, 0, 0, NULL }
1733 dissect_ieee1609dot2_AesCcmCiphertext(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1734 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1735 ett_ieee1609dot2_AesCcmCiphertext, AesCcmCiphertext_sequence);
1741 static const value_string ieee1609dot2_SymmetricCiphertext_vals[] = {
1746 static const oer_choice_t SymmetricCiphertext_choice[] = {
1747 { 0, &hf_ieee1609dot2_aes128ccm, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_AesCcmCiphertext },
1748 { 0, NULL, 0, NULL }
1752 dissect_ieee1609dot2_SymmetricCiphertext(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1753 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1754 ett_ieee1609dot2_SymmetricCiphertext, SymmetricCiphertext_choice,
1761 static const oer_sequence_t SymmRecipientInfo_sequence[] = {
1762 { &hf_ieee1609dot2_recipientId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId8 },
1763 { &hf_ieee1609dot2_encKey , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmetricCiphertext },
1764 { NULL, 0, 0, NULL }
1768 dissect_ieee1609dot2_SymmRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1769 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1770 ett_ieee1609dot2_SymmRecipientInfo, SymmRecipientInfo_sequence);
1776 static const value_string ieee1609dot2_EncryptedDataEncryptionKey_vals[] = {
1777 { 0, "eciesNistP256" },
1778 { 1, "eciesBrainpoolP256r1" },
1782 static const oer_choice_t EncryptedDataEncryptionKey_choice[] = {
1783 { 0, &hf_ieee1609dot2_eciesNistP256_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EciesP256EncryptedKey },
1784 { 1, &hf_ieee1609dot2_eciesBrainpoolP256r1_01, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EciesP256EncryptedKey },
1785 { 0, NULL, 0, NULL }
1789 dissect_ieee1609dot2_EncryptedDataEncryptionKey(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1790 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1791 ett_ieee1609dot2_EncryptedDataEncryptionKey, EncryptedDataEncryptionKey_choice,
1798 static const oer_sequence_t PKRecipientInfo_sequence[] = {
1799 { &hf_ieee1609dot2_recipientId, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_HashedId8 },
1800 { &hf_ieee1609dot2_encKey_01, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_EncryptedDataEncryptionKey },
1801 { NULL, 0, 0, NULL }
1805 dissect_ieee1609dot2_PKRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1806 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1807 ett_ieee1609dot2_PKRecipientInfo, PKRecipientInfo_sequence);
1813 static const value_string ieee1609dot2_RecipientInfo_vals[] = {
1814 { 0, "pskRecipInfo" },
1815 { 1, "symmRecipInfo" },
1816 { 2, "certRecipInfo" },
1817 { 3, "signedDataRecipInfo" },
1818 { 4, "rekRecipInfo" },
1822 static const oer_choice_t RecipientInfo_choice[] = {
1823 { 0, &hf_ieee1609dot2_pskRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PreSharedKeyRecipientInfo },
1824 { 1, &hf_ieee1609dot2_symmRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_SymmRecipientInfo },
1825 { 2, &hf_ieee1609dot2_certRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
1826 { 3, &hf_ieee1609dot2_signedDataRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
1827 { 4, &hf_ieee1609dot2_rekRecipInfo, ASN1_NO_EXTENSIONS , dissect_ieee1609dot2_PKRecipientInfo },
1828 { 0, NULL, 0, NULL }
1832 dissect_ieee1609dot2_RecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1833 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1834 ett_ieee1609dot2_RecipientInfo, RecipientInfo_choice,
1841 static const oer_sequence_t SequenceOfRecipientInfo_sequence_of[1] = {
1842 { &hf_ieee1609dot2_SequenceOfRecipientInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_RecipientInfo },
1846 dissect_ieee1609dot2_SequenceOfRecipientInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1847 offset = dissect_oer_sequence_of(tvb, offset, actx, tree, hf_index,
1848 ett_ieee1609dot2_SequenceOfRecipientInfo, SequenceOfRecipientInfo_sequence_of);
1854 static const oer_sequence_t EncryptedData_sequence[] = {
1855 { &hf_ieee1609dot2_recipients, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SequenceOfRecipientInfo },
1856 { &hf_ieee1609dot2_ciphertext, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_SymmetricCiphertext },
1857 { NULL, 0, 0, NULL }
1861 dissect_ieee1609dot2_EncryptedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1862 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1863 ett_ieee1609dot2_EncryptedData, EncryptedData_sequence);
1869 static const value_string ieee1609dot2_Ieee1609Dot2Content_vals[] = {
1870 { 0, "unsecuredData" },
1871 { 1, "signedData" },
1872 { 2, "encryptedData" },
1873 { 3, "signedCertificateRequest" },
1877 static const oer_choice_t Ieee1609Dot2Content_choice[] = {
1878 { 0, &hf_ieee1609dot2_unsecuredData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_T_unsecuredData },
1879 { 1, &hf_ieee1609dot2_signedData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_SignedData },
1880 { 2, &hf_ieee1609dot2_encryptedData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_EncryptedData },
1881 { 3, &hf_ieee1609dot2_signedCertificateRequest, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_Opaque },
1882 { 0, NULL, 0, NULL }
1886 dissect_ieee1609dot2_Ieee1609Dot2Content(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1887 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1888 ett_ieee1609dot2_Ieee1609Dot2Content, Ieee1609Dot2Content_choice,
1895 static const oer_sequence_t Ieee1609Dot2Data_sequence[] = {
1896 { &hf_ieee1609dot2_protocolVersion, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Uint8 },
1897 { &hf_ieee1609dot2_content, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_ieee1609dot2_Ieee1609Dot2Content },
1898 { NULL, 0, 0, NULL }
1902 dissect_ieee1609dot2_Ieee1609Dot2Data(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1903 #line 47 "./asn1/ieee1609dot2/ieee1609dot2.cnf"
1904 actx->private_data = (void*)wmem_new0(wmem_packet_scope(), ieee1609_private_data_t);
1906 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1907 ett_ieee1609dot2_Ieee1609Dot2Data, Ieee1609Dot2Data_sequence);
1913 static const value_string ieee1609dot2_HashedData_vals[] = {
1914 { 0, "sha256HashedData" },
1918 static const oer_choice_t HashedData_choice[] = {
1919 { 0, &hf_ieee1609dot2_sha256HashedData, ASN1_EXTENSION_ROOT , dissect_ieee1609dot2_OCTET_STRING_SIZE_32 },
1920 { 0, NULL, 0, NULL }
1924 dissect_ieee1609dot2_HashedData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1925 offset = dissect_oer_choice(tvb, offset, actx, tree, hf_index,
1926 ett_ieee1609dot2_HashedData, HashedData_choice,
1933 static const oer_sequence_t SignedDataPayload_sequence[] = {
1934 { &hf_ieee1609dot2_data , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_Ieee1609Dot2Data },
1935 { &hf_ieee1609dot2_extDataHash, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_ieee1609dot2_HashedData },
1936 { NULL, 0, 0, NULL }
1940 dissect_ieee1609dot2_SignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1941 offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
1942 ett_ieee1609dot2_SignedDataPayload, SignedDataPayload_sequence);
1949 static int dissect_Ieee1609Dot2Data_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1951 asn1_ctx_t asn1_ctx;
1952 asn1_ctx_init(&asn1_ctx, ASN1_ENC_OER, TRUE, pinfo);
1953 offset = dissect_ieee1609dot2_Ieee1609Dot2Data(tvb, offset, &asn1_ctx, tree, hf_ieee1609dot2_Ieee1609Dot2Data_PDU);
1958 /*--- End of included file: packet-ieee1609dot2-fn.c ---*/
1959 #line 59 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
1962 /*--- proto_register_ieee1609dot2 ----------------------------------------------*/
1963 void proto_register_ieee1609dot2(void) {
1965 /* List of fields */
1966 static hf_register_info hf[] = {
1968 /*--- Included file: packet-ieee1609dot2-hfarr.c ---*/
1969 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-hfarr.c"
1970 { &hf_ieee1609dot2_Ieee1609Dot2Data_PDU,
1971 { "Ieee1609Dot2Data", "ieee1609dot2.Ieee1609Dot2Data_element",
1972 FT_NONE, BASE_NONE, NULL, 0,
1974 { &hf_ieee1609dot2_SequenceOfUint8_item,
1975 { "Uint8", "ieee1609dot2.Uint8",
1976 FT_UINT32, BASE_DEC, NULL, 0,
1978 { &hf_ieee1609dot2_SequenceOfUint16_item,
1979 { "Uint16", "ieee1609dot2.Uint16",
1980 FT_UINT32, BASE_DEC, NULL, 0,
1982 { &hf_ieee1609dot2_start,
1983 { "start", "ieee1609dot2.start",
1984 FT_UINT32, BASE_DEC, NULL, 0,
1986 { &hf_ieee1609dot2_duration,
1987 { "duration", "ieee1609dot2.duration",
1988 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Duration_vals), 0,
1990 { &hf_ieee1609dot2_microseconds,
1991 { "microseconds", "ieee1609dot2.microseconds",
1992 FT_UINT32, BASE_DEC, NULL, 0,
1994 { &hf_ieee1609dot2_milliseconds,
1995 { "milliseconds", "ieee1609dot2.milliseconds",
1996 FT_UINT32, BASE_DEC, NULL, 0,
1998 { &hf_ieee1609dot2_seconds,
1999 { "seconds", "ieee1609dot2.seconds",
2000 FT_UINT32, BASE_DEC, NULL, 0,
2002 { &hf_ieee1609dot2_minutes,
2003 { "minutes", "ieee1609dot2.minutes",
2004 FT_UINT32, BASE_DEC, NULL, 0,
2006 { &hf_ieee1609dot2_hours,
2007 { "hours", "ieee1609dot2.hours",
2008 FT_UINT32, BASE_DEC, NULL, 0,
2010 { &hf_ieee1609dot2_sixtyHours,
2011 { "sixtyHours", "ieee1609dot2.sixtyHours",
2012 FT_UINT32, BASE_DEC, NULL, 0,
2014 { &hf_ieee1609dot2_years,
2015 { "years", "ieee1609dot2.years",
2016 FT_UINT32, BASE_DEC, NULL, 0,
2018 { &hf_ieee1609dot2_circularRegion,
2019 { "circularRegion", "ieee1609dot2.circularRegion_element",
2020 FT_NONE, BASE_NONE, NULL, 0,
2022 { &hf_ieee1609dot2_rectangularRegion,
2023 { "rectangularRegion", "ieee1609dot2.rectangularRegion",
2024 FT_UINT32, BASE_DEC, NULL, 0,
2025 "SequenceOfRectangularRegion", HFILL }},
2026 { &hf_ieee1609dot2_polygonalRegion,
2027 { "polygonalRegion", "ieee1609dot2.polygonalRegion",
2028 FT_UINT32, BASE_DEC, NULL, 0,
2030 { &hf_ieee1609dot2_identifiedRegion,
2031 { "identifiedRegion", "ieee1609dot2.identifiedRegion",
2032 FT_UINT32, BASE_DEC, NULL, 0,
2033 "SequenceOfIdentifiedRegion", HFILL }},
2034 { &hf_ieee1609dot2_center,
2035 { "center", "ieee1609dot2.center_element",
2036 FT_NONE, BASE_NONE, NULL, 0,
2037 "TwoDLocation", HFILL }},
2038 { &hf_ieee1609dot2_radius,
2039 { "radius", "ieee1609dot2.radius",
2040 FT_UINT32, BASE_DEC, NULL, 0,
2042 { &hf_ieee1609dot2_northWest,
2043 { "northWest", "ieee1609dot2.northWest_element",
2044 FT_NONE, BASE_NONE, NULL, 0,
2045 "TwoDLocation", HFILL }},
2046 { &hf_ieee1609dot2_southEast,
2047 { "southEast", "ieee1609dot2.southEast_element",
2048 FT_NONE, BASE_NONE, NULL, 0,
2049 "TwoDLocation", HFILL }},
2050 { &hf_ieee1609dot2_SequenceOfRectangularRegion_item,
2051 { "RectangularRegion", "ieee1609dot2.RectangularRegion_element",
2052 FT_NONE, BASE_NONE, NULL, 0,
2054 { &hf_ieee1609dot2_PolygonalRegion_item,
2055 { "TwoDLocation", "ieee1609dot2.TwoDLocation_element",
2056 FT_NONE, BASE_NONE, NULL, 0,
2058 { &hf_ieee1609dot2_latitude,
2059 { "latitude", "ieee1609dot2.latitude",
2060 FT_INT32, BASE_DEC, VALS(ieee1609dot2_NinetyDegreeInt_vals), 0,
2062 { &hf_ieee1609dot2_longitude,
2063 { "longitude", "ieee1609dot2.longitude",
2064 FT_INT32, BASE_DEC, VALS(ieee1609dot2_OneEightyDegreeInt_vals), 0,
2066 { &hf_ieee1609dot2_countryOnly,
2067 { "countryOnly", "ieee1609dot2.countryOnly",
2068 FT_UINT32, BASE_DEC, NULL, 0,
2070 { &hf_ieee1609dot2_countryAndRegions,
2071 { "countryAndRegions", "ieee1609dot2.countryAndRegions_element",
2072 FT_NONE, BASE_NONE, NULL, 0,
2074 { &hf_ieee1609dot2_countryAndSubregions,
2075 { "countryAndSubregions", "ieee1609dot2.countryAndSubregions_element",
2076 FT_NONE, BASE_NONE, NULL, 0,
2078 { &hf_ieee1609dot2_SequenceOfIdentifiedRegion_item,
2079 { "IdentifiedRegion", "ieee1609dot2.IdentifiedRegion",
2080 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_IdentifiedRegion_vals), 0,
2082 { &hf_ieee1609dot2_regions,
2083 { "regions", "ieee1609dot2.regions",
2084 FT_UINT32, BASE_DEC, NULL, 0,
2085 "SequenceOfUint8", HFILL }},
2086 { &hf_ieee1609dot2_country,
2087 { "country", "ieee1609dot2.country",
2088 FT_UINT32, BASE_DEC, NULL, 0,
2089 "CountryOnly", HFILL }},
2090 { &hf_ieee1609dot2_regionAndSubregions,
2091 { "regionAndSubregions", "ieee1609dot2.regionAndSubregions",
2092 FT_UINT32, BASE_DEC, NULL, 0,
2093 "SequenceOfRegionAndSubregions", HFILL }},
2094 { &hf_ieee1609dot2_region,
2095 { "region", "ieee1609dot2.region",
2096 FT_UINT32, BASE_DEC, NULL, 0,
2098 { &hf_ieee1609dot2_subregions,
2099 { "subregions", "ieee1609dot2.subregions",
2100 FT_UINT32, BASE_DEC, NULL, 0,
2101 "SequenceOfUint16", HFILL }},
2102 { &hf_ieee1609dot2_SequenceOfRegionAndSubregions_item,
2103 { "RegionAndSubregions", "ieee1609dot2.RegionAndSubregions_element",
2104 FT_NONE, BASE_NONE, NULL, 0,
2106 { &hf_ieee1609dot2_elevation,
2107 { "elevation", "ieee1609dot2.elevation",
2108 FT_UINT32, BASE_DEC, NULL, 0,
2110 { &hf_ieee1609dot2_ecdsaNistP256Signature,
2111 { "ecdsaNistP256Signature", "ieee1609dot2.ecdsaNistP256Signature_element",
2112 FT_NONE, BASE_NONE, NULL, 0,
2113 "EcdsaP256Signature", HFILL }},
2114 { &hf_ieee1609dot2_ecdsaBrainpoolP256r1Signature,
2115 { "ecdsaBrainpoolP256r1Signature", "ieee1609dot2.ecdsaBrainpoolP256r1Signature_element",
2116 FT_NONE, BASE_NONE, NULL, 0,
2117 "EcdsaP256Signature", HFILL }},
2118 { &hf_ieee1609dot2_r,
2119 { "r", "ieee1609dot2.r",
2120 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2121 "EccP256CurvePoint", HFILL }},
2122 { &hf_ieee1609dot2_s,
2123 { "s", "ieee1609dot2.s",
2124 FT_BYTES, BASE_NONE, NULL, 0,
2125 "OCTET_STRING_SIZE_32", HFILL }},
2126 { &hf_ieee1609dot2_x_only,
2127 { "x-only", "ieee1609dot2.x_only",
2128 FT_BYTES, BASE_NONE, NULL, 0,
2129 "OCTET_STRING_SIZE_32", HFILL }},
2130 { &hf_ieee1609dot2_fill,
2131 { "fill", "ieee1609dot2.fill_element",
2132 FT_NONE, BASE_NONE, NULL, 0,
2134 { &hf_ieee1609dot2_compressed_y_0,
2135 { "compressed-y-0", "ieee1609dot2.compressed_y_0",
2136 FT_BYTES, BASE_NONE, NULL, 0,
2137 "OCTET_STRING_SIZE_32", HFILL }},
2138 { &hf_ieee1609dot2_compressed_y_1,
2139 { "compressed-y-1", "ieee1609dot2.compressed_y_1",
2140 FT_BYTES, BASE_NONE, NULL, 0,
2141 "OCTET_STRING_SIZE_32", HFILL }},
2142 { &hf_ieee1609dot2_uncompressed,
2143 { "uncompressed", "ieee1609dot2.uncompressed_element",
2144 FT_NONE, BASE_NONE, NULL, 0,
2146 { &hf_ieee1609dot2_x,
2147 { "x", "ieee1609dot2.x",
2148 FT_BYTES, BASE_NONE, NULL, 0,
2149 "OCTET_STRING_SIZE_32", HFILL }},
2150 { &hf_ieee1609dot2_y,
2151 { "y", "ieee1609dot2.y",
2152 FT_BYTES, BASE_NONE, NULL, 0,
2153 "OCTET_STRING_SIZE_32", HFILL }},
2154 { &hf_ieee1609dot2_v,
2155 { "v", "ieee1609dot2.v",
2156 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2157 "EccP256CurvePoint", HFILL }},
2158 { &hf_ieee1609dot2_c,
2159 { "c", "ieee1609dot2.c",
2160 FT_BYTES, BASE_NONE, NULL, 0,
2161 "OCTET_STRING_SIZE_16", HFILL }},
2162 { &hf_ieee1609dot2_t,
2163 { "t", "ieee1609dot2.t",
2164 FT_BYTES, BASE_NONE, NULL, 0,
2165 "OCTET_STRING_SIZE_16", HFILL }},
2166 { &hf_ieee1609dot2_public,
2167 { "public", "ieee1609dot2.public_element",
2168 FT_NONE, BASE_NONE, NULL, 0,
2169 "PublicEncryptionKey", HFILL }},
2170 { &hf_ieee1609dot2_symmetric,
2171 { "symmetric", "ieee1609dot2.symmetric",
2172 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricEncryptionKey_vals), 0,
2173 "SymmetricEncryptionKey", HFILL }},
2174 { &hf_ieee1609dot2_supportedSymmAlg,
2175 { "supportedSymmAlg", "ieee1609dot2.supportedSymmAlg",
2176 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmAlgorithm_vals), 0,
2177 "SymmAlgorithm", HFILL }},
2178 { &hf_ieee1609dot2_publicKey,
2179 { "publicKey", "ieee1609dot2.publicKey",
2180 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_BasePublicEncryptionKey_vals), 0,
2181 "BasePublicEncryptionKey", HFILL }},
2182 { &hf_ieee1609dot2_eciesNistP256,
2183 { "eciesNistP256", "ieee1609dot2.eciesNistP256",
2184 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2185 "EccP256CurvePoint", HFILL }},
2186 { &hf_ieee1609dot2_eciesBrainpoolP256r1,
2187 { "eciesBrainpoolP256r1", "ieee1609dot2.eciesBrainpoolP256r1",
2188 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2189 "EccP256CurvePoint", HFILL }},
2190 { &hf_ieee1609dot2_ecdsaNistP256,
2191 { "ecdsaNistP256", "ieee1609dot2.ecdsaNistP256",
2192 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2193 "EccP256CurvePoint", HFILL }},
2194 { &hf_ieee1609dot2_ecdsaBrainpoolP256r1,
2195 { "ecdsaBrainpoolP256r1", "ieee1609dot2.ecdsaBrainpoolP256r1",
2196 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2197 "EccP256CurvePoint", HFILL }},
2198 { &hf_ieee1609dot2_aes128Ccm,
2199 { "aes128Ccm", "ieee1609dot2.aes128Ccm",
2200 FT_BYTES, BASE_NONE, NULL, 0,
2201 "OCTET_STRING_SIZE_16", HFILL }},
2202 { &hf_ieee1609dot2_psid,
2203 { "psid", "ieee1609dot2.psid",
2204 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
2206 { &hf_ieee1609dot2_ssp,
2207 { "ssp", "ieee1609dot2.ssp",
2208 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_ServiceSpecificPermissions_vals), 0,
2209 "ServiceSpecificPermissions", HFILL }},
2210 { &hf_ieee1609dot2_SequenceOfPsidSsp_item,
2211 { "PsidSsp", "ieee1609dot2.PsidSsp_element",
2212 FT_NONE, BASE_NONE, NULL, 0,
2214 { &hf_ieee1609dot2_opaque,
2215 { "opaque", "ieee1609dot2.opaque",
2216 FT_BYTES, BASE_NONE, NULL, 0,
2218 { &hf_ieee1609dot2_psid_01,
2219 { "psid", "ieee1609dot2.psid",
2220 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
2222 { &hf_ieee1609dot2_sspRange,
2223 { "sspRange", "ieee1609dot2.sspRange",
2224 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SspRange_vals), 0,
2226 { &hf_ieee1609dot2_SequenceOfPsidSspRange_item,
2227 { "PsidSspRange", "ieee1609dot2.PsidSspRange_element",
2228 FT_NONE, BASE_NONE, NULL, 0,
2230 { &hf_ieee1609dot2_opaque_01,
2231 { "opaque", "ieee1609dot2.opaque",
2232 FT_UINT32, BASE_DEC, NULL, 0,
2233 "SequenceOfOctetString", HFILL }},
2234 { &hf_ieee1609dot2_all,
2235 { "all", "ieee1609dot2.all_element",
2236 FT_NONE, BASE_NONE, NULL, 0,
2238 { &hf_ieee1609dot2_SequenceOfOctetString_item,
2239 { "SequenceOfOctetString item", "ieee1609dot2.SequenceOfOctetString_item",
2240 FT_BYTES, BASE_NONE, NULL, 0,
2241 "OCTET_STRING_SIZE_0_MAX", HFILL }},
2242 { &hf_ieee1609dot2_jValue,
2243 { "jValue", "ieee1609dot2.jValue",
2244 FT_BYTES, BASE_NONE, NULL, 0,
2245 "OCTET_STRING_SIZE_4", HFILL }},
2246 { &hf_ieee1609dot2_value,
2247 { "value", "ieee1609dot2.value",
2248 FT_BYTES, BASE_NONE, NULL, 0,
2249 "OCTET_STRING_SIZE_9", HFILL }},
2250 { &hf_ieee1609dot2_data,
2251 { "data", "ieee1609dot2.data_element",
2252 FT_NONE, BASE_NONE, NULL, 0,
2253 "Ieee1609Dot2Data", HFILL }},
2254 { &hf_ieee1609dot2_extDataHash,
2255 { "extDataHash", "ieee1609dot2.extDataHash",
2256 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashedData_vals), 0,
2257 "HashedData", HFILL }},
2258 { &hf_ieee1609dot2_protocolVersion,
2259 { "protocolVersion", "ieee1609dot2.protocolVersion",
2260 FT_UINT32, BASE_DEC, NULL, 0,
2262 { &hf_ieee1609dot2_content,
2263 { "content", "ieee1609dot2.content",
2264 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Ieee1609Dot2Content_vals), 0,
2265 "Ieee1609Dot2Content", HFILL }},
2266 { &hf_ieee1609dot2_unsecuredData,
2267 { "unsecuredData", "ieee1609dot2.unsecuredData",
2268 FT_BYTES, BASE_NONE, NULL, 0,
2270 { &hf_ieee1609dot2_signedData,
2271 { "signedData", "ieee1609dot2.signedData_element",
2272 FT_NONE, BASE_NONE, NULL, 0,
2274 { &hf_ieee1609dot2_encryptedData,
2275 { "encryptedData", "ieee1609dot2.encryptedData_element",
2276 FT_NONE, BASE_NONE, NULL, 0,
2278 { &hf_ieee1609dot2_signedCertificateRequest,
2279 { "signedCertificateRequest", "ieee1609dot2.signedCertificateRequest",
2280 FT_BYTES, BASE_NONE, NULL, 0,
2282 { &hf_ieee1609dot2_hashId,
2283 { "hashId", "ieee1609dot2.hashId",
2284 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashAlgorithm_vals), 0,
2285 "HashAlgorithm", HFILL }},
2286 { &hf_ieee1609dot2_tbsData,
2287 { "tbsData", "ieee1609dot2.tbsData_element",
2288 FT_NONE, BASE_NONE, NULL, 0,
2289 "ToBeSignedData", HFILL }},
2290 { &hf_ieee1609dot2_signer,
2291 { "signer", "ieee1609dot2.signer",
2292 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SignerIdentifier_vals), 0,
2293 "SignerIdentifier", HFILL }},
2294 { &hf_ieee1609dot2_signature,
2295 { "signature", "ieee1609dot2.signature",
2296 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_Signature_vals), 0,
2298 { &hf_ieee1609dot2_digest,
2299 { "digest", "ieee1609dot2.digest",
2300 FT_BYTES, BASE_NONE, NULL, 0,
2301 "HashedId8", HFILL }},
2302 { &hf_ieee1609dot2_certificate,
2303 { "certificate", "ieee1609dot2.certificate",
2304 FT_UINT32, BASE_DEC, NULL, 0,
2305 "SequenceOfCertificate", HFILL }},
2306 { &hf_ieee1609dot2_self,
2307 { "self", "ieee1609dot2.self_element",
2308 FT_NONE, BASE_NONE, NULL, 0,
2310 { &hf_ieee1609dot2_payload,
2311 { "payload", "ieee1609dot2.payload_element",
2312 FT_NONE, BASE_NONE, NULL, 0,
2313 "SignedDataPayload", HFILL }},
2314 { &hf_ieee1609dot2_headerInfo,
2315 { "headerInfo", "ieee1609dot2.headerInfo_element",
2316 FT_NONE, BASE_NONE, NULL, 0,
2318 { &hf_ieee1609dot2_sha256HashedData,
2319 { "sha256HashedData", "ieee1609dot2.sha256HashedData",
2320 FT_BYTES, BASE_NONE, NULL, 0,
2321 "OCTET_STRING_SIZE_32", HFILL }},
2322 { &hf_ieee1609dot2_psid_02,
2323 { "psid", "ieee1609dot2.psid",
2324 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(ieee1609dot2_Psid_vals), 0,
2325 "T_psid_01", HFILL }},
2326 { &hf_ieee1609dot2_generationTime,
2327 { "generationTime", "ieee1609dot2.generationTime",
2328 FT_UINT64, BASE_DEC, NULL, 0,
2330 { &hf_ieee1609dot2_expiryTime,
2331 { "expiryTime", "ieee1609dot2.expiryTime",
2332 FT_UINT64, BASE_DEC, NULL, 0,
2334 { &hf_ieee1609dot2_generationLocation,
2335 { "generationLocation", "ieee1609dot2.generationLocation_element",
2336 FT_NONE, BASE_NONE, NULL, 0,
2337 "ThreeDLocation", HFILL }},
2338 { &hf_ieee1609dot2_p2pcdLearningRequest,
2339 { "p2pcdLearningRequest", "ieee1609dot2.p2pcdLearningRequest",
2340 FT_BYTES, BASE_NONE, NULL, 0,
2341 "HashedId3", HFILL }},
2342 { &hf_ieee1609dot2_missingCrlIdentifier,
2343 { "missingCrlIdentifier", "ieee1609dot2.missingCrlIdentifier_element",
2344 FT_NONE, BASE_NONE, NULL, 0,
2346 { &hf_ieee1609dot2_encryptionKey,
2347 { "encryptionKey", "ieee1609dot2.encryptionKey",
2348 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EncryptionKey_vals), 0,
2350 { &hf_ieee1609dot2_cracaId,
2351 { "cracaId", "ieee1609dot2.cracaId",
2352 FT_BYTES, BASE_NONE, NULL, 0,
2353 "HashedId3", HFILL }},
2354 { &hf_ieee1609dot2_crlSeries,
2355 { "crlSeries", "ieee1609dot2.crlSeries",
2356 FT_UINT32, BASE_DEC, NULL, 0,
2358 { &hf_ieee1609dot2_recipients,
2359 { "recipients", "ieee1609dot2.recipients",
2360 FT_UINT32, BASE_DEC, NULL, 0,
2361 "SequenceOfRecipientInfo", HFILL }},
2362 { &hf_ieee1609dot2_ciphertext,
2363 { "ciphertext", "ieee1609dot2.ciphertext",
2364 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricCiphertext_vals), 0,
2365 "SymmetricCiphertext", HFILL }},
2366 { &hf_ieee1609dot2_pskRecipInfo,
2367 { "pskRecipInfo", "ieee1609dot2.pskRecipInfo",
2368 FT_BYTES, BASE_NONE, NULL, 0,
2369 "PreSharedKeyRecipientInfo", HFILL }},
2370 { &hf_ieee1609dot2_symmRecipInfo,
2371 { "symmRecipInfo", "ieee1609dot2.symmRecipInfo_element",
2372 FT_NONE, BASE_NONE, NULL, 0,
2373 "SymmRecipientInfo", HFILL }},
2374 { &hf_ieee1609dot2_certRecipInfo,
2375 { "certRecipInfo", "ieee1609dot2.certRecipInfo_element",
2376 FT_NONE, BASE_NONE, NULL, 0,
2377 "PKRecipientInfo", HFILL }},
2378 { &hf_ieee1609dot2_signedDataRecipInfo,
2379 { "signedDataRecipInfo", "ieee1609dot2.signedDataRecipInfo_element",
2380 FT_NONE, BASE_NONE, NULL, 0,
2381 "PKRecipientInfo", HFILL }},
2382 { &hf_ieee1609dot2_rekRecipInfo,
2383 { "rekRecipInfo", "ieee1609dot2.rekRecipInfo_element",
2384 FT_NONE, BASE_NONE, NULL, 0,
2385 "PKRecipientInfo", HFILL }},
2386 { &hf_ieee1609dot2_SequenceOfRecipientInfo_item,
2387 { "RecipientInfo", "ieee1609dot2.RecipientInfo",
2388 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_RecipientInfo_vals), 0,
2390 { &hf_ieee1609dot2_recipientId,
2391 { "recipientId", "ieee1609dot2.recipientId",
2392 FT_BYTES, BASE_NONE, NULL, 0,
2393 "HashedId8", HFILL }},
2394 { &hf_ieee1609dot2_encKey,
2395 { "encKey", "ieee1609dot2.encKey",
2396 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SymmetricCiphertext_vals), 0,
2397 "SymmetricCiphertext", HFILL }},
2398 { &hf_ieee1609dot2_encKey_01,
2399 { "encKey", "ieee1609dot2.encKey",
2400 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EncryptedDataEncryptionKey_vals), 0,
2401 "EncryptedDataEncryptionKey", HFILL }},
2402 { &hf_ieee1609dot2_eciesNistP256_01,
2403 { "eciesNistP256", "ieee1609dot2.eciesNistP256_element",
2404 FT_NONE, BASE_NONE, NULL, 0,
2405 "EciesP256EncryptedKey", HFILL }},
2406 { &hf_ieee1609dot2_eciesBrainpoolP256r1_01,
2407 { "eciesBrainpoolP256r1", "ieee1609dot2.eciesBrainpoolP256r1_element",
2408 FT_NONE, BASE_NONE, NULL, 0,
2409 "EciesP256EncryptedKey", HFILL }},
2410 { &hf_ieee1609dot2_aes128ccm,
2411 { "aes128ccm", "ieee1609dot2.aes128ccm_element",
2412 FT_NONE, BASE_NONE, NULL, 0,
2413 "AesCcmCiphertext", HFILL }},
2414 { &hf_ieee1609dot2_nonce,
2415 { "nonce", "ieee1609dot2.nonce",
2416 FT_BYTES, BASE_NONE, NULL, 0,
2417 "OCTET_STRING_SIZE_12", HFILL }},
2418 { &hf_ieee1609dot2_ccmCiphertext,
2419 { "ccmCiphertext", "ieee1609dot2.ccmCiphertext",
2420 FT_BYTES, BASE_NONE, NULL, 0,
2422 { &hf_ieee1609dot2_SequenceOfCertificate_item,
2423 { "Certificate", "ieee1609dot2.Certificate_element",
2424 FT_NONE, BASE_NONE, NULL, 0,
2426 { &hf_ieee1609dot2_version,
2427 { "version", "ieee1609dot2.version",
2428 FT_UINT32, BASE_DEC, NULL, 0,
2430 { &hf_ieee1609dot2_type,
2431 { "type", "ieee1609dot2.type",
2432 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_CertificateType_vals), 0,
2433 "CertificateType", HFILL }},
2434 { &hf_ieee1609dot2_issuer,
2435 { "issuer", "ieee1609dot2.issuer",
2436 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_IssuerIdentifier_vals), 0,
2437 "IssuerIdentifier", HFILL }},
2438 { &hf_ieee1609dot2_toBeSigned,
2439 { "toBeSigned", "ieee1609dot2.toBeSigned_element",
2440 FT_NONE, BASE_NONE, NULL, 0,
2441 "ToBeSignedCertificate", HFILL }},
2442 { &hf_ieee1609dot2_sha256AndDigest,
2443 { "sha256AndDigest", "ieee1609dot2.sha256AndDigest",
2444 FT_BYTES, BASE_NONE, NULL, 0,
2445 "HashedId8", HFILL }},
2446 { &hf_ieee1609dot2_self_01,
2447 { "self", "ieee1609dot2.self",
2448 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_HashAlgorithm_vals), 0,
2449 "HashAlgorithm", HFILL }},
2450 { &hf_ieee1609dot2_id,
2451 { "id", "ieee1609dot2.id",
2452 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_CertificateId_vals), 0,
2453 "CertificateId", HFILL }},
2454 { &hf_ieee1609dot2_validityPeriod,
2455 { "validityPeriod", "ieee1609dot2.validityPeriod_element",
2456 FT_NONE, BASE_NONE, NULL, 0,
2458 { &hf_ieee1609dot2_region_01,
2459 { "region", "ieee1609dot2.region",
2460 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_GeographicRegion_vals), 0,
2461 "GeographicRegion", HFILL }},
2462 { &hf_ieee1609dot2_assuranceLevel,
2463 { "assuranceLevel", "ieee1609dot2.assuranceLevel",
2464 FT_BYTES, BASE_NONE, NULL, 0,
2465 "SubjectAssurance", HFILL }},
2466 { &hf_ieee1609dot2_appPermissions,
2467 { "appPermissions", "ieee1609dot2.appPermissions",
2468 FT_UINT32, BASE_DEC, NULL, 0,
2469 "SequenceOfPsidSsp", HFILL }},
2470 { &hf_ieee1609dot2_certIssuePermissions,
2471 { "certIssuePermissions", "ieee1609dot2.certIssuePermissions",
2472 FT_UINT32, BASE_DEC, NULL, 0,
2473 "SequenceOfPsidGroupPermissions", HFILL }},
2474 { &hf_ieee1609dot2_certRequestPermissions,
2475 { "certRequestPermissions", "ieee1609dot2.certRequestPermissions",
2476 FT_UINT32, BASE_DEC, NULL, 0,
2477 "SequenceOfPsidGroupPermissions", HFILL }},
2478 { &hf_ieee1609dot2_canRequestRollover,
2479 { "canRequestRollover", "ieee1609dot2.canRequestRollover_element",
2480 FT_NONE, BASE_NONE, NULL, 0,
2482 { &hf_ieee1609dot2_encryptionKey_01,
2483 { "encryptionKey", "ieee1609dot2.encryptionKey_element",
2484 FT_NONE, BASE_NONE, NULL, 0,
2485 "PublicEncryptionKey", HFILL }},
2486 { &hf_ieee1609dot2_verifyKeyIndicator,
2487 { "verifyKeyIndicator", "ieee1609dot2.verifyKeyIndicator",
2488 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_VerificationKeyIndicator_vals), 0,
2489 "VerificationKeyIndicator", HFILL }},
2490 { &hf_ieee1609dot2_linkageData,
2491 { "linkageData", "ieee1609dot2.linkageData_element",
2492 FT_NONE, BASE_NONE, NULL, 0,
2494 { &hf_ieee1609dot2_name,
2495 { "name", "ieee1609dot2.name",
2496 FT_STRING, BASE_NONE, NULL, 0,
2497 "Hostname", HFILL }},
2498 { &hf_ieee1609dot2_binaryId,
2499 { "binaryId", "ieee1609dot2.binaryId",
2500 FT_BYTES, BASE_NONE, NULL, 0,
2501 "OCTET_STRING_SIZE_1_64", HFILL }},
2502 { &hf_ieee1609dot2_none,
2503 { "none", "ieee1609dot2.none_element",
2504 FT_NONE, BASE_NONE, NULL, 0,
2506 { &hf_ieee1609dot2_iCert,
2507 { "iCert", "ieee1609dot2.iCert",
2508 FT_UINT32, BASE_DEC, NULL, 0,
2510 { &hf_ieee1609dot2_linkage_value,
2511 { "linkage-value", "ieee1609dot2.linkage_value",
2512 FT_BYTES, BASE_NONE, NULL, 0,
2513 "LinkageValue", HFILL }},
2514 { &hf_ieee1609dot2_group_linkage_value,
2515 { "group-linkage-value", "ieee1609dot2.group_linkage_value_element",
2516 FT_NONE, BASE_NONE, NULL, 0,
2517 "GroupLinkageValue", HFILL }},
2518 { &hf_ieee1609dot2_appPermissions_01,
2519 { "appPermissions", "ieee1609dot2.appPermissions",
2520 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_SubjectPermissions_vals), 0,
2521 "SubjectPermissions", HFILL }},
2522 { &hf_ieee1609dot2_minChainDepth,
2523 { "minChainDepth", "ieee1609dot2.minChainDepth",
2524 FT_INT32, BASE_DEC, NULL, 0,
2525 "INTEGER", HFILL }},
2526 { &hf_ieee1609dot2_chainDepthRange,
2527 { "chainDepthRange", "ieee1609dot2.chainDepthRange",
2528 FT_INT32, BASE_DEC, NULL, 0,
2529 "INTEGER", HFILL }},
2530 { &hf_ieee1609dot2_eeType,
2531 { "eeType", "ieee1609dot2.eeType",
2532 FT_BYTES, BASE_NONE, NULL, 0,
2533 "EndEntityType", HFILL }},
2534 { &hf_ieee1609dot2_SequenceOfPsidGroupPermissions_item,
2535 { "PsidGroupPermissions", "ieee1609dot2.PsidGroupPermissions_element",
2536 FT_NONE, BASE_NONE, NULL, 0,
2538 { &hf_ieee1609dot2_explicit,
2539 { "explicit", "ieee1609dot2.explicit",
2540 FT_UINT32, BASE_DEC, NULL, 0,
2541 "SequenceOfPsidSspRange", HFILL }},
2542 { &hf_ieee1609dot2_verificationKey,
2543 { "verificationKey", "ieee1609dot2.verificationKey",
2544 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_PublicVerificationKey_vals), 0,
2545 "PublicVerificationKey", HFILL }},
2546 { &hf_ieee1609dot2_reconstructionValue,
2547 { "reconstructionValue", "ieee1609dot2.reconstructionValue",
2548 FT_UINT32, BASE_DEC, VALS(ieee1609dot2_EccP256CurvePoint_vals), 0,
2549 "EccP256CurvePoint", HFILL }},
2550 { &hf_ieee1609dot2_EndEntityType_app,
2551 { "app", "ieee1609dot2.app",
2552 FT_BOOLEAN, 8, NULL, 0x80,
2554 { &hf_ieee1609dot2_EndEntityType_enrol,
2555 { "enrol", "ieee1609dot2.enrol",
2556 FT_BOOLEAN, 8, NULL, 0x40,
2559 /*--- End of included file: packet-ieee1609dot2-hfarr.c ---*/
2560 #line 67 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
2563 /* List of subtrees */
2564 static gint *ett[] = {
2566 /*--- Included file: packet-ieee1609dot2-ettarr.c ---*/
2567 #line 1 "./asn1/ieee1609dot2/packet-ieee1609dot2-ettarr.c"
2568 &ett_ieee1609dot2_SequenceOfUint8,
2569 &ett_ieee1609dot2_SequenceOfUint16,
2570 &ett_ieee1609dot2_ValidityPeriod,
2571 &ett_ieee1609dot2_Duration,
2572 &ett_ieee1609dot2_GeographicRegion,
2573 &ett_ieee1609dot2_CircularRegion,
2574 &ett_ieee1609dot2_RectangularRegion,
2575 &ett_ieee1609dot2_SequenceOfRectangularRegion,
2576 &ett_ieee1609dot2_PolygonalRegion,
2577 &ett_ieee1609dot2_TwoDLocation,
2578 &ett_ieee1609dot2_IdentifiedRegion,
2579 &ett_ieee1609dot2_SequenceOfIdentifiedRegion,
2580 &ett_ieee1609dot2_CountryAndRegions,
2581 &ett_ieee1609dot2_CountryAndSubregions,
2582 &ett_ieee1609dot2_RegionAndSubregions,
2583 &ett_ieee1609dot2_SequenceOfRegionAndSubregions,
2584 &ett_ieee1609dot2_ThreeDLocation,
2585 &ett_ieee1609dot2_Signature,
2586 &ett_ieee1609dot2_EcdsaP256Signature,
2587 &ett_ieee1609dot2_EccP256CurvePoint,
2588 &ett_ieee1609dot2_T_uncompressed,
2589 &ett_ieee1609dot2_EciesP256EncryptedKey,
2590 &ett_ieee1609dot2_EncryptionKey,
2591 &ett_ieee1609dot2_PublicEncryptionKey,
2592 &ett_ieee1609dot2_BasePublicEncryptionKey,
2593 &ett_ieee1609dot2_PublicVerificationKey,
2594 &ett_ieee1609dot2_SymmetricEncryptionKey,
2595 &ett_ieee1609dot2_PsidSsp,
2596 &ett_ieee1609dot2_SequenceOfPsidSsp,
2597 &ett_ieee1609dot2_ServiceSpecificPermissions,
2598 &ett_ieee1609dot2_PsidSspRange,
2599 &ett_ieee1609dot2_SequenceOfPsidSspRange,
2600 &ett_ieee1609dot2_SspRange,
2601 &ett_ieee1609dot2_SequenceOfOctetString,
2602 &ett_ieee1609dot2_GroupLinkageValue,
2603 &ett_ieee1609dot2_SignedDataPayload,
2604 &ett_ieee1609dot2_Ieee1609Dot2Data,
2605 &ett_ieee1609dot2_Ieee1609Dot2Content,
2606 &ett_ieee1609dot2_SignedData,
2607 &ett_ieee1609dot2_SignerIdentifier,
2608 &ett_ieee1609dot2_ToBeSignedData,
2609 &ett_ieee1609dot2_HashedData,
2610 &ett_ieee1609dot2_HeaderInfo,
2611 &ett_ieee1609dot2_MissingCrlIdentifier,
2612 &ett_ieee1609dot2_EncryptedData,
2613 &ett_ieee1609dot2_RecipientInfo,
2614 &ett_ieee1609dot2_SequenceOfRecipientInfo,
2615 &ett_ieee1609dot2_SymmRecipientInfo,
2616 &ett_ieee1609dot2_PKRecipientInfo,
2617 &ett_ieee1609dot2_EncryptedDataEncryptionKey,
2618 &ett_ieee1609dot2_SymmetricCiphertext,
2619 &ett_ieee1609dot2_AesCcmCiphertext,
2620 &ett_ieee1609dot2_SequenceOfCertificate,
2621 &ett_ieee1609dot2_CertificateBase,
2622 &ett_ieee1609dot2_IssuerIdentifier,
2623 &ett_ieee1609dot2_ToBeSignedCertificate,
2624 &ett_ieee1609dot2_CertificateId,
2625 &ett_ieee1609dot2_LinkageData,
2626 &ett_ieee1609dot2_EndEntityType,
2627 &ett_ieee1609dot2_PsidGroupPermissions,
2628 &ett_ieee1609dot2_SequenceOfPsidGroupPermissions,
2629 &ett_ieee1609dot2_SubjectPermissions,
2630 &ett_ieee1609dot2_VerificationKeyIndicator,
2632 /*--- End of included file: packet-ieee1609dot2-ettarr.c ---*/
2633 #line 72 "./asn1/ieee1609dot2/packet-ieee1609dot2-template.c"
2634 &ett_ieee1609dot2_ssp,
2637 /* Register protocol */
2638 proto_ieee1609dot2 = proto_register_protocol(PNAME, PSNAME, PFNAME);
2640 /* Register fields and subtrees */
2641 proto_register_field_array(proto_ieee1609dot2, hf, array_length(hf));
2642 proto_register_subtree_array(ett, array_length(ett));
2644 register_dissector("ieee1609dot2.data", dissect_Ieee1609Dot2Data_PDU, proto_ieee1609dot2);
2646 // See TS17419_ITS-AID_AssignedNumbers
2647 unsecured_data_subdissector_table = register_dissector_table("ieee1609dot2.psid",
2648 "ATS-AID/PSID based dissector for unsecured/signed data", proto_ieee1609dot2, FT_UINT32, BASE_HEX);
2649 ssp_subdissector_table = register_dissector_table("ieee1609dot2.ssp",
2650 "ATS-AID/PSID based dissector for Service Specific Permissions (SSP)", proto_ieee1609dot2, FT_UINT32, BASE_HEX);
2654 proto_reg_handoff_IEEE1609dot2(void)