mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 12:11:27 -05:00 
			
		
		
		
	Merge pull request #4495 from TRodziewicz/remove_support_for_(D)TLS_1.0_and_1.1
Remove support for (d)tls 1.0 and 1.1
This commit is contained in:
		
						commit
						86d1d7487a
					
				
							
								
								
									
										11
									
								
								ChangeLog.d/issue4286.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ChangeLog.d/issue4286.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
Removals
 | 
			
		||||
   * Remove the TLS 1.0, TLS 1.1 and DTLS 1.0 support by removing the following
 | 
			
		||||
     deprecated library constants: MBEDTLS_SSL_PROTO_TLS1,
 | 
			
		||||
     MBEDTLS_SSL_PROTO_TLS1_1, MBEDTLS_SSL_CBC_RECORD_SPLITTING,
 | 
			
		||||
     MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED,
 | 
			
		||||
     MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED, MBEDTLS_SSL_RECORD_CHECKING,
 | 
			
		||||
     MBEDTLS_SSL_FALLBACK_SCSV, MBEDTLS_SSL_FALLBACK_SCSV_VALUE,
 | 
			
		||||
     MBEDTLS_SSL_IS_FALLBACK, MBEDTLS_SSL_IS_NOT_FALLBACK, and functions:
 | 
			
		||||
     mbedtls_ssl_conf_cbc_record_splitting(),
 | 
			
		||||
     mbedtls_ssl_get_key_exchange_md_ssl_tls(), mbedtls_ssl_conf_fallback().
 | 
			
		||||
     Fixes #4286.
 | 
			
		||||
@ -1,79 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * \file config-mini-tls1_1.h
 | 
			
		||||
 *
 | 
			
		||||
 * \brief Minimal configuration for TLS 1.1 (RFC 4346)
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 *  Copyright The Mbed TLS Contributors
 | 
			
		||||
 *  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.
 | 
			
		||||
 */
 | 
			
		||||
/*
 | 
			
		||||
 * Minimal configuration for TLS 1.1 (RFC 4346), implementing only the
 | 
			
		||||
 * required ciphersuite: MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA
 | 
			
		||||
 *
 | 
			
		||||
 * See README.txt for usage instructions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MBEDTLS_CONFIG_H
 | 
			
		||||
#define MBEDTLS_CONFIG_H
 | 
			
		||||
 | 
			
		||||
/* System support */
 | 
			
		||||
#define MBEDTLS_HAVE_ASM
 | 
			
		||||
#define MBEDTLS_HAVE_TIME
 | 
			
		||||
 | 
			
		||||
/* mbed TLS feature support */
 | 
			
		||||
#define MBEDTLS_CIPHER_MODE_CBC
 | 
			
		||||
#define MBEDTLS_PKCS1_V15
 | 
			
		||||
#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
 | 
			
		||||
#define MBEDTLS_SSL_PROTO_TLS1_1
 | 
			
		||||
 | 
			
		||||
/* mbed TLS 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_DES_C
 | 
			
		||||
#define MBEDTLS_ENTROPY_C
 | 
			
		||||
#define MBEDTLS_MD_C
 | 
			
		||||
#define MBEDTLS_MD5_C
 | 
			
		||||
#define MBEDTLS_NET_C
 | 
			
		||||
#define MBEDTLS_OID_C
 | 
			
		||||
#define MBEDTLS_PK_C
 | 
			
		||||
#define MBEDTLS_PK_PARSE_C
 | 
			
		||||
#define MBEDTLS_RSA_C
 | 
			
		||||
#define MBEDTLS_SHA1_C
 | 
			
		||||
/* The library does not currently support enabling SHA-224 without SHA-256.
 | 
			
		||||
 * A future version of the library will have this option disabled
 | 
			
		||||
 * by default. */
 | 
			
		||||
#define MBEDTLS_SHA224_C
 | 
			
		||||
#define MBEDTLS_SHA256_C
 | 
			
		||||
#define MBEDTLS_SSL_CLI_C
 | 
			
		||||
#define MBEDTLS_SSL_SRV_C
 | 
			
		||||
#define MBEDTLS_SSL_TLS_C
 | 
			
		||||
#define MBEDTLS_X509_CRT_PARSE_C
 | 
			
		||||
#define MBEDTLS_X509_USE_C
 | 
			
		||||
 | 
			
		||||
/* For test certificates */
 | 
			
		||||
#define MBEDTLS_BASE64_C
 | 
			
		||||
#define MBEDTLS_PEM_PARSE_C
 | 
			
		||||
 | 
			
		||||
/* For testing with compat.sh */
 | 
			
		||||
#define MBEDTLS_FS_IO
 | 
			
		||||
 | 
			
		||||
#include "mbedtls/check_config.h"
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_CONFIG_H */
 | 
			
		||||
@ -0,0 +1,11 @@
 | 
			
		||||
Remove suport for TLS 1.0, 1.1 and DTLS 1.0
 | 
			
		||||
-------------------------------------------
 | 
			
		||||
 | 
			
		||||
This change affects users of the TLS 1.0, 1.1 and DTLS 1.0 protocols.
 | 
			
		||||
 | 
			
		||||
The versions of (D)TLS that are being removed are not as secure as the latest
 | 
			
		||||
versions. Keeping them in the library creates opportunities for misconfiguration
 | 
			
		||||
and possibly downgrade attacks. More generally, more code means a larger attack
 | 
			
		||||
surface, even if the code is supposedly not used.
 | 
			
		||||
 | 
			
		||||
The migration path is to adopt the latest versions of the protocol.
 | 
			
		||||
@ -621,16 +621,6 @@
 | 
			
		||||
#error "MBEDTLS_SHA256_C defined without MBEDTLS_SHA224_C"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) && ( !defined(MBEDTLS_MD5_C) ||     \
 | 
			
		||||
    !defined(MBEDTLS_SHA1_C) )
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1 defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) && ( !defined(MBEDTLS_MD5_C) ||     \
 | 
			
		||||
    !defined(MBEDTLS_SHA1_C) )
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1_1 defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && ( !defined(MBEDTLS_SHA1_C) &&     \
 | 
			
		||||
    !defined(MBEDTLS_SHA256_C) && !defined(MBEDTLS_SHA512_C) )
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1_2 defined, but not all prerequisites"
 | 
			
		||||
@ -641,8 +631,7 @@
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) ||\
 | 
			
		||||
     defined(MBEDTLS_SSL_PROTO_TLS1_2)) &&                                  \
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2) &&                                    \
 | 
			
		||||
    !(defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) ||                          \
 | 
			
		||||
      defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) ||                      \
 | 
			
		||||
      defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) ||                    \
 | 
			
		||||
@ -659,7 +648,6 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)     && \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_1)  && \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_DTLS defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
@ -677,16 +665,10 @@
 | 
			
		||||
#error "MBEDTLS_SSL_SRV_C defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_TLS_C) && (!defined(MBEDTLS_SSL_PROTO_TLS1) && \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_1) && !defined(MBEDTLS_SSL_PROTO_TLS1_2))
 | 
			
		||||
#if defined(MBEDTLS_SSL_TLS_C) && !defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#error "MBEDTLS_SSL_TLS_C defined, but no protocols are active"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_TLS_C) && (defined(MBEDTLS_SSL_PROTO_TLS1) && \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2) && !defined(MBEDTLS_SSL_PROTO_TLS1_1))
 | 
			
		||||
#error "Illegal protocol selection"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && !defined(MBEDTLS_SSL_PROTO_DTLS)
 | 
			
		||||
#error "MBEDTLS_SSL_DTLS_HELLO_VERIFY  defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
@ -724,15 +706,11 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) &&   \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1)   &&      \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_1) &&      \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#error "MBEDTLS_SSL_ENCRYPT_THEN_MAC defined, but not all prerequsites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) && \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1)   &&          \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_1) &&          \
 | 
			
		||||
    !defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#error "MBEDTLS_SSL_EXTENDED_MASTER_SECRET defined, but not all prerequsites"
 | 
			
		||||
#endif
 | 
			
		||||
@ -741,10 +719,6 @@
 | 
			
		||||
#error "MBEDTLS_SSL_TICKET_C defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) && !defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
#error "MBEDTLS_SSL_CBC_RECORD_SPLITTING defined, but not all prerequisites"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) && \
 | 
			
		||||
        !defined(MBEDTLS_X509_CRT_PARSE_C)
 | 
			
		||||
#error "MBEDTLS_SSL_SERVER_NAME_INDICATION defined, but not all prerequisites"
 | 
			
		||||
@ -859,6 +833,13 @@
 | 
			
		||||
#error "MBEDTLS_ZLIB_SUPPORT was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4031"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) //no-check-names
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1 (TLS v1.0 support) was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4286"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) //no-check-names
 | 
			
		||||
#error "MBEDTLS_SSL_PROTO_TLS1_1 (TLS v1.1 support) was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4286"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Avoid warning from -pedantic. This is a convenient place for this
 | 
			
		||||
 | 
			
		||||
@ -1530,9 +1530,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 * This only affects CBC ciphersuites, and is useless if none is defined.
 | 
			
		||||
 *
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1    or
 | 
			
		||||
 *           MBEDTLS_SSL_PROTO_TLS1_1  or
 | 
			
		||||
 *           MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for Encrypt-then-MAC
 | 
			
		||||
 */
 | 
			
		||||
@ -1548,32 +1546,12 @@
 | 
			
		||||
 * renegotiation), since it actually fixes a more fundamental issue in the
 | 
			
		||||
 * original SSL/TLS design, and has implications beyond Triple Handshake.
 | 
			
		||||
 *
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1    or
 | 
			
		||||
 *           MBEDTLS_SSL_PROTO_TLS1_1  or
 | 
			
		||||
 *           MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for Extended Master Secret.
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_EXTENDED_MASTER_SECRET
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_FALLBACK_SCSV
 | 
			
		||||
 *
 | 
			
		||||
 * Enable support for RFC 7507: Fallback Signaling Cipher Suite Value (SCSV)
 | 
			
		||||
 * for Preventing Protocol Downgrade Attacks.
 | 
			
		||||
 *
 | 
			
		||||
 * For servers, it is recommended to always enable this, unless you support
 | 
			
		||||
 * only one version of TLS, or know for sure that none of your clients
 | 
			
		||||
 * implements a fallback strategy.
 | 
			
		||||
 *
 | 
			
		||||
 * For clients, you only need this if you're using a fallback strategy, which
 | 
			
		||||
 * is not recommended in the first place, unless you absolutely need it to
 | 
			
		||||
 * interoperate with buggy (version-intolerant) servers.
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for FALLBACK_SCSV
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_FALLBACK_SCSV
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
 | 
			
		||||
 *
 | 
			
		||||
@ -1596,18 +1574,6 @@
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_CBC_RECORD_SPLITTING
 | 
			
		||||
 *
 | 
			
		||||
 * Enable 1/n-1 record splitting for CBC mode in TLS 1.0.
 | 
			
		||||
 *
 | 
			
		||||
 * This is a countermeasure to the BEAST attack, which also minimizes the risk
 | 
			
		||||
 * of interoperability issues compared to sending 0-length records.
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable 1/n-1 record splitting.
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_CBC_RECORD_SPLITTING
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_RENEGOTIATION
 | 
			
		||||
 *
 | 
			
		||||
@ -1649,30 +1615,6 @@
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_PROTO_TLS1
 | 
			
		||||
 *
 | 
			
		||||
 * Enable support for TLS 1.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Requires: MBEDTLS_MD5_C
 | 
			
		||||
 *           MBEDTLS_SHA1_C
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for TLS 1.0
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_PROTO_TLS1
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_PROTO_TLS1_1
 | 
			
		||||
 *
 | 
			
		||||
 * Enable support for TLS 1.1 (and DTLS 1.0 if DTLS is enabled).
 | 
			
		||||
 *
 | 
			
		||||
 * Requires: MBEDTLS_MD5_C
 | 
			
		||||
 *           MBEDTLS_SHA1_C
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for TLS 1.1 / DTLS 1.0
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_PROTO_TLS1_1
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \def MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 *
 | 
			
		||||
@ -1709,11 +1651,9 @@
 | 
			
		||||
 *
 | 
			
		||||
 * Enable support for DTLS (all available versions).
 | 
			
		||||
 *
 | 
			
		||||
 * Enable this and MBEDTLS_SSL_PROTO_TLS1_1 to enable DTLS 1.0,
 | 
			
		||||
 * and/or this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2.
 | 
			
		||||
 * Enable this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2.
 | 
			
		||||
 *
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1_1
 | 
			
		||||
 *        or MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 * Requires: MBEDTLS_SSL_PROTO_TLS1_2
 | 
			
		||||
 *
 | 
			
		||||
 * Comment this macro to disable support for DTLS
 | 
			
		||||
 */
 | 
			
		||||
@ -2738,10 +2678,9 @@
 | 
			
		||||
 *          library/pem.c
 | 
			
		||||
 *          library/ssl_tls.c
 | 
			
		||||
 *
 | 
			
		||||
 * This module is required for SSL/TLS up to version 1.1, and for TLS 1.2
 | 
			
		||||
 * depending on the handshake parameters. Further, it is used for checking
 | 
			
		||||
 * MD5-signed certificates, and for PBKDF1 when decrypting PEM-encoded
 | 
			
		||||
 * encrypted keys.
 | 
			
		||||
 * This module is required for TLS 1.2 depending on the handshake parameters.
 | 
			
		||||
 * Further, it is used for checking MD5-signed certificates, and for PBKDF1
 | 
			
		||||
 * when decrypting PEM-encoded encrypted keys.
 | 
			
		||||
 *
 | 
			
		||||
 * \warning   MD5 is considered a weak message digest and its use constitutes a
 | 
			
		||||
 *            security risk. If possible, we recommend avoiding dependencies on
 | 
			
		||||
@ -3061,8 +3000,8 @@
 | 
			
		||||
 *          library/ssl_tls.c
 | 
			
		||||
 *          library/x509write_crt.c
 | 
			
		||||
 *
 | 
			
		||||
 * This module is required for SSL/TLS up to version 1.1, for TLS 1.2
 | 
			
		||||
 * depending on the handshake parameters, and for SHA1-signed certificates.
 | 
			
		||||
 * This module is required for TLS 1.2 depending on the handshake parameters,
 | 
			
		||||
 * and for SHA1-signed certificates.
 | 
			
		||||
 *
 | 
			
		||||
 * \warning   SHA-1 is considered a weak message digest and its use constitutes
 | 
			
		||||
 *            a security risk. If possible, we recommend avoiding dependencies
 | 
			
		||||
 | 
			
		||||
@ -131,8 +131,8 @@
 | 
			
		||||
 * - RFC 8446: see section 4.2.1
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_MAJOR_VERSION_3             3
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_1             1   /*!< TLS v1.0 */
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_2             2   /*!< TLS v1.1 */
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_1             1   /*!< TLS v1.0 deprecated */
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_2             2   /*!< TLS v1.1 deprecated */
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_3             3   /*!< TLS v1.2 */
 | 
			
		||||
#define MBEDTLS_SSL_MINOR_VERSION_4             4   /*!< TLS v1.3 (experimental) */
 | 
			
		||||
 | 
			
		||||
@ -156,9 +156,6 @@
 | 
			
		||||
#define MBEDTLS_SSL_IS_CLIENT                   0
 | 
			
		||||
#define MBEDTLS_SSL_IS_SERVER                   1
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_SSL_IS_NOT_FALLBACK             0
 | 
			
		||||
#define MBEDTLS_SSL_IS_FALLBACK                 1
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_SSL_EXTENDED_MS_DISABLED        0
 | 
			
		||||
#define MBEDTLS_SSL_EXTENDED_MS_ENABLED         1
 | 
			
		||||
 | 
			
		||||
@ -198,9 +195,6 @@
 | 
			
		||||
#define MBEDTLS_SSL_SESSION_TICKETS_DISABLED     0
 | 
			
		||||
#define MBEDTLS_SSL_SESSION_TICKETS_ENABLED      1
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED    0
 | 
			
		||||
#define MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED     1
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_SSL_PRESET_DEFAULT              0
 | 
			
		||||
#define MBEDTLS_SSL_PRESET_SUITEB               2
 | 
			
		||||
 | 
			
		||||
@ -282,7 +276,6 @@
 | 
			
		||||
 * Signaling ciphersuite values (SCSV)
 | 
			
		||||
 */
 | 
			
		||||
#define MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO    0xFF   /**< renegotiation info ext */
 | 
			
		||||
#define MBEDTLS_SSL_FALLBACK_SCSV_VALUE         0x5600 /**< RFC 7507 section 2 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Supported Signature and Hash algorithms (For TLS 1.2)
 | 
			
		||||
@ -1192,9 +1185,6 @@ struct mbedtls_ssl_config
 | 
			
		||||
#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
 | 
			
		||||
    unsigned int anti_replay : 1;   /*!< detect and prevent replay?         */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    unsigned int cbc_record_splitting : 1;  /*!< do cbc record splitting    */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_RENEGOTIATION)
 | 
			
		||||
    unsigned int disable_renegotiation : 1; /*!< disable renegotiation?     */
 | 
			
		||||
#endif
 | 
			
		||||
@ -1204,9 +1194,6 @@ struct mbedtls_ssl_config
 | 
			
		||||
#if defined(MBEDTLS_SSL_SESSION_TICKETS)
 | 
			
		||||
    unsigned int session_tickets : 1;   /*!< use session tickets?           */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C)
 | 
			
		||||
    unsigned int fallback : 1;      /*!< is this a fallback?                */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_SRV_C)
 | 
			
		||||
    unsigned int cert_req_ca_list : 1;  /*!< enable sending CA list in
 | 
			
		||||
                                          Certificate Request messages?     */
 | 
			
		||||
@ -1356,10 +1343,6 @@ struct mbedtls_ssl_context
 | 
			
		||||
    uint16_t mtu;               /*!< path mtu, used to fragment outgoing messages */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    signed char split_done;     /*!< current record already splitted? */
 | 
			
		||||
#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * PKI layer
 | 
			
		||||
     */
 | 
			
		||||
@ -2598,12 +2581,10 @@ int mbedtls_ssl_conf_cid( mbedtls_ssl_config *conf, size_t len,
 | 
			
		||||
 * \param ciphersuites  0-terminated list of allowed ciphersuites
 | 
			
		||||
 * \param major         Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3
 | 
			
		||||
 *                      supported)
 | 
			
		||||
 * \param minor         Minor version number (MBEDTLS_SSL_MINOR_VERSION_1,
 | 
			
		||||
 *                      MBEDTLS_SSL_MINOR_VERSION_2,
 | 
			
		||||
 *                      MBEDTLS_SSL_MINOR_VERSION_3 supported)
 | 
			
		||||
 * \param minor         Minor version number (only 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
 | 
			
		||||
 * \note                With DTLS, use MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf,
 | 
			
		||||
                                       const int *ciphersuites,
 | 
			
		||||
@ -3253,8 +3234,7 @@ void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *ss
 | 
			
		||||
 *
 | 
			
		||||
 * \note           This ignores ciphersuites from higher versions.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and
 | 
			
		||||
 *                 MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
 | 
			
		||||
 * \note           With DTLS, use MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
 | 
			
		||||
 *
 | 
			
		||||
 * \param conf     SSL configuration
 | 
			
		||||
 * \param major    Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
 | 
			
		||||
@ -3265,13 +3245,12 @@ void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int mino
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Set the minimum accepted SSL/TLS protocol version
 | 
			
		||||
 *                 (Default: TLS 1.0)
 | 
			
		||||
 *                 (Default: TLS 1.2)
 | 
			
		||||
 *
 | 
			
		||||
 * \note           Input outside of the SSL_MAX_XXXXX_VERSION and
 | 
			
		||||
 *                 SSL_MIN_XXXXX_VERSION range is ignored.
 | 
			
		||||
 *
 | 
			
		||||
 * \note           With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and
 | 
			
		||||
 *                 MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
 | 
			
		||||
 * \note           With DTLS, use MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
 | 
			
		||||
 *
 | 
			
		||||
 * \param conf     SSL configuration
 | 
			
		||||
 * \param major    Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
 | 
			
		||||
@ -3281,29 +3260,6 @@ void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int mino
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          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.
 | 
			
		||||
 *
 | 
			
		||||
 * \param conf     SSL configuration
 | 
			
		||||
 * \param fallback MBEDTLS_SSL_IS_NOT_FALLBACK or MBEDTLS_SSL_IS_FALLBACK
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback );
 | 
			
		||||
#endif /* MBEDTLS_SSL_FALLBACK_SCSV && MBEDTLS_SSL_CLI_C */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief           Enable or disable Encrypt-then-MAC
 | 
			
		||||
@ -3398,21 +3354,6 @@ int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_c
 | 
			
		||||
void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate );
 | 
			
		||||
#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Enable / Disable 1/n-1 record splitting
 | 
			
		||||
 *                 (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED)
 | 
			
		||||
 *
 | 
			
		||||
 * \note           Only affects TLS 1.0, not higher versions.
 | 
			
		||||
 *                 Does not affect non-CBC ciphersuites in any version.
 | 
			
		||||
 *
 | 
			
		||||
 * \param conf     SSL configuration
 | 
			
		||||
 * \param split    MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED or
 | 
			
		||||
 *                 MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED
 | 
			
		||||
 */
 | 
			
		||||
void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *conf, char split );
 | 
			
		||||
#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C)
 | 
			
		||||
/**
 | 
			
		||||
 * \brief          Enable / Disable session tickets (client only).
 | 
			
		||||
 | 
			
		||||
@ -1206,19 +1206,6 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl )
 | 
			
		||||
        n++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Some versions of OpenSSL don't handle it correctly if not at end */
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV)
 | 
			
		||||
    if( ssl->conf->fallback == MBEDTLS_SSL_IS_FALLBACK )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_MSG( 3, ( "adding FALLBACK_SCSV" ) );
 | 
			
		||||
 | 
			
		||||
        MBEDTLS_SSL_CHK_BUF_PTR( p, end, 2 );
 | 
			
		||||
        *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 );
 | 
			
		||||
        *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE      );
 | 
			
		||||
        n++;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    *q++ = (unsigned char)( n >> 7 );
 | 
			
		||||
    *q++ = (unsigned char)( n << 1 );
 | 
			
		||||
 | 
			
		||||
@ -2843,8 +2830,7 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl,
 | 
			
		||||
        return( ret );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if( len_bytes == 2 )
 | 
			
		||||
    {
 | 
			
		||||
        ssl->out_msg[offset+0] = (unsigned char)( *olen >> 8 );
 | 
			
		||||
@ -3238,17 +3224,6 @@ start_processing:
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
        if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        {
 | 
			
		||||
            pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info );
 | 
			
		||||
 | 
			
		||||
            /* Default hash for ECDSA is SHA-1 */
 | 
			
		||||
            if( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE )
 | 
			
		||||
                md_alg = MBEDTLS_MD_SHA1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
@ -3285,19 +3260,7 @@ start_processing:
 | 
			
		||||
        /*
 | 
			
		||||
         * Compute the hash that has been signed
 | 
			
		||||
         */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
        if( md_alg == MBEDTLS_MD_NONE )
 | 
			
		||||
        {
 | 
			
		||||
            hashlen = 36;
 | 
			
		||||
            ret = mbedtls_ssl_get_key_exchange_md_ssl_tls( ssl, hash, params,
 | 
			
		||||
                                                           params_len );
 | 
			
		||||
            if( ret != 0 )
 | 
			
		||||
                return( ret );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( md_alg != MBEDTLS_MD_NONE )
 | 
			
		||||
        {
 | 
			
		||||
            ret = mbedtls_ssl_get_key_exchange_md_tls1_2( ssl, hash, &hashlen,
 | 
			
		||||
@ -3307,8 +3270,7 @@ start_processing:
 | 
			
		||||
                return( ret );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
@ -4113,35 +4075,6 @@ sign:
 | 
			
		||||
 | 
			
		||||
    ssl->handshake->calc_verify( ssl, hash, &hashlen );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    {
 | 
			
		||||
        /*
 | 
			
		||||
         * digitally-signed struct {
 | 
			
		||||
         *     opaque md5_hash[16];
 | 
			
		||||
         *     opaque sha_hash[20];
 | 
			
		||||
         * };
 | 
			
		||||
         *
 | 
			
		||||
         * md5_hash
 | 
			
		||||
         *     MD5(handshake_messages);
 | 
			
		||||
         *
 | 
			
		||||
         * sha_hash
 | 
			
		||||
         *     SHA(handshake_messages);
 | 
			
		||||
         */
 | 
			
		||||
        md_alg = MBEDTLS_MD_NONE;
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * For ECDSA, default hash is SHA-1 only
 | 
			
		||||
         */
 | 
			
		||||
        if( mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECDSA ) )
 | 
			
		||||
        {
 | 
			
		||||
            hash_start += 16;
 | 
			
		||||
            hashlen -= 16;
 | 
			
		||||
            md_alg = MBEDTLS_MD_SHA1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -41,8 +41,7 @@
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * If DTLS is in use, then at least one of SHA-1, SHA-256, SHA-512 is
 | 
			
		||||
 * available. Try SHA-256 first, 512 wastes resources since we need to stay
 | 
			
		||||
 * with max 32 bytes of cookie for DTLS 1.0
 | 
			
		||||
 * available. Try SHA-256 first, 512 wastes resources
 | 
			
		||||
 */
 | 
			
		||||
#if defined(MBEDTLS_SHA224_C)
 | 
			
		||||
#define COOKIE_MD           MBEDTLS_MD_SHA224
 | 
			
		||||
 | 
			
		||||
@ -68,19 +68,11 @@
 | 
			
		||||
/* Determine minimum supported version */
 | 
			
		||||
#define MBEDTLS_SSL_MIN_MAJOR_VERSION           MBEDTLS_SSL_MAJOR_VERSION_3
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
#define MBEDTLS_SSL_MIN_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_1
 | 
			
		||||
#else
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
#define MBEDTLS_SSL_MIN_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_2
 | 
			
		||||
#else
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#define MBEDTLS_SSL_MIN_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_3
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1   */
 | 
			
		||||
 | 
			
		||||
#define MBEDTLS_SSL_MIN_VALID_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_1
 | 
			
		||||
#define MBEDTLS_SSL_MIN_VALID_MINOR_VERSION MBEDTLS_SSL_MINOR_VERSION_3
 | 
			
		||||
#define MBEDTLS_SSL_MIN_VALID_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3
 | 
			
		||||
 | 
			
		||||
/* Determine maximum supported version */
 | 
			
		||||
@ -88,15 +80,6 @@
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#define MBEDTLS_SSL_MAX_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_3
 | 
			
		||||
#else
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
#define MBEDTLS_SSL_MAX_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_2
 | 
			
		||||
#else
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
#define MBEDTLS_SSL_MAX_MINOR_VERSION           MBEDTLS_SSL_MINOR_VERSION_1
 | 
			
		||||
#else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1   */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
/* Shorthand for restartable ECC */
 | 
			
		||||
@ -130,13 +113,7 @@
 | 
			
		||||
 * counter (8) + header (5) + IV(16) + MAC (16-48) + padding (0-256).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)   ||      \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_1) ||      \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#define MBEDTLS_SSL_PROTO_TLS1_2_OR_EARLIER
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2_OR_EARLIER)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
 | 
			
		||||
/* This macro determines whether CBC is supported. */
 | 
			
		||||
#if defined(MBEDTLS_CIPHER_MODE_CBC) &&                               \
 | 
			
		||||
@ -153,11 +130,9 @@
 | 
			
		||||
#define MBEDTLS_SSL_SOME_SUITES_USE_STREAM
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* This macro determines whether the CBC construct used in TLS 1.0-1.2 is supported. */
 | 
			
		||||
/* This macro determines whether the CBC construct used in TLS 1.2 is supported. */
 | 
			
		||||
#if defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) && \
 | 
			
		||||
    ( defined(MBEDTLS_SSL_PROTO_TLS1) ||        \
 | 
			
		||||
      defined(MBEDTLS_SSL_PROTO_TLS1_1) ||      \
 | 
			
		||||
      defined(MBEDTLS_SSL_PROTO_TLS1_2) )
 | 
			
		||||
      defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#define MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -166,7 +141,7 @@
 | 
			
		||||
#define MBEDTLS_SSL_SOME_SUITES_USE_MAC
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2_OR_EARLIER */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_SOME_SUITES_USE_MAC)
 | 
			
		||||
/* Ciphersuites using HMAC */
 | 
			
		||||
@ -550,10 +525,6 @@ struct mbedtls_ssl_handshake_params
 | 
			
		||||
    /*
 | 
			
		||||
     * Checksum contexts
 | 
			
		||||
     */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
       mbedtls_md5_context fin_md5;
 | 
			
		||||
      mbedtls_sha1_context fin_sha1;
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -1202,21 +1173,13 @@ static inline int mbedtls_ssl_safer_memcmp( const void *a, const void *b, size_t
 | 
			
		||||
    return( diff );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
int mbedtls_ssl_get_key_exchange_md_ssl_tls( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                        unsigned char *output,
 | 
			
		||||
                                        unsigned char *data, size_t data_len );
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
/* The hash buffer must have at least MBEDTLS_MD_MAX_SIZE bytes of length. */
 | 
			
		||||
int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                            unsigned char *hash, size_t *hashlen,
 | 
			
		||||
                                            unsigned char *data, size_t data_len,
 | 
			
		||||
                                            mbedtls_md_type_t md_alg );
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -519,9 +519,9 @@ int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl,
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* The PRNG is used for dynamic IV generation that's used
 | 
			
		||||
     * for CBC transformations in TLS 1.1 and TLS 1.2. */
 | 
			
		||||
     * for CBC transformations in TLS 1.2. */
 | 
			
		||||
#if !( defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) && \
 | 
			
		||||
       ( defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) ) )
 | 
			
		||||
       defined(MBEDTLS_SSL_PROTO_TLS1_2) )
 | 
			
		||||
    ((void) f_rng);
 | 
			
		||||
    ((void) p_rng);
 | 
			
		||||
#endif
 | 
			
		||||
@ -644,8 +644,7 @@ int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl,
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "Buffer provided for encrypted record not large enough" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL );
 | 
			
		||||
        }
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
        defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 )
 | 
			
		||||
        {
 | 
			
		||||
            unsigned char mac[MBEDTLS_SSL_MAC_ADD];
 | 
			
		||||
@ -835,12 +834,12 @@ int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl,
 | 
			
		||||
        rec->data_len += padlen + 1;
 | 
			
		||||
        post_avail -= padlen + 1;
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        /*
 | 
			
		||||
         * Prepend per-record IV for block cipher in TLS v1.1 and up as per
 | 
			
		||||
         * Prepend per-record IV for block cipher in TLS v1.2 as per
 | 
			
		||||
         * Method 1 (6.2.3.2. in RFC4346 and RFC5246)
 | 
			
		||||
         */
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        {
 | 
			
		||||
            if( f_rng == NULL )
 | 
			
		||||
            {
 | 
			
		||||
@ -865,7 +864,7 @@ int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl,
 | 
			
		||||
                    transform->ivlen );
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %" MBEDTLS_PRINTF_SIZET ", "
 | 
			
		||||
                            "including %" MBEDTLS_PRINTF_SIZET
 | 
			
		||||
@ -889,22 +888,9 @@ int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl,
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
        if( transform->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
        {
 | 
			
		||||
            /*
 | 
			
		||||
             * Save IV in TLS1
 | 
			
		||||
             */
 | 
			
		||||
            memcpy( transform->iv_enc, transform->cipher_ctx_enc.iv,
 | 
			
		||||
                    transform->ivlen );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif
 | 
			
		||||
        {
 | 
			
		||||
            data             -= transform->ivlen;
 | 
			
		||||
            rec->data_offset -= transform->ivlen;
 | 
			
		||||
            rec->data_len    += transform->ivlen;
 | 
			
		||||
        }
 | 
			
		||||
        data             -= transform->ivlen;
 | 
			
		||||
        rec->data_offset -= transform->ivlen;
 | 
			
		||||
        rec->data_len    += transform->ivlen;
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
 | 
			
		||||
        if( auth_done == 0 )
 | 
			
		||||
@ -1381,8 +1367,8 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
        /*
 | 
			
		||||
         * Check immediate ciphertext sanity
 | 
			
		||||
         */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        {
 | 
			
		||||
            /* The ciphertext is prefixed with the CBC IV. */
 | 
			
		||||
            minlen += transform->ivlen;
 | 
			
		||||
@ -1487,11 +1473,11 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INVALID_MAC );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        /*
 | 
			
		||||
         * Initialize for prepended IV for block cipher in TLS v1.1 and up
 | 
			
		||||
         * Initialize for prepended IV for block cipher in TLS v1.2
 | 
			
		||||
         */
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
        if( transform->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        {
 | 
			
		||||
            /* Safe because data_len >= minlen + ivlen = 2 * ivlen. */
 | 
			
		||||
            memcpy( transform->iv_dec, data, transform->ivlen );
 | 
			
		||||
@ -1500,7 +1486,7 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
            rec->data_offset += transform->ivlen;
 | 
			
		||||
            rec->data_len -= transform->ivlen;
 | 
			
		||||
        }
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
        /* We still have data_len % ivlen == 0 and data_len >= ivlen here. */
 | 
			
		||||
 | 
			
		||||
@ -1519,20 +1505,6 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
        if( transform->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
        {
 | 
			
		||||
            /*
 | 
			
		||||
             * Save IV in TLS1, where CBC decryption of consecutive
 | 
			
		||||
             * records is equivalent to CBC decryption of the concatenation
 | 
			
		||||
             * of the records; in other words, IVs are maintained across
 | 
			
		||||
             * record decryptions.
 | 
			
		||||
             */
 | 
			
		||||
            memcpy( transform->iv_dec, transform->cipher_ctx_dec.iv,
 | 
			
		||||
                    transform->ivlen );
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        /* Safe since data_len >= minlen + maclen + 1, so after having
 | 
			
		||||
         * subtracted at most minlen and maclen up to this point,
 | 
			
		||||
         * data_len > 0 (because of data_len % ivlen == 0, it's actually
 | 
			
		||||
@ -1573,8 +1545,7 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
        /* Regardless of the validity of the padding,
 | 
			
		||||
         * we have data_len >= padlen here. */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        /* The padding check involves a series of up to 256
 | 
			
		||||
            * consecutive memory reads at the end of the record
 | 
			
		||||
            * plaintext buffer. In order to hide the length and
 | 
			
		||||
@ -1609,8 +1580,7 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
#endif
 | 
			
		||||
        padlen &= mbedtls_ssl_cf_mask_from_bit( correct );
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
        /* If the padding was found to be invalid, padlen == 0
 | 
			
		||||
         * and the subtraction is safe. If the padding was found valid,
 | 
			
		||||
@ -1657,8 +1627,7 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
        ssl_extract_add_data_from_record( add_data, &add_data_len, rec,
 | 
			
		||||
                                          transform->minor_ver );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
        defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        /*
 | 
			
		||||
            * The next two sizes are the minimum and maximum values of
 | 
			
		||||
            * data_len over all padlen values.
 | 
			
		||||
@ -1686,8 +1655,7 @@ int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl,
 | 
			
		||||
                                        rec->data_len,
 | 
			
		||||
                                        min_len, max_len,
 | 
			
		||||
                                        transform->maclen );
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
              MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_DEBUG_ALL)
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_BUF( 4, "expected mac", mac_expect, transform->maclen );
 | 
			
		||||
@ -4843,7 +4811,7 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl )
 | 
			
		||||
static size_t ssl_transform_get_explicit_iv_len(
 | 
			
		||||
                        mbedtls_ssl_transform const *transform )
 | 
			
		||||
{
 | 
			
		||||
    if( transform->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
    if( transform->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        return( 0 );
 | 
			
		||||
 | 
			
		||||
    return( transform->ivlen - transform->fixed_ivlen );
 | 
			
		||||
@ -5056,12 +5024,12 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl )
 | 
			
		||||
             * more than the block size of the underlying cipher. */
 | 
			
		||||
            transform_expansion += block_size;
 | 
			
		||||
 | 
			
		||||
            /* For TLS 1.1 or higher, an explicit IV is added
 | 
			
		||||
            /* For TLS 1.2 or higher, an explicit IV is added
 | 
			
		||||
             * after the record header. */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
            if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
            if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
                transform_expansion += block_size;
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
@ -5201,8 +5169,7 @@ static int ssl_handle_hs_message_post_handshake( mbedtls_ssl_context *ssl )
 | 
			
		||||
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_MSG( 3, ( "refusing renegotiation, sending alert" ) );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 )
 | 
			
		||||
        {
 | 
			
		||||
            if( ( ret = mbedtls_ssl_send_alert_message( ssl,
 | 
			
		||||
@ -5213,8 +5180,7 @@ static int ssl_handle_hs_message_post_handshake( mbedtls_ssl_context *ssl )
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 ||
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
@ -5509,44 +5475,6 @@ static int ssl_write_real( mbedtls_ssl_context *ssl,
 | 
			
		||||
    return( (int) len );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Write application data, doing 1/n-1 splitting if necessary.
 | 
			
		||||
 *
 | 
			
		||||
 * With non-blocking I/O, ssl_write_real() may return WANT_WRITE,
 | 
			
		||||
 * then the caller will call us again with the same arguments, so
 | 
			
		||||
 * remember whether we already did the split or not.
 | 
			
		||||
 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
static int ssl_write_split( mbedtls_ssl_context *ssl,
 | 
			
		||||
                            const unsigned char *buf, size_t len )
 | 
			
		||||
{
 | 
			
		||||
    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
 | 
			
		||||
    if( ssl->conf->cbc_record_splitting ==
 | 
			
		||||
            MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED ||
 | 
			
		||||
        len <= 1 ||
 | 
			
		||||
        ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_1 ||
 | 
			
		||||
        mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc )
 | 
			
		||||
                                != MBEDTLS_MODE_CBC )
 | 
			
		||||
    {
 | 
			
		||||
        return( ssl_write_real( ssl, buf, len ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if( ssl->split_done == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        if( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 )
 | 
			
		||||
            return( ret );
 | 
			
		||||
        ssl->split_done = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 )
 | 
			
		||||
        return( ret );
 | 
			
		||||
    ssl->split_done = 0;
 | 
			
		||||
 | 
			
		||||
    return( ret + 1 );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Write application data (public-facing wrapper)
 | 
			
		||||
 */
 | 
			
		||||
@ -5576,11 +5504,7 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    ret = ssl_write_split( ssl, buf, len );
 | 
			
		||||
#else
 | 
			
		||||
    ret = ssl_write_real( ssl, buf, len );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write" ) );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1781,29 +1781,6 @@ read_record_header:
 | 
			
		||||
            ext += 4 + ext_size;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV)
 | 
			
		||||
    for( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 )
 | 
			
		||||
    {
 | 
			
		||||
        if( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) &&
 | 
			
		||||
            p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE      ) & 0xff ) )
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 2, ( "received FALLBACK_SCSV" ) );
 | 
			
		||||
 | 
			
		||||
            if( ssl->minor_ver < ssl->conf->max_minor_ver )
 | 
			
		||||
            {
 | 
			
		||||
                MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) );
 | 
			
		||||
 | 
			
		||||
                mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
 | 
			
		||||
                                        MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK );
 | 
			
		||||
 | 
			
		||||
                return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif /* MBEDTLS_SSL_FALLBACK_SCSV */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
 | 
			
		||||
    defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED)
 | 
			
		||||
 | 
			
		||||
@ -3171,11 +3148,8 @@ curve_matching_done:
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * 2.1: Choose hash algorithm:
 | 
			
		||||
         * A: For TLS 1.2, obey signature-hash-algorithm extension
 | 
			
		||||
         *    to choose appropriate hash.
 | 
			
		||||
         * B: For TLS1.0, TLS1.1 and ECDHE_ECDSA, use SHA1
 | 
			
		||||
         *    (RFC 4492, Sec. 5.4)
 | 
			
		||||
         * C: Otherwise, use MD5 + SHA1 (RFC 4346, Sec. 7.4.3)
 | 
			
		||||
         *      For TLS 1.2, obey signature-hash-algorithm extension
 | 
			
		||||
         *      to choose appropriate hash.
 | 
			
		||||
         */
 | 
			
		||||
 | 
			
		||||
        mbedtls_md_type_t md_alg;
 | 
			
		||||
@ -3185,7 +3159,7 @@ curve_matching_done:
 | 
			
		||||
            mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info );
 | 
			
		||||
        if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        {
 | 
			
		||||
            /* A: For TLS 1.2, obey signature-hash-algorithm extension
 | 
			
		||||
            /*    For TLS 1.2, obey signature-hash-algorithm extension
 | 
			
		||||
             *    (RFC 5246, Sec. 7.4.1.4.1). */
 | 
			
		||||
            if( sig_alg == MBEDTLS_PK_NONE ||
 | 
			
		||||
                ( md_alg = mbedtls_ssl_sig_hash_set_find( &ssl->handshake->hash_algs,
 | 
			
		||||
@ -3198,39 +3172,18 @@ curve_matching_done:
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
        }
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
        if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA )
 | 
			
		||||
        {
 | 
			
		||||
            /* B: Default hash SHA1 */
 | 
			
		||||
            md_alg = MBEDTLS_MD_SHA1;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
        {
 | 
			
		||||
            /* C: MD5 + SHA1 */
 | 
			
		||||
            md_alg = MBEDTLS_MD_NONE;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_MSG( 3, ( "pick hash algorithm %u for signing", (unsigned) md_alg ) );
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * 2.2: Compute the hash to be signed
 | 
			
		||||
         */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
        if( md_alg == MBEDTLS_MD_NONE )
 | 
			
		||||
        {
 | 
			
		||||
            hashlen = 36;
 | 
			
		||||
            ret = mbedtls_ssl_get_key_exchange_md_ssl_tls( ssl, hash,
 | 
			
		||||
                                                           dig_signed,
 | 
			
		||||
                                                           dig_signed_len );
 | 
			
		||||
            if( ret != 0 )
 | 
			
		||||
                return( ret );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
        if( md_alg != MBEDTLS_MD_NONE )
 | 
			
		||||
        {
 | 
			
		||||
            ret = mbedtls_ssl_get_key_exchange_md_tls1_2( ssl, hash, &hashlen,
 | 
			
		||||
@ -3241,8 +3194,7 @@ curve_matching_done:
 | 
			
		||||
                return( ret );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
        {
 | 
			
		||||
            MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
 | 
			
		||||
            return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
 | 
			
		||||
@ -3556,8 +3508,7 @@ static int ssl_decrypt_encrypted_pms( mbedtls_ssl_context *ssl,
 | 
			
		||||
    /*
 | 
			
		||||
     * Prepare to decrypt the premaster using own private RSA key
 | 
			
		||||
     */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if ( p + 2 > end ) {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
 | 
			
		||||
        return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
 | 
			
		||||
@ -4177,22 +4128,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl )
 | 
			
		||||
     *     opaque signature<0..2^16-1>;
 | 
			
		||||
     *  } DigitallySigned;
 | 
			
		||||
     */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    {
 | 
			
		||||
        md_alg = MBEDTLS_MD_NONE;
 | 
			
		||||
        hashlen = 36;
 | 
			
		||||
 | 
			
		||||
        /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */
 | 
			
		||||
        if( mbedtls_pk_can_do( peer_pk, MBEDTLS_PK_ECDSA ) )
 | 
			
		||||
        {
 | 
			
		||||
            hash_start += 16;
 | 
			
		||||
            hashlen -= 16;
 | 
			
		||||
            md_alg = MBEDTLS_MD_SHA1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -324,122 +324,6 @@ static void handle_buffer_resizing( mbedtls_ssl_context *ssl, int downsizing,
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
static int tls1_prf( const unsigned char *secret, size_t slen,
 | 
			
		||||
                     const char *label,
 | 
			
		||||
                     const unsigned char *random, size_t rlen,
 | 
			
		||||
                     unsigned char *dstbuf, size_t dlen )
 | 
			
		||||
{
 | 
			
		||||
    size_t nb, hs;
 | 
			
		||||
    size_t i, j, k;
 | 
			
		||||
    const unsigned char *S1, *S2;
 | 
			
		||||
    unsigned char *tmp;
 | 
			
		||||
    size_t tmp_len = 0;
 | 
			
		||||
    unsigned char h_i[20];
 | 
			
		||||
    const mbedtls_md_info_t *md_info;
 | 
			
		||||
    mbedtls_md_context_t md_ctx;
 | 
			
		||||
    int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
 | 
			
		||||
 | 
			
		||||
    mbedtls_md_init( &md_ctx );
 | 
			
		||||
 | 
			
		||||
    tmp_len = 20 + strlen( label ) + rlen;
 | 
			
		||||
    tmp = mbedtls_calloc( 1, tmp_len );
 | 
			
		||||
    if( tmp == NULL )
 | 
			
		||||
    {
 | 
			
		||||
        ret = MBEDTLS_ERR_SSL_ALLOC_FAILED;
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hs = ( slen + 1 ) / 2;
 | 
			
		||||
    S1 = secret;
 | 
			
		||||
    S2 = secret + slen - hs;
 | 
			
		||||
 | 
			
		||||
    nb = strlen( label );
 | 
			
		||||
    memcpy( tmp + 20, label, nb );
 | 
			
		||||
    memcpy( tmp + 20 + nb, random, rlen );
 | 
			
		||||
    nb += rlen;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * First compute P_md5(secret,label+random)[0..dlen]
 | 
			
		||||
     */
 | 
			
		||||
    if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ) ) == NULL )
 | 
			
		||||
    {
 | 
			
		||||
        ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mbedtls_md_hmac_starts( &md_ctx, S1, hs );
 | 
			
		||||
    mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb );
 | 
			
		||||
    mbedtls_md_hmac_finish( &md_ctx, 4 + tmp );
 | 
			
		||||
 | 
			
		||||
    for( i = 0; i < dlen; i += 16 )
 | 
			
		||||
    {
 | 
			
		||||
        mbedtls_md_hmac_reset ( &md_ctx );
 | 
			
		||||
        mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 + nb );
 | 
			
		||||
        mbedtls_md_hmac_finish( &md_ctx, h_i );
 | 
			
		||||
 | 
			
		||||
        mbedtls_md_hmac_reset ( &md_ctx );
 | 
			
		||||
        mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 );
 | 
			
		||||
        mbedtls_md_hmac_finish( &md_ctx, 4 + tmp );
 | 
			
		||||
 | 
			
		||||
        k = ( i + 16 > dlen ) ? dlen % 16 : 16;
 | 
			
		||||
 | 
			
		||||
        for( j = 0; j < k; j++ )
 | 
			
		||||
            dstbuf[i + j]  = h_i[j];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mbedtls_md_free( &md_ctx );
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * XOR out with P_sha1(secret,label+random)[0..dlen]
 | 
			
		||||
     */
 | 
			
		||||
    if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ) ) == NULL )
 | 
			
		||||
    {
 | 
			
		||||
        ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mbedtls_md_hmac_starts( &md_ctx, S2, hs );
 | 
			
		||||
    mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb );
 | 
			
		||||
    mbedtls_md_hmac_finish( &md_ctx, tmp );
 | 
			
		||||
 | 
			
		||||
    for( i = 0; i < dlen; i += 20 )
 | 
			
		||||
    {
 | 
			
		||||
        mbedtls_md_hmac_reset ( &md_ctx );
 | 
			
		||||
        mbedtls_md_hmac_update( &md_ctx, tmp, 20 + nb );
 | 
			
		||||
        mbedtls_md_hmac_finish( &md_ctx, h_i );
 | 
			
		||||
 | 
			
		||||
        mbedtls_md_hmac_reset ( &md_ctx );
 | 
			
		||||
        mbedtls_md_hmac_update( &md_ctx, tmp, 20 );
 | 
			
		||||
        mbedtls_md_hmac_finish( &md_ctx, tmp );
 | 
			
		||||
 | 
			
		||||
        k = ( i + 20 > dlen ) ? dlen % 20 : 20;
 | 
			
		||||
 | 
			
		||||
        for( j = 0; j < k; j++ )
 | 
			
		||||
            dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
exit:
 | 
			
		||||
    mbedtls_md_free( &md_ctx );
 | 
			
		||||
 | 
			
		||||
    mbedtls_platform_zeroize( tmp, tmp_len );
 | 
			
		||||
    mbedtls_platform_zeroize( h_i, sizeof( h_i ) );
 | 
			
		||||
 | 
			
		||||
    mbedtls_free( tmp );
 | 
			
		||||
    return( ret );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1) || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
 | 
			
		||||
@ -667,15 +551,6 @@ static int tls_prf_sha384( const unsigned char *secret, size_t slen,
 | 
			
		||||
 | 
			
		||||
static void ssl_update_checksum_start( mbedtls_ssl_context *, const unsigned char *, size_t );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
static void ssl_update_checksum_md5sha1( mbedtls_ssl_context *, const unsigned char *, size_t );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
static void ssl_calc_verify_tls( const mbedtls_ssl_context *, unsigned char*, size_t * );
 | 
			
		||||
static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t );
 | 
			
		||||
@ -715,13 +590,6 @@ static int ssl_use_opaque_psk( mbedtls_ssl_context const *ssl )
 | 
			
		||||
#if defined(MBEDTLS_SSL_EXPORT_KEYS)
 | 
			
		||||
static mbedtls_tls_prf_types tls_prf_get_type( mbedtls_ssl_tls_prf_cb *tls_prf )
 | 
			
		||||
{
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    if( tls_prf == tls1_prf )
 | 
			
		||||
    {
 | 
			
		||||
        return( MBEDTLS_SSL_TLS_PRF_TLS1 );
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA384_C)
 | 
			
		||||
    if( tls_prf == tls_prf_sha384 )
 | 
			
		||||
@ -752,12 +620,6 @@ int  mbedtls_ssl_tls_prf( const mbedtls_tls_prf_types prf,
 | 
			
		||||
 | 
			
		||||
    switch( prf )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
        case MBEDTLS_SSL_TLS_PRF_TLS1:
 | 
			
		||||
            tls_prf = tls1_prf;
 | 
			
		||||
        break;
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA384_C)
 | 
			
		||||
        case MBEDTLS_SSL_TLS_PRF_SHA384:
 | 
			
		||||
@ -1023,14 +885,8 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform,
 | 
			
		||||
                                  - transform->maclen % cipher_info->block_size;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1)
 | 
			
		||||
            if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_1 )
 | 
			
		||||
                ; /* No need to adjust minlen */
 | 
			
		||||
            else
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
            if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_2 ||
 | 
			
		||||
                minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
            if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
            {
 | 
			
		||||
                transform->minlen += transform->ivlen;
 | 
			
		||||
            }
 | 
			
		||||
@ -1106,8 +962,7 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_SOME_SUITES_USE_MAC)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if( minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 )
 | 
			
		||||
    {
 | 
			
		||||
        /* For HMAC-based ciphersuites, initialize the HMAC transforms.
 | 
			
		||||
@ -1280,7 +1135,7 @@ end:
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set appropriate PRF function and other SSL / TLS 1.0/1.1 / TLS1.2 functions
 | 
			
		||||
 * Set appropriate PRF function and other SSL / TLS1.2 functions
 | 
			
		||||
 *
 | 
			
		||||
 * Inputs:
 | 
			
		||||
 * - SSL/TLS minor version
 | 
			
		||||
@ -1297,15 +1152,6 @@ static int ssl_set_handshake_prfs( mbedtls_ssl_handshake_params *handshake,
 | 
			
		||||
    (void) hash;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    if( minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    {
 | 
			
		||||
        handshake->tls_prf = tls1_prf;
 | 
			
		||||
        handshake->calc_verify = ssl_calc_verify_tls;
 | 
			
		||||
        handshake->calc_finished = ssl_calc_finished_tls;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA384_C)
 | 
			
		||||
    if( minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 &&
 | 
			
		||||
@ -1546,37 +1392,6 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl )
 | 
			
		||||
    return( 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
void ssl_calc_verify_tls( const mbedtls_ssl_context *ssl,
 | 
			
		||||
                          unsigned char *hash,
 | 
			
		||||
                          size_t *hlen )
 | 
			
		||||
{
 | 
			
		||||
    mbedtls_md5_context md5;
 | 
			
		||||
    mbedtls_sha1_context sha1;
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc verify tls" ) );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_init( &md5 );
 | 
			
		||||
    mbedtls_sha1_init( &sha1 );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 );
 | 
			
		||||
    mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_finish_ret( &md5,  hash );
 | 
			
		||||
    mbedtls_sha1_finish_ret( &sha1, hash + 16 );
 | 
			
		||||
 | 
			
		||||
    *hlen = 36;
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_BUF( 3, "calculated verify result", hash, *hlen );
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc verify" ) );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_free(  &md5  );
 | 
			
		||||
    mbedtls_sha1_free( &sha1 );
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *ssl,
 | 
			
		||||
@ -2203,8 +2018,7 @@ static int ssl_srv_check_client_no_crt_notification( mbedtls_ssl_context *ssl )
 | 
			
		||||
    if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT )
 | 
			
		||||
        return( -1 );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
    if( ssl->in_hslen   == 3 + mbedtls_ssl_hs_hdr_len( ssl ) &&
 | 
			
		||||
        ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE    &&
 | 
			
		||||
        ssl->in_msg[0]  == MBEDTLS_SSL_HS_CERTIFICATE   &&
 | 
			
		||||
@ -2215,8 +2029,7 @@ static int ssl_srv_check_client_no_crt_notification( mbedtls_ssl_context *ssl )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return( -1 );
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_SRV_C */
 | 
			
		||||
 | 
			
		||||
@ -2651,11 +2464,6 @@ void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl,
 | 
			
		||||
{
 | 
			
		||||
    ((void) ciphersuite_info);
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        ssl->handshake->update_checksum = ssl_update_checksum_md5sha1;
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA384_C)
 | 
			
		||||
    if( ciphersuite_info->mac == MBEDTLS_MD_SHA384 )
 | 
			
		||||
@ -2676,10 +2484,6 @@ void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl,
 | 
			
		||||
 | 
			
		||||
void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl )
 | 
			
		||||
{
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
     mbedtls_md5_starts_ret( &ssl->handshake->fin_md5  );
 | 
			
		||||
    mbedtls_sha1_starts_ret( &ssl->handshake->fin_sha1 );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -2703,10 +2507,6 @@ void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl )
 | 
			
		||||
static void ssl_update_checksum_start( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                       const unsigned char *buf, size_t len )
 | 
			
		||||
{
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
     mbedtls_md5_update_ret( &ssl->handshake->fin_md5 , buf, len );
 | 
			
		||||
    mbedtls_sha1_update_ret( &ssl->handshake->fin_sha1, buf, len );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -2725,15 +2525,6 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl,
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
static void ssl_update_checksum_md5sha1( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                         const unsigned char *buf, size_t len )
 | 
			
		||||
{
 | 
			
		||||
     mbedtls_md5_update_ret( &ssl->handshake->fin_md5 , buf, len );
 | 
			
		||||
    mbedtls_sha1_update_ret( &ssl->handshake->fin_sha1, buf, len );
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
static void ssl_update_checksum_sha256( mbedtls_ssl_context *ssl,
 | 
			
		||||
@ -2760,65 +2551,6 @@ static void ssl_update_checksum_sha384( mbedtls_ssl_context *ssl,
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
static void ssl_calc_finished_tls(
 | 
			
		||||
                mbedtls_ssl_context *ssl, unsigned char *buf, int from )
 | 
			
		||||
{
 | 
			
		||||
    int len = 12;
 | 
			
		||||
    const char *sender;
 | 
			
		||||
    mbedtls_md5_context  md5;
 | 
			
		||||
    mbedtls_sha1_context sha1;
 | 
			
		||||
    unsigned char padbuf[36];
 | 
			
		||||
 | 
			
		||||
    mbedtls_ssl_session *session = ssl->session_negotiate;
 | 
			
		||||
    if( !session )
 | 
			
		||||
        session = ssl->session;
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc  finished tls" ) );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_init( &md5 );
 | 
			
		||||
    mbedtls_sha1_init( &sha1 );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 );
 | 
			
		||||
    mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 );
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * TLSv1:
 | 
			
		||||
     *   hash = PRF( master, finished_label,
 | 
			
		||||
     *               MD5( handshake ) + SHA1( handshake ) )[0..11]
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
#if !defined(MBEDTLS_MD5_ALT)
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_BUF( 4, "finished  md5 state", (unsigned char *)
 | 
			
		||||
                    md5.state, sizeof(  md5.state ) );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(MBEDTLS_SHA1_ALT)
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *)
 | 
			
		||||
                   sha1.state, sizeof( sha1.state ) );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    sender = ( from == MBEDTLS_SSL_IS_CLIENT )
 | 
			
		||||
             ? "client finished"
 | 
			
		||||
             : "server finished";
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_finish_ret(  &md5, padbuf );
 | 
			
		||||
    mbedtls_sha1_finish_ret( &sha1, padbuf + 16 );
 | 
			
		||||
 | 
			
		||||
    ssl->handshake->tls_prf( session->master, 48, sender,
 | 
			
		||||
                             padbuf, 36, buf, len );
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_BUF( 3, "calc finished result", buf, len );
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_free(  &md5  );
 | 
			
		||||
    mbedtls_sha1_free( &sha1 );
 | 
			
		||||
 | 
			
		||||
    mbedtls_platform_zeroize(  padbuf, sizeof(  padbuf ) );
 | 
			
		||||
 | 
			
		||||
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc  finished" ) );
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
static void ssl_calc_finished_tls_sha256(
 | 
			
		||||
@ -3249,12 +2981,6 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake )
 | 
			
		||||
{
 | 
			
		||||
    memset( handshake, 0, sizeof( mbedtls_ssl_handshake_params ) );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
     mbedtls_md5_init(   &handshake->fin_md5  );
 | 
			
		||||
    mbedtls_sha1_init(   &handshake->fin_sha1 );
 | 
			
		||||
     mbedtls_md5_starts_ret( &handshake->fin_md5  );
 | 
			
		||||
    mbedtls_sha1_starts_ret( &handshake->fin_sha1 );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -3581,10 +3307,6 @@ int mbedtls_ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial )
 | 
			
		||||
    ssl->out_msgtype = 0;
 | 
			
		||||
    ssl->out_msglen = 0;
 | 
			
		||||
    ssl->out_left = 0;
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    if( ssl->split_done != MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED )
 | 
			
		||||
        ssl->split_done = 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    memset( ssl->cur_out_ctr, 0, sizeof( ssl->cur_out_ctr ) );
 | 
			
		||||
 | 
			
		||||
@ -3857,7 +3579,7 @@ void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf,
 | 
			
		||||
    if( major != MBEDTLS_SSL_MAJOR_VERSION_3 )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if( minor < MBEDTLS_SSL_MINOR_VERSION_1 || minor > MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
    if( minor != MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    set_protocol_version_ciphersuites(conf, minor, ciphersuites);
 | 
			
		||||
@ -4425,13 +4147,6 @@ void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int mino
 | 
			
		||||
    conf->min_minor_ver = minor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C)
 | 
			
		||||
void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback )
 | 
			
		||||
{
 | 
			
		||||
    conf->fallback = fallback;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_SRV_C)
 | 
			
		||||
void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *conf,
 | 
			
		||||
                                          char cert_req_ca_list )
 | 
			
		||||
@ -4476,13 +4191,6 @@ void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate )
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *conf, char split )
 | 
			
		||||
{
 | 
			
		||||
    conf->cbc_record_splitting = split;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *conf, int allow_legacy )
 | 
			
		||||
{
 | 
			
		||||
    conf->allow_legacy_renegotiation = allow_legacy;
 | 
			
		||||
@ -5583,10 +5291,6 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl )
 | 
			
		||||
    }
 | 
			
		||||
#endif /* MBEDTLS_SSL_ASYNC_PRIVATE */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
    mbedtls_md5_free(    &handshake->fin_md5  );
 | 
			
		||||
    mbedtls_sha1_free(   &handshake->fin_sha1 );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SHA256_C)
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -6512,10 +6216,6 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf,
 | 
			
		||||
    conf->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    conf->cbc_record_splitting = MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C)
 | 
			
		||||
    conf->f_cookie_write = ssl_cookie_write_dummy;
 | 
			
		||||
    conf->f_cookie_check = ssl_cookie_check_dummy;
 | 
			
		||||
@ -6608,7 +6308,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf,
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)
 | 
			
		||||
            if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
 | 
			
		||||
                conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
#endif
 | 
			
		||||
            const int* default_ciphersuites = mbedtls_ssl_list_ciphersuites();
 | 
			
		||||
            set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_1,
 | 
			
		||||
@ -6985,17 +6685,6 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md )
 | 
			
		||||
 | 
			
		||||
    switch( md )
 | 
			
		||||
    {
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
#if defined(MBEDTLS_MD5_C)
 | 
			
		||||
        case MBEDTLS_SSL_HASH_MD5:
 | 
			
		||||
            return( -1 );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SHA1_C)
 | 
			
		||||
        case MBEDTLS_SSL_HASH_SHA1:
 | 
			
		||||
            ssl->handshake->calc_verify = ssl_calc_verify_tls;
 | 
			
		||||
            break;
 | 
			
		||||
#endif
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
#if defined(MBEDTLS_SHA384_C)
 | 
			
		||||
        case MBEDTLS_SSL_HASH_SHA384:
 | 
			
		||||
            ssl->handshake->calc_verify = ssl_calc_verify_tls_sha384;
 | 
			
		||||
@ -7019,92 +6708,7 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md )
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1)
 | 
			
		||||
int mbedtls_ssl_get_key_exchange_md_ssl_tls( mbedtls_ssl_context *ssl,
 | 
			
		||||
                                        unsigned char *output,
 | 
			
		||||
                                        unsigned char *data, size_t data_len )
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    mbedtls_md5_context mbedtls_md5;
 | 
			
		||||
    mbedtls_sha1_context mbedtls_sha1;
 | 
			
		||||
 | 
			
		||||
    mbedtls_md5_init( &mbedtls_md5 );
 | 
			
		||||
    mbedtls_sha1_init( &mbedtls_sha1 );
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * digitally-signed struct {
 | 
			
		||||
     *     opaque md5_hash[16];
 | 
			
		||||
     *     opaque sha_hash[20];
 | 
			
		||||
     * };
 | 
			
		||||
     *
 | 
			
		||||
     * md5_hash
 | 
			
		||||
     *     MD5(ClientHello.random + ServerHello.random
 | 
			
		||||
     *                            + ServerParams);
 | 
			
		||||
     * sha_hash
 | 
			
		||||
     *     SHA(ClientHello.random + ServerHello.random
 | 
			
		||||
     *                            + ServerParams);
 | 
			
		||||
     */
 | 
			
		||||
    if( ( ret = mbedtls_md5_starts_ret( &mbedtls_md5 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md5_starts_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_md5_update_ret( &mbedtls_md5,
 | 
			
		||||
                                        ssl->handshake->randbytes, 64 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md5_update_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_md5_update_ret( &mbedtls_md5, data, data_len ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md5_update_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_md5_finish_ret( &mbedtls_md5, output ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md5_finish_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if( ( ret = mbedtls_sha1_starts_ret( &mbedtls_sha1 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_starts_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_sha1_update_ret( &mbedtls_sha1,
 | 
			
		||||
                                         ssl->handshake->randbytes, 64 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_update_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_sha1_update_ret( &mbedtls_sha1, data,
 | 
			
		||||
                                         data_len ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_update_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
    if( ( ret = mbedtls_sha1_finish_ret( &mbedtls_sha1,
 | 
			
		||||
                                         output + 16 ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_finish_ret", ret );
 | 
			
		||||
        goto exit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
exit:
 | 
			
		||||
    mbedtls_md5_free( &mbedtls_md5 );
 | 
			
		||||
    mbedtls_sha1_free( &mbedtls_sha1 );
 | 
			
		||||
 | 
			
		||||
    if( ret != 0 )
 | 
			
		||||
        mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
 | 
			
		||||
                                        MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
 | 
			
		||||
 | 
			
		||||
    return( ret );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
 | 
			
		||||
    defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
#if defined(MBEDTLS_SSL_PROTO_TLS1_2)
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl,
 | 
			
		||||
@ -7227,7 +6831,6 @@ exit:
 | 
			
		||||
}
 | 
			
		||||
#endif /* MBEDTLS_USE_PSA_CRYPTO */
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
 | 
			
		||||
          MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
 | 
			
		||||
 | 
			
		||||
#endif /* MBEDTLS_SSL_TLS_C */
 | 
			
		||||
 | 
			
		||||
@ -109,9 +109,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
 | 
			
		||||
#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
 | 
			
		||||
    mbedtls_ssl_conf_encrypt_then_mac( &conf, (options & 0x20) ? MBEDTLS_SSL_ETM_DISABLED : MBEDTLS_SSL_ETM_ENABLED);
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    mbedtls_ssl_conf_cbc_record_splitting( &conf, (options & 0x40) ? MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED : MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED );
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(MBEDTLS_SSL_RENEGOTIATION)
 | 
			
		||||
    mbedtls_ssl_conf_renegotiation( &conf, (options & 0x80) ? MBEDTLS_SSL_RENEGOTIATION_ENABLED : MBEDTLS_SSL_RENEGOTIATION_DISABLED );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -248,13 +248,6 @@ int main( void )
 | 
			
		||||
#define USAGE_MAX_FRAG_LEN ""
 | 
			
		||||
#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
#define USAGE_RECSPLIT \
 | 
			
		||||
    "    recsplit=0/1        default: (library default: on)\n"
 | 
			
		||||
#else
 | 
			
		||||
#define USAGE_RECSPLIT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_DHM_C)
 | 
			
		||||
#define USAGE_DHMLEN \
 | 
			
		||||
    "    dhmlen=%%d           default: (library default: 1024 bits)\n"
 | 
			
		||||
@ -294,13 +287,6 @@ int main( void )
 | 
			
		||||
#define USAGE_DTLS ""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV)
 | 
			
		||||
#define USAGE_FALLBACK \
 | 
			
		||||
    "    fallback=0/1        default: (library default: off)\n"
 | 
			
		||||
#else
 | 
			
		||||
#define USAGE_FALLBACK ""
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
 | 
			
		||||
#define USAGE_EMS \
 | 
			
		||||
    "    extended_ms=0/1     default: (library default: on)\n"
 | 
			
		||||
@ -409,20 +395,18 @@ int main( void )
 | 
			
		||||
    USAGE_TRUNC_HMAC                                        \
 | 
			
		||||
    USAGE_CONTEXT_CRT_CB                                    \
 | 
			
		||||
    USAGE_ALPN                                              \
 | 
			
		||||
    USAGE_FALLBACK                                          \
 | 
			
		||||
    USAGE_EMS                                               \
 | 
			
		||||
    USAGE_ETM                                               \
 | 
			
		||||
    USAGE_REPRODUCIBLE                                      \
 | 
			
		||||
    USAGE_CURVES                                            \
 | 
			
		||||
    USAGE_RECSPLIT                                          \
 | 
			
		||||
    USAGE_DHMLEN                                            \
 | 
			
		||||
    "\n"
 | 
			
		||||
#define USAGE4 \
 | 
			
		||||
    "    allow_sha1=%%d       default: 0\n"                             \
 | 
			
		||||
    "    min_version=%%s      default: (library default: tls1)\n"       \
 | 
			
		||||
    "    min_version=%%s      default: (library default: tls1_2)\n"       \
 | 
			
		||||
    "    max_version=%%s      default: (library default: tls1_2)\n"     \
 | 
			
		||||
    "    force_version=%%s    default: \"\" (none)\n"       \
 | 
			
		||||
    "                        options: tls1, tls1_1, tls1_2, dtls1, dtls1_2\n" \
 | 
			
		||||
    "                        options: tls1_2, dtls1_2\n" \
 | 
			
		||||
    "\n"                                                    \
 | 
			
		||||
    "    force_ciphersuite=<name>    default: all enabled\n"\
 | 
			
		||||
    "    query_config=<name>         return 0 if the specified\n"       \
 | 
			
		||||
@ -1063,15 +1047,6 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        {
 | 
			
		||||
            opt.alpn_string = q;
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "fallback" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            switch( atoi( q ) )
 | 
			
		||||
            {
 | 
			
		||||
                case 0: opt.fallback = MBEDTLS_SSL_IS_NOT_FALLBACK; break;
 | 
			
		||||
                case 1: opt.fallback = MBEDTLS_SSL_IS_FALLBACK; break;
 | 
			
		||||
                default: goto usage;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "extended_ms" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            switch( atoi( q ) )
 | 
			
		||||
@ -1098,12 +1073,7 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "min_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            else
 | 
			
		||||
@ -1111,12 +1081,7 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "max_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            else
 | 
			
		||||
@ -1133,27 +1098,11 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "force_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 )
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.transport = MBEDTLS_SSL_TRANSPORT_DATAGRAM;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
@ -1375,10 +1324,10 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        if( opt.min_version < ciphersuite_info->min_minor_ver )
 | 
			
		||||
        {
 | 
			
		||||
            opt.min_version = ciphersuite_info->min_minor_ver;
 | 
			
		||||
            /* DTLS starts with TLS 1.1 */
 | 
			
		||||
            /* DTLS starts with TLS 1.2 */
 | 
			
		||||
            if( opt.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
 | 
			
		||||
                opt.min_version < MBEDTLS_SSL_MINOR_VERSION_2 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.min_version < MBEDTLS_SSL_MINOR_VERSION_3 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
 | 
			
		||||
@ -1806,13 +1755,6 @@ int main( int argc, char *argv[] )
 | 
			
		||||
#endif /* MBEDTLS_SSL_DTLS_SRTP */
 | 
			
		||||
#endif /* MBEDTLS_SSL_EXPORT_KEYS */
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING)
 | 
			
		||||
    if( opt.recsplit != DFL_RECSPLIT )
 | 
			
		||||
        mbedtls_ssl_conf_cbc_record_splitting( &conf, opt.recsplit
 | 
			
		||||
                                  ? MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED
 | 
			
		||||
                                  : MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_DHM_C)
 | 
			
		||||
    if( opt.dhmlen != DFL_DHMLEN )
 | 
			
		||||
        mbedtls_ssl_conf_dhm_min_bitlen( &conf, opt.dhmlen );
 | 
			
		||||
@ -1935,11 +1877,6 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        mbedtls_ssl_conf_max_version( &conf, MBEDTLS_SSL_MAJOR_VERSION_3,
 | 
			
		||||
                                      opt.max_version );
 | 
			
		||||
 | 
			
		||||
#if defined(MBEDTLS_SSL_FALLBACK_SCSV)
 | 
			
		||||
    if( opt.fallback != DFL_FALLBACK )
 | 
			
		||||
        mbedtls_ssl_conf_fallback( &conf, opt.fallback );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if( ( ret = mbedtls_ssl_setup( &ssl, &conf ) ) != 0 )
 | 
			
		||||
    {
 | 
			
		||||
        mbedtls_printf( " failed\n  ! mbedtls_ssl_setup returned -0x%x\n\n",
 | 
			
		||||
 | 
			
		||||
@ -500,10 +500,10 @@ int main( void )
 | 
			
		||||
    USAGE_SSL_ASYNC                                         \
 | 
			
		||||
    USAGE_SNI                                               \
 | 
			
		||||
    "    allow_sha1=%%d       default: 0\n"                             \
 | 
			
		||||
    "    min_version=%%s      default: (library default: tls1)\n"       \
 | 
			
		||||
    "    min_version=%%s      default: (library default: tls1_2)\n"       \
 | 
			
		||||
    "    max_version=%%s      default: (library default: tls1_2)\n"     \
 | 
			
		||||
    "    force_version=%%s    default: \"\" (none)\n"       \
 | 
			
		||||
    "                        options: tls1, tls1_1, tls1_2, dtls1, dtls1_2\n" \
 | 
			
		||||
    "                        options: tls1_2, dtls1_2\n" \
 | 
			
		||||
    "\n"                                                                \
 | 
			
		||||
    "    version_suites=a,b,c        per-version ciphersuites\n"        \
 | 
			
		||||
    "                                in order from tls1 to tls1_2\n"    \
 | 
			
		||||
@ -1726,12 +1726,7 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "min_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            else
 | 
			
		||||
@ -1739,12 +1734,7 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "max_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 ||
 | 
			
		||||
                     strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            else
 | 
			
		||||
@ -1761,27 +1751,11 @@ int main( int argc, char *argv[] )
 | 
			
		||||
        }
 | 
			
		||||
        else if( strcmp( p, "force_version" ) == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            if( strcmp( q, "tls1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_1;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "tls1_1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "tls1_2" ) == 0 )
 | 
			
		||||
            if( strcmp( q, "tls1_2" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "dtls1" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.max_version = MBEDTLS_SSL_MINOR_VERSION_2;
 | 
			
		||||
                opt.transport = MBEDTLS_SSL_TRANSPORT_DATAGRAM;
 | 
			
		||||
            }
 | 
			
		||||
            else if( strcmp( q, "dtls1_2" ) == 0 )
 | 
			
		||||
            {
 | 
			
		||||
                opt.min_version = MBEDTLS_SSL_MINOR_VERSION_3;
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# default values for options
 | 
			
		||||
MODES="tls1 tls1_1 tls1_2 dtls1 dtls1_2"
 | 
			
		||||
MODES="tls1_2 dtls1_2"
 | 
			
		||||
VERIFIES="NO YES"
 | 
			
		||||
TYPES="ECDSA RSA PSK"
 | 
			
		||||
FILTER=""
 | 
			
		||||
@ -155,19 +155,13 @@ log() {
 | 
			
		||||
# is_dtls <mode>
 | 
			
		||||
is_dtls()
 | 
			
		||||
{
 | 
			
		||||
    test "$1" = "dtls1" -o "$1" = "dtls1_2"
 | 
			
		||||
    test "$1" = "dtls1_2"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# minor_ver <mode>
 | 
			
		||||
minor_ver()
 | 
			
		||||
{
 | 
			
		||||
    case "$1" in
 | 
			
		||||
        tls1)
 | 
			
		||||
            echo 1
 | 
			
		||||
            ;;
 | 
			
		||||
        tls1_1|dtls1)
 | 
			
		||||
            echo 2
 | 
			
		||||
            ;;
 | 
			
		||||
        tls1_2|dtls1_2)
 | 
			
		||||
            echo 3
 | 
			
		||||
            ;;
 | 
			
		||||
@ -841,19 +835,9 @@ setup_arguments()
 | 
			
		||||
{
 | 
			
		||||
    G_MODE=""
 | 
			
		||||
    case "$MODE" in
 | 
			
		||||
        "tls1")
 | 
			
		||||
            G_PRIO_MODE="+VERS-TLS1.0"
 | 
			
		||||
            ;;
 | 
			
		||||
        "tls1_1")
 | 
			
		||||
            G_PRIO_MODE="+VERS-TLS1.1"
 | 
			
		||||
            ;;
 | 
			
		||||
        "tls1_2")
 | 
			
		||||
            G_PRIO_MODE="+VERS-TLS1.2"
 | 
			
		||||
            ;;
 | 
			
		||||
        "dtls1")
 | 
			
		||||
            G_PRIO_MODE="+VERS-DTLS1.0"
 | 
			
		||||
            G_MODE="-u"
 | 
			
		||||
            ;;
 | 
			
		||||
        "dtls1_2")
 | 
			
		||||
            G_PRIO_MODE="+VERS-DTLS1.2"
 | 
			
		||||
            G_MODE="-u"
 | 
			
		||||
 | 
			
		||||
@ -2043,24 +2043,6 @@ component_test_variable_ssl_in_out_buffer_len_CID () {
 | 
			
		||||
    if_build_succeeded tests/compat.sh
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
component_test_variable_ssl_in_out_buffer_len_record_splitting () {
 | 
			
		||||
    msg "build: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled (ASan build)"
 | 
			
		||||
    scripts/config.py set MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH
 | 
			
		||||
    scripts/config.py set MBEDTLS_SSL_CBC_RECORD_SPLITTING
 | 
			
		||||
 | 
			
		||||
    CC=gcc cmake -D CMAKE_BUILD_TYPE:String=Asan .
 | 
			
		||||
    make
 | 
			
		||||
 | 
			
		||||
    msg "test: MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING"
 | 
			
		||||
    make test
 | 
			
		||||
 | 
			
		||||
    msg "test: ssl-opt.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled"
 | 
			
		||||
    if_build_succeeded tests/ssl-opt.sh
 | 
			
		||||
 | 
			
		||||
    msg "test: compat.sh, MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH and MBEDTLS_SSL_CBC_RECORD_SPLITTING enabled"
 | 
			
		||||
    if_build_succeeded tests/compat.sh
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
component_test_ssl_alloc_buffer_and_mfl () {
 | 
			
		||||
    msg "build: default config with memory buffer allocator and MFL extension"
 | 
			
		||||
    scripts/config.py set MBEDTLS_MEMORY_BUFFER_ALLOC_C
 | 
			
		||||
 | 
			
		||||
@ -115,7 +115,7 @@ echo
 | 
			
		||||
echo '################ compat.sh ################'
 | 
			
		||||
{
 | 
			
		||||
    echo '#### compat.sh: Default versions'
 | 
			
		||||
    sh compat.sh -m 'tls1 tls1_1 tls1_2 dtls1 dtls1_2'
 | 
			
		||||
    sh compat.sh -m 'tls1_2 dtls1_2'
 | 
			
		||||
    echo
 | 
			
		||||
 | 
			
		||||
    echo '#### compat.sh: legacy (null, DES, RC4)'
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,6 @@ my %configs = (
 | 
			
		||||
    'config-ccm-psk-tls1_2.h' => {
 | 
			
		||||
        'compat' => '-m tls1_2 -f \'^TLS-PSK-WITH-AES-...-CCM-8\'',
 | 
			
		||||
    },
 | 
			
		||||
    'config-mini-tls1_1.h' => {
 | 
			
		||||
        'compat' => '-m tls1_1 -f \'^DES-CBC3-SHA$\|^TLS-RSA-WITH-3DES-EDE-CBC-SHA$\'', #'
 | 
			
		||||
    },
 | 
			
		||||
    'config-no-entropy.h' => {
 | 
			
		||||
    },
 | 
			
		||||
    'config-suite-b.h' => {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										788
									
								
								tests/ssl-opt.sh
									
									
									
									
									
								
							
							
						
						
									
										788
									
								
								tests/ssl-opt.sh
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user