Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-h235.c
blob4c467e38a18949c346069ef744803ec2e05a8892
1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
3 /* packet-h235.c */
4 /* asn2wrs.py -q -L -p h235 -c ./h235.cnf -s ./packet-h235-template -D . -O ../.. H235-SECURITY-MESSAGES.asn H235-SRTP.asn */
6 /* packet-h235.c
7 * Routines for H.235 packet dissection
8 * 2004 Tomas Kukosa
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
17 #include "config.h"
19 #include <epan/packet.h>
20 #include <epan/oids.h>
21 #include <epan/asn1.h>
22 #include <wsutil/array.h>
24 #include "packet-per.h"
25 #include "packet-h235.h"
26 #include "packet-h225.h"
28 #define PNAME "H235-SECURITY-MESSAGES"
29 #define PSNAME "H.235"
30 #define PFNAME "h235"
32 #define OID_MIKEY "0.0.8.235.0.3.76"
33 #define OID_MIKEY_PS "0.0.8.235.0.3.72"
34 #define OID_MIKEY_DHHMAC "0.0.8.235.0.3.73"
35 #define OID_MIKEY_PK_SIGN "0.0.8.235.0.3.74"
36 #define OID_MIKEY_DH_SIGN "0.0.8.235.0.3.75"
37 #define OID_TG "0.0.8.235.0.3.70"
38 #define OID_SG "0.0.8.235.0.3.71"
40 void proto_register_h235(void);
41 void proto_reg_handoff_h235(void);
43 /* Initialize the protocol and registered fields */
44 static int proto_h235;
45 static int hf_h235_SrtpCryptoCapability_PDU; /* SrtpCryptoCapability */
46 static int hf_h235_nonStandardIdentifier; /* OBJECT_IDENTIFIER */
47 static int hf_h235_data; /* OCTET_STRING */
48 static int hf_h235_halfkey; /* BIT_STRING_SIZE_0_2048 */
49 static int hf_h235_modSize; /* BIT_STRING_SIZE_0_2048 */
50 static int hf_h235_generator; /* BIT_STRING_SIZE_0_2048 */
51 static int hf_h235_x; /* BIT_STRING_SIZE_0_511 */
52 static int hf_h235_y; /* BIT_STRING_SIZE_0_511 */
53 static int hf_h235_eckasdhp; /* T_eckasdhp */
54 static int hf_h235_public_key; /* ECpoint */
55 static int hf_h235_modulus; /* BIT_STRING_SIZE_0_511 */
56 static int hf_h235_base; /* ECpoint */
57 static int hf_h235_weierstrassA; /* BIT_STRING_SIZE_0_511 */
58 static int hf_h235_weierstrassB; /* BIT_STRING_SIZE_0_511 */
59 static int hf_h235_eckasdh2; /* T_eckasdh2 */
60 static int hf_h235_fieldSize; /* BIT_STRING_SIZE_0_511 */
61 static int hf_h235_type; /* OBJECT_IDENTIFIER */
62 static int hf_h235_certificatedata; /* OCTET_STRING */
63 static int hf_h235_default; /* NULL */
64 static int hf_h235_radius; /* NULL */
65 static int hf_h235_dhExch; /* NULL */
66 static int hf_h235_pwdSymEnc; /* NULL */
67 static int hf_h235_pwdHash; /* NULL */
68 static int hf_h235_certSign; /* NULL */
69 static int hf_h235_ipsec; /* NULL */
70 static int hf_h235_tls; /* NULL */
71 static int hf_h235_nonStandard; /* NonStandardParameter */
72 static int hf_h235_authenticationBES; /* AuthenticationBES */
73 static int hf_h235_keyExch; /* OBJECT_IDENTIFIER */
74 static int hf_h235_tokenOID; /* OBJECT_IDENTIFIER */
75 static int hf_h235_timeStamp; /* TimeStamp */
76 static int hf_h235_password; /* Password */
77 static int hf_h235_dhkey; /* DHset */
78 static int hf_h235_challenge; /* ChallengeString */
79 static int hf_h235_random; /* RandomVal */
80 static int hf_h235_certificate; /* TypedCertificate */
81 static int hf_h235_generalID; /* Identifier */
82 static int hf_h235_eckasdhkey; /* ECKASDH */
83 static int hf_h235_sendersID; /* Identifier */
84 static int hf_h235_h235Key; /* H235Key */
85 static int hf_h235_profileInfo; /* SEQUENCE_OF_ProfileElement */
86 static int hf_h235_profileInfo_item; /* ProfileElement */
87 static int hf_h235_elementID; /* INTEGER_0_255 */
88 static int hf_h235_paramS; /* Params */
89 static int hf_h235_element; /* Element */
90 static int hf_h235_octets; /* OCTET_STRING */
91 static int hf_h235_integer; /* INTEGER */
92 static int hf_h235_bits; /* BIT_STRING */
93 static int hf_h235_name; /* BMPString */
94 static int hf_h235_flag; /* BOOLEAN */
95 static int hf_h235_toBeSigned; /* ToBeSigned */
96 static int hf_h235_algorithmOID; /* OBJECT_IDENTIFIER */
97 static int hf_h235_signaturedata; /* BIT_STRING */
98 static int hf_h235_encryptedData; /* OCTET_STRING */
99 static int hf_h235_hash; /* BIT_STRING */
100 static int hf_h235_ranInt; /* INTEGER */
101 static int hf_h235_iv8; /* IV8 */
102 static int hf_h235_iv16; /* IV16 */
103 static int hf_h235_iv; /* OCTET_STRING */
104 static int hf_h235_clearSalt; /* OCTET_STRING */
105 static int hf_h235_cryptoEncryptedToken; /* T_cryptoEncryptedToken */
106 static int hf_h235_encryptedToken; /* ENCRYPTED */
107 static int hf_h235_cryptoSignedToken; /* T_cryptoSignedToken */
108 static int hf_h235_signedToken; /* SIGNED */
109 static int hf_h235_cryptoHashedToken; /* T_cryptoHashedToken */
110 static int hf_h235_hashedVals; /* ClearToken */
111 static int hf_h235_hashedToken; /* HASHED */
112 static int hf_h235_cryptoPwdEncr; /* ENCRYPTED */
113 static int hf_h235_secureChannel; /* KeyMaterial */
114 static int hf_h235_sharedSecret; /* ENCRYPTED */
115 static int hf_h235_certProtectedKey; /* SIGNED */
116 static int hf_h235_secureSharedSecret; /* V3KeySyncMaterial */
117 static int hf_h235_encryptedSessionKey; /* OCTET_STRING */
118 static int hf_h235_encryptedSaltingKey; /* OCTET_STRING */
119 static int hf_h235_clearSaltingKey; /* OCTET_STRING */
120 static int hf_h235_paramSsalt; /* Params */
121 static int hf_h235_keyDerivationOID; /* OBJECT_IDENTIFIER */
122 static int hf_h235_genericKeyMaterial; /* OCTET_STRING */
123 static int hf_h235_SrtpCryptoCapability_item; /* SrtpCryptoInfo */
124 static int hf_h235_cryptoSuite; /* OBJECT_IDENTIFIER */
125 static int hf_h235_sessionParams; /* SrtpSessionParameters */
126 static int hf_h235_allowMKI; /* BOOLEAN */
127 static int hf_h235_SrtpKeys_item; /* SrtpKeyParameters */
128 static int hf_h235_masterKey; /* OCTET_STRING */
129 static int hf_h235_masterSalt; /* OCTET_STRING */
130 static int hf_h235_lifetime; /* T_lifetime */
131 static int hf_h235_powerOfTwo; /* INTEGER */
132 static int hf_h235_specific; /* INTEGER */
133 static int hf_h235_mki; /* T_mki */
134 static int hf_h235_length; /* INTEGER_1_128 */
135 static int hf_h235_value; /* OCTET_STRING */
136 static int hf_h235_kdr; /* INTEGER_0_24 */
137 static int hf_h235_unencryptedSrtp; /* BOOLEAN */
138 static int hf_h235_unencryptedSrtcp; /* BOOLEAN */
139 static int hf_h235_unauthenticatedSrtp; /* BOOLEAN */
140 static int hf_h235_fecOrder; /* FecOrder */
141 static int hf_h235_windowSizeHint; /* INTEGER_64_65535 */
142 static int hf_h235_newParameter; /* SEQUENCE_OF_GenericData */
143 static int hf_h235_newParameter_item; /* GenericData */
144 static int hf_h235_fecBeforeSrtp; /* NULL */
145 static int hf_h235_fecAfterSrtp; /* NULL */
147 /* Initialize the subtree pointers */
148 static int ett_h235_NonStandardParameter;
149 static int ett_h235_DHset;
150 static int ett_h235_ECpoint;
151 static int ett_h235_ECKASDH;
152 static int ett_h235_T_eckasdhp;
153 static int ett_h235_T_eckasdh2;
154 static int ett_h235_TypedCertificate;
155 static int ett_h235_AuthenticationBES;
156 static int ett_h235_AuthenticationMechanism;
157 static int ett_h235_ClearToken;
158 static int ett_h235_SEQUENCE_OF_ProfileElement;
159 static int ett_h235_ProfileElement;
160 static int ett_h235_Element;
161 static int ett_h235_SIGNED;
162 static int ett_h235_ENCRYPTED;
163 static int ett_h235_HASHED;
164 static int ett_h235_Params;
165 static int ett_h235_CryptoToken;
166 static int ett_h235_T_cryptoEncryptedToken;
167 static int ett_h235_T_cryptoSignedToken;
168 static int ett_h235_T_cryptoHashedToken;
169 static int ett_h235_H235Key;
170 static int ett_h235_V3KeySyncMaterial;
171 static int ett_h235_SrtpCryptoCapability;
172 static int ett_h235_SrtpCryptoInfo;
173 static int ett_h235_SrtpKeys;
174 static int ett_h235_SrtpKeyParameters;
175 static int ett_h235_T_lifetime;
176 static int ett_h235_T_mki;
177 static int ett_h235_SrtpSessionParameters;
178 static int ett_h235_SEQUENCE_OF_GenericData;
179 static int ett_h235_FecOrder;
182 static int
183 dissect_xxx_ToBeSigned(tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_) {
184 dissect_per_not_decoded_yet(tree, actx->pinfo, tvb, "ToBeSigned");
185 return offset;
190 static int
191 dissect_h235_ChallengeString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
192 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
193 8, 128, false, NULL);
195 return offset;
201 dissect_h235_TimeStamp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
202 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
203 1U, 4294967295U, NULL, false);
205 return offset;
210 static int
211 dissect_h235_RandomVal(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
212 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
214 return offset;
219 static int
220 dissect_h235_Password(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
221 offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index,
222 1, 128, false);
224 return offset;
229 static int
230 dissect_h235_Identifier(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
231 offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index,
232 1, 128, false);
234 return offset;
239 static int
240 dissect_h235_KeyMaterial(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
241 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
242 1, 2048, false, NULL, 0, NULL, NULL);
244 return offset;
249 static int
250 dissect_h235_OBJECT_IDENTIFIER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
251 offset = dissect_per_object_identifier(tvb, offset, actx, tree, hf_index, NULL);
253 return offset;
258 static int
259 dissect_h235_OCTET_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
260 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
261 NO_BOUND, NO_BOUND, false, NULL);
263 return offset;
267 static const per_sequence_t NonStandardParameter_sequence[] = {
268 { &hf_h235_nonStandardIdentifier, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
269 { &hf_h235_data , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
270 { NULL, 0, 0, NULL }
273 static int
274 dissect_h235_NonStandardParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
275 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
276 ett_h235_NonStandardParameter, NonStandardParameter_sequence);
278 return offset;
283 static int
284 dissect_h235_BIT_STRING_SIZE_0_2048(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
285 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
286 0, 2048, false, NULL, 0, NULL, NULL);
288 return offset;
292 static const per_sequence_t DHset_sequence[] = {
293 { &hf_h235_halfkey , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_2048 },
294 { &hf_h235_modSize , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_2048 },
295 { &hf_h235_generator , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_2048 },
296 { NULL, 0, 0, NULL }
299 static int
300 dissect_h235_DHset(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
301 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
302 ett_h235_DHset, DHset_sequence);
304 return offset;
309 static int
310 dissect_h235_BIT_STRING_SIZE_0_511(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
311 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
312 0, 511, false, NULL, 0, NULL, NULL);
314 return offset;
318 static const per_sequence_t ECpoint_sequence[] = {
319 { &hf_h235_x , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BIT_STRING_SIZE_0_511 },
320 { &hf_h235_y , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BIT_STRING_SIZE_0_511 },
321 { NULL, 0, 0, NULL }
324 static int
325 dissect_h235_ECpoint(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
326 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
327 ett_h235_ECpoint, ECpoint_sequence);
329 return offset;
333 static const per_sequence_t T_eckasdhp_sequence[] = {
334 { &hf_h235_public_key , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ECpoint },
335 { &hf_h235_modulus , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
336 { &hf_h235_base , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ECpoint },
337 { &hf_h235_weierstrassA , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
338 { &hf_h235_weierstrassB , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
339 { NULL, 0, 0, NULL }
342 static int
343 dissect_h235_T_eckasdhp(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
344 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
345 ett_h235_T_eckasdhp, T_eckasdhp_sequence);
347 return offset;
351 static const per_sequence_t T_eckasdh2_sequence[] = {
352 { &hf_h235_public_key , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ECpoint },
353 { &hf_h235_fieldSize , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
354 { &hf_h235_base , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ECpoint },
355 { &hf_h235_weierstrassA , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
356 { &hf_h235_weierstrassB , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING_SIZE_0_511 },
357 { NULL, 0, 0, NULL }
360 static int
361 dissect_h235_T_eckasdh2(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
362 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
363 ett_h235_T_eckasdh2, T_eckasdh2_sequence);
365 return offset;
369 static const value_string h235_ECKASDH_vals[] = {
370 { 0, "eckasdhp" },
371 { 1, "eckasdh2" },
372 { 0, NULL }
375 static const per_choice_t ECKASDH_choice[] = {
376 { 0, &hf_h235_eckasdhp , ASN1_EXTENSION_ROOT , dissect_h235_T_eckasdhp },
377 { 1, &hf_h235_eckasdh2 , ASN1_EXTENSION_ROOT , dissect_h235_T_eckasdh2 },
378 { 0, NULL, 0, NULL }
381 static int
382 dissect_h235_ECKASDH(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
383 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
384 ett_h235_ECKASDH, ECKASDH_choice,
385 NULL);
387 return offset;
391 static const per_sequence_t TypedCertificate_sequence[] = {
392 { &hf_h235_type , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
393 { &hf_h235_certificatedata, ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
394 { NULL, 0, 0, NULL }
397 static int
398 dissect_h235_TypedCertificate(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
399 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
400 ett_h235_TypedCertificate, TypedCertificate_sequence);
402 return offset;
407 static int
408 dissect_h235_NULL(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
409 offset = dissect_per_null(tvb, offset, actx, tree, hf_index);
411 return offset;
415 static const value_string h235_AuthenticationBES_vals[] = {
416 { 0, "default" },
417 { 1, "radius" },
418 { 0, NULL }
421 static const per_choice_t AuthenticationBES_choice[] = {
422 { 0, &hf_h235_default , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
423 { 1, &hf_h235_radius , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
424 { 0, NULL, 0, NULL }
427 static int
428 dissect_h235_AuthenticationBES(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
429 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
430 ett_h235_AuthenticationBES, AuthenticationBES_choice,
431 NULL);
433 return offset;
437 const value_string h235_AuthenticationMechanism_vals[] = {
438 { 0, "dhExch" },
439 { 1, "pwdSymEnc" },
440 { 2, "pwdHash" },
441 { 3, "certSign" },
442 { 4, "ipsec" },
443 { 5, "tls" },
444 { 6, "nonStandard" },
445 { 7, "authenticationBES" },
446 { 8, "keyExch" },
447 { 0, NULL }
450 static const per_choice_t AuthenticationMechanism_choice[] = {
451 { 0, &hf_h235_dhExch , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
452 { 1, &hf_h235_pwdSymEnc , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
453 { 2, &hf_h235_pwdHash , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
454 { 3, &hf_h235_certSign , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
455 { 4, &hf_h235_ipsec , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
456 { 5, &hf_h235_tls , ASN1_EXTENSION_ROOT , dissect_h235_NULL },
457 { 6, &hf_h235_nonStandard , ASN1_EXTENSION_ROOT , dissect_h235_NonStandardParameter },
458 { 7, &hf_h235_authenticationBES, ASN1_NOT_EXTENSION_ROOT, dissect_h235_AuthenticationBES },
459 { 8, &hf_h235_keyExch , ASN1_NOT_EXTENSION_ROOT, dissect_h235_OBJECT_IDENTIFIER },
460 { 0, NULL, 0, NULL }
464 dissect_h235_AuthenticationMechanism(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
465 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
466 ett_h235_AuthenticationMechanism, AuthenticationMechanism_choice,
467 NULL);
469 return offset;
474 static int
475 dissect_h235_INTEGER(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
476 offset = dissect_per_integer(tvb, offset, actx, tree, hf_index, NULL);
478 return offset;
483 static int
484 dissect_h235_IV8(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
485 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
486 8, 8, false, NULL);
488 return offset;
493 static int
494 dissect_h235_IV16(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
495 offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
496 16, 16, false, NULL);
498 return offset;
502 static const per_sequence_t Params_sequence[] = {
503 { &hf_h235_ranInt , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_INTEGER },
504 { &hf_h235_iv8 , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_IV8 },
505 { &hf_h235_iv16 , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_IV16 },
506 { &hf_h235_iv , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
507 { &hf_h235_clearSalt , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
508 { NULL, 0, 0, NULL }
511 static int
512 dissect_h235_Params(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
513 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
514 ett_h235_Params, Params_sequence);
516 return offset;
520 static const per_sequence_t ENCRYPTED_sequence[] = {
521 { &hf_h235_algorithmOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
522 { &hf_h235_paramS , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_Params },
523 { &hf_h235_encryptedData , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
524 { NULL, 0, 0, NULL }
528 dissect_h235_ENCRYPTED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
529 proto_item *hidden_item;
530 hidden_item = proto_tree_add_item(tree, proto_h235, tvb, offset>>3, 0, ENC_NA);
531 proto_item_set_hidden(hidden_item);
532 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
533 ett_h235_ENCRYPTED, ENCRYPTED_sequence);
535 return offset;
540 static int
541 dissect_h235_BIT_STRING(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
542 offset = dissect_per_bit_string(tvb, offset, actx, tree, hf_index,
543 NO_BOUND, NO_BOUND, false, NULL, 0, NULL, NULL);
545 return offset;
549 static const per_sequence_t SIGNED_sequence[] = {
550 { &hf_h235_toBeSigned , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_xxx_ToBeSigned },
551 { &hf_h235_algorithmOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
552 { &hf_h235_paramS , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_Params },
553 { &hf_h235_signaturedata , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING },
554 { NULL, 0, 0, NULL }
558 dissect_h235_SIGNED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
559 proto_item *hidden_item;
560 hidden_item = proto_tree_add_item(tree, proto_h235, tvb, offset>>3, 0, ENC_NA);
561 proto_item_set_hidden(hidden_item);
562 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
563 ett_h235_SIGNED, SIGNED_sequence);
565 return offset;
569 static const per_sequence_t V3KeySyncMaterial_sequence[] = {
570 { &hf_h235_generalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Identifier },
571 { &hf_h235_algorithmOID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OBJECT_IDENTIFIER },
572 { &hf_h235_paramS , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_Params },
573 { &hf_h235_encryptedSessionKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
574 { &hf_h235_encryptedSaltingKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
575 { &hf_h235_clearSaltingKey, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
576 { &hf_h235_paramSsalt , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Params },
577 { &hf_h235_keyDerivationOID, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OBJECT_IDENTIFIER },
578 { &hf_h235_genericKeyMaterial, ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_OCTET_STRING },
579 { NULL, 0, 0, NULL }
582 static int
583 dissect_h235_V3KeySyncMaterial(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
584 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
585 ett_h235_V3KeySyncMaterial, V3KeySyncMaterial_sequence);
587 return offset;
591 static const value_string h235_H235Key_vals[] = {
592 { 0, "secureChannel" },
593 { 1, "sharedSecret" },
594 { 2, "certProtectedKey" },
595 { 3, "secureSharedSecret" },
596 { 0, NULL }
599 static const per_choice_t H235Key_choice[] = {
600 { 0, &hf_h235_secureChannel , ASN1_EXTENSION_ROOT , dissect_h235_KeyMaterial },
601 { 1, &hf_h235_sharedSecret , ASN1_EXTENSION_ROOT , dissect_h235_ENCRYPTED },
602 { 2, &hf_h235_certProtectedKey, ASN1_EXTENSION_ROOT , dissect_h235_SIGNED },
603 { 3, &hf_h235_secureSharedSecret, ASN1_NOT_EXTENSION_ROOT, dissect_h235_V3KeySyncMaterial },
604 { 0, NULL, 0, NULL }
607 static int
608 dissect_h235_H235Key(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
609 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
610 ett_h235_H235Key, H235Key_choice,
611 NULL);
613 return offset;
618 static int
619 dissect_h235_INTEGER_0_255(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
620 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
621 0U, 255U, NULL, false);
623 return offset;
628 static int
629 dissect_h235_BMPString(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
630 offset = dissect_per_BMPString(tvb, offset, actx, tree, hf_index,
631 NO_BOUND, NO_BOUND, false);
633 return offset;
638 static int
639 dissect_h235_BOOLEAN(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
640 offset = dissect_per_boolean(tvb, offset, actx, tree, hf_index, NULL);
642 return offset;
646 static const value_string h235_Element_vals[] = {
647 { 0, "octets" },
648 { 1, "integer" },
649 { 2, "bits" },
650 { 3, "name" },
651 { 4, "flag" },
652 { 0, NULL }
655 static const per_choice_t Element_choice[] = {
656 { 0, &hf_h235_octets , ASN1_EXTENSION_ROOT , dissect_h235_OCTET_STRING },
657 { 1, &hf_h235_integer , ASN1_EXTENSION_ROOT , dissect_h235_INTEGER },
658 { 2, &hf_h235_bits , ASN1_EXTENSION_ROOT , dissect_h235_BIT_STRING },
659 { 3, &hf_h235_name , ASN1_EXTENSION_ROOT , dissect_h235_BMPString },
660 { 4, &hf_h235_flag , ASN1_EXTENSION_ROOT , dissect_h235_BOOLEAN },
661 { 0, NULL, 0, NULL }
664 static int
665 dissect_h235_Element(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
666 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
667 ett_h235_Element, Element_choice,
668 NULL);
670 return offset;
674 static const per_sequence_t ProfileElement_sequence[] = {
675 { &hf_h235_elementID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_INTEGER_0_255 },
676 { &hf_h235_paramS , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Params },
677 { &hf_h235_element , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Element },
678 { NULL, 0, 0, NULL }
681 static int
682 dissect_h235_ProfileElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
683 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
684 ett_h235_ProfileElement, ProfileElement_sequence);
686 return offset;
690 static const per_sequence_t SEQUENCE_OF_ProfileElement_sequence_of[1] = {
691 { &hf_h235_profileInfo_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ProfileElement },
694 static int
695 dissect_h235_SEQUENCE_OF_ProfileElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
696 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
697 ett_h235_SEQUENCE_OF_ProfileElement, SEQUENCE_OF_ProfileElement_sequence_of);
699 return offset;
703 static const per_sequence_t ClearToken_sequence[] = {
704 { &hf_h235_tokenOID , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
705 { &hf_h235_timeStamp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_TimeStamp },
706 { &hf_h235_password , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Password },
707 { &hf_h235_dhkey , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_DHset },
708 { &hf_h235_challenge , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_ChallengeString },
709 { &hf_h235_random , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_RandomVal },
710 { &hf_h235_certificate , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_TypedCertificate },
711 { &hf_h235_generalID , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_Identifier },
712 { &hf_h235_nonStandard , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_NonStandardParameter },
713 { &hf_h235_eckasdhkey , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_ECKASDH },
714 { &hf_h235_sendersID , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_Identifier },
715 { &hf_h235_h235Key , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_H235Key },
716 { &hf_h235_profileInfo , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL , dissect_h235_SEQUENCE_OF_ProfileElement },
717 { NULL, 0, 0, NULL }
721 dissect_h235_ClearToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
722 proto_item *hidden_item;
723 hidden_item = proto_tree_add_item(tree, proto_h235, tvb, offset>>3, 0, ENC_NA);
724 proto_item_set_hidden(hidden_item);
725 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
726 ett_h235_ClearToken, ClearToken_sequence);
728 return offset;
732 static const per_sequence_t HASHED_sequence[] = {
733 { &hf_h235_algorithmOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
734 { &hf_h235_paramS , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_Params },
735 { &hf_h235_hash , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_BIT_STRING },
736 { NULL, 0, 0, NULL }
740 dissect_h235_HASHED(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
741 proto_item *hidden_item;
742 hidden_item = proto_tree_add_item(tree, proto_h235, tvb, offset>>3, 0, ENC_NA);
743 proto_item_set_hidden(hidden_item);
744 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
745 ett_h235_HASHED, HASHED_sequence);
747 return offset;
751 static const per_sequence_t T_cryptoEncryptedToken_sequence[] = {
752 { &hf_h235_tokenOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
753 { &hf_h235_encryptedToken , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ENCRYPTED },
754 { NULL, 0, 0, NULL }
757 static int
758 dissect_h235_T_cryptoEncryptedToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
759 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
760 ett_h235_T_cryptoEncryptedToken, T_cryptoEncryptedToken_sequence);
762 return offset;
766 static const per_sequence_t T_cryptoSignedToken_sequence[] = {
767 { &hf_h235_tokenOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
768 { &hf_h235_signedToken , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_SIGNED },
769 { NULL, 0, 0, NULL }
772 static int
773 dissect_h235_T_cryptoSignedToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
774 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
775 ett_h235_T_cryptoSignedToken, T_cryptoSignedToken_sequence);
777 return offset;
781 static const per_sequence_t T_cryptoHashedToken_sequence[] = {
782 { &hf_h235_tokenOID , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_OBJECT_IDENTIFIER },
783 { &hf_h235_hashedVals , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_ClearToken },
784 { &hf_h235_hashedToken , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_HASHED },
785 { NULL, 0, 0, NULL }
788 static int
789 dissect_h235_T_cryptoHashedToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
790 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
791 ett_h235_T_cryptoHashedToken, T_cryptoHashedToken_sequence);
793 return offset;
797 const value_string h235_CryptoToken_vals[] = {
798 { 0, "cryptoEncryptedToken" },
799 { 1, "cryptoSignedToken" },
800 { 2, "cryptoHashedToken" },
801 { 3, "cryptoPwdEncr" },
802 { 0, NULL }
805 static const per_choice_t CryptoToken_choice[] = {
806 { 0, &hf_h235_cryptoEncryptedToken, ASN1_EXTENSION_ROOT , dissect_h235_T_cryptoEncryptedToken },
807 { 1, &hf_h235_cryptoSignedToken, ASN1_EXTENSION_ROOT , dissect_h235_T_cryptoSignedToken },
808 { 2, &hf_h235_cryptoHashedToken, ASN1_EXTENSION_ROOT , dissect_h235_T_cryptoHashedToken },
809 { 3, &hf_h235_cryptoPwdEncr , ASN1_EXTENSION_ROOT , dissect_h235_ENCRYPTED },
810 { 0, NULL, 0, NULL }
814 dissect_h235_CryptoToken(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
815 proto_item *hidden_item;
816 hidden_item = proto_tree_add_item(tree, proto_h235, tvb, offset>>3, 0, ENC_NA);
817 proto_item_set_hidden(hidden_item);
818 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
819 ett_h235_CryptoToken, CryptoToken_choice,
820 NULL);
822 return offset;
827 static int
828 dissect_h235_INTEGER_0_24(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
829 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
830 0U, 24U, NULL, false);
832 return offset;
836 static const per_sequence_t FecOrder_sequence[] = {
837 { &hf_h235_fecBeforeSrtp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_NULL },
838 { &hf_h235_fecAfterSrtp , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_NULL },
839 { NULL, 0, 0, NULL }
842 static int
843 dissect_h235_FecOrder(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
844 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
845 ett_h235_FecOrder, FecOrder_sequence);
847 return offset;
852 static int
853 dissect_h235_INTEGER_64_65535(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
854 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
855 64U, 65535U, NULL, false);
857 return offset;
861 static const per_sequence_t SEQUENCE_OF_GenericData_sequence_of[1] = {
862 { &hf_h235_newParameter_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h225_GenericData },
865 static int
866 dissect_h235_SEQUENCE_OF_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
867 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
868 ett_h235_SEQUENCE_OF_GenericData, SEQUENCE_OF_GenericData_sequence_of);
870 return offset;
874 static const per_sequence_t SrtpSessionParameters_sequence[] = {
875 { &hf_h235_kdr , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_INTEGER_0_24 },
876 { &hf_h235_unencryptedSrtp, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BOOLEAN },
877 { &hf_h235_unencryptedSrtcp, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BOOLEAN },
878 { &hf_h235_unauthenticatedSrtp, ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BOOLEAN },
879 { &hf_h235_fecOrder , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_FecOrder },
880 { &hf_h235_windowSizeHint , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_INTEGER_64_65535 },
881 { &hf_h235_newParameter , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_SEQUENCE_OF_GenericData },
882 { NULL, 0, 0, NULL }
885 static int
886 dissect_h235_SrtpSessionParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
887 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
888 ett_h235_SrtpSessionParameters, SrtpSessionParameters_sequence);
890 return offset;
894 static const per_sequence_t SrtpCryptoInfo_sequence[] = {
895 { &hf_h235_cryptoSuite , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_OBJECT_IDENTIFIER },
896 { &hf_h235_sessionParams , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_SrtpSessionParameters },
897 { &hf_h235_allowMKI , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_BOOLEAN },
898 { NULL, 0, 0, NULL }
901 static int
902 dissect_h235_SrtpCryptoInfo(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
903 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
904 ett_h235_SrtpCryptoInfo, SrtpCryptoInfo_sequence);
906 return offset;
910 static const per_sequence_t SrtpCryptoCapability_sequence_of[1] = {
911 { &hf_h235_SrtpCryptoCapability_item, ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_SrtpCryptoInfo },
914 static int
915 dissect_h235_SrtpCryptoCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
916 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
917 ett_h235_SrtpCryptoCapability, SrtpCryptoCapability_sequence_of);
919 return offset;
923 static const value_string h235_T_lifetime_vals[] = {
924 { 0, "powerOfTwo" },
925 { 1, "specific" },
926 { 0, NULL }
929 static const per_choice_t T_lifetime_choice[] = {
930 { 0, &hf_h235_powerOfTwo , ASN1_EXTENSION_ROOT , dissect_h235_INTEGER },
931 { 1, &hf_h235_specific , ASN1_EXTENSION_ROOT , dissect_h235_INTEGER },
932 { 0, NULL, 0, NULL }
935 static int
936 dissect_h235_T_lifetime(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
937 offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
938 ett_h235_T_lifetime, T_lifetime_choice,
939 NULL);
941 return offset;
946 static int
947 dissect_h235_INTEGER_1_128(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
948 offset = dissect_per_constrained_integer(tvb, offset, actx, tree, hf_index,
949 1U, 128U, NULL, false);
951 return offset;
955 static const per_sequence_t T_mki_sequence[] = {
956 { &hf_h235_length , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_INTEGER_1_128 },
957 { &hf_h235_value , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
958 { NULL, 0, 0, NULL }
961 static int
962 dissect_h235_T_mki(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
963 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
964 ett_h235_T_mki, T_mki_sequence);
966 return offset;
970 static const per_sequence_t SrtpKeyParameters_sequence[] = {
971 { &hf_h235_masterKey , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
972 { &hf_h235_masterSalt , ASN1_EXTENSION_ROOT , ASN1_NOT_OPTIONAL, dissect_h235_OCTET_STRING },
973 { &hf_h235_lifetime , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_T_lifetime },
974 { &hf_h235_mki , ASN1_EXTENSION_ROOT , ASN1_OPTIONAL , dissect_h235_T_mki },
975 { NULL, 0, 0, NULL }
978 static int
979 dissect_h235_SrtpKeyParameters(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
980 offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
981 ett_h235_SrtpKeyParameters, SrtpKeyParameters_sequence);
983 return offset;
987 static const per_sequence_t SrtpKeys_sequence_of[1] = {
988 { &hf_h235_SrtpKeys_item , ASN1_NO_EXTENSIONS , ASN1_NOT_OPTIONAL, dissect_h235_SrtpKeyParameters },
992 dissect_h235_SrtpKeys(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
993 offset = dissect_per_sequence_of(tvb, offset, actx, tree, hf_index,
994 ett_h235_SrtpKeys, SrtpKeys_sequence_of);
996 return offset;
999 /*--- PDUs ---*/
1001 static int dissect_SrtpCryptoCapability_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
1002 int offset = 0;
1003 asn1_ctx_t asn1_ctx;
1004 asn1_ctx_init(&asn1_ctx, ASN1_ENC_PER, true, pinfo);
1005 offset = dissect_h235_SrtpCryptoCapability(tvb, offset, &asn1_ctx, tree, hf_h235_SrtpCryptoCapability_PDU);
1006 offset += 7; offset >>= 3;
1007 return offset;
1012 /*--- proto_register_h235 ----------------------------------------------*/
1013 void proto_register_h235(void) {
1015 /* List of fields */
1016 static hf_register_info hf[] = {
1017 { &hf_h235_SrtpCryptoCapability_PDU,
1018 { "SrtpCryptoCapability", "h235.SrtpCryptoCapability",
1019 FT_UINT32, BASE_DEC, NULL, 0,
1020 NULL, HFILL }},
1021 { &hf_h235_nonStandardIdentifier,
1022 { "nonStandardIdentifier", "h235.nonStandardIdentifier",
1023 FT_OID, BASE_NONE, NULL, 0,
1024 "OBJECT_IDENTIFIER", HFILL }},
1025 { &hf_h235_data,
1026 { "data", "h235.data",
1027 FT_UINT32, BASE_DEC, NULL, 0,
1028 "OCTET_STRING", HFILL }},
1029 { &hf_h235_halfkey,
1030 { "halfkey", "h235.halfkey",
1031 FT_BYTES, BASE_NONE, NULL, 0,
1032 "BIT_STRING_SIZE_0_2048", HFILL }},
1033 { &hf_h235_modSize,
1034 { "modSize", "h235.modSize",
1035 FT_BYTES, BASE_NONE, NULL, 0,
1036 "BIT_STRING_SIZE_0_2048", HFILL }},
1037 { &hf_h235_generator,
1038 { "generator", "h235.generator",
1039 FT_BYTES, BASE_NONE, NULL, 0,
1040 "BIT_STRING_SIZE_0_2048", HFILL }},
1041 { &hf_h235_x,
1042 { "x", "h235.x",
1043 FT_BYTES, BASE_NONE, NULL, 0,
1044 "BIT_STRING_SIZE_0_511", HFILL }},
1045 { &hf_h235_y,
1046 { "y", "h235.y",
1047 FT_BYTES, BASE_NONE, NULL, 0,
1048 "BIT_STRING_SIZE_0_511", HFILL }},
1049 { &hf_h235_eckasdhp,
1050 { "eckasdhp", "h235.eckasdhp_element",
1051 FT_NONE, BASE_NONE, NULL, 0,
1052 NULL, HFILL }},
1053 { &hf_h235_public_key,
1054 { "public-key", "h235.public_key_element",
1055 FT_NONE, BASE_NONE, NULL, 0,
1056 "ECpoint", HFILL }},
1057 { &hf_h235_modulus,
1058 { "modulus", "h235.modulus",
1059 FT_BYTES, BASE_NONE, NULL, 0,
1060 "BIT_STRING_SIZE_0_511", HFILL }},
1061 { &hf_h235_base,
1062 { "base", "h235.base_element",
1063 FT_NONE, BASE_NONE, NULL, 0,
1064 "ECpoint", HFILL }},
1065 { &hf_h235_weierstrassA,
1066 { "weierstrassA", "h235.weierstrassA",
1067 FT_BYTES, BASE_NONE, NULL, 0,
1068 "BIT_STRING_SIZE_0_511", HFILL }},
1069 { &hf_h235_weierstrassB,
1070 { "weierstrassB", "h235.weierstrassB",
1071 FT_BYTES, BASE_NONE, NULL, 0,
1072 "BIT_STRING_SIZE_0_511", HFILL }},
1073 { &hf_h235_eckasdh2,
1074 { "eckasdh2", "h235.eckasdh2_element",
1075 FT_NONE, BASE_NONE, NULL, 0,
1076 NULL, HFILL }},
1077 { &hf_h235_fieldSize,
1078 { "fieldSize", "h235.fieldSize",
1079 FT_BYTES, BASE_NONE, NULL, 0,
1080 "BIT_STRING_SIZE_0_511", HFILL }},
1081 { &hf_h235_type,
1082 { "type", "h235.type",
1083 FT_OID, BASE_NONE, NULL, 0,
1084 "OBJECT_IDENTIFIER", HFILL }},
1085 { &hf_h235_certificatedata,
1086 { "certificate", "h235.certificate",
1087 FT_BYTES, BASE_NONE, NULL, 0,
1088 "OCTET_STRING", HFILL }},
1089 { &hf_h235_default,
1090 { "default", "h235.default_element",
1091 FT_NONE, BASE_NONE, NULL, 0,
1092 NULL, HFILL }},
1093 { &hf_h235_radius,
1094 { "radius", "h235.radius_element",
1095 FT_NONE, BASE_NONE, NULL, 0,
1096 NULL, HFILL }},
1097 { &hf_h235_dhExch,
1098 { "dhExch", "h235.dhExch_element",
1099 FT_NONE, BASE_NONE, NULL, 0,
1100 NULL, HFILL }},
1101 { &hf_h235_pwdSymEnc,
1102 { "pwdSymEnc", "h235.pwdSymEnc_element",
1103 FT_NONE, BASE_NONE, NULL, 0,
1104 NULL, HFILL }},
1105 { &hf_h235_pwdHash,
1106 { "pwdHash", "h235.pwdHash_element",
1107 FT_NONE, BASE_NONE, NULL, 0,
1108 NULL, HFILL }},
1109 { &hf_h235_certSign,
1110 { "certSign", "h235.certSign_element",
1111 FT_NONE, BASE_NONE, NULL, 0,
1112 NULL, HFILL }},
1113 { &hf_h235_ipsec,
1114 { "ipsec", "h235.ipsec_element",
1115 FT_NONE, BASE_NONE, NULL, 0,
1116 NULL, HFILL }},
1117 { &hf_h235_tls,
1118 { "tls", "h235.tls_element",
1119 FT_NONE, BASE_NONE, NULL, 0,
1120 NULL, HFILL }},
1121 { &hf_h235_nonStandard,
1122 { "nonStandard", "h235.nonStandard_element",
1123 FT_NONE, BASE_NONE, NULL, 0,
1124 "NonStandardParameter", HFILL }},
1125 { &hf_h235_authenticationBES,
1126 { "authenticationBES", "h235.authenticationBES",
1127 FT_UINT32, BASE_DEC, VALS(h235_AuthenticationBES_vals), 0,
1128 NULL, HFILL }},
1129 { &hf_h235_keyExch,
1130 { "keyExch", "h235.keyExch",
1131 FT_OID, BASE_NONE, NULL, 0,
1132 "OBJECT_IDENTIFIER", HFILL }},
1133 { &hf_h235_tokenOID,
1134 { "tokenOID", "h235.tokenOID",
1135 FT_OID, BASE_NONE, NULL, 0,
1136 "OBJECT_IDENTIFIER", HFILL }},
1137 { &hf_h235_timeStamp,
1138 { "timeStamp", "h235.timeStamp",
1139 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0,
1140 NULL, HFILL }},
1141 { &hf_h235_password,
1142 { "password", "h235.password",
1143 FT_STRING, BASE_NONE, NULL, 0,
1144 NULL, HFILL }},
1145 { &hf_h235_dhkey,
1146 { "dhkey", "h235.dhkey_element",
1147 FT_NONE, BASE_NONE, NULL, 0,
1148 "DHset", HFILL }},
1149 { &hf_h235_challenge,
1150 { "challenge", "h235.challenge",
1151 FT_BYTES, BASE_NONE, NULL, 0,
1152 "ChallengeString", HFILL }},
1153 { &hf_h235_random,
1154 { "random", "h235.random",
1155 FT_INT32, BASE_DEC, NULL, 0,
1156 "RandomVal", HFILL }},
1157 { &hf_h235_certificate,
1158 { "certificate", "h235.certificate_element",
1159 FT_NONE, BASE_NONE, NULL, 0,
1160 "TypedCertificate", HFILL }},
1161 { &hf_h235_generalID,
1162 { "generalID", "h235.generalID",
1163 FT_STRING, BASE_NONE, NULL, 0,
1164 "Identifier", HFILL }},
1165 { &hf_h235_eckasdhkey,
1166 { "eckasdhkey", "h235.eckasdhkey",
1167 FT_UINT32, BASE_DEC, VALS(h235_ECKASDH_vals), 0,
1168 "ECKASDH", HFILL }},
1169 { &hf_h235_sendersID,
1170 { "sendersID", "h235.sendersID",
1171 FT_STRING, BASE_NONE, NULL, 0,
1172 "Identifier", HFILL }},
1173 { &hf_h235_h235Key,
1174 { "h235Key", "h235.h235Key",
1175 FT_UINT32, BASE_DEC, VALS(h235_H235Key_vals), 0,
1176 NULL, HFILL }},
1177 { &hf_h235_profileInfo,
1178 { "profileInfo", "h235.profileInfo",
1179 FT_UINT32, BASE_DEC, NULL, 0,
1180 "SEQUENCE_OF_ProfileElement", HFILL }},
1181 { &hf_h235_profileInfo_item,
1182 { "ProfileElement", "h235.ProfileElement_element",
1183 FT_NONE, BASE_NONE, NULL, 0,
1184 NULL, HFILL }},
1185 { &hf_h235_elementID,
1186 { "elementID", "h235.elementID",
1187 FT_UINT32, BASE_DEC, NULL, 0,
1188 "INTEGER_0_255", HFILL }},
1189 { &hf_h235_paramS,
1190 { "paramS", "h235.paramS_element",
1191 FT_NONE, BASE_NONE, NULL, 0,
1192 NULL, HFILL }},
1193 { &hf_h235_element,
1194 { "element", "h235.element",
1195 FT_UINT32, BASE_DEC, VALS(h235_Element_vals), 0,
1196 NULL, HFILL }},
1197 { &hf_h235_octets,
1198 { "octets", "h235.octets",
1199 FT_BYTES, BASE_NONE, NULL, 0,
1200 "OCTET_STRING", HFILL }},
1201 { &hf_h235_integer,
1202 { "integer", "h235.integer",
1203 FT_INT32, BASE_DEC, NULL, 0,
1204 NULL, HFILL }},
1205 { &hf_h235_bits,
1206 { "bits", "h235.bits",
1207 FT_BYTES, BASE_NONE, NULL, 0,
1208 "BIT_STRING", HFILL }},
1209 { &hf_h235_name,
1210 { "name", "h235.name",
1211 FT_STRING, BASE_NONE, NULL, 0,
1212 "BMPString", HFILL }},
1213 { &hf_h235_flag,
1214 { "flag", "h235.flag",
1215 FT_BOOLEAN, BASE_NONE, NULL, 0,
1216 "BOOLEAN", HFILL }},
1217 { &hf_h235_toBeSigned,
1218 { "toBeSigned", "h235.toBeSigned_element",
1219 FT_NONE, BASE_NONE, NULL, 0,
1220 NULL, HFILL }},
1221 { &hf_h235_algorithmOID,
1222 { "algorithmOID", "h235.algorithmOID",
1223 FT_OID, BASE_NONE, NULL, 0,
1224 "OBJECT_IDENTIFIER", HFILL }},
1225 { &hf_h235_signaturedata,
1226 { "signature", "h235.signature",
1227 FT_BYTES, BASE_NONE, NULL, 0,
1228 "BIT_STRING", HFILL }},
1229 { &hf_h235_encryptedData,
1230 { "encryptedData", "h235.encryptedData",
1231 FT_BYTES, BASE_NONE, NULL, 0,
1232 "OCTET_STRING", HFILL }},
1233 { &hf_h235_hash,
1234 { "hash", "h235.hash",
1235 FT_BYTES, BASE_NONE, NULL, 0,
1236 "BIT_STRING", HFILL }},
1237 { &hf_h235_ranInt,
1238 { "ranInt", "h235.ranInt",
1239 FT_INT32, BASE_DEC, NULL, 0,
1240 "INTEGER", HFILL }},
1241 { &hf_h235_iv8,
1242 { "iv8", "h235.iv8",
1243 FT_BYTES, BASE_NONE, NULL, 0,
1244 NULL, HFILL }},
1245 { &hf_h235_iv16,
1246 { "iv16", "h235.iv16",
1247 FT_BYTES, BASE_NONE, NULL, 0,
1248 NULL, HFILL }},
1249 { &hf_h235_iv,
1250 { "iv", "h235.iv",
1251 FT_BYTES, BASE_NONE, NULL, 0,
1252 "OCTET_STRING", HFILL }},
1253 { &hf_h235_clearSalt,
1254 { "clearSalt", "h235.clearSalt",
1255 FT_BYTES, BASE_NONE, NULL, 0,
1256 "OCTET_STRING", HFILL }},
1257 { &hf_h235_cryptoEncryptedToken,
1258 { "cryptoEncryptedToken", "h235.cryptoEncryptedToken_element",
1259 FT_NONE, BASE_NONE, NULL, 0,
1260 NULL, HFILL }},
1261 { &hf_h235_encryptedToken,
1262 { "token", "h235.token_element",
1263 FT_NONE, BASE_NONE, NULL, 0,
1264 "ENCRYPTED", HFILL }},
1265 { &hf_h235_cryptoSignedToken,
1266 { "cryptoSignedToken", "h235.cryptoSignedToken_element",
1267 FT_NONE, BASE_NONE, NULL, 0,
1268 NULL, HFILL }},
1269 { &hf_h235_signedToken,
1270 { "token", "h235.token_element",
1271 FT_NONE, BASE_NONE, NULL, 0,
1272 "SIGNED", HFILL }},
1273 { &hf_h235_cryptoHashedToken,
1274 { "cryptoHashedToken", "h235.cryptoHashedToken_element",
1275 FT_NONE, BASE_NONE, NULL, 0,
1276 NULL, HFILL }},
1277 { &hf_h235_hashedVals,
1278 { "hashedVals", "h235.hashedVals_element",
1279 FT_NONE, BASE_NONE, NULL, 0,
1280 "ClearToken", HFILL }},
1281 { &hf_h235_hashedToken,
1282 { "token", "h235.token_element",
1283 FT_NONE, BASE_NONE, NULL, 0,
1284 "HASHED", HFILL }},
1285 { &hf_h235_cryptoPwdEncr,
1286 { "cryptoPwdEncr", "h235.cryptoPwdEncr_element",
1287 FT_NONE, BASE_NONE, NULL, 0,
1288 "ENCRYPTED", HFILL }},
1289 { &hf_h235_secureChannel,
1290 { "secureChannel", "h235.secureChannel",
1291 FT_BYTES, BASE_NONE, NULL, 0,
1292 "KeyMaterial", HFILL }},
1293 { &hf_h235_sharedSecret,
1294 { "sharedSecret", "h235.sharedSecret_element",
1295 FT_NONE, BASE_NONE, NULL, 0,
1296 "ENCRYPTED", HFILL }},
1297 { &hf_h235_certProtectedKey,
1298 { "certProtectedKey", "h235.certProtectedKey_element",
1299 FT_NONE, BASE_NONE, NULL, 0,
1300 "SIGNED", HFILL }},
1301 { &hf_h235_secureSharedSecret,
1302 { "secureSharedSecret", "h235.secureSharedSecret_element",
1303 FT_NONE, BASE_NONE, NULL, 0,
1304 "V3KeySyncMaterial", HFILL }},
1305 { &hf_h235_encryptedSessionKey,
1306 { "encryptedSessionKey", "h235.encryptedSessionKey",
1307 FT_BYTES, BASE_NONE, NULL, 0,
1308 "OCTET_STRING", HFILL }},
1309 { &hf_h235_encryptedSaltingKey,
1310 { "encryptedSaltingKey", "h235.encryptedSaltingKey",
1311 FT_BYTES, BASE_NONE, NULL, 0,
1312 "OCTET_STRING", HFILL }},
1313 { &hf_h235_clearSaltingKey,
1314 { "clearSaltingKey", "h235.clearSaltingKey",
1315 FT_BYTES, BASE_NONE, NULL, 0,
1316 "OCTET_STRING", HFILL }},
1317 { &hf_h235_paramSsalt,
1318 { "paramSsalt", "h235.paramSsalt_element",
1319 FT_NONE, BASE_NONE, NULL, 0,
1320 "Params", HFILL }},
1321 { &hf_h235_keyDerivationOID,
1322 { "keyDerivationOID", "h235.keyDerivationOID",
1323 FT_OID, BASE_NONE, NULL, 0,
1324 "OBJECT_IDENTIFIER", HFILL }},
1325 { &hf_h235_genericKeyMaterial,
1326 { "genericKeyMaterial", "h235.genericKeyMaterial",
1327 FT_BYTES, BASE_NONE, NULL, 0,
1328 "OCTET_STRING", HFILL }},
1329 { &hf_h235_SrtpCryptoCapability_item,
1330 { "SrtpCryptoInfo", "h235.SrtpCryptoInfo_element",
1331 FT_NONE, BASE_NONE, NULL, 0,
1332 NULL, HFILL }},
1333 { &hf_h235_cryptoSuite,
1334 { "cryptoSuite", "h235.cryptoSuite",
1335 FT_OID, BASE_NONE, NULL, 0,
1336 "OBJECT_IDENTIFIER", HFILL }},
1337 { &hf_h235_sessionParams,
1338 { "sessionParams", "h235.sessionParams_element",
1339 FT_NONE, BASE_NONE, NULL, 0,
1340 "SrtpSessionParameters", HFILL }},
1341 { &hf_h235_allowMKI,
1342 { "allowMKI", "h235.allowMKI",
1343 FT_BOOLEAN, BASE_NONE, NULL, 0,
1344 "BOOLEAN", HFILL }},
1345 { &hf_h235_SrtpKeys_item,
1346 { "SrtpKeyParameters", "h235.SrtpKeyParameters_element",
1347 FT_NONE, BASE_NONE, NULL, 0,
1348 NULL, HFILL }},
1349 { &hf_h235_masterKey,
1350 { "masterKey", "h235.masterKey",
1351 FT_BYTES, BASE_NONE, NULL, 0,
1352 "OCTET_STRING", HFILL }},
1353 { &hf_h235_masterSalt,
1354 { "masterSalt", "h235.masterSalt",
1355 FT_BYTES, BASE_NONE, NULL, 0,
1356 "OCTET_STRING", HFILL }},
1357 { &hf_h235_lifetime,
1358 { "lifetime", "h235.lifetime",
1359 FT_UINT32, BASE_DEC, VALS(h235_T_lifetime_vals), 0,
1360 NULL, HFILL }},
1361 { &hf_h235_powerOfTwo,
1362 { "powerOfTwo", "h235.powerOfTwo",
1363 FT_INT32, BASE_DEC, NULL, 0,
1364 "INTEGER", HFILL }},
1365 { &hf_h235_specific,
1366 { "specific", "h235.specific",
1367 FT_INT32, BASE_DEC, NULL, 0,
1368 "INTEGER", HFILL }},
1369 { &hf_h235_mki,
1370 { "mki", "h235.mki_element",
1371 FT_NONE, BASE_NONE, NULL, 0,
1372 NULL, HFILL }},
1373 { &hf_h235_length,
1374 { "length", "h235.length",
1375 FT_UINT32, BASE_DEC, NULL, 0,
1376 "INTEGER_1_128", HFILL }},
1377 { &hf_h235_value,
1378 { "value", "h235.value",
1379 FT_BYTES, BASE_NONE, NULL, 0,
1380 "OCTET_STRING", HFILL }},
1381 { &hf_h235_kdr,
1382 { "kdr", "h235.kdr",
1383 FT_UINT32, BASE_DEC, NULL, 0,
1384 "INTEGER_0_24", HFILL }},
1385 { &hf_h235_unencryptedSrtp,
1386 { "unencryptedSrtp", "h235.unencryptedSrtp",
1387 FT_BOOLEAN, BASE_NONE, NULL, 0,
1388 "BOOLEAN", HFILL }},
1389 { &hf_h235_unencryptedSrtcp,
1390 { "unencryptedSrtcp", "h235.unencryptedSrtcp",
1391 FT_BOOLEAN, BASE_NONE, NULL, 0,
1392 "BOOLEAN", HFILL }},
1393 { &hf_h235_unauthenticatedSrtp,
1394 { "unauthenticatedSrtp", "h235.unauthenticatedSrtp",
1395 FT_BOOLEAN, BASE_NONE, NULL, 0,
1396 "BOOLEAN", HFILL }},
1397 { &hf_h235_fecOrder,
1398 { "fecOrder", "h235.fecOrder_element",
1399 FT_NONE, BASE_NONE, NULL, 0,
1400 NULL, HFILL }},
1401 { &hf_h235_windowSizeHint,
1402 { "windowSizeHint", "h235.windowSizeHint",
1403 FT_UINT32, BASE_DEC, NULL, 0,
1404 "INTEGER_64_65535", HFILL }},
1405 { &hf_h235_newParameter,
1406 { "newParameter", "h235.newParameter",
1407 FT_UINT32, BASE_DEC, NULL, 0,
1408 "SEQUENCE_OF_GenericData", HFILL }},
1409 { &hf_h235_newParameter_item,
1410 { "GenericData", "h235.GenericData_element",
1411 FT_NONE, BASE_NONE, NULL, 0,
1412 NULL, HFILL }},
1413 { &hf_h235_fecBeforeSrtp,
1414 { "fecBeforeSrtp", "h235.fecBeforeSrtp_element",
1415 FT_NONE, BASE_NONE, NULL, 0,
1416 NULL, HFILL }},
1417 { &hf_h235_fecAfterSrtp,
1418 { "fecAfterSrtp", "h235.fecAfterSrtp_element",
1419 FT_NONE, BASE_NONE, NULL, 0,
1420 NULL, HFILL }},
1423 /* List of subtrees */
1424 static int *ett[] = {
1425 &ett_h235_NonStandardParameter,
1426 &ett_h235_DHset,
1427 &ett_h235_ECpoint,
1428 &ett_h235_ECKASDH,
1429 &ett_h235_T_eckasdhp,
1430 &ett_h235_T_eckasdh2,
1431 &ett_h235_TypedCertificate,
1432 &ett_h235_AuthenticationBES,
1433 &ett_h235_AuthenticationMechanism,
1434 &ett_h235_ClearToken,
1435 &ett_h235_SEQUENCE_OF_ProfileElement,
1436 &ett_h235_ProfileElement,
1437 &ett_h235_Element,
1438 &ett_h235_SIGNED,
1439 &ett_h235_ENCRYPTED,
1440 &ett_h235_HASHED,
1441 &ett_h235_Params,
1442 &ett_h235_CryptoToken,
1443 &ett_h235_T_cryptoEncryptedToken,
1444 &ett_h235_T_cryptoSignedToken,
1445 &ett_h235_T_cryptoHashedToken,
1446 &ett_h235_H235Key,
1447 &ett_h235_V3KeySyncMaterial,
1448 &ett_h235_SrtpCryptoCapability,
1449 &ett_h235_SrtpCryptoInfo,
1450 &ett_h235_SrtpKeys,
1451 &ett_h235_SrtpKeyParameters,
1452 &ett_h235_T_lifetime,
1453 &ett_h235_T_mki,
1454 &ett_h235_SrtpSessionParameters,
1455 &ett_h235_SEQUENCE_OF_GenericData,
1456 &ett_h235_FecOrder,
1459 /* Register protocol */
1460 proto_h235 = proto_register_protocol(PNAME, PSNAME, PFNAME);
1462 /* Register fields and subtrees */
1463 proto_register_field_array(proto_h235, hf, array_length(hf));
1464 proto_register_subtree_array(ett, array_length(ett));
1466 /* OID names */
1467 /* H.235.1, Chapter 15, Table 3 */
1468 /* A */
1469 oid_add_from_string("all fields in RAS/CS","0.0.8.235.0.1.1");
1470 oid_add_from_string("all fields in RAS/CS","0.0.8.235.0.2.1");
1471 /* T */
1472 oid_add_from_string("ClearToken","0.0.8.235.0.1.5");
1473 oid_add_from_string("ClearToken","0.0.8.235.0.2.5");
1474 /* U */
1475 oid_add_from_string("HMAC-SHA1-96","0.0.8.235.0.1.6");
1476 oid_add_from_string("HMAC-SHA1-96","0.0.8.235.0.2.6");
1477 /* H.235.7, Chapter 5, Table 1 */
1478 oid_add_from_string("MIKEY", OID_MIKEY);
1479 oid_add_from_string("MIKEY-PS", OID_MIKEY_PS);
1480 oid_add_from_string("MIKEY-DHHMAC", OID_MIKEY_DHHMAC);
1481 oid_add_from_string("MIKEY-PK-SIGN", OID_MIKEY_PK_SIGN);
1482 oid_add_from_string("MIKEY-DH-SIGN", OID_MIKEY_DH_SIGN);
1483 /* H.235.7, Chapter 8.5 */
1484 oid_add_from_string("TG",OID_TG);
1485 /* H.235.7, Chapter 9.5 */
1486 oid_add_from_string("SG",OID_SG);
1487 /* H.235.8, Chapter 4.2, Table 2 */
1488 oid_add_from_string("AES_CM_128_HMAC_SHA1_80","0.0.8.235.0.4.91");
1489 oid_add_from_string("AES_CM_128_HMAC_SHA1_32","0.0.8.235.0.4.92");
1490 oid_add_from_string("F8_128_HMAC_SHA1_80","0.0.8.235.0.4.93");
1494 /*--- proto_reg_handoff_h235 -------------------------------------------*/
1495 void proto_reg_handoff_h235(void) {
1496 dissector_handle_t mikey_handle;
1498 mikey_handle = find_dissector("mikey");
1500 /* H.235.7, Chapter 7.1, MIKEY operation at "session level" */
1501 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/0", mikey_handle);
1502 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/0", mikey_handle);
1503 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/0", mikey_handle);
1504 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/0", mikey_handle);
1505 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/0", mikey_handle);
1506 dissector_add_string("h245.gef.content", "EncryptionSync/0", mikey_handle);
1507 /* H.235.7, Chapter 7.2, MIKEY operation at "media level" */
1508 dissector_add_string("h245.gef.content", "EncryptionSync/76", mikey_handle);
1509 dissector_add_string("h245.gef.content", "EncryptionSync/72", mikey_handle);
1510 dissector_add_string("h245.gef.content", "EncryptionSync/73", mikey_handle);
1511 dissector_add_string("h245.gef.content", "EncryptionSync/74", mikey_handle);
1512 dissector_add_string("h245.gef.content", "EncryptionSync/75", mikey_handle);
1513 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY "/nonCollapsing/76", mikey_handle);
1514 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PS "/nonCollapsing/72", mikey_handle);
1515 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DHHMAC "/nonCollapsing/73", mikey_handle);
1516 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_PK_SIGN "/nonCollapsing/74", mikey_handle);
1517 dissector_add_string("h245.gef.content", "GenericCapability/" OID_MIKEY_DH_SIGN "/nonCollapsing/75", mikey_handle);
1519 /* H.235.8, Chapter 4.1.2, SrtpCryptoCapability transport */
1520 dissector_add_string("h245.gef.content", "GenericCapability/0.0.8.235.0.4.90/nonCollapsingRaw",
1521 create_dissector_handle(dissect_SrtpCryptoCapability_PDU, proto_h235));