mirror of
https://github.com/cuberite/polarssl.git
synced 2025-10-18 12:47:21 -04:00
move get_key_exchange_md_tls12
Signed-off-by: Jerry Yu <jerry.h.yu@arm.com>
This commit is contained in:
parent
9bccc4c63f
commit
ee40f9d4b3
@ -4912,131 +4912,6 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md )
|
|||||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
#endif /* 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,
|
|
||||||
unsigned char *hash, size_t *hashlen,
|
|
||||||
unsigned char *data, size_t data_len,
|
|
||||||
mbedtls_md_type_t md_alg )
|
|
||||||
{
|
|
||||||
psa_status_t status;
|
|
||||||
psa_hash_operation_t hash_operation = PSA_HASH_OPERATION_INIT;
|
|
||||||
psa_algorithm_t hash_alg = mbedtls_psa_translate_md( md_alg );
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform PSA-based computation of digest of ServerKeyExchange" ) );
|
|
||||||
|
|
||||||
if( ( status = psa_hash_setup( &hash_operation,
|
|
||||||
hash_alg ) ) != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_setup", status );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( status = psa_hash_update( &hash_operation, ssl->handshake->randbytes,
|
|
||||||
64 ) ) != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( status = psa_hash_update( &hash_operation,
|
|
||||||
data, data_len ) ) != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( ( status = psa_hash_finish( &hash_operation, hash, PSA_HASH_MAX_SIZE,
|
|
||||||
hashlen ) ) != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_finish", status );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
if( status != PSA_SUCCESS )
|
|
||||||
{
|
|
||||||
mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
|
|
||||||
MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
|
|
||||||
switch( status )
|
|
||||||
{
|
|
||||||
case PSA_ERROR_NOT_SUPPORTED:
|
|
||||||
return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE );
|
|
||||||
case PSA_ERROR_BAD_STATE: /* Intentional fallthrough */
|
|
||||||
case PSA_ERROR_BUFFER_TOO_SMALL:
|
|
||||||
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
|
||||||
case PSA_ERROR_INSUFFICIENT_MEMORY:
|
|
||||||
return( MBEDTLS_ERR_MD_ALLOC_FAILED );
|
|
||||||
default:
|
|
||||||
return( MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
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 )
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
mbedtls_md_context_t ctx;
|
|
||||||
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg );
|
|
||||||
*hashlen = mbedtls_md_get_size( md_info );
|
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform mbedtls-based computation of digest of ServerKeyExchange" ) );
|
|
||||||
|
|
||||||
mbedtls_md_init( &ctx );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* digitally-signed struct {
|
|
||||||
* opaque client_random[32];
|
|
||||||
* opaque server_random[32];
|
|
||||||
* ServerDHParams params;
|
|
||||||
* };
|
|
||||||
*/
|
|
||||||
if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if( ( ret = mbedtls_md_starts( &ctx ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_starts", ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if( ( ret = mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if( ( ret = mbedtls_md_update( &ctx, data, data_len ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if( ( ret = mbedtls_md_finish( &ctx, hash ) ) != 0 )
|
|
||||||
{
|
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_finish", ret );
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
mbedtls_md_free( &ctx );
|
|
||||||
|
|
||||||
if( ret != 0 )
|
|
||||||
mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
|
|
||||||
MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
|
|
||||||
|
|
||||||
return( ret );
|
|
||||||
}
|
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
|
||||||
|
|
||||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
int mbedtls_ssl_get_handshake_transcript( mbedtls_ssl_context *ssl,
|
int mbedtls_ssl_get_handshake_transcript( mbedtls_ssl_context *ssl,
|
||||||
const mbedtls_md_type_t md,
|
const mbedtls_md_type_t md,
|
||||||
@ -7948,6 +7823,127 @@ end:
|
|||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
|
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 )
|
||||||
|
{
|
||||||
|
psa_status_t status;
|
||||||
|
psa_hash_operation_t hash_operation = PSA_HASH_OPERATION_INIT;
|
||||||
|
psa_algorithm_t hash_alg = mbedtls_psa_translate_md( md_alg );
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform PSA-based computation of digest of ServerKeyExchange" ) );
|
||||||
|
|
||||||
|
if( ( status = psa_hash_setup( &hash_operation,
|
||||||
|
hash_alg ) ) != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_setup", status );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = psa_hash_update( &hash_operation, ssl->handshake->randbytes,
|
||||||
|
64 ) ) != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = psa_hash_update( &hash_operation,
|
||||||
|
data, data_len ) ) != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = psa_hash_finish( &hash_operation, hash, PSA_HASH_MAX_SIZE,
|
||||||
|
hashlen ) ) != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_finish", status );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
{
|
||||||
|
mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
|
||||||
|
MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
|
||||||
|
switch( status )
|
||||||
|
{
|
||||||
|
case PSA_ERROR_NOT_SUPPORTED:
|
||||||
|
return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE );
|
||||||
|
case PSA_ERROR_BAD_STATE: /* Intentional fallthrough */
|
||||||
|
case PSA_ERROR_BUFFER_TOO_SMALL:
|
||||||
|
return( MBEDTLS_ERR_MD_BAD_INPUT_DATA );
|
||||||
|
case PSA_ERROR_INSUFFICIENT_MEMORY:
|
||||||
|
return( MBEDTLS_ERR_MD_ALLOC_FAILED );
|
||||||
|
default:
|
||||||
|
return( MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
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 )
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
mbedtls_md_context_t ctx;
|
||||||
|
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg );
|
||||||
|
*hashlen = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform mbedtls-based computation of digest of ServerKeyExchange" ) );
|
||||||
|
|
||||||
|
mbedtls_md_init( &ctx );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* digitally-signed struct {
|
||||||
|
* opaque client_random[32];
|
||||||
|
* opaque server_random[32];
|
||||||
|
* ServerDHParams params;
|
||||||
|
* };
|
||||||
|
*/
|
||||||
|
if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if( ( ret = mbedtls_md_starts( &ctx ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_starts", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if( ( ret = mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if( ( ret = mbedtls_md_update( &ctx, data, data_len ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if( ( ret = mbedtls_md_finish( &ctx, hash ) ) != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_finish", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_md_free( &ctx );
|
||||||
|
|
||||||
|
if( ret != 0 )
|
||||||
|
mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
|
||||||
|
MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
|
|
||||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
||||||
|
|
||||||
#endif /* MBEDTLS_SSL_TLS_C */
|
#endif /* MBEDTLS_SSL_TLS_C */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user