No memmove: ssl_parse_server_key_exchange()

This commit is contained in:
Manuel Pégourié-Gonnard 2014-09-10 15:15:51 +00:00 committed by Paul Bakker
parent 4528f3f5c0
commit f4830b5092

View file

@ -1776,8 +1776,6 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
return( ret ); return( ret );
} }
ssl_hs_rm_dtls_hdr( ssl );
if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) if( ssl->in_msgtype != SSL_MSG_HANDSHAKE )
{ {
SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) );
@ -1793,6 +1791,7 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK ||
ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK ) ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_RSA_PSK )
{ {
ssl_hs_rm_dtls_hdr( ssl );
ssl->record_read = 1; ssl->record_read = 1;
goto exit; goto exit;
} }
@ -1801,9 +1800,9 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE ); return( POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE );
} }
p = ssl->in_msg + 4; p = ssl->in_msg + ssl_hs_hdr_len( ssl );
end = ssl->in_msg + ssl->in_hslen; end = ssl->in_msg + ssl->in_hslen;
SSL_DEBUG_BUF( 3, "server key exchange", p, ssl->in_hslen - 4 ); SSL_DEBUG_BUF( 3, "server key exchange", p, end - p );
#if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED) #if defined(POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED)
if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK || if( ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_PSK ||
@ -1870,7 +1869,8 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA || ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_RSA ||
ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA ) ciphersuite_info->key_exchange == POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA )
{ {
params_len = p - ( ssl->in_msg + 4 ); unsigned char *params = ssl->in_msg + ssl_hs_hdr_len( ssl );
params_len = p - params;
/* /*
* Handle the digitally-signed structure * Handle the digitally-signed structure
@ -1954,12 +1954,12 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
*/ */
md5_starts( &md5 ); md5_starts( &md5 );
md5_update( &md5, ssl->handshake->randbytes, 64 ); md5_update( &md5, ssl->handshake->randbytes, 64 );
md5_update( &md5, ssl->in_msg + 4, params_len ); md5_update( &md5, params, params_len );
md5_finish( &md5, hash ); md5_finish( &md5, hash );
sha1_starts( &sha1 ); sha1_starts( &sha1 );
sha1_update( &sha1, ssl->handshake->randbytes, 64 ); sha1_update( &sha1, ssl->handshake->randbytes, 64 );
sha1_update( &sha1, ssl->in_msg + 4, params_len ); sha1_update( &sha1, params, params_len );
sha1_finish( &sha1, hash + 16 ); sha1_finish( &sha1, hash + 16 );
md5_free( &md5 ); md5_free( &md5 );
@ -1995,7 +1995,7 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
md_starts( &ctx ); md_starts( &ctx );
md_update( &ctx, ssl->handshake->randbytes, 64 ); md_update( &ctx, ssl->handshake->randbytes, 64 );
md_update( &ctx, ssl->in_msg + 4, params_len ); md_update( &ctx, params, params_len );
md_finish( &ctx, hash ); md_finish( &ctx, hash );
md_free( &ctx ); md_free( &ctx );
} }