mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-29 11:41:15 +03:00
Merge pull request #4927 from yuhaoth/pr/add-tls13-serverhello-utils
TLS 1.3: ServerHello: add utils functions used by ServerHello Regarding the merge job, there was only one of the failure we currently encounter on almost all PR (Session resume using tickets, DTLS: openssl client test case see #5012) thus we can consider that this PR passed CI.
This commit is contained in:
@ -2820,10 +2820,12 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl )
|
||||
|
||||
/* Remember current epoch settings for resending */
|
||||
ssl->handshake->alt_transform_out = ssl->transform_out;
|
||||
memcpy( ssl->handshake->alt_out_ctr, ssl->cur_out_ctr, 8 );
|
||||
memcpy( ssl->handshake->alt_out_ctr, ssl->cur_out_ctr,
|
||||
sizeof( ssl->handshake->alt_out_ctr ) );
|
||||
|
||||
/* Set sequence_number to zero */
|
||||
memset( ssl->cur_out_ctr + 2, 0, 6 );
|
||||
memset( &ssl->cur_out_ctr[2], 0, sizeof( ssl->cur_out_ctr ) - 2 );
|
||||
|
||||
|
||||
/* Increment epoch */
|
||||
for( i = 2; i > 0; i-- )
|
||||
@ -2839,7 +2841,7 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl )
|
||||
}
|
||||
else
|
||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
||||
memset( ssl->cur_out_ctr, 0, 8 );
|
||||
memset( ssl->cur_out_ctr, 0, sizeof( ssl->cur_out_ctr ) );
|
||||
|
||||
ssl->transform_out = ssl->transform_negotiate;
|
||||
ssl->session_out = ssl->session_negotiate;
|
||||
@ -5792,11 +5794,11 @@ int mbedtls_ssl_context_save( mbedtls_ssl_context *ssl,
|
||||
}
|
||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
||||
|
||||
used += 8;
|
||||
used += MBEDTLS_SSL_SEQUENCE_NUMBER_LEN;
|
||||
if( used <= buf_len )
|
||||
{
|
||||
memcpy( p, ssl->cur_out_ctr, 8 );
|
||||
p += 8;
|
||||
memcpy( p, ssl->cur_out_ctr, MBEDTLS_SSL_SEQUENCE_NUMBER_LEN );
|
||||
p += MBEDTLS_SSL_SEQUENCE_NUMBER_LEN;
|
||||
}
|
||||
|
||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)
|
||||
@ -6052,11 +6054,10 @@ static int ssl_context_load( mbedtls_ssl_context *ssl,
|
||||
ssl->disable_datagram_packing = *p++;
|
||||
#endif /* MBEDTLS_SSL_PROTO_DTLS */
|
||||
|
||||
if( (size_t)( end - p ) < 8 )
|
||||
if( (size_t)( end - p ) < sizeof( ssl->cur_out_ctr ) )
|
||||
return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
|
||||
|
||||
memcpy( ssl->cur_out_ctr, p, 8 );
|
||||
p += 8;
|
||||
memcpy( ssl->cur_out_ctr, p, sizeof( ssl->cur_out_ctr ) );
|
||||
p += sizeof( ssl->cur_out_ctr );
|
||||
|
||||
#if defined(MBEDTLS_SSL_PROTO_DTLS)
|
||||
if( (size_t)( end - p ) < 2 )
|
||||
@ -6995,4 +6996,106 @@ exit:
|
||||
|
||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
|
||||
|
||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||
int mbedtls_ssl_get_handshake_transcript( mbedtls_ssl_context *ssl,
|
||||
const mbedtls_md_type_t md,
|
||||
unsigned char *dst,
|
||||
size_t dst_len,
|
||||
size_t *olen )
|
||||
{
|
||||
((void) ssl);
|
||||
((void) md);
|
||||
((void) dst);
|
||||
((void) dst_len);
|
||||
*olen = 0;
|
||||
return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE);
|
||||
}
|
||||
#else /* MBEDTLS_USE_PSA_CRYPTO */
|
||||
|
||||
#if defined(MBEDTLS_SHA384_C)
|
||||
static int ssl_get_handshake_transcript_sha384( mbedtls_ssl_context *ssl,
|
||||
unsigned char *dst,
|
||||
size_t dst_len,
|
||||
size_t *olen )
|
||||
{
|
||||
int ret;
|
||||
mbedtls_sha512_context sha512;
|
||||
|
||||
if( dst_len < 48 )
|
||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||
|
||||
mbedtls_sha512_init( &sha512 );
|
||||
mbedtls_sha512_clone( &sha512, &ssl->handshake->fin_sha512 );
|
||||
|
||||
if( ( ret = mbedtls_sha512_finish( &sha512, dst ) ) != 0 )
|
||||
{
|
||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha512_finish", ret );
|
||||
goto exit;
|
||||
}
|
||||
|
||||
*olen = 48;
|
||||
|
||||
exit:
|
||||
|
||||
mbedtls_sha512_free( &sha512 );
|
||||
return( ret );
|
||||
}
|
||||
#endif /* MBEDTLS_SHA384_C */
|
||||
|
||||
#if defined(MBEDTLS_SHA256_C)
|
||||
static int ssl_get_handshake_transcript_sha256( mbedtls_ssl_context *ssl,
|
||||
unsigned char *dst,
|
||||
size_t dst_len,
|
||||
size_t *olen )
|
||||
{
|
||||
int ret;
|
||||
mbedtls_sha256_context sha256;
|
||||
|
||||
if( dst_len < 32 )
|
||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||
|
||||
mbedtls_sha256_init( &sha256 );
|
||||
mbedtls_sha256_clone( &sha256, &ssl->handshake->fin_sha256 );
|
||||
|
||||
if( ( ret = mbedtls_sha256_finish( &sha256, dst ) ) != 0 )
|
||||
{
|
||||
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha256_finish", ret );
|
||||
goto exit;
|
||||
}
|
||||
|
||||
*olen = 32;
|
||||
|
||||
exit:
|
||||
|
||||
mbedtls_sha256_free( &sha256 );
|
||||
return( ret );
|
||||
}
|
||||
#endif /* MBEDTLS_SHA256_C */
|
||||
|
||||
int mbedtls_ssl_get_handshake_transcript( mbedtls_ssl_context *ssl,
|
||||
const mbedtls_md_type_t md,
|
||||
unsigned char *dst,
|
||||
size_t dst_len,
|
||||
size_t *olen )
|
||||
{
|
||||
switch( md )
|
||||
{
|
||||
|
||||
#if defined(MBEDTLS_SHA384_C)
|
||||
case MBEDTLS_MD_SHA384:
|
||||
return( ssl_get_handshake_transcript_sha384( ssl, dst, dst_len, olen ) );
|
||||
#endif /* MBEDTLS_SHA384_C */
|
||||
|
||||
#if defined(MBEDTLS_SHA256_C)
|
||||
case MBEDTLS_MD_SHA256:
|
||||
return( ssl_get_handshake_transcript_sha256( ssl, dst, dst_len, olen ) );
|
||||
#endif /* MBEDTLS_SHA256_C */
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||
}
|
||||
#endif /* !MBEDTLS_USE_PSA_CRYPTO */
|
||||
|
||||
#endif /* MBEDTLS_SSL_TLS_C */
|
||||
|
Reference in New Issue
Block a user