Fix undetected errors in benchmark
dhm_calc_secret() was exiting early, leading to wrong results
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index bf8b7bb..401c837 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -92,7 +92,7 @@
#else
int main( int argc, char *argv[] )
{
- int keysize;
+ int ret, keysize;
unsigned long i, j, tsc;
unsigned char tmp[64];
#if defined(POLARSSL_ARC4_C)
@@ -431,25 +431,33 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_public( &rsa, buf, buf );
+ ret = rsa_public( &rsa, buf, buf );
}
- printf( "%9lu public/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu public/s\n", i / 3 );
printf( HEADER_FORMAT, "RSA-1024" );
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_private( &rsa, myrand, NULL, buf, buf );
+ ret = rsa_private( &rsa, myrand, NULL, buf, buf );
}
- printf( "%9lu private/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu private/s\n", i / 3 );
rsa_free( &rsa );
@@ -460,25 +468,33 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_public( &rsa, buf, buf );
+ ret = rsa_public( &rsa, buf, buf );
}
- printf( "%9lu public/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu public/s\n", i / 3 );
printf( HEADER_FORMAT, "RSA-2048" );
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_private( &rsa, myrand, NULL, buf, buf );
+ ret = rsa_private( &rsa, myrand, NULL, buf, buf );
}
- printf( "%9lu private/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu private/s\n", i / 3 );
rsa_free( &rsa );
@@ -489,25 +505,33 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_public( &rsa, buf, buf );
+ ret = rsa_public( &rsa, buf, buf );
}
- printf( "%9lu public/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu public/s\n", i / 3 );
printf( HEADER_FORMAT, "RSA-4096" );
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
buf[0] = 0;
- rsa_private( &rsa, myrand, NULL, buf, buf );
+ ret = rsa_private( &rsa, myrand, NULL, buf, buf );
}
- printf( "%9lu private/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu private/s\n", i / 3 );
rsa_free( &rsa );
#endif
@@ -525,13 +549,18 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
- dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
- dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
+ olen = sizeof( buf );
+ ret |= dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
+ ret |= dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
}
- printf( "%9lu handshake/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu handshake/s\n", i / 3 );
dhm_free( &dhm );
@@ -547,13 +576,18 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
- dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
- dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
+ olen = sizeof( buf );
+ ret |= dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
+ ret |= dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
}
- printf( "%9lu handshake/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu handshake/s\n", i / 3 );
dhm_free( &dhm );
memset( &dhm, 0, sizeof( dhm_context ) );
@@ -568,13 +602,18 @@
fflush( stdout );
set_alarm( 3 );
- for( i = 1; ! alarmed; i++ )
+ ret = 0;
+ for( i = 1; ! alarmed && ! ret ; i++ )
{
- dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
- dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
+ olen = sizeof( buf );
+ ret |= dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
+ ret |= dhm_calc_secret( &dhm, buf, &olen, NULL, NULL );
}
- printf( "%9lu handshake/s\n", i / 3 );
+ if( ret != 0 )
+ printf( "FAILED\n" );
+ else
+ printf( "%9lu handshake/s\n", i / 3 );
dhm_free( &dhm );
#endif