mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-10-31 03:30:35 -04:00 
			
		
		
		
	fix various issues
fix comments, format and name conversion issues Signed-off-by: Jerry Yu <jerry.h.yu@arm.com>
This commit is contained in:
		
							parent
							
								
									f171e836eb
								
							
						
					
					
						commit
						1bc2c1f1a3
					
				| @ -484,9 +484,9 @@ | |||||||
| #define MBEDTLS_TLS_EXT_ALPN                        16 | #define MBEDTLS_TLS_EXT_ALPN                        16 | ||||||
| 
 | 
 | ||||||
| #define MBEDTLS_TLS_EXT_SCT                         18 /* RFC 6962 TLS 1.2 and 1.3 */ | #define MBEDTLS_TLS_EXT_SCT                         18 /* RFC 6962 TLS 1.2 and 1.3 */ | ||||||
| #define MBEDTLS_TLS_EXT_CLI_CERT_TYPE               19 /* RFC 7250 TLS 1.3 */ | #define MBEDTLS_TLS_EXT_CLI_CERT_TYPE               19 /* RFC 7250 TLS 1.2 and 1.3 */ | ||||||
| #define MBEDTLS_TLS_EXT_SERV_CERT_TYPE              20 /* RFC 7250 TLS 1.3 */ | #define MBEDTLS_TLS_EXT_SERV_CERT_TYPE              20 /* RFC 7250 TLS 1.2 and 1.3 */ | ||||||
| #define MBEDTLS_TLS_EXT_PADDING                     21 /* RFC 7685 TLS 1.3 */ | #define MBEDTLS_TLS_EXT_PADDING                     21 /* RFC 7685 TLS 1.2 and 1.3 */ | ||||||
| #define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC            22 /* 0x16 */ | #define MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC            22 /* 0x16 */ | ||||||
| #define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET  0x0017 /* 23 */ | #define MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET  0x0017 /* 23 */ | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -54,25 +54,31 @@ static int ssl_tls13_write_supported_versions_ext( mbedtls_ssl_context *ssl, | |||||||
|     MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported versions extension" ) ); |     MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported versions extension" ) ); | ||||||
| 
 | 
 | ||||||
|     /*
 |     /*
 | ||||||
|      * ExtensionType    2 |      * Reserve space for extension header. | ||||||
|      * ExtensionLength  2 |      * | ||||||
|      * VersionSLength   1 |      * extension_type           2 | ||||||
|      * Version          2 |      * extension_data_length    2 | ||||||
|  |      * version_length           1 | ||||||
|  |      * versions                 2 | ||||||
|      */ |      */ | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( p, end, 7 ); |     MBEDTLS_SSL_CHK_BUF_PTR( p, end, 7 ); | ||||||
| 
 | 
 | ||||||
|     /* Write Extension Type */ |     /* Write extension_type */ | ||||||
|     MBEDTLS_PUT_UINT16_BE( MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS, p, 0 ); |     MBEDTLS_PUT_UINT16_BE( MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS, p, 0 ); | ||||||
| 
 | 
 | ||||||
|     /* Write Extension Length */ |     /* Write extension_data_length */ | ||||||
|     MBEDTLS_PUT_UINT16_BE( 3, p, 2 ); |     MBEDTLS_PUT_UINT16_BE( 3, p, 2 ); | ||||||
|     p += 4; |     p += 4; | ||||||
| 
 | 
 | ||||||
|     /* Length of the SupportedVersions field data */ |     /* Length of versions */ | ||||||
|     *p++ = 0x2; |     *p++ = 0x2; | ||||||
| 
 | 
 | ||||||
|     /* This implementation only supports a single TLS version, and only
 |     /* Write values of supported version.
 | ||||||
|      * advertises a single value. |      * | ||||||
|  |      * They are come from configuration values. And | ||||||
|  |      * ssl_conf_check has valided the values. | ||||||
|  |      * | ||||||
|  |      * Currently, only one vesrion is advertised. | ||||||
|      */ |      */ | ||||||
|     mbedtls_ssl_write_version( ssl->conf->max_major_ver, |     mbedtls_ssl_write_version( ssl->conf->max_major_ver, | ||||||
|                                ssl->conf->max_minor_ver, |                                ssl->conf->max_minor_ver, | ||||||
| @ -115,22 +121,22 @@ static int ssl_tls13_write_key_shares_ext( mbedtls_ssl_context *ssl, | |||||||
| 
 | 
 | ||||||
| #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ | #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ | ||||||
| 
 | 
 | ||||||
| /* Write ciphersuites
 | /*
 | ||||||
|  |  * Functions for writing ClientHello message. | ||||||
|  |  */ | ||||||
|  | /* Write cipher_suites
 | ||||||
|  * CipherSuite cipher_suites<2..2^16-2>; |  * CipherSuite cipher_suites<2..2^16-2>; | ||||||
|  */ |  */ | ||||||
| static int ssl_tls13_write_client_hello_ciphersuites( | static int ssl_tls13_write_client_hello_cipher_suites( | ||||||
|             mbedtls_ssl_context *ssl, |             mbedtls_ssl_context *ssl, | ||||||
|             unsigned char *buf, |             unsigned char *buf, | ||||||
|             unsigned char *end, |             unsigned char *end, | ||||||
|             size_t *olen ) |             size_t *olen ) | ||||||
| { | { | ||||||
|     /* Ciphersuite-related variables */ |     const int *cipher_suite_list; | ||||||
|     const int *ciphersuites; |     unsigned char *cipher_suites_start; /* start of the cipher_suite_list */ | ||||||
|     const mbedtls_ssl_ciphersuite_t *ciphersuite_info; |     unsigned char *cipher_suites_iter;  /* iteration of the cipher_suite_list */ | ||||||
|     /*  ciphersuite_start points to the start of
 |     size_t cipher_suites_len; | ||||||
|         the ciphersuite list, i.e. to the length field*/ |  | ||||||
|     unsigned char *ciphersuite_start, *ciphersuite_iter; |  | ||||||
|     size_t buf_len; |  | ||||||
| 
 | 
 | ||||||
|     *olen = 0 ; |     *olen = 0 ; | ||||||
| 
 | 
 | ||||||
| @ -142,69 +148,70 @@ static int ssl_tls13_write_client_hello_ciphersuites( | |||||||
|      * ( including secret key length ) and a hash to be used with |      * ( including secret key length ) and a hash to be used with | ||||||
|      * HKDF, in descending order of client preference. |      * HKDF, in descending order of client preference. | ||||||
|      */ |      */ | ||||||
|     ciphersuites = ssl->conf->ciphersuite_list; |     cipher_suite_list = ssl->conf->ciphersuite_list; | ||||||
| 
 | 
 | ||||||
|     /* Check available spaces for ciphersuite */ |     /* Check there is space for the cipher suite list length (2 bytes). */ | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); | ||||||
| 
 | 
 | ||||||
|     /* Write ciphersuites */ |     /* Write cipher_suite_list */ | ||||||
|     ciphersuite_start = buf + 2; |     cipher_suites_start = buf + 2; | ||||||
|     ciphersuite_iter  = ciphersuite_start; |     cipher_suites_iter  = cipher_suites_start; | ||||||
| 
 | 
 | ||||||
|     for ( size_t i = 0; ciphersuites[i] != 0; i++ ) |     for ( size_t i = 0; cipher_suite_list[i] != 0; i++ ) | ||||||
|     { |     { | ||||||
|         ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( ciphersuites[i] ); |         int cipher_suite = cipher_suite_list[i]; | ||||||
|  |         const mbedtls_ssl_ciphersuite_t *ciphersuite_info; | ||||||
| 
 | 
 | ||||||
|  |         ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( cipher_suite ); | ||||||
|         if( ciphersuite_info == NULL ) |         if( ciphersuite_info == NULL ) | ||||||
|             continue; |             continue; | ||||||
| 
 |  | ||||||
|         if( ciphersuite_info->min_minor_ver != MBEDTLS_SSL_MINOR_VERSION_4 || |         if( ciphersuite_info->min_minor_ver != MBEDTLS_SSL_MINOR_VERSION_4 || | ||||||
|             ciphersuite_info->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_4 ) |             ciphersuite_info->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_4 ) | ||||||
|             continue; |             continue; | ||||||
| 
 | 
 | ||||||
|         MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, add ciphersuite: %04x, %s", |         MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, add ciphersuite: %04x, %s", | ||||||
|                                     (unsigned int) ciphersuites[i], |                                     (unsigned int) cipher_suite, | ||||||
|                                     ciphersuite_info->name ) ); |                                     ciphersuite_info->name ) ); | ||||||
| 
 | 
 | ||||||
|         /* Check for available spaces */ |         /* Check there is space for the cipher suite identifier (2 bytes). */ | ||||||
|         MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); |         MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); | ||||||
| 
 |         MBEDTLS_PUT_UINT16_BE( cipher_suite, cipher_suites_iter, 0 ); | ||||||
|         MBEDTLS_PUT_UINT16_BE( ciphersuites[i], ciphersuite_iter, 0 ); |         cipher_suites_iter += 2; | ||||||
|         ciphersuite_iter += 2; |  | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     buf_len = ciphersuite_iter - ciphersuite_start; |     /* Write the cipher_suite_list length in number of bytes */ | ||||||
| 
 |     cipher_suites_len = cipher_suites_iter - cipher_suites_start; | ||||||
|     /* write ciphersuite buf length */ |     MBEDTLS_PUT_UINT16_BE( cipher_suites_len, buf, 0 ); | ||||||
|     MBEDTLS_PUT_UINT16_BE( buf_len, buf, 0 ); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     MBEDTLS_SSL_DEBUG_MSG( 3, |     MBEDTLS_SSL_DEBUG_MSG( 3, | ||||||
|                            ( "client hello, got %" MBEDTLS_PRINTF_SIZET " ciphersuites", |                            ( "client hello, got %" MBEDTLS_PRINTF_SIZET " cipher suites", | ||||||
|                              buf_len/2 ) ); |                              cipher_suites_len/2 ) ); | ||||||
| 
 | 
 | ||||||
|     *olen = ciphersuite_iter - buf; |     /* Output the total length of cipher_suites field. */ | ||||||
|  |     *olen = cipher_suites_iter - buf; | ||||||
| 
 | 
 | ||||||
|     return( 0 ); |     return( 0 ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Functions for writing ClientHello message */ | /*
 | ||||||
|  |  * Structure of ClientHello message: | ||||||
|  |  * | ||||||
|  |  *    struct { | ||||||
|  |  *        ProtocolVersion legacy_version = 0x0303;    // TLS v1.2
 | ||||||
|  |  *        Random random; | ||||||
|  |  *        opaque legacy_session_id<0..32>; | ||||||
|  |  *        CipherSuite cipher_suites<2..2^16-2>; | ||||||
|  |  *        opaque legacy_compression_methods<1..2^8-1>; | ||||||
|  |  *        Extension extensions<8..2^16-1>; | ||||||
|  |  *    } ClientHello; | ||||||
|  |  */ | ||||||
| static int ssl_tls13_write_client_hello_body( mbedtls_ssl_context *ssl, | static int ssl_tls13_write_client_hello_body( mbedtls_ssl_context *ssl, | ||||||
|                                               unsigned char *buf, |                                               unsigned char *buf, | ||||||
|                                               size_t buflen, |                                               size_t buflen, | ||||||
|                                               size_t *len_with_binders ) |                                               size_t *olen ) | ||||||
| { | { | ||||||
|     /* Extensions */ |  | ||||||
| 
 | 
 | ||||||
|     /* extension_start
 |  | ||||||
|      *    Used during extension writing where the |  | ||||||
|      *    buffer pointer to the beginning of the |  | ||||||
|      *    extension list must be kept to write |  | ||||||
|      *    the total extension list size in the end. |  | ||||||
|      */ |  | ||||||
|     int ret; |     int ret; | ||||||
|     unsigned char *extension_start; |     unsigned char *extension_start; /* Start of extensions buffer */ | ||||||
|     size_t cur_ext_len;             /* Size of the current extension */ |     size_t cur_ext_len;             /* Size of the current extension */ | ||||||
|     size_t total_ext_len;           /* Size of list of extensions    */ |     size_t total_ext_len;           /* Size of list of extensions    */ | ||||||
| 
 | 
 | ||||||
| @ -212,94 +219,75 @@ static int ssl_tls13_write_client_hello_body( mbedtls_ssl_context *ssl, | |||||||
|     unsigned char *start = buf; |     unsigned char *start = buf; | ||||||
|     unsigned char *end = buf + buflen; |     unsigned char *end = buf + buflen; | ||||||
| 
 | 
 | ||||||
|     *len_with_binders = 0; |     *olen = 0; | ||||||
| 
 |  | ||||||
|     /* Keeping track of the included extensions */ |  | ||||||
|     ssl->handshake->extensions_present = MBEDTLS_SSL_EXT_NONE; |  | ||||||
| 
 |  | ||||||
|     /* NOTE:
 |  | ||||||
|      * Even for DTLS 1.3, we are writing a TLS handshake header here. |  | ||||||
|      * The actual DTLS 1.3 handshake header is inserted in |  | ||||||
|      * the record writing routine mbedtls_ssl_write_record(). |  | ||||||
|      * |  | ||||||
|      * For cTLS the length, and the version field |  | ||||||
|      * are elided. The random bytes are shorter. |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
|     if( ssl->conf->max_major_ver == 0 ) |  | ||||||
|     { |  | ||||||
|         MBEDTLS_SSL_DEBUG_MSG( 1, ( "configured max major version is invalid, " |  | ||||||
|                                     "consider using mbedtls_ssl_config_defaults()" ) ); |  | ||||||
|         return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|  |     /* No validation needed here. It has been done by ssl_conf_check() */ | ||||||
|     ssl->major_ver = ssl->conf->min_major_ver; |     ssl->major_ver = ssl->conf->min_major_ver; | ||||||
|     ssl->minor_ver = ssl->conf->min_minor_ver; |     ssl->minor_ver = ssl->conf->min_minor_ver; | ||||||
| 
 | 
 | ||||||
|     /* Write legacy_version
 |     /*
 | ||||||
|  |      * Write legacy_version | ||||||
|      *    ProtocolVersion legacy_version = 0x0303;    // TLS v1.2
 |      *    ProtocolVersion legacy_version = 0x0303;    // TLS v1.2
 | ||||||
|  |      * | ||||||
|      *  For TLS 1.3 we use the legacy version number {0x03, 0x03} |      *  For TLS 1.3 we use the legacy version number {0x03, 0x03} | ||||||
|      *  instead of the true version number. |      *  instead of the true version number. | ||||||
|      * |  | ||||||
|      *  For DTLS 1.3 we use the legacy version number |  | ||||||
|      *  {254,253}. |  | ||||||
|      * |  | ||||||
|      *  In cTLS the version number is elided. |  | ||||||
|      */ |      */ | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, CLIENT_HELLO_LEGACY_VERSION_LEN ); |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, CLIENT_HELLO_LEGACY_VERSION_LEN ); | ||||||
|     MBEDTLS_PUT_UINT16_BE( 0x0303, buf, 0 ); |     MBEDTLS_PUT_UINT16_BE( 0x0303, buf, 0 ); | ||||||
|     buf += CLIENT_HELLO_LEGACY_VERSION_LEN; |     buf += CLIENT_HELLO_LEGACY_VERSION_LEN; | ||||||
| 
 | 
 | ||||||
|     /* Write random bytes
 |     /* Write the random bytes ( random ).*/ | ||||||
|             Random random |  | ||||||
|     */ |  | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, CLIENT_HELLO_RANDOM_LEN ); |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, CLIENT_HELLO_RANDOM_LEN ); | ||||||
|     memcpy( buf, ssl->handshake->randbytes, CLIENT_HELLO_RANDOM_LEN ); |     memcpy( buf, ssl->handshake->randbytes, CLIENT_HELLO_RANDOM_LEN ); | ||||||
|     MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, random bytes", |     MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, random bytes", | ||||||
|                            buf, CLIENT_HELLO_RANDOM_LEN ); |                            buf, CLIENT_HELLO_RANDOM_LEN ); | ||||||
| 
 |  | ||||||
|     buf += CLIENT_HELLO_RANDOM_LEN; |     buf += CLIENT_HELLO_RANDOM_LEN; | ||||||
| 
 | 
 | ||||||
|     /* Versions of TLS before TLS 1.3 supported a
 |     /*
 | ||||||
|      * "session resumption" feature which has been merged with pre-shared |      * Write legacy_session_id | ||||||
|      * keys in this version. A client which has a |      * | ||||||
|      * cached session ID set by a pre-TLS 1.3 server SHOULD set this |      * Versions of TLS before TLS 1.3 supported a "session resumption" feature | ||||||
|      * field to that value. In compatibility mode, |      * which has been merged with pre-shared keys in this version. A client | ||||||
|      * this field MUST be non-empty, so a client not offering a |      * which has a cached session ID set by a pre-TLS 1.3 server SHOULD set | ||||||
|      * pre-TLS 1.3 session MUST generate a new 32-byte value. This value |      * this field to that value. In compatibility mode, this field MUST be | ||||||
|      * need not be random but SHOULD be unpredictable to avoid |      * non-empty, so a client not offering a pre-TLS 1.3 session MUST generate | ||||||
|      * implementations fixating on a specific value ( also known as |      * a new 32-byte value. This value need not be random but SHOULD be | ||||||
|      * ossification ). Otherwise, it MUST be set as a zero-length vector |      * unpredictable to avoid implementations fixating on a specific value | ||||||
|      * ( i.e., a zero-valued single byte length field ). |      * ( also known as ossification ). Otherwise, it MUST be set as a zero-length | ||||||
|  |      * vector ( i.e., a zero-valued single byte length field ). | ||||||
|      */ |      */ | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 1 ); |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 1 ); | ||||||
|     *buf++ = 0; /* session id length set to zero */ |     *buf++ = 0; /* session id length set to zero */ | ||||||
| 
 | 
 | ||||||
|     /* Write ciphersuites */ |     /* Write cipher_suites */ | ||||||
|     ret = ssl_tls13_write_client_hello_ciphersuites( ssl, buf, end, &cur_ext_len ); |     ret = ssl_tls13_write_client_hello_cipher_suites( ssl, buf, end, &cur_ext_len ); | ||||||
|     if( ret != 0) |     if( ret != 0) | ||||||
|         return( ret ); |         return( ret ); | ||||||
|     buf += cur_ext_len; |     buf += cur_ext_len; | ||||||
| 
 | 
 | ||||||
|     /* For every TLS 1.3 ClientHello, this vector MUST contain exactly
 |     /* Write legacy_compression_methods
 | ||||||
|  |      * | ||||||
|  |      * For every TLS 1.3 ClientHello, this vector MUST contain exactly | ||||||
|      * one byte set to zero, which corresponds to the 'null' compression |      * one byte set to zero, which corresponds to the 'null' compression | ||||||
|      * method in prior versions of TLS. |      * method in prior versions of TLS. | ||||||
|      * |  | ||||||
|      * For cTLS this field is elided. |  | ||||||
|      */ |      */ | ||||||
|     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); | ||||||
|     *buf++ = 1; |     *buf++ = 1; | ||||||
|     *buf++ = MBEDTLS_SSL_COMPRESS_NULL; |     *buf++ = MBEDTLS_SSL_COMPRESS_NULL; | ||||||
| 
 | 
 | ||||||
|  |     /* Write extensions */ | ||||||
|  | 
 | ||||||
|  |     /* Keeping track of the included extensions */ | ||||||
|  |     ssl->handshake->extensions_present = MBEDTLS_SSL_EXT_NONE; | ||||||
| 
 | 
 | ||||||
|     /* First write extensions, then the total length */ |     /* First write extensions, then the total length */ | ||||||
|  |     MBEDTLS_SSL_CHK_BUF_PTR( buf, end, 2 ); | ||||||
|     extension_start = buf; |     extension_start = buf; | ||||||
|     buf += 2; |     buf += 2; | ||||||
| 
 | 
 | ||||||
|     /* Supported Versions Extension is mandatory with TLS 1.3.
 |     /* Write supported_versions extension
 | ||||||
|      * |      * | ||||||
|      * For cTLS we only need to provide it if there is more than one version |      * Supported Versions Extension is mandatory with TLS 1.3. | ||||||
|      * and currently there is only one. |  | ||||||
|      */ |      */ | ||||||
|     ret = ssl_tls13_write_supported_versions_ext( ssl, buf, end, &cur_ext_len ); |     ret = ssl_tls13_write_supported_versions_ext( ssl, buf, end, &cur_ext_len ); | ||||||
|     if( ret != 0 ) |     if( ret != 0 ) | ||||||
| @ -307,22 +295,18 @@ static int ssl_tls13_write_client_hello_body( mbedtls_ssl_context *ssl, | |||||||
|     buf += cur_ext_len; |     buf += cur_ext_len; | ||||||
| 
 | 
 | ||||||
| #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) | #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) | ||||||
|     /* The supported_groups and the key_share extensions are
 |     /* Write supported_groups extension
 | ||||||
|      * REQUIRED for ECDHE ciphersuites. |      * | ||||||
|  |      * It is REQUIRED for ECDHE cipher_suites. | ||||||
|      */ |      */ | ||||||
|     ret = ssl_tls13_write_supported_groups_ext( ssl, buf, end, &cur_ext_len ); |     ret = ssl_tls13_write_supported_groups_ext( ssl, buf, end, &cur_ext_len ); | ||||||
|     if( ret != 0 ) |     if( ret != 0 ) | ||||||
|         return( ret ); |         return( ret ); | ||||||
|     buf += cur_ext_len; |     buf += cur_ext_len; | ||||||
| 
 | 
 | ||||||
|     /* The supported_signature_algorithms extension is REQUIRED for
 |     /* Write key_share extension
 | ||||||
|      * certificate authenticated ciphersuites. */ |      * | ||||||
|     ret = mbedtls_ssl_tls13_write_sig_alg_ext( ssl, buf, end, &cur_ext_len ); |      * We need to send the key shares under three conditions: | ||||||
|     if( ret != 0 ) |  | ||||||
|         return( ret ); |  | ||||||
|     buf += cur_ext_len; |  | ||||||
| 
 |  | ||||||
|     /* We need to send the key shares under three conditions:
 |  | ||||||
|      * 1) A certificate-based ciphersuite is being offered. In this case |      * 1) A certificate-based ciphersuite is being offered. In this case | ||||||
|      *    supported_groups and supported_signature extensions have been |      *    supported_groups and supported_signature extensions have been | ||||||
|      *    successfully added. |      *    successfully added. | ||||||
| @ -331,27 +315,32 @@ static int ssl_tls13_write_client_hello_body( mbedtls_ssl_context *ssl, | |||||||
|      * 3) Or, in case all ciphers are supported ( which includes #1 and #2 |      * 3) Or, in case all ciphers are supported ( which includes #1 and #2 | ||||||
|      *    from above ) |      *    from above ) | ||||||
|      */ |      */ | ||||||
| 
 |  | ||||||
|     ret = ssl_tls13_write_key_shares_ext( ssl, buf, end, &cur_ext_len ); |     ret = ssl_tls13_write_key_shares_ext( ssl, buf, end, &cur_ext_len ); | ||||||
|     if( ret != 0 ) |     if( ret != 0 ) | ||||||
|         return( ret ); |         return( ret ); | ||||||
|     buf += cur_ext_len; |     buf += cur_ext_len; | ||||||
| 
 | 
 | ||||||
|  |     /* Write signature_algorithms extension
 | ||||||
|  |      * | ||||||
|  |      * It is REQUIRED for certificate authenticated cipher_suites. | ||||||
|  |      */ | ||||||
|  |     ret = mbedtls_ssl_tls13_write_sig_alg_ext( ssl, buf, end, &cur_ext_len ); | ||||||
|  |     if( ret != 0 ) | ||||||
|  |         return( ret ); | ||||||
|  |     buf += cur_ext_len; | ||||||
|  | 
 | ||||||
| #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ | #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ | ||||||
| 
 | 
 | ||||||
|     /* Add more extensions here */ |     /* Add more extensions here */ | ||||||
| 
 | 
 | ||||||
|  |     /* Write the length of the list of extensions. */ | ||||||
|     total_ext_len = buf - extension_start - 2; |     total_ext_len = buf - extension_start - 2; | ||||||
|     MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, total extension length: %" MBEDTLS_PRINTF_SIZET , |     MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, total extension length: %" MBEDTLS_PRINTF_SIZET , | ||||||
|                                 total_ext_len ) ); |                                 total_ext_len ) ); | ||||||
| 
 |  | ||||||
|     MBEDTLS_SSL_DEBUG_BUF( 3, "client hello extensions", extension_start, total_ext_len ); |     MBEDTLS_SSL_DEBUG_BUF( 3, "client hello extensions", extension_start, total_ext_len ); | ||||||
| 
 |  | ||||||
|     /* Write extension length */ |  | ||||||
|     MBEDTLS_PUT_UINT16_BE( total_ext_len, extension_start, 0 ); |     MBEDTLS_PUT_UINT16_BE( total_ext_len, extension_start, 0 ); | ||||||
|     extension_start += 2; |  | ||||||
| 
 | 
 | ||||||
|     *len_with_binders = buf - start; |     *olen = buf - start; | ||||||
|     return( 0 ); |     return( 0 ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -384,17 +373,6 @@ static int ssl_tls13_prepare_client_hello( mbedtls_ssl_context *ssl ) | |||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Write ClientHello handshake message. |  * Write ClientHello handshake message. | ||||||
|  * |  | ||||||
|  * Structure of this message: |  | ||||||
|  * |  | ||||||
|  *    struct { |  | ||||||
|  *        ProtocolVersion legacy_version = 0x0303;    // TLS v1.2
 |  | ||||||
|  *        Random random; |  | ||||||
|  *        opaque legacy_session_id<0..32>; |  | ||||||
|  *        CipherSuite cipher_suites<2..2^16-2>; |  | ||||||
|  *        opaque legacy_compression_methods<1..2^8-1>; |  | ||||||
|  *        Extension extensions<8..2^16-1>; |  | ||||||
|  *    } ClientHello; |  | ||||||
|  */ |  */ | ||||||
| static int ssl_tls13_write_client_hello( mbedtls_ssl_context *ssl ) | static int ssl_tls13_write_client_hello( mbedtls_ssl_context *ssl ) | ||||||
| { | { | ||||||
|  | |||||||
| @ -32,6 +32,13 @@ int mbedtls_ssl_tls13_start_handshake_msg( mbedtls_ssl_context *ssl, | |||||||
|                                            unsigned char **buf, |                                            unsigned char **buf, | ||||||
|                                            size_t *buflen ) |                                            size_t *buflen ) | ||||||
| { | { | ||||||
|  |     /*
 | ||||||
|  |      * Reserve 4 bytes for hanshake header. ( Section 4,RFC 8446 ) | ||||||
|  |      *    ... | ||||||
|  |      *    HandshakeType msg_type; | ||||||
|  |      *    uint24 length; | ||||||
|  |      *    ... | ||||||
|  |      */ | ||||||
|     *buf = ssl->out_msg + 4; |     *buf = ssl->out_msg + 4; | ||||||
|     *buflen = MBEDTLS_SSL_OUT_CONTENT_LEN - 4; |     *buflen = MBEDTLS_SSL_OUT_CONTENT_LEN - 4; | ||||||
| 
 | 
 | ||||||
| @ -48,6 +55,7 @@ int mbedtls_ssl_tls13_finish_handshake_msg( mbedtls_ssl_context *ssl, | |||||||
|     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; |     int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; | ||||||
|     ((void) buf_len); |     ((void) buf_len); | ||||||
| 
 | 
 | ||||||
|  |     /* Add reserved 4 bytes for handshake header */ | ||||||
|     ssl->out_msglen = msg_len + 4; |     ssl->out_msglen = msg_len + 4; | ||||||
|     MBEDTLS_SSL_PROC_CHK( mbedtls_ssl_write_handshake_msg_ext, ( ssl, 0 ) ); |     MBEDTLS_SSL_PROC_CHK( mbedtls_ssl_write_handshake_msg_ext, ( ssl, 0 ) ); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jerry Yu
						Jerry Yu