Coverage Report

Created: 2026-11-12 07:01

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