Wireshark 4.7.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet-tls-utils.h
1/* packet-tls-utils.h
2 * ssl manipulation functions
3 * By Paolo Abeni <paolo.abeni@email.com>
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
12#ifndef __PACKET_TLS_UTILS_H__
13#define __PACKET_TLS_UTILS_H__
14
15#include <stdio.h> /* some APIs we declare take a stdio stream as an argument */
16
17#include <glib.h>
18#include <epan/packet.h>
19#include <epan/prefs.h>
20#include <epan/wmem_scopes.h>
21#include <epan/expert.h>
22#include <epan/conversation.h>
23#include <epan/tap.h>
24#include <epan/unit_strings.h>
25#include <wsutil/wsgcrypt.h>
26
27/* TODO inline this now that Libgcrypt is mandatory? */
28#define SSL_CIPHER_CTX gcry_cipher_hd_t
29#define SSL_DECRYPT_DEBUG
30
31
32/* other defines */
33typedef enum {
34 SSL_ID_CHG_CIPHER_SPEC = 0x14,
35 SSL_ID_ALERT = 0x15,
36 SSL_ID_HANDSHAKE = 0x16,
37 SSL_ID_APP_DATA = 0x17,
38 SSL_ID_HEARTBEAT = 0x18,
39 SSL_ID_TLS12_CID = 0x19,
40 SSL_ID_DTLS13_ACK = 0x1A,
41} ContentType;
42
43typedef enum {
44 SSL_HND_HELLO_REQUEST = 0,
45 SSL_HND_CLIENT_HELLO = 1,
46 SSL_HND_SERVER_HELLO = 2,
47 SSL_HND_HELLO_VERIFY_REQUEST = 3,
48 SSL_HND_NEWSESSION_TICKET = 4,
49 SSL_HND_END_OF_EARLY_DATA = 5,
50 SSL_HND_HELLO_RETRY_REQUEST = 6,
51 SSL_HND_ENCRYPTED_EXTENSIONS = 8,
52 SSL_HND_CERTIFICATE = 11,
53 SSL_HND_SERVER_KEY_EXCHG = 12,
54 SSL_HND_CERT_REQUEST = 13,
55 SSL_HND_SVR_HELLO_DONE = 14,
56 SSL_HND_CERT_VERIFY = 15,
57 SSL_HND_CLIENT_KEY_EXCHG = 16,
58 SSL_HND_FINISHED = 20,
59 SSL_HND_CERT_URL = 21,
60 SSL_HND_CERT_STATUS = 22,
61 SSL_HND_SUPPLEMENTAL_DATA = 23,
62 SSL_HND_KEY_UPDATE = 24,
63 SSL_HND_COMPRESSED_CERTIFICATE = 25,
64 /* Encrypted Extensions was NextProtocol in draft-agl-tls-nextprotoneg-03
65 * and changed in draft 04. Not to be confused with TLS 1.3 EE. */
66 SSL_HND_ENCRYPTED_EXTS = 67,
67 SSL_HND_MESSAGE_HASH = 254
68} HandshakeType;
69
70#define SSL2_HND_ERROR 0x00
71#define SSL2_HND_CLIENT_HELLO 0x01
72#define SSL2_HND_CLIENT_MASTER_KEY 0x02
73#define SSL2_HND_CLIENT_FINISHED 0x03
74#define SSL2_HND_SERVER_HELLO 0x04
75#define SSL2_HND_SERVER_VERIFY 0x05
76#define SSL2_HND_SERVER_FINISHED 0x06
77#define SSL2_HND_REQUEST_CERTIFICATE 0x07
78#define SSL2_HND_CLIENT_CERTIFICATE 0x08
79
80#define SSL_HND_HELLO_EXT_SERVER_NAME 0
81#define SSL_HND_HELLO_EXT_MAX_FRAGMENT_LENGTH 1
82#define SSL_HND_HELLO_EXT_CLIENT_CERTIFICATE_URL 2
83#define SSL_HND_HELLO_EXT_TRUSTED_CA_KEYS 3
84#define SSL_HND_HELLO_EXT_TRUNCATED_HMAC 4
85#define SSL_HND_HELLO_EXT_STATUS_REQUEST 5
86#define SSL_HND_HELLO_EXT_USER_MAPPING 6
87#define SSL_HND_HELLO_EXT_CLIENT_AUTHZ 7
88#define SSL_HND_HELLO_EXT_SERVER_AUTHZ 8
89#define SSL_HND_HELLO_EXT_CERT_TYPE 9
90#define SSL_HND_HELLO_EXT_SUPPORTED_GROUPS 10 /* renamed from "elliptic_curves" (RFC 7919 / TLS 1.3) */
91#define SSL_HND_HELLO_EXT_EC_POINT_FORMATS 11
92#define SSL_HND_HELLO_EXT_SRP 12
93#define SSL_HND_HELLO_EXT_SIGNATURE_ALGORITHMS 13
94#define SSL_HND_HELLO_EXT_USE_SRTP 14
95#define SSL_HND_HELLO_EXT_HEARTBEAT 15
96#define SSL_HND_HELLO_EXT_ALPN 16
97#define SSL_HND_HELLO_EXT_STATUS_REQUEST_V2 17
98#define SSL_HND_HELLO_EXT_SIGNED_CERTIFICATE_TIMESTAMP 18
99#define SSL_HND_HELLO_EXT_CLIENT_CERT_TYPE 19
100#define SSL_HND_HELLO_EXT_SERVER_CERT_TYPE 20
101#define SSL_HND_HELLO_EXT_PADDING 21
102#define SSL_HND_HELLO_EXT_ENCRYPT_THEN_MAC 22
103#define SSL_HND_HELLO_EXT_EXTENDED_MASTER_SECRET 23
104#define SSL_HND_HELLO_EXT_TOKEN_BINDING 24
105#define SSL_HND_HELLO_EXT_CACHED_INFO 25
106#define SSL_HND_HELLO_EXT_COMPRESS_CERTIFICATE 27
107#define SSL_HND_HELLO_EXT_RECORD_SIZE_LIMIT 28
108/* 26-33 Unassigned*/
109#define SSL_HND_HELLO_EXT_DELEGATED_CREDENTIALS 34 /* draft-ietf-tls-subcerts-10.txt */
110#define SSL_HND_HELLO_EXT_SESSION_TICKET_TLS 35
111/* RFC 8446 (TLS 1.3) */
112#define SSL_HND_HELLO_EXT_KEY_SHARE_OLD 40 /* draft-ietf-tls-tls13-22 (removed in -23) */
113#define SSL_HND_HELLO_EXT_PRE_SHARED_KEY 41
114#define SSL_HND_HELLO_EXT_EARLY_DATA 42
115#define SSL_HND_HELLO_EXT_SUPPORTED_VERSIONS 43
116#define SSL_HND_HELLO_EXT_COOKIE 44
117#define SSL_HND_HELLO_EXT_PSK_KEY_EXCHANGE_MODES 45
118#define SSL_HND_HELLO_EXT_TICKET_EARLY_DATA_INFO 46 /* draft-ietf-tls-tls13-18 (removed in -19) */
119#define SSL_HND_HELLO_EXT_CERTIFICATE_AUTHORITIES 47
120#define SSL_HND_HELLO_EXT_OID_FILTERS 48
121#define SSL_HND_HELLO_EXT_POST_HANDSHAKE_AUTH 49
122#define SSL_HND_HELLO_EXT_SIGNATURE_ALGORITHMS_CERT 50
123#define SSL_HND_HELLO_EXT_KEY_SHARE 51
124#define SSL_HND_HELLO_EXT_TRANSPARENCY_INFO 52 /* draft-ietf-trans-rfc6962-bis-41 */
125#define SSL_HND_HELLO_EXT_CONNECTION_ID_DEPRECATED 53 /* draft-ietf-tls-dtls-connection-id-07 */
126#define SSL_HND_HELLO_EXT_CONNECTION_ID 54
127#define SSL_HND_HELLO_EXT_EXTERNAL_ID_HASH 55 /* RFC 8844 */
128#define SSL_HND_HELLO_EXT_EXTERNAL_SESSION_ID 56 /* RFC 8844 */
129#define SSL_HND_HELLO_EXT_QUIC_TRANSPORT_PARAMETERS_V1 57 /* draft-ietf-quic-tls-33 */
130#define SSL_HND_HELLO_EXT_TICKET_REQUEST 58 /* draft-ietf-tls-ticketrequests-07 */
131#define SSL_HND_HELLO_EXT_DNSSEC_CHAIN 59 /* RFC 9102 */
132#define SSL_HND_HELLO_EXT_GREASE_0A0A 2570
133#define SSL_HND_HELLO_EXT_GREASE_1A1A 6682
134#define SSL_HND_HELLO_EXT_GREASE_2A2A 10794
135#define SSL_HND_HELLO_EXT_NPN 13172 /* 0x3374 */
136#define SSL_HND_HELLO_EXT_GREASE_3A3A 14906
137#define SSL_HND_HELLO_EXT_ALPS_OLD 17513 /* draft-vvv-tls-alps-01, previous value used in BoringSSL implementation */
138#define SSL_HND_HELLO_EXT_ALPS 17613 /* draft-vvv-tls-alps-01, current value used in BoringSSL implementation */
139#define SSL_HND_HELLO_EXT_GREASE_4A4A 19018
140#define SSL_HND_HELLO_EXT_GREASE_5A5A 23130
141#define SSL_HND_HELLO_EXT_GREASE_6A6A 27242
142#define SSL_HND_HELLO_EXT_CHANNEL_ID_OLD 30031 /* 0x754f */
143#define SSL_HND_HELLO_EXT_CHANNEL_ID 30032 /* 0x7550 */
144#define SSL_HND_HELLO_EXT_GREASE_7A7A 31354
145#define SSL_HND_HELLO_EXT_GREASE_8A8A 35466
146#define SSL_HND_HELLO_EXT_GREASE_9A9A 39578
147#define SSL_HND_HELLO_EXT_GREASE_AAAA 43690
148#define SSL_HND_HELLO_EXT_GREASE_BABA 47802
149#define SSL_HND_HELLO_EXT_GREASE_CACA 51914
150#define SSL_HND_HELLO_EXT_GREASE_DADA 56026
151#define SSL_HND_HELLO_EXT_GREASE_EAEA 60138
152#define SSL_HND_HELLO_EXT_GREASE_FAFA 64250
153#define SSL_HND_HELLO_EXT_ECH_OUTER_EXTENSIONS 64768 /* 0xfd00 draft-ietf-tls-esni-16 */
154#define SSL_HND_HELLO_EXT_ENCRYPTED_CLIENT_HELLO 65037 /* 0xfe0d draft-ietf-tls-esni-16 */
155#define SSL_HND_HELLO_EXT_RENEGOTIATION_INFO 65281 /* 0xFF01 */
156#define SSL_HND_HELLO_EXT_QUIC_TRANSPORT_PARAMETERS 65445 /* 0xffa5 draft-ietf-quic-tls-13 */
157#define SSL_HND_HELLO_EXT_ENCRYPTED_SERVER_NAME 65486 /* 0xffce draft-ietf-tls-esni-01 */
158
159#define SSL_HND_CERT_URL_TYPE_INDIVIDUAL_CERT 1
160#define SSL_HND_CERT_URL_TYPE_PKIPATH 2
161#define SSL_HND_CERT_STATUS_TYPE_OCSP 1
162#define SSL_HND_CERT_STATUS_TYPE_OCSP_MULTI 2
163#define SSL_HND_CERT_TYPE_RAW_PUBLIC_KEY 2
164
165/* https://github.com/quicwg/base-drafts/wiki/Temporary-IANA-Registry#quic-transport-parameters */
166#define SSL_HND_QUIC_TP_ORIGINAL_DESTINATION_CONNECTION_ID 0x00
167#define SSL_HND_QUIC_TP_MAX_IDLE_TIMEOUT 0x01
168#define SSL_HND_QUIC_TP_STATELESS_RESET_TOKEN 0x02
169#define SSL_HND_QUIC_TP_MAX_UDP_PAYLOAD_SIZE 0x03
170#define SSL_HND_QUIC_TP_INITIAL_MAX_DATA 0x04
171#define SSL_HND_QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL 0x05
172#define SSL_HND_QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE 0x06
173#define SSL_HND_QUIC_TP_INITIAL_MAX_STREAM_DATA_UNI 0x07
174#define SSL_HND_QUIC_TP_INITIAL_MAX_STREAMS_BIDI 0x08
175#define SSL_HND_QUIC_TP_INITIAL_MAX_STREAMS_UNI 0x09
176#define SSL_HND_QUIC_TP_ACK_DELAY_EXPONENT 0x0a
177#define SSL_HND_QUIC_TP_MAX_ACK_DELAY 0x0b
178#define SSL_HND_QUIC_TP_DISABLE_ACTIVE_MIGRATION 0x0c
179#define SSL_HND_QUIC_TP_PREFERRED_ADDRESS 0x0d
180#define SSL_HND_QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT 0x0e
181#define SSL_HND_QUIC_TP_INITIAL_SOURCE_CONNECTION_ID 0x0f
182#define SSL_HND_QUIC_TP_RETRY_SOURCE_CONNECTION_ID 0x10
183#define SSL_HND_QUIC_TP_VERSION_INFORMATION 0x11 /* https://tools.ietf.org/html/draft-ietf-quic-version-negotiation-14 */
184#define SSL_HND_QUIC_TP_MAX_DATAGRAM_FRAME_SIZE 0x20 /* https://datatracker.ietf.org/doc/html/draft-ietf-quic-datagram-06 */
185#define SSL_HND_QUIC_TP_CIBIR_ENCODING 0x1000 /* https://datatracker.ietf.org/doc/html/draft-banks-quic-cibir-01 */
186#define SSL_HND_QUIC_TP_LOSS_BITS 0x1057 /* https://tools.ietf.org/html/draft-ferrieuxhamchaoui-quic-lossbits-03 */
187#define SSL_HND_QUIC_TP_GREASE_QUIC_BIT 0x2ab2 /* RFC 9287 */
188#define SSL_HND_QUIC_TP_ENABLE_TIME_STAMP 0x7157 /* https://tools.ietf.org/html/draft-huitema-quic-ts-02 */
189#define SSL_HND_QUIC_TP_ENABLE_TIME_STAMP_V2 0x7158 /* https://tools.ietf.org/html/draft-huitema-quic-ts-03 */
190#define SSL_HND_QUIC_TP_MIN_ACK_DELAY_OLD 0xde1a /* https://tools.ietf.org/html/draft-iyengar-quic-delayed-ack-00 */
191/* https://quiche.googlesource.com/quiche/+/refs/heads/master/quic/core/crypto/transport_parameters.cc */
192#define SSL_HND_QUIC_TP_GOOGLE_USER_AGENT 0x3129
193#define SSL_HND_QUIC_TP_GOOGLE_KEY_UPDATE_NOT_YET_SUPPORTED 0x312B
194#define SSL_HND_QUIC_TP_GOOGLE_QUIC_VERSION 0x4752
195#define SSL_HND_QUIC_TP_GOOGLE_INITIAL_RTT 0x3127
196#define SSL_HND_QUIC_TP_GOOGLE_SUPPORT_HANDSHAKE_DONE 0x312A
197#define SSL_HND_QUIC_TP_GOOGLE_QUIC_PARAMS 0x4751
198#define SSL_HND_QUIC_TP_GOOGLE_CONNECTION_OPTIONS 0x3128
199/* https://github.com/facebookincubator/mvfst/blob/master/quic/QuicConstants.h */
200#define SSL_HND_QUIC_TP_FACEBOOK_PARTIAL_RELIABILITY 0xFF00
201#define SSL_HND_QUIC_TP_VERSION_INFORMATION_DRAFT 0xff73db /* https://datatracker.ietf.org/doc/draft-ietf-quic-version-negotiation/13/ */
202#define SSL_HND_QUIC_TP_ADDRESS_DISCOVERY 0x9f81a176 /* https://tools.ietf.org/html/draft-ietf-quic-address-discovery-00 */
203#define SSL_HND_QUIC_TP_MIN_ACK_DELAY_DRAFT_V1 0xFF03DE1A /* https://tools.ietf.org/html/draft-ietf-quic-ack-frequency-01 */
204#define SSL_HND_QUIC_TP_MIN_ACK_DELAY_DRAFT05 0xff04de1a /* https://tools.ietf.org/html/draft-ietf-quic-ack-frequency-04 / draft-05 */
205#define SSL_HND_QUIC_TP_MIN_ACK_DELAY 0xff04de1b /* https://tools.ietf.org/html/draft-ietf-quic-ack-frequency-07 */
206#define SSL_HND_QUIC_TP_ENABLE_MULTIPATH_DRAFT04 0x0f739bbc1b666d04 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-04 */
207#define SSL_HND_QUIC_TP_ENABLE_MULTIPATH_DRAFT05 0x0f739bbc1b666d05 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-05 */
208#define SSL_HND_QUIC_TP_ENABLE_MULTIPATH 0x0f739bbc1b666d06 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-06 */
209#define SSL_HND_QUIC_TP_INITIAL_MAX_PATHS 0x0f739bbc1b666d07 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-07 */
210#define SSL_HND_QUIC_TP_INITIAL_MAX_PATH_ID_DRAFT09 0x0f739bbc1b666d09 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-09 */
211#define SSL_HND_QUIC_TP_INITIAL_MAX_PATH_ID_DRAFT11 0x0f739bbc1b666d11 /* https://tools.ietf.org/html/draft-ietf-quic-multipath-11 */
212#define SSL_HND_QUIC_TP_INITIAL_MAX_PATH_ID_DRAFT12 0x0f739bbc1b666d0c /* https://tools.ietf.org/html/draft-ietf-quic-multipath-12 */
213#define SSL_HND_QUIC_TP_INITIAL_MAX_PATH_ID_DRAFT13 0x0f739bbc1b666d0d /* https://tools.ietf.org/html/draft-ietf-quic-multipath-13 */
214#define SSL_HND_QUIC_TP_INITIAL_MAX_PATH_ID 0x3e /* https://tools.ietf.org/html/draft-ietf-quic-multipath-19 */
215
216/*
217 * Lookup tables
218 */
219extern const value_string ssl_version_short_names[];
220extern const value_string ssl_20_msg_types[];
221extern value_string_ext ssl_20_cipher_suites_ext;
222extern const value_string ssl_20_certificate_type[];
223extern const value_string ssl_31_content_type[];
224extern const value_string ssl_versions[];
225extern const value_string ssl_31_change_cipher_spec[];
226extern const value_string ssl_31_alert_level[];
227extern const value_string ssl_31_alert_description[];
228extern const value_string ssl_31_handshake_type[];
229extern const value_string tls_heartbeat_type[];
230extern const value_string tls_heartbeat_mode[];
231extern const value_string ssl_31_compression_method[];
232extern const value_string ssl_31_key_exchange_algorithm[];
233extern const value_string ssl_31_signature_algorithm[];
234extern const value_string ssl_31_client_certificate_type[];
235extern const value_string ssl_31_public_value_encoding[];
236extern value_string_ext ssl_31_ciphersuite_ext;
237extern const value_string tls_hello_extension_types[];
238extern const value_string tls_hash_algorithm[];
239extern const value_string tls_signature_algorithm[];
240extern const value_string tls13_signature_algorithm[];
241extern const value_string tls_certificate_type[];
242extern const value_string tls_cert_chain_type[];
243extern const value_string tls_cert_status_type[];
244extern const value_string ssl_extension_curves[];
245extern const value_string ssl_extension_ec_point_formats[];
246extern const value_string ssl_curve_types[];
247extern const value_string tls_hello_ext_server_name_type_vs[];
248extern const value_string tls_hello_ext_max_fragment_length[];
249extern const value_string tls_hello_ext_psk_ke_mode[];
250extern const value_string tls_hello_ext_trusted_ca_key_type[];
251extern const value_string tls13_key_update_request[];
252extern const value_string compress_certificate_algorithm_vals[];
253extern const val64_string quic_transport_parameter_id[];
254extern const range_string quic_version_vals[];
255extern const val64_string quic_address_discovery_vals[];
256extern const val64_string quic_enable_time_stamp_v2_vals[];
257extern const val64_string quic_enable_multipath_vals[];
258extern const value_string tls_hello_ext_ech_clienthello_types[];
259extern const value_string kem_id_type_vals[];
260extern const value_string kdf_id_type_vals[];
261extern const value_string aead_id_type_vals[];
262extern const value_string token_binding_key_parameter_vals[];
263
264/* XXX Should we use GByteArray instead? */
265typedef struct _StringInfo {
266 unsigned char *data; /* Backing storage which may be larger than data_len */
267 unsigned data_len; /* Length of the meaningful part of data */
268} StringInfo;
269
270#define SSL_WRITE_KEY 1
271
272#define SSL_VER_UNKNOWN 0
273#define SSLV2_VERSION 0x0002 /* not in record layer, SSL_CLIENT_SERVER from
274 http://www-archive.mozilla.org/projects/security/pki/nss/ssl/draft02.html */
275#define SSLV3_VERSION 0x300
276#define TLSV1_VERSION 0x301
277#define TLCPV1_VERSION 0x101
278#define TLSV1DOT1_VERSION 0x302
279#define TLSV1DOT2_VERSION 0x303
280#define TLSV1DOT3_VERSION 0x304
281#define DTLSV1DOT0_VERSION 0xfeff
282#define DTLSV1DOT0_OPENSSL_VERSION 0x100
283#define DTLSV1DOT2_VERSION 0xfefd
284#define DTLSV1DOT3_VERSION 0xfefc
285
286/* Returns the TLS 1.3 draft version or 0 if not applicable. */
287static inline uint8_t extract_tls13_draft_version(uint32_t version) {
288 if ((version & 0xff00) == 0x7f00) {
289 return (uint8_t) version;
290 }
291 return 0;
292}
293
294
295#define SSL_CLIENT_RANDOM (1<<0)
296#define SSL_SERVER_RANDOM (1<<1)
297#define SSL_CIPHER (1<<2)
298#define SSL_HAVE_SESSION_KEY (1<<3)
299#define SSL_VERSION (1<<4)
300#define SSL_MASTER_SECRET (1<<5)
301#define SSL_PRE_MASTER_SECRET (1<<6)
302#define SSL_CLIENT_EXTENDED_MASTER_SECRET (1<<7)
303#define SSL_SERVER_EXTENDED_MASTER_SECRET (1<<8)
304#define SSL_NEW_SESSION_TICKET (1<<10)
305#define SSL_ENCRYPT_THEN_MAC (1<<11)
306#define SSL_SEEN_0RTT_APPDATA (1<<12)
307#define SSL_QUIC_RECORD_LAYER (1<<13) /* For QUIC (draft >= -13) */
308
309#define SSL_EXTENDED_MASTER_SECRET_MASK (SSL_CLIENT_EXTENDED_MASTER_SECRET|SSL_SERVER_EXTENDED_MASTER_SECRET)
310
311/* SSL Cipher Suite modes */
312typedef enum {
313 MODE_STREAM, /* GenericStreamCipher */
314 MODE_CBC, /* GenericBlockCipher */
315 MODE_GCM, /* GenericAEADCipher */
316 MODE_CCM, /* AEAD_AES_{128,256}_CCM with 16 byte auth tag */
317 MODE_CCM_8, /* AEAD_AES_{128,256}_CCM with 8 byte auth tag */
318 MODE_POLY1305, /* AEAD_CHACHA20_POLY1305 with 16 byte auth tag (RFC 7905) */
319 MODE_ECB, /* ECB: used to perform record seq number encryption in DTLSv1.3 */
320} ssl_cipher_mode_t;
321
322/* Explicit and implicit nonce length (RFC 5116 - Section 3.2.1) */
323#define IMPLICIT_NONCE_LEN 4
324#define EXPLICIT_NONCE_LEN 8
325#define TLS13_AEAD_NONCE_LENGTH 12
326
327/* TLS 1.3 Record type for selecting the appropriate secret. */
328typedef enum {
329 TLS_SECRET_0RTT_APP,
330 TLS_SECRET_HANDSHAKE,
331 TLS_SECRET_APP,
332} TLSRecordType;
333
334#define SSL_DEBUG_USE_STDERR "-"
335
336#define SSLV2_MAX_SESSION_ID_LENGTH_IN_BYTES 16
337
338/* Record fragment lengths MUST NOT exceed 2^14 (= 0x4000) */
339#define TLS_MAX_RECORD_LENGTH 0x4000
341typedef struct _SslCipherSuite {
342 int number;
343 int kex;
344 int enc;
345 int dig;
346 ssl_cipher_mode_t mode;
349typedef struct _SslFlow {
350 uint32_t byte_seq;
351 uint16_t flags;
352 wmem_tree_t *multisegment_pdus;
353} SslFlow;
354
355typedef struct _SslDecompress SslDecompress;
357typedef struct _SslDecoder {
358 const SslCipherSuite *cipher_suite;
359 int compression;
360 unsigned char _mac_key_or_write_iv[48];
361 StringInfo mac_key; /* for block and stream ciphers */
362 StringInfo write_iv; /* for AEAD ciphers (at least GCM, CCM) */
363 SSL_CIPHER_CTX sn_evp; /* used to decrypt serial number in DTLSv1.3 */
364 SSL_CIPHER_CTX evp;
365 SslDecompress *decomp;
366 uint64_t dtls13_epoch;
367 uint64_t seq;
369 uint16_t epoch;
370 SslFlow *flow;
372} SslDecoder;
373
374#define KEX_DHE_DSS 0x10
375#define KEX_DHE_PSK 0x11
376#define KEX_DHE_RSA 0x12
377#define KEX_DH_ANON 0x13
378#define KEX_DH_DSS 0x14
379#define KEX_DH_RSA 0x15
380#define KEX_ECDHE_ECDSA 0x16
381#define KEX_ECDHE_PSK 0x17
382#define KEX_ECDHE_RSA 0x18
383#define KEX_ECDH_ANON 0x19
384#define KEX_ECDH_ECDSA 0x1a
385#define KEX_ECDH_RSA 0x1b
386#define KEX_KRB5 0x1c
387#define KEX_PSK 0x1d
388#define KEX_RSA 0x1e
389#define KEX_RSA_PSK 0x1f
390#define KEX_SRP_SHA 0x20
391#define KEX_SRP_SHA_DSS 0x21
392#define KEX_SRP_SHA_RSA 0x22
393#define KEX_IS_DH(n) ((n) >= KEX_DHE_DSS && (n) <= KEX_ECDH_RSA)
394#define KEX_TLS13 0x23
395#define KEX_ECJPAKE 0x24
396
397#define KEX_ECDHE_SM2 0x25
398#define KEX_ECC_SM2 0x26
399#define KEX_IBSDH_SM9 0x27
400#define KEX_IBC_SM9 0x28
401
402/* Order is significant, must match "ciphers" array in packet-tls-utils.c */
403
404#define ENC_START 0x30
405#define ENC_DES 0x30
406#define ENC_3DES 0x31
407#define ENC_RC4 0x32
408#define ENC_RC2 0x33
409#define ENC_IDEA 0x34
410#define ENC_AES 0x35
411#define ENC_AES256 0x36
412#define ENC_CAMELLIA128 0x37
413#define ENC_CAMELLIA256 0x38
414#define ENC_SEED 0x39
415#define ENC_CHACHA20 0x3A
416#define ENC_SM1 0x3B
417#define ENC_SM4 0x3C
418#define ENC_NULL 0x3D
419
420
421#define DIG_MD5 0x40
422#define DIG_SHA 0x41
423#define DIG_SHA256 0x42
424#define DIG_SHA384 0x43
425#define DIG_SM3 0x44
426#define DIG_NA 0x45 /* Not Applicable */
428typedef struct {
429 const char *name;
430 unsigned len;
433typedef struct _SslRecordInfo {
434 unsigned char *plain_data;
435 unsigned plain_data_len;
438 unsigned content_len;
440 int id;
442 ContentType type;
443 SslFlow *flow;
445 uint64_t record_seq;
446 uint32_t seq;
447 struct _SslRecordInfo* next;
449
454typedef struct _TlsHsFragment {
455 unsigned record_id;
457 unsigned reassembly_id;
458 uint32_t offset;
459 uint8_t type;
460 int is_last : 1;
461 struct _TlsHsFragment *next;
464typedef struct {
465 SslRecordInfo *records;
466 TlsHsFragment *hs_fragments;
467 uint32_t srcport;
468 uint32_t destport;
469 uint32_t stream;
470 int cipher;
474typedef struct _SslSession {
475 int cipher;
476 int compression;
477 uint16_t version;
478 unsigned char tls13_draft_version;
479 unsigned char _client_random[32];
480 int8_t client_cert_type;
481 int8_t server_cert_type;
482 uint32_t client_ccs_frame;
483 uint32_t server_ccs_frame;
484 uint32_t first_ch_ech_frame;
485 StringInfo client_random;
486 bool ech;
487 bool hrr_ech_declined;
488 unsigned char ech_confirmation[8];
489 unsigned char hrr_ech_confirmation[8];
490 unsigned char first_ech_auth_tag[16];
491
492 /* The address/proto/port of the server as determined from heuristics
493 * (e.g. ClientHello) or set externally (via ssl_set_master_secret()). */
494 address srv_addr;
495 port_type srv_ptype;
496 unsigned srv_port;
497
498 uint32_t stream;
499
500 /* The Application layer protocol if known (for STARTTLS support) */
501 dissector_handle_t app_handle;
502 const char *alpn_name;
503 /* The ALPN the client requested, not necessarily the one chosen */
504 const char *client_alpn_name;
505 uint32_t last_nontls_frame;
506 bool is_session_resumed;
507
508 /* First pass only: track an in-progress handshake reassembly (>0) */
509 uint32_t client_hs_reassembly_id;
510 uint32_t server_hs_reassembly_id;
511
512 /* Connection ID extension
513
514 struct {
515 opaque cid<0..2^8-1>;
516 } ConnectionId;
517 */
518
519 uint8_t *client_cid;
520 uint8_t *server_cid;
521 uint8_t client_cid_len;
522 bool client_cid_len_present;
523 uint8_t server_cid_len;
524 bool server_cid_len_present;
525 bool deprecated_cid; /* Set when handshake is using the deprecated CID extension type */
526 uint64_t dtls13_current_epoch[2]; /* max epoch (for server and client respectively) */
527 uint64_t dtls13_next_seq_num[2]; /* DTLSv1.3 next expected seq number (for server and client respectively) */
528} SslSession;
529
530/* RFC 5246, section 8.1 says that the master secret is always 48 bytes */
531#define SSL_MASTER_SECRET_LENGTH 48
532
533struct cert_key_id; /* defined in epan/secrets.h */
534
535/* This holds state information for a SSL conversation */
536typedef struct _SslDecryptSession {
537 unsigned char _master_secret[SSL_MASTER_SECRET_LENGTH];
538 unsigned char _session_id[256];
539 unsigned char _client_random[32];
540 unsigned char _server_random[32];
541 StringInfo session_id;
542 StringInfo session_ticket;
543 StringInfo server_random;
544 StringInfo client_random;
545 StringInfo master_secret;
546 StringInfo handshake_data;
547 /* the data store for this StringInfo must be allocated explicitly with a capture lifetime scope */
548 StringInfo pre_master_secret;
549 unsigned char _server_data_for_iv[24];
550 StringInfo server_data_for_iv;
551 unsigned char _client_data_for_iv[24];
552 StringInfo client_data_for_iv;
553
554 int state;
555 const SslCipherSuite *cipher_suite;
556 SslDecoder *server;
557 SslDecoder *client;
558 SslDecoder *server_new;
559 SslDecoder *client_new;
560#if defined(HAVE_LIBGNUTLS)
561 struct cert_key_id *cert_key_id;
562#endif
563 StringInfo psk;
564 StringInfo app_data_segment;
565 SslSession session;
566 bool has_early_data;
567 StringInfo ech_transcript;
568
570
571/* RecordNumber - RFC 9147 section 4 */
572typedef struct {
573 uint64_t epoch;
574 uint64_t sequence_number;
576
577/* User Access Table */
578typedef struct _ssldecrypt_assoc_t {
579 char* ipaddr;
580 char* port;
581 char* protocol;
582 char* keyfile;
583 char* password;
586typedef struct ssl_common_options {
587 const char *psk;
588 const char *keylog_filename;
590
592typedef struct {
593 GHashTable *session; /* Session ID (1-32 bytes) to master secret. */
594 GHashTable *tickets; /* Session Ticket to master secret. */
595 GHashTable *crandom; /* Client Random to master secret */
596 GHashTable *pre_master; /* First 8 bytes of encrypted pre-master secret to
597 pre-master secret */
598 GHashTable *pms; /* Client Random to unencrypted pre-master secret */
599
600 /* For TLS 1.3: maps Client Random to derived secret. */
601 GHashTable *tls13_client_early;
602 GHashTable *tls13_client_handshake;
603 GHashTable *tls13_server_handshake;
604 GHashTable *tls13_client_appdata;
605 GHashTable *tls13_server_appdata;
606 GHashTable *tls13_early_exporter;
607 GHashTable *tls13_exporter;
608 GHashTable *ech_secret;
609 GHashTable *ech_config;
610
611 /* The hash tables above store the static keylog file contents and secrets
612 * from any DSB, not all of which may be used, in addition to any master
613 * secrets derived at runtime ([D]TLS < 1.3). These store the used
614 * Client Random for exporting master secrets and derived secrets in
615 * TLS Export Sessions or adding a DSB.
616 */
617 GHashTable *used_crandom;
619
620int ssl_get_keyex_alg(int cipher);
621
622void quic_transport_parameter_id_base_custom(char *result, uint64_t parameter_id);
623
624bool ssldecrypt_uat_fld_ip_chk_cb(void*, const char*, unsigned, const void*, const void*, char** err);
625bool ssldecrypt_uat_fld_port_chk_cb(void*, const char*, unsigned, const void*, const void*, char** err);
626bool ssldecrypt_uat_fld_fileopen_chk_cb(void*, const char*, unsigned, const void*, const void*, char** err);
627bool ssldecrypt_uat_fld_password_chk_cb(void*, const char*, unsigned, const void*, const void*, char** err);
628char* ssl_association_info(const char* dissector_table_name, const char* table_protocol);
629
631void ssl_init_cid_list(void);
632
634void ssl_cleanup_cid_list(void);
635
637void ssl_add_session_by_cid(SslDecryptSession *ssl);
638
644SslDecryptSession *ssl_get_session_by_cid(tvbuff_t *tvb, uint32_t offset);
645
651extern SslDecryptSession *
652ssl_get_session(conversation_t *conversation, dissector_handle_t tls_handle, uint8_t curr_layer_num);
653
662extern SslDecryptSession *
663tls_get_session(conversation_t *conversation, int proto_ssl, uint8_t curr_layer_num);
664
666extern void
667ssl_reset_session(SslSession *session, SslDecryptSession *ssl, bool is_client);
668
670extern void
671ssl_set_server(SslSession *session, address *addr, port_type ptype, uint32_t port);
672
680WS_DLL_PUBLIC void
681tls_set_appdata_dissector(dissector_handle_t tls_handle, packet_info *pinfo,
682 dissector_handle_t app_handle);
683
693WS_DLL_PUBLIC uint32_t
694ssl_starttls_ack(dissector_handle_t tls_handle, packet_info *pinfo,
695 dissector_handle_t app_handle);
696
705WS_DLL_PUBLIC uint32_t
706ssl_starttls_post_ack(dissector_handle_t tls_handle, packet_info *pinfo,
707 dissector_handle_t app_handle);
708
710ssl_find_appdata_dissector(const char *name);
711
717extern void
718ssl_data_set(StringInfo* buf, const unsigned char* src, unsigned len);
719
723extern int
724ssl_data_alloc(StringInfo* str, size_t len);
725
726extern int
727ssl_cipher_setiv(SSL_CIPHER_CTX *cipher, unsigned char* iv, int iv_len);
728
732extern const SslCipherSuite *
733ssl_find_cipher(int num);
734
735
737int
738ssl_get_cipher_algo(const SslCipherSuite *cipher_suite);
739
744unsigned
745ssl_get_cipher_blocksize(const SslCipherSuite *cipher_suite);
746
747bool
748ssl_generate_pre_master_secret(SslDecryptSession *ssl_session,
749 uint32_t length, tvbuff_t *tvb, uint32_t offset,
750 const char *ssl_psk, packet_info *pinfo,
751#ifdef HAVE_LIBGNUTLS
752 GHashTable *key_hash,
753#endif
754 const ssl_master_key_map_t *mk_map);
755
760extern int
761ssl_generate_keyring_material(SslDecryptSession*ssl_session);
762
763extern void
764ssl_change_cipher(SslDecryptSession *ssl_session, bool server);
765
781extern int
782ssl_decrypt_record(wmem_allocator_t* allocator, SslDecryptSession *ssl, SslDecoder *decoder, uint8_t ct, uint16_t record_version,
783 bool ignore_mac_failed,
784 const unsigned char *in, uint16_t inl, const unsigned char *cid, uint8_t cidl,
785 StringInfo *comp_str, StringInfo *out_str, unsigned *outl);
786
787
788/* Common part between TLS and DTLS dissectors */
789
790/* handling of association between tls/dtls ports and clear text protocol */
791extern void
792ssl_association_add(const char* dissector_table_name, dissector_handle_t main_handle, dissector_handle_t subdissector_handle, unsigned port, bool tcp);
793
794extern void
795ssl_association_remove(const char* dissector_table_name, dissector_handle_t main_handle, dissector_handle_t subdissector_handle, unsigned port, bool tcp);
796
797extern int
798ssl_packet_from_server(SslSession *session, dissector_table_t table, const packet_info *pinfo);
799
800/* Obtain information about the current TLS layer. */
802tls_add_packet_info(int proto, packet_info *pinfo, uint8_t curr_layer_num_ssl);
803
804/* add to packet data a copy of the specified real data */
805extern void
806ssl_add_record_info(int proto, packet_info *pinfo,
807 const unsigned char *plain_data, int plain_data_len, int content_len,
808 int record_id, SslFlow *flow, ContentType type, uint8_t curr_layer_num_ssl,
809 uint64_t record_seq);
810
811/* search in packet data for the specified id; return a newly created tvb for the associated data */
812extern tvbuff_t*
813ssl_get_record_info(tvbuff_t *parent_tvb, int proto, packet_info *pinfo, int record_id, uint8_t curr_layer_num_ssl, SslRecordInfo **matched_record);
814
815/* initialize/reset per capture state data (ssl sessions cache) */
816extern void
817ssl_common_init(ssl_master_key_map_t *master_key_map,
818 StringInfo *decrypted_data, StringInfo *compressed_data);
819extern void
820ssl_common_cleanup(ssl_master_key_map_t *master_key_map, FILE **ssl_keylog_file,
821 StringInfo *decrypted_data, StringInfo *compressed_data);
822
828WS_DLL_PUBLIC ssl_master_key_map_t *
829tls_get_master_key_map(bool load_secrets);
830
831/* Process lines from the TLS key log and populate the secrets map. */
832extern void
833tls_keylog_process_lines(const ssl_master_key_map_t *mk_map, const uint8_t *data, unsigned len);
834
835/* tries to update the secrets cache from the given filename */
836extern void
837ssl_load_keyfile(const char *ssl_keylog_filename, FILE **keylog_file,
838 const ssl_master_key_map_t *mk_map);
839
840#ifdef HAVE_LIBGNUTLS
841/* parse ssl related preferences (private keys and ports association strings) */
842extern void
843ssl_parse_key_list(const ssldecrypt_assoc_t * uats, GHashTable *key_hash, const char* dissector_table_name, dissector_handle_t main_handle, bool tcp);
844#endif
845
846extern void
847ssl_finalize_decryption(SslDecryptSession *ssl, ssl_master_key_map_t *mk_map);
848
853extern void
854tls_save_crandom(SslDecryptSession *ssl, ssl_master_key_map_t *mk_map);
855
856extern bool
857tls13_generate_keys(SslDecryptSession *ssl_session, const StringInfo *secret, bool is_from_server);
858
859extern StringInfo *
860tls13_load_secret(SslDecryptSession *ssl, ssl_master_key_map_t *mk_map,
861 bool is_from_server, TLSRecordType type);
862
863extern void
864tls13_change_key(SslDecryptSession *ssl, ssl_master_key_map_t *mk_map,
865 bool is_from_server, TLSRecordType type);
866
867extern void
868tls13_key_update(SslDecryptSession *ssl, bool is_from_server);
869
870extern bool
871ssl_is_valid_content_type(uint8_t type);
872
873extern bool
874ssl_is_valid_handshake_type(uint8_t hs_type, bool is_dtls);
875
876extern bool
877tls_scan_server_hello(tvbuff_t *tvb, uint32_t offset, uint32_t offset_end,
878 uint16_t *server_version, bool *is_hrr);
879
880extern void
881ssl_try_set_version(SslSession *session, SslDecryptSession *ssl,
882 uint8_t content_type, uint8_t handshake_type,
883 bool is_dtls, uint16_t version);
884
885extern void
886ssl_calculate_handshake_hash(SslDecryptSession *ssl_session, tvbuff_t *tvb, uint32_t offset, uint32_t length);
887
888/* common header fields, subtrees and expert info for SSL and DTLS dissectors */
889typedef struct ssl_common_dissect {
890 struct {
891 int change_cipher_spec;
892 int hs_exts_len;
893 int hs_ext_alpn_len;
894 int hs_ext_alpn_list;
895 int hs_ext_alpn_str;
896 int hs_ext_alpn_str_len;
897 int hs_ext_cert_url_item;
898 int hs_ext_cert_url_padding;
899 int hs_ext_cert_url_sha1;
900 int hs_ext_cert_url_type;
901 int hs_ext_cert_url_url;
902 int hs_ext_cert_url_url_hash_list_len;
903 int hs_ext_cert_url_url_len;
904 int hs_ext_cert_status_type;
905 int hs_ext_cert_status_request_len;
906 int hs_ext_cert_status_responder_id_list_len;
907 int hs_ext_cert_status_request_extensions_len;
908 int hs_ext_cert_status_request_list_len;
909 int hs_ocsp_response_list_len;
910 int hs_ocsp_response_len;
911 int hs_ext_cert_type;
912 int hs_ext_cert_types;
913 int hs_ext_cert_types_len;
914 int hs_ext_data;
915 int hs_ext_ec_point_format;
916 int hs_ext_ec_point_formats;
917 int hs_ext_ec_point_formats_len;
918 int hs_ext_srp_len;
919 int hs_ext_srp_username;
920 int hs_ext_supported_group;
921 int hs_ext_supported_groups;
922 int hs_ext_supported_groups_len;
923 int hs_ext_ech_outer_ext;
924 int hs_ext_ech_outer_ext_len;
925 int hs_ech_confirm;
926 int hs_ech_confirm_compute;
927 int hs_ext_heartbeat_mode;
928 int hs_ext_len;
929 int hs_ext_npn_str;
930 int hs_ext_npn_str_len;
931 int hs_ext_reneg_info_len;
932 int hs_ext_reneg_info;
933 int hs_ext_key_share_client_length;
934 int hs_ext_key_share_group;
935 int hs_ext_key_share_key_exchange_length;
936 int hs_ext_key_share_key_exchange;
937 int hs_ext_key_share_selected_group;
938 int hs_ext_psk_identities_length;
939 int hs_ext_psk_identity_identity_length;
940 int hs_ext_psk_identity_identity;
941 int hs_ext_psk_identity_obfuscated_ticket_age;
942 int hs_ext_psk_binders_length;
943 int hs_ext_psk_binders;
944 int hs_ext_psk_binder;
945 int hs_ext_psk_binder_binder_length;
946 int hs_ext_psk_binder_binder;
947 int hs_ext_psk_identity_selected;
948 int hs_ext_session_ticket;
949 int hs_ext_supported_versions_len;
950 int hs_ext_supported_version;
951 int hs_ext_cookie_len;
952 int hs_ext_cookie;
953 int hs_ext_server_name;
954 int hs_ext_server_name_len;
955 int hs_ext_server_name_list_len;
956 int hs_ext_server_name_type;
957 int hs_ext_max_fragment_length;
958 int hs_ext_padding_data;
959 int hs_ext;
960 int hs_ext_type;
961 int hs_ext_connection_id_length;
962 int hs_ext_connection_id;
963 int hs_ext_trusted_ca_keys_len;
964 int hs_ext_trusted_ca_keys_list;
965 int hs_ext_trusted_ca_key;
966 int hs_ext_trusted_ca_key_type;
967 int hs_ext_trusted_ca_key_hash;
968 int hs_ext_trusted_ca_key_dname_len;
969 int hs_ext_trusted_ca_key_dname;
970 int hs_sig_hash_alg;
971 int hs_sig_hash_alg_len;
972 int hs_sig_hash_algs;
973 int hs_sig_hash_hash;
974 int hs_sig_hash_sig;
975 int hs_client_keyex_epms_len;
976 int hs_client_keyex_epms;
977 int hs_server_keyex_modulus_len;
978 int hs_server_keyex_exponent_len;
979 int hs_server_keyex_sig_len;
980 int hs_server_keyex_p_len;
981 int hs_server_keyex_g_len;
982 int hs_server_keyex_ys_len;
983 int hs_client_keyex_yc_len;
984 int hs_client_keyex_point_len;
985 int hs_server_keyex_point_len;
986 int hs_server_keyex_p;
987 int hs_server_keyex_g;
988 int hs_server_keyex_curve_type;
989 int hs_server_keyex_named_curve;
990 int hs_server_keyex_ys;
991 int hs_client_keyex_yc;
992 int hs_server_keyex_point;
993 int hs_client_keyex_point;
994 int hs_server_keyex_xs_len;
995 int hs_client_keyex_xc_len;
996 int hs_server_keyex_xs;
997 int hs_client_keyex_xc;
998 int hs_server_keyex_vs_len;
999 int hs_client_keyex_vc_len;
1000 int hs_server_keyex_vs;
1001 int hs_client_keyex_vc;
1002 int hs_server_keyex_rs_len;
1003 int hs_client_keyex_rc_len;
1004 int hs_server_keyex_rs;
1005 int hs_client_keyex_rc;
1006 int hs_server_keyex_modulus;
1007 int hs_server_keyex_exponent;
1008 int hs_server_keyex_sig;
1009 int hs_server_keyex_hint_len;
1010 int hs_server_keyex_hint;
1011 int hs_client_keyex_identity_len;
1012 int hs_client_keyex_identity;
1013 int hs_certificates_len;
1014 int hs_certificates;
1015 int hs_certificate_len;
1016 int hs_certificate;
1017 int hs_cert_types_count;
1018 int hs_cert_types;
1019 int hs_cert_type;
1020 int hs_dnames_len;
1021 int hs_dnames;
1022 int hs_dnames_truncated;
1023 int hs_dname_len;
1024 int hs_dname;
1025 int hs_random;
1026 int hs_random_time;
1027 int hs_random_bytes;
1028 int hs_session_id;
1029 int hs_session_id_len;
1030 int hs_client_version;
1031 int hs_server_version;
1032 int hs_cipher_suites_len;
1033 int hs_cipher_suites;
1034 int hs_cipher_suite;
1035 int hs_comp_methods_len;
1036 int hs_comp_methods;
1037 int hs_comp_method;
1038 int hs_session_ticket_lifetime_hint;
1039 int hs_session_ticket_age_add;
1040 int hs_session_ticket_nonce_len;
1041 int hs_session_ticket_nonce;
1042 int hs_session_ticket_len;
1043 int hs_session_ticket;
1044 int hs_finished;
1045 int hs_client_cert_vrfy_sig_len;
1046 int hs_client_cert_vrfy_sig;
1047 int hs_ja3_full;
1048 int hs_ja3_hash;
1049 int hs_ja3s_full;
1050 int hs_ja3s_hash;
1051 int hs_ja4;
1052 int hs_ja4_r;
1053
1054 /* TLS 1.3 */
1055 int hs_ext_psk_ke_modes_length;
1056 int hs_ext_psk_ke_mode;
1057 int hs_certificate_request_context_length;
1058 int hs_certificate_request_context;
1059 int hs_key_update_request_update;
1060 int sct_scts_length;
1061 int sct_sct_length;
1062 int sct_sct_version;
1063 int sct_sct_logid;
1064 int sct_sct_timestamp;
1065 int sct_sct_extensions_length;
1066 int sct_sct_extensions;
1067 int sct_sct_signature;
1068 int sct_sct_signature_length;
1069 int hs_ext_max_early_data_size;
1070 int hs_ext_oid_filters_length;
1071 int hs_ext_oid_filters_oid_length;
1072 int hs_ext_oid_filters_oid;
1073 int hs_ext_oid_filters_values_length;
1074 int hs_cred_valid_time;
1075 int hs_cred_pubkey;
1076 int hs_cred_pubkey_len;
1077 int hs_cred_signature;
1078 int hs_cred_signature_len;
1079
1080 /* compress_certificate */
1081 int hs_ext_compress_certificate_algorithms_length;
1082 int hs_ext_compress_certificate_algorithm;
1083 int hs_ext_compress_certificate_uncompressed_length;
1084 int hs_ext_compress_certificate_compressed_certificate_message_length;
1085 int hs_ext_compress_certificate_compressed_certificate_message;
1086
1087 /* Token Binding Negotiation */
1088 int hs_ext_token_binding_version_major;
1089 int hs_ext_token_binding_version_minor;
1090 int hs_ext_token_binding_key_parameters;
1091 int hs_ext_token_binding_key_parameters_length;
1092 int hs_ext_token_binding_key_parameter;
1093
1094 int hs_ext_record_size_limit;
1095
1096 /* QUIC Transport Parameters */
1097 int hs_ext_quictp_len;
1098 int hs_ext_quictp_parameter;
1099 int hs_ext_quictp_parameter_type;
1100 int hs_ext_quictp_parameter_len;
1101 int hs_ext_quictp_parameter_len_old;
1102 int hs_ext_quictp_parameter_value;
1103 int hs_ext_quictp_parameter_original_destination_connection_id;
1104 int hs_ext_quictp_parameter_max_idle_timeout;
1105 int hs_ext_quictp_parameter_stateless_reset_token;
1106 int hs_ext_quictp_parameter_initial_max_data;
1107 int hs_ext_quictp_parameter_initial_max_stream_data_bidi_local;
1108 int hs_ext_quictp_parameter_initial_max_stream_data_bidi_remote;
1109 int hs_ext_quictp_parameter_initial_max_stream_data_uni;
1110 int hs_ext_quictp_parameter_initial_max_streams_bidi;
1111 int hs_ext_quictp_parameter_initial_max_streams_uni;
1112 int hs_ext_quictp_parameter_ack_delay_exponent;
1113 int hs_ext_quictp_parameter_max_ack_delay;
1114 int hs_ext_quictp_parameter_max_udp_payload_size;
1115 int hs_ext_quictp_parameter_pa_ipv4address;
1116 int hs_ext_quictp_parameter_pa_ipv6address;
1117 int hs_ext_quictp_parameter_pa_ipv4port;
1118 int hs_ext_quictp_parameter_pa_ipv6port;
1119 int hs_ext_quictp_parameter_pa_connectionid_length;
1120 int hs_ext_quictp_parameter_pa_connectionid;
1121 int hs_ext_quictp_parameter_pa_statelessresettoken;
1122 int hs_ext_quictp_parameter_active_connection_id_limit;
1123 int hs_ext_quictp_parameter_initial_source_connection_id;
1124 int hs_ext_quictp_parameter_retry_source_connection_id;
1125 int hs_ext_quictp_parameter_max_datagram_frame_size;
1126 int hs_ext_quictp_parameter_cibir_encoding_length;
1127 int hs_ext_quictp_parameter_cibir_encoding_offset;
1128 int hs_ext_quictp_parameter_loss_bits;
1129 int hs_ext_quictp_parameter_address_discovery;
1130 int hs_ext_quictp_parameter_enable_time_stamp_v2;
1131 int hs_ext_quictp_parameter_min_ack_delay;
1132 int hs_ext_quictp_parameter_google_user_agent_id;
1133 int hs_ext_quictp_parameter_google_key_update_not_yet_supported;
1134 int hs_ext_quictp_parameter_google_quic_version;
1135 int hs_ext_quictp_parameter_google_initial_rtt;
1136 int hs_ext_quictp_parameter_google_support_handshake_done;
1137 int hs_ext_quictp_parameter_google_quic_params;
1138 int hs_ext_quictp_parameter_google_quic_params_unknown_field;
1139 int hs_ext_quictp_parameter_google_connection_options;
1140 int hs_ext_quictp_parameter_google_supported_versions_length;
1141 int hs_ext_quictp_parameter_google_supported_version;
1142 int hs_ext_quictp_parameter_facebook_partial_reliability;
1143 int hs_ext_quictp_parameter_chosen_version;
1144 int hs_ext_quictp_parameter_other_version;
1145 int hs_ext_quictp_parameter_enable_multipath;
1146 int hs_ext_quictp_parameter_initial_max_paths;
1147 int hs_ext_quictp_parameter_initial_max_path_id;
1148
1149 int esni_suite;
1150 int esni_record_digest_length;
1151 int esni_record_digest;
1152 int esni_encrypted_sni_length;
1153 int esni_encrypted_sni;
1154 int esni_nonce;
1155
1156 int ech_echconfiglist_length;
1157 int ech_echconfiglist;
1158 int ech_echconfig;
1159 int ech_echconfig_version;
1160 int ech_echconfig_length;
1161 int ech_echconfigcontents_maximum_name_length;
1162 int ech_echconfigcontents_public_name_length;
1163 int ech_echconfigcontents_public_name;
1164 int ech_echconfigcontents_extensions_length;
1165 int ech_echconfigcontents_extensions;
1166 int ech_hpke_keyconfig;
1167 int ech_hpke_keyconfig_config_id;
1168 int ech_hpke_keyconfig_kem_id;
1169 int ech_hpke_keyconfig_public_key_length;
1170 int ech_hpke_keyconfig_public_key;
1171 int ech_hpke_keyconfig_cipher_suites;
1172 int ech_hpke_keyconfig_cipher_suites_length;
1173 int ech_hpke_keyconfig_cipher_suite;
1174 int ech_hpke_keyconfig_cipher_suite_kdf_id;
1175 int ech_hpke_keyconfig_cipher_suite_aead_id;
1176 int ech_clienthello_type;
1177 int ech_cipher_suite;
1178 int ech_config_id;
1179 int ech_enc_length;
1180 int ech_enc;
1181 int ech_payload_length;
1182 int ech_payload;
1183 int ech_confirmation;
1184 int ech_retry_configs;
1185 int ech_padding_data;
1186
1187 int hs_ext_alps_len;
1188 int hs_ext_alps_alpn_list;
1189 int hs_ext_alps_alpn_str;
1190 int hs_ext_alps_alpn_str_len;
1191 int hs_ext_alps_settings;
1192
1193 /* do not forget to update SSL_COMMON_HF_LIST! */
1194 } hf;
1195 struct {
1196 int hs_ext;
1197 int hs_ext_alpn;
1198 int hs_ext_cert_types;
1199 int hs_ext_groups;
1200 int hs_ext_curves_point_formats;
1201 int hs_ext_npn;
1202 int hs_ext_reneg_info;
1203 int hs_ext_key_share;
1204 int hs_ext_key_share_ks;
1205 int hs_ext_pre_shared_key;
1206 int hs_ext_psk_identity;
1207 int hs_ext_psk_binders;
1208 int hs_ext_psk_binder;
1209 int hs_ext_server_name;
1210 int hs_ext_oid_filter;
1211 int hs_ext_quictp_parameter;
1212 int hs_ext_trusted_ca_keys;
1213 int hs_ext_trusted_ca_key;
1214 int hs_sig_hash_alg;
1215 int hs_sig_hash_algs;
1216 int urlhash;
1217 int keyex_params;
1218 int certificates;
1219 int cert_types;
1220 int dnames;
1221 int hs_random;
1222 int cipher_suites;
1223 int comp_methods;
1224 int session_ticket;
1225 int sct;
1226 int cert_status;
1227 int ocsp_response;
1228 int uncompressed_certificates;
1229 int hs_ext_alps;
1230 int ech_echconfiglist;
1231 int ech_echconfig;
1232 int ech_retry_configs;
1233 int ech_hpke_keyconfig;
1234 int ech_hpke_cipher_suites;
1235 int ech_hpke_cipher_suite;
1236 int ech_decrypt;
1237 int hs_ext_token_binding_key_parameters;
1238
1239 /* do not forget to update SSL_COMMON_ETT_LIST! */
1240 } ett;
1241 struct {
1242 /* Generic expert info for malformed packets. */
1243 expert_field client_version_error;
1244 expert_field server_version_error;
1245 expert_field legacy_version;
1246 expert_field malformed_vector_length;
1247 expert_field malformed_buffer_too_small;
1248 expert_field malformed_trailing_data;
1249
1250 expert_field hs_ext_cert_status_undecoded;
1251 expert_field hs_ciphersuite_undecoded;
1252 expert_field hs_srv_keyex_illegal;
1253 expert_field resumed;
1254 expert_field record_length_invalid;
1255 expert_field decompression_error;
1256
1257 expert_field ech_echconfig_invalid_version;
1258 expert_field ech_accepted;
1259 expert_field ech_rejected;
1260
1261 /* do not forget to update SSL_COMMON_EI_LIST! */
1262 } ei;
1264
1265/* Header fields specific to DTLS. See packet-dtls.c */
1266typedef struct {
1267 int hf_dtls_handshake_cookie_len;
1268 int hf_dtls_handshake_cookie;
1269
1270 /* Do not forget to initialize dtls_hfs to -1 in packet-dtls.c! */
1271} dtls_hfs_t;
1272
1273/* Header fields specific to SSL. See packet-tls.c */
1274typedef struct {
1275 int hs_md5_hash;
1276 int hs_sha_hash;
1277
1278 /* Do not forget to initialize ssl_hfs to -1 in packet-tls.c! */
1279} ssl_hfs_t;
1281typedef struct {
1282 uint32_t max_version;
1283 bool server_name_present;
1284 int num_cipher_suites;
1285 int num_extensions;
1286 wmem_strbuf_t *alpn;
1287 wmem_list_t *cipher_list;
1288 wmem_list_t *extension_list;
1289 wmem_list_t *sighash_list;
1290} ja4_data_t;
1291
1292
1293/* Helpers for dissecting Variable-Length Vectors. {{{ */
1294/* Largest value that fits in a 24-bit number (2^24-1). */
1295#define G_MAXUINT24 ((1U << 24) - 1)
1296
1309extern bool
1310ssl_add_vector(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
1311 unsigned offset, unsigned offset_end, uint32_t *ret_length,
1312 int hf_length, uint32_t min_value, uint32_t max_value);
1313
1322extern bool
1323ssl_end_vector(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
1324 unsigned offset, unsigned offset_end);
1325/* }}} */
1326
1327
1328extern void
1329ssl_check_record_length(ssl_common_dissect_t *hf, packet_info *pinfo,
1330 ContentType content_type,
1331 unsigned record_length, proto_item *length_pi,
1332 uint16_t version, tvbuff_t *decrypted_tvb);
1333
1334void
1335ssl_dissect_change_cipher_spec(ssl_common_dissect_t *hf, tvbuff_t *tvb,
1336 packet_info *pinfo, proto_tree *tree,
1337 uint32_t offset, SslSession *session,
1338 bool is_from_server,
1339 const SslDecryptSession *ssl);
1340
1341extern int
1342ssl_dissect_hnd_cli_hello(ssl_common_dissect_t *hf, tvbuff_t *tvb,
1343 packet_info *pinfo, proto_tree *tree, uint32_t offset,
1344 uint32_t offset_end, SslSession *session,
1345 SslDecryptSession *ssl,
1346 dtls_hfs_t *dtls_hfs, ssl_master_key_map_t *mk_map);
1347
1348extern void
1349ssl_dissect_hnd_srv_hello(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info* pinfo,
1350 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1351 SslSession *session, SslDecryptSession *ssl,
1352 bool is_dtls, bool is_hrr);
1353
1354extern void
1355ssl_dissect_hnd_hello_retry_request(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info* pinfo,
1356 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1357 SslSession *session, SslDecryptSession *ssl,
1358 bool is_dtls);
1359
1360extern void
1361ssl_dissect_hnd_encrypted_extensions(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info* pinfo,
1362 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1363 SslSession *session, SslDecryptSession *ssl,
1364 bool is_dtls);
1365
1366extern void
1367ssl_dissect_hnd_new_ses_ticket(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
1368 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1369 SslSession *session, SslDecryptSession *ssl,
1370 bool is_dtls, GHashTable *session_hash);
1371
1372extern void
1373ssl_dissect_hnd_cert(ssl_common_dissect_t *hf, tvbuff_t *tvb, proto_tree *tree,
1374 uint32_t offset, uint32_t offset_end, packet_info *pinfo,
1375 SslSession *session, SslDecryptSession *ssl,
1376 bool is_from_server, bool is_dtls);
1377
1378extern void
1379ssl_dissect_hnd_cert_req(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
1380 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1381 SslSession *session, bool is_dtls);
1382
1383extern void
1384ssl_dissect_hnd_cli_cert_verify(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
1385 proto_tree *tree, uint32_t offset, uint32_t offset_end, uint16_t version);
1386
1387extern void
1388ssl_dissect_hnd_finished(ssl_common_dissect_t *hf, tvbuff_t *tvb,
1389 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1390 const SslSession *session, ssl_hfs_t *ssl_hfs);
1391
1392extern void
1393ssl_dissect_hnd_cert_url(ssl_common_dissect_t *hf, tvbuff_t *tvb, proto_tree *tree, uint32_t offset);
1394
1395extern uint32_t
1396tls_dissect_hnd_certificate_status(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
1397 proto_tree *tree, uint32_t offset, uint32_t offset_end);
1398
1399extern void
1400ssl_dissect_hnd_cli_keyex(ssl_common_dissect_t *hf, tvbuff_t *tvb,
1401 proto_tree *tree, uint32_t offset, uint32_t length,
1402 const SslSession *session);
1403
1404extern void
1405ssl_dissect_hnd_srv_keyex(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
1406 proto_tree *tree, uint32_t offset, uint32_t offset_end,
1407 const SslSession *session);
1408
1409extern void
1410tls13_dissect_hnd_key_update(ssl_common_dissect_t *hf, tvbuff_t *tvb,
1411 proto_tree *tree, uint32_t offset);
1412
1413extern uint32_t
1414tls_dissect_sct_list(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
1415 uint32_t offset, uint32_t offset_end, uint16_t version);
1416
1417extern bool
1418tls13_hkdf_expand_label_context(int md, const StringInfo *secret,
1419 const char *label_prefix, const char *label,
1420 const uint8_t *context, uint8_t context_length,
1421 uint16_t out_len, unsigned char **out);
1422
1423extern bool
1424tls13_hkdf_expand_label(int md, const StringInfo *secret,
1425 const char *label_prefix, const char *label,
1426 uint16_t out_len, unsigned char **out);
1427
1428extern void
1429ssl_dissect_hnd_compress_certificate(ssl_common_dissect_t *hf, tvbuff_t *tvb, proto_tree *tree,
1430 uint32_t offset, uint32_t offset_end, packet_info *pinfo,
1431 SslSession *session _U_, SslDecryptSession *ssl _U_,
1432 bool is_from_server _U_, bool is_dtls _U_);
1433
1434extern tap_packet_status
1435ssl_follow_tap_listener(void *tapdata, packet_info *pinfo, epan_dissect_t *edt _U_, const void *ssl, tap_flags_t flags _U_);
1436
1437/* {{{ */
1438#define SSL_COMMON_LIST_T(name) \
1439ssl_common_dissect_t name
1440/* }}} */
1441
1442/* {{{ */
1443#define SSL_COMMON_HF_LIST(name, prefix) \
1444 { & name .hf.change_cipher_spec, \
1445 { "Change Cipher Spec Message", prefix ".change_cipher_spec", \
1446 FT_NONE, BASE_NONE, NULL, 0x0, \
1447 "Signals a change in cipher specifications", HFILL } \
1448 }, \
1449 { & name .hf.hs_exts_len, \
1450 { "Extensions Length", prefix ".handshake.extensions_length", \
1451 FT_UINT16, BASE_DEC, NULL, 0x0, \
1452 "Length of hello extensions", HFILL } \
1453 }, \
1454 { & name .hf.hs_ext, \
1455 { "Extension", prefix ".handshake.extension", \
1456 FT_NONE, BASE_NONE, NULL, 0x0, \
1457 "Hello extension", HFILL } \
1458 }, \
1459 { & name .hf.hs_ext_type, \
1460 { "Type", prefix ".handshake.extension.type", \
1461 FT_UINT16, BASE_DEC, VALS(tls_hello_extension_types), 0x0, \
1462 "Hello extension type", HFILL } \
1463 }, \
1464 { & name .hf.hs_ext_len, \
1465 { "Length", prefix ".handshake.extension.len", \
1466 FT_UINT16, BASE_DEC, NULL, 0x0, \
1467 "Length of a hello extension", HFILL } \
1468 }, \
1469 { & name .hf.hs_ext_data, \
1470 { "Data", prefix ".handshake.extension.data", \
1471 FT_BYTES, BASE_NONE, NULL, 0x0, \
1472 "Hello Extension data", HFILL } \
1473 }, \
1474 { & name .hf.hs_ext_ech_outer_ext_len, \
1475 { "Outer Extensions List Length", prefix ".handshake.extensions_ech_outer_extensions_length", \
1476 FT_UINT8, BASE_DEC, NULL, 0x0, \
1477 NULL, HFILL } \
1478 }, \
1479 { & name .hf.hs_ext_ech_outer_ext, \
1480 { "Outer Extensions List", prefix ".handshake.extensions_ech_outer_extensions", \
1481 FT_NONE, BASE_NONE, NULL, 0x0, \
1482 "List of extensions derived from Outer Client Hello", HFILL } \
1483 }, \
1484 { & name .hf.hs_ech_confirm, \
1485 { "ECH Confirmation Bytes", prefix ".handshake.ech_confirm", \
1486 FT_BYTES, BASE_NONE, NULL, 0x0, \
1487 NULL, HFILL } \
1488 }, \
1489 { & name .hf.hs_ech_confirm_compute, \
1490 { "Computed ECH Confirmation Bytes", prefix ".handshake.ech_confirm_compute", \
1491 FT_BYTES, BASE_NONE, NULL, 0x0, \
1492 NULL, HFILL } \
1493 }, \
1494 { & name .hf.hs_ext_supported_groups_len, \
1495 { "Supported Groups List Length", prefix ".handshake.extensions_supported_groups_length", \
1496 FT_UINT16, BASE_DEC, NULL, 0x0, \
1497 NULL, HFILL } \
1498 }, \
1499 { & name .hf.hs_ext_supported_groups, \
1500 { "Supported Groups List", prefix ".handshake.extensions_supported_groups", \
1501 FT_NONE, BASE_NONE, NULL, 0x0, \
1502 "List of supported groups (formerly Supported Elliptic Curves)", HFILL } \
1503 }, \
1504 { & name .hf.hs_ext_supported_group, \
1505 { "Supported Group", prefix ".handshake.extensions_supported_group", \
1506 FT_UINT16, BASE_HEX, VALS(ssl_extension_curves), 0x0, \
1507 NULL, HFILL } \
1508 }, \
1509 { & name .hf.hs_ext_ec_point_formats_len, \
1510 { "EC point formats Length", prefix ".handshake.extensions_ec_point_formats_length", \
1511 FT_UINT8, BASE_DEC, NULL, 0x0, \
1512 "Length of elliptic curves point formats field", HFILL } \
1513 }, \
1514 { & name .hf.hs_ext_ec_point_formats, \
1515 { "EC point formats", prefix ".handshake.extensions_ec_point_formats", \
1516 FT_NONE, BASE_NONE, NULL, 0x0, \
1517 "List of elliptic curves point format", HFILL } \
1518 }, \
1519 { & name .hf.hs_ext_ec_point_format, \
1520 { "EC point format", prefix ".handshake.extensions_ec_point_format", \
1521 FT_UINT8, BASE_DEC, VALS(ssl_extension_ec_point_formats), 0x0, \
1522 "Elliptic curves point format", HFILL } \
1523 }, \
1524 { & name .hf.hs_ext_srp_len, \
1525 { "SRP username length", prefix ".handshake.extensions_srp_len", \
1526 FT_UINT8, BASE_DEC, NULL, 0x0, \
1527 "Length of Secure Remote Password username field", HFILL } \
1528 }, \
1529 { & name .hf.hs_ext_srp_username, \
1530 { "SRP username", prefix ".handshake.extensions_srp_username", \
1531 FT_STRING, BASE_NONE, NULL, 0x0, \
1532 "Secure Remote Password username", HFILL } \
1533 }, \
1534 { & name .hf.hs_ext_alpn_len, \
1535 { "ALPN Extension Length", prefix ".handshake.extensions_alpn_len", \
1536 FT_UINT16, BASE_DEC, NULL, 0x0, \
1537 "Length of the ALPN Extension", HFILL } \
1538 }, \
1539 { & name .hf.hs_ext_alpn_list, \
1540 { "ALPN Protocol", prefix ".handshake.extensions_alpn_list", \
1541 FT_NONE, BASE_NONE, NULL, 0x0, \
1542 NULL, HFILL } \
1543 }, \
1544 { & name .hf.hs_ext_alpn_str_len, \
1545 { "ALPN string length", prefix ".handshake.extensions_alpn_str_len", \
1546 FT_UINT8, BASE_DEC, NULL, 0x0, \
1547 "Length of ALPN string", HFILL } \
1548 }, \
1549 { & name .hf.hs_ext_alpn_str, \
1550 { "ALPN Next Protocol", prefix ".handshake.extensions_alpn_str", \
1551 FT_STRING, BASE_NONE, NULL, 0x00, \
1552 NULL, HFILL } \
1553 }, \
1554 { & name .hf.hs_ext_npn_str_len, \
1555 { "Protocol string length", prefix ".handshake.extensions_npn_str_len", \
1556 FT_UINT8, BASE_DEC, NULL, 0x0, \
1557 "Length of next protocol string", HFILL } \
1558 }, \
1559 { & name .hf.hs_ext_npn_str, \
1560 { "Next Protocol", prefix ".handshake.extensions_npn", \
1561 FT_STRING, BASE_NONE, NULL, 0x0, \
1562 NULL, HFILL } \
1563 }, \
1564 { & name .hf.hs_ext_reneg_info_len, \
1565 { "Renegotiation info extension length", prefix ".handshake.extensions_reneg_info_len", \
1566 FT_UINT8, BASE_DEC, NULL, 0x0, \
1567 NULL, HFILL } \
1568 }, \
1569 { & name .hf.hs_ext_reneg_info, \
1570 { "Renegotiation info", prefix ".handshake.extensions_reneg_info",\
1571 FT_BYTES, BASE_NONE, NULL, 0x0, \
1572 NULL, HFILL } \
1573 }, \
1574 { & name .hf.hs_ext_key_share_client_length, \
1575 { "Client Key Share Length", prefix ".handshake.extensions_key_share_client_length", \
1576 FT_UINT16, BASE_DEC, NULL, 0x00, \
1577 NULL, HFILL } \
1578 }, \
1579 { & name .hf.hs_ext_key_share_group, \
1580 { "Group", prefix ".handshake.extensions_key_share_group", \
1581 FT_UINT16, BASE_DEC, VALS(ssl_extension_curves), 0x00, \
1582 NULL, HFILL } \
1583 }, \
1584 { & name .hf.hs_ext_key_share_key_exchange_length, \
1585 { "Key Exchange Length", prefix ".handshake.extensions_key_share_key_exchange_length", \
1586 FT_UINT16, BASE_DEC, NULL, 0x00, \
1587 NULL, HFILL } \
1588 }, \
1589 { & name .hf.hs_ext_key_share_key_exchange, \
1590 { "Key Exchange", prefix ".handshake.extensions_key_share_key_exchange", \
1591 FT_BYTES, BASE_NONE, NULL, 0x0, \
1592 NULL, HFILL } \
1593 }, \
1594 { & name .hf.hs_ext_key_share_selected_group, \
1595 { "Selected Group", prefix ".handshake.extensions_key_share_selected_group", \
1596 FT_UINT16, BASE_DEC, VALS(ssl_extension_curves), 0x00, \
1597 NULL, HFILL } \
1598 }, \
1599 { & name .hf.hs_ext_psk_identities_length, \
1600 { "Identities Length", prefix ".handshake.extensions.psk.identities.length", \
1601 FT_UINT16, BASE_DEC, NULL, 0x0, \
1602 NULL, HFILL } \
1603 }, \
1604 { & name .hf.hs_ext_psk_identity_identity_length, \
1605 { "Identity Length", prefix ".handshake.extensions.psk.identity.identity_length", \
1606 FT_UINT16, BASE_DEC, NULL, 0x0, \
1607 NULL, HFILL } \
1608 }, \
1609 { & name .hf.hs_ext_psk_identity_identity, \
1610 { "Identity", prefix ".handshake.extensions.psk.identity.identity", \
1611 FT_BYTES, BASE_NONE, NULL, 0x0, \
1612 NULL, HFILL } \
1613 }, \
1614 { & name .hf.hs_ext_psk_identity_obfuscated_ticket_age, \
1615 { "Obfuscated Ticket Age", prefix ".handshake.extensions.psk.identity.obfuscated_ticket_age", \
1616 FT_UINT32, BASE_DEC, NULL, 0x0, \
1617 NULL, HFILL } \
1618 }, \
1619 { & name .hf.hs_ext_psk_binders_length, \
1620 { "PSK Binders length", prefix ".handshake.extensions.psk.binders_len", \
1621 FT_UINT16, BASE_DEC, NULL, 0x0, \
1622 NULL, HFILL } \
1623 }, \
1624 { & name .hf.hs_ext_psk_binders, \
1625 { "PSK Binders", prefix ".handshake.extensions.psk.binders", \
1626 FT_NONE, BASE_NONE, NULL, 0x0, \
1627 NULL, HFILL } \
1628 }, \
1629 { & name .hf.hs_ext_psk_binder, \
1630 { "PSK Binder", prefix ".handshake.extensions.psk.binder", \
1631 FT_NONE, BASE_NONE, NULL, 0x0, \
1632 NULL, HFILL } \
1633 }, \
1634 { & name .hf.hs_ext_psk_binder_binder_length, \
1635 { "Binder Length", prefix ".handshake.extensions.psk.binder.binder_length", \
1636 FT_UINT8, BASE_DEC, NULL, 0x0, \
1637 NULL, HFILL } \
1638 }, \
1639 { & name .hf.hs_ext_psk_binder_binder, \
1640 { "Binder", prefix ".handshake.extensions.psk.binder.binder", \
1641 FT_BYTES, BASE_NONE, NULL, 0x0, \
1642 NULL, HFILL } \
1643 }, \
1644 { & name .hf.hs_ext_psk_identity_selected, \
1645 { "Selected Identity", prefix ".handshake.extensions.psk.identity.selected", \
1646 FT_UINT16, BASE_DEC, NULL, 0x0, \
1647 NULL, HFILL } \
1648 }, \
1649 { & name .hf.hs_ext_session_ticket, \
1650 { "Session Ticket", prefix ".handshake.extensions.session_ticket", \
1651 FT_BYTES, BASE_NONE, NULL, 0x0, \
1652 NULL, HFILL } \
1653 }, \
1654 { & name .hf.hs_ext_supported_versions_len, \
1655 { "Supported Versions length", prefix ".handshake.extensions.supported_versions_len", \
1656 FT_UINT8, BASE_DEC, NULL, 0x0, \
1657 NULL, HFILL } \
1658 }, \
1659 { & name .hf.hs_ext_supported_version, \
1660 { "Supported Version", prefix ".handshake.extensions.supported_version", \
1661 FT_UINT16, BASE_HEX, VALS(ssl_versions), 0x0, \
1662 NULL, HFILL } \
1663 }, \
1664 { & name .hf.hs_ext_cookie_len, \
1665 { "Cookie length", prefix ".handshake.extensions.cookie_len", \
1666 FT_UINT16, BASE_DEC, NULL, 0x0, \
1667 NULL, HFILL } \
1668 }, \
1669 { & name .hf.hs_ext_cookie, \
1670 { "Cookie", prefix ".handshake.extensions.cookie", \
1671 FT_BYTES, BASE_NONE, NULL, 0x0, \
1672 NULL, HFILL } \
1673 }, \
1674 { & name .hf.hs_ext_server_name_list_len, \
1675 { "Server Name list length", prefix ".handshake.extensions_server_name_list_len", \
1676 FT_UINT16, BASE_DEC, NULL, 0x0, \
1677 "Length of server name list", HFILL } \
1678 }, \
1679 { & name .hf.hs_ext_server_name_len, \
1680 { "Server Name length", prefix ".handshake.extensions_server_name_len", \
1681 FT_UINT16, BASE_DEC, NULL, 0x0, \
1682 "Length of server name string", HFILL } \
1683 }, \
1684 { & name .hf.hs_ext_server_name_type, \
1685 { "Server Name Type", prefix ".handshake.extensions_server_name_type", \
1686 FT_UINT8, BASE_DEC, VALS(tls_hello_ext_server_name_type_vs), 0x0, \
1687 NULL, HFILL } \
1688 }, \
1689 { & name .hf.hs_ext_server_name, \
1690 { "Server Name", prefix ".handshake.extensions_server_name", \
1691 FT_STRING, BASE_NONE, NULL, 0x0, \
1692 NULL, HFILL } \
1693 }, \
1694 { & name .hf.hs_ext_max_fragment_length, \
1695 { "Maximum Fragment Length", prefix ".handshake.max_fragment_length", \
1696 FT_UINT8, BASE_DEC, VALS(tls_hello_ext_max_fragment_length), 0x00, \
1697 "Maximum fragment length that an endpoint is willing to receive", HFILL } \
1698 }, \
1699 { & name .hf.hs_ext_padding_data, \
1700 { "Padding Data", prefix ".handshake.extensions_padding_data", \
1701 FT_BYTES, BASE_NONE, NULL, 0x0, \
1702 "Must be zero", HFILL } \
1703 }, \
1704 { & name .hf.hs_ext_cert_url_type, \
1705 { "Certificate Chain Type", prefix ".handshake.cert_url_type", \
1706 FT_UINT8, BASE_DEC, VALS(tls_cert_chain_type), 0x0, \
1707 "Certificate Chain Type for Client Certificate URL", HFILL } \
1708 }, \
1709 { & name .hf.hs_ext_cert_url_url_hash_list_len, \
1710 { "URL and Hash list Length", prefix ".handshake.cert_url.url_hash_len", \
1711 FT_UINT16, BASE_DEC, NULL, 0x0, \
1712 NULL, HFILL } \
1713 }, \
1714 { & name .hf.hs_ext_cert_url_item, \
1715 { "URL and Hash", prefix ".handshake.cert_url.url_hash", \
1716 FT_NONE, BASE_NONE, NULL, 0x0, \
1717 NULL, HFILL } \
1718 }, \
1719 { & name .hf.hs_ext_cert_url_url_len, \
1720 { "URL Length", prefix ".handshake.cert_url.url_len", \
1721 FT_UINT16, BASE_DEC, NULL, 0x0, \
1722 NULL, HFILL } \
1723 }, \
1724 { & name .hf.hs_ext_cert_type, \
1725 { "Certificate Type", prefix ".handshake.cert_type.type", \
1726 FT_UINT8, BASE_HEX, VALS(tls_certificate_type), 0x0, \
1727 NULL, HFILL } \
1728 }, \
1729 { & name .hf.hs_ext_cert_types, \
1730 { "Certificate Type List", prefix ".handshake.cert_type.types", \
1731 FT_NONE, BASE_NONE, NULL, 0x0, \
1732 NULL, HFILL } \
1733 }, \
1734 { & name .hf.hs_ext_cert_types_len, \
1735 { "Certificate Type List Length", prefix ".handshake.cert_type.types_len", \
1736 FT_UINT8, BASE_DEC, NULL, 0x0, \
1737 NULL, HFILL } \
1738 }, \
1739 { & name .hf.hs_ext_cert_url_url, \
1740 { "URL", prefix ".handshake.cert_url.url", \
1741 FT_STRING, BASE_NONE, NULL, 0x0, \
1742 "URL used to fetch the certificate(s)", HFILL } \
1743 }, \
1744 { & name .hf.hs_ext_cert_url_padding, \
1745 { "Padding", prefix ".handshake.cert_url.padding", \
1746 FT_NONE, BASE_NONE, NULL, 0x0, \
1747 "Padding that MUST be 0x01 for backwards compatibility", HFILL } \
1748 }, \
1749 { & name .hf.hs_ext_cert_url_sha1, \
1750 { "SHA1 Hash", prefix ".handshake.cert_url.sha1", \
1751 FT_BYTES, BASE_NONE, NULL, 0x0, \
1752 "SHA1 Hash of the certificate", HFILL } \
1753 }, \
1754 { & name .hf.hs_ext_cert_status_type, \
1755 { "Certificate Status Type", prefix ".handshake.extensions_status_request_type", \
1756 FT_UINT8, BASE_DEC, VALS(tls_cert_status_type), 0x0, \
1757 NULL, HFILL } \
1758 }, \
1759 { & name .hf.hs_ext_cert_status_request_len, \
1760 { "Certificate Status Length", prefix ".handshake.extensions_status_request_len", \
1761 FT_UINT16, BASE_DEC, NULL, 0x0, \
1762 NULL, HFILL } \
1763 }, \
1764 { & name .hf.hs_ext_cert_status_responder_id_list_len, \
1765 { "Responder ID list Length", prefix ".handshake.extensions_status_request_responder_ids_len", \
1766 FT_UINT16, BASE_DEC, NULL, 0x0, \
1767 NULL, HFILL } \
1768 }, \
1769 { & name .hf.hs_ext_cert_status_request_extensions_len, \
1770 { "Request Extensions Length", prefix ".handshake.extensions_status_request_exts_len", \
1771 FT_UINT16, BASE_DEC, NULL, 0x0, \
1772 NULL, HFILL } \
1773 }, \
1774 { & name .hf.hs_ext_cert_status_request_list_len, \
1775 { "Certificate Status List Length", prefix ".handshake.extensions_status_request_list_len", \
1776 FT_UINT16, BASE_DEC, NULL, 0x0, \
1777 "CertificateStatusRequestItemV2 list length", HFILL } \
1778 }, \
1779 { & name .hf.hs_ocsp_response_list_len, \
1780 { "OCSP Response List Length", prefix ".handshake.ocsp_response_list_len", \
1781 FT_UINT24, BASE_DEC, NULL, 0x0, \
1782 "OCSPResponseList length", HFILL } \
1783 }, \
1784 { & name .hf.hs_ocsp_response_len, \
1785 { "OCSP Response Length", prefix ".handshake.ocsp_response_len", \
1786 FT_UINT24, BASE_DEC, NULL, 0x0, \
1787 NULL, HFILL } \
1788 }, \
1789 { & name .hf.hs_sig_hash_alg_len, \
1790 { "Signature Hash Algorithms Length", prefix ".handshake.sig_hash_alg_len", \
1791 FT_UINT16, BASE_DEC, NULL, 0x0, \
1792 "Length of Signature Hash Algorithms", HFILL } \
1793 }, \
1794 { & name .hf.hs_sig_hash_algs, \
1795 { "Signature Algorithms", prefix ".handshake.sig_hash_algs", \
1796 FT_NONE, BASE_NONE, NULL, 0x0, \
1797 "List of supported Signature Algorithms", HFILL } \
1798 }, \
1799 { & name .hf.hs_sig_hash_alg, \
1800 { "Signature Algorithm", prefix ".handshake.sig_hash_alg", \
1801 FT_UINT16, BASE_HEX, VALS(tls13_signature_algorithm), 0x0, \
1802 NULL, HFILL } \
1803 }, \
1804 { & name .hf.hs_sig_hash_hash, \
1805 { "Signature Hash Algorithm Hash", prefix ".handshake.sig_hash_hash", \
1806 FT_UINT8, BASE_DEC, VALS(tls_hash_algorithm), 0x0, \
1807 "Hash algorithm (TLS 1.2)", HFILL } \
1808 }, \
1809 { & name .hf.hs_sig_hash_sig, \
1810 { "Signature Hash Algorithm Signature", prefix ".handshake.sig_hash_sig", \
1811 FT_UINT8, BASE_DEC, VALS(tls_signature_algorithm), 0x0, \
1812 "Signature algorithm (TLS 1.2)", HFILL } \
1813 }, \
1814 { & name .hf.hs_client_keyex_epms_len, \
1815 { "Encrypted PreMaster length", prefix ".handshake.epms_len", \
1816 FT_UINT16, BASE_DEC, NULL, 0x0, \
1817 "Length of encrypted PreMaster secret", HFILL } \
1818 }, \
1819 { & name .hf.hs_client_keyex_epms, \
1820 { "Encrypted PreMaster", prefix ".handshake.epms", \
1821 FT_BYTES, BASE_NONE, NULL, 0x0, \
1822 "Encrypted PreMaster secret", HFILL } \
1823 }, \
1824 { & name .hf.hs_server_keyex_modulus_len, \
1825 { "Modulus Length", prefix ".handshake.modulus_len", \
1826 FT_UINT16, BASE_DEC, NULL, 0x0, \
1827 "Length of RSA-EXPORT modulus", HFILL } \
1828 }, \
1829 { & name .hf.hs_server_keyex_exponent_len, \
1830 { "Exponent Length", prefix ".handshake.exponent_len", \
1831 FT_UINT16, BASE_DEC, NULL, 0x0, \
1832 "Length of RSA-EXPORT exponent", HFILL } \
1833 }, \
1834 { & name .hf.hs_server_keyex_sig_len, \
1835 { "Signature Length", prefix ".handshake.sig_len", \
1836 FT_UINT16, BASE_DEC, NULL, 0x0, \
1837 "Length of Signature", HFILL } \
1838 }, \
1839 { & name .hf.hs_server_keyex_p_len, \
1840 { "p Length", prefix ".handshake.p_len", \
1841 FT_UINT16, BASE_DEC, NULL, 0x0, \
1842 "Length of p", HFILL } \
1843 }, \
1844 { & name .hf.hs_server_keyex_g_len, \
1845 { "g Length", prefix ".handshake.g_len", \
1846 FT_UINT16, BASE_DEC, NULL, 0x0, \
1847 "Length of g", HFILL } \
1848 }, \
1849 { & name .hf.hs_server_keyex_ys_len, \
1850 { "Pubkey Length", prefix ".handshake.ys_len", \
1851 FT_UINT16, BASE_DEC, NULL, 0x0, \
1852 "Length of server's Diffie-Hellman public key", HFILL } \
1853 }, \
1854 { & name .hf.hs_client_keyex_yc_len, \
1855 { "Pubkey Length", prefix ".handshake.yc_len", \
1856 FT_UINT16, BASE_DEC, NULL, 0x0, \
1857 "Length of client's Diffie-Hellman public key", HFILL } \
1858 }, \
1859 { & name .hf.hs_client_keyex_point_len, \
1860 { "Pubkey Length", prefix ".handshake.client_point_len", \
1861 FT_UINT8, BASE_DEC, NULL, 0x0, \
1862 "Length of client's EC Diffie-Hellman public key", HFILL } \
1863 }, \
1864 { & name .hf.hs_server_keyex_point_len, \
1865 { "Pubkey Length", prefix ".handshake.server_point_len", \
1866 FT_UINT8, BASE_DEC, NULL, 0x0, \
1867 "Length of server's EC Diffie-Hellman public key", HFILL } \
1868 }, \
1869 { & name .hf.hs_server_keyex_p, \
1870 { "p", prefix ".handshake.p", \
1871 FT_BYTES, BASE_NONE, NULL, 0x0, \
1872 "Diffie-Hellman p", HFILL } \
1873 }, \
1874 { & name .hf.hs_server_keyex_g, \
1875 { "g", prefix ".handshake.g", \
1876 FT_BYTES, BASE_NONE, NULL, 0x0, \
1877 "Diffie-Hellman g", HFILL } \
1878 }, \
1879 { & name .hf.hs_server_keyex_curve_type, \
1880 { "Curve Type", prefix ".handshake.server_curve_type", \
1881 FT_UINT8, BASE_HEX, VALS(ssl_curve_types), 0x0, \
1882 "Server curve_type", HFILL } \
1883 }, \
1884 { & name .hf.hs_server_keyex_named_curve, \
1885 { "Named Curve", prefix ".handshake.server_named_curve", \
1886 FT_UINT16, BASE_HEX, VALS(ssl_extension_curves), 0x0, \
1887 "Server named_curve", HFILL } \
1888 }, \
1889 { & name .hf.hs_server_keyex_ys, \
1890 { "Pubkey", prefix ".handshake.ys", \
1891 FT_BYTES, BASE_NONE, NULL, 0x0, \
1892 "Diffie-Hellman server pubkey", HFILL } \
1893 }, \
1894 { & name .hf.hs_client_keyex_yc, \
1895 { "Pubkey", prefix ".handshake.yc", \
1896 FT_BYTES, BASE_NONE, NULL, 0x0, \
1897 "Diffie-Hellman client pubkey", HFILL } \
1898 }, \
1899 { & name .hf.hs_server_keyex_point, \
1900 { "Pubkey", prefix ".handshake.server_point", \
1901 FT_BYTES, BASE_NONE, NULL, 0x0, \
1902 "EC Diffie-Hellman server pubkey", HFILL } \
1903 }, \
1904 { & name .hf.hs_client_keyex_point, \
1905 { "Pubkey", prefix ".handshake.client_point", \
1906 FT_BYTES, BASE_NONE, NULL, 0x0, \
1907 "EC Diffie-Hellman client pubkey", HFILL } \
1908 }, \
1909 { & name .hf.hs_server_keyex_xs_len, \
1910 { "Pubkey Length", prefix ".handshake.xs_len", \
1911 FT_UINT8, BASE_DEC, NULL, 0x0, \
1912 "Length of EC J-PAKE server public key", HFILL } \
1913 }, \
1914 { & name .hf.hs_client_keyex_xc_len, \
1915 { "Pubkey Length", prefix ".handshake.xc_len", \
1916 FT_UINT8, BASE_DEC, NULL, 0x0, \
1917 "Length of EC J-PAKE client public key", HFILL } \
1918 }, \
1919 { & name .hf.hs_server_keyex_xs, \
1920 { "Pubkey", prefix ".handshake.xs", \
1921 FT_BYTES, BASE_NONE, NULL, 0x0, \
1922 "EC J-PAKE server public key", HFILL } \
1923 }, \
1924 { & name .hf.hs_client_keyex_xc, \
1925 { "Pubkey", prefix ".handshake.xc", \
1926 FT_BYTES, BASE_NONE, NULL, 0x0, \
1927 "EC J-PAKE client public key", HFILL } \
1928 }, \
1929 { & name .hf.hs_server_keyex_vs_len, \
1930 { "Ephemeral Pubkey Length", prefix ".handshake.vs_len", \
1931 FT_UINT8, BASE_DEC, NULL, 0x0, \
1932 "Length of EC J-PAKE server ephemeral public key", HFILL } \
1933 }, \
1934 { & name .hf.hs_client_keyex_vc_len, \
1935 { "Ephemeral Pubkey Length", prefix ".handshake.vc_len", \
1936 FT_UINT8, BASE_DEC, NULL, 0x0, \
1937 "Length of EC J-PAKE client ephemeral public key", HFILL } \
1938 }, \
1939 { & name .hf.hs_server_keyex_vs, \
1940 { "Ephemeral Pubkey", prefix ".handshake.vs", \
1941 FT_BYTES, BASE_NONE, NULL, 0x0, \
1942 "EC J-PAKE server ephemeral public key", HFILL } \
1943 }, \
1944 { & name .hf.hs_client_keyex_vc, \
1945 { "Ephemeral Pubkey", prefix ".handshake.vc", \
1946 FT_BYTES, BASE_NONE, NULL, 0x0, \
1947 "EC J-PAKE client ephemeral public key", HFILL } \
1948 }, \
1949 { & name .hf.hs_server_keyex_rs_len, \
1950 { "Schnorr signature Length", prefix ".handshake.rs_len", \
1951 FT_UINT8, BASE_DEC, NULL, 0x0, \
1952 "Length of EC J-PAKE server Schnorr signature", HFILL } \
1953 }, \
1954 { & name .hf.hs_client_keyex_rc_len, \
1955 { "Schnorr signature Length", prefix ".handshake.rc_len", \
1956 FT_UINT8, BASE_DEC, NULL, 0x0, \
1957 "Length of EC J-PAKE client Schnorr signature", HFILL } \
1958 }, \
1959 { & name .hf.hs_server_keyex_rs, \
1960 { "Schnorr signature", prefix ".handshake.rs", \
1961 FT_BYTES, BASE_NONE, NULL, 0x0, \
1962 "EC J-PAKE server Schnorr signature", HFILL } \
1963 }, \
1964 { & name .hf.hs_client_keyex_rc, \
1965 { "Schnorr signature", prefix ".handshake.rc", \
1966 FT_BYTES, BASE_NONE, NULL, 0x0, \
1967 "EC J-PAKE client Schnorr signature", HFILL } \
1968 }, \
1969 { & name .hf.hs_server_keyex_modulus, \
1970 { "Modulus", prefix ".handshake.modulus", \
1971 FT_BYTES, BASE_NONE, NULL, 0x0, \
1972 "RSA-EXPORT modulus", HFILL } \
1973 }, \
1974 { & name .hf.hs_server_keyex_exponent, \
1975 { "Exponent", prefix ".handshake.exponent", \
1976 FT_BYTES, BASE_NONE, NULL, 0x0, \
1977 "RSA-EXPORT exponent", HFILL } \
1978 }, \
1979 { & name .hf.hs_server_keyex_sig, \
1980 { "Signature", prefix ".handshake.sig", \
1981 FT_BYTES, BASE_NONE, NULL, 0x0, \
1982 "Diffie-Hellman server signature", HFILL } \
1983 }, \
1984 { & name .hf.hs_server_keyex_hint_len, \
1985 { "Hint Length", prefix ".handshake.hint_len", \
1986 FT_UINT16, BASE_DEC, NULL, 0x0, \
1987 "Length of PSK Hint", HFILL } \
1988 }, \
1989 { & name .hf.hs_server_keyex_hint, \
1990 { "Hint", prefix ".handshake.hint", \
1991 FT_BYTES, BASE_NONE, NULL, 0x0, \
1992 "PSK Hint", HFILL } \
1993 }, \
1994 { & name .hf.hs_client_keyex_identity_len, \
1995 { "Identity Length", prefix ".handshake.identity_len", \
1996 FT_UINT16, BASE_DEC, NULL, 0x0, \
1997 "Length of PSK Identity", HFILL } \
1998 }, \
1999 { & name .hf.hs_client_keyex_identity, \
2000 { "Identity", prefix ".handshake.identity", \
2001 FT_BYTES, BASE_NONE, NULL, 0x0, \
2002 "PSK Identity", HFILL } \
2003 }, \
2004 { & name .hf.hs_ext_heartbeat_mode, \
2005 { "Mode", prefix ".handshake.extension.heartbeat.mode", \
2006 FT_UINT8, BASE_DEC, VALS(tls_heartbeat_mode), 0x0, \
2007 "Heartbeat extension mode", HFILL } \
2008 }, \
2009 { & name .hf.hs_certificates_len, \
2010 { "Certificates Length", prefix ".handshake.certificates_length", \
2011 FT_UINT24, BASE_DEC, NULL, 0x0, \
2012 "Length of certificates field", HFILL } \
2013 }, \
2014 { & name .hf.hs_certificates, \
2015 { "Certificates", prefix ".handshake.certificates", \
2016 FT_NONE, BASE_NONE, NULL, 0x0, \
2017 "List of certificates", HFILL } \
2018 }, \
2019 { & name .hf.hs_certificate, \
2020 { "Certificate", prefix ".handshake.certificate", \
2021 FT_BYTES, BASE_NONE, NULL, 0x0, \
2022 NULL, HFILL } \
2023 }, \
2024 { & name .hf.hs_certificate_len, \
2025 { "Certificate Length", prefix ".handshake.certificate_length", \
2026 FT_UINT24, BASE_DEC, NULL, 0x0, \
2027 "Length of certificate", HFILL } \
2028 }, \
2029 { & name .hf.hs_cert_types_count, \
2030 { "Certificate types count", prefix ".handshake.cert_types_count",\
2031 FT_UINT8, BASE_DEC, NULL, 0x0, \
2032 "Count of certificate types", HFILL } \
2033 }, \
2034 { & name .hf.hs_cert_types, \
2035 { "Certificate types", prefix ".handshake.cert_types", \
2036 FT_NONE, BASE_NONE, NULL, 0x0, \
2037 "List of certificate types", HFILL } \
2038 }, \
2039 { & name .hf.hs_cert_type, \
2040 { "Certificate type", prefix ".handshake.cert_type", \
2041 FT_UINT8, BASE_DEC, VALS(ssl_31_client_certificate_type), 0x0, \
2042 NULL, HFILL } \
2043 }, \
2044 { & name .hf.hs_dnames_len, \
2045 { "Distinguished Names Length", prefix ".handshake.dnames_len", \
2046 FT_UINT16, BASE_DEC, NULL, 0x0, \
2047 "Length of list of CAs that server trusts", HFILL } \
2048 }, \
2049 { & name .hf.hs_dnames, \
2050 { "Distinguished Names", prefix ".handshake.dnames", \
2051 FT_NONE, BASE_NONE, NULL, 0x0, \
2052 "List of CAs that server trusts", HFILL } \
2053 }, \
2054 { & name .hf.hs_dname_len, \
2055 { "Distinguished Name Length", prefix ".handshake.dname_len", \
2056 FT_UINT16, BASE_DEC, NULL, 0x0, \
2057 "Length of distinguished name", HFILL } \
2058 }, \
2059 { & name .hf.hs_dnames_truncated, \
2060 { "Tree view truncated", prefix ".handshake.dnames_truncated", \
2061 FT_NONE, BASE_NONE, NULL, 0x00, \
2062 "Some Distinguished Names are not added to tree pane to limit resources", HFILL } \
2063 }, \
2064 { & name .hf.hs_dname, \
2065 { "Distinguished Name", prefix ".handshake.dname", \
2066 FT_NONE, BASE_NONE, NULL, 0x0, \
2067 "Distinguished name of a CA that server trusts", HFILL } \
2068 }, \
2069 { & name .hf.hs_random, \
2070 { "Random", prefix ".handshake.random", \
2071 FT_BYTES, BASE_NONE, NULL, 0x0, \
2072 "Random values used for deriving keys", HFILL } \
2073 }, \
2074 { & name .hf.hs_random_time, \
2075 { "GMT Unix Time", prefix ".handshake.random_time", \
2076 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, \
2077 "Unix time field of random structure", HFILL } \
2078 }, \
2079 { & name .hf.hs_random_bytes, \
2080 { "Random Bytes", prefix ".handshake.random_bytes", \
2081 FT_BYTES, BASE_NONE, NULL, 0x0, \
2082 "Random values used for deriving keys", HFILL } \
2083 }, \
2084 { & name .hf.hs_session_id, \
2085 { "Session ID", prefix ".handshake.session_id", \
2086 FT_BYTES, BASE_NONE, NULL, 0x0, \
2087 "Identifies the SSL session, allowing later resumption", HFILL }\
2088 }, \
2089 { & name .hf.hs_session_id_len, \
2090 { "Session ID Length", prefix ".handshake.session_id_length", \
2091 FT_UINT8, BASE_DEC, NULL, 0x0, \
2092 "Length of Session ID field", HFILL } \
2093 }, \
2094 { & name .hf.hs_client_version, \
2095 { "Version", prefix ".handshake.version", \
2096 FT_UINT16, BASE_HEX, VALS(ssl_versions), 0x0, \
2097 "Maximum version supported by client [legacy_version if supported_versions ext is present]", HFILL } \
2098 }, \
2099 { & name .hf.hs_server_version, \
2100 { "Version", prefix ".handshake.version", \
2101 FT_UINT16, BASE_HEX, VALS(ssl_versions), 0x0, \
2102 "Version selected by server [legacy_version if supported_versions ext is present]", HFILL } \
2103 }, \
2104 { & name .hf.hs_cipher_suites_len, \
2105 { "Cipher Suites Length", prefix ".handshake.cipher_suites_length", \
2106 FT_UINT16, BASE_DEC, NULL, 0x0, \
2107 "Length of cipher suites field", HFILL } \
2108 }, \
2109 { & name .hf.hs_cipher_suites, \
2110 { "Cipher Suites", prefix ".handshake.ciphersuites", \
2111 FT_NONE, BASE_NONE, NULL, 0x0, \
2112 "List of cipher suites supported by client", HFILL } \
2113 }, \
2114 { & name .hf.hs_cipher_suite, \
2115 { "Cipher Suite", prefix ".handshake.ciphersuite", \
2116 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ssl_31_ciphersuite_ext, 0x0, \
2117 NULL, HFILL } \
2118 }, \
2119 { & name .hf.hs_comp_methods_len, \
2120 { "Compression Methods Length", prefix ".handshake.comp_methods_length", \
2121 FT_UINT8, BASE_DEC, NULL, 0x0, \
2122 "Length of compression methods field", HFILL } \
2123 }, \
2124 { & name .hf.hs_comp_methods, \
2125 { "Compression Methods", prefix ".handshake.comp_methods", \
2126 FT_NONE, BASE_NONE, NULL, 0x0, \
2127 "List of compression methods supported by client", HFILL } \
2128 }, \
2129 { & name .hf.hs_comp_method, \
2130 { "Compression Method", prefix ".handshake.comp_method", \
2131 FT_UINT8, BASE_DEC, VALS(ssl_31_compression_method), 0x0, \
2132 NULL, HFILL } \
2133 }, \
2134 { & name .hf.hs_session_ticket_lifetime_hint, \
2135 { "Session Ticket Lifetime Hint", \
2136 prefix ".handshake.session_ticket_lifetime_hint", \
2137 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x0, \
2138 "New Session Ticket Lifetime Hint", HFILL } \
2139 }, \
2140 { & name .hf.hs_session_ticket_age_add, \
2141 { "Session Ticket Age Add", \
2142 prefix ".handshake.session_ticket_age_add", \
2143 FT_UINT32, BASE_DEC, NULL, 0x0, \
2144 "Random 32-bit value to obscure age of ticket", HFILL } \
2145 }, \
2146 { & name .hf.hs_session_ticket_nonce_len, \
2147 { "Session Ticket Nonce Length", prefix ".handshake.session_ticket_nonce_length", \
2148 FT_UINT8, BASE_DEC, NULL, 0x0, \
2149 NULL, HFILL } \
2150 }, \
2151 { & name .hf.hs_session_ticket_nonce, \
2152 { "Session Ticket Nonce", prefix ".handshake.session_ticket_nonce", \
2153 FT_BYTES, BASE_NONE, NULL, 0x0, \
2154 "A unique per-ticket value", HFILL } \
2155 }, \
2156 { & name .hf.hs_session_ticket_len, \
2157 { "Session Ticket Length", prefix ".handshake.session_ticket_length", \
2158 FT_UINT16, BASE_DEC, NULL, 0x0, \
2159 "New Session Ticket Length", HFILL } \
2160 }, \
2161 { & name .hf.hs_session_ticket, \
2162 { "Session Ticket", prefix ".handshake.session_ticket", \
2163 FT_BYTES, BASE_NONE, NULL, 0x0, \
2164 "New Session Ticket", HFILL } \
2165 }, \
2166 { & name .hf.hs_finished, \
2167 { "Verify Data", prefix ".handshake.verify_data", \
2168 FT_BYTES, BASE_NONE, NULL, 0x0, \
2169 "Opaque verification data", HFILL } \
2170 }, \
2171 { & name .hf.hs_client_cert_vrfy_sig_len, \
2172 { "Signature length", prefix ".handshake.client_cert_vrfy.sig_len", \
2173 FT_UINT16, BASE_DEC, NULL, 0x0, \
2174 "Length of CertificateVerify's signature", HFILL } \
2175 }, \
2176 { & name .hf.hs_client_cert_vrfy_sig, \
2177 { "Signature", prefix ".handshake.client_cert_vrfy.sig", \
2178 FT_BYTES, BASE_NONE, NULL, 0x0, \
2179 "CertificateVerify's signature", HFILL } \
2180 }, \
2181 { & name .hf.hs_ja3_full, \
2182 { "JA3 Fullstring", prefix ".handshake.ja3_full", \
2183 FT_STRING, BASE_NONE, NULL, 0x0, \
2184 NULL, HFILL } \
2185 }, \
2186 { & name .hf.hs_ja3_hash, \
2187 { "JA3", prefix ".handshake.ja3", \
2188 FT_STRING, BASE_NONE, NULL, 0x0, \
2189 NULL, HFILL } \
2190 }, \
2191 { & name .hf.hs_ja3s_full, \
2192 { "JA3S Fullstring", prefix ".handshake.ja3s_full", \
2193 FT_STRING, BASE_NONE, NULL, 0x0, \
2194 NULL, HFILL } \
2195 }, \
2196 { & name .hf.hs_ja3s_hash, \
2197 { "JA3S", prefix ".handshake.ja3s", \
2198 FT_STRING, BASE_NONE, NULL, 0x0, \
2199 NULL, HFILL } \
2200 }, \
2201 { & name .hf.hs_ja4, \
2202 { "JA4", prefix ".handshake.ja4", \
2203 FT_STRING, BASE_NONE, NULL, 0x0, \
2204 NULL, HFILL } \
2205 }, \
2206 { & name .hf.hs_ja4_r, \
2207 { "JA4_r", prefix ".handshake.ja4_r", \
2208 FT_STRING, BASE_NONE, NULL, 0x0, \
2209 NULL, HFILL } \
2210 }, \
2211 { & name .hf.hs_ext_psk_ke_modes_length, \
2212 { "PSK Key Exchange Modes Length", prefix ".extension.psk_ke_modes_length", \
2213 FT_UINT8, BASE_DEC, NULL, 0x0, \
2214 NULL, HFILL } \
2215 }, \
2216 { & name .hf.hs_ext_psk_ke_mode, \
2217 { "PSK Key Exchange Mode", prefix ".extension.psk_ke_mode", \
2218 FT_UINT8, BASE_DEC, VALS(tls_hello_ext_psk_ke_mode), 0x0, \
2219 "Key exchange modes where the client supports use of PSKs", HFILL } \
2220 }, \
2221 { & name .hf.hs_certificate_request_context_length, \
2222 { "Certificate Request Context Length", prefix ".handshake.certificate_request_context_length", \
2223 FT_UINT8, BASE_DEC, NULL, 0x0, \
2224 NULL, HFILL } \
2225 }, \
2226 { & name .hf.hs_certificate_request_context, \
2227 { "Certificate Request Context", prefix ".handshake.certificate_request_context", \
2228 FT_BYTES, BASE_NONE, NULL, 0x0, \
2229 "Value from CertificateRequest or empty for server auth", HFILL } \
2230 }, \
2231 { & name .hf.hs_key_update_request_update, \
2232 { "Key Update Request", prefix ".handshake.key_update.request_update", \
2233 FT_UINT8, BASE_DEC, VALS(tls13_key_update_request), 0x00, \
2234 "Whether the receiver should also update its keys", HFILL } \
2235 }, \
2236 { & name .hf.sct_scts_length, \
2237 { "Serialized SCT List Length", prefix ".sct.scts_length", \
2238 FT_UINT16, BASE_DEC, NULL, 0x00, \
2239 NULL, HFILL } \
2240 }, \
2241 { & name .hf.sct_sct_length, \
2242 { "Serialized SCT Length", prefix ".sct.sct_length", \
2243 FT_UINT16, BASE_DEC, NULL, 0x00, \
2244 NULL, HFILL } \
2245 }, \
2246 { & name .hf.sct_sct_version, \
2247 { "SCT Version", prefix ".sct.sct_version", \
2248 FT_UINT8, BASE_DEC, NULL, 0x00, \
2249 "SCT Protocol version (v1 (0) is defined in RFC 6962)", HFILL } \
2250 }, \
2251 { & name .hf.sct_sct_logid, \
2252 { "Log ID", prefix ".sct.sct_logid", \
2253 FT_BYTES, BASE_NONE, NULL, 0x00, \
2254 "SHA-256 hash of log's public key", HFILL } \
2255 }, \
2256 { & name .hf.sct_sct_timestamp, \
2257 { "Timestamp", prefix ".sct.sct_timestamp", \
2258 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x00, \
2259 "Timestamp of issuance", HFILL } \
2260 }, \
2261 { & name .hf.sct_sct_extensions_length, \
2262 { "Extensions length", prefix ".sct.sct_extensions_length", \
2263 FT_UINT16, BASE_DEC, NULL, 0x00, \
2264 "Length of future extensions to this protocol (currently none)", HFILL } \
2265 }, \
2266 { & name .hf.sct_sct_extensions, \
2267 { "Extensions", prefix ".sct.sct_extensions", \
2268 FT_NONE, BASE_NONE, NULL, 0x00, \
2269 "Future extensions to this protocol (currently none)", HFILL } \
2270 }, \
2271 { & name .hf.sct_sct_signature_length, \
2272 { "Signature Length", prefix ".sct.sct_signature_length", \
2273 FT_UINT16, BASE_DEC, NULL, 0x00, \
2274 NULL, HFILL } \
2275 }, \
2276 { & name .hf.sct_sct_signature, \
2277 { "Signature", prefix ".sct.sct_signature", \
2278 FT_BYTES, BASE_NONE, NULL, 0x00, \
2279 NULL, HFILL } \
2280 }, \
2281 { & name .hf.hs_ext_max_early_data_size, \
2282 { "Maximum Early Data Size", prefix ".early_data.max_early_data_size", \
2283 FT_UINT32, BASE_DEC, NULL, 0x00, \
2284 "Maximum amount of 0-RTT data that the client may send", HFILL } \
2285 }, \
2286 { & name .hf.hs_ext_oid_filters_length, \
2287 { "OID Filters Length", prefix ".extension.oid_filters_length", \
2288 FT_UINT16, BASE_DEC, NULL, 0x00, \
2289 NULL, HFILL } \
2290 }, \
2291 { & name .hf.hs_ext_oid_filters_oid_length, \
2292 { "Certificate Extension OID Length", prefix ".extension.oid_filters.oid_length", \
2293 FT_UINT8, BASE_DEC, NULL, 0x00, \
2294 NULL, HFILL } \
2295 }, \
2296 { & name .hf.hs_ext_oid_filters_oid, \
2297 { "Certificate Extension OID", prefix ".extension.oid_filters.oid", \
2298 FT_OID, BASE_NONE, NULL, 0x00, \
2299 NULL, HFILL } \
2300 }, \
2301 { & name .hf.hs_ext_oid_filters_values_length, \
2302 { "Certificate Extension Values Length", prefix ".extension.oid_filters.values_length", \
2303 FT_UINT16, BASE_DEC, NULL, 0x00, \
2304 NULL, HFILL } \
2305 }, \
2306 { & name .hf.hs_cred_valid_time, \
2307 { "Valid Time", prefix ".handshake.cred.valid_time", \
2308 FT_UINT16, BASE_DEC, NULL, 0x0, \
2309 "Delegated Credentials Valid Time", HFILL } \
2310 }, \
2311 { & name .hf.hs_cred_pubkey, \
2312 { "Subject Public Key Info", prefix ".handshake.cred.pubkey", \
2313 FT_BYTES, BASE_NONE, NULL, 0x0, \
2314 "Delegated Credentials Subject Public Key Info", HFILL } \
2315 }, \
2316 { & name .hf.hs_cred_pubkey_len, \
2317 { "Subject Public Key Info Length", prefix ".handshake.cred.pubkey_len", \
2318 FT_UINT24, BASE_DEC, NULL, 0x0, \
2319 "Delegated Credentials Subject Public Key Info Length", HFILL } \
2320 }, \
2321 { & name .hf.hs_cred_signature, \
2322 { "Signature", prefix ".handshake.cred.signature", \
2323 FT_BYTES, BASE_NONE, NULL, 0x0, \
2324 "Delegated Credentials Signature", HFILL } \
2325 }, \
2326 { & name .hf.hs_cred_signature_len, \
2327 { "Signature Length", prefix ".handshake.cred.signature_len", \
2328 FT_UINT16, BASE_DEC, NULL, 0x0, \
2329 "Delegated Credentials Signature Length", HFILL } \
2330 }, \
2331 { & name .hf.hs_ext_compress_certificate_algorithms_length, \
2332 { "Algorithms Length", prefix ".compress_certificate.algorithms_length", \
2333 FT_UINT8, BASE_DEC, NULL, 0x00, \
2334 NULL, HFILL } \
2335 }, \
2336 { & name .hf.hs_ext_compress_certificate_algorithm, \
2337 { "Algorithm", prefix ".compress_certificate.algorithm", \
2338 FT_UINT16, BASE_DEC, VALS(compress_certificate_algorithm_vals), 0x00, \
2339 NULL, HFILL } \
2340 }, \
2341 { & name .hf.hs_ext_compress_certificate_uncompressed_length, \
2342 { "Uncompressed Length", prefix ".compress_certificate.uncompressed_length", \
2343 FT_UINT24, BASE_DEC, NULL, 0x00, \
2344 NULL, HFILL } \
2345 }, \
2346 { & name .hf.hs_ext_compress_certificate_compressed_certificate_message_length, \
2347 { "Length", prefix ".compress_certificate.compressed_certificate_message.length", \
2348 FT_UINT24, BASE_DEC, NULL, 0x00, \
2349 NULL, HFILL } \
2350 }, \
2351 { & name .hf.hs_ext_compress_certificate_compressed_certificate_message, \
2352 { "Compressed Certificate Message", prefix ".compress_certificate.compressed_certificate_message", \
2353 FT_BYTES, BASE_NONE, NULL, 0x00, \
2354 NULL, HFILL } \
2355 }, \
2356 { & name .hf.hs_ext_token_binding_version_major, \
2357 { "Protocol Major Version", prefix ".token_binding.version_major", \
2358 FT_UINT8, BASE_HEX, NULL, 0x00, \
2359 "Major version of the Token Binding protocol", HFILL } \
2360 }, \
2361 { & name .hf.hs_ext_token_binding_version_minor, \
2362 { "Protocol Minor Version", prefix ".token_binding.version_minor", \
2363 FT_UINT8, BASE_HEX, NULL, 0x00, \
2364 "Minor version of the Token Binding protocol", HFILL } \
2365 }, \
2366 { & name .hf.hs_ext_token_binding_key_parameters, \
2367 { "Key Parameters", prefix ".token_binding.key_parameters", \
2368 FT_NONE, BASE_NONE, NULL, 0x0, \
2369 NULL, HFILL } \
2370 }, \
2371 { & name .hf.hs_ext_token_binding_key_parameters_length, \
2372 { "Key Parameters Length", prefix ".token_binding.key_parameters_length", \
2373 FT_UINT8, BASE_DEC, NULL, 0x00, \
2374 "Length of the key parameters list", HFILL } \
2375 }, \
2376 { & name .hf.hs_ext_token_binding_key_parameter, \
2377 { "Key Parameter", prefix ".token_binding.key_parameter", \
2378 FT_UINT8, BASE_DEC, VALS(token_binding_key_parameter_vals), 0x00, \
2379 "Identifier of the Token Binding key parameter", HFILL } \
2380 }, \
2381 { & name .hf.hs_ext_record_size_limit, \
2382 { "Record Size Limit", prefix ".record_size_limit", \
2383 FT_UINT16, BASE_DEC, NULL, 0x00, \
2384 "Maximum record size that an endpoint is willing to receive", HFILL } \
2385 }, \
2386 { & name .hf.hs_ext_quictp_len, \
2387 { "Parameters Length", prefix ".quic.len", \
2388 FT_UINT16, BASE_DEC, NULL, 0x00, \
2389 NULL, HFILL } \
2390 }, \
2391 { & name .hf.hs_ext_quictp_parameter, \
2392 { "Parameter", prefix ".quic.parameter", \
2393 FT_NONE, BASE_NONE, NULL, 0x00, \
2394 NULL, HFILL } \
2395 }, \
2396 { & name .hf.hs_ext_quictp_parameter_type, \
2397 { "Type", prefix ".quic.parameter.type", \
2398 FT_UINT64, BASE_CUSTOM, CF_FUNC(quic_transport_parameter_id_base_custom), 0x00, \
2399 NULL, HFILL } \
2400 }, \
2401 { & name .hf.hs_ext_quictp_parameter_len, \
2402 { "Length", prefix ".quic.parameter.length", \
2403 FT_UINT64, BASE_DEC, NULL, 0x00, \
2404 NULL, HFILL } \
2405 }, \
2406 { & name .hf.hs_ext_quictp_parameter_len_old, \
2407 { "Length", prefix ".quic.parameter.length.old", \
2408 FT_UINT16, BASE_DEC, NULL, 0x00, \
2409 NULL, HFILL } \
2410 }, \
2411 { & name .hf.hs_ext_quictp_parameter_value, \
2412 { "Value", prefix ".quic.parameter.value", \
2413 FT_BYTES, BASE_NONE, NULL, 0x00, \
2414 NULL, HFILL } \
2415 }, \
2416 { & name .hf.hs_ext_quictp_parameter_original_destination_connection_id, \
2417 { "original_destination_connection_id", prefix ".quic.parameter.original_destination_connection_id", \
2418 FT_BYTES, BASE_NONE, NULL, 0x00, \
2419 "Destination Connection ID from the first Initial packet sent by the client", HFILL } \
2420 }, \
2421 { & name .hf.hs_ext_quictp_parameter_max_idle_timeout, \
2422 { "max_idle_timeout", prefix ".quic.parameter.max_idle_timeout", \
2423 FT_UINT64, BASE_DEC, NULL, 0x00, \
2424 "In milliseconds", HFILL } \
2425 }, \
2426 { & name .hf.hs_ext_quictp_parameter_stateless_reset_token, \
2427 { "stateless_reset_token", prefix ".quic.parameter.stateless_reset_token", \
2428 FT_BYTES, BASE_NONE, NULL, 0x00, \
2429 "Used in verifying a stateless reset", HFILL } \
2430 }, \
2431 { & name .hf.hs_ext_quictp_parameter_max_udp_payload_size, \
2432 { "max_udp_payload_size", prefix ".quic.parameter.max_udp_payload_size", \
2433 FT_UINT64, BASE_DEC, NULL, 0x00, \
2434 "Maximum UDP payload size that the endpoint is willing to receive", HFILL } \
2435 }, \
2436 { & name .hf.hs_ext_quictp_parameter_initial_max_data, \
2437 { "initial_max_data", prefix ".quic.parameter.initial_max_data", \
2438 FT_UINT64, BASE_DEC, NULL, 0x00, \
2439 "Contains the initial value for the maximum amount of data that can be sent on the connection", HFILL } \
2440 }, \
2441 { & name .hf.hs_ext_quictp_parameter_initial_max_stream_data_bidi_local, \
2442 { "initial_max_stream_data_bidi_local", prefix ".quic.parameter.initial_max_stream_data_bidi_local", \
2443 FT_UINT64, BASE_DEC, NULL, 0x00, \
2444 "Initial stream maximum data for bidirectional, locally-initiated streams", HFILL } \
2445 }, \
2446 { & name .hf.hs_ext_quictp_parameter_initial_max_stream_data_bidi_remote, \
2447 { "initial_max_stream_data_bidi_remote", prefix ".quic.parameter.initial_max_stream_data_bidi_remote", \
2448 FT_UINT64, BASE_DEC, NULL, 0x00, \
2449 "Initial stream maximum data for bidirectional, peer-initiated streams", HFILL } \
2450 }, \
2451 { & name .hf.hs_ext_quictp_parameter_initial_max_stream_data_uni, \
2452 { "initial_max_stream_data_uni", prefix ".quic.parameter.initial_max_stream_data_uni", \
2453 FT_UINT64, BASE_DEC, NULL, 0x00, \
2454 "Initial stream maximum data for unidirectional streams parameter", HFILL } \
2455 }, \
2456 { & name .hf.hs_ext_quictp_parameter_initial_max_streams_bidi, \
2457 { "initial_max_streams_bidi", prefix ".quic.parameter.initial_max_streams_bidi", \
2458 FT_UINT64, BASE_DEC, NULL, 0x00, \
2459 "Initial maximum number of application-owned bidirectional streams", HFILL } \
2460 }, \
2461 { & name .hf.hs_ext_quictp_parameter_initial_max_streams_uni, \
2462 { "initial_max_streams_uni", prefix ".quic.parameter.initial_max_streams_uni", \
2463 FT_UINT64, BASE_DEC, NULL, 0x00, \
2464 "Initial maximum number of application-owned unidirectional streams", HFILL } \
2465 }, \
2466 { & name .hf.hs_ext_quictp_parameter_ack_delay_exponent, \
2467 { "ack_delay_exponent", prefix ".quic.parameter.ack_delay_exponent", \
2468 FT_UINT64, BASE_DEC, NULL, 0x00, \
2469 "Indicating an exponent used to decode the ACK Delay field in the ACK frame,", HFILL } \
2470 }, \
2471 { & name .hf.hs_ext_quictp_parameter_max_ack_delay, \
2472 { "max_ack_delay", prefix ".quic.parameter.max_ack_delay", \
2473 FT_UINT64, BASE_DEC, NULL, 0x00, \
2474 "Indicating the maximum amount of time in milliseconds by which it will delay sending of acknowledgments", HFILL } \
2475 }, \
2476 { & name .hf.hs_ext_quictp_parameter_pa_ipv4address, \
2477 { "ipv4Address", prefix ".quic.parameter.preferred_address.ipv4address", \
2478 FT_IPv4, BASE_NONE, NULL, 0x00, \
2479 NULL, HFILL } \
2480 }, \
2481 { & name .hf.hs_ext_quictp_parameter_pa_ipv6address, \
2482 { "ipv6Address", prefix ".quic.parameter.preferred_address.ipv6address", \
2483 FT_IPv6, BASE_NONE, NULL, 0x00, \
2484 NULL, HFILL } \
2485 }, \
2486 { & name .hf.hs_ext_quictp_parameter_pa_ipv4port, \
2487 { "ipv4Port", prefix ".quic.parameter.preferred_address.ipv4port", \
2488 FT_UINT16, BASE_DEC, NULL, 0x00, \
2489 NULL, HFILL } \
2490 }, \
2491 { & name .hf.hs_ext_quictp_parameter_pa_ipv6port, \
2492 { "ipv6Port", prefix ".quic.parameter.preferred_address.ipv6port", \
2493 FT_UINT16, BASE_DEC, NULL, 0x00, \
2494 NULL, HFILL } \
2495 }, \
2496 { & name .hf.hs_ext_quictp_parameter_pa_connectionid_length, \
2497 { "Length", prefix ".quic.parameter.preferred_address.connectionid.length", \
2498 FT_UINT8, BASE_DEC, NULL, 0x00, \
2499 "Length of connectionId Field", HFILL } \
2500 }, \
2501 { & name .hf.hs_ext_quictp_parameter_pa_connectionid, \
2502 { "connectionId", prefix ".quic.parameter.preferred_address.connectionid", \
2503 FT_BYTES, BASE_NONE, NULL, 0x00, \
2504 NULL, HFILL } \
2505 }, \
2506 { & name .hf.hs_ext_quictp_parameter_pa_statelessresettoken, \
2507 { "statelessResetToken", prefix ".quic.parameter.preferred_address.statelessresettoken", \
2508 FT_BYTES, BASE_NONE, NULL, 0x00, \
2509 NULL, HFILL } \
2510 }, \
2511 { & name .hf.hs_ext_quictp_parameter_active_connection_id_limit, \
2512 { "Active Connection ID Limit", prefix ".quic.parameter.active_connection_id_limit", \
2513 FT_UINT64, BASE_DEC, NULL, 0x00, \
2514 NULL, HFILL } \
2515 }, \
2516 { & name .hf.hs_ext_quictp_parameter_initial_source_connection_id, \
2517 { "Initial Source Connection ID", prefix ".quic.parameter.initial_source_connection_id", \
2518 FT_BYTES, BASE_NONE, NULL, 0x00, \
2519 NULL, HFILL } \
2520 }, \
2521 { & name .hf.hs_ext_quictp_parameter_retry_source_connection_id, \
2522 { "Retry Source Connection ID", prefix ".quic.parameter.retry_source_connection_id", \
2523 FT_BYTES, BASE_NONE, NULL, 0x00, \
2524 NULL, HFILL } \
2525 }, \
2526 { & name .hf.hs_ext_quictp_parameter_max_datagram_frame_size, \
2527 { "max_datagram_frame_size", prefix ".quic.parameter.max_datagram_frame_size", \
2528 FT_UINT64, BASE_DEC, NULL, 0x00, \
2529 NULL, HFILL } \
2530 }, \
2531 { & name .hf.hs_ext_quictp_parameter_cibir_encoding_length, \
2532 { "length", prefix ".quic.parameter.cibir_encoding.length", \
2533 FT_UINT64, BASE_DEC, NULL, 0x00, \
2534 NULL, HFILL } \
2535 }, \
2536 { & name .hf.hs_ext_quictp_parameter_cibir_encoding_offset, \
2537 { "offset", prefix ".quic.parameter.cibir_encoding.offset", \
2538 FT_UINT64, BASE_DEC, NULL, 0x00, \
2539 NULL, HFILL } \
2540 }, \
2541 { & name .hf.hs_ext_quictp_parameter_loss_bits, \
2542 { "loss_bits", prefix ".quic.parameter.loss_bits", \
2543 FT_UINT64, BASE_DEC, NULL, 0x00, \
2544 NULL, HFILL } \
2545 }, \
2546 { & name .hf.hs_ext_quictp_parameter_address_discovery, \
2547 { "address_discovery", prefix ".quic.parameter.address_discovery", \
2548 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(quic_address_discovery_vals), 0x00, \
2549 NULL, HFILL } \
2550 }, \
2551 { & name .hf.hs_ext_quictp_parameter_enable_time_stamp_v2, \
2552 { "Enable TimestampV2", prefix ".quic.parameter.enable_time_stamp_v2", \
2553 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(quic_enable_time_stamp_v2_vals), 0x00, \
2554 NULL, HFILL } \
2555 }, \
2556 { & name .hf.hs_ext_quictp_parameter_min_ack_delay, \
2557 { "min_ack_delay", prefix ".quic.parameter.min_ack_delay", \
2558 FT_UINT64, BASE_DEC, NULL, 0x00, \
2559 NULL, HFILL } \
2560 }, \
2561 { & name .hf.hs_ext_quictp_parameter_google_user_agent_id, \
2562 { "Google UserAgent", prefix ".quic.parameter.google.user_agent", \
2563 FT_STRING, BASE_NONE, NULL, 0x00, \
2564 NULL, HFILL } \
2565 }, \
2566 { & name .hf.hs_ext_quictp_parameter_google_key_update_not_yet_supported, \
2567 { "Google Key Update not yet supported", prefix ".quic.parameter.google.key_update_not_yet_supported", \
2568 FT_NONE, BASE_NONE, NULL, 0x00, \
2569 NULL, HFILL } \
2570 }, \
2571 { & name .hf.hs_ext_quictp_parameter_google_quic_version, \
2572 { "Google QUIC version", prefix ".quic.parameter.google.quic_version", \
2573 FT_UINT32, BASE_RANGE_STRING | BASE_HEX, RVALS(quic_version_vals), 0x00, \
2574 NULL, HFILL } \
2575 }, \
2576 { & name .hf.hs_ext_quictp_parameter_google_initial_rtt, \
2577 { "Google Initial RTT", prefix ".quic.parameter.google.initial_rtt", \
2578 FT_UINT64, BASE_DEC, NULL, 0x00, \
2579 NULL, HFILL } \
2580 }, \
2581 { & name .hf.hs_ext_quictp_parameter_google_support_handshake_done, \
2582 { "Google Support Handshake Done", prefix ".quic.parameter.google.support_handshake_done", \
2583 FT_NONE, BASE_NONE, NULL, 0x00, \
2584 NULL, HFILL } \
2585 }, \
2586 { & name .hf.hs_ext_quictp_parameter_google_quic_params, \
2587 { "Google QUIC parameters", prefix ".quic.parameter.google.quic_params", \
2588 FT_BYTES, BASE_NONE, NULL, 0x00, \
2589 NULL, HFILL } \
2590 }, \
2591 { & name .hf.hs_ext_quictp_parameter_google_quic_params_unknown_field, \
2592 { "Google Unknown Field", prefix ".quic.parameter.google.quic_params_unknown_field", \
2593 FT_BYTES, BASE_NONE, NULL, 0x00, \
2594 NULL, HFILL } \
2595 }, \
2596 { & name .hf.hs_ext_quictp_parameter_google_connection_options, \
2597 { "Google Connection options", prefix ".quic.parameter.google.connection_options", \
2598 FT_BYTES, BASE_NONE, NULL, 0x00, \
2599 NULL, HFILL } \
2600 }, \
2601 { & name .hf.hs_ext_quictp_parameter_google_supported_versions_length, \
2602 { "Google Supported Versions Length", prefix ".quic.parameter.google.supported_versions_length", \
2603 FT_UINT8, BASE_DEC, NULL, 0x00, \
2604 NULL, HFILL } \
2605 }, \
2606 { & name .hf.hs_ext_quictp_parameter_google_supported_version, \
2607 { "Google Supported Version", prefix ".quic.parameter.google.supported_version", \
2608 FT_UINT32, BASE_RANGE_STRING | BASE_HEX, RVALS(quic_version_vals), 0x00, \
2609 NULL, HFILL } \
2610 }, \
2611 { & name .hf.hs_ext_quictp_parameter_facebook_partial_reliability, \
2612 { "Facebook Partial Reliability", prefix ".quic.parameter.facebook.partial_reliability", \
2613 FT_UINT64, BASE_DEC, NULL, 0x00, \
2614 NULL, HFILL } \
2615 }, \
2616 { & name .hf.hs_ext_quictp_parameter_chosen_version, \
2617 { "Chosen Version", prefix ".quic.parameter.vi.chosen_version", \
2618 FT_UINT32, BASE_RANGE_STRING | BASE_HEX, RVALS(quic_version_vals), 0x00, \
2619 NULL, HFILL } \
2620 }, \
2621 { & name .hf.hs_ext_quictp_parameter_other_version, \
2622 { "Other Version", prefix ".quic.parameter.vi.other_version", \
2623 FT_UINT32, BASE_RANGE_STRING | BASE_HEX, RVALS(quic_version_vals), 0x00, \
2624 NULL, HFILL } \
2625 }, \
2626 { & name .hf.hs_ext_quictp_parameter_enable_multipath, \
2627 { "Enable Multipath", prefix ".quic.parameter.enable_multipath", \
2628 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(quic_enable_multipath_vals), 0x00, \
2629 NULL, HFILL } \
2630 }, \
2631 { & name .hf.hs_ext_quictp_parameter_initial_max_paths, \
2632 { "Initial Max Paths", prefix ".quic.parameter.initial_max_paths", \
2633 FT_UINT64, BASE_DEC, NULL, 0x00, \
2634 NULL, HFILL } \
2635 }, \
2636 { & name .hf.hs_ext_quictp_parameter_initial_max_path_id, \
2637 { "Initial Max Path ID", prefix ".quic.parameter.initial_max_path_id", \
2638 FT_UINT64, BASE_DEC, NULL, 0x00, \
2639 NULL, HFILL } \
2640 }, \
2641 { & name .hf.hs_ext_connection_id_length, \
2642 { "Connection ID length", prefix ".connection_id_length", \
2643 FT_UINT8, BASE_DEC, NULL, 0x00, \
2644 NULL, HFILL } \
2645 }, \
2646 { & name .hf.hs_ext_connection_id, \
2647 { "Connection ID", prefix ".connection_id", \
2648 FT_BYTES, BASE_NONE, NULL, 0x00, \
2649 NULL, HFILL } \
2650 }, \
2651 { & name .hf.hs_ext_trusted_ca_keys_len, \
2652 { "Trusted CA keys length", prefix ".handshake.trusted_ca.keys_length", \
2653 FT_UINT16, BASE_DEC, NULL, 0x00, \
2654 "Length of Trusted CA keys extension", HFILL } \
2655 }, \
2656 { & name .hf.hs_ext_trusted_ca_keys_list, \
2657 { "Trusted CA keys", prefix ".handshake.trusted_ca.keys", \
2658 FT_NONE, BASE_NONE, NULL, 0x00, \
2659 "List of Trusted CA keys", HFILL } \
2660 }, \
2661 { & name .hf.hs_ext_trusted_ca_key, \
2662 { "Trusted CA key", prefix ".handshake.trusted_ca.key", \
2663 FT_NONE, BASE_NONE, NULL, 0x0, \
2664 NULL, HFILL } \
2665 }, \
2666 { & name .hf.hs_ext_trusted_ca_key_type, \
2667 { "Trusted CA key type", prefix ".handshake.trusted_ca.key_type", \
2668 FT_UINT8, BASE_DEC, VALS(tls_hello_ext_trusted_ca_key_type), 0x00, \
2669 "Type of Trusted CA key", HFILL } \
2670 }, \
2671 { & name .hf.hs_ext_trusted_ca_key_hash, \
2672 { "Trusted CA key hash", prefix ".handshake.trusted_ca.key_hash", \
2673 FT_BYTES, BASE_NONE, NULL, 0x00, \
2674 NULL, HFILL } \
2675 }, \
2676 { & name .hf.hs_ext_trusted_ca_key_dname_len, \
2677 { "Distinguished Name Length", prefix ".handshake.trusted_ca.key_dname_len", \
2678 FT_UINT16, BASE_DEC, NULL, 0x0, \
2679 "Length of distinguished name", HFILL } \
2680 }, \
2681 { & name .hf.hs_ext_trusted_ca_key_dname, \
2682 { "Distinguished Name", prefix ".handshake.trusted_ca.key_dname", \
2683 FT_NONE, BASE_NONE, NULL, 0x0, \
2684 "Distinguished name of a CA that the client trusts", HFILL } \
2685 }, \
2686 { & name .hf.esni_suite, \
2687 { "Cipher Suite", prefix ".esni.suite", \
2688 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ssl_31_ciphersuite_ext, 0x0, \
2689 "Cipher suite used to encrypt the SNI", HFILL } \
2690 }, \
2691 { & name .hf.esni_record_digest_length, \
2692 { "Record Digest Length", prefix ".esni.record_digest_length", \
2693 FT_UINT16, BASE_DEC, NULL, 0x00, \
2694 NULL, HFILL } \
2695 }, \
2696 { & name .hf.esni_record_digest, \
2697 { "Record Digest", prefix ".esni.record_digest", \
2698 FT_BYTES, BASE_NONE, NULL, 0x00, \
2699 "Cryptographic hash of the ESNIKeys from which the ESNI key was obtained", HFILL } \
2700 }, \
2701 { & name .hf.esni_encrypted_sni_length, \
2702 { "Encrypted SNI Length", prefix ".esni.encrypted_sni_length", \
2703 FT_UINT16, BASE_DEC, NULL, 0x00, \
2704 NULL, HFILL } \
2705 }, \
2706 { & name .hf.esni_encrypted_sni, \
2707 { "Encrypted SNI", prefix ".esni.encrypted_sni", \
2708 FT_BYTES, BASE_NONE, NULL, 0x00, \
2709 "The encrypted ClientESNIInner structure", HFILL } \
2710 }, \
2711 { & name .hf.esni_nonce, \
2712 { "Nonce", prefix ".esni.nonce", \
2713 FT_BYTES, BASE_NONE, NULL, 0x00, \
2714 "Contents of ClientESNIInner.nonce", HFILL } \
2715 }, \
2716 { & name .hf.ech_echconfiglist_length, \
2717 { "ECHConfigList length", prefix ".ech.echconfiglist_length", \
2718 FT_UINT16, BASE_DEC, NULL, 0x0, \
2719 "Encrypted ClientHello (ECH) Configurations length", HFILL } \
2720 }, \
2721 { & name .hf.ech_echconfiglist, \
2722 { "ECHConfigList", prefix ".ech.echconfiglist", \
2723 FT_NONE, BASE_NONE, NULL, 0x0, \
2724 "Encrypted ClientHello (ECH) Configurations", HFILL } \
2725 }, \
2726 { & name .hf.ech_echconfig, \
2727 { "ECHConfig", prefix ".ech.echconfig", \
2728 FT_NONE, BASE_NONE, NULL, 0x0, \
2729 "Encrypted ClientHello (ECH) Configuration", HFILL } \
2730 }, \
2731 { & name .hf.ech_echconfig_version, \
2732 { "Version", prefix ".ech.echconfig.version", \
2733 FT_UINT16, BASE_HEX, NULL, 0x0, \
2734 "Encrypted ClientHello: ECHConfig version", HFILL } \
2735 }, \
2736 { & name .hf.ech_echconfig_length, \
2737 { "Length", prefix ".ech.echconfig.length", \
2738 FT_UINT16, BASE_DEC, NULL, 0x0, \
2739 "Encrypted ClientHello: ECHConfig length", HFILL } \
2740 }, \
2741 { & name .hf.ech_echconfigcontents_maximum_name_length, \
2742 { "Maximum Name Length", prefix ".ech.echconfigcontents.maximum_name_length", \
2743 FT_UINT8, BASE_DEC, NULL, 0x0, \
2744 "The longest name of a backend server, if known", HFILL } \
2745 }, \
2746 { & name .hf.ech_echconfigcontents_public_name_length, \
2747 { "Public Name length", prefix ".ech.echconfigcontents.public_name_length", \
2748 FT_UINT8, BASE_DEC, NULL, 0x0, \
2749 "Length of the Public Name field", HFILL } \
2750 }, \
2751 { & name .hf.ech_echconfigcontents_public_name, \
2752 { "Public Name", prefix ".ech.echconfigcontents.public_name", \
2753 FT_STRING, BASE_NONE, NULL, 0x0, \
2754 "The DNS name of the client-facing server, i.e., the entity trusted to update the ECH configuration", HFILL } \
2755 }, \
2756 { & name .hf.ech_echconfigcontents_extensions_length, \
2757 { "Extensions length", prefix ".ech.echconfigcontents.extensions_length", \
2758 FT_UINT16, BASE_DEC, NULL, 0x0, \
2759 "Length of the Extensions field", HFILL } \
2760 }, \
2761 { & name .hf.ech_echconfigcontents_extensions, \
2762 { "Extensions", prefix ".ech.echconfigcontents.extensions", \
2763 FT_BYTES, BASE_NONE, NULL, 0x0, \
2764 "A list of extensions that the client must take into consideration when generating a ClientHello message", HFILL } \
2765 }, \
2766 { & name .hf.ech_hpke_keyconfig, \
2767 { "HPKE Key Config", prefix ".ech.hpke.keyconfig", \
2768 FT_NONE, BASE_NONE, NULL, 0x0, \
2769 "HPKE Key Config", HFILL } \
2770 }, \
2771 { & name .hf.ech_hpke_keyconfig_config_id, \
2772 { "Config Id", prefix ".ech.hpke.keyconfig.config_id", \
2773 FT_UINT8, BASE_DEC, NULL, 0x0, \
2774 "HPKE Config Id", HFILL } \
2775 }, \
2776 { & name .hf.ech_hpke_keyconfig_kem_id, \
2777 { "KEM Id", prefix ".ech.hpke.keyconfig.kem_id", \
2778 FT_UINT16, BASE_DEC, VALS(kem_id_type_vals), 0x0, \
2779 "HPKE KEM Id", HFILL } \
2780 }, \
2781 { & name .hf.ech_hpke_keyconfig_public_key_length, \
2782 { "Public Key length", prefix ".ech.hpke.keyconfig.public_key_length", \
2783 FT_UINT16, BASE_DEC, NULL, 0x0, \
2784 "HPKE Public Key length", HFILL } \
2785 }, \
2786 { & name .hf.ech_hpke_keyconfig_public_key, \
2787 { "Public Key", prefix ".ech.hpke.keyconfig.public_key", \
2788 FT_BYTES, BASE_NONE, NULL, 0x0, \
2789 "HPKE Public Key", HFILL } \
2790 }, \
2791 { & name .hf.ech_hpke_keyconfig_cipher_suites, \
2792 { "Cipher Suites", prefix ".ech.hpke.keyconfig.cipher_suites", \
2793 FT_NONE, BASE_NONE, NULL, 0x0, \
2794 "HPKE Cipher Suites", HFILL } \
2795 }, \
2796 { & name .hf.ech_hpke_keyconfig_cipher_suites_length, \
2797 { "Cipher Suites length", prefix ".ech.hpke.keyconfig.cipher_suites_length", \
2798 FT_UINT16, BASE_DEC, NULL, 0x0, \
2799 "HPKE Cipher Suites length", HFILL } \
2800 }, \
2801 { & name .hf.ech_hpke_keyconfig_cipher_suite, \
2802 { "Cipher Suite", prefix ".ech.hpke.keyconfig.cipher_suite", \
2803 FT_NONE, BASE_NONE, NULL, 0x0, \
2804 "HPKE Cipher Suite", HFILL } \
2805 }, \
2806 { & name .hf.ech_hpke_keyconfig_cipher_suite_kdf_id, \
2807 { "KDF Id", prefix ".ech.hpke.keyconfig.cipher_suite.kdf_id", \
2808 FT_UINT16, BASE_DEC, VALS(kdf_id_type_vals), 0x0, \
2809 "HPKE KDF Id", HFILL } \
2810 }, \
2811 { & name .hf.ech_hpke_keyconfig_cipher_suite_aead_id, \
2812 { "AEAD Id", prefix ".ech.hpke.keyconfig.cipher_suite.aead_id", \
2813 FT_UINT16, BASE_DEC, VALS(aead_id_type_vals), 0x0, \
2814 "HPKE AEAD Id", HFILL } \
2815 }, \
2816 { & name .hf.ech_clienthello_type, \
2817 { "Client Hello type", prefix ".ech.client_hello_type", \
2818 FT_UINT8, BASE_DEC, VALS(tls_hello_ext_ech_clienthello_types), 0x0, \
2819 "Client Hello type", HFILL } \
2820 }, \
2821 { & name .hf.ech_cipher_suite, \
2822 { "Cipher Suite", prefix ".ech.cipher_suite", \
2823 FT_NONE, BASE_NONE, NULL, 0x0, \
2824 "The cipher suite used to encrypt ClientHelloInner", HFILL } \
2825 }, \
2826 { & name .hf.ech_config_id, \
2827 { "Config Id", prefix ".ech.config_id", \
2828 FT_UINT8, BASE_DEC, NULL, 0x0, \
2829 "The ECHConfigContents.key_config.config_id for the chosen ECHConfig", HFILL } \
2830 }, \
2831 { & name .hf.ech_enc_length, \
2832 { "Enc length", prefix ".ech.enc_length", \
2833 FT_UINT16, BASE_DEC, NULL, 0x0, \
2834 NULL, HFILL } \
2835 }, \
2836 { & name .hf.ech_enc, \
2837 { "Enc", prefix ".ech.enc", \
2838 FT_BYTES, BASE_NONE, NULL, 0x0, \
2839 "The HPKE encapsulated key, used by servers to decrypt the corresponding payload field", HFILL } \
2840 }, \
2841 { & name .hf.ech_payload_length, \
2842 { "Payload length", prefix ".ech.payload_length", \
2843 FT_UINT16, BASE_DEC, NULL, 0x0, \
2844 "Payload Length", HFILL } \
2845 }, \
2846 { & name .hf.ech_payload, \
2847 { "Payload", prefix ".ech.payload", \
2848 FT_BYTES, BASE_NONE, NULL, 0x0, \
2849 "The serialized and encrypted ClientHelloInner structure", HFILL } \
2850 }, \
2851 { & name .hf.ech_confirmation, \
2852 { "Confirmation", prefix ".ech.confirmation", \
2853 FT_BYTES, BASE_NONE, NULL, 0x0, \
2854 "Confirmation of ECH acceptance in a HelloRetryRequest", HFILL } \
2855 }, \
2856 { & name .hf.ech_retry_configs, \
2857 { "Retry Configs", prefix ".ech.retry_configs", \
2858 FT_NONE, BASE_NONE, NULL, 0x0, \
2859 "ECHConfig structures for one-time use by the client in a retry connection", HFILL } \
2860 }, \
2861 { & name .hf.ech_padding_data, \
2862 { "ECH Encrypted Padding", prefix ".ech.encrypted_padding", \
2863 FT_BYTES, BASE_NONE, NULL, 0x0, \
2864 "Must be zero", HFILL } \
2865 }, \
2866 { & name .hf.hs_ext_alps_len, \
2867 { "ALPS Extension Length", prefix ".handshake.extensions_alps_len", \
2868 FT_UINT16, BASE_DEC, NULL, 0x0, \
2869 "Length of the ALPS Extension", HFILL } \
2870 }, \
2871 { & name .hf.hs_ext_alps_alpn_list, \
2872 { "Supported ALPN List", prefix ".handshake.extensions_alps_alpn_list", \
2873 FT_NONE, BASE_NONE, NULL, 0x0, \
2874 "List of supported ALPN by ALPS", HFILL } \
2875 }, \
2876 { & name .hf.hs_ext_alps_alpn_str_len, \
2877 { "Supported ALPN Length", prefix ".handshake.extensions_alps_alpn_str_len", \
2878 FT_UINT8, BASE_DEC, NULL, 0x0, \
2879 "Length of ALPN string", HFILL } \
2880 }, \
2881 { & name .hf.hs_ext_alps_alpn_str, \
2882 { "Supported ALPN", prefix ".handshake.extensions_alps_alpn_str", \
2883 FT_STRING, BASE_NONE, NULL, 0x00, \
2884 "ALPN supported by ALPS", HFILL } \
2885 }, \
2886 { & name .hf.hs_ext_alps_settings, \
2887 { "ALPN Opaque Settings", prefix ".handshake.extensions_alps.settings", \
2888 FT_BYTES, BASE_NONE, NULL, 0x00, \
2889 "ALPN Opaque Settings", HFILL } \
2890 }
2891/* }}} */
2892
2893/* {{{ */
2894#define SSL_COMMON_ETT_LIST(name) \
2895 & name .ett.hs_ext, \
2896 & name .ett.hs_ext_alpn, \
2897 & name .ett.hs_ext_cert_types, \
2898 & name .ett.hs_ext_groups, \
2899 & name .ett.hs_ext_curves_point_formats, \
2900 & name .ett.hs_ext_npn, \
2901 & name .ett.hs_ext_reneg_info, \
2902 & name .ett.hs_ext_key_share, \
2903 & name .ett.hs_ext_key_share_ks, \
2904 & name .ett.hs_ext_pre_shared_key, \
2905 & name .ett.hs_ext_psk_identity, \
2906 & name .ett.hs_ext_psk_binders, \
2907 & name .ett.hs_ext_psk_binder, \
2908 & name .ett.hs_ext_server_name, \
2909 & name .ett.hs_ext_oid_filter, \
2910 & name .ett.hs_ext_quictp_parameter, \
2911 & name .ett.hs_ext_trusted_ca_keys, \
2912 & name .ett.hs_ext_trusted_ca_key, \
2913 & name .ett.hs_sig_hash_alg, \
2914 & name .ett.hs_sig_hash_algs, \
2915 & name .ett.urlhash, \
2916 & name .ett.keyex_params, \
2917 & name .ett.certificates, \
2918 & name .ett.cert_types, \
2919 & name .ett.dnames, \
2920 & name .ett.hs_random, \
2921 & name .ett.cipher_suites, \
2922 & name .ett.comp_methods, \
2923 & name .ett.session_ticket, \
2924 & name .ett.sct, \
2925 & name .ett.cert_status, \
2926 & name .ett.ocsp_response, \
2927 & name .ett.uncompressed_certificates, \
2928 & name .ett.hs_ext_alps, \
2929 & name .ett.ech_echconfiglist, \
2930 & name .ett.ech_echconfig, \
2931 & name .ett.ech_retry_configs, \
2932 & name .ett.ech_hpke_keyconfig, \
2933 & name .ett.ech_hpke_cipher_suites, \
2934 & name .ett.ech_hpke_cipher_suite, \
2935 & name .ett.ech_decrypt, \
2936 & name .ett.hs_ext_token_binding_key_parameters, \
2937
2938/* }}} */
2939
2940/* {{{ */
2941#define SSL_COMMON_EI_LIST(name, prefix) \
2942 { & name .ei.client_version_error, \
2943 { prefix ".handshake.client_version_error", PI_PROTOCOL, PI_WARN, \
2944 "Client Hello legacy version field specifies version 1.3, not version 1.2; some servers may not be able to handle that.", EXPFILL } \
2945 }, \
2946 { & name .ei.server_version_error, \
2947 { prefix ".handshake.server_version_error", PI_PROTOCOL, PI_WARN, \
2948 "Server Hello legacy version field specifies version 1.3, not version 1.2; some middleboxes may not be able to handle that.", EXPFILL } \
2949 }, \
2950 { & name .ei.legacy_version, \
2951 { prefix ".handshake.legacy_version", PI_DEPRECATED, PI_CHAT, \
2952 "This legacy_version field MUST be ignored. The supported_versions extension is present and MUST be used instead.", EXPFILL } \
2953 }, \
2954 { & name .ei.malformed_vector_length, \
2955 { prefix ".malformed.vector_length", PI_PROTOCOL, PI_WARN, \
2956 "Variable vector length is outside the permitted range", EXPFILL } \
2957 }, \
2958 { & name .ei.malformed_buffer_too_small, \
2959 { prefix ".malformed.buffer_too_small", PI_MALFORMED, PI_ERROR, \
2960 "Malformed message, not enough data is available", EXPFILL } \
2961 }, \
2962 { & name .ei.malformed_trailing_data, \
2963 { prefix ".malformed.trailing_data", PI_PROTOCOL, PI_WARN, \
2964 "Undecoded trailing data is present", EXPFILL } \
2965 }, \
2966 { & name .ei.hs_ext_cert_status_undecoded, \
2967 { prefix ".handshake.status_request.undecoded", PI_UNDECODED, PI_NOTE, \
2968 "Responder ID list or Request Extensions are not implemented", EXPFILL } \
2969 }, \
2970 { & name .ei.hs_ciphersuite_undecoded, \
2971 { prefix ".handshake.ciphersuite.undecoded", PI_UNDECODED, PI_NOTE, \
2972 "Ciphersuite not implemented", EXPFILL } \
2973 }, \
2974 { & name .ei.hs_srv_keyex_illegal, \
2975 { prefix ".handshake.server_keyex_illegal", PI_PROTOCOL, PI_WARN, \
2976 "It is not legal to send the ServerKeyExchange message for this ciphersuite", EXPFILL } \
2977 }, \
2978 { & name .ei.resumed, \
2979 { prefix ".resumed", PI_SEQUENCE, PI_NOTE, \
2980 "This session reuses previously negotiated keys (Session resumption)", EXPFILL } \
2981 }, \
2982 { & name .ei.record_length_invalid, \
2983 { prefix ".record.length.invalid", PI_PROTOCOL, PI_ERROR, \
2984 "Record fragment length is too small or too large", EXPFILL } \
2985 }, \
2986 { & name .ei.decompression_error, \
2987 { prefix ".decompression_error", PI_PROTOCOL, PI_ERROR, \
2988 "Decompression error", EXPFILL } \
2989 }, \
2990 { & name .ei.ech_echconfig_invalid_version, \
2991 { prefix ".ech_echconfig_invalid_version", PI_PROTOCOL, PI_ERROR, \
2992 "Invalid/unknown ECHConfig version", EXPFILL } \
2993 }, \
2994 { & name .ei.ech_accepted, \
2995 { prefix ".ech_accepted", PI_PROTOCOL, PI_NOTE, \
2996 "Calculated ECH Confirmation matches Server Random bytes, ECH was accepted", EXPFILL } \
2997 }, \
2998 { & name .ei.ech_rejected, \
2999 { prefix ".ech_rejected", PI_PROTOCOL, PI_WARN, \
3000 "Calculated ECH Confirmation does not match Server Random bytes, ECH was rejected", EXPFILL } \
3001 }
3002/* }}} */
3003
3004extern void
3005ssl_common_register_ssl_alpn_dissector_table(const char *name,
3006 const char *ui_name, const int proto);
3007
3008extern void
3009ssl_common_register_dtls_alpn_dissector_table(const char *name,
3010 const char *ui_name, const int proto);
3011
3012extern void
3013ssl_common_register_options(module_t *module, ssl_common_options_t *options, bool is_dtls);
3014
3015#ifdef SSL_DECRYPT_DEBUG
3016extern void
3017ssl_debug_printf(const char* fmt,...) G_GNUC_PRINTF(1,2);
3018extern void
3019ssl_print_data(const char* name, const unsigned char* data, size_t len);
3020extern void
3021ssl_print_string(const char* name, const StringInfo* data);
3022extern void
3023ssl_set_debug(const char* name);
3024extern void
3025ssl_debug_flush(void);
3026#else
3027
3028/* No debug: nullify debug operation*/
3029static inline void G_GNUC_PRINTF(1,2)
3030ssl_debug_printf(const char* fmt _U_,...)
3031{
3032}
3033#define ssl_print_data(a, b, c)
3034#define ssl_print_string(a, b)
3035#define ssl_set_debug(name)
3036#define ssl_debug_flush()
3037
3038#endif /* SSL_DECRYPT_DEBUG */
3039
3040
3041uint32_t
3042ssl_dissect_ext_ech_echconfiglist(ssl_common_dissect_t *hf, tvbuff_t *tvb, packet_info *pinfo,
3043 proto_tree *tree, uint32_t offset, uint32_t offset_end);
3044
3045#endif /* __PACKET_TLS_UTILS_H__ */
3046
3047/*
3048 * Editor modelines - https://www.wireshark.org/tools/modelines.html
3049 *
3050 * Local variables:
3051 * c-basic-offset: 4
3052 * tab-width: 8
3053 * indent-tabs-mode: nil
3054 * End:
3055 *
3056 * vi: set shiftwidth=4 tabstop=8 expandtab:
3057 * :indentSize=4:tabSize=8:noTabs=true:
3058 */
port_type
Transport-layer port number types recognized by Wireshark.
Definition address.h:425
Definition packet-tls-utils.h:340
Definition packet-tls-utils.h:356
StringInfo dtls13_aad
Definition packet-tls-utils.h:367
StringInfo app_traffic_secret
Definition packet-tls-utils.h:370
uint64_t seq
Definition packet-tls-utils.h:366
Definition packet-tls-utils.c:2893
Definition packet-tls-utils.h:535
Definition packet-tls-utils.h:348
Definition packet-tls-utils.h:432
SslFlow * flow
Definition packet-tls-utils.h:442
uint64_t record_seq
Definition packet-tls-utils.h:444
uint32_t seq
Definition packet-tls-utils.h:445
unsigned content_len
Definition packet-tls-utils.h:437
unsigned plain_data_len
Definition packet-tls-utils.h:434
int id
Definition packet-tls-utils.h:439
ContentType type
Definition packet-tls-utils.h:441
unsigned char * plain_data
Definition packet-tls-utils.h:433
Definition packet-tls-utils.h:473
Definition packet-tls-utils.h:265
Definition packet-tls-utils.h:453
unsigned reassembly_id
Definition packet-tls-utils.h:456
uint8_t type
Definition packet-tls-utils.h:458
int is_last
Definition packet-tls-utils.h:459
uint32_t offset
Definition packet-tls-utils.h:457
unsigned record_id
Definition packet-tls-utils.h:454
Holds a network or link-layer address of any supported type.
Definition address.h:62
Represents the metadata and indexing information for a single captured frame.
Definition packet_info.h:43
Definition proto.h:909
Definition value_string.h:640
Definition packet-tls-utils.h:577
Mapping between a 64-bit integer value and its string representation.
Definition value_string.h:196
Extended metadata for a value_string array.
Definition value_string.h:325
Mapping between a 32-bit integer value and its string representation.
Definition value_string.h:33
Internal memory allocator interface used by the wmem subsystem.
Definition wmem_allocator.h:34
Definition wmem_list.c:23
Internal structure representing a wmem-allocated string buffer.
Definition wmem_strbuf.h:38
Internal representation of a wmem balanced tree.
Definition wmem_tree-int.h:81
Definition packet-tls-utils.h:427
Definition packet-tls-utils.h:463
Definition packet-tls-utils.h:571
Definition conversation.h:229
Definition packet.c:852
Definition packet.c:97
Definition packet-tls-utils.h:1265
Holds all state for the dissection of a single byte array, including session, buffer,...
Definition epan_dissect.h:28
Pairs an expert info index with its associated header field index for registration and display.
Definition expert.h:41
Definition packet-tls-utils.h:1280
Represents a preference module grouping related preferences under a named, hierarchical entry in the ...
Definition prefs-int.h:27
Definition packet-tls-utils.h:888
Definition packet-tls-utils.h:585
Definition packet-tls-utils.h:1273
Definition packet-tls-utils.h:591
Definition stream.c:41
Core tvbuff (testy virtual buffer) structure representing a region of packet data,...
Definition tvbuff-int.h:95
tap_packet_status
Definition tap.h:22