47 if (
map == tls_certificate_map ) {
49 }
else if (
map == tls_certificate_entry_map ) {
50 return "CertificateEntry";
51 }
else if (
map == tls_digitally_signed_map ) {
52 return "DigitallySigned";
53 }
else if (
map == tls_extension_map ) {
55 }
else if (
map == tls_hello_request_map ) {
56 return "HelloRequest";
57 }
else if (
map == tls_key_share_entry_map ) {
58 return "KeyShareEntry";
59 }
else if (
map == tls_new_session_ticket_map ) {
60 return "NewSessionTicket";
61 }
else if (
map == tls_renegotiation_info_map ) {
62 return "RenegotiationInfo";
63 }
else if (
map == tls_server_hello_map ) {
65 }
else if (
map == tls_server_hello_done_map ) {
66 return "ServerHelloDone";
67 }
else if ( (
map == tls_server_key_exchange_dhe_map ) ||
68 (
map == tls_server_key_exchange_ecdhe_map ) ) {
69 return "ServerKeyExchange";
70 }
else if ( (
map == tls_supported_versions_map ) ||
71 (
map == tls_supported_version_map ) ) {
72 return "SupportedVersions";
89 unsigned int count ) {
98 invtypes = ( (
const void * ) &
map[
index] );
99 for ( i = 1 ; i <=
count ; i++ ) {
100 if ( ! invtypes[i] ) {
101 DBGC (
map,
"TLSFMT %s #%d mapping missing extension "
108 for ( ; cursor->
len ; cursor = &extension.
next ) {
112 cursor, &extension ) ) != 0 )
116 for ( i = 1 ; i <=
count ; i++ ) {
120 if ( fields[i].
data ) {
121 DBGC (
map,
"TLSFMT %s #%d has duplicate "
129 DBGC2 (
map,
"TLSFMT %s #%d extension %#04x len "
158 unsigned int minimum;
159 unsigned int len_len;
167 remaining = cursor->
len;
168 DBGC2 (
map,
"TLSFMT %s parsing len %zd\n",
175 DBGC (
map,
"TLSFMT %s mapping has no count\n",
195 DBGC (
map,
"TLSFMT %s #%d mapping missing\n",
204 DBGC2 (
map,
"TLSFMT %s #%d not in version "
210 if ( ( (
size_t )
fixed ) > remaining ) {
211 DBGC (
map,
"TLSFMT %s #%d too short for "
212 "fixed length %d:\n",
218 DBGC2 (
map,
"TLSFMT %s #%d len %d\n",
228 DBGC (
map,
"TLSFMT %s #%d mapping overrun\n",
236 next += ( exts * 2 );
238 DBGC (
map,
"TLSFMT %s #%d mapping extensions "
243 DBGC2 (
map,
"TLSFMT %s #%d not in version %d.%d\n",
250 if ( ( exts >= 0 ) && ( ! remaining ) &&
252 DBGC2 (
map,
"TLSFMT %s #%d optional in version "
259 if ( remaining < len_len ) {
260 DBGC (
map,
"TLSFMT %s #%d too short for %d-byte "
267 for (
len = 0 ; len_len ; len_len-- ) {
275 if ( remaining <
len ) {
276 DBGC (
map,
"TLSFMT %s #%d too short for variable "
284 DBGC2 (
map,
"TLSFMT %s #%d len %zd\n",
301 DBGC (
map,
"TLSFMT %s has excess data:\n",
328 DBGC (
map,
"TLSFMT %s mapping has no count\n",
337 if ( ! cursor->
data )
358 unsigned int count ) {
368 subcursor = &extension.
next;
373 invtypes = ( (
const void * ) &
map[
index] );
374 for ( i = 1 ; i <=
count ; i++ ) {
375 if ( ! invtypes[i] ) {
376 DBGC (
map,
"TLSFMT %s #%d mapping missing extension "
383 for ( i = 1 ; i <=
count ; i++ ) {
386 if ( ! ( fields[i].
data || fields[i].
len ) )
392 extension.
data = fields[i];
395 &extension, subcursor ) ) != 0 ) {
399 DBGC2 (
map,
"TLSFMT %s #%d extension %#04x len %zd\n",
402 cursor->
len += subcursor->
len;
403 if ( cursor->
data ) {
454 unsigned int minimum;
455 unsigned int len_len;
467 DBGC (
map,
"TLSFMT %s mapping has no count\n",
484 DBGC (
map,
"TLSFMT %s #%d mapping missing\n",
493 DBGC2 (
map,
"TLSFMT %s #%d not in version "
499 DBGC2 (
map,
"TLSFMT %s #%d len %d\n",
517 DBGC (
map,
"TLSFMT %s #%d mapping overrun\n",
525 next += ( exts * 2 );
527 DBGC (
map,
"TLSFMT %s #%d mapping extensions "
532 DBGC2 (
map,
"TLSFMT %s #%d not in version %d.%d\n",
539 max = ( len_len ? ( ( 1 << ( 8 * len_len ) ) - 1 ) :
549 DBGC (
map,
"TLSFMT %s #%d len %zd too long\n",
555 if ( ( exts >= 0 ) && ( ! field->
len ) &&
557 DBGC2 (
map,
"TLSFMT %s #%d optional in version "
564 DBGC2 (
map,
"TLSFMT %s #%d len %zd\n",
566 len += ( len_len + field->
len );
568 while ( len_len-- ) {
570 ( field->
len >> ( 8 * len_len ) );
588 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
struct peerdist_msg_versions versions
Supported versions.
#define container_of(ptr, type, field)
Get containing structure.
CertificateEntry descriptor.
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.
KeyShareEntry descriptor.
NewSessionTicket descriptor.
RenegotiationInfo descriptor.
ServerHelloDone descriptor.
ServerKeyExchange descriptor (for DHE).
ServerKeyExchange descriptor (for ECDHE).
SupportedVersions descriptor (in ServerHello).
SupportedVersions descriptor (in ClientHello).
Transport Layer Security Protocol.
#define TLS_EXTENDED_MASTER_SECRET
#define TLS_RENEGOTIATION_INFO
#define TLS_SUPPORTED_VERSIONS
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.
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.