Add HMAC_DRBG to benchmark
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index 57fe67b..b1974fe 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -45,6 +45,7 @@
#include "polarssl/gcm.h"
#include "polarssl/havege.h"
#include "polarssl/ctr_drbg.h"
+#include "polarssl/hmac_drbg.h"
#include "polarssl/rsa.h"
#include "polarssl/dhm.h"
#include "polarssl/ecdsa.h"
@@ -55,8 +56,8 @@
#endif
#define BUFSIZE 1024
-#define HEADER_FORMAT " %-18s : "
-#define TITLE_LEN 19
+#define HEADER_FORMAT " %-24s : "
+#define TITLE_LEN 15
#if !defined(POLARSSL_TIMING_C)
int main( int argc, char *argv[] )
@@ -141,14 +142,14 @@
typedef struct {
char md4, md5, ripemd160, sha1, sha256, sha512,
arc4, des3, des, aes_cbc, aes_gcm, camellia, blowfish,
- havege, ctr_drbg,
+ havege, ctr_drbg, hmac_drbg,
rsa, dhm, ecdsa, ecdh;
} todo_list;
#define OPTIONS \
"md4, md5, ripemd160, sha1, sha256, sha512,\n" \
"arc4, des3, des, aes_cbc, aes_gcm, camellia, blowfish,\n" \
- "havege, ctr_drbg,\n" \
+ "havege, ctr_drbg, hmac_drbg\n" \
"rsa, dhm, ecdsa, ecdh.\n"
int main( int argc, char *argv[] )
@@ -196,6 +197,8 @@
todo.havege = 1;
else if( strcmp( argv[i], "ctr_drbg" ) == 0 )
todo.ctr_drbg = 1;
+ else if( strcmp( argv[i], "hmac_drbg" ) == 0 )
+ todo.hmac_drbg = 1;
else if( strcmp( argv[i], "rsa" ) == 0 )
todo.rsa = 1;
else if( strcmp( argv[i], "dhm" ) == 0 )
@@ -380,6 +383,56 @@
}
#endif
+#if defined(POLARSSL_HMAC_DRBG_C)
+ if( todo.hmac_drbg )
+ {
+ hmac_drbg_context hmac_drbg;
+ const md_info_t *md_info;
+
+#if defined(POLARSSL_SHA1_C)
+ if( ( md_info = md_info_from_type( POLARSSL_MD_SHA1 ) ) == NULL )
+ exit(1);
+
+ if( hmac_drbg_init( &hmac_drbg, md_info, myrand, NULL, NULL, 0 ) != 0 )
+ exit(1);
+ TIME_AND_TSC( "HMAC_DRBG SHA-1 (NOPR)",
+ if( hmac_drbg_random( &hmac_drbg, buf, BUFSIZE ) != 0 )
+ exit(1) );
+ hmac_drbg_free( &hmac_drbg );
+
+ if( hmac_drbg_init( &hmac_drbg, md_info, myrand, NULL, NULL, 0 ) != 0 )
+ exit(1);
+ hmac_drbg_set_prediction_resistance( &hmac_drbg,
+ POLARSSL_HMAC_DRBG_PR_ON );
+ TIME_AND_TSC( "HMAC_DRBG SHA-1 (PR)",
+ if( hmac_drbg_random( &hmac_drbg, buf, BUFSIZE ) != 0 )
+ exit(1) );
+ hmac_drbg_free( &hmac_drbg );
+#endif
+
+#if defined(POLARSSL_SHA256_C)
+ if( ( md_info = md_info_from_type( POLARSSL_MD_SHA256 ) ) == NULL )
+ exit(1);
+
+ if( hmac_drbg_init( &hmac_drbg, md_info, myrand, NULL, NULL, 0 ) != 0 )
+ exit(1);
+ TIME_AND_TSC( "HMAC_DRBG SHA-256 (NOPR)",
+ if( hmac_drbg_random( &hmac_drbg, buf, BUFSIZE ) != 0 )
+ exit(1) );
+ hmac_drbg_free( &hmac_drbg );
+
+ if( hmac_drbg_init( &hmac_drbg, md_info, myrand, NULL, NULL, 0 ) != 0 )
+ exit(1);
+ hmac_drbg_set_prediction_resistance( &hmac_drbg,
+ POLARSSL_HMAC_DRBG_PR_ON );
+ TIME_AND_TSC( "HMAC_DRBG SHA-256 (PR)",
+ if( hmac_drbg_random( &hmac_drbg, buf, BUFSIZE ) != 0 )
+ exit(1) );
+ hmac_drbg_free( &hmac_drbg );
+#endif
+ }
+#endif
+
#if defined(POLARSSL_RSA_C) && defined(POLARSSL_GENPRIME)
if( todo.rsa )
{