|
XenevaOS
|
SSL/TLS functions. More...
#include "mbedtls/platform_util.h"#include "mbedtls/private_access.h"#include "mbedtls/build_info.h"#include "mbedtls/bignum.h"#include "mbedtls/ecp.h"#include "mbedtls/ssl_ciphersuites.h"#include "mbedtls/md.h"#include "psa/crypto.h"

Go to the source code of this file.
Classes | |
| union | mbedtls_ssl_premaster_secret |
| struct | mbedtls_ssl_tls13_application_secrets |
| struct | mbedtls_ssl_session |
| union | mbedtls_ssl_user_data_t |
| struct | mbedtls_ssl_config |
| struct | mbedtls_ssl_context |
Typedefs | |
| typedef int | mbedtls_ssl_send_t(void *ctx, const unsigned char *buf, size_t len) |
| Callback type: send data on the network. | |
| typedef int | mbedtls_ssl_recv_t(void *ctx, unsigned char *buf, size_t len) |
| Callback type: receive data from the network. | |
| typedef int | mbedtls_ssl_recv_timeout_t(void *ctx, unsigned char *buf, size_t len, uint32_t timeout) |
| Callback type: receive data from the network, with timeout. | |
| typedef void | mbedtls_ssl_set_timer_t(void *ctx, uint32_t int_ms, uint32_t fin_ms) |
| Callback type: set a pair of timers/delays to watch. | |
| typedef int | mbedtls_ssl_get_timer_t(void *ctx) |
| Callback type: get status of timers/delays. | |
| typedef struct mbedtls_ssl_session | mbedtls_ssl_session |
| typedef struct mbedtls_ssl_context | mbedtls_ssl_context |
| typedef struct mbedtls_ssl_config | mbedtls_ssl_config |
| typedef struct mbedtls_ssl_transform | mbedtls_ssl_transform |
| typedef struct mbedtls_ssl_handshake_params | mbedtls_ssl_handshake_params |
| typedef struct mbedtls_ssl_sig_hash_set_t | mbedtls_ssl_sig_hash_set_t |
| typedef int | mbedtls_ssl_cache_get_t(void *data, unsigned char const *session_id, size_t session_id_len, mbedtls_ssl_session *session) |
| Callback type: server-side session cache getter. | |
| typedef int | mbedtls_ssl_cache_set_t(void *data, unsigned char const *session_id, size_t session_id_len, const mbedtls_ssl_session *session) |
| Callback type: server-side session cache setter. | |
| typedef void | mbedtls_ssl_export_keys_t(void *p_expkey, mbedtls_ssl_key_export_type type, const unsigned char *secret, size_t secret_len, const unsigned char client_random[32], const unsigned char server_random[32], mbedtls_tls_prf_types tls_prf_type) |
| Callback type: Export key alongside random values for session identification, and PRF for implementation of TLS key exporters. | |
| typedef int | mbedtls_ssl_ticket_write_t(void *p_ticket, const mbedtls_ssl_session *session, unsigned char *start, const unsigned char *end, size_t *tlen, uint32_t *lifetime) |
| Callback type: generate and write session ticket. | |
| typedef int | mbedtls_ssl_ticket_parse_t(void *p_ticket, mbedtls_ssl_session *session, unsigned char *buf, size_t len) |
| Callback type: parse and load session ticket. | |
| typedef int | mbedtls_ssl_cookie_write_t(void *ctx, unsigned char **p, unsigned char *end, const unsigned char *info, size_t ilen) |
| Callback type: generate a cookie. | |
| typedef int | mbedtls_ssl_cookie_check_t(void *ctx, const unsigned char *cookie, size_t clen, const unsigned char *info, size_t ilen) |
| Callback type: verify a cookie. | |
Functions | |
| const char * | mbedtls_ssl_get_ciphersuite_name (const int ciphersuite_id) |
| Return the name of the ciphersuite associated with the given ID. | |
| int | mbedtls_ssl_get_ciphersuite_id (const char *ciphersuite_name) |
| Return the ID of the ciphersuite associated with the given name. | |
| void | mbedtls_ssl_init (mbedtls_ssl_context *ssl) |
| Initialize an SSL context Just makes the context ready for mbedtls_ssl_setup() or mbedtls_ssl_free() | |
| int | mbedtls_ssl_setup (mbedtls_ssl_context *ssl, const mbedtls_ssl_config *conf) |
| Set up an SSL context for use. | |
| int | mbedtls_ssl_session_reset (mbedtls_ssl_context *ssl) |
| Reset an already initialized SSL context for re-use while retaining application-set variables, function pointers and data. | |
| void | mbedtls_ssl_conf_endpoint (mbedtls_ssl_config *conf, int endpoint) |
| Set the current endpoint type. | |
| void | mbedtls_ssl_conf_transport (mbedtls_ssl_config *conf, int transport) |
| Set the transport type (TLS or DTLS). Default: TLS. | |
| void | mbedtls_ssl_conf_authmode (mbedtls_ssl_config *conf, int authmode) |
| Set the certificate verification mode Default: NONE on server, REQUIRED on client. | |
| void | mbedtls_ssl_conf_rng (mbedtls_ssl_config *conf, mbedtls_f_rng_t *f_rng, void *p_rng) |
| Set the random number generator callback. | |
| void | mbedtls_ssl_conf_dbg (mbedtls_ssl_config *conf, void(*f_dbg)(void *, int, const char *, int, const char *), void *p_dbg) |
| Set the debug callback. | |
| void | mbedtls_ssl_set_bio (mbedtls_ssl_context *ssl, void *p_bio, mbedtls_ssl_send_t *f_send, mbedtls_ssl_recv_t *f_recv, mbedtls_ssl_recv_timeout_t *f_recv_timeout) |
| Set the underlying BIO callbacks for write, read and read-with-timeout. | |
| void | mbedtls_ssl_conf_read_timeout (mbedtls_ssl_config *conf, uint32_t timeout) |
| Set the timeout period for mbedtls_ssl_read() (Default: no timeout.) | |
| int | mbedtls_ssl_check_record (mbedtls_ssl_context const *ssl, unsigned char *buf, size_t buflen) |
| Check whether a buffer contains a valid and authentic record that has not been seen before. (DTLS only). | |
| void | mbedtls_ssl_set_timer_cb (mbedtls_ssl_context *ssl, void *p_timer, mbedtls_ssl_set_timer_t *f_set_timer, mbedtls_ssl_get_timer_t *f_get_timer) |
| Set the timer callbacks (Mandatory for DTLS.) | |
| void | mbedtls_ssl_set_export_keys_cb (mbedtls_ssl_context *ssl, mbedtls_ssl_export_keys_t *f_export_keys, void *p_export_keys) |
| Configure a key export callback. (Default: none.) | |
| void | mbedtls_ssl_conf_dtls_badmac_limit (mbedtls_ssl_config *conf, unsigned limit) |
| Set a limit on the number of records with a bad MAC before terminating the connection. (DTLS only, no effect on TLS.) Default: 0 (disabled). | |
| int | mbedtls_ssl_session_load (mbedtls_ssl_session *session, const unsigned char *buf, size_t len) |
| Load serialized session data into a session structure. On client, this can be used for loading saved sessions before resuming them with mbedtls_ssl_set_session(). On server, this can be used for alternative implementations of session cache or session tickets. | |
| int | mbedtls_ssl_session_save (const mbedtls_ssl_session *session, unsigned char *buf, size_t buf_len, size_t *olen) |
| Save session structure as serialized data in a buffer. On client, this can be used for saving session data, potentially in non-volatile storage, for resuming later. On server, this can be used for alternative implementations of session cache or session tickets. | |
| void | mbedtls_ssl_conf_ciphersuites (mbedtls_ssl_config *conf, const int *ciphersuites) |
| Set the list of allowed ciphersuites and the preference order. First in the list has the highest preference. | |
| void | mbedtls_ssl_conf_groups (mbedtls_ssl_config *conf, const uint16_t *groups) |
| Set the allowed groups in order of preference. | |
| void MBEDTLS_DEPRECATED | mbedtls_ssl_conf_max_version (mbedtls_ssl_config *conf, int major, int minor) |
| Set the maximum supported version sent from the client side and/or accepted at the server side. | |
| void MBEDTLS_DEPRECATED | mbedtls_ssl_conf_min_version (mbedtls_ssl_config *conf, int major, int minor) |
| Set the minimum accepted SSL/TLS protocol version. | |
| void | mbedtls_ssl_conf_legacy_renegotiation (mbedtls_ssl_config *conf, int allow_legacy) |
| Prevent or allow legacy renegotiation. (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION) | |
| int | mbedtls_ssl_check_pending (const mbedtls_ssl_context *ssl) |
| Check if there is data already read from the underlying transport but not yet processed. | |
| size_t | mbedtls_ssl_get_bytes_avail (const mbedtls_ssl_context *ssl) |
| Return the number of application data bytes remaining to be read from the current record. | |
| uint32_t | mbedtls_ssl_get_verify_result (const mbedtls_ssl_context *ssl) |
| Return the result of the certificate verification. | |
| int | mbedtls_ssl_get_ciphersuite_id_from_ssl (const mbedtls_ssl_context *ssl) |
| Return the id of the current ciphersuite. | |
| const char * | mbedtls_ssl_get_ciphersuite (const mbedtls_ssl_context *ssl) |
| Return the name of the current ciphersuite. | |
| const char * | mbedtls_ssl_get_version (const mbedtls_ssl_context *ssl) |
| Return the current TLS version. | |
| int | mbedtls_ssl_get_record_expansion (const mbedtls_ssl_context *ssl) |
| Return the (maximum) number of bytes added by the record layer: header + encryption/MAC overhead (inc. padding) | |
| int | mbedtls_ssl_get_max_out_record_payload (const mbedtls_ssl_context *ssl) |
| Return the current maximum outgoing record payload in bytes. | |
| int | mbedtls_ssl_get_max_in_record_payload (const mbedtls_ssl_context *ssl) |
| Return the current maximum incoming record payload in bytes. | |
| int | mbedtls_ssl_handshake (mbedtls_ssl_context *ssl) |
| Perform the SSL handshake. | |
| int | mbedtls_ssl_handshake_step (mbedtls_ssl_context *ssl) |
| Perform a single step of the SSL handshake. | |
| int | mbedtls_ssl_read (mbedtls_ssl_context *ssl, unsigned char *buf, size_t len) |
| Read at most 'len' application data bytes. | |
| int | mbedtls_ssl_write (mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len) |
| Try to write exactly 'len' application data bytes. | |
| int | mbedtls_ssl_send_alert_message (mbedtls_ssl_context *ssl, unsigned char level, unsigned char message) |
| Send an alert message. | |
| int | mbedtls_ssl_close_notify (mbedtls_ssl_context *ssl) |
| Notify the peer that the connection is being closed. | |
| void | mbedtls_ssl_free (mbedtls_ssl_context *ssl) |
| Free referenced items in an SSL context and clear memory. | |
| void | mbedtls_ssl_config_init (mbedtls_ssl_config *conf) |
| Initialize an SSL configuration context Just makes the context ready for mbedtls_ssl_config_defaults() or mbedtls_ssl_config_free(). | |
| int | mbedtls_ssl_config_defaults (mbedtls_ssl_config *conf, int endpoint, int transport, int preset) |
| Load reasonable default SSL configuration values. (You need to call mbedtls_ssl_config_init() first.) | |
| void | mbedtls_ssl_config_free (mbedtls_ssl_config *conf) |
| Free an SSL configuration context. | |
| void | mbedtls_ssl_session_init (mbedtls_ssl_session *session) |
| Initialize SSL session structure. | |
| void | mbedtls_ssl_session_free (mbedtls_ssl_session *session) |
| Free referenced items in an SSL session including the peer certificate and clear memory. | |
| int | mbedtls_ssl_tls_prf (const mbedtls_tls_prf_types prf, const unsigned char *secret, size_t slen, const char *label, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen) |
| TLS-PRF function for key derivation. | |
SSL/TLS functions.
| #define MBEDTLS_ERR_SSL_ALLOC_FAILED -0x7F00 |
Memory allocation failed
| #define MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS -0x6500 |
The asynchronous operation is not completed yet.
| #define MBEDTLS_ERR_SSL_BAD_CERTIFICATE -0x7A00 |
Processing of the Certificate handshake message failed.
| #define MBEDTLS_ERR_SSL_BAD_CONFIG -0x5E80 |
Invalid value in SSL config
| #define MBEDTLS_ERR_SSL_BAD_INPUT_DATA -0x7100 |
Bad input parameters to function.
| #define MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION -0x6E80 |
Handshake protocol not within min/max boundaries
| #define MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL -0x6A00 |
A buffer is too small to receive or write a message
| #define MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED -0x7680 |
No CA Chain is set, but required to operate.
| #define MBEDTLS_ERR_SSL_CACHE_ENTRY_NOT_FOUND -0x7E80 |
Cache entry not found
| #define MBEDTLS_ERR_SSL_CANNOT_READ_EARLY_DATA -0x7B80 |
Not possible to read early data
| #define MBEDTLS_ERR_SSL_CANNOT_WRITE_EARLY_DATA -0x7C80 |
Not possible to write early data
| #define MBEDTLS_ERR_SSL_CERTIFICATE_VERIFICATION_WITHOUT_HOSTNAME -0x5D80 |
Attempt to verify a certificate without an expected hostname. This is usually insecure.
In TLS clients, when a client authenticates a server through its certificate, the client normally checks three things:
Omitting any of these checks is generally insecure, and can allow a malicious server to impersonate a legitimate server.
The third check may be safely skipped in some unusual scenarios, such as networks where eavesdropping is a risk but not active attacks, or a private PKI where the client equally trusts all servers that are accredited by the root CA.
You should call mbedtls_ssl_set_hostname() with the expected server name before starting a TLS handshake on a client (unless the client is set up to only use PSK-based authentication, which does not rely on the host name). If you have determined that server name verification is not required for security in your scenario, call mbedtls_ssl_set_hostname() with NULL as the server name.
This error is raised if all of the following conditions are met:
| #define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780 |
The client initiated a reconnect from the same port.
| #define MBEDTLS_ERR_SSL_CONN_EOF -0x7280 |
The connection indicated an EOF.
| #define MBEDTLS_ERR_SSL_CONTINUE_PROCESSING -0x6580 |
Internal-only message signaling that further message-processing should be done
| #define MBEDTLS_ERR_SSL_COUNTER_WRAPPING -0x6B80 |
A counter would wrap (eg, too many messages exchanged).
| #define MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS -0x7000 |
A cryptographic operation is in progress. Try again later.
| #define MBEDTLS_ERR_SSL_DECODE_ERROR -0x7300 |
A message could not be parsed due to a syntactic error.
| #define MBEDTLS_ERR_SSL_EARLY_MESSAGE -0x6480 |
Internal-only message signaling that a message arrived early.
| #define MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE -0x7780 |
A fatal alert message was received from our peer.
| #define MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE -0x7080 |
The requested feature is not available.
| #define MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE -0x6E00 |
The handshake negotiation failed.
| #define MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED -0x6A80 |
DTLS client must retry for hello verification
| #define MBEDTLS_ERR_SSL_HW_ACCEL_FAILED -0x7F80 |
Hardware acceleration function returned with error
| #define MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH -0x6F80 |
Hardware acceleration function skipped / left alone data
| #define MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER -0x6600 |
A field in a message was incorrect or inconsistent with other fields.
| #define MBEDTLS_ERR_SSL_INTERNAL_ERROR -0x6C00 |
Internal error (eg, unexpected failure in lower-level module)
| #define MBEDTLS_ERR_SSL_INVALID_MAC -0x7180 |
Verification of the message MAC failed.
| #define MBEDTLS_ERR_SSL_INVALID_RECORD -0x7200 |
An invalid SSL record was received.
| #define MBEDTLS_ERR_SSL_NO_APPLICATION_PROTOCOL -0x7580 |
No ALPN protocols supported that the client advertises
| #define MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE -0x7480 |
No client certification received from the client, but required by the authentication mode.
| #define MBEDTLS_ERR_SSL_NO_RNG -0x7400 |
No RNG was provided to the SSL module.
| #define MBEDTLS_ERR_SSL_NON_FATAL -0x6680 |
The alert message received indicates a non-fatal error.
| #define MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY -0x7880 |
The peer notified us that the connection is going to be closed.
| #define MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH -0x6D00 |
Public key type mismatch (eg, asked for RSA key exchange and presented EC key)
| #define MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED -0x7600 |
The own private key or pre-shared key is not set, but needed.
| #define MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA -0x7C00 |
Early data has been received as part of an on-going handshake. This error code can be returned only on server side if and only if early data has been enabled by means of the mbedtls_ssl_conf_early_data() API. This error code can then be returned by mbedtls_ssl_handshake(), mbedtls_ssl_handshake_step(), mbedtls_ssl_read() or mbedtls_ssl_write() if early data has been received as part of the handshake sequence they triggered. To read the early data, call mbedtls_ssl_read_early_data().
| #define MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET -0x7B00 |
A TLS 1.3 NewSessionTicket message has been received.
| #define MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED -0x6D80 |
Session ticket has expired.
| #define MBEDTLS_ERR_SSL_TIMEOUT -0x6800 |
The operation timed out.
| #define MBEDTLS_ERR_SSL_UNEXPECTED_CID -0x6000 |
An encrypted DTLS-frame with an unexpected CID was received.
| #define MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE -0x7700 |
An unexpected message was received from our peer.
| #define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700 |
Record header looks valid but is not expected.
| #define MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY -0x6C80 |
Unknown identity received (eg, PSK identity)
| #define MBEDTLS_ERR_SSL_UNRECOGNIZED_NAME -0x7800 |
No server could be identified matching the client's SNI.
| #define MBEDTLS_ERR_SSL_UNSUPPORTED_EXTENSION -0x7500 |
Client received an extended server hello containing an unsupported extension
| #define MBEDTLS_ERR_SSL_VERSION_MISMATCH -0x5F00 |
An operation failed due to an unexpected version or configuration.
| #define MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO -0x6B00 |
Unexpected message at ServerHello in renegotiation.
| #define MBEDTLS_ERR_SSL_WANT_READ -0x6900 |
No data of requested type currently available on underlying transport.
| #define MBEDTLS_ERR_SSL_WANT_WRITE -0x6880 |
Connection requires a write call.
| #define MBEDTLS_PREMASTER_SIZE sizeof(union mbedtls_ssl_premaster_secret) |
| #define MBEDTLS_PSK_MAX_LEN 32 /* 256 bits */ |
| #define MBEDTLS_SSL_ALERT_LEVEL_FATAL 2 |
| #define MBEDTLS_SSL_ALERT_LEVEL_WARNING 1 |
| #define MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED 49 /* 0x31 */ |
| #define MBEDTLS_SSL_ALERT_MSG_BAD_CERT 42 /* 0x2A */ |
| #define MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC 20 /* 0x14 */ |
| #define MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED 45 /* 0x2D */ |
| #define MBEDTLS_SSL_ALERT_MSG_CERT_REQUIRED 116 /* 0x74 */ |
| #define MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED 44 /* 0x2C */ |
| #define MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN 46 /* 0x2E */ |
| #define MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY 0 /* 0x00 */ |
| #define MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR 50 /* 0x32 */ |
| #define MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE 30 /* 0x1E */ |
| #define MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR 51 /* 0x33 */ |
| #define MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED 21 /* 0x15 */ |
| #define MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION 60 /* 0x3C */ |
| #define MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE 40 /* 0x28 */ |
| #define MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER 47 /* 0x2F */ |
| #define MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK 86 /* 0x56 */ |
| #define MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY 71 /* 0x47 */ |
| #define MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR 80 /* 0x50 */ |
| #define MBEDTLS_SSL_ALERT_MSG_MISSING_EXTENSION 109 /* 0x6d -- new in TLS 1.3 */ |
| #define MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL 120 /* 0x78 */ |
| #define MBEDTLS_SSL_ALERT_MSG_NO_CERT 41 /* 0x29 */ |
| #define MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION 100 /* 0x64 */ |
| #define MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION 70 /* 0x46 */ |
| #define MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW 22 /* 0x16 */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE 10 /* 0x0A */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA 48 /* 0x30 */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY 115 /* 0x73 */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME 112 /* 0x70 */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT 43 /* 0x2B */ |
| #define MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT 110 /* 0x6E */ |
| #define MBEDTLS_SSL_ALERT_MSG_USER_CANCELED 90 /* 0x5A */ |
| #define MBEDTLS_SSL_ANTI_REPLAY_DISABLED 0 |
| #define MBEDTLS_SSL_ANTI_REPLAY_ENABLED 1 |
| #define MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED 0 |
| #define MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED 1 |
| #define MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN 64 |
| #define MBEDTLS_SSL_CERT_TYPE_RSA_SIGN 1 |
| #define MBEDTLS_SSL_CID_DISABLED 0 |
| #define MBEDTLS_SSL_CID_ENABLED 1 |
| #define MBEDTLS_SSL_CID_IN_LEN_MAX 32 |
The maximum length of CIDs used for incoming DTLS messages.
| #define MBEDTLS_SSL_CID_OUT_LEN_MAX 32 |
The maximum length of CIDs used for outgoing DTLS messages.
| #define MBEDTLS_SSL_CID_TLS1_3_PADDING_GRANULARITY 16 |
This option controls the use of record plaintext padding in TLS 1.3 and when using the Connection ID extension in DTLS 1.2.
The padding will always be chosen so that the length of the padded plaintext is a multiple of the value of this option.
Note: A value of 1 means that no padding will be used for outgoing records.
Note: On systems lacking division instructions, a power of two should be preferred.
| #define MBEDTLS_SSL_COMPRESS_NULL 0 |
| #define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768 |
Maximum number of heap-allocated bytes for the purpose of DTLS handshake message reassembly and future message buffering.
This should be at least 9/8 * MBEDTLS_SSL_IN_CONTENT_LEN to account for a reassembled handshake message of maximum size, together with its reassembly bitmap.
A value of 2 * MBEDTLS_SSL_IN_CONTENT_LEN (32768 by default) should be sufficient for all practical situations as it allows to reassembly a large handshake message (such as a certificate) while buffering multiple smaller handshake messages.
| #define MBEDTLS_SSL_DTLS_SRTP_MKI_SUPPORTED 1 |
| #define MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED 0 |
| #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX 60000 |
| #define MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN 1000 |
| #define MBEDTLS_SSL_EARLY_DATA_DISABLED 0 |
| #define MBEDTLS_SSL_EARLY_DATA_DISCARD 2 |
| #define MBEDTLS_SSL_EARLY_DATA_ENABLED 1 |
| #define MBEDTLS_SSL_EARLY_DATA_NO_DISCARD 0 |
| #define MBEDTLS_SSL_EARLY_DATA_TRY_TO_DEPROTECT_AND_DISCARD 1 |
| #define MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO 0xFF |
renegotiation info ext
| #define MBEDTLS_SSL_ETM_DISABLED 0 |
| #define MBEDTLS_SSL_ETM_ENABLED 1 |
| #define MBEDTLS_SSL_EXTENDED_MS_DISABLED 0 |
| #define MBEDTLS_SSL_EXTENDED_MS_ENABLED 1 |
| #define MBEDTLS_SSL_HASH_MD5 1 |
| #define MBEDTLS_SSL_HASH_NONE 0 |
| #define MBEDTLS_SSL_HASH_SHA1 2 |
| #define MBEDTLS_SSL_HASH_SHA224 3 |
| #define MBEDTLS_SSL_HASH_SHA256 4 |
| #define MBEDTLS_SSL_HASH_SHA384 5 |
| #define MBEDTLS_SSL_HASH_SHA512 6 |
| #define MBEDTLS_SSL_HS_CERTIFICATE 11 |
| #define MBEDTLS_SSL_HS_CERTIFICATE_REQUEST 13 |
| #define MBEDTLS_SSL_HS_CERTIFICATE_VERIFY 15 |
| #define MBEDTLS_SSL_HS_CLIENT_HELLO 1 |
| #define MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE 16 |
| #define MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS 8 |
| #define MBEDTLS_SSL_HS_END_OF_EARLY_DATA 5 |
| #define MBEDTLS_SSL_HS_FINISHED 20 |
| #define MBEDTLS_SSL_HS_HELLO_REQUEST 0 |
| #define MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST 3 |
| #define MBEDTLS_SSL_HS_MESSAGE_HASH 254 |
| #define MBEDTLS_SSL_HS_NEW_SESSION_TICKET 4 |
| #define MBEDTLS_SSL_HS_SERVER_HELLO 2 |
| #define MBEDTLS_SSL_HS_SERVER_HELLO_DONE 14 |
| #define MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE 12 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_BP256R1 0x001A |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_BP384R1 0x001B |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_BP512R1 0x001C |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE2048 0x0100 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE3072 0x0101 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE4096 0x0102 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE6144 0x0103 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_FFDHE8192 0x0104 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_NONE 0 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP192K1 0x0012 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP192R1 0x0013 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP224K1 0x0014 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP224R1 0x0015 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP256K1 0x0016 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP256R1 0x0017 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP384R1 0x0018 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_SECP521R1 0x0019 |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_X25519 0x001D |
| #define MBEDTLS_SSL_IANA_TLS_GROUP_X448 0x001E |
| #define MBEDTLS_SSL_IN_CONTENT_LEN 16384 |
Maximum length (in bytes) of incoming plaintext fragments.
This determines the size of the incoming TLS I/O buffer in such a way that it is capable of holding the specified amount of plaintext data, regardless of the protection mechanism used.
Uncomment to set the maximum plaintext size of the incoming I/O buffer.
| #define MBEDTLS_SSL_IS_CLIENT 0 |
| #define MBEDTLS_SSL_IS_SERVER 1 |
| #define MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION 1 |
| #define MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE 2 |
| #define MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION 0 |
| #define MBEDTLS_SSL_LEGACY_RENEGOTIATION 0 |
| #define MBEDTLS_SSL_MAJOR_VERSION_3 3 |
| #define MBEDTLS_SSL_MAX_ALPN_LIST_LEN 65535 |
Maximum size in bytes of list in alpn ext., RFC 7301
| #define MBEDTLS_SSL_MAX_ALPN_NAME_LEN 255 |
Maximum size in bytes of a protocol name in alpn ext., RFC 7301
| #define MBEDTLS_SSL_MAX_EARLY_DATA_SIZE 1024 |
Complete list of ciphersuites to use, in order of preference.
Use this to save a few hundred bytes of ROM (default ordering of all available ciphersuites) and a few to a few hundred bytes of RAM.
The value below is only an example, not the default.
The default maximum amount of 0-RTT data. See the documentation of mbedtls_ssl_conf_max_early_data_size() for more information.
It must be positive and smaller than UINT32_MAX.
If MBEDTLS_SSL_EARLY_DATA is not defined, this default value does not have any impact on the build.
| #define MBEDTLS_SSL_MAX_FRAG_LEN_1024 2 |
MaxFragmentLength 2^10
| #define MBEDTLS_SSL_MAX_FRAG_LEN_2048 3 |
MaxFragmentLength 2^11
| #define MBEDTLS_SSL_MAX_FRAG_LEN_4096 4 |
MaxFragmentLength 2^12
| #define MBEDTLS_SSL_MAX_FRAG_LEN_512 1 |
MaxFragmentLength 2^9
| #define MBEDTLS_SSL_MAX_FRAG_LEN_INVALID 5 |
first invalid value
| #define MBEDTLS_SSL_MAX_FRAG_LEN_NONE 0 |
don't use this extension
| #define MBEDTLS_SSL_MAX_HOST_NAME_LEN 255 |
Maximum host name defined in RFC 1035
| #define MBEDTLS_SSL_MINOR_VERSION_3 3 |
TLS v1.2
| #define MBEDTLS_SSL_MINOR_VERSION_4 4 |
TLS v1.3
| #define MBEDTLS_SSL_MSG_ALERT 21 |
| #define MBEDTLS_SSL_MSG_APPLICATION_DATA 23 |
| #define MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC 20 |
| #define MBEDTLS_SSL_MSG_CID 25 |
| #define MBEDTLS_SSL_MSG_HANDSHAKE 22 |
| #define MBEDTLS_SSL_OUT_CONTENT_LEN 16384 |
Maximum length (in bytes) of outgoing plaintext fragments.
This determines the size of the outgoing TLS I/O buffer in such a way that it is capable of holding the specified amount of plaintext data, regardless of the protection mechanism used.
It is possible to save RAM by setting a smaller outward buffer, while keeping the default inward 16384 byte buffer to conform to the TLS specification.
The minimum required outward buffer size is determined by the handshake protocol's usage. Handshaking will fail if the outward buffer is too small. The specific size requirement depends on the configured ciphers and any certificate data which is sent during the handshake.
Uncomment to set the maximum plaintext size of the outgoing I/O buffer.
| #define MBEDTLS_SSL_PRESET_DEFAULT 0 |
| #define MBEDTLS_SSL_PRESET_SUITEB 2 |
| #define MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT 16 |
| #define MBEDTLS_SSL_RENEGOTIATION_DISABLED 0 |
| #define MBEDTLS_SSL_RENEGOTIATION_ENABLED 1 |
| #define MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED -1 |
| #define MBEDTLS_SSL_SECURE_RENEGOTIATION 1 |
| #define MBEDTLS_SSL_SEQUENCE_NUMBER_LEN 8 |
| #define MBEDTLS_SSL_SESSION_TICKETS_DISABLED 0 |
| #define MBEDTLS_SSL_SESSION_TICKETS_ENABLED 1 |
| #define MBEDTLS_SSL_SIG_ANON 0 |
| #define MBEDTLS_SSL_SIG_ECDSA 3 |
| #define MBEDTLS_SSL_SIG_RSA 1 |
| #define MBEDTLS_SSL_SRV_CIPHERSUITE_ORDER_CLIENT 1 |
| #define MBEDTLS_SSL_SRV_CIPHERSUITE_ORDER_SERVER 0 |
| #define MBEDTLS_SSL_TLS1_3_DEFAULT_NEW_SESSION_TICKETS 1 |
Default number of NewSessionTicket messages to be sent by a TLS 1.3 server after handshake completion. This is not used in TLS 1.2 and relevant only if the MBEDTLS_SSL_SESSION_TICKETS option is enabled.
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_ALL |
All TLS 1.3 key exchanges
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL (1u << 1) |
Pure-Ephemeral TLS 1.3 key exchanges, including for example ECDHE and DHE key exchanges.
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ALL |
All ephemeral TLS 1.3 key exchanges
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_NONE (0) |
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK (1u << 0) |
Pure-PSK TLS 1.3 key exchange, encompassing both externally agreed PSKs as well as resumption PSKs.
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ALL |
All PSK-based TLS 1.3 key exchanges
| #define MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL (1u << 2) |
PSK-Ephemeral TLS 1.3 key exchanges, using both a PSK and an ephemeral key exchange.
| #define MBEDTLS_SSL_TLS1_3_PSK_MODE_ECDHE 1 /* PSK+ECDHE-based exchange */ |
| #define MBEDTLS_SSL_TLS1_3_PSK_MODE_PURE 0 /* Pure PSK-based exchange */ |
| #define MBEDTLS_SSL_TLS1_3_SIGNAL_NEW_SESSION_TICKETS_DISABLED 0 |
| #define MBEDTLS_SSL_TLS1_3_SIGNAL_NEW_SESSION_TICKETS_ENABLED 1 |
| #define MBEDTLS_SSL_TLS1_3_TICKET_AGE_TOLERANCE 6000 |
Maximum allowed ticket age difference in milliseconds tolerated between server and client. Default value is 6000. This is not used in TLS 1.2.
The ages might be different due to the client and server clocks not running at the same pace. The typical accuracy of an RTC crystal is ±100 to ±20 parts per million (360 to 72 milliseconds per hour). Default tolerance window is 6s, thus in the worst case clients and servers must sync up their system time every 6000/360/2~=8 hours.
See section 8.3 of the TLS 1.3 specification(RFC 8446) for more information.
| #define MBEDTLS_SSL_TLS1_3_TICKET_NONCE_LENGTH 32 |
Size in bytes of a ticket nonce. This is not used in TLS 1.2.
This must be less than 256.
| #define MBEDTLS_SSL_TRANSPORT_DATAGRAM 1 |
DTLS
| #define MBEDTLS_SSL_TRANSPORT_STREAM 0 |
TLS
| #define MBEDTLS_SSL_TRUNC_HMAC_DISABLED 0 |
| #define MBEDTLS_SSL_TRUNC_HMAC_ENABLED 1 |
| #define MBEDTLS_SSL_TRUNCATED_HMAC_LEN 10 /* 80 bits, rfc 6066 section 7 */ |
| #define MBEDTLS_SSL_VERIFY_DATA_MAX_LEN 12 |
| #define MBEDTLS_SSL_VERIFY_NONE 0 |
| #define MBEDTLS_SSL_VERIFY_OPTIONAL 1 |
| #define MBEDTLS_SSL_VERIFY_REQUIRED 2 |
| #define MBEDTLS_SSL_VERIFY_UNSET 3 /* Used only for sni_authmode */ |
| #define MBEDTLS_TLS1_3_MD_MAX_SIZE PSA_HASH_MAX_SIZE |
| #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP256R1_SHA256 0x0403 |
| #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP384R1_SHA384 0x0503 |
| #define MBEDTLS_TLS1_3_SIG_ECDSA_SECP521R1_SHA512 0x0603 |
| #define MBEDTLS_TLS1_3_SIG_ECDSA_SHA1 0x0203 |
| #define MBEDTLS_TLS1_3_SIG_ED25519 0x0807 |
| #define MBEDTLS_TLS1_3_SIG_ED448 0x0808 |
| #define MBEDTLS_TLS1_3_SIG_NONE 0x0 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA1 0x0201 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA256 0x0401 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA384 0x0501 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PKCS1_SHA512 0x0601 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA256 0x0809 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA384 0x080A |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_PSS_SHA512 0x080B |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA256 0x0804 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA384 0x0805 |
| #define MBEDTLS_TLS1_3_SIG_RSA_PSS_RSAE_SHA512 0x0806 |
| #define MBEDTLS_TLS_EXT_ALPN 16 |
| #define MBEDTLS_TLS_EXT_CERT_AUTH 47 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_CID 54 /* RFC 9146 DTLS 1.2 CID */ |
| #define MBEDTLS_TLS_EXT_CLI_CERT_TYPE 19 /* RFC 7250 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_COOKIE 44 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_EARLY_DATA 42 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_ECJPAKE_KKPP 256 /* experimental */ |
| #define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC 22 /* 0x16 */ |
| #define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET 0x0017 /* 23 */ |
| #define MBEDTLS_TLS_EXT_HEARTBEAT 15 /* RFC 6520 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_KEY_SHARE 51 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH 1 |
| #define MBEDTLS_TLS_EXT_OID_FILTERS 48 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_PADDING 21 /* RFC 7685 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_POST_HANDSHAKE_AUTH 49 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_PRE_SHARED_KEY 41 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_PSK_KEY_EXCHANGE_MODES 45 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_RECORD_SIZE_LIMIT 28 /* RFC 8449 (implemented for TLS 1.3 only) */ |
| #define MBEDTLS_TLS_EXT_RENEGOTIATION_INFO 0xFF01 |
| #define MBEDTLS_TLS_EXT_SCT 18 /* RFC 6962 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_SERV_CERT_TYPE 20 /* RFC 7250 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_SERVERNAME 0 |
| #define MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME 0 |
| #define MBEDTLS_TLS_EXT_SESSION_TICKET 35 |
| #define MBEDTLS_TLS_EXT_SIG_ALG 13 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_SIG_ALG_CERT 50 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_STATUS_REQUEST 5 /* RFC 6066 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES 10 |
| #define MBEDTLS_TLS_EXT_SUPPORTED_GROUPS 10 /* RFC 8422,7919 TLS 1.2 and 1.3 */ |
| #define MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS 11 |
| #define MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS 43 /* RFC 8446 TLS 1.3 */ |
| #define MBEDTLS_TLS_EXT_TRUNCATED_HMAC 4 |
| #define MBEDTLS_TLS_EXT_USE_SRTP 14 |
| typedef int mbedtls_ssl_cache_get_t(void *data, unsigned char const *session_id, size_t session_id_len, mbedtls_ssl_session *session) |
Callback type: server-side session cache getter.
The session cache is logically a key value store, with
keys being session IDs and values being instances of
mbedtls_ssl_session.
This callback retrieves an entry in this key-value store.
| data | The address of the session cache structure to query. |
| session_id | The buffer holding the session ID to query. |
| session_id_len | The length of session_id in Bytes. |
| session | The address of the session structure to populate. It is initialized with mbdtls_ssl_session_init(), and the callback must always leave it in a state where it can safely be freed via mbedtls_ssl_session_free() independent of the return code of this function. |
0 on success | typedef int mbedtls_ssl_cache_set_t(void *data, unsigned char const *session_id, size_t session_id_len, const mbedtls_ssl_session *session) |
Callback type: server-side session cache setter.
The session cache is logically a key value store, with
keys being session IDs and values being instances of
mbedtls_ssl_session.
This callback sets an entry in this key-value store.
| data | The address of the session cache structure to modify. |
| session_id | The buffer holding the session ID to query. |
| session_id_len | The length of session_id in Bytes. |
| session | The address of the session to be stored in the session cache. |
0 on success | typedef struct mbedtls_ssl_config mbedtls_ssl_config |
| typedef struct mbedtls_ssl_context mbedtls_ssl_context |
| typedef int mbedtls_ssl_cookie_check_t(void *ctx, const unsigned char *cookie, size_t clen, const unsigned char *info, size_t ilen) |
Callback type: verify a cookie.
| ctx | Context for the callback |
| cookie | Cookie to verify |
| clen | Length of cookie |
| info | Client ID info that was passed to mbedtls_ssl_set_client_transport_id() |
| ilen | Length of info in bytes |
| typedef int mbedtls_ssl_cookie_write_t(void *ctx, unsigned char **p, unsigned char *end, const unsigned char *info, size_t ilen) |
Callback type: generate a cookie.
| ctx | Context for the callback |
| p | Buffer to write to, must be updated to point right after the cookie |
| end | Pointer to one past the end of the output buffer |
| info | Client ID info that was passed to mbedtls_ssl_set_client_transport_id() |
| ilen | Length of info in bytes |
| typedef void mbedtls_ssl_export_keys_t(void *p_expkey, mbedtls_ssl_key_export_type type, const unsigned char *secret, size_t secret_len, const unsigned char client_random[32], const unsigned char server_random[32], mbedtls_tls_prf_types tls_prf_type) |
Callback type: Export key alongside random values for session identification, and PRF for implementation of TLS key exporters.
| p_expkey | Context for the callback. |
| type | The type of the key that is being exported. |
| secret | The address of the buffer holding the secret that's being exporterd. |
| secret_len | The length of secret in bytes. |
| client_random | The client random bytes. |
| server_random | The server random bytes. |
| tls_prf_type | The identifier for the PRF used in the handshake to which the key belongs. |
| typedef int mbedtls_ssl_get_timer_t(void *ctx) |
Callback type: get status of timers/delays.
| ctx | Context pointer |
| typedef struct mbedtls_ssl_handshake_params mbedtls_ssl_handshake_params |
Callback type: receive data from the network.
| ctx | Context for the receive callback (typically a file descriptor) |
| buf | Buffer to write the received data to |
| len | Length of the receive buffer |
0 if the connection has been closed. MBEDTLS_ERR_SSL_WANT_READ must be returned when the operation would block. Callback type: receive data from the network, with timeout.
| ctx | Context for the receive callback (typically a file descriptor) |
| buf | Buffer to write the received data to |
| len | Length of the receive buffer |
| timeout | Maximum number of milliseconds to wait for data 0 means no timeout (potentially waiting forever) |
MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out, MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal.Callback type: send data on the network.
| ctx | Context for the send callback (typically a file descriptor) |
| buf | Buffer holding the data to send |
| len | Length of the data to send |
MBEDTLS_ERR_SSL_WANT_WRITE must be returned when the operation would block.| typedef struct mbedtls_ssl_session mbedtls_ssl_session |
Callback type: set a pair of timers/delays to watch.
| ctx | Context pointer |
| int_ms | Intermediate delay in milliseconds |
| fin_ms | Final delay in milliseconds 0 cancels the current timer. |
mbedtls_ssl_get_timer_t callback to return correct information.mbedtls_ssl_handshake() with the proper SSL context to be scheduled. Care must be taken to ensure that at most one such call happens at a time.| typedef struct mbedtls_ssl_sig_hash_set_t mbedtls_ssl_sig_hash_set_t |
| typedef int mbedtls_ssl_ticket_parse_t(void *p_ticket, mbedtls_ssl_session *session, unsigned char *buf, size_t len) |
Callback type: parse and load session ticket.
| p_ticket | Context for the callback |
| session | SSL session to be loaded |
| buf | Start of the buffer containing the ticket |
| len | Length of the ticket. |
| typedef int mbedtls_ssl_ticket_write_t(void *p_ticket, const mbedtls_ssl_session *session, unsigned char *start, const unsigned char *end, size_t *tlen, uint32_t *lifetime) |
Callback type: generate and write session ticket.
| p_ticket | Context for the callback |
| session | SSL session to be written in the ticket |
| start | Start of the output buffer |
| end | End of the output buffer |
| tlen | On exit, holds the length written |
| lifetime | On exit, holds the lifetime of the ticket in seconds |
| typedef struct mbedtls_ssl_transform mbedtls_ssl_transform |
| enum mbedtls_ssl_states |
| int mbedtls_ssl_check_pending | ( | const mbedtls_ssl_context * | ssl | ) |
Check if there is data already read from the underlying transport but not yet processed.
| ssl | SSL context |
mbedtls_ssl_get_bytes_avail in that it considers any kind of unprocessed data, not only unread application data. If mbedtls_ssl_get_bytes returns a non-zero value, this function will also signal pending data, but the converse does not hold. For example, in DTLS there might be further records waiting to be processed from the current underlying transport's datagram.mbedtls_ssl_read will provide any data; e.g., the unprocessed data might turn out to be an alert or a handshake message.| int mbedtls_ssl_check_record | ( | mbedtls_ssl_context const * | ssl, |
| unsigned char * | buf, | ||
| size_t | buflen | ||
| ) |
Check whether a buffer contains a valid and authentic record that has not been seen before. (DTLS only).
This function does not change the user-visible state of the SSL context. Its sole purpose is to provide an indication of the legitimacy of an incoming record.
This can be useful e.g. in distributed server environments using the DTLS Connection ID feature, in which connections might need to be passed between service instances on a change of peer address, but where such disruptive operations should only happen after the validity of incoming records has been confirmed.
| ssl | The SSL context to use. |
| buf | The address of the buffer holding the record to be checked. This must be a read/write buffer of length buflen Bytes. |
| buflen | The length of buf in Bytes. |
buf. If you need to preserve the original record, you have to maintain a copy.0 if the record is valid and authentic and has not been seen before. | int mbedtls_ssl_close_notify | ( | mbedtls_ssl_context * | ssl | ) |
Notify the peer that the connection is being closed.
| ssl | SSL context |
mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed. | void mbedtls_ssl_conf_authmode | ( | mbedtls_ssl_config * | conf, |
| int | authmode | ||
| ) |
Set the certificate verification mode Default: NONE on server, REQUIRED on client.
| conf | SSL configuration |
| authmode | can be: |
MBEDTLS_SSL_VERIFY_NONE: peer certificate is not checked (default on server) (insecure on client)
MBEDTLS_SSL_VERIFY_OPTIONAL: peer certificate is checked, however the handshake continues even if verification failed; mbedtls_ssl_get_verify_result() can be called after the handshake is complete.
MBEDTLS_SSL_VERIFY_REQUIRED: peer must present a valid certificate, handshake is aborted if verification failed. (default on client)
| void mbedtls_ssl_conf_ciphersuites | ( | mbedtls_ssl_config * | conf, |
| const int * | ciphersuites | ||
| ) |
Set the list of allowed ciphersuites and the preference order. First in the list has the highest preference.
For TLS 1.2, the notion of ciphersuite determines both the key exchange mechanism and the suite of symmetric algorithms to be used during and after the handshake.
For TLS 1.3 (in development), the notion of ciphersuite only determines the suite of symmetric algorithms to be used during and after the handshake, while key exchange mechanisms are configured separately.
In Mbed TLS, ciphersuites for both TLS 1.2 and TLS 1.3 are configured via this function. For users of TLS 1.3, there will be separate API for the configuration of key exchange mechanisms.
The list of ciphersuites passed to this function may contain a mixture of TLS 1.2 and TLS 1.3 ciphersuite identifiers. This is useful if negotiation of TLS 1.3 should be attempted, but a fallback to TLS 1.2 would be tolerated.
ciphersuites is not copied. It must remain valid for the lifetime of the SSL configuration conf.| conf | The SSL configuration to modify. |
| ciphersuites | A 0-terminated list of IANA identifiers of supported ciphersuites, accessible through MBEDTLS_TLS_XXX and MBEDTLS_TLS1_3_XXX macros defined in ssl_ciphersuites.h. |
| void mbedtls_ssl_conf_dbg | ( | mbedtls_ssl_config * | conf, |
| void(*)(void *, int, const char *, int, const char *) | f_dbg, | ||
| void * | p_dbg | ||
| ) |
Set the debug callback.
The callback has the following argument:
void * opaque context for the callback
int debug level
const char * file name
int line number
const char * message
| conf | SSL configuration |
| f_dbg | debug function |
| p_dbg | debug parameter |
| void mbedtls_ssl_conf_dtls_badmac_limit | ( | mbedtls_ssl_config * | conf, |
| unsigned | limit | ||
| ) |
Set a limit on the number of records with a bad MAC before terminating the connection. (DTLS only, no effect on TLS.) Default: 0 (disabled).
| conf | SSL configuration |
| limit | Limit, or 0 to disable. |
| void mbedtls_ssl_conf_endpoint | ( | mbedtls_ssl_config * | conf, |
| int | endpoint | ||
| ) |
Set the current endpoint type.
| conf | SSL configuration |
| endpoint | must be MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER |
| void mbedtls_ssl_conf_groups | ( | mbedtls_ssl_config * | conf, |
| const uint16_t * | groups | ||
| ) |
Set the allowed groups in order of preference.
On server: This only affects the choice of key agreement mechanism
On client: this affects the list of groups offered for any
use. The server can override our preference order.
Both sides: limits the set of groups accepted for use in
key sharing.
| conf | SSL configuration |
| groups | List of allowed groups ordered by preference, terminated by 0. Must contain valid IANA NamedGroup IDs (provided via either an integer or using MBEDTLS_TLS1_3_NAMED_GROUP_XXX macros). |
| void mbedtls_ssl_conf_legacy_renegotiation | ( | mbedtls_ssl_config * | conf, |
| int | allow_legacy | ||
| ) |
Prevent or allow legacy renegotiation. (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION)
MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION allows connections to be established even if the peer does not support secure renegotiation, but does not allow renegotiation to take place if not secure. (Interoperable and secure option)
MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION allows renegotiations with non-upgraded peers. Allowing legacy renegotiation makes the connection vulnerable to specific man in the middle attacks. (See RFC 5746) (Most interoperable and least secure option)
MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE breaks off connections if peer does not support secure renegotiation. Results in interoperability issues with non-upgraded peers that do not support renegotiation altogether. (Most secure option, interoperability issues)
| conf | SSL configuration |
| allow_legacy | Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, SSL_ALLOW_LEGACY_RENEGOTIATION or MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE) |
| void MBEDTLS_DEPRECATED mbedtls_ssl_conf_max_version | ( | mbedtls_ssl_config * | conf, |
| int | major, | ||
| int | minor | ||
| ) |
Set the maximum supported version sent from the client side and/or accepted at the server side.
See also the documentation of mbedtls_ssl_conf_min_version().
mbedtls_ssl_conf_max_tls_version().| conf | SSL configuration |
| major | Major version number (MBEDTLS_SSL_MAJOR_VERSION_3) |
| minor | Minor version number (MBEDTLS_SSL_MINOR_VERSION_3 for (D)TLS 1.2, MBEDTLS_SSL_MINOR_VERSION_4 for TLS 1.3) |
| void MBEDTLS_DEPRECATED mbedtls_ssl_conf_min_version | ( | mbedtls_ssl_config * | conf, |
| int | major, | ||
| int | minor | ||
| ) |
Set the minimum accepted SSL/TLS protocol version.
major = MBEDTLS_SSL_MAJOR_VERSION_3, minor = MBEDTLS_SSL_MINOR_VERSION_3major = MBEDTLS_SSL_MAJOR_VERSION_3, minor = MBEDTLS_SSL_MINOR_VERSION_4Note that the numbers in the constant names are the TLS internal protocol numbers, and the minor versions differ by one from the human-readable versions!
mbedtls_ssl_conf_min_tls_version().| conf | SSL configuration |
| major | Major version number (MBEDTLS_SSL_MAJOR_VERSION_3) |
| minor | Minor version number (MBEDTLS_SSL_MINOR_VERSION_3 for (D)TLS 1.2, MBEDTLS_SSL_MINOR_VERSION_4 for TLS 1.3) |
| void mbedtls_ssl_conf_read_timeout | ( | mbedtls_ssl_config * | conf, |
| uint32_t | timeout | ||
| ) |
Set the timeout period for mbedtls_ssl_read() (Default: no timeout.)
| conf | SSL configuration context |
| timeout | Timeout value in milliseconds. Use 0 for no timeout (default). |
f_recv_timeout was set with mbedtls_ssl_set_bio(). With non-blocking I/O, this will only work if timer callbacks were set with mbedtls_ssl_set_timer_cb().| void mbedtls_ssl_conf_rng | ( | mbedtls_ssl_config * | conf, |
| mbedtls_f_rng_t * | f_rng, | ||
| void * | p_rng | ||
| ) |
Set the random number generator callback.
| conf | SSL configuration |
| f_rng | RNG function (mandatory) |
| p_rng | RNG parameter |
| void mbedtls_ssl_conf_transport | ( | mbedtls_ssl_config * | conf, |
| int | transport | ||
| ) |
Set the transport type (TLS or DTLS). Default: TLS.
mbedtls_ssl_set_bio(). You also need to provide timer callbacks with mbedtls_ssl_set_timer_cb().| conf | SSL configuration |
| transport | transport type: MBEDTLS_SSL_TRANSPORT_STREAM for TLS, MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS. |
| int mbedtls_ssl_config_defaults | ( | mbedtls_ssl_config * | conf, |
| int | endpoint, | ||
| int | transport, | ||
| int | preset | ||
| ) |
Load reasonable default SSL configuration values. (You need to call mbedtls_ssl_config_init() first.)
| conf | SSL configuration context |
| endpoint | MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER |
| transport | MBEDTLS_SSL_TRANSPORT_STREAM for TLS, or MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS |
| preset | a MBEDTLS_SSL_PRESET_XXX value |
mbedtls_ssl_conf_transport() for notes on DTLS.| void mbedtls_ssl_config_free | ( | mbedtls_ssl_config * | conf | ) |
Free an SSL configuration context.
| conf | SSL configuration context |
| void mbedtls_ssl_config_init | ( | mbedtls_ssl_config * | conf | ) |
Initialize an SSL configuration context Just makes the context ready for mbedtls_ssl_config_defaults() or mbedtls_ssl_config_free().
| conf | SSL configuration context |
| void mbedtls_ssl_free | ( | mbedtls_ssl_context * | ssl | ) |
Free referenced items in an SSL context and clear memory.
| ssl | SSL context |
| size_t mbedtls_ssl_get_bytes_avail | ( | const mbedtls_ssl_context * | ssl | ) |
Return the number of application data bytes remaining to be read from the current record.
| ssl | SSL context |
mbedtls_ssl_read has written the maximal amount of data fitting into the input buffer. | const char * mbedtls_ssl_get_ciphersuite | ( | const mbedtls_ssl_context * | ssl | ) |
Return the name of the current ciphersuite.
| ssl | SSL context |
| int mbedtls_ssl_get_ciphersuite_id | ( | const char * | ciphersuite_name | ) |
Return the ID of the ciphersuite associated with the given name.
| ciphersuite_name | SSL ciphersuite name |
| int mbedtls_ssl_get_ciphersuite_id_from_ssl | ( | const mbedtls_ssl_context * | ssl | ) |
Return the id of the current ciphersuite.
| ssl | SSL context |
| const char * mbedtls_ssl_get_ciphersuite_name | ( | const int | ciphersuite_id | ) |
Return the name of the ciphersuite associated with the given ID.
| ciphersuite_id | SSL ciphersuite ID |
| int mbedtls_ssl_get_max_in_record_payload | ( | const mbedtls_ssl_context * | ssl | ) |
Return the current maximum incoming record payload in bytes.
MBEDTLS_SSL_IN_CONTENT_LEN, extensions such as the max fragment length extension or record size limit extension if used, and the current record expansion.| ssl | SSL context |
| int mbedtls_ssl_get_max_out_record_payload | ( | const mbedtls_ssl_context * | ssl | ) |
Return the current maximum outgoing record payload in bytes.
MBEDTLS_SSL_OUT_CONTENT_LEN, extensions such as the max fragment length or record size limit extension if used, and for DTLS the path MTU as configured and current record expansion.mbedtls_ssl_write() will return an error if called with a larger length value. With TLS, mbedtls_ssl_write() will fragment the input if necessary and return the number of bytes written; it is up to the caller to call mbedtls_ssl_write() again in order to send the remaining bytes if any.| ssl | SSL context |
| int mbedtls_ssl_get_record_expansion | ( | const mbedtls_ssl_context * | ssl | ) |
Return the (maximum) number of bytes added by the record layer: header + encryption/MAC overhead (inc. padding)
| ssl | SSL context |
| uint32_t mbedtls_ssl_get_verify_result | ( | const mbedtls_ssl_context * | ssl | ) |
Return the result of the certificate verification.
| ssl | The SSL context to use. |
0 if the certificate verification was successful. -1u if the result is not available. This may happen e.g. if the handshake aborts early, or a verification callback returned a fatal error. MBEDTLS_X509_BADCERT_XXX and MBEDTLS_X509_BADCRL_XXX failure flags; see x509.h. | const char * mbedtls_ssl_get_version | ( | const mbedtls_ssl_context * | ssl | ) |
Return the current TLS version.
| ssl | SSL context |
| int mbedtls_ssl_handshake | ( | mbedtls_ssl_context * | ssl | ) |
Perform the SSL handshake.
| ssl | SSL context |
0 if successful. 0, MBEDTLS_ERR_SSL_WANT_READ, MBEDTLS_ERR_SSL_WANT_WRITE, MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS or MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET or MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA, you must stop using the SSL context for reading or writing, and either free it or call mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed.| int mbedtls_ssl_handshake_step | ( | mbedtls_ssl_context * | ssl | ) |
Perform a single step of the SSL handshake.
0. Do not call this function if mbedtls_ssl_is_handshake_over() returns 1.| ssl | SSL context |
0, MBEDTLS_ERR_SSL_WANT_READ, MBEDTLS_ERR_SSL_WANT_WRITE, MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS, MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS or MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET or MBEDTLS_ERR_SSL_RECEIVED_EARLY_DATA, you must stop using the SSL context for reading or writing, and either free it or call mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed. | void mbedtls_ssl_init | ( | mbedtls_ssl_context * | ssl | ) |
Initialize an SSL context Just makes the context ready for mbedtls_ssl_setup() or mbedtls_ssl_free()
| ssl | SSL context |
| int mbedtls_ssl_read | ( | mbedtls_ssl_context * | ssl, |
| unsigned char * | buf, | ||
| size_t | len | ||
| ) |
Read at most 'len' application data bytes.
| ssl | SSL context |
| buf | buffer that will hold the data |
| len | maximum number of bytes to read |
0 if the read end of the underlying transport was closed without sending a CloseNotify beforehand, which might happen because of various reasons (internal error of an underlying stack, non-conformant peer not sending a CloseNotify and such) - in this case you must stop using the context (see below). mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed.mbedtls_ssl_handshake() with the same context (as it has been reset internally). Either way, you must make sure this is seen by the application as a new connection: application state, if any, should be reset, and most importantly the identity of the client must be checked again. WARNING: not validating the identity of the client again, or not transmitting the new identity to the application layer, would allow authentication bypass!mbedtls_ssl_check_pending to check for remaining records. | int mbedtls_ssl_send_alert_message | ( | mbedtls_ssl_context * | ssl, |
| unsigned char | level, | ||
| unsigned char | message | ||
| ) |
Send an alert message.
| ssl | SSL context |
| level | The alert level of the message (MBEDTLS_SSL_ALERT_LEVEL_WARNING or MBEDTLS_SSL_ALERT_LEVEL_FATAL) |
| message | The alert message (SSL_ALERT_MSG_*) |
mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed. | void mbedtls_ssl_session_free | ( | mbedtls_ssl_session * | session | ) |
Free referenced items in an SSL session including the peer certificate and clear memory.
| session | SSL session |
| void mbedtls_ssl_session_init | ( | mbedtls_ssl_session * | session | ) |
Initialize SSL session structure.
| session | SSL session |
| int mbedtls_ssl_session_load | ( | mbedtls_ssl_session * | session, |
| const unsigned char * | buf, | ||
| size_t | len | ||
| ) |
Load serialized session data into a session structure. On client, this can be used for loading saved sessions before resuming them with mbedtls_ssl_set_session(). On server, this can be used for alternative implementations of session cache or session tickets.
| session | The session structure to be populated. It must have been initialised with mbedtls_ssl_session_init() but not populated yet. |
| buf | The buffer holding the serialized session data. It must be a readable buffer of at least len bytes. |
| len | The size of the serialized data in bytes. |
0 if successful. | int mbedtls_ssl_session_reset | ( | mbedtls_ssl_context * | ssl | ) |
Reset an already initialized SSL context for re-use while retaining application-set variables, function pointers and data.
| ssl | SSL context |
| int mbedtls_ssl_session_save | ( | const mbedtls_ssl_session * | session, |
| unsigned char * | buf, | ||
| size_t | buf_len, | ||
| size_t * | olen | ||
| ) |
Save session structure as serialized data in a buffer. On client, this can be used for saving session data, potentially in non-volatile storage, for resuming later. On server, this can be used for alternative implementations of session cache or session tickets.
| session | The session structure to be saved. |
| buf | The buffer to write the serialized data to. It must be a writeable buffer of at least buf_len bytes, or may be NULL if buf_len is 0. |
| buf_len | The number of bytes available for writing in buf. |
| olen | The size in bytes of the data that has been or would have been written. It must point to a valid size_t. |
olen is updated to the correct value regardless of whether buf_len was large enough. This makes it possible to determine the necessary size by calling this function with buf set to NULL and buf_len to 0.0 if successful. buf is too small. | void mbedtls_ssl_set_bio | ( | mbedtls_ssl_context * | ssl, |
| void * | p_bio, | ||
| mbedtls_ssl_send_t * | f_send, | ||
| mbedtls_ssl_recv_t * | f_recv, | ||
| mbedtls_ssl_recv_timeout_t * | f_recv_timeout | ||
| ) |
Set the underlying BIO callbacks for write, read and read-with-timeout.
| ssl | SSL context |
| p_bio | parameter (context) shared by BIO callbacks |
| f_send | write callback |
| f_recv | read callback |
| f_recv_timeout | blocking read callback with timeout. |
mbedtls_ssl_send_t, mbedtls_ssl_recv_t and mbedtls_ssl_recv_timeout_t for the conventions those callbacks must follow.mbedtls_net_send(), mbedtls_net_recv() and mbedtls_net_recv_timeout() that are suitable to be used here. | void mbedtls_ssl_set_export_keys_cb | ( | mbedtls_ssl_context * | ssl, |
| mbedtls_ssl_export_keys_t * | f_export_keys, | ||
| void * | p_export_keys | ||
| ) |
Configure a key export callback. (Default: none.)
This API can be used for two purposes:
| ssl | The SSL context to which the export callback should be attached. |
| f_export_keys | The callback for the key export. |
| p_export_keys | The opaque context pointer to be passed to the callback f_export_keys. |
| void mbedtls_ssl_set_timer_cb | ( | mbedtls_ssl_context * | ssl, |
| void * | p_timer, | ||
| mbedtls_ssl_set_timer_t * | f_set_timer, | ||
| mbedtls_ssl_get_timer_t * | f_get_timer | ||
| ) |
Set the timer callbacks (Mandatory for DTLS.)
| ssl | SSL context |
| p_timer | parameter (context) shared by timer callbacks |
| f_set_timer | set timer callback |
| f_get_timer | get timer callback. Must return: |
mbedtls_ssl_set_timer_t and mbedtls_ssl_get_timer_t for the conventions this pair of callbacks must follow.mbedtls_timing_set_delay() and mbedtls_timing_get_delay() that are suitable for using here, except if using an event-driven style.| int mbedtls_ssl_setup | ( | mbedtls_ssl_context * | ssl, |
| const mbedtls_ssl_config * | conf | ||
| ) |
Set up an SSL context for use.
| ssl | SSL context |
| conf | SSL configuration to use |
| int mbedtls_ssl_tls_prf | ( | const mbedtls_tls_prf_types | prf, |
| const unsigned char * | secret, | ||
| size_t | slen, | ||
| const char * | label, | ||
| const unsigned char * | random, | ||
| size_t | rlen, | ||
| unsigned char * | dstbuf, | ||
| size_t | dlen | ||
| ) |
TLS-PRF function for key derivation.
| prf | The tls_prf type function type to be used. |
| secret | Secret for the key derivation function. |
| slen | Length of the secret. |
| label | String label for the key derivation function, terminated with null character. |
| random | Random bytes. |
| rlen | Length of the random bytes buffer. |
| dstbuf | The buffer holding the derived key. |
| dlen | Length of the output buffer. |
| int mbedtls_ssl_write | ( | mbedtls_ssl_context * | ssl, |
| const unsigned char * | buf, | ||
| size_t | len | ||
| ) |
Try to write exactly 'len' application data bytes.
| ssl | SSL context |
| buf | buffer holding the data |
| len | how many bytes must be written |
len). mbedtls_ssl_session_reset() on it before re-using it for a new connection; the current connection must be closed.mbedtls_ssl_get_max_out_record_payload() may be used to query the active maximum fragment length.