ssl_write_server_key_exchange refactor: minor cleanup
Clean up some debug messages and improve some comments.
This commit is contained in:
parent
ebd30ae205
commit
d3eb0619a6
1 changed files with 28 additions and 16 deletions
|
@ -2837,25 +2837,26 @@ static int ssl_resume_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
ssl->handshake->p_async_operation_ctx,
|
ssl->handshake->p_async_operation_ctx,
|
||||||
ssl->out_msg + ssl->out_msglen + 2,
|
ssl->out_msg + ssl->out_msglen + 2,
|
||||||
signature_len, sig_max_len );
|
signature_len, sig_max_len );
|
||||||
MBEDTLS_SSL_DEBUG_RET( 3, "f_async_resume", ret );
|
|
||||||
if( ret != MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS )
|
if( ret != MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS )
|
||||||
{
|
{
|
||||||
ssl->handshake->p_async_operation_ctx = NULL;
|
ssl->handshake->p_async_operation_ctx = NULL;
|
||||||
}
|
}
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 2, "ssl_resume_server_key_exchange", ret );
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
#endif /* defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) &&
|
#endif /* defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) &&
|
||||||
defined(MBEDTLS_SSL_ASYNC_PRIVATE_C) */
|
defined(MBEDTLS_SSL_ASYNC_PRIVATE_C) */
|
||||||
|
|
||||||
|
/* Prepare the ServerKeyExchange message, up to and including
|
||||||
|
calculating the signature if any, but excluding formatting the
|
||||||
|
signature and sending the message. */
|
||||||
static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
size_t *signature_len )
|
size_t *signature_len )
|
||||||
{
|
{
|
||||||
const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
|
const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
|
||||||
ssl->transform_negotiate->ciphersuite_info;
|
ssl->transform_negotiate->ciphersuite_info;
|
||||||
|
|
||||||
unsigned char *p = ssl->out_msg + 4;
|
unsigned char *p = ssl->out_msg + 4;
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED)
|
||||||
size_t len;
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
|
||||||
unsigned char *dig_signed = NULL;
|
unsigned char *dig_signed = NULL;
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED */
|
||||||
|
@ -2863,8 +2864,6 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
(void) ciphersuite_info; /* unused in some configurations */
|
(void) ciphersuite_info; /* unused in some configurations */
|
||||||
(void) signature_len; /* unused in some configurations */
|
(void) signature_len; /* unused in some configurations */
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server key exchange" ) );
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Part 1: Provide key exchange parameters for chosen ciphersuite.
|
* Part 1: Provide key exchange parameters for chosen ciphersuite.
|
||||||
|
@ -2879,6 +2878,7 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN;
|
const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx,
|
ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx,
|
||||||
p, end - p, &len, ssl->conf->f_rng, ssl->conf->p_rng );
|
p, end - p, &len, ssl->conf->f_rng, ssl->conf->p_rng );
|
||||||
|
@ -2915,6 +2915,7 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
if( mbedtls_ssl_ciphersuite_uses_dhe( ciphersuite_info ) )
|
if( mbedtls_ssl_ciphersuite_uses_dhe( ciphersuite_info ) )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL )
|
if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL )
|
||||||
{
|
{
|
||||||
|
@ -2976,6 +2977,7 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl,
|
||||||
const mbedtls_ecp_curve_info **curve = NULL;
|
const mbedtls_ecp_curve_info **curve = NULL;
|
||||||
const mbedtls_ecp_group_id *gid;
|
const mbedtls_ecp_group_id *gid;
|
||||||
int ret;
|
int ret;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
/* Match our preference list against the offered curves */
|
/* Match our preference list against the offered curves */
|
||||||
for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ )
|
for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ )
|
||||||
|
@ -3211,7 +3213,6 @@ curve_matching_done:
|
||||||
case 0:
|
case 0:
|
||||||
return( ssl_resume_server_key_exchange( ssl, signature_len ) );
|
return( ssl_resume_server_key_exchange( ssl, signature_len ) );
|
||||||
case MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS:
|
case MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS:
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange (pending)" ) );
|
|
||||||
return( MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS );
|
return( MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS );
|
||||||
default:
|
default:
|
||||||
MBEDTLS_SSL_DEBUG_RET( 1, "f_async_sign", ret );
|
MBEDTLS_SSL_DEBUG_RET( 1, "f_async_sign", ret );
|
||||||
|
@ -3242,17 +3243,24 @@ curve_matching_done:
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prepare the ServerKeyExchange message and send it. For ciphersuites
|
||||||
|
that do not include a ServerKeyExchange message, do nothing. Either
|
||||||
|
way, if successful, move on to the next step in the SSL state
|
||||||
|
machine */
|
||||||
static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
|
static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
size_t signature_len = 0;
|
size_t signature_len = 0;
|
||||||
|
|
||||||
/* Extract static ECDH parameters and abort if ServerKeyExchange
|
|
||||||
* is not needed. */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED)
|
||||||
const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
|
const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
|
||||||
ssl->transform_negotiate->ciphersuite_info;
|
ssl->transform_negotiate->ciphersuite_info;
|
||||||
|
#endif /* MBEDTLS_KEY_EXCHANGE__NON_PFS__ENABLED */
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server key exchange" ) );
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED)
|
||||||
|
/* Extract static ECDH parameters and abort if ServerKeyExchange
|
||||||
|
* is not needed. */
|
||||||
if( mbedtls_ssl_ciphersuite_no_pfs( ciphersuite_info ) )
|
if( mbedtls_ssl_ciphersuite_no_pfs( ciphersuite_info ) )
|
||||||
{
|
{
|
||||||
/* For suites involving ECDH, extract DH parameters
|
/* For suites involving ECDH, extract DH parameters
|
||||||
|
@ -3272,16 +3280,14 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_KEY_EXCHANGE__NON_PFS__ENABLED */
|
#endif /* MBEDTLS_KEY_EXCHANGE__NON_PFS__ENABLED */
|
||||||
|
|
||||||
/* If we have already prepared the message and there is an ongoing
|
|
||||||
signature operation, resume signing. */
|
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) && \
|
#if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) && \
|
||||||
defined(MBEDTLS_SSL_ASYNC_PRIVATE_C)
|
defined(MBEDTLS_SSL_ASYNC_PRIVATE_C)
|
||||||
|
/* If we have already prepared the message and there is an ongoing
|
||||||
|
signature operation, resume signing. */
|
||||||
if( ssl->handshake->p_async_operation_ctx != NULL )
|
if( ssl->handshake->p_async_operation_ctx != NULL )
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "resuming signature operation" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "resuming signature operation" ) );
|
||||||
ret = ssl_resume_server_key_exchange( ssl, &signature_len );
|
ret = ssl_resume_server_key_exchange( ssl, &signature_len );
|
||||||
if( ret != 0 )
|
|
||||||
return( ret );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) &&
|
#endif /* defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED) &&
|
||||||
|
@ -3289,8 +3295,15 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
|
||||||
{
|
{
|
||||||
/* ServerKeyExchange is needed. Prepare the message. */
|
/* ServerKeyExchange is needed. Prepare the message. */
|
||||||
ret = ssl_prepare_server_key_exchange( ssl, &signature_len );
|
ret = ssl_prepare_server_key_exchange( ssl, &signature_len );
|
||||||
if( ret != 0 )
|
}
|
||||||
return( ret );
|
|
||||||
|
if( ret != 0 )
|
||||||
|
{
|
||||||
|
if( ret == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS )
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange (pending)" ) );
|
||||||
|
else
|
||||||
|
ssl->out_msglen = 0;
|
||||||
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there is a signature, write its length.
|
/* If there is a signature, write its length.
|
||||||
|
@ -3324,7 +3337,6 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
|
||||||
}
|
}
|
||||||
|
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue