mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 13:01:10 +02:00
This commit enables support for DTLS, i.e. TLS over datagram transport protocols like UDP. While support for DTLS is absent in CPython, it is worth supporting it in MicroPython because it is the basis of the ubiquitous CoAP protocol, used in many IoT projects. To select DTLS, a new set of "protocols" are added to SSLContext: - ssl.PROTOCOL_DTLS_CLIENT - ssl.PROTOCOL_DTLS_SERVER If one of these is set, the library assumes that the underlying socket is a datagram-like socket (i.e. UDP or similar). Our own timer callbacks are implemented because the out of the box implementation relies on `gettimeofday()`. This new DTLS feature is enabled on all ports that use mbedTLS. This commit is an update to a previous PR #10062. Addresses issue #5270 which requested DTLS support. Signed-off-by: Keenan Johnson <keenan.johnson@gmail.com>
119 lines
4.0 KiB
C
119 lines
4.0 KiB
C
/*
|
|
* This file is part of the MicroPython project, http://micropython.org/
|
|
*
|
|
* The MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2018-2022 Damien P. George
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
#ifndef MICROPY_INCLUDED_MBEDTLS_CONFIG_COMMON_H
|
|
#define MICROPY_INCLUDED_MBEDTLS_CONFIG_COMMON_H
|
|
|
|
// If you want to debug MBEDTLS uncomment the following and
|
|
// pass "3" to mbedtls_debug_set_threshold in socket_new.
|
|
// #define MBEDTLS_DEBUG_C
|
|
|
|
// Set mbedtls configuration.
|
|
#define MBEDTLS_HAVE_TIME
|
|
#define MBEDTLS_HAVE_TIME_DATE
|
|
#define MBEDTLS_DEPRECATED_REMOVED
|
|
#define MBEDTLS_AES_ROM_TABLES
|
|
#define MBEDTLS_CIPHER_MODE_CBC
|
|
#define MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP224R1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP192K1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP224K1_ENABLED
|
|
#define MBEDTLS_ECP_DP_SECP256K1_ENABLED
|
|
#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
|
|
#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED
|
|
#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED
|
|
#define MBEDTLS_CAN_ECDH
|
|
#define MBEDTLS_PK_CAN_ECDSA_SIGN
|
|
#define MBEDTLS_PKCS1_V15
|
|
#define MBEDTLS_SHA256_SMALLER
|
|
#define MBEDTLS_SSL_PROTO_TLS1
|
|
#define MBEDTLS_SSL_PROTO_TLS1_1
|
|
#define MBEDTLS_SSL_PROTO_TLS1_2
|
|
#define MBEDTLS_SSL_SERVER_NAME_INDICATION
|
|
|
|
// Use a smaller output buffer to reduce size of SSL context.
|
|
#define MBEDTLS_SSL_MAX_CONTENT_LEN (16384)
|
|
#define MBEDTLS_SSL_IN_CONTENT_LEN (MBEDTLS_SSL_MAX_CONTENT_LEN)
|
|
#define MBEDTLS_SSL_OUT_CONTENT_LEN (4096)
|
|
|
|
// Enable mbedtls modules.
|
|
#define MBEDTLS_AES_C
|
|
#define MBEDTLS_ASN1_PARSE_C
|
|
#define MBEDTLS_ASN1_WRITE_C
|
|
#define MBEDTLS_BIGNUM_C
|
|
#define MBEDTLS_CIPHER_C
|
|
#define MBEDTLS_CTR_DRBG_C
|
|
#define MBEDTLS_ECDH_C
|
|
#define MBEDTLS_ECDSA_C
|
|
#define MBEDTLS_ECP_C
|
|
#define MBEDTLS_ENTROPY_C
|
|
#define MBEDTLS_ERROR_C
|
|
#define MBEDTLS_GCM_C
|
|
#define MBEDTLS_MD_C
|
|
#define MBEDTLS_MD5_C
|
|
#define MBEDTLS_OID_C
|
|
#define MBEDTLS_PKCS5_C
|
|
#define MBEDTLS_PK_C
|
|
#define MBEDTLS_PK_HAVE_ECC_KEYS
|
|
#define MBEDTLS_PK_PARSE_C
|
|
#define MBEDTLS_PLATFORM_C
|
|
#define MBEDTLS_RSA_C
|
|
#define MBEDTLS_SHA1_C
|
|
#define MBEDTLS_SHA224_C
|
|
#define MBEDTLS_SHA256_C
|
|
#define MBEDTLS_SHA384_C
|
|
#define MBEDTLS_SHA512_C
|
|
#define MBEDTLS_SSL_CLI_C
|
|
#define MBEDTLS_SSL_PROTO_DTLS
|
|
#define MBEDTLS_SSL_SRV_C
|
|
#define MBEDTLS_SSL_TLS_C
|
|
#define MBEDTLS_X509_CRT_PARSE_C
|
|
#define MBEDTLS_X509_USE_C
|
|
|
|
// A port may enable this option to select additional bare-metal configuration.
|
|
#if MICROPY_MBEDTLS_CONFIG_BARE_METAL
|
|
|
|
// Bare-metal mbedtls configuration.
|
|
#define MBEDTLS_PLATFORM_MEMORY
|
|
#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS
|
|
#define MBEDTLS_ENTROPY_HARDWARE_ALT
|
|
#define MBEDTLS_NO_PLATFORM_ENTROPY
|
|
|
|
// Bare-metal memory allocation hooks.
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
void *m_tracked_calloc(size_t nmemb, size_t size);
|
|
void m_tracked_free(void *ptr);
|
|
#define MBEDTLS_PLATFORM_STD_CALLOC m_tracked_calloc
|
|
#define MBEDTLS_PLATFORM_STD_FREE m_tracked_free
|
|
#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf
|
|
|
|
#endif
|
|
|
|
#endif // MICROPY_INCLUDED_MBEDTLS_CONFIG_COMMON_H
|