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)
