SSL test programs: prepare to unify common code

In preparation for unifying the common RNG-related code of ssl_client2
and ssl_server2, make it possible to copy-paste that code out of these
programs' main() functions:

* Replaces reads of the non-unifiable structure opt by reads of a
  separate variable.
* Replace references to the local variable rng by a pointer.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine 2021-01-13 18:21:37 +01:00
parent 8a8492bcd4
commit b3715eb86e
2 changed files with 29 additions and 25 deletions

View file

@ -686,7 +686,7 @@ int main( int argc, char *argv[] )
#if defined(MBEDTLS_X509_CRT_PARSE_C) #if defined(MBEDTLS_X509_CRT_PARSE_C)
mbedtls_x509_crt_profile crt_profile_for_test = mbedtls_x509_crt_profile_default; mbedtls_x509_crt_profile crt_profile_for_test = mbedtls_x509_crt_profile_default;
#endif #endif
rng_context_t rng; rng_context_t rng_context;
mbedtls_ssl_context ssl; mbedtls_ssl_context ssl;
mbedtls_ssl_config conf; mbedtls_ssl_config conf;
mbedtls_ssl_session saved_session; mbedtls_ssl_session saved_session;
@ -741,7 +741,9 @@ int main( int argc, char *argv[] )
mbedtls_ssl_init( &ssl ); mbedtls_ssl_init( &ssl );
mbedtls_ssl_config_init( &conf ); mbedtls_ssl_config_init( &conf );
memset( &saved_session, 0, sizeof( mbedtls_ssl_session ) ); memset( &saved_session, 0, sizeof( mbedtls_ssl_session ) );
mbedtls_ctr_drbg_init( &rng.drbg ); rng_context_t *rng = &rng_context;
mbedtls_ctr_drbg_init( &rng->drbg );
mbedtls_entropy_init( &rng->entropy );
#if defined(MBEDTLS_X509_CRT_PARSE_C) #if defined(MBEDTLS_X509_CRT_PARSE_C)
mbedtls_x509_crt_init( &cacert ); mbedtls_x509_crt_init( &cacert );
mbedtls_x509_crt_init( &clicert ); mbedtls_x509_crt_init( &clicert );
@ -1533,12 +1535,12 @@ int main( int argc, char *argv[] )
mbedtls_printf( "\n . Seeding the random number generator..." ); mbedtls_printf( "\n . Seeding the random number generator..." );
fflush( stdout ); fflush( stdout );
mbedtls_entropy_init( &rng.entropy ); int reproducible = opt.reproducible;
if (opt.reproducible) if ( reproducible )
{ {
srand( 1 ); srand( 1 );
if( ( ret = mbedtls_ctr_drbg_seed( &rng.drbg, dummy_entropy, if( ( ret = mbedtls_ctr_drbg_seed( &rng->drbg, dummy_entropy,
&rng.entropy, (const unsigned char *) pers, &rng->entropy, (const unsigned char *) pers,
strlen( pers ) ) ) != 0 ) strlen( pers ) ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n", mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n",
@ -1548,8 +1550,8 @@ int main( int argc, char *argv[] )
} }
else else
{ {
if( ( ret = mbedtls_ctr_drbg_seed( &rng.drbg, mbedtls_entropy_func, if( ( ret = mbedtls_ctr_drbg_seed( &rng->drbg, mbedtls_entropy_func,
&rng.entropy, (const unsigned char *) pers, &rng->entropy, (const unsigned char *) pers,
strlen( pers ) ) ) != 0 ) strlen( pers ) ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n", mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n",
@ -1903,7 +1905,7 @@ int main( int argc, char *argv[] )
#endif #endif
#endif #endif
} }
mbedtls_ssl_conf_rng( &conf, mbedtls_ctr_drbg_random, &rng.drbg ); mbedtls_ssl_conf_rng( &conf, mbedtls_ctr_drbg_random, &rng->drbg );
mbedtls_ssl_conf_dbg( &conf, my_debug, stdout ); mbedtls_ssl_conf_dbg( &conf, my_debug, stdout );
mbedtls_ssl_conf_read_timeout( &conf, opt.read_timeout ); mbedtls_ssl_conf_read_timeout( &conf, opt.read_timeout );
@ -3023,8 +3025,8 @@ exit:
mbedtls_ssl_session_free( &saved_session ); mbedtls_ssl_session_free( &saved_session );
mbedtls_ssl_free( &ssl ); mbedtls_ssl_free( &ssl );
mbedtls_ssl_config_free( &conf ); mbedtls_ssl_config_free( &conf );
mbedtls_ctr_drbg_free( &rng.drbg ); mbedtls_ctr_drbg_free( &rng->drbg );
mbedtls_entropy_free( &rng.entropy ); mbedtls_entropy_free( &rng->entropy );
if( session_data != NULL ) if( session_data != NULL )
mbedtls_platform_zeroize( session_data, session_data_len ); mbedtls_platform_zeroize( session_data, session_data_len );
mbedtls_free( session_data ); mbedtls_free( session_data );

View file

@ -1282,7 +1282,7 @@ int main( int argc, char *argv[] )
#if defined(MBEDTLS_X509_CRT_PARSE_C) #if defined(MBEDTLS_X509_CRT_PARSE_C)
mbedtls_x509_crt_profile crt_profile_for_test = mbedtls_x509_crt_profile_default; mbedtls_x509_crt_profile crt_profile_for_test = mbedtls_x509_crt_profile_default;
#endif #endif
rng_context_t rng; rng_context_t rng_context;
mbedtls_ssl_context ssl; mbedtls_ssl_context ssl;
mbedtls_ssl_config conf; mbedtls_ssl_config conf;
#if defined(MBEDTLS_TIMING_C) #if defined(MBEDTLS_TIMING_C)
@ -1376,7 +1376,9 @@ int main( int argc, char *argv[] )
mbedtls_net_init( &listen_fd ); mbedtls_net_init( &listen_fd );
mbedtls_ssl_init( &ssl ); mbedtls_ssl_init( &ssl );
mbedtls_ssl_config_init( &conf ); mbedtls_ssl_config_init( &conf );
mbedtls_ctr_drbg_init( &rng.drbg ); rng_context_t *rng = &rng_context;
mbedtls_ctr_drbg_init( &rng->drbg );
mbedtls_entropy_init( &rng->entropy );
#if defined(MBEDTLS_X509_CRT_PARSE_C) #if defined(MBEDTLS_X509_CRT_PARSE_C)
mbedtls_x509_crt_init( &cacert ); mbedtls_x509_crt_init( &cacert );
mbedtls_x509_crt_init( &srvcert ); mbedtls_x509_crt_init( &srvcert );
@ -2292,12 +2294,12 @@ int main( int argc, char *argv[] )
mbedtls_printf( "\n . Seeding the random number generator..." ); mbedtls_printf( "\n . Seeding the random number generator..." );
fflush( stdout ); fflush( stdout );
mbedtls_entropy_init( &rng.entropy ); int reproducible = opt.reproducible;
if (opt.reproducible) if ( reproducible )
{ {
srand( 1 ); srand( 1 );
if( ( ret = mbedtls_ctr_drbg_seed( &rng.drbg, dummy_entropy, if( ( ret = mbedtls_ctr_drbg_seed( &rng->drbg, dummy_entropy,
&rng.entropy, (const unsigned char *) pers, &rng->entropy, (const unsigned char *) pers,
strlen( pers ) ) ) != 0 ) strlen( pers ) ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n", mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n",
@ -2307,8 +2309,8 @@ int main( int argc, char *argv[] )
} }
else else
{ {
if( ( ret = mbedtls_ctr_drbg_seed( &rng.drbg, mbedtls_entropy_func, if( ( ret = mbedtls_ctr_drbg_seed( &rng->drbg, mbedtls_entropy_func,
&rng.entropy, (const unsigned char *) pers, &rng->entropy, (const unsigned char *) pers,
strlen( pers ) ) ) != 0 ) strlen( pers ) ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n", mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned -0x%x\n",
@ -2705,7 +2707,7 @@ int main( int argc, char *argv[] )
#endif #endif
#endif #endif
} }
mbedtls_ssl_conf_rng( &conf, mbedtls_ctr_drbg_random, &rng.drbg ); mbedtls_ssl_conf_rng( &conf, mbedtls_ctr_drbg_random, &rng->drbg );
mbedtls_ssl_conf_dbg( &conf, my_debug, stdout ); mbedtls_ssl_conf_dbg( &conf, my_debug, stdout );
#if defined(MBEDTLS_SSL_CACHE_C) #if defined(MBEDTLS_SSL_CACHE_C)
@ -2724,7 +2726,7 @@ int main( int argc, char *argv[] )
if( opt.tickets == MBEDTLS_SSL_SESSION_TICKETS_ENABLED ) if( opt.tickets == MBEDTLS_SSL_SESSION_TICKETS_ENABLED )
{ {
if( ( ret = mbedtls_ssl_ticket_setup( &ticket_ctx, if( ( ret = mbedtls_ssl_ticket_setup( &ticket_ctx,
mbedtls_ctr_drbg_random, &rng.drbg, mbedtls_ctr_drbg_random, &rng->drbg,
MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_CIPHER_AES_256_GCM,
opt.ticket_timeout ) ) != 0 ) opt.ticket_timeout ) ) != 0 )
{ {
@ -2746,7 +2748,7 @@ int main( int argc, char *argv[] )
if( opt.cookies > 0 ) if( opt.cookies > 0 )
{ {
if( ( ret = mbedtls_ssl_cookie_setup( &cookie_ctx, if( ( ret = mbedtls_ssl_cookie_setup( &cookie_ctx,
mbedtls_ctr_drbg_random, &rng.drbg ) ) != 0 ) mbedtls_ctr_drbg_random, &rng->drbg ) ) != 0 )
{ {
mbedtls_printf( " failed\n ! mbedtls_ssl_cookie_setup returned %d\n\n", ret ); mbedtls_printf( " failed\n ! mbedtls_ssl_cookie_setup returned %d\n\n", ret );
goto exit; goto exit;
@ -2899,7 +2901,7 @@ int main( int argc, char *argv[] )
- opt.async_private_error : - opt.async_private_error :
opt.async_private_error ); opt.async_private_error );
ssl_async_keys.f_rng = mbedtls_ctr_drbg_random; ssl_async_keys.f_rng = mbedtls_ctr_drbg_random;
ssl_async_keys.p_rng = &rng.drbg; ssl_async_keys.p_rng = &rng->drbg;
mbedtls_ssl_conf_async_private_cb( &conf, mbedtls_ssl_conf_async_private_cb( &conf,
sign, sign,
decrypt, decrypt,
@ -3997,8 +3999,8 @@ exit:
mbedtls_ssl_free( &ssl ); mbedtls_ssl_free( &ssl );
mbedtls_ssl_config_free( &conf ); mbedtls_ssl_config_free( &conf );
mbedtls_ctr_drbg_free( &rng.drbg ); mbedtls_ctr_drbg_free( &rng->drbg );
mbedtls_entropy_free( &rng.entropy ); mbedtls_entropy_free( &rng->entropy );
#if defined(MBEDTLS_SSL_CACHE_C) #if defined(MBEDTLS_SSL_CACHE_C)
mbedtls_ssl_cache_free( &cache ); mbedtls_ssl_cache_free( &cache );