mbedtls ported to mbed-classic
Fork of mbedtls by
ssl.h File Reference
SSL/TLS functions. More...
Go to the source code of this file.
Data Structures | |
struct | mbedtls_ssl_config |
SSL/TLS configuration to be shared between mbedtls_ssl_context structures. More... | |
Typedefs | |
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_export_keys_t (void *p_expkey, const unsigned char *ms, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen) |
Callback type: Export key block and master secret. | |
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 int * | mbedtls_ssl_list_ciphersuites (void) |
Returns the list of ciphersuites supported by the SSL/TLS module. | |
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). | |
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_verify (mbedtls_ssl_config *conf, int(*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), void *p_vrfy) |
Set the verification callback (Optional). | |
void | mbedtls_ssl_conf_rng (mbedtls_ssl_config *conf, int(*f_rng)(void *, unsigned char *, size_t), 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, int(*f_send)(void *, const unsigned char *, size_t), int(*f_recv)(void *, unsigned char *, size_t), int(*f_recv_timeout)(void *, unsigned char *, size_t, uint32_t)) |
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.) | |
void | mbedtls_ssl_set_timer_cb (mbedtls_ssl_context *ssl, void *p_timer, void(*f_set_timer)(void *, uint32_t int_ms, uint32_t fin_ms), int(*f_get_timer)(void *)) |
Set the timer callbacks (Mandatory for DTLS.) | |
void | mbedtls_ssl_conf_session_tickets_cb (mbedtls_ssl_config *conf, mbedtls_ssl_ticket_write_t *f_ticket_write, mbedtls_ssl_ticket_parse_t *f_ticket_parse, void *p_ticket) |
Configure SSL session ticket callbacks (server only). | |
void | mbedtls_ssl_conf_export_keys_cb (mbedtls_ssl_config *conf, mbedtls_ssl_export_keys_t *f_export_keys, void *p_export_keys) |
Configure key export callback. | |
void | mbedtls_ssl_conf_dtls_cookies (mbedtls_ssl_config *conf, mbedtls_ssl_cookie_write_t *f_cookie_write, mbedtls_ssl_cookie_check_t *f_cookie_check, void *p_cookie) |
Register callbacks for DTLS cookies (Server only. | |
int | mbedtls_ssl_set_client_transport_id (mbedtls_ssl_context *ssl, const unsigned char *info, size_t ilen) |
Set client's transport-level identification info. | |
void | mbedtls_ssl_conf_dtls_anti_replay (mbedtls_ssl_config *conf, char mode) |
Enable or disable anti-replay protection for DTLS. | |
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. | |
void | mbedtls_ssl_conf_handshake_timeout (mbedtls_ssl_config *conf, uint32_t min, uint32_t max) |
Set retransmit timeout values for the DTLS handshale. | |
void | mbedtls_ssl_conf_session_cache (mbedtls_ssl_config *conf, void *p_cache, int(*f_get_cache)(void *, mbedtls_ssl_session *), int(*f_set_cache)(void *, const mbedtls_ssl_session *)) |
Set the session cache callbacks (server-side only) If not set, no session resuming is done (except if session tickets are enabled too). | |
int | mbedtls_ssl_set_session (mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session) |
Request resumption of session (client-side only) Session data is copied from presented session structure. | |
void | mbedtls_ssl_conf_ciphersuites (mbedtls_ssl_config *conf, const int *ciphersuites) |
Set the list of allowed ciphersuites and the preference order. | |
void | mbedtls_ssl_conf_ciphersuites_for_version (mbedtls_ssl_config *conf, const int *ciphersuites, int major, int minor) |
Set the list of allowed ciphersuites and the preference order for a specific version of the protocol. | |
void | mbedtls_ssl_conf_cert_profile (mbedtls_ssl_config *conf, const mbedtls_x509_crt_profile *profile) |
Set the X.509 security profile used for verification. | |
void | mbedtls_ssl_conf_ca_chain (mbedtls_ssl_config *conf, mbedtls_x509_crt *ca_chain, mbedtls_x509_crl *ca_crl) |
Set the data required to verify peer certificate. | |
int | mbedtls_ssl_conf_own_cert (mbedtls_ssl_config *conf, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key) |
Set own certificate chain and private key. | |
int | mbedtls_ssl_conf_psk (mbedtls_ssl_config *conf, const unsigned char *psk, size_t psk_len, const unsigned char *psk_identity, size_t psk_identity_len) |
Set the Pre Shared Key (PSK) and the expected identity name. | |
int | mbedtls_ssl_set_hs_psk (mbedtls_ssl_context *ssl, const unsigned char *psk, size_t psk_len) |
Set the Pre Shared Key (PSK) for the current handshake. | |
void | mbedtls_ssl_conf_psk_cb (mbedtls_ssl_config *conf, int(*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *p_psk) |
Set the PSK callback (server-side only). | |
int | mbedtls_ssl_conf_dh_param (mbedtls_ssl_config *conf, const char *dhm_P, const char *dhm_G) |
Set the Diffie-Hellman public P and G values, read as hexadecimal strings (server-side only) (Default: MBEDTLS_DHM_RFC5114_MODP_2048_[PG]) | |
int | mbedtls_ssl_conf_dh_param_ctx (mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx) |
Set the Diffie-Hellman public P and G values, read from existing context (server-side only) | |
void | mbedtls_ssl_conf_dhm_min_bitlen (mbedtls_ssl_config *conf, unsigned int bitlen) |
Set the minimum length for Diffie-Hellman parameters. | |
void | mbedtls_ssl_conf_curves (mbedtls_ssl_config *conf, const mbedtls_ecp_group_id *curves) |
Set the allowed curves in order of preference. | |
void | mbedtls_ssl_conf_sig_hashes (mbedtls_ssl_config *conf, const int *hashes) |
Set the allowed hashes for signatures during the handshake. | |
int | mbedtls_ssl_set_hostname (mbedtls_ssl_context *ssl, const char *hostname) |
Set hostname for ServerName TLS extension (client-side only) | |
int | mbedtls_ssl_set_hs_own_cert (mbedtls_ssl_context *ssl, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key) |
Set own certificate and key for the current handshake. | |
void | mbedtls_ssl_set_hs_ca_chain (mbedtls_ssl_context *ssl, mbedtls_x509_crt *ca_chain, mbedtls_x509_crl *ca_crl) |
Set the data required to verify peer certificate for the current handshake. | |
void | mbedtls_ssl_set_hs_authmode (mbedtls_ssl_context *ssl, int authmode) |
Set authmode for the current handshake. | |
void | mbedtls_ssl_conf_sni (mbedtls_ssl_config *conf, int(*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *p_sni) |
Set server side ServerName TLS extension callback (optional, server-side only). | |
int | mbedtls_ssl_set_hs_ecjpake_password (mbedtls_ssl_context *ssl, const unsigned char *pw, size_t pw_len) |
Set the EC J-PAKE password for current handshake. | |
int | mbedtls_ssl_conf_alpn_protocols (mbedtls_ssl_config *conf, const char **protos) |
Set the supported Application Layer Protocols. | |
const char * | mbedtls_ssl_get_alpn_protocol (const mbedtls_ssl_context *ssl) |
Get the name of the negotiated Application Layer Protocol. | |
void | 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 (Default: MBEDTLS_SSL_MAX_MAJOR_VERSION, MBEDTLS_SSL_MAX_MINOR_VERSION) | |
void | mbedtls_ssl_conf_min_version (mbedtls_ssl_config *conf, int major, int minor) |
Set the minimum accepted SSL/TLS protocol version (Default: TLS 1.0) | |
void | mbedtls_ssl_conf_fallback (mbedtls_ssl_config *conf, char fallback) |
Set the fallback flag (client-side only). | |
void | mbedtls_ssl_conf_encrypt_then_mac (mbedtls_ssl_config *conf, char etm) |
Enable or disable Encrypt-then-MAC (Default: MBEDTLS_SSL_ETM_ENABLED) | |
void | mbedtls_ssl_conf_extended_master_secret (mbedtls_ssl_config *conf, char ems) |
Enable or disable Extended Master Secret negotiation. | |
void | mbedtls_ssl_conf_arc4_support (mbedtls_ssl_config *conf, char arc4) |
Disable or enable support for RC4 (Default: MBEDTLS_SSL_ARC4_DISABLED) | |
int | mbedtls_ssl_conf_max_frag_len (mbedtls_ssl_config *conf, unsigned char mfl_code) |
Set the maximum fragment length to emit and/or negotiate (Default: MBEDTLS_SSL_MAX_CONTENT_LEN, usually 2^14 bytes) (Server: set maximum fragment length to emit, usually negotiated by the client during handshake (Client: set maximum fragment length to emit *and* negotiate with the server during handshake) | |
void | mbedtls_ssl_conf_truncated_hmac (mbedtls_ssl_config *conf, int truncate) |
Activate negotiation of truncated HMAC (Default: MBEDTLS_SSL_TRUNC_HMAC_DISABLED) | |
void | mbedtls_ssl_conf_cbc_record_splitting (mbedtls_ssl_config *conf, char split) |
Enable / Disable 1/n-1 record splitting (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED) | |
void | mbedtls_ssl_conf_session_tickets (mbedtls_ssl_config *conf, int use_tickets) |
Enable / Disable session tickets (client only). | |
void | mbedtls_ssl_conf_renegotiation (mbedtls_ssl_config *conf, int renegotiation) |
Enable / Disable renegotiation support for connection when initiated by peer (Default: MBEDTLS_SSL_RENEGOTIATION_DISABLED) | |
void | mbedtls_ssl_conf_legacy_renegotiation (mbedtls_ssl_config *conf, int allow_legacy) |
Prevent or allow legacy renegotiation. | |
void | mbedtls_ssl_conf_renegotiation_enforced (mbedtls_ssl_config *conf, int max_records) |
Enforce renegotiation requests. | |
void | mbedtls_ssl_conf_renegotiation_period (mbedtls_ssl_config *conf, const unsigned char period[8]) |
Set record counter threshold for periodic renegotiation. | |
size_t | mbedtls_ssl_get_bytes_avail (const mbedtls_ssl_context *ssl) |
Return the number of data bytes available to read. | |
uint32_t | mbedtls_ssl_get_verify_result (const mbedtls_ssl_context *ssl) |
Return the result of the certificate verification. | |
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 SSL version (SSLv3/TLSv1/etc) | |
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. | |
size_t | mbedtls_ssl_get_max_frag_len (const mbedtls_ssl_context *ssl) |
Return the maximum fragment length (payload, in bytes). | |
const mbedtls_x509_crt * | mbedtls_ssl_get_peer_cert (const mbedtls_ssl_context *ssl) |
Return the peer certificate from the current connection. | |
int | mbedtls_ssl_get_session (const mbedtls_ssl_context *ssl, mbedtls_ssl_session *session) |
Save session in order to resume it later (client-side only) Session data is copied to presented session structure. | |
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_renegotiate (mbedtls_ssl_context *ssl) |
Initiate an SSL renegotiation on the running connection. | |
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 reasonnable default SSL configuration values. | |
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. |
Detailed Description
SSL/TLS functions.
Copyright (C) 2006-2015, ARM Limited, All Rights Reserved SPDX-License-Identifier: Apache-2.0
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This file is part of mbed TLS (https://tls.mbed.org)
Definition in file ssl.h.
Typedef Documentation
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.
- Parameters:
-
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
- Returns:
- The callback must return 0 if cookie is valid, or a negative error code.
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.
- Parameters:
-
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
- Returns:
- The callback must return 0 on success, or a negative error code.
typedef int mbedtls_ssl_export_keys_t(void *p_expkey, const unsigned char *ms, const unsigned char *kb, size_t maclen, size_t keylen, size_t ivlen) |
Callback type: Export key block and master secret.
- Note:
- This is required for certain uses of TLS, e.g. EAP-TLS (RFC 5216) and Thread. The key pointers are ephemeral and therefore must not be stored. The master secret and keys should not be used directly except as an input to a key derivation function.
- Parameters:
-
p_expkey Context for the callback ms Pointer to master secret (fixed length: 48 bytes) kb Pointer to key block, see RFC 5246 section 6.3 (variable length: 2 * maclen + 2 * keylen + 2 * ivlen). maclen MAC length keylen Key length ivlen IV length
- Returns:
- 0 if successful, or a specific MBEDTLS_ERR_XXX code.
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.
- Note:
- This describes what a callback implementation should do. This callback should parse a session ticket as generated by the corresponding mbedtls_ssl_ticket_write_t function, and, if the ticket is authentic and valid, load the session.
- The implementation is allowed to modify the first len bytes of the input buffer, eg to use it as a temporary area for the decrypted ticket contents.
- Parameters:
-
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.
- Returns:
- 0 if successful, or MBEDTLS_ERR_SSL_INVALID_MAC if not authentic, or MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED if expired, or any other non-zero code for other failures.
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.
- Note:
- This describes what a callback implementation should do. This callback should generate and encrypted and authenticated ticket for the session and write it to the output buffer. Here, ticket means the opaque ticket part of the NewSessionTicket structure of RFC 5077.
- Parameters:
-
p_ticket Context for the callback session SSL session to bo written in the ticket start Start of the outpur 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
- Returns:
- 0 if successful, or a specific MBEDTLS_ERR_XXX code.
Function Documentation
int mbedtls_ssl_close_notify | ( | mbedtls_ssl_context * | ssl ) |
int mbedtls_ssl_conf_alpn_protocols | ( | mbedtls_ssl_config * | conf, |
const char ** | protos | ||
) |
void mbedtls_ssl_conf_arc4_support | ( | mbedtls_ssl_config * | conf, |
char | arc4 | ||
) |
Disable or enable support for RC4 (Default: MBEDTLS_SSL_ARC4_DISABLED)
- Warning:
- Use of RC4 in (D)TLS has been prohibited by RFC ???? for security reasons. Use at your own risks.
- Note:
- This function will likely be removed in future versions as RC4 will then be disabled by default at compile time.
- Parameters:
-
conf SSL configuration arc4 MBEDTLS_SSL_ARC4_ENABLED or MBEDTLS_SSL_ARC4_DISABLED
void mbedtls_ssl_conf_authmode | ( | mbedtls_ssl_config * | conf, |
int | authmode | ||
) |
Set the certificate verification mode Default: NONE on server, REQUIRED on client.
- Parameters:
-
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.
- Note:
- On client, MBEDTLS_SSL_VERIFY_REQUIRED is the recommended mode. With MBEDTLS_SSL_VERIFY_OPTIONAL, the user needs to call mbedtls_ssl_get_verify_result() at the right time(s), which may not be obvious, while REQUIRED always perform the verification as soon as possible. For example, REQUIRED was protecting against the "triple handshake" attack even before it was found.
void mbedtls_ssl_conf_ca_chain | ( | mbedtls_ssl_config * | conf, |
mbedtls_x509_crt * | ca_chain, | ||
mbedtls_x509_crl * | ca_crl | ||
) |
void mbedtls_ssl_conf_cbc_record_splitting | ( | mbedtls_ssl_config * | conf, |
char | split | ||
) |
Enable / Disable 1/n-1 record splitting (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED)
- Note:
- Only affects SSLv3 and TLS 1.0, not higher versions. Does not affect non-CBC ciphersuites in any version.
- Parameters:
-
conf SSL configuration split MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED or MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED
void mbedtls_ssl_conf_cert_profile | ( | mbedtls_ssl_config * | conf, |
const mbedtls_x509_crt_profile * | profile | ||
) |
Set the X.509 security profile used for verification.
- Note:
- The restrictions are enforced for all certificates in the chain. However, signatures in the handshake are not covered by this setting but by mbedtls_ssl_conf_sig_hashes().
- Parameters:
-
conf SSL configuration profile Profile to use
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. (Overrides all version specific lists)
The ciphersuites array is not copied, and must remain valid for the lifetime of the ssl_config.
Note: The server uses its own preferences over the preference of the client unless MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE is defined!
- Parameters:
-
conf SSL configuration ciphersuites 0-terminated list of allowed ciphersuites
void mbedtls_ssl_conf_ciphersuites_for_version | ( | mbedtls_ssl_config * | conf, |
const int * | ciphersuites, | ||
int | major, | ||
int | minor | ||
) |
Set the list of allowed ciphersuites and the preference order for a specific version of the protocol.
(Only useful on the server side)
The ciphersuites array is not copied, and must remain valid for the lifetime of the ssl_config.
- Parameters:
-
conf SSL configuration ciphersuites 0-terminated list of allowed ciphersuites major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, MBEDTLS_SSL_MINOR_VERSION_3 supported)
- Note:
- With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
void mbedtls_ssl_conf_curves | ( | mbedtls_ssl_config * | conf, |
const mbedtls_ecp_group_id * | curves | ||
) |
Set the allowed curves in order of preference.
(Default: all defined curves.)
On server: this only affects selection of the ECDHE curve; the curves used for ECDH and ECDSA are determined by the list of available certificates instead.
On client: this affects the list of curves offered for any use. The server can override our preference order.
Both sides: limits the set of curves accepted for use in ECDHE and in the peer's end-entity certificate.
- Note:
- This has no influence on which curves are allowed inside the certificate chains, see
mbedtls_ssl_conf_cert_profile()
for that. For the end-entity certificate however, the key will be accepted only if it is allowed both by this list and by the cert profile. - This list should be ordered by decreasing preference (preferred curve first).
- Parameters:
-
conf SSL configuration curves Ordered list of allowed curves, terminated by MBEDTLS_ECP_DP_NONE.
void mbedtls_ssl_conf_dbg | ( | mbedtls_ssl_config * | conf, |
void(*)(void *, int, const char *, int, const char *) | f_dbg, | ||
void * | p_dbg | ||
) |
int mbedtls_ssl_conf_dh_param | ( | mbedtls_ssl_config * | conf, |
const char * | dhm_P, | ||
const char * | dhm_G | ||
) |
Set the Diffie-Hellman public P and G values, read as hexadecimal strings (server-side only) (Default: MBEDTLS_DHM_RFC5114_MODP_2048_[PG])
- Parameters:
-
conf SSL configuration dhm_P Diffie-Hellman-Merkle modulus dhm_G Diffie-Hellman-Merkle generator
- Returns:
- 0 if successful
int mbedtls_ssl_conf_dh_param_ctx | ( | mbedtls_ssl_config * | conf, |
mbedtls_dhm_context * | dhm_ctx | ||
) |
void mbedtls_ssl_conf_dhm_min_bitlen | ( | mbedtls_ssl_config * | conf, |
unsigned int | bitlen | ||
) |
void mbedtls_ssl_conf_dtls_anti_replay | ( | mbedtls_ssl_config * | conf, |
char | mode | ||
) |
Enable or disable anti-replay protection for DTLS.
(DTLS only, no effect on TLS.) Default: enabled.
- Parameters:
-
conf SSL configuration mode MBEDTLS_SSL_ANTI_REPLAY_ENABLED or MBEDTLS_SSL_ANTI_REPLAY_DISABLED.
- Warning:
- Disabling this is a security risk unless the application protocol handles duplicated packets in a safe way. You should not disable this without careful consideration. However, if your application already detects duplicated packets and needs information about them to adjust its transmission strategy, then you'll want to disable this.
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).
- Parameters:
-
conf SSL configuration limit Limit, or 0 to disable.
- Note:
- If the limit is N, then the connection is terminated when the Nth non-authentic record is seen.
- Records with an invalid header are not counted, only the ones going through the authentication-decryption phase.
- This is a security trade-off related to the fact that it's often relatively easy for an active attacker ot inject UDP datagrams. On one hand, setting a low limit here makes it easier for such an attacker to forcibly terminated a connection. On the other hand, a high limit or no limit might make us waste resources checking authentication on many bogus packets.
void mbedtls_ssl_conf_dtls_cookies | ( | mbedtls_ssl_config * | conf, |
mbedtls_ssl_cookie_write_t * | f_cookie_write, | ||
mbedtls_ssl_cookie_check_t * | f_cookie_check, | ||
void * | p_cookie | ||
) |
Register callbacks for DTLS cookies (Server only.
DTLS only.)
Default: dummy callbacks that fail, in order to force you to register working callbacks (and initialize their context).
To disable HelloVerifyRequest, register NULL callbacks.
- Warning:
- Disabling hello verification allows your server to be used for amplification in DoS attacks against other hosts. Only disable if you known this can't happen in your particular environment.
- Note:
- See comments on
mbedtls_ssl_handshake()
about handling the MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED that is expected on the first handshake attempt when this is enabled. -
This is also necessary to handle client reconnection from the same port as described in RFC 6347 section 4.2.8 (only the variant with cookies is supported currently). See comments on
mbedtls_ssl_read()
for details.
- Parameters:
-
conf SSL configuration f_cookie_write Cookie write callback f_cookie_check Cookie check callback p_cookie Context for both callbacks
void mbedtls_ssl_conf_encrypt_then_mac | ( | mbedtls_ssl_config * | conf, |
char | etm | ||
) |
Enable or disable Encrypt-then-MAC (Default: MBEDTLS_SSL_ETM_ENABLED)
- Note:
- This should always be enabled, it is a security improvement, and should not cause any interoperability issue (used only if the peer supports it too).
- Parameters:
-
conf SSL configuration etm MBEDTLS_SSL_ETM_ENABLED or MBEDTLS_SSL_ETM_DISABLED
void mbedtls_ssl_conf_endpoint | ( | mbedtls_ssl_config * | conf, |
int | endpoint | ||
) |
void mbedtls_ssl_conf_export_keys_cb | ( | mbedtls_ssl_config * | conf, |
mbedtls_ssl_export_keys_t * | f_export_keys, | ||
void * | p_export_keys | ||
) |
void mbedtls_ssl_conf_extended_master_secret | ( | mbedtls_ssl_config * | conf, |
char | ems | ||
) |
Enable or disable Extended Master Secret negotiation.
(Default: MBEDTLS_SSL_EXTENDED_MS_ENABLED)
- Note:
- This should always be enabled, it is a security fix to the protocol, and should not cause any interoperability issue (used only if the peer supports it too).
- Parameters:
-
conf SSL configuration ems MBEDTLS_SSL_EXTENDED_MS_ENABLED or MBEDTLS_SSL_EXTENDED_MS_DISABLED
void mbedtls_ssl_conf_fallback | ( | mbedtls_ssl_config * | conf, |
char | fallback | ||
) |
Set the fallback flag (client-side only).
(Default: MBEDTLS_SSL_IS_NOT_FALLBACK).
- Note:
- Set to MBEDTLS_SSL_IS_FALLBACK when preparing a fallback connection, that is a connection with max_version set to a lower value than the value you're willing to use. Such fallback connections are not recommended but are sometimes necessary to interoperate with buggy (version-intolerant) servers.
- Warning:
- You should NOT set this to MBEDTLS_SSL_IS_FALLBACK for non-fallback connections! This would appear to work for a while, then cause failures when the server is upgraded to support a newer TLS version.
- Parameters:
-
conf SSL configuration fallback MBEDTLS_SSL_IS_NOT_FALLBACK or MBEDTLS_SSL_IS_FALLBACK
void mbedtls_ssl_conf_handshake_timeout | ( | mbedtls_ssl_config * | conf, |
uint32_t | min, | ||
uint32_t | max | ||
) |
Set retransmit timeout values for the DTLS handshale.
(DTLS only, no effect on TLS.)
- Parameters:
-
conf SSL configuration min Initial timeout value in milliseconds. Default: 1000 (1 second). max Maximum timeout value in milliseconds. Default: 60000 (60 seconds).
- Note:
- Default values are from RFC 6347 section 4.2.4.1.
- Higher values for initial timeout may increase average handshake latency. Lower values may increase the risk of network congestion by causing more retransmissions.
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)
- Parameters:
-
conf SSL configuration allow_legacy Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, SSL_ALLOW_LEGACY_RENEGOTIATION or MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE)
int mbedtls_ssl_conf_max_frag_len | ( | mbedtls_ssl_config * | conf, |
unsigned char | mfl_code | ||
) |
Set the maximum fragment length to emit and/or negotiate (Default: MBEDTLS_SSL_MAX_CONTENT_LEN, usually 2^14 bytes) (Server: set maximum fragment length to emit, usually negotiated by the client during handshake (Client: set maximum fragment length to emit *and* negotiate with the server during handshake)
- Parameters:
-
conf SSL configuration mfl_code Code for maximum fragment length (allowed values: MBEDTLS_SSL_MAX_FRAG_LEN_512, MBEDTLS_SSL_MAX_FRAG_LEN_1024, MBEDTLS_SSL_MAX_FRAG_LEN_2048, MBEDTLS_SSL_MAX_FRAG_LEN_4096)
- Returns:
- 0 if successful or MBEDTLS_ERR_SSL_BAD_INPUT_DATA
void 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 (Default: MBEDTLS_SSL_MAX_MAJOR_VERSION, MBEDTLS_SSL_MAX_MINOR_VERSION)
- Note:
- This ignores ciphersuites from higher versions.
- With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
- Parameters:
-
conf SSL configuration major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, MBEDTLS_SSL_MINOR_VERSION_3 supported)
void mbedtls_ssl_conf_min_version | ( | mbedtls_ssl_config * | conf, |
int | major, | ||
int | minor | ||
) |
Set the minimum accepted SSL/TLS protocol version (Default: TLS 1.0)
- Note:
- Input outside of the SSL_MAX_XXXXX_VERSION and SSL_MIN_XXXXX_VERSION range is ignored.
- MBEDTLS_SSL_MINOR_VERSION_0 (SSL v3) should be avoided.
- With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
- Parameters:
-
conf SSL configuration major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, MBEDTLS_SSL_MINOR_VERSION_3 supported)
int mbedtls_ssl_conf_own_cert | ( | mbedtls_ssl_config * | conf, |
mbedtls_x509_crt * | own_cert, | ||
mbedtls_pk_context * | pk_key | ||
) |
Set own certificate chain and private key.
- Note:
- own_cert should contain in order from the bottom up your certificate chain. The top certificate (self-signed) can be omitted.
- On server, this function can be called multiple times to provision more than one cert/key pair (eg one ECDSA, one RSA with SHA-256, one RSA with SHA-1). An adequate certificate will be selected according to the client's advertised capabilities. In case mutliple certificates are adequate, preference is given to the one set by the first call to this function, then second, etc.
- On client, only the first call has any effect.
- Parameters:
-
conf SSL configuration own_cert own public certificate chain pk_key own private key
- Returns:
- 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED
int mbedtls_ssl_conf_psk | ( | mbedtls_ssl_config * | conf, |
const unsigned char * | psk, | ||
size_t | psk_len, | ||
const unsigned char * | psk_identity, | ||
size_t | psk_identity_len | ||
) |
Set the Pre Shared Key (PSK) and the expected identity name.
- Note:
- This is mainly useful for clients. Servers will usually want to use
mbedtls_ssl_conf_psk_cb()
instead.
- Parameters:
-
conf SSL configuration psk pointer to the pre-shared key psk_len pre-shared key length psk_identity pointer to the pre-shared key identity psk_identity_len identity key length
- Returns:
- 0 if successful or MBEDTLS_ERR_SSL_ALLOC_FAILED
void mbedtls_ssl_conf_psk_cb | ( | mbedtls_ssl_config * | conf, |
int(*)(void *, mbedtls_ssl_context *, const unsigned char *, size_t) | f_psk, | ||
void * | p_psk | ||
) |
Set the PSK callback (server-side only).
If set, the PSK callback is called for each handshake where a PSK ciphersuite was negotiated. The caller provides the identity received and wants to receive the actual PSK data and length.
The callback has the following parameters: (void *parameter, mbedtls_ssl_context *ssl, const unsigned char *psk_identity, size_t identity_len) If a valid PSK identity is found, the callback should use mbedtls_ssl_set_hs_psk()
on the ssl context to set the correct PSK and return 0. Any other return value will result in a denied PSK identity.
- Note:
- If you set a PSK callback using this function, then you don't need to set a PSK key and identity using
mbedtls_ssl_conf_psk()
.
- Parameters:
-
conf SSL configuration f_psk PSK identity function p_psk PSK identity parameter
void mbedtls_ssl_conf_read_timeout | ( | mbedtls_ssl_config * | conf, |
uint32_t | timeout | ||
) |
Set the timeout period for mbedtls_ssl_read() (Default: no timeout.)
- Parameters:
-
conf SSL configuration context timeout Timeout value in milliseconds. Use 0 for no timeout (default).
- Note:
- With blocking I/O, this will only work if a non-NULL
f_recv_timeout
was set withmbedtls_ssl_set_bio()
. With non-blocking I/O, this will only work if timer callbacks were set withmbedtls_ssl_set_timer_cb()
. - With non-blocking I/O, you may also skip this function altogether and handle timeouts at the application layer.
void mbedtls_ssl_conf_renegotiation | ( | mbedtls_ssl_config * | conf, |
int | renegotiation | ||
) |
Enable / Disable renegotiation support for connection when initiated by peer (Default: MBEDTLS_SSL_RENEGOTIATION_DISABLED)
- Warning:
- It is recommended to always disable renegotation unless you know you need it and you know what you're doing. In the past, there has been several issues associated with renegotiation or a poor understanding of its properties.
- Note:
- Server-side, enabling renegotiation also makes the server susceptible to a resource DoS by a malicious client.
- Parameters:
-
conf SSL configuration renegotiation Enable or disable (MBEDTLS_SSL_RENEGOTIATION_ENABLED or MBEDTLS_SSL_RENEGOTIATION_DISABLED)
void mbedtls_ssl_conf_renegotiation_enforced | ( | mbedtls_ssl_config * | conf, |
int | max_records | ||
) |
Enforce renegotiation requests.
(Default: enforced, max_records = 16)
When we request a renegotiation, the peer can comply or ignore the request. This function allows us to decide whether to enforce our renegotiation requests by closing the connection if the peer doesn't comply.
However, records could already be in transit from the peer when the request is emitted. In order to increase reliability, we can accept a number of records before the expected handshake records.
The optimal value is highly dependent on the specific usage scenario.
- Note:
- With DTLS and server-initiated renegotiation, the HelloRequest is retransmited every time mbedtls_ssl_read() times out or receives Application Data, until:
- max_records records have beens seen, if it is >= 0, or
- the number of retransmits that would happen during an actual handshake has been reached. Please remember the request might be lost a few times if you consider setting max_records to a really low value.
- Warning:
- On client, the grace period can only happen during mbedtls_ssl_read(), as opposed to mbedtls_ssl_write() and mbedtls_ssl_renegotiate() which always behave as if max_record was 0. The reason is, if we receive application data from the server, we need a place to write it, which only happens during mbedtls_ssl_read().
- Parameters:
-
conf SSL configuration max_records Use MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED if you don't want to enforce renegotiation, or a non-negative value to enforce it but allow for a grace period of max_records records.
void mbedtls_ssl_conf_renegotiation_period | ( | mbedtls_ssl_config * | conf, |
const unsigned char | period[8] | ||
) |
Set record counter threshold for periodic renegotiation.
(Default: 2^64 - 256.)
Renegotiation is automatically triggered when a record counter (outgoing or ingoing) crosses the defined threshold. The default value is meant to prevent the connection from being closed when the counter is about to reached its maximal value (it is not allowed to wrap).
Lower values can be used to enforce policies such as "keys must be refreshed every N packets with cipher X".
- Parameters:
-
conf SSL configuration period The threshold value: a big-endian 64-bit number. Set to 2^64 - 1 to disable periodic renegotiation
void mbedtls_ssl_conf_rng | ( | mbedtls_ssl_config * | conf, |
int(*)(void *, unsigned char *, size_t) | f_rng, | ||
void * | p_rng | ||
) |
void mbedtls_ssl_conf_session_cache | ( | mbedtls_ssl_config * | conf, |
void * | p_cache, | ||
int(*)(void *, mbedtls_ssl_session *) | f_get_cache, | ||
int(*)(void *, const mbedtls_ssl_session *) | f_set_cache | ||
) |
Set the session cache callbacks (server-side only) If not set, no session resuming is done (except if session tickets are enabled too).
The session cache has the responsibility to check for stale entries based on timeout. See RFC 5246 for recommendations.
Warning: session.peer_cert is cleared by the SSL/TLS layer on connection shutdown, so do not cache the pointer! Either set it to NULL or make a full copy of the certificate.
The get callback is called once during the initial handshake to enable session resuming. The get function has the following parameters: (void *parameter, mbedtls_ssl_session *session) If a valid entry is found, it should fill the master of the session object with the cached values and return 0, return 1 otherwise. Optionally peer_cert can be set as well if it is properly present in cache entry.
The set callback is called once during the initial handshake to enable session resuming after the entire handshake has been finished. The set function has the following parameters: (void *parameter, const mbedtls_ssl_session *session). The function should create a cache entry for future retrieval based on the data in the session structure and should keep in mind that the mbedtls_ssl_session object presented (and all its referenced data) is cleared by the SSL/TLS layer when the connection is terminated. It is recommended to add metadata to determine if an entry is still valid in the future. Return 0 if successfully cached, return 1 otherwise.
- Parameters:
-
conf SSL configuration p_cache parmater (context) for both callbacks f_get_cache session get callback f_set_cache session set callback
void mbedtls_ssl_conf_session_tickets | ( | mbedtls_ssl_config * | conf, |
int | use_tickets | ||
) |
Enable / Disable session tickets (client only).
(Default: MBEDTLS_SSL_SESSION_TICKETS_ENABLED.)
- Note:
- On server, use
mbedtls_ssl_conf_session_tickets_cb()
.
- Parameters:
-
conf SSL configuration use_tickets Enable or disable (MBEDTLS_SSL_SESSION_TICKETS_ENABLED or MBEDTLS_SSL_SESSION_TICKETS_DISABLED)
void mbedtls_ssl_conf_session_tickets_cb | ( | mbedtls_ssl_config * | conf, |
mbedtls_ssl_ticket_write_t * | f_ticket_write, | ||
mbedtls_ssl_ticket_parse_t * | f_ticket_parse, | ||
void * | p_ticket | ||
) |
Configure SSL session ticket callbacks (server only).
(Default: none.)
- Note:
- On server, session tickets are enabled by providing non-NULL callbacks.
-
On client, use
mbedtls_ssl_conf_session_tickets()
.
- Parameters:
-
conf SSL configuration context f_ticket_write Callback for writing a ticket f_ticket_parse Callback for parsing a ticket p_ticket Context shared by the two callbacks
void mbedtls_ssl_conf_sig_hashes | ( | mbedtls_ssl_config * | conf, |
const int * | hashes | ||
) |
Set the allowed hashes for signatures during the handshake.
(Default: all available hashes.)
- Note:
- This only affects which hashes are offered and can be used for signatures during the handshake. Hashes for message authentication and the TLS PRF are controlled by the ciphersuite, see
mbedtls_ssl_conf_ciphersuites()
. Hashes used for certificate signature are controlled by the verification profile, seembedtls_ssl_conf_cert_profile()
. - This list should be ordered by decreasing preference (preferred hash first).
- Parameters:
-
conf SSL configuration hashes Ordered list of allowed signature hashes, terminated by MBEDTLS_MD_NONE
.
void mbedtls_ssl_conf_sni | ( | mbedtls_ssl_config * | conf, |
int(*)(void *, mbedtls_ssl_context *, const unsigned char *, size_t) | f_sni, | ||
void * | p_sni | ||
) |
Set server side ServerName TLS extension callback (optional, server-side only).
If set, the ServerName callback is called whenever the server receives a ServerName TLS extension from the client during a handshake. The ServerName callback has the following parameters: (void *parameter, mbedtls_ssl_context *ssl, const unsigned char *hostname, size_t len). If a suitable certificate is found, the callback must set the certificate(s) and key(s) to use with mbedtls_ssl_set_hs_own_cert()
(can be called repeatedly), and may optionally adjust the CA and associated CRL with mbedtls_ssl_set_hs_ca_chain()
as well as the client authentication mode with mbedtls_ssl_set_hs_authmode()
, then must return 0. If no matching name is found, the callback must either set a default cert, or return non-zero to abort the handshake at this point.
- Parameters:
-
conf SSL configuration f_sni verification function p_sni verification parameter
void mbedtls_ssl_conf_transport | ( | mbedtls_ssl_config * | conf, |
int | transport | ||
) |
Set the transport type (TLS or DTLS).
Default: TLS
- Note:
- For DTLS, you must either provide a recv callback that doesn't block, or one that handles timeouts, see
mbedtls_ssl_set_bio()
. You also need to provide timer callbacks withmbedtls_ssl_set_timer_cb()
.
- Parameters:
-
conf SSL configuration transport transport type: MBEDTLS_SSL_TRANSPORT_STREAM for TLS, MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS.
void mbedtls_ssl_conf_truncated_hmac | ( | mbedtls_ssl_config * | conf, |
int | truncate | ||
) |
void mbedtls_ssl_conf_verify | ( | mbedtls_ssl_config * | conf, |
int(*)(void *, mbedtls_x509_crt *, int, uint32_t *) | f_vrfy, | ||
void * | p_vrfy | ||
) |
Set the verification callback (Optional).
If set, the verify callback is called for each certificate in the chain. For implementation information, please see x509parse_verify()
- Parameters:
-
conf SSL configuration f_vrfy verification function p_vrfy verification parameter
int mbedtls_ssl_config_defaults | ( | mbedtls_ssl_config * | conf, |
int | endpoint, | ||
int | transport, | ||
int | preset | ||
) |
Load reasonnable default SSL configuration values.
(You need to call mbedtls_ssl_config_init() first.)
- Parameters:
-
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 (currently unused).
- Note:
- See
mbedtls_ssl_conf_transport()
for notes on DTLS.
- Returns:
- 0 if successful, or MBEDTLS_ERR_XXX_ALLOC_FAILED on memory allocation error.
void mbedtls_ssl_config_free | ( | mbedtls_ssl_config * | conf ) |
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().
- Note:
- You need to call mbedtls_ssl_config_defaults() unless you manually set all of the relevent fields yourself.
- Parameters:
-
conf SSL configuration context
void mbedtls_ssl_free | ( | mbedtls_ssl_context * | ssl ) |
const char* mbedtls_ssl_get_alpn_protocol | ( | const mbedtls_ssl_context * | ssl ) |
size_t mbedtls_ssl_get_bytes_avail | ( | const mbedtls_ssl_context * | ssl ) |
const char* mbedtls_ssl_get_ciphersuite | ( | const mbedtls_ssl_context * | ssl ) |
int mbedtls_ssl_get_ciphersuite_id | ( | const char * | ciphersuite_name ) |
Return the ID of the ciphersuite associated with the given name.
- Parameters:
-
ciphersuite_name SSL ciphersuite name
- Returns:
- the ID with the ciphersuite or 0 if not found
Definition at line 1781 of file ssl_ciphersuites.c.
const char* mbedtls_ssl_get_ciphersuite_name | ( | const int | ciphersuite_id ) |
Return the name of the ciphersuite associated with the given ID.
- Parameters:
-
ciphersuite_id SSL ciphersuite ID
- Returns:
- a string containing the ciphersuite name
Definition at line 1769 of file ssl_ciphersuites.c.
size_t mbedtls_ssl_get_max_frag_len | ( | const mbedtls_ssl_context * | ssl ) |
Return the maximum fragment length (payload, in bytes).
This is the value negotiated with peer if any, or the locally configured value.
- Note:
- With DTLS,
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 callmbedtls_ssl_write()
again in order to send the remaining bytes if any.
- Parameters:
-
ssl SSL context
- Returns:
- Current maximum fragment length.
const mbedtls_x509_crt* mbedtls_ssl_get_peer_cert | ( | const mbedtls_ssl_context * | ssl ) |
Return the peer certificate from the current connection.
Note: Can be NULL in case no certificate was sent during the handshake. Different calls for the same connection can return the same or different pointers for the same certificate and even a different certificate altogether. The peer cert CAN change in a single connection if renegotiation is performed.
- Parameters:
-
ssl SSL context
- Returns:
- the current peer certificate
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)
- Parameters:
-
ssl SSL context
- Returns:
- Current maximum record expansion in bytes, or MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE if compression is enabled, which makes expansion much less predictable
int mbedtls_ssl_get_session | ( | const mbedtls_ssl_context * | ssl, |
mbedtls_ssl_session * | session | ||
) |
Save session in order to resume it later (client-side only) Session data is copied to presented session structure.
- Warning:
- Currently, peer certificate is lost in the operation.
- Parameters:
-
ssl SSL context session session context
- Returns:
- 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or arguments are otherwise invalid
- See also:
- mbedtls_ssl_set_session()
uint32_t mbedtls_ssl_get_verify_result | ( | const mbedtls_ssl_context * | ssl ) |
const char* mbedtls_ssl_get_version | ( | const mbedtls_ssl_context * | ssl ) |
int mbedtls_ssl_handshake | ( | mbedtls_ssl_context * | ssl ) |
Perform the SSL handshake.
- Parameters:
-
ssl SSL context
- Returns:
- 0 if successful, or MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED (see below), or a specific SSL error code.
- Note:
- If this function returns something other than 0 or MBEDTLS_ERR_SSL_WANT_READ/WRITE, then the ssl context becomes unusable, and you should either free it or call
mbedtls_ssl_session_reset()
on it before re-using it. - If DTLS is in use, then you may choose to handle MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED specially for logging purposes, as it is an expected return value rather than an actual error, but you still need to reset/free the context.
int mbedtls_ssl_handshake_step | ( | mbedtls_ssl_context * | ssl ) |
Perform a single step of the SSL handshake.
- Note:
- The state of the context (ssl->state) will be at the following state after execution of this function. Do not call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER.
- Parameters:
-
ssl SSL context
- Returns:
- 0 if successful, or MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or a specific SSL error code.
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()
- Parameters:
-
ssl SSL context
const int * mbedtls_ssl_list_ciphersuites | ( | void | ) |
Returns the list of ciphersuites supported by the SSL/TLS module.
- Returns:
- a statically allocated array of ciphersuites, the last entry is 0.
Definition at line 1702 of file ssl_ciphersuites.c.
int mbedtls_ssl_read | ( | mbedtls_ssl_context * | ssl, |
unsigned char * | buf, | ||
size_t | len | ||
) |
Read at most 'len' application data bytes.
- Parameters:
-
ssl SSL context buf buffer that will hold the data len maximum number of bytes to read
- Returns:
- the number of bytes read, or 0 for EOF, or MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE, or MBEDTLS_ERR_SSL_CLIENT_RECONNECT (see below), or another negative error code.
- Note:
- When this function return MBEDTLS_ERR_SSL_CLIENT_RECONNECT (which can only happen server-side), it means that a client is initiating a new connection using the same source port. You can either treat that as a connection close and wait for the client to resend a ClientHello, or directly continue with
mbedtls_ssl_handshake()
with the same context (as it has beeen reset internally). Either way, you should 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!
int mbedtls_ssl_renegotiate | ( | mbedtls_ssl_context * | ssl ) |
Initiate an SSL renegotiation on the running connection.
Client: perform the renegotiation right now. Server: request renegotiation, which will be performed during the next call to mbedtls_ssl_read() if honored by client.
- Parameters:
-
ssl SSL context
- Returns:
- 0 if successful, or any mbedtls_ssl_handshake() return value.
int mbedtls_ssl_send_alert_message | ( | mbedtls_ssl_context * | ssl, |
unsigned char | level, | ||
unsigned char | message | ||
) |
void mbedtls_ssl_session_free | ( | mbedtls_ssl_session * | session ) |
void mbedtls_ssl_session_init | ( | mbedtls_ssl_session * | session ) |
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.
- Parameters:
-
ssl SSL context
- Returns:
- 0 if successful, or POLASSL_ERR_SSL_MALLOC_FAILED, MBEDTLS_ERR_SSL_HW_ACCEL_FAILED or MBEDTLS_ERR_SSL_COMPRESSION_FAILED
void mbedtls_ssl_set_bio | ( | mbedtls_ssl_context * | ssl, |
void * | p_bio, | ||
int(*)(void *, const unsigned char *, size_t) | f_send, | ||
int(*)(void *, unsigned char *, size_t) | f_recv, | ||
int(*)(void *, unsigned char *, size_t, uint32_t) | f_recv_timeout | ||
) |
Set the underlying BIO callbacks for write, read and read-with-timeout.
- Parameters:
-
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. The last argument is the timeout in milliseconds, 0 means no timeout (block forever until a message comes)
- Note:
- One of f_recv or f_recv_timeout can be NULL, in which case the other is used. If both are non-NULL, f_recv_timeout is used and f_recv is ignored (as if it were NULL).
-
The two most common use cases are:
- non-blocking I/O, f_recv != NULL, f_recv_timeout == NULL
- blocking I/O, f_recv == NULL, f_recv_timout != NULL
- For DTLS, you need to provide either a non-NULL f_recv_timeout callback, or a f_recv that doesn't block.
int mbedtls_ssl_set_client_transport_id | ( | mbedtls_ssl_context * | ssl, |
const unsigned char * | info, | ||
size_t | ilen | ||
) |
Set client's transport-level identification info.
(Server only. DTLS only.)
This is usually the IP address (and port), but could be anything identify the client depending on the underlying network stack. Used for HelloVerifyRequest with DTLS. This is *not* used to route the actual packets.
- Parameters:
-
ssl SSL context info Transport-level info identifying the client (eg IP + port) ilen Length of info in bytes
- Note:
- An internal copy is made, so the info buffer can be reused.
- Returns:
- 0 on success, MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used on client, MBEDTLS_ERR_SSL_ALLOC_FAILED if out of memory.
int mbedtls_ssl_set_hostname | ( | mbedtls_ssl_context * | ssl, |
const char * | hostname | ||
) |
void mbedtls_ssl_set_hs_authmode | ( | mbedtls_ssl_context * | ssl, |
int | authmode | ||
) |
Set authmode for the current handshake.
- Note:
- Same as
mbedtls_ssl_conf_authmode()
but for use within the SNI callback.
- Parameters:
-
ssl SSL context authmode MBEDTLS_SSL_VERIFY_NONE, MBEDTLS_SSL_VERIFY_OPTIONAL or MBEDTLS_SSL_VERIFY_REQUIRED
void mbedtls_ssl_set_hs_ca_chain | ( | mbedtls_ssl_context * | ssl, |
mbedtls_x509_crt * | ca_chain, | ||
mbedtls_x509_crl * | ca_crl | ||
) |
Set the data required to verify peer certificate for the current handshake.
- Note:
- Same as
mbedtls_ssl_conf_ca_chain()
but for use within the SNI callback.
- Parameters:
-
ssl SSL context ca_chain trusted CA chain (meaning all fully trusted top-level CAs) ca_crl trusted CA CRLs
int mbedtls_ssl_set_hs_ecjpake_password | ( | mbedtls_ssl_context * | ssl, |
const unsigned char * | pw, | ||
size_t | pw_len | ||
) |
Set the EC J-PAKE password for current handshake.
- Note:
- An internal copy is made, and destroyed as soon as the handshake is completed, or when the SSL context is reset or freed.
-
The SSL context needs to be already set up. The right place to call this function is between
mbedtls_ssl_setup()
ormbedtls_ssl_reset()
andmbedtls_ssl_handshake()
.
- Parameters:
-
ssl SSL context pw EC J-PAKE password (pre-shared secret) pw_len length of pw in bytes
- Returns:
- 0 on success, or a negative error code.
int mbedtls_ssl_set_hs_own_cert | ( | mbedtls_ssl_context * | ssl, |
mbedtls_x509_crt * | own_cert, | ||
mbedtls_pk_context * | pk_key | ||
) |
Set own certificate and key for the current handshake.
- Note:
- Same as
mbedtls_ssl_conf_own_cert()
but for use within the SNI callback.
- Parameters:
-
ssl SSL context own_cert own public certificate chain pk_key own private key
- Returns:
- 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED
int mbedtls_ssl_set_hs_psk | ( | mbedtls_ssl_context * | ssl, |
const unsigned char * | psk, | ||
size_t | psk_len | ||
) |
Set the Pre Shared Key (PSK) for the current handshake.
- Note:
- This should only be called inside the PSK callback, ie the function passed to
mbedtls_ssl_conf_psk_cb()
.
- Parameters:
-
ssl SSL context psk pointer to the pre-shared key psk_len pre-shared key length
- Returns:
- 0 if successful or MBEDTLS_ERR_SSL_ALLOC_FAILED
int mbedtls_ssl_set_session | ( | mbedtls_ssl_context * | ssl, |
const mbedtls_ssl_session * | session | ||
) |
Request resumption of session (client-side only) Session data is copied from presented session structure.
- Parameters:
-
ssl SSL context session session context
- Returns:
- 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or arguments are otherwise invalid
- See also:
- mbedtls_ssl_get_session()
void mbedtls_ssl_set_timer_cb | ( | mbedtls_ssl_context * | ssl, |
void * | p_timer, | ||
void(*)(void *, uint32_t int_ms, uint32_t fin_ms) | f_set_timer, | ||
int(*)(void *) | f_get_timer | ||
) |
Set the timer callbacks (Mandatory for DTLS.)
- Parameters:
-
ssl SSL context p_timer parameter (context) shared by timer callback f_set_timer set timer callback Accepts an intermediate and a final delay in milliseconcs If the final delay is 0, cancels the running timer. f_get_timer get timer callback. Must return: -1 if cancelled 0 if none of the delays is expired 1 if the intermediate delay only is expired 2 if the final delay is expired
int mbedtls_ssl_setup | ( | mbedtls_ssl_context * | ssl, |
const mbedtls_ssl_config * | conf | ||
) |
Set up an SSL context for use.
- Note:
- No copy of the configuration context is made, it can be shared by many mbedtls_ssl_context structures.
- Warning:
- Modifying the conf structure after is has been used in this function is unsupported!
- Parameters:
-
ssl SSL context conf SSL configuration to use
- Returns:
- 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed
int mbedtls_ssl_write | ( | mbedtls_ssl_context * | ssl, |
const unsigned char * | buf, | ||
size_t | len | ||
) |
Try to write exactly 'len' application data bytes.
- Warning:
- This function will do partial writes in some cases. If the return value is non-negative but less than length, the function must be called again with updated arguments: buf + ret, len - ret (if ret is the return value) until it returns a value equal to the last 'len' argument.
- Parameters:
-
ssl SSL context buf buffer holding the data len how many bytes must be written
- Returns:
- the number of bytes actually written (may be less than len), or MBEDTLS_ERR_SSL_WANT_WRITE of MBEDTLS_ERR_SSL_WANT_READ, or another negative error code.
- Note:
- When this function returns MBEDTLS_ERR_SSL_WANT_WRITE/READ, it must be called later with the *same* arguments, until it returns a positive value.
-
If the requested length is greater than the maximum fragment length (either the built-in limit or the one set or negotiated with the peer), then:
- with TLS, less bytes than requested are written.
- with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned.
mbedtls_ssl_get_max_frag_len()
may be used to query the active maximum fragment length.
Generated on Tue Jul 12 2022 12:52:53 by 1.7.2