45#define TLS_VERSION_TLS_1_1 0x0302
48#define TLS_VERSION_TLS_1_2 0x0303
51#define TLS_VERSION_MAX TLS_VERSION_TLS_1_2
54#define TLS_TYPE_CHANGE_CIPHER 20
57#define TLS_CHANGE_CIPHER_SPEC 1
60#define TLS_TYPE_ALERT 21
63#define TLS_TYPE_HANDSHAKE 22
66#define TLS_TYPE_DATA 23
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
82#define TLS_ALERT_WARNING 1
83#define TLS_ALERT_FATAL 2
86#define TLS_RSA_WITH_NULL_MD5 0x0001
87#define TLS_RSA_WITH_NULL_SHA 0x0002
88#define TLS_RSA_WITH_AES_128_CBC_SHA 0x002f
89#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033
90#define TLS_RSA_WITH_AES_256_CBC_SHA 0x0035
91#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039
92#define TLS_RSA_WITH_AES_128_CBC_SHA256 0x003c
93#define TLS_RSA_WITH_AES_256_CBC_SHA256 0x003d
94#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067
95#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006b
96#define TLS_RSA_WITH_AES_128_GCM_SHA256 0x009c
97#define TLS_RSA_WITH_AES_256_GCM_SHA384 0x009d
98#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009e
99#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009f
100#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xc009
101#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xc00a
102#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xc013
103#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xc014
104#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xc023
105#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xc024
106#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xc027
107#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xc028
108#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xc02b
109#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xc02c
110#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xc02f
111#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xc030
114#define TLS_MD5_ALGORITHM 1
115#define TLS_SHA1_ALGORITHM 2
116#define TLS_SHA224_ALGORITHM 3
117#define TLS_SHA256_ALGORITHM 4
118#define TLS_SHA384_ALGORITHM 5
119#define TLS_SHA512_ALGORITHM 6
122#define TLS_RSA_ALGORITHM 1
123#define TLS_ECDSA_ALGORITHM 3
126#define TLS_SERVER_NAME 0
127#define TLS_SERVER_NAME_HOST_NAME 0
130#define TLS_MAX_FRAGMENT_LENGTH 1
131#define TLS_MAX_FRAGMENT_LENGTH_512 1
132#define TLS_MAX_FRAGMENT_LENGTH_1024 2
133#define TLS_MAX_FRAGMENT_LENGTH_2048 3
134#define TLS_MAX_FRAGMENT_LENGTH_4096 4
137#define TLS_NAMED_CURVE 10
138#define TLS_NAMED_CURVE_SECP256R1 23
139#define TLS_NAMED_CURVE_SECP384R1 24
140#define TLS_NAMED_CURVE_X25519 29
143#define TLS_SIGNATURE_ALGORITHMS 13
146#define TLS_EXTENDED_MASTER_SECRET 23
149#define TLS_SESSION_TICKET 35
152#define TLS_RENEGOTIATION_INFO 0xff01
224#define TLS_CIPHER_SUITES \
225 __table ( struct tls_cipher_suite, "tls_cipher_suites" )
228#define __tls_cipher_suite( pref ) \
229 __table_entry ( TLS_CIPHER_SUITES, pref )
232#define TLS_NAMED_CURVE_TYPE 3
235#define TLS_POINT_FORMAT_UNCOMPRESSED 4
250#define TLS_NAMED_CURVES \
251 __table ( struct tls_named_curve, "tls_named_curves" )
254#define __tls_named_curve( pref ) \
255 __table_entry ( TLS_NAMED_CURVES, pref )
302#define TLS_SIG_HASH_ALGORITHMS \
303 __table ( struct tls_signature_hash_algorithm, \
304 "tls_sig_hash_algorithms" )
307#define __tls_sig_hash_algorithm \
308 __table_entry ( TLS_SIG_HASH_ALGORITHMS, 01 )
327#define MD5_SHA1_CTX_SIZE sizeof ( struct md5_sha1_context )
338#define MD5_SHA1_DIGEST_SIZE sizeof ( struct md5_sha1_digest )
484#define TLS_MAX_FRAGMENT_LENGTH_VALUE TLS_MAX_FRAGMENT_LENGTH_4096
492#define TLS_TX_BUFSIZE 4096
502#define TLS_RX_BUFSIZE 4096
510#define TLS_RX_MIN_BUFSIZE 512
513#define TLS_RX_ALIGN 16
union @162305117151260234136356364136041353210355154177 key
Sense key.
unsigned long long uint64_t
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
#define MD5_CTX_SIZE
MD5 context size.
#define MD5_DIGEST_SIZE
MD5 digest size.
#define SHA1_CTX_SIZE
SHA-1 context size.
struct stp_switch root
Root switch.
A message digest algorithm.
A doubly-linked list entry (or list head)
uint8_t sha1[SHA1_CTX_SIZE]
SHA-1 context.
uint8_t md5[MD5_CTX_SIZE]
MD5 context.
uint8_t md5[MD5_DIGEST_SIZE]
MD5 digest.
uint8_t sha1[SHA1_DIGEST_SIZE]
SHA-1 digest.
uint8_t fixed_iv_len
Fixed initialisation vector length.
struct cipher_algorithm * cipher
Bulk encryption cipher algorithm.
struct pubkey_algorithm * pubkey
Public-key encryption algorithm.
uint8_t key_len
Key length.
uint8_t mac_len
MAC length.
uint8_t record_iv_len
Record initialisation vector length.
struct digest_algorithm * digest
MAC digest algorithm.
struct tls_key_exchange_algorithm * exchange
Key exchange algorithm.
uint16_t code
Numeric code (in network-endian order)
struct digest_algorithm * handshake
Handshake digest algorithm (for TLSv1.2 and above)
A TLS cipher specification pair.
struct tls_cipherspec pending
Next cipher specification.
struct tls_cipherspec active
Current cipher specification.
A TLS cipher specification.
void * fixed_iv
Fixed initialisation vector.
struct tls_cipher_suite * suite
Cipher suite.
void * cipher_ctx
Bulk encryption cipher context.
void * dynamic
Dynamically-allocated storage.
void * mac_secret
MAC secret.
uint32_t gmt_unix_time
GMT Unix time.
uint8_t random[28]
Random data.
struct tls_client_random random
Random bytes.
struct private_key * key
Private key (if used)
struct x509_chain * chain
Certificate chain (if used)
struct pending_operation negotiation
Security negotiation pending operation.
struct interface cipherstream
Ciphertext stream.
struct tls_session * session
Session.
uint8_t master_secret[48]
Master secret.
struct tls_server server
Server state.
struct tls_rx rx
Receive state.
uint8_t * handshake_ctx
Digest algorithm context used for handshake verification.
void * new_session_ticket
New session ticket.
struct tls_verify_data verify
Verification data.
size_t session_id_len
Length of session ID.
struct interface plainstream
Plaintext stream.
struct tls_tx tx
Transmit state.
uint8_t session_id[32]
Session ID.
int extended_master_secret
Extended master secret flag.
struct list_head list
List of connections within the same session.
struct tls_client client
Client state.
struct digest_algorithm * handshake_digest
Digest algorithm used for handshake verification.
uint16_t version
Protocol version.
size_t new_session_ticket_len
Length of new session ticket.
struct refcnt refcnt
Reference counter.
int secure_renegotiation
Secure renegotiation flag.
A TLS key exchange algorithm.
const char * name
Algorithm name.
int(* exchange)(struct tls_connection *tls)
Transmit Client Key Exchange record.
uint8_t pre_master_secret_len
Pre-master secret length.
uint16_t code
Numeric code (in network-endian order)
uint8_t format
Curve point format byte (if any)
struct elliptic_curve * curve
Elliptic curve.
struct tls_cipherspec_pair cipherspec
Cipher specifications.
struct list_head data
List of received data buffers.
struct io_buffer iobuf
Current received record header (static I/O buffer)
struct io_buffer * handshake
Received handshake fragment.
enum tls_rx_state state
State machine current state.
struct tls_header header
Current received record header.
uint64_t seq
Sequence number.
struct asn1_cursor key
Public key (within server certificate)
struct pending_operation validation
Certificate validation pending operation.
struct interface validator
Certificate validator.
struct x509_root * root
Root of trust.
void * exchange
Server Key Exchange record (if any)
struct pending_operation negotiation
Security negotiation pending operation.
struct x509_chain * chain
Certificate chain.
size_t exchange_len
Server Key Exchange record length.
uint8_t random[32]
Random bytes.
struct private_key * key
Private key.
int extended_master_secret
Extended master secret flag.
const char * name
Server name.
size_t id_len
Length of session ID.
size_t ticket_len
Length of session ticket.
uint8_t master_secret[48]
Master secret.
struct x509_root * root
Root of trust.
struct list_head conn
List of connections.
struct refcnt refcnt
Reference counter.
void * ticket
Session ticket.
struct list_head list
List of sessions.
A TLS signature algorithm.
struct tls_signature_hash_id code
Numeric code.
struct pubkey_algorithm * pubkey
Public-key algorithm.
struct digest_algorithm * digest
Digest algorithm.
A TLS signature and hash algorithm identifier.
uint8_t hash
Hash algorithm.
uint8_t signature
Signature algorithm.
uint64_t seq
Sequence number.
unsigned int pending
Pending transmissions.
struct tls_cipherspec_pair cipherspec
Cipher specifications.
struct process process
Transmit process.
uint8_t client[12]
Client verification data.
uint8_t server[12]
Server verification data.
An X.509 certificate chain.
An X.509 root certificate list.
struct tls_key_exchange_algorithm tls_pubkey_exchange_algorithm
Public key exchange algorithm.
struct tls_key_exchange_algorithm tls_ecdhe_exchange_algorithm
Ephemeral Elliptic Curve Diffie-Hellman key exchange algorithm.
struct tls_key_exchange_algorithm tls_dhe_exchange_algorithm
Ephemeral Diffie-Hellman key exchange algorithm.
tls_rx_state
TLS RX state machine state.
tls_tx_pending
TLS TX pending flags.
@ TLS_TX_CLIENT_KEY_EXCHANGE
@ TLS_TX_CERTIFICATE_VERIFY
int add_tls(struct interface *xfer, const char *name, struct x509_root *root, struct private_key *key)
Add TLS on an interface.