iPXE
tls.h
Go to the documentation of this file.
1#ifndef _IPXE_TLS_H
2#define _IPXE_TLS_H
3
4/**
5 * @file
6 *
7 * Transport Layer Security Protocol
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/refcnt.h>
15#include <ipxe/interface.h>
16#include <ipxe/process.h>
17#include <ipxe/crypto.h>
18#include <ipxe/md5.h>
19#include <ipxe/sha1.h>
20#include <ipxe/x509.h>
21#include <ipxe/privkey.h>
22#include <ipxe/pending.h>
23#include <ipxe/iobuf.h>
24#include <ipxe/tables.h>
25
26struct tls_connection;
27
28/** A TLS header */
29struct tls_header {
30 /** Content type
31 *
32 * This is a TLS_TYPE_XXX constant
33 */
35 /** Protocol version
36 *
37 * This is a TLS_VERSION_XXX constant
38 */
40 /** Length of payload */
42} __attribute__ (( packed ));
43
44/** TLS version 1.1 */
45#define TLS_VERSION_TLS_1_1 0x0302
46
47/** TLS version 1.2 */
48#define TLS_VERSION_TLS_1_2 0x0303
49
50/** Maximum supported TLS version */
51#define TLS_VERSION_MAX TLS_VERSION_TLS_1_2
52
53/** Change cipher content type */
54#define TLS_TYPE_CHANGE_CIPHER 20
55
56/** Change cipher spec magic byte */
57#define TLS_CHANGE_CIPHER_SPEC 1
58
59/** Alert content type */
60#define TLS_TYPE_ALERT 21
61
62/** Handshake content type */
63#define TLS_TYPE_HANDSHAKE 22
64
65/** Application data content type */
66#define TLS_TYPE_DATA 23
67
68/* Handshake message types */
69#define TLS_HELLO_REQUEST 0
70#define TLS_CLIENT_HELLO 1
71#define TLS_SERVER_HELLO 2
72#define TLS_NEW_SESSION_TICKET 4
73#define TLS_CERTIFICATE 11
74#define TLS_SERVER_KEY_EXCHANGE 12
75#define TLS_CERTIFICATE_REQUEST 13
76#define TLS_SERVER_HELLO_DONE 14
77#define TLS_CERTIFICATE_VERIFY 15
78#define TLS_CLIENT_KEY_EXCHANGE 16
79#define TLS_FINISHED 20
80
81/* TLS alert levels */
82#define TLS_ALERT_WARNING 1
83#define TLS_ALERT_FATAL 2
84
85/* TLS alert descriptions */
86#define TLS_ALERT_CLOSE_NOTIFY 0
87
88/* TLS cipher specifications */
89#define TLS_RSA_WITH_NULL_MD5 0x0001
90#define TLS_RSA_WITH_NULL_SHA 0x0002
91#define TLS_RSA_WITH_AES_128_CBC_SHA 0x002f
92#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033
93#define TLS_RSA_WITH_AES_256_CBC_SHA 0x0035
94#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039
95#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x003c
96#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x003d
97#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067
98#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006b
99#define TLS_RSA_WITH_AES_128_GCM_SHA256 0x009c
100#define TLS_RSA_WITH_AES_256_GCM_SHA384 0x009d
101#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009e
102#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009f
103#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xc009
104#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xc00a
105#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xc013
106#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xc014
107#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xc023
108#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xc024
109#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xc027
110#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xc028
111#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xc02b
112#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xc02c
113#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xc02f
114#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xc030
115
116/* TLS hash algorithm identifiers */
117#define TLS_MD5_ALGORITHM 1
118#define TLS_SHA1_ALGORITHM 2
119#define TLS_SHA224_ALGORITHM 3
120#define TLS_SHA256_ALGORITHM 4
121#define TLS_SHA384_ALGORITHM 5
122#define TLS_SHA512_ALGORITHM 6
123
124/* TLS signature algorithm identifiers */
125#define TLS_RSA_ALGORITHM 1
126#define TLS_ECDSA_ALGORITHM 3
127
128/* TLS server name extension */
129#define TLS_SERVER_NAME 0
130#define TLS_SERVER_NAME_HOST_NAME 0
131
132/* TLS maximum fragment length extension */
133#define TLS_MAX_FRAGMENT_LENGTH 1
134#define TLS_MAX_FRAGMENT_LENGTH_512 1
135#define TLS_MAX_FRAGMENT_LENGTH_1024 2
136#define TLS_MAX_FRAGMENT_LENGTH_2048 3
137#define TLS_MAX_FRAGMENT_LENGTH_4096 4
138
139/* TLS named curve extension */
140#define TLS_NAMED_CURVE 10
141#define TLS_NAMED_CURVE_SECP256R1 23
142#define TLS_NAMED_CURVE_SECP384R1 24
143#define TLS_NAMED_CURVE_X25519 29
144
145/* TLS signature algorithms extension */
146#define TLS_SIGNATURE_ALGORITHMS 13
147
148/* TLS extended master secret extension */
149#define TLS_EXTENDED_MASTER_SECRET 23
150
151/* TLS session ticket extension */
152#define TLS_SESSION_TICKET 35
153
154/* TLS renegotiation information extension */
155#define TLS_RENEGOTIATION_INFO 0xff01
156
157/** TLS authentication header */
159 /** Sequence number */
161 /** TLS header */
163} __attribute__ (( packed ));
164
165/** TLS verification data */
167 /** Client verification data */
169 /** Server verification data */
171} __attribute__ (( packed ));
172
173/** TLS RX state machine state */
178
179/** TLS TX pending flags */
188
189/** A TLS key exchange algorithm */
191 /** Algorithm name */
192 const char *name;
193 /**
194 * Transmit Client Key Exchange record
195 *
196 * @v tls TLS connection
197 * @ret rc Return status code
198 */
199 int ( * exchange ) ( struct tls_connection *tls );
200};
201
202/** A TLS cipher suite */
204 /** Key exchange algorithm */
206 /** Public-key encryption algorithm */
208 /** Bulk encryption cipher algorithm */
210 /** MAC digest algorithm */
212 /** Handshake digest algorithm (for TLSv1.2 and above) */
214 /** Numeric code (in network-endian order) */
216 /** Key length */
218 /** Fixed initialisation vector length */
220 /** Record initialisation vector length */
222 /** MAC length */
224};
225
226/** TLS cipher suite table */
227#define TLS_CIPHER_SUITES \
228 __table ( struct tls_cipher_suite, "tls_cipher_suites" )
229
230/** Declare a TLS cipher suite */
231#define __tls_cipher_suite( pref ) \
232 __table_entry ( TLS_CIPHER_SUITES, pref )
233
234/** TLS named curved type */
235#define TLS_NAMED_CURVE_TYPE 3
236
237/** TLS uncompressed curve point format */
238#define TLS_POINT_FORMAT_UNCOMPRESSED 4
239
240/** A TLS named curve */
242 /** Elliptic curve */
244 /** Numeric code (in network-endian order) */
246 /** Curve point format byte (if any) */
248 /** Pre-master secret length */
250};
251
252/** TLS named curve table */
253#define TLS_NAMED_CURVES \
254 __table ( struct tls_named_curve, "tls_named_curves" )
255
256/** Declare a TLS named curve */
257#define __tls_named_curve( pref ) \
258 __table_entry ( TLS_NAMED_CURVES, pref )
259
260/** A TLS cipher specification */
262 /** Cipher suite */
264 /** Dynamically-allocated storage */
265 void *dynamic;
266 /** Bulk encryption cipher context */
268 /** MAC secret */
270 /** Fixed initialisation vector */
271 void *fixed_iv;
272};
273
274/** A TLS cipher specification pair */
276 /** Current cipher specification */
278 /** Next cipher specification */
280};
281
282/** A TLS signature and hash algorithm identifier */
284 /** Hash algorithm */
286 /** Signature algorithm */
288} __attribute__ (( packed ));
289
290/** A TLS signature algorithm */
292 /** Digest algorithm */
294 /** Public-key algorithm */
296 /** Numeric code */
298};
299
300/** TLS signature hash algorithm table
301 *
302 * Note that the default (TLSv1.1 and earlier) algorithm using
303 * MD5+SHA1 is never explicitly specified.
304 */
305#define TLS_SIG_HASH_ALGORITHMS \
306 __table ( struct tls_signature_hash_algorithm, \
307 "tls_sig_hash_algorithms" )
308
309/** Declare a TLS signature hash algorithm */
310#define __tls_sig_hash_algorithm \
311 __table_entry ( TLS_SIG_HASH_ALGORITHMS, 01 )
312
313/** TLS client random data */
315 /** Random data */
317} __attribute__ (( packed ));
318
319/** An MD5+SHA1 context */
321 /** MD5 context */
323 /** SHA-1 context */
325} __attribute__ (( packed ));
326
327/** MD5+SHA1 context size */
328#define MD5_SHA1_CTX_SIZE sizeof ( struct md5_sha1_context )
329
330/** An MD5+SHA1 digest */
332 /** MD5 digest */
334 /** SHA-1 digest */
336} __attribute__ (( packed ));
337
338/** MD5+SHA1 digest size */
339#define MD5_SHA1_DIGEST_SIZE sizeof ( struct md5_sha1_digest )
340
341/** A TLS session */
343 /** Reference counter */
345 /** List of sessions */
347
348 /** Server name */
349 const char *name;
350 /** Root of trust */
352 /** Private key */
354
355 /** Session ID */
356 uint8_t id[32];
357 /** Length of session ID */
358 size_t id_len;
359 /** Session ticket */
360 void *ticket;
361 /** Length of session ticket */
363 /** Master secret */
365 /** Extended master secret flag */
367
368 /** List of connections */
370};
371
372/** TLS transmit state */
373struct tls_tx {
374 /** Cipher specifications */
376 /** Sequence number */
378 /** Pending transmissions */
379 unsigned int pending;
380 /** Transmit process */
382};
383
384/** TLS receive state */
385struct tls_rx {
386 /** Cipher specifications */
388 /** Sequence number */
390 /** State machine current state */
392 /** Current received record header */
394 /** Current received record header (static I/O buffer) */
396 /** List of received data buffers */
398 /** Received handshake fragment */
400};
401
402/** TLS client state */
404 /** Random bytes */
406 /** Private key (if used) */
408 /** Certificate chain (if used) */
410 /** Security negotiation pending operation */
412};
413
414/** TLS server state */
416 /** Random bytes */
418 /** Server Key Exchange record (if any) */
419 void *exchange;
420 /** Server Key Exchange record length */
422 /** Root of trust */
424 /** Certificate chain */
426 /** Public key (within server certificate) */
428 /** Certificate validator */
430 /** Certificate validation pending operation */
432 /** Security negotiation pending operation */
434};
435
436/** A TLS connection */
438 /** Reference counter */
440
441 /** Session */
443 /** List of connections within the same session */
445 /** Session ID */
447 /** Length of session ID */
449 /** New session ticket */
451 /** Length of new session ticket */
453
454 /** Plaintext stream */
456 /** Ciphertext stream */
458
459 /** Protocol version */
461 /** Master secret */
463 /** Digest algorithm used for handshake verification */
465 /** Digest algorithm context used for handshake verification */
467 /** Secure renegotiation flag */
469 /** Extended master secret flag */
471 /** Verification data */
473
474 /** Transmit state */
475 struct tls_tx tx;
476 /** Receive state */
477 struct tls_rx rx;
478 /** Client state */
480 /** Server state */
482};
483
484/** Advertised maximum fragment length */
485#define TLS_MAX_FRAGMENT_LENGTH_VALUE TLS_MAX_FRAGMENT_LENGTH_4096
486
487/** TX maximum fragment length
488 *
489 * TLS requires us to limit our transmitted records to the maximum
490 * fragment length that we attempt to negotiate, even if the server
491 * does not respect this choice.
492 */
493#define TLS_TX_BUFSIZE 4096
494
495/** RX I/O buffer size
496 *
497 * The maximum fragment length extension is optional, and many common
498 * implementations (including OpenSSL) do not support it. We must
499 * therefore be prepared to receive records of up to 16kB in length.
500 * The chance of an allocation of this size failing is non-negligible,
501 * so we must split received data into smaller allocations.
502 */
503#define TLS_RX_BUFSIZE 4096
504
505/** Minimum RX I/O buffer size
506 *
507 * To simplify manipulations, we ensure that no RX I/O buffer is
508 * smaller than this size. This allows us to assume that the MAC and
509 * padding are entirely contained within the final I/O buffer.
510 */
511#define TLS_RX_MIN_BUFSIZE 512
512
513/** RX I/O buffer alignment */
514#define TLS_RX_ALIGN 16
515
519
520extern int add_tls ( struct interface *xfer, const char *name,
521 struct x509_root *root, struct private_key *key );
522
523#endif /* _IPXE_TLS_H */
union @162305117151260234136356364136041353210355154177 key
Sense key.
Definition scsi.h:3
#define SHA1_DIGEST_SIZE
Definition Tpm20.h:26
unsigned short uint16_t
Definition stdint.h:11
unsigned long long uint64_t
Definition stdint.h:13
unsigned char uint8_t
Definition stdint.h:10
const char * name
Definition ath9k_hw.c:1986
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
Cryptographic API.
Object interfaces.
I/O buffers.
MD5 algorithm.
#define MD5_CTX_SIZE
MD5 context size.
Definition md5.h:67
#define MD5_DIGEST_SIZE
MD5 digest size.
Definition md5.h:73
Pending operations.
Private key.
Processes.
Reference counting.
SHA-1 algorithm.
#define SHA1_CTX_SIZE
SHA-1 context size.
Definition sha1.h:67
struct stp_switch root
Root switch.
Definition stp.h:15
An ASN.1 object cursor.
Definition asn1.h:21
A cipher algorithm.
Definition crypto.h:51
A message digest algorithm.
Definition crypto.h:19
An elliptic curve.
Definition crypto.h:178
An object interface.
Definition interface.h:125
A persistent I/O buffer.
Definition iobuf.h:38
A doubly-linked list entry (or list head)
Definition list.h:19
An MD5+SHA1 context.
Definition tls.h:320
uint8_t sha1[SHA1_CTX_SIZE]
SHA-1 context.
Definition tls.h:324
uint8_t md5[MD5_CTX_SIZE]
MD5 context.
Definition tls.h:322
An MD5+SHA1 digest.
Definition tls.h:331
uint8_t md5[MD5_DIGEST_SIZE]
MD5 digest.
Definition tls.h:333
uint8_t sha1[SHA1_DIGEST_SIZE]
SHA-1 digest.
Definition tls.h:335
A pending operation.
Definition pending.h:14
A private key.
Definition privkey.h:17
A public key algorithm.
Definition crypto.h:122
TLS authentication header.
Definition tls.h:158
uint64_t seq
Sequence number.
Definition tls.h:160
struct tls_header header
TLS header.
Definition tls.h:162
A TLS cipher suite.
Definition tls.h:203
uint8_t fixed_iv_len
Fixed initialisation vector length.
Definition tls.h:219
struct cipher_algorithm * cipher
Bulk encryption cipher algorithm.
Definition tls.h:209
struct pubkey_algorithm * pubkey
Public-key encryption algorithm.
Definition tls.h:207
uint8_t key_len
Key length.
Definition tls.h:217
uint8_t mac_len
MAC length.
Definition tls.h:223
uint8_t record_iv_len
Record initialisation vector length.
Definition tls.h:221
struct digest_algorithm * digest
MAC digest algorithm.
Definition tls.h:211
struct tls_key_exchange_algorithm * exchange
Key exchange algorithm.
Definition tls.h:205
uint16_t code
Numeric code (in network-endian order)
Definition tls.h:215
struct digest_algorithm * handshake
Handshake digest algorithm (for TLSv1.2 and above)
Definition tls.h:213
A TLS cipher specification pair.
Definition tls.h:275
struct tls_cipherspec pending
Next cipher specification.
Definition tls.h:279
struct tls_cipherspec active
Current cipher specification.
Definition tls.h:277
A TLS cipher specification.
Definition tls.h:261
void * fixed_iv
Fixed initialisation vector.
Definition tls.h:271
struct tls_cipher_suite * suite
Cipher suite.
Definition tls.h:263
void * cipher_ctx
Bulk encryption cipher context.
Definition tls.h:267
void * dynamic
Dynamically-allocated storage.
Definition tls.h:265
void * mac_secret
MAC secret.
Definition tls.h:269
TLS client random data.
Definition tls.h:314
uint8_t random[32]
Random data.
Definition tls.h:316
TLS client state.
Definition tls.h:403
struct tls_client_random random
Random bytes.
Definition tls.h:405
struct private_key * key
Private key (if used)
Definition tls.h:407
struct x509_chain * chain
Certificate chain (if used)
Definition tls.h:409
struct pending_operation negotiation
Security negotiation pending operation.
Definition tls.h:411
A TLS connection.
Definition tls.h:437
struct interface cipherstream
Ciphertext stream.
Definition tls.h:457
struct tls_session * session
Session.
Definition tls.h:442
uint8_t master_secret[48]
Master secret.
Definition tls.h:462
struct tls_server server
Server state.
Definition tls.h:481
struct tls_rx rx
Receive state.
Definition tls.h:477
uint8_t * handshake_ctx
Digest algorithm context used for handshake verification.
Definition tls.h:466
void * new_session_ticket
New session ticket.
Definition tls.h:450
struct tls_verify_data verify
Verification data.
Definition tls.h:472
size_t session_id_len
Length of session ID.
Definition tls.h:448
struct interface plainstream
Plaintext stream.
Definition tls.h:455
struct tls_tx tx
Transmit state.
Definition tls.h:475
uint8_t session_id[32]
Session ID.
Definition tls.h:446
int extended_master_secret
Extended master secret flag.
Definition tls.h:470
struct list_head list
List of connections within the same session.
Definition tls.h:444
struct tls_client client
Client state.
Definition tls.h:479
struct digest_algorithm * handshake_digest
Digest algorithm used for handshake verification.
Definition tls.h:464
uint16_t version
Protocol version.
Definition tls.h:460
size_t new_session_ticket_len
Length of new session ticket.
Definition tls.h:452
struct refcnt refcnt
Reference counter.
Definition tls.h:439
int secure_renegotiation
Secure renegotiation flag.
Definition tls.h:468
A TLS header.
Definition tls.h:29
uint16_t version
Protocol version.
Definition tls.h:39
uint16_t length
Length of payload.
Definition tls.h:41
uint8_t type
Content type.
Definition tls.h:34
A TLS key exchange algorithm.
Definition tls.h:190
const char * name
Algorithm name.
Definition tls.h:192
int(* exchange)(struct tls_connection *tls)
Transmit Client Key Exchange record.
Definition tls.h:199
A TLS named curve.
Definition tls.h:241
uint8_t pre_master_secret_len
Pre-master secret length.
Definition tls.h:249
uint16_t code
Numeric code (in network-endian order)
Definition tls.h:245
uint8_t format
Curve point format byte (if any)
Definition tls.h:247
struct elliptic_curve * curve
Elliptic curve.
Definition tls.h:243
TLS receive state.
Definition tls.h:385
struct tls_cipherspec_pair cipherspec
Cipher specifications.
Definition tls.h:387
struct list_head data
List of received data buffers.
Definition tls.h:397
struct io_buffer iobuf
Current received record header (static I/O buffer)
Definition tls.h:395
struct io_buffer * handshake
Received handshake fragment.
Definition tls.h:399
enum tls_rx_state state
State machine current state.
Definition tls.h:391
struct tls_header header
Current received record header.
Definition tls.h:393
uint64_t seq
Sequence number.
Definition tls.h:389
TLS server state.
Definition tls.h:415
struct asn1_cursor key
Public key (within server certificate)
Definition tls.h:427
struct pending_operation validation
Certificate validation pending operation.
Definition tls.h:431
struct interface validator
Certificate validator.
Definition tls.h:429
struct x509_root * root
Root of trust.
Definition tls.h:423
void * exchange
Server Key Exchange record (if any)
Definition tls.h:419
struct pending_operation negotiation
Security negotiation pending operation.
Definition tls.h:433
struct x509_chain * chain
Certificate chain.
Definition tls.h:425
size_t exchange_len
Server Key Exchange record length.
Definition tls.h:421
uint8_t random[32]
Random bytes.
Definition tls.h:417
A TLS session.
Definition tls.h:342
struct private_key * key
Private key.
Definition tls.h:353
int extended_master_secret
Extended master secret flag.
Definition tls.h:366
const char * name
Server name.
Definition tls.h:349
size_t id_len
Length of session ID.
Definition tls.h:358
size_t ticket_len
Length of session ticket.
Definition tls.h:362
uint8_t master_secret[48]
Master secret.
Definition tls.h:364
struct x509_root * root
Root of trust.
Definition tls.h:351
struct list_head conn
List of connections.
Definition tls.h:369
struct refcnt refcnt
Reference counter.
Definition tls.h:344
void * ticket
Session ticket.
Definition tls.h:360
struct list_head list
List of sessions.
Definition tls.h:346
A TLS signature algorithm.
Definition tls.h:291
struct tls_signature_hash_id code
Numeric code.
Definition tls.h:297
struct pubkey_algorithm * pubkey
Public-key algorithm.
Definition tls.h:295
struct digest_algorithm * digest
Digest algorithm.
Definition tls.h:293
A TLS signature and hash algorithm identifier.
Definition tls.h:283
uint8_t hash
Hash algorithm.
Definition tls.h:285
uint8_t signature
Signature algorithm.
Definition tls.h:287
TLS transmit state.
Definition tls.h:373
uint64_t seq
Sequence number.
Definition tls.h:377
unsigned int pending
Pending transmissions.
Definition tls.h:379
struct tls_cipherspec_pair cipherspec
Cipher specifications.
Definition tls.h:375
struct process process
Transmit process.
Definition tls.h:381
TLS verification data.
Definition tls.h:166
uint8_t client[12]
Client verification data.
Definition tls.h:168
uint8_t server[12]
Server verification data.
Definition tls.h:170
An X.509 certificate chain.
Definition x509.h:201
An X.509 root certificate list.
Definition x509.h:375
Linker tables.
struct tls_key_exchange_algorithm tls_pubkey_exchange_algorithm
Public key exchange algorithm.
Definition tls.c:1490
struct tls_key_exchange_algorithm tls_ecdhe_exchange_algorithm
Ephemeral Elliptic Curve Diffie-Hellman key exchange algorithm.
Definition tls.c:1835
struct tls_key_exchange_algorithm tls_dhe_exchange_algorithm
Ephemeral Diffie-Hellman key exchange algorithm.
Definition tls.c:1705
tls_rx_state
TLS RX state machine state.
Definition tls.h:174
@ TLS_RX_HEADER
Definition tls.h:175
@ TLS_RX_DATA
Definition tls.h:176
tls_tx_pending
TLS TX pending flags.
Definition tls.h:180
@ TLS_TX_FINISHED
Definition tls.h:186
@ TLS_TX_CLIENT_KEY_EXCHANGE
Definition tls.h:183
@ TLS_TX_CLIENT_HELLO
Definition tls.h:181
@ TLS_TX_CHANGE_CIPHER
Definition tls.h:185
@ TLS_TX_CERTIFICATE_VERIFY
Definition tls.h:184
@ TLS_TX_CERTIFICATE
Definition tls.h:182
int add_tls(struct interface *xfer, const char *name, struct x509_root *root, struct private_key *key)
Add TLS on an interface.
Definition tls.c:3997
X.509 certificates.