Include ECDSA and ECDH in benchmark
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index 11df50d..0aa37db 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -45,10 +45,12 @@
#include "polarssl/blowfish.h"
#include "polarssl/camellia.h"
#include "polarssl/gcm.h"
+#include "polarssl/havege.h"
#include "polarssl/ctr_drbg.h"
#include "polarssl/rsa.h"
#include "polarssl/dhm.h"
-#include "polarssl/havege.h"
+#include "polarssl/ecdsa.h"
+#include "polarssl/ecdh.h"
#define BUFSIZE 1024
#define HEADER_FORMAT " %-16s : "
@@ -138,19 +140,19 @@
char md4, md5, sha1, sha256, sha512,
arc4, des3, des, aes_cbc, aes_gcm, camellia, blowfish,
havege, ctr_drbg,
- rsa, dhm;
+ rsa, dhm, ecdsa, ecdh;
} todo_list;
#define OPTIONS \
"md4, md5, sha1, sha256, sha512,\n" \
"arc4, des3, des, aes_cbc, aes_gcm, camellia, blowfish,\n" \
"havege, ctr_drbg,\n" \
- "rsa, dhm.\n"
+ "rsa, dhm, ecdsa, ecdh.\n"
int main( int argc, char *argv[] )
{
int keysize, i;
- unsigned char tmp[64];
+ unsigned char tmp[200];
char title[TITLE_LEN];
todo_list todo;
@@ -194,6 +196,10 @@
todo.rsa = 1;
else if( strcmp( argv[i], "dhm" ) == 0 )
todo.dhm = 1;
+ else if( strcmp( argv[i], "ecdsa" ) == 0 )
+ todo.ecdsa = 1;
+ else if( strcmp( argv[i], "ecdh" ) == 0 )
+ todo.ecdh = 1;
else
{
printf( "Unrecognized option: %s\n", argv[i] );
@@ -415,14 +421,14 @@
dhm_make_public( &dhm, dhm.len, buf, dhm.len, myrand, NULL );
mpi_copy( &dhm.GY, &dhm.GX );
- snprintf( title, sizeof( title ), "DHM-%d", dhm_sizes[i] );
+ snprintf( title, sizeof( title ), "DHE-%d", dhm_sizes[i] );
TIME_PUBLIC( title, "handshake",
olen = sizeof( buf );
ret |= dhm_make_public( &dhm, dhm.len, buf, dhm.len,
myrand, NULL );
ret |= dhm_calc_secret( &dhm, buf, &olen, myrand, NULL ) );
- snprintf( title, sizeof( title ), "DHM-%d-fixed", dhm_sizes[i] );
+ snprintf( title, sizeof( title ), "DH-%d", dhm_sizes[i] );
TIME_PUBLIC( title, "handshake",
olen = sizeof( buf );
ret |= dhm_calc_secret( &dhm, buf, &olen, myrand, NULL ) );
@@ -432,6 +438,73 @@
}
#endif
+#if defined(POLARSSL_ECDSA_C)
+ if( todo.ecdsa )
+ {
+ ecdsa_context ecdsa;
+ const ecp_curve_info *curve_info;
+ size_t sig_len;
+
+ memset( buf, 0x2A, sizeof( buf ) );
+
+ for( curve_info = ecp_supported_curves;
+ curve_info->grp_id != POLARSSL_ECP_DP_NONE;
+ curve_info++ )
+ {
+ ecdsa_init( &ecdsa );
+
+ if( ecdsa_genkey( &ecdsa, curve_info->grp_id, myrand, NULL ) != 0 )
+ exit( 1 );
+
+ snprintf( title, sizeof( title ), "ECDSA-%d",
+ (int) curve_info->size );
+ TIME_PUBLIC( title, "sign",
+ ret = ecdsa_write_signature( &ecdsa, buf, curve_info->size,
+ tmp, &sig_len, myrand, NULL ) );
+
+ ecdsa_free( &ecdsa );
+ }
+ }
+#endif
+
+#if defined(POLARSSL_ECDH_C)
+ if( todo.ecdh )
+ {
+ ecdh_context ecdh;
+ const ecp_curve_info *curve_info;
+ size_t olen;
+
+ for( curve_info = ecp_supported_curves;
+ curve_info->grp_id != POLARSSL_ECP_DP_NONE;
+ curve_info++ )
+ {
+ ecdh_init( &ecdh );
+
+ if( ecp_use_known_dp( &ecdh.grp, curve_info->grp_id ) != 0 ||
+ ecdh_make_public( &ecdh, &olen, buf, sizeof( buf),
+ myrand, NULL ) != 0 ||
+ ecp_copy( &ecdh.Qp, &ecdh.Q ) != 0 )
+ {
+ exit( 1 );
+ }
+
+ snprintf( title, sizeof( title ), "ECDHE-%d",
+ (int) curve_info->size );
+ TIME_PUBLIC( title, "handshake",
+ ret |= ecdh_make_public( &ecdh, &olen, buf, sizeof( buf),
+ myrand, NULL );
+ ret |= ecdh_calc_secret( &ecdh, &olen, buf, sizeof( buf ),
+ myrand, NULL ) );
+
+ snprintf( title, sizeof( title ), "ECDH-%d",
+ (int) curve_info->size );
+ TIME_PUBLIC( title, "handshake",
+ ret |= ecdh_calc_secret( &ecdh, &olen, buf, sizeof( buf ),
+ myrand, NULL ) );
+ ecdh_free( &ecdh );
+ }
+ }
+#endif
printf( "\n" );
#if defined(_WIN32)