mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-03-31 10:20:45 +00:00
Merge pull request #5703 from superna9999/5322-ecdh-remove-legacy-context
TLS ECDH 4: remove legacy context
This commit is contained in:
commit
55132c6a9a
@ -616,7 +616,9 @@ struct mbedtls_ssl_handshake_params
|
|||||||
* seem correct.
|
* seem correct.
|
||||||
*/
|
*/
|
||||||
#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
|
#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
|
||||||
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
mbedtls_ecdh_context ecdh_ctx; /*!< ECDH key exchange */
|
mbedtls_ecdh_context ecdh_ctx; /*!< ECDH key exchange */
|
||||||
|
#endif /* !MBEDTLS_USE_PSA_CRYPTO */
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) || defined(MBEDTLS_SSL_PROTO_TLS1_3)
|
#if defined(MBEDTLS_USE_PSA_CRYPTO) || defined(MBEDTLS_SSL_PROTO_TLS1_3)
|
||||||
psa_key_type_t ecdh_psa_type;
|
psa_key_type_t ecdh_psa_type;
|
||||||
|
@ -626,7 +626,7 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake )
|
|||||||
#if defined(MBEDTLS_DHM_C)
|
#if defined(MBEDTLS_DHM_C)
|
||||||
mbedtls_dhm_init( &handshake->dhm_ctx );
|
mbedtls_dhm_init( &handshake->dhm_ctx );
|
||||||
#endif
|
#endif
|
||||||
#if defined(MBEDTLS_ECDH_C)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_ECDH_C)
|
||||||
mbedtls_ecdh_init( &handshake->ecdh_ctx );
|
mbedtls_ecdh_init( &handshake->ecdh_ctx );
|
||||||
#endif
|
#endif
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
||||||
@ -3111,7 +3111,7 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl )
|
|||||||
#if defined(MBEDTLS_DHM_C)
|
#if defined(MBEDTLS_DHM_C)
|
||||||
mbedtls_dhm_free( &handshake->dhm_ctx );
|
mbedtls_dhm_free( &handshake->dhm_ctx );
|
||||||
#endif
|
#endif
|
||||||
#if defined(MBEDTLS_ECDH_C)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_ECDH_C)
|
||||||
mbedtls_ecdh_free( &handshake->ecdh_ctx );
|
mbedtls_ecdh_free( &handshake->ecdh_ctx );
|
||||||
#endif
|
#endif
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
||||||
@ -5345,6 +5345,11 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch
|
|||||||
const unsigned char *psk = NULL;
|
const unsigned char *psk = NULL;
|
||||||
size_t psk_len = 0;
|
size_t psk_len = 0;
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
||||||
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
||||||
|
(void) key_ex;
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO && MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
||||||
|
|
||||||
if( mbedtls_ssl_get_psk( ssl, &psk, &psk_len )
|
if( mbedtls_ssl_get_psk( ssl, &psk, &psk_len )
|
||||||
== MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED )
|
== MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED )
|
||||||
{
|
{
|
||||||
@ -5417,7 +5422,8 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
||||||
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
||||||
if( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
if( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
||||||
{
|
{
|
||||||
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
||||||
@ -5438,7 +5444,7 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch
|
|||||||
MBEDTLS_DEBUG_ECDH_Z );
|
MBEDTLS_DEBUG_ECDH_Z );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
#endif /* !MBEDTLS_USE_PSA_CRYPTO && MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
||||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
@ -870,9 +870,11 @@ static int ssl_parse_supported_point_formats_ext( mbedtls_ssl_context *ssl,
|
|||||||
if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED ||
|
if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED ||
|
||||||
p[0] == MBEDTLS_ECP_PF_COMPRESSED )
|
p[0] == MBEDTLS_ECP_PF_COMPRESSED )
|
||||||
{
|
{
|
||||||
#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
||||||
|
( defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) )
|
||||||
ssl->handshake->ecdh_ctx.point_format = p[0];
|
ssl->handshake->ecdh_ctx.point_format = p[0];
|
||||||
#endif
|
#endif /* !MBEDTLS_USE_PSA_CRYPTO &&
|
||||||
|
( MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C ) */
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
||||||
mbedtls_ecjpake_set_point_format( &ssl->handshake->ecjpake_ctx,
|
mbedtls_ecjpake_set_point_format( &ssl->handshake->ecjpake_ctx,
|
||||||
p[0] );
|
p[0] );
|
||||||
@ -1764,51 +1766,11 @@ static int ssl_parse_server_dh_params( mbedtls_ssl_context *ssl,
|
|||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED ||
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED ||
|
||||||
MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
||||||
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
|
||||||
( !defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
( defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl,
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) ) )
|
|
||||||
static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl )
|
|
||||||
{
|
|
||||||
const mbedtls_ecp_curve_info *curve_info;
|
|
||||||
mbedtls_ecp_group_id grp_id;
|
|
||||||
#if defined(MBEDTLS_ECDH_LEGACY_CONTEXT)
|
|
||||||
grp_id = ssl->handshake->ecdh_ctx.grp.id;
|
|
||||||
#else
|
|
||||||
grp_id = ssl->handshake->ecdh_ctx.grp_id;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
curve_info = mbedtls_ecp_curve_info_from_grp_id( grp_id );
|
|
||||||
if( curve_info == NULL )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
|
||||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
|
||||||
}
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDH curve: %s", curve_info->name ) );
|
|
||||||
|
|
||||||
if( mbedtls_ssl_check_curve( ssl, grp_id ) != 0 )
|
|
||||||
return( -1 );
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
|
||||||
MBEDTLS_DEBUG_ECDH_QP );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED ||
|
|
||||||
( !MBEDTLS_USE_PSA_CRYPTO &&
|
|
||||||
( MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED ) ) */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
|
||||||
( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) )
|
|
||||||
static int ssl_parse_server_ecdh_params_psa( mbedtls_ssl_context *ssl,
|
|
||||||
unsigned char **p,
|
unsigned char **p,
|
||||||
unsigned char *end )
|
unsigned char *end )
|
||||||
{
|
{
|
||||||
@ -1871,13 +1833,35 @@ static int ssl_parse_server_ecdh_params_psa( mbedtls_ssl_context *ssl,
|
|||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO &&
|
#else
|
||||||
( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl )
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ) */
|
{
|
||||||
|
const mbedtls_ecp_curve_info *curve_info;
|
||||||
|
mbedtls_ecp_group_id grp_id;
|
||||||
|
#if defined(MBEDTLS_ECDH_LEGACY_CONTEXT)
|
||||||
|
grp_id = ssl->handshake->ecdh_ctx.grp.id;
|
||||||
|
#else
|
||||||
|
grp_id = ssl->handshake->ecdh_ctx.grp_id;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
curve_info = mbedtls_ecp_curve_info_from_grp_id( grp_id );
|
||||||
|
if( curve_info == NULL )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
}
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDH curve: %s", curve_info->name ) );
|
||||||
|
|
||||||
|
if( mbedtls_ssl_check_curve( ssl, grp_id ) != 0 )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
||||||
|
MBEDTLS_DEBUG_ECDH_QP );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
|
||||||
static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl,
|
static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl,
|
||||||
unsigned char **p,
|
unsigned char **p,
|
||||||
unsigned char *end )
|
unsigned char *end )
|
||||||
@ -1912,6 +1896,7 @@ static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl,
|
|||||||
|
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
|
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
||||||
@ -2337,31 +2322,8 @@ start_processing:
|
|||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED ||
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED ||
|
||||||
MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
||||||
( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) )
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA )
|
|
||||||
{
|
|
||||||
if( ssl_parse_server_ecdh_params_psa( ssl, &p, end ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) );
|
|
||||||
mbedtls_ssl_send_alert_message(
|
|
||||||
ssl,
|
|
||||||
MBEDTLS_SSL_ALERT_LEVEL_FATAL,
|
|
||||||
MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER );
|
|
||||||
return( MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO &&
|
|
||||||
( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ) */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
|
||||||
@ -2831,16 +2793,16 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
||||||
( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) )
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
||||||
{
|
{
|
||||||
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
|
psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
psa_status_t destruction_status = PSA_ERROR_CORRUPTION_DETECTED;
|
psa_status_t destruction_status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
psa_key_attributes_t key_attributes;
|
psa_key_attributes_t key_attributes;
|
||||||
@ -2911,22 +2873,7 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
|
|
||||||
if( status != PSA_SUCCESS || destruction_status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS || destruction_status != PSA_SUCCESS )
|
||||||
return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED );
|
return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED );
|
||||||
}
|
#else
|
||||||
else
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO &&
|
|
||||||
( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA) */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* ECDH key exchange -- send client public value
|
* ECDH key exchange -- send client public value
|
||||||
*/
|
*/
|
||||||
@ -2986,6 +2933,7 @@ ecdh_calc_secret:
|
|||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
||||||
MBEDTLS_DEBUG_ECDH_Z );
|
MBEDTLS_DEBUG_ECDH_Z );
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
||||||
@ -3239,15 +3187,10 @@ ecdh_calc_secret:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
||||||
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
||||||
{
|
{
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
/* Opaque PSKs are currently only supported for PSK-only suites. */
|
|
||||||
if( ssl_conf_has_static_raw_psk( ssl->conf ) == 0 )
|
|
||||||
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ClientECDiffieHellmanPublic public;
|
* ClientECDiffieHellmanPublic public;
|
||||||
*/
|
*/
|
||||||
@ -3266,7 +3209,7 @@ ecdh_calc_secret:
|
|||||||
MBEDTLS_DEBUG_ECDH_Q );
|
MBEDTLS_DEBUG_ECDH_Q );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
#endif /* !MBEDTLS_USE_PSA_CRYPTO && MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
|
||||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
@ -448,9 +448,11 @@ static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl,
|
|||||||
if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED ||
|
if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED ||
|
||||||
p[0] == MBEDTLS_ECP_PF_COMPRESSED )
|
p[0] == MBEDTLS_ECP_PF_COMPRESSED )
|
||||||
{
|
{
|
||||||
#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
|
#if !defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
||||||
|
( defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) )
|
||||||
ssl->handshake->ecdh_ctx.point_format = p[0];
|
ssl->handshake->ecdh_ctx.point_format = p[0];
|
||||||
#endif
|
#endif /* !MBEDTLS_USE_PSA_CRYPTO &&
|
||||||
|
( MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C ) */
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
|
||||||
mbedtls_ecjpake_set_point_format( &ssl->handshake->ecjpake_ctx,
|
mbedtls_ecjpake_set_point_format( &ssl->handshake->ecjpake_ctx,
|
||||||
p[0] );
|
p[0] );
|
||||||
@ -3142,123 +3144,116 @@ curve_matching_done:
|
|||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) );
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) );
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
psa_status_t status = PSA_ERROR_GENERIC_ERROR;
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
psa_key_attributes_t key_attributes;
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
mbedtls_ssl_handshake_params *handshake = ssl->handshake;
|
||||||
|
size_t ecdh_bits = 0;
|
||||||
|
uint8_t *p = ssl->out_msg + ssl->out_msglen;
|
||||||
|
const size_t header_size = 4; // curve_type(1), namedcurve(2),
|
||||||
|
// data length(1)
|
||||||
|
const size_t data_length_size = 1;
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Perform PSA-based ECDH computation." ) );
|
||||||
|
|
||||||
|
/* Convert EC group to PSA key type. */
|
||||||
|
handshake->ecdh_psa_type = mbedtls_psa_parse_tls_ecc_group(
|
||||||
|
(*curve)->tls_id, &ecdh_bits );
|
||||||
|
|
||||||
|
if( handshake->ecdh_psa_type == 0 )
|
||||||
{
|
{
|
||||||
psa_status_t status = PSA_ERROR_GENERIC_ERROR;
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Invalid ecc group parse." ) );
|
||||||
psa_key_attributes_t key_attributes;
|
return( MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER );
|
||||||
mbedtls_ssl_handshake_params *handshake = ssl->handshake;
|
|
||||||
size_t ecdh_bits = 0;
|
|
||||||
uint8_t *p = ssl->out_msg + ssl->out_msglen;
|
|
||||||
const size_t header_size = 4; // curve_type(1), namedcurve(2),
|
|
||||||
// data length(1)
|
|
||||||
const size_t data_length_size = 1;
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Perform PSA-based ECDH computation." ) );
|
|
||||||
|
|
||||||
/* Convert EC group to PSA key type. */
|
|
||||||
handshake->ecdh_psa_type = mbedtls_psa_parse_tls_ecc_group(
|
|
||||||
(*curve)->tls_id, &ecdh_bits );
|
|
||||||
|
|
||||||
if( handshake->ecdh_psa_type == 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "Invalid ecc group parse." ) );
|
|
||||||
return( MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER );
|
|
||||||
}
|
|
||||||
handshake->ecdh_bits = ecdh_bits;
|
|
||||||
|
|
||||||
key_attributes = psa_key_attributes_init();
|
|
||||||
psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_DERIVE );
|
|
||||||
psa_set_key_algorithm( &key_attributes, PSA_ALG_ECDH );
|
|
||||||
psa_set_key_type( &key_attributes, handshake->ecdh_psa_type );
|
|
||||||
psa_set_key_bits( &key_attributes, handshake->ecdh_bits );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ECParameters curve_params
|
|
||||||
*
|
|
||||||
* First byte is curve_type, always named_curve
|
|
||||||
*/
|
|
||||||
*p++ = MBEDTLS_ECP_TLS_NAMED_CURVE;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Next two bytes are the namedcurve value
|
|
||||||
*/
|
|
||||||
MBEDTLS_PUT_UINT16_BE( (*curve)->tls_id, p, 0 );
|
|
||||||
p += 2;
|
|
||||||
|
|
||||||
/* Generate ECDH private key. */
|
|
||||||
status = psa_generate_key( &key_attributes,
|
|
||||||
&handshake->ecdh_psa_privkey );
|
|
||||||
if( status != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
ret = psa_ssl_status_to_mbedtls( status );
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_generate_key", ret );
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ECPoint public
|
|
||||||
*
|
|
||||||
* First byte is data length.
|
|
||||||
* It will be filled later. p holds now the data length location.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Export the public part of the ECDH private key from PSA.
|
|
||||||
* Make one byte space for the length.
|
|
||||||
*/
|
|
||||||
unsigned char *own_pubkey = p + data_length_size;
|
|
||||||
|
|
||||||
size_t own_pubkey_max_len = (size_t)( MBEDTLS_SSL_OUT_CONTENT_LEN
|
|
||||||
- ( own_pubkey - ssl->out_msg ) );
|
|
||||||
|
|
||||||
status = psa_export_public_key( handshake->ecdh_psa_privkey,
|
|
||||||
own_pubkey, own_pubkey_max_len,
|
|
||||||
&len );
|
|
||||||
if( status != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
ret = psa_ssl_status_to_mbedtls( status );
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_export_public_key", ret );
|
|
||||||
(void) psa_destroy_key( handshake->ecdh_psa_privkey );
|
|
||||||
handshake->ecdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT;
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Store the length of the exported public key. */
|
|
||||||
*p = (uint8_t) len;
|
|
||||||
|
|
||||||
/* Determine full message length. */
|
|
||||||
len += header_size;
|
|
||||||
}
|
}
|
||||||
else
|
handshake->ecdh_bits = ecdh_bits;
|
||||||
|
|
||||||
|
key_attributes = psa_key_attributes_init();
|
||||||
|
psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_DERIVE );
|
||||||
|
psa_set_key_algorithm( &key_attributes, PSA_ALG_ECDH );
|
||||||
|
psa_set_key_type( &key_attributes, handshake->ecdh_psa_type );
|
||||||
|
psa_set_key_bits( &key_attributes, handshake->ecdh_bits );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ECParameters curve_params
|
||||||
|
*
|
||||||
|
* First byte is curve_type, always named_curve
|
||||||
|
*/
|
||||||
|
*p++ = MBEDTLS_ECP_TLS_NAMED_CURVE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Next two bytes are the namedcurve value
|
||||||
|
*/
|
||||||
|
MBEDTLS_PUT_UINT16_BE( (*curve)->tls_id, p, 0 );
|
||||||
|
p += 2;
|
||||||
|
|
||||||
|
/* Generate ECDH private key. */
|
||||||
|
status = psa_generate_key( &key_attributes,
|
||||||
|
&handshake->ecdh_psa_privkey );
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
ret = psa_ssl_status_to_mbedtls( status );
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_generate_key", ret );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ECPoint public
|
||||||
|
*
|
||||||
|
* First byte is data length.
|
||||||
|
* It will be filled later. p holds now the data length location.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Export the public part of the ECDH private key from PSA.
|
||||||
|
* Make one byte space for the length.
|
||||||
|
*/
|
||||||
|
unsigned char *own_pubkey = p + data_length_size;
|
||||||
|
|
||||||
|
size_t own_pubkey_max_len = (size_t)( MBEDTLS_SSL_OUT_CONTENT_LEN
|
||||||
|
- ( own_pubkey - ssl->out_msg ) );
|
||||||
|
|
||||||
|
status = psa_export_public_key( handshake->ecdh_psa_privkey,
|
||||||
|
own_pubkey, own_pubkey_max_len,
|
||||||
|
&len );
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
ret = psa_ssl_status_to_mbedtls( status );
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_export_public_key", ret );
|
||||||
|
(void) psa_destroy_key( handshake->ecdh_psa_privkey );
|
||||||
|
handshake->ecdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT;
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Store the length of the exported public key. */
|
||||||
|
*p = (uint8_t) len;
|
||||||
|
|
||||||
|
/* Determine full message length. */
|
||||||
|
len += header_size;
|
||||||
|
#else
|
||||||
|
if( ( ret = mbedtls_ecdh_setup( &ssl->handshake->ecdh_ctx,
|
||||||
|
(*curve)->grp_id ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( ret = mbedtls_ecdh_make_params(
|
||||||
|
&ssl->handshake->ecdh_ctx, &len,
|
||||||
|
ssl->out_msg + ssl->out_msglen,
|
||||||
|
MBEDTLS_SSL_OUT_CONTENT_LEN - ssl->out_msglen,
|
||||||
|
ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
||||||
|
MBEDTLS_DEBUG_ECDH_Q );
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
{
|
|
||||||
if( ( ret = mbedtls_ecdh_setup( &ssl->handshake->ecdh_ctx,
|
|
||||||
(*curve)->grp_id ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret );
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( ret = mbedtls_ecdh_make_params(
|
|
||||||
&ssl->handshake->ecdh_ctx, &len,
|
|
||||||
ssl->out_msg + ssl->out_msglen,
|
|
||||||
MBEDTLS_SSL_OUT_CONTENT_LEN - ssl->out_msglen,
|
|
||||||
ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret );
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED)
|
||||||
dig_signed = ssl->out_msg + ssl->out_msglen;
|
dig_signed = ssl->out_msg + ssl->out_msglen;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ssl->out_msglen += len;
|
ssl->out_msglen += len;
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
|
||||||
MBEDTLS_DEBUG_ECDH_Q );
|
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED */
|
||||||
|
|
||||||
@ -3905,16 +3900,16 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
||||||
( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) )
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
||||||
{
|
{
|
||||||
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
size_t data_len = (size_t)( *p++ );
|
size_t data_len = (size_t)( *p++ );
|
||||||
size_t buf_len = (size_t)( end - p );
|
size_t buf_len = (size_t)( end - p );
|
||||||
psa_status_t status = PSA_ERROR_GENERIC_ERROR;
|
psa_status_t status = PSA_ERROR_GENERIC_ERROR;
|
||||||
@ -3969,22 +3964,7 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
handshake->ecdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT;
|
handshake->ecdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT;
|
||||||
}
|
#else
|
||||||
else
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO &&
|
|
||||||
( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED ||
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED ) */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
|
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
|
|
||||||
ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
|
|
||||||
{
|
|
||||||
if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx,
|
if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx,
|
||||||
p, end - p) ) != 0 )
|
p, end - p) ) != 0 )
|
||||||
{
|
{
|
||||||
@ -4007,6 +3987,7 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
||||||
MBEDTLS_DEBUG_ECDH_Z );
|
MBEDTLS_DEBUG_ECDH_Z );
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
|
||||||
@ -4122,10 +4103,10 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO) && \
|
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
||||||
defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
||||||
{
|
{
|
||||||
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
|
psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
psa_status_t destruction_status = PSA_ERROR_CORRUPTION_DETECTED;
|
psa_status_t destruction_status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
uint8_t ecpoint_len;
|
uint8_t ecpoint_len;
|
||||||
@ -4227,13 +4208,7 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
psm += psk_len;
|
psm += psk_len;
|
||||||
|
|
||||||
ssl->handshake->pmslen = psm - ssl->handshake->premaster;
|
ssl->handshake->pmslen = psm - ssl->handshake->premaster;
|
||||||
}
|
#else
|
||||||
else
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO &&
|
|
||||||
MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
|
|
||||||
if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
|
|
||||||
{
|
|
||||||
if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
|
if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
|
MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
|
||||||
@ -4247,12 +4222,6 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
return( MBEDTLS_ERR_SSL_DECODE_ERROR );
|
return( MBEDTLS_ERR_SSL_DECODE_ERROR );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
|
||||||
/* Opaque PSKs are currently only supported for PSK-only. */
|
|
||||||
if( ssl_use_opaque_psk( ssl ) == 1 )
|
|
||||||
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx,
|
||||||
MBEDTLS_DEBUG_ECDH_QP );
|
MBEDTLS_DEBUG_ECDH_QP );
|
||||||
|
|
||||||
@ -4262,6 +4231,7 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
|
|||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user