From 1a2012459b09f082db52b4c22b1214c9acdc102a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20P=C3=A9gouri=C3=A9-Gonnard?= Date: Sat, 7 Sep 2013 12:27:35 +0200 Subject: [PATCH] Fix undetected errors in benchmark dhm_calc_secret() was exiting early, leading to wrong results --- programs/test/benchmark.c | 101 ++++++++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c index bf8b7bbdd0..401c837275 100644 --- a/programs/test/benchmark.c +++ b/programs/test/benchmark.c @@ -92,7 +92,7 @@ int main( int argc, char *argv[] ) #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 @@ int main( int argc, char *argv[] ) 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 @@ int main( int argc, char *argv[] ) 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 @@ int main( int argc, char *argv[] ) 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 @@ int main( int argc, char *argv[] ) 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 @@ int main( int argc, char *argv[] ) 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 @@ int main( int argc, char *argv[] ) 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