47 if (
map == tls_certificate_map ) {
49 }
else if (
map == tls_certificate_entry_map ) {
50 return "CertificateEntry";
51 }
else if (
map == tls_client_hello_map ) {
53 }
else if ( (
map == tls_client_key_exchange_dhe_map ) ||
54 (
map == tls_client_key_exchange_ecdhe_map ) ||
55 (
map == tls_client_key_exchange_pubkey_map ) ) {
56 return "ClientKeyExchange";
57 }
else if (
map == tls_digitally_signed_map ) {
58 return "DigitallySigned";
59 }
else if (
map == tls_extension_map ) {
61 }
else if (
map == tls_hello_request_map ) {
62 return "HelloRequest";
63 }
else if (
map == tls_key_share_client_hello_map ) {
64 return "KeyShareClientHello";
65 }
else if (
map == tls_key_share_entry_map ) {
66 return "KeyShareEntry";
67 }
else if (
map == tls_key_share_hello_retry_request_map ) {
68 return "KeyShareHelloRetryRequest";
69 }
else if (
map == tls_key_share_server_hello_map ) {
70 return "KeyShareServerHello";
71 }
else if (
map == tls_max_fragment_length_map ) {
72 return "MaxFragmentLength";
73 }
else if (
map == tls_named_group_list_map ) {
74 return "NamedGroupList";
75 }
else if (
map == tls_new_session_ticket_map ) {
76 return "NewSessionTicket";
77 }
else if (
map == tls_psk_key_exchange_modes_map ) {
78 return "PskKeyExchangeModes";
79 }
else if (
map == tls_renegotiation_info_map ) {
80 return "RenegotiationInfo";
81 }
else if (
map == tls_server_hello_map ) {
83 }
else if (
map == tls_server_hello_done_map ) {
84 return "ServerHelloDone";
85 }
else if ( (
map == tls_server_key_exchange_dhe_map ) ||
86 (
map == tls_server_key_exchange_ecdhe_map ) ) {
87 return "ServerKeyExchange";
88 }
else if (
map == tls_server_name_map ) {
90 }
else if (
map == tls_server_name_list_map ) {
91 return "ServerNameList";
92 }
else if (
map == tls_signature_scheme_list_map ) {
93 return "SignatureSchemeList";
94 }
else if ( (
map == tls_supported_versions_map ) ||
95 (
map == tls_supported_version_map ) ) {
96 return "SupportedVersions";
113 unsigned int count ) {
122 invtypes = ( (
const void * ) &
map[
index] );
123 for ( i = 1 ; i <=
count ; i++ ) {
124 if ( ! invtypes[i] ) {
125 DBGC (
map,
"TLSFMT %s #%d mapping missing extension "
132 for ( ; cursor->
len ; cursor = &extension.
next ) {
136 cursor, &extension ) ) != 0 )
140 for ( i = 1 ; i <=
count ; i++ ) {
144 if ( fields[i].
data ) {
145 DBGC (
map,
"TLSFMT %s #%d has duplicate "
153 DBGC2 (
map,
"TLSFMT %s #%d extension %#04x len "
182 unsigned int minimum;
183 unsigned int len_len;
191 remaining = cursor->
len;
192 DBGC2 (
map,
"TLSFMT %s parsing len %zd\n",
199 DBGC (
map,
"TLSFMT %s mapping has no count\n",
219 DBGC (
map,
"TLSFMT %s #%d mapping missing\n",
228 DBGC2 (
map,
"TLSFMT %s #%d not in version "
234 if ( ( (
size_t )
fixed ) > remaining ) {
235 DBGC (
map,
"TLSFMT %s #%d too short for "
236 "fixed length %d:\n",
242 DBGC2 (
map,
"TLSFMT %s #%d len %d\n",
252 DBGC (
map,
"TLSFMT %s #%d mapping overrun\n",
260 next += ( exts * 2 );
262 DBGC (
map,
"TLSFMT %s #%d mapping extensions "
267 DBGC2 (
map,
"TLSFMT %s #%d not in version %d.%d\n",
274 if ( ( exts >= 0 ) && ( ! remaining ) &&
276 DBGC2 (
map,
"TLSFMT %s #%d optional in version "
283 if ( remaining < len_len ) {
284 DBGC (
map,
"TLSFMT %s #%d too short for %d-byte "
291 for (
len = 0 ; len_len ; len_len-- ) {
299 if ( remaining <
len ) {
300 DBGC (
map,
"TLSFMT %s #%d too short for variable "
308 DBGC2 (
map,
"TLSFMT %s #%d len %zd\n",
325 DBGC (
map,
"TLSFMT %s has excess data:\n",
352 DBGC (
map,
"TLSFMT %s mapping has no count\n",
361 if ( ! cursor->
data )
382 unsigned int count ) {
392 subcursor = &extension.
next;
397 invtypes = ( (
const void * ) &
map[
index] );
398 for ( i = 1 ; i <=
count ; i++ ) {
399 if ( ! invtypes[i] ) {
400 DBGC (
map,
"TLSFMT %s #%d mapping missing extension "
407 for ( i = 1 ; i <=
count ; i++ ) {
410 if ( ! ( fields[i].
data || fields[i].
len ) )
416 extension.
data = fields[i];
419 &extension, subcursor ) ) != 0 ) {
423 DBGC2 (
map,
"TLSFMT %s #%d extension %#04x len %zd\n",
426 cursor->
len += subcursor->
len;
427 if ( cursor->
data ) {
478 unsigned int minimum;
479 unsigned int len_len;
491 DBGC (
map,
"TLSFMT %s mapping has no count\n",
508 DBGC (
map,
"TLSFMT %s #%d mapping missing\n",
517 DBGC2 (
map,
"TLSFMT %s #%d not in version "
523 DBGC2 (
map,
"TLSFMT %s #%d len %d\n",
541 DBGC (
map,
"TLSFMT %s #%d mapping overrun\n",
549 next += ( exts * 2 );
551 DBGC (
map,
"TLSFMT %s #%d mapping extensions "
556 DBGC2 (
map,
"TLSFMT %s #%d not in version %d.%d\n",
563 max = ( len_len ? ( ( 1 << ( 8 * len_len ) ) - 1 ) :
573 DBGC (
map,
"TLSFMT %s #%d len %zd too long\n",
579 if ( ( exts >= 0 ) && ( ! field->
len ) &&
581 DBGC2 (
map,
"TLSFMT %s #%d optional in version "
588 DBGC2 (
map,
"TLSFMT %s #%d len %zd\n",
590 len += ( len_len + field->
len );
592 while ( len_len-- ) {
594 ( field->
len >> ( 8 * len_len ) );
612 DBGC2 (
map,
"TLSFMT %s built len %zd\n",
#define NULL
NULL pointer (VOID *).
struct arbelprm_rc_send_wqe rc
#define assert(condition)
Assert a condition at run-time.
u32 version
Driver version.
uint32_t next
Next descriptor address.
struct eltorito_descriptor_fixed fixed
Fixed portion.
uint16_t ext
Extended status.
uint32_t type
Operating system type.
uint8_t data[48]
Additional event data.
uint16_t group
Type of event.
struct ena_llq_option desc
Descriptor counts.
static unsigned int count
Number of entries.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define EINVAL
Invalid argument.
#define EPROTO
Protocol error.
#define ERANGE
Result too large.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
void * memset(void *dest, int character, size_t len) __nonnull
static __always_inline int struct dma_mapping * map
#define container_of(ptr, type, field)
Get containing structure.
CertificateEntry descriptor.
ClientKeyExchange descriptor (for DHE).
ClientKeyExchange descriptor (for ECDHE).
ClientKeyExchange descriptor (for key transport).
A TLS variable-length data cursor.
size_t len
Length of data.
DigitallySigned descriptor.
struct tls_cursor data
Extension data.
struct tls_cursor next
Next extension.
uint16_t * type
Extension type.
KeyShareClientHello descriptor.
KeyShareEntry descriptor.
KeyShareHelloRetryRequest descriptor.
KeyShareServerHello descriptor.
MaxFragmentLength descriptor.
NamedGroupList descriptor.
NewSessionTicket descriptor.
PskKeyExchangeModes descriptor.
RenegotiationInfo descriptor.
ServerHelloDone descriptor.
ServerKeyExchange descriptor (for DHE).
ServerKeyExchange descriptor (for ECDHE).
ServerNameList descriptor.
SignatureSchemeList descriptor.
SupportedVersions descriptor (in ServerHello).
SupportedVersions descriptor (in ClientHello).
Transport Layer Security Protocol.
#define TLS_RECORD_SIZE_LIMIT
#define TLS_EXTENDED_MASTER_SECRET
#define TLS_RENEGOTIATION_INFO
#define TLS_SUPPORTED_VERSIONS
#define TLS_MAX_FRAGMENT_LENGTH
#define TLS_SESSION_TICKET
#define TLS_SIGNATURE_ALGORITHMS
int tls_build_map(const uint8_t *map, unsigned int version, union tls_ptr_len *desc, struct tls_cursor *cursor)
Build TLS data structure.
static int tls_parse_extensions(const uint8_t *map, unsigned int index, struct tls_cursor *fields, unsigned int count)
Parse TLS extensions within a data structure.
int tls_size_map(const uint8_t *map, unsigned int version, union tls_ptr_len *desc, struct tls_cursor *cursor)
Calculate length of TLS data structure.
static const char * tls_map_name(const uint8_t *map)
Get data structure descriptor mapping name (for debugging).
int tls_parse_opt_map(const uint8_t *map, unsigned int version, const struct tls_cursor *cursor, union tls_ptr_len *desc)
Parse optional TLS data structure.
int tls_parse_map(const uint8_t *map, unsigned int version, const struct tls_cursor *cursor, union tls_ptr_len *desc)
Parse TLS data structure.
static int tls_build_extensions(const uint8_t *map, unsigned int index, struct tls_cursor *fields, unsigned int count)
Build TLS extensions within a data structure.
#define TLS_EXT16(desc, version, field)
Describe a variable-length field containing extensions.
#define tls_build(type, version, desc, cursor)
Build TLS data structure.
#define TLS_FIXED(desc, version, field)
Describe a fixed-length field.
#define TLS_VERSION_TLS_1_2
TLS version 1.2.
#define TLS_MAP_FIXED(byte)
Interpret fixed length from an llllllvv byte.
#define tls_parse(type, version, cursor, desc)
Parse TLS data structure.
#define TLS_VERSION_TLS_1_3
TLS version 1.3.
#define TLS_VAR08(desc, version, field)
Describe a variable-length field with an 8-bit length.
#define TLS_VAR24(desc, version, field)
Describe a variable-length field with a 24-bit length.
#define TLS_MAP_EXTENSIONS(byte)
Interpret number of extensions from an xxxxxxnn byte.
#define TLS_DESCR_MAPPING(desc)
Binary encoding of a descriptor structure mapping.
#define TLS_VAR16(desc, version, field)
Describe a variable-length field with a 16-bit length.
#define TLS_VERSION_BASE
Lowest configurable supported version.
#define TLS_MAPSZ(desc)
Describe size of a descriptor mapping.
#define TLS_EXTND(desc, extension, field)
Describe a variable-length field containing an extension of interest.
#define TLS_MAP_MIN(byte)
Interpret minimum version from an llllllvv byte.
#define TLS_MAP_LEN_LEN(byte)
Interpret number of length bytes from an xxxxxxnn byte.
#define TLS_EXTRA(desc, version, field)
Describe a variable-length field that captures all remaining data.
#define TLS_MAP_LEN_LEN_MAX
Maximum number of length bytes.
u32 lifetime
For Lifetime-type KDEs, the lifetime in seconds.