Skip to content

Commit 2b9eb0b

Browse files
committed
Merge remote-tracking branch 'tls/development' into development
* origin/development: (113 commits) Update query_config.c Fix failure in SSLv3 per-version suites test Adjust DES exclude lists in test scripts Clarify 3DES changes in ChangeLog Fix documentation for 3DES removal Exclude 3DES tests in test scripts Fix wording of ChangeLog and 3DES_REMOVE docs Reduce priority of 3DES ciphersuites Fix unused variable warning in ssl_parse_certificate_coordinate() Update the crypto submodule to a78c958 Fix ChangeLog entry to correct release version Fix typo in x509write test data Add ChangeLog entry for unused bits in bitstrings Improve docs for named bitstrings and their usage Add tests for (named) bitstring to suite_asn1write Add new function mbedtls_asn1_write_named_bitstring() Add missing compile time guard in ssl_client2 Update programs/ssl/query_config.c ssl_client2: Reset peer CRT info string on reconnect Add further debug statements on assertion failures ...
2 parents 03a6030 + a96f4fe commit 2b9eb0b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1424
-713
lines changed

ChangeLog

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,22 @@ Features
77
which allows copy-less parsing of DER encoded X.509 CRTs,
88
at the cost of additional lifetime constraints on the input
99
buffer, but at the benefit of reduced RAM consumption.
10+
* Add a new function mbedtls_asn1_write_named_bitstring() to write ASN.1
11+
named bitstring in DER as required by RFC 5280 Appendix B.
12+
* Add MBEDTLS_REMOVE_3DES_CIPHERSUITES to allow removing 3DES ciphersuites
13+
from the default list (enabled by default). See
14+
https://sweet32.info/SWEET32_CCS16.pdf.
1015

1116
API Changes
1217
* Add a new X.509 API call `mbedtls_x509_parse_der_nocopy()`.
1318
See the Features section for more information.
19+
* Allow to opt in to the removal the API mbedtls_ssl_get_peer_cert()
20+
for the benefit of saving RAM, by disabling the new compile-time
21+
option MBEDTLS_SSL_KEEP_PEER_CERTIFICATE (enabled by default for
22+
API stability). Disabling this option makes mbedtls_ssl_get_peer_cert()
23+
always return NULL, and removes the peer_cert field from the
24+
mbedtls_ssl_session structure which otherwise stores the peer's
25+
certificate.
1426

1527
Bugfix
1628
* Fix a compilation issue with mbedtls_ecp_restart_ctx not being defined
@@ -31,6 +43,15 @@ Bugfix
3143
Fixes #2190.
3244
* Fix false failure in all.sh when backup files exist in include/mbedtls
3345
(e.g. config.h.bak). Fixed by Peter Kolbus (Garmin) #2407.
46+
* Ensure that unused bits are zero when writing ASN.1 bitstrings when using
47+
mbedtls_asn1_write_bitstring().
48+
* Fix issue when writing the named bitstrings in KeyUsage and NsCertType
49+
extensions in CSRs and CRTs that caused these bitstrings to not be encoded
50+
correctly as trailing zeroes were not accounted for as unused bits in the
51+
leading content octet. Fixes #1610.
52+
* Fix private key DER output in the key_app_writer example. File contents
53+
were shifted by one byte, creating an invalid ASN.1 tag. Fixed by
54+
Christian Walther in #2239.
3455

3556
Changes
3657
* Reduce RAM consumption during session renegotiation by not storing
@@ -53,16 +74,23 @@ Changes
5374
underlying OS actually guarantees.
5475
* Fix configuration queries in ssl-opt.h. #2030
5576
* Ensure that ssl-opt.h can be run in OS X. #2029
56-
* Ensure that unused bits are zero when writing ASN.1 bitstrings when using
57-
mbedtls_asn1_write_bitstring().
58-
* Fix issue when writing the named bitstrings in KeyUsage and NsCertType
59-
extensions in CSRs and CRTs that caused these bitstrings to not be encoded
60-
correctly as trailing zeroes were not accounted for as unused bits in the
61-
leading content octet. Fixes #1610.
62-
63-
Features
64-
* Add a new function mbedtls_asn1_write_named_bitstring() to write ASN.1
65-
named bitstring in DER as required by RFC 5280 Appendix B.
77+
* Re-enable certain interoperability tests in ssl-opt.sh which had previously
78+
been disabled for lack of a sufficiently recent version of GnuTLS on the CI.
79+
* Ciphersuites based on 3DES now have the lowest priority by default when
80+
they are enabled.
81+
* Server's RSA certificate in certs.c was SHA-1 signed. In the default
82+
mbedTLS configuration only SHA-2 signed certificates are accepted.
83+
This certificate is used in the demo server programs, which lead the
84+
client programs to fail at the peer's certificate verification
85+
due to an unacceptable hash signature. The certificate has been
86+
updated to one that is SHA-256 signed. Fix contributed by
87+
Illya Gerasymchuk.
88+
* Return from various debugging routines immediately if the
89+
provided SSL context is unset.
90+
* Remove dead code from bignum.c in the default configuration.
91+
Found by Coverity, reported and fixed by Peter Kolbus (Garmin). Fixes #2309.
92+
* Add test for minimal value of MBEDTLS_MPI_WINDOW_SIZE to all.sh.
93+
Contributed by Peter Kolbus (Garmin).
6694

6795
= mbed TLS 2.16.0 branch released 2018-12-21
6896

doxygen/input/doc_mainpage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525

2626
/**
27-
* @mainpage mbed TLS v2.16.0 source code documentation
27+
* @mainpage mbed TLS v0.0.0 source code documentation
2828
*
2929
* This documentation describes the internal structure of mbed TLS. It was
3030
* automatically generated from specially formatted comment blocks in

doxygen/mbedtls.doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ DOXYFILE_ENCODING = UTF-8
2828
# identify the project. Note that if you do not use Doxywizard you need
2929
# to put quotes around the project name if it contains spaces.
3030

31-
PROJECT_NAME = "mbed TLS v2.16.0"
31+
PROJECT_NAME = "mbed TLS v0.0.0"
3232

3333
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
3434
# This could be handy for archiving the generated documentation or

include/mbedtls/check_config.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,14 @@
280280
#error "MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED defined, but not all prerequisites"
281281
#endif
282282

283+
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) && \
284+
!defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) && \
285+
( !defined(MBEDTLS_SHA256_C) && \
286+
!defined(MBEDTLS_SHA512_C) && \
287+
!defined(MBEDTLS_SHA1_C) )
288+
#error "!MBEDTLS_SSL_KEEP_PEER_CERTIFICATE requires MBEDTLS_SHA512_C, MBEDTLS_SHA256_C or MBEDTLS_SHA1_C"
289+
#endif
290+
283291
#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && \
284292
( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) )
285293
#error "MBEDTLS_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites"

include/mbedtls/config.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,26 @@
687687
*/
688688
#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES
689689

690+
/**
691+
* \def MBEDTLS_REMOVE_3DES_CIPHERSUITES
692+
*
693+
* Remove 3DES ciphersuites by default in SSL / TLS.
694+
* This flag removes the ciphersuites based on 3DES from the default list as
695+
* returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible
696+
* to enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including
697+
* them explicitly.
698+
*
699+
* A man-in-the-browser attacker can recover authentication tokens sent through
700+
* a TLS connection using a 3DES based cipher suite (see "On the Practical
701+
* (In-)Security of 64-bit Block Ciphers" by Karthikeyan Bhargavan and Gaëtan
702+
* Leurent, see https://sweet32.info/SWEET32_CCS16.pdf). If this attack falls
703+
* in your threat model or you are unsure, then you should keep this option
704+
* enabled to remove 3DES based cipher suites.
705+
*
706+
* Comment this macro to keep 3DES in the default ciphersuite list.
707+
*/
708+
#define MBEDTLS_REMOVE_3DES_CIPHERSUITES
709+
690710
/**
691711
* \def MBEDTLS_ECP_DP_SECP192R1_ENABLED
692712
*
@@ -1379,6 +1399,28 @@
13791399
*/
13801400
#define MBEDTLS_SSL_FALLBACK_SCSV
13811401

1402+
/**
1403+
* \def MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
1404+
*
1405+
* This option controls the availability of the API mbedtls_ssl_get_peer_cert()
1406+
* giving access to the peer's certificate after completion of the handshake.
1407+
*
1408+
* Unless you need mbedtls_ssl_peer_cert() in your application, it is
1409+
* recommended to disable this option for reduced RAM usage.
1410+
*
1411+
* \note If this option is disabled, mbedtls_ssl_get_peer_cert() is still
1412+
* defined, but always returns \c NULL.
1413+
*
1414+
* \note This option has no influence on the protection against the
1415+
* triple handshake attack. Even if it is disabled, Mbed TLS will
1416+
* still ensure that certificates do not change during renegotiation,
1417+
* for exaple by keeping a hash of the peer's certificate.
1418+
*
1419+
* Comment this macro to disable storing the peer's certificate
1420+
* after the handshake.
1421+
*/
1422+
#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
1423+
13821424
/**
13831425
* \def MBEDTLS_SSL_HW_RECORD_ACCEL
13841426
*

include/mbedtls/oid.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,31 @@
4343
#include "md.h"
4444
#endif
4545

46-
#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C)
47-
#include "x509.h"
48-
#endif
49-
5046
#define MBEDTLS_ERR_OID_NOT_FOUND -0x002E /**< OID is not found. */
5147
#define MBEDTLS_ERR_OID_BUF_TOO_SMALL -0x000B /**< output buffer is too small */
5248

49+
/* This is for the benefit of X.509, but defined here in order to avoid
50+
* having a "backwards" include of x.509.h here */
51+
/*
52+
* X.509 extension types (internal, arbitrary values for bitsets)
53+
*/
54+
#define MBEDTLS_OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER (1 << 0)
55+
#define MBEDTLS_OID_X509_EXT_SUBJECT_KEY_IDENTIFIER (1 << 1)
56+
#define MBEDTLS_OID_X509_EXT_KEY_USAGE (1 << 2)
57+
#define MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES (1 << 3)
58+
#define MBEDTLS_OID_X509_EXT_POLICY_MAPPINGS (1 << 4)
59+
#define MBEDTLS_OID_X509_EXT_SUBJECT_ALT_NAME (1 << 5)
60+
#define MBEDTLS_OID_X509_EXT_ISSUER_ALT_NAME (1 << 6)
61+
#define MBEDTLS_OID_X509_EXT_SUBJECT_DIRECTORY_ATTRS (1 << 7)
62+
#define MBEDTLS_OID_X509_EXT_BASIC_CONSTRAINTS (1 << 8)
63+
#define MBEDTLS_OID_X509_EXT_NAME_CONSTRAINTS (1 << 9)
64+
#define MBEDTLS_OID_X509_EXT_POLICY_CONSTRAINTS (1 << 10)
65+
#define MBEDTLS_OID_X509_EXT_EXTENDED_KEY_USAGE (1 << 11)
66+
#define MBEDTLS_OID_X509_EXT_CRL_DISTRIBUTION_POINTS (1 << 12)
67+
#define MBEDTLS_OID_X509_EXT_INIHIBIT_ANYPOLICY (1 << 13)
68+
#define MBEDTLS_OID_X509_EXT_FRESHEST_CRL (1 << 14)
69+
#define MBEDTLS_OID_X509_EXT_NS_CERT_TYPE (1 << 16)
70+
5371
/*
5472
* Top level OID tuples
5573
*/
@@ -424,7 +442,6 @@ typedef struct mbedtls_oid_descriptor_t
424442
*/
425443
int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_buf *oid );
426444

427-
#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C)
428445
/**
429446
* \brief Translate an X.509 extension OID into local values
430447
*
@@ -434,7 +451,6 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, const mbedtls_asn1_b
434451
* \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND
435452
*/
436453
int mbedtls_oid_get_x509_ext_type( const mbedtls_asn1_buf *oid, int *ext_type );
437-
#endif
438454

439455
/**
440456
* \brief Translate an X.509 attribute type OID into the short name

include/mbedtls/ssl.h

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,25 @@ typedef int mbedtls_ssl_async_resume_t( mbedtls_ssl_context *ssl,
787787
typedef void mbedtls_ssl_async_cancel_t( mbedtls_ssl_context *ssl );
788788
#endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
789789

790+
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) && \
791+
!defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
792+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN 48
793+
#if defined(MBEDTLS_SHA256_C)
794+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA256
795+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 32
796+
#elif defined(MBEDTLS_SHA512_C)
797+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA384
798+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 48
799+
#elif defined(MBEDTLS_SHA1_C)
800+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA1
801+
#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 20
802+
#else
803+
/* This is already checked in check_config.h, but be sure. */
804+
#error "Bad configuration - need SHA-1, SHA-256 or SHA-512 enabled to compute digest of peer CRT."
805+
#endif
806+
#endif /* MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED &&
807+
!MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
808+
790809
/*
791810
* This structure is used for storing current session data.
792811
*/
@@ -802,7 +821,15 @@ struct mbedtls_ssl_session
802821
unsigned char master[48]; /*!< the master secret */
803822

804823
#if defined(MBEDTLS_X509_CRT_PARSE_C)
805-
mbedtls_x509_crt *peer_cert; /*!< peer X.509 cert chain */
824+
#if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
825+
mbedtls_x509_crt *peer_cert; /*!< peer X.509 cert chain */
826+
#else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
827+
/*! The digest of the peer's end-CRT. This must be kept to detect CRT
828+
* changes during renegotiation, mitigating the triple handshake attack. */
829+
unsigned char *peer_cert_digest;
830+
size_t peer_cert_digest_len;
831+
mbedtls_md_type_t peer_cert_digest_type;
832+
#endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
806833
#endif /* MBEDTLS_X509_CRT_PARSE_C */
807834
uint32_t verify_result; /*!< verification result */
808835

@@ -2972,18 +2999,34 @@ int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl );
29722999

29733000
#if defined(MBEDTLS_X509_CRT_PARSE_C)
29743001
/**
2975-
* \brief Return the peer certificate from the current connection
2976-
*
2977-
* Note: Can be NULL in case no certificate was sent during
2978-
* the handshake. Different calls for the same connection can
2979-
* return the same or different pointers for the same
2980-
* certificate and even a different certificate altogether.
2981-
* The peer cert CAN change in a single connection if
2982-
* renegotiation is performed.
2983-
*
2984-
* \param ssl SSL context
2985-
*
2986-
* \return the current peer certificate
3002+
* \brief Return the peer certificate from the current connection.
3003+
*
3004+
* \param ssl The SSL context to use. This must be initialized and setup.
3005+
*
3006+
* \return The current peer certificate, if available.
3007+
* The returned certificate is owned by the SSL context and
3008+
* is valid only until the next call to the SSL API.
3009+
* \return \c NULL if no peer certificate is available. This might
3010+
* be because the chosen ciphersuite doesn't use CRTs
3011+
* (PSK-based ciphersuites, for example), or because
3012+
* #MBEDTLS_SSL_KEEP_PEER_CERTIFICATE has been disabled,
3013+
* allowing the stack to free the peer's CRT to save memory.
3014+
*
3015+
* \note For one-time inspection of the peer's certificate during
3016+
* the handshake, consider registering an X.509 CRT verification
3017+
* callback through mbedtls_ssl_conf_verify() instead of calling
3018+
* this function. Using mbedtls_ssl_conf_verify() also comes at
3019+
* the benefit of allowing you to influence the verification
3020+
* process, for example by masking expected and tolerated
3021+
* verification failures.
3022+
*
3023+
* \warning You must not use the pointer returned by this function
3024+
* after any further call to the SSL API, including
3025+
* mbedtls_ssl_read() and mbedtls_ssl_write(); this is
3026+
* because the pointer might change during renegotiation,
3027+
* which happens transparently to the user.
3028+
* If you want to use the certificate across API calls,
3029+
* you must make a copy.
29873030
*/
29883031
const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl );
29893032
#endif /* MBEDTLS_X509_CRT_PARSE_C */

include/mbedtls/ssl_cache.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ struct mbedtls_ssl_cache_entry
7070
mbedtls_time_t timestamp; /*!< entry timestamp */
7171
#endif
7272
mbedtls_ssl_session session; /*!< entry session */
73-
#if defined(MBEDTLS_X509_CRT_PARSE_C)
73+
#if defined(MBEDTLS_X509_CRT_PARSE_C) && \
74+
defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
7475
mbedtls_x509_buf peer_cert; /*!< entry peer_cert */
7576
#endif
7677
mbedtls_ssl_cache_entry *next; /*!< chain pointer */

include/mbedtls/ssl_ciphersuites.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,24 @@ static inline int mbedtls_ssl_ciphersuite_cert_req_allowed( const mbedtls_ssl_ci
486486
}
487487
}
488488

489+
static inline int mbedtls_ssl_ciphersuite_uses_srv_cert( const mbedtls_ssl_ciphersuite_t *info )
490+
{
491+
switch( info->key_exchange )
492+
{
493+
case MBEDTLS_KEY_EXCHANGE_RSA:
494+
case MBEDTLS_KEY_EXCHANGE_RSA_PSK:
495+
case MBEDTLS_KEY_EXCHANGE_DHE_RSA:
496+
case MBEDTLS_KEY_EXCHANGE_ECDH_RSA:
497+
case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA:
498+
case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA:
499+
case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA:
500+
return( 1 );
501+
502+
default:
503+
return( 0 );
504+
}
505+
}
506+
489507
#if defined(MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED)
490508
static inline int mbedtls_ssl_ciphersuite_uses_dhe( const mbedtls_ssl_ciphersuite_t *info )
491509
{

include/mbedtls/ssl_internal.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,13 @@ struct mbedtls_ssl_handshake_params
331331
ssl_ecrs_cke_ecdh_calc_secret, /*!< ClientKeyExchange: ECDH step 2 */
332332
ssl_ecrs_crt_vrfy_sign, /*!< CertificateVerify: pk_sign() */
333333
} ecrs_state; /*!< current (or last) operation */
334+
mbedtls_x509_crt *ecrs_peer_cert; /*!< The peer's CRT chain. */
334335
size_t ecrs_n; /*!< place for saving a length */
335336
#endif
337+
#if defined(MBEDTLS_X509_CRT_PARSE_C) && \
338+
!defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE)
339+
mbedtls_pk_context peer_pubkey; /*!< The public key from the peer. */
340+
#endif /* MBEDTLS_X509_CRT_PARSE_C && !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
336341
#if defined(MBEDTLS_SSL_PROTO_DTLS)
337342
unsigned int out_msg_seq; /*!< Outgoing handshake sequence number */
338343
unsigned int in_msg_seq; /*!< Incoming handshake sequence number */
@@ -766,6 +771,9 @@ int mbedtls_ssl_dtls_replay_check( mbedtls_ssl_context *ssl );
766771
void mbedtls_ssl_dtls_replay_update( mbedtls_ssl_context *ssl );
767772
#endif
768773

774+
int mbedtls_ssl_session_copy( mbedtls_ssl_session *dst,
775+
const mbedtls_ssl_session *src );
776+
769777
/* constant-time buffer comparison */
770778
static inline int mbedtls_ssl_safer_memcmp( const void *a, const void *b, size_t n )
771779
{

include/mbedtls/version.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,18 @@
3838
* The version number x.y.z is split into three parts.
3939
* Major, Minor, Patchlevel
4040
*/
41-
#define MBEDTLS_VERSION_MAJOR 2
42-
#define MBEDTLS_VERSION_MINOR 16
41+
#define MBEDTLS_VERSION_MAJOR 0
42+
#define MBEDTLS_VERSION_MINOR 0
4343
#define MBEDTLS_VERSION_PATCH 0
4444

4545
/**
4646
* The single version number has the following structure:
4747
* MMNNPP00
4848
* Major version | Minor version | Patch version
4949
*/
50-
#define MBEDTLS_VERSION_NUMBER 0x02100000
51-
#define MBEDTLS_VERSION_STRING "2.16.0"
52-
#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 2.16.0"
50+
#define MBEDTLS_VERSION_NUMBER 0x00000000
51+
#define MBEDTLS_VERSION_STRING "0.0.0"
52+
#define MBEDTLS_VERSION_STRING_FULL "mbed TLS 0.0.0"
5353

5454
#if defined(MBEDTLS_VERSION_C)
5555

0 commit comments

Comments
 (0)