diff --git a/programs/test/ecp-bench.c b/programs/test/ecp-bench.c
new file mode 100644
index 0000000..3064cc9
--- /dev/null
+++ b/programs/test/ecp-bench.c
@@ -0,0 +1,205 @@
+/*
+ * Temporary mini-benchmark for ECP multiplication
+ * (and comparision with GF(p) exponentation if any argument is given)
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "polarssl/config.h"
+
+#include "polarssl/dhm.h"
+#include "polarssl/ecp.h"
+#include "polarssl/timing.h"
+#include "polarssl/error.h"
+
+#if !defined(POLARSSL_TIMING_C) || !defined(POLARSSL_BIGNUM_C) ||   \
+    !defined(POLARSSL_DHM_C) || !defined(POLARSSL_ECP_C)
+
+int main( int argc, char *argv[] )
+{
+    ((void) argc);
+    ((void) argv);
+
+    printf("POLARSSL_{TIMING,BIGNUM,DHM,ECP}_C not defined.\n");
+    return( 0 );
+}
+
+#else
+
+void dhm_bench_case( const char *s, const char *p,
+                     const char *g, const char *x )
+{
+    unsigned long i;
+    mpi P, G, X, R, C;
+
+    mpi_init( &P ); mpi_init( &G ); mpi_init( &X ); mpi_init( &R );
+    mpi_init( &C );
+
+    mpi_read_string( &P, 16, p );
+    mpi_read_string( &G, 16, g );
+    mpi_read_string( &X, 16, x );
+
+    printf( " MODP-%s : ", s );
+    fflush( stdout );
+    set_alarm( 3 );
+
+    for( i = 1; ! alarmed; i++ )
+        mpi_exp_mod( &R, &G, &X, &P, &C );
+
+    printf( "%9lu exp/s\n", i / 3 );
+
+    mpi_free( &P ); mpi_free( &G ); mpi_free( &X ); mpi_free( &R );
+    mpi_free( &C );
+}
+
+#define MODP_1024_G \
+    "205BE4D89282CE6A9488626CA9BCC1264E7C9525903F049D" \
+    "D6A77315AA12B01467EB1EA21B25569BECEC276623859A8C" \
+    "518D445DF43DCBA1B75D23B6BB6B96084FA3C10CA8DC1A96" \
+    "77E26332152233E13F4E6BF3C5D48514BC264A35AF385463" \
+    "8B8AE5E363BD6AE0B5D44875BB60A73A5E4075FB2037B833" \
+    "DC382EA6DD458EAE"
+
+#define MODP_1024_X \
+    "262F6727B2E44AF61981AAAB2AA749F64FD79AD18A1FC999" \
+    "2E71795130CB69F89BCFB70DB2A0F2A49A825A0AAA50715D" \
+    "5D9AE98198F0522AECBF8A0A2D331AB0296110617FC685FF" \
+    "7338F4201329ABDFDEAEC779E4D56CC46A0A38B18DC18DFE" \
+    "640865426A7360BCCD4E4F82B3686B4804071D4B9F5582ED" \
+    "E4758F170C3A1415"
+
+#define MODP_2048_G \
+    "717892E6698EB3CD62113AAE793EA6690791F89290FD83C3" \
+    "A059F328C5FBD10AB25C1E8F96245836600FC7772AFB42ED" \
+    "F7A809FC3D38F7794574CAC8A318D41C917EE34C81EA8838" \
+    "BA6068E81ED3C7F039A83914D044AB2379B3C5C24F0FFD4E" \
+    "B6642F26F1EDF015AB7829E9EDC8DCD8A4013C76682338E8" \
+    "3D44B0F4E870CF3134874EAA3AC0803DA2CE30922E251B02" \
+    "BDDD94137F9DFD41627AE20B7E4137BA94496A4B2AEB0354" \
+    "8E1C4126A87240B43E23BB574D354EF1AD01FED5627F240C" \
+    "2F4F5521D2F51DFE0702D18EED6DDF022D93554E7AB67D81" \
+    "AD4C5256A6AC00DE1AD0751FDCC17F8C7136C194F48A39F5" \
+    "957B831081C9058CA0C3A03C7C41F1C9"
+
+#define MODP_2048_X \
+    "AFA7186FC7A0370DE6E3DD95473C9D10C916BD186E41FB48" \
+    "195D123E5CFE8D237A2A640DCE19B3DD7028C6168084A61D" \
+    "4E4E218A1D98E0C2C93E2E1516F97E596B50C811CE93417B" \
+    "905DA6833D1CE41838AEAA9CA6CE36E2430A244A6696E99B" \
+    "54B6AAC75D4F6FF6F0568145BDBBC83F5F603D698198A8EE" \
+    "2098F5DCABDD458C465E795520EDD46C3B992EAFACF24A56" \
+    "263850C9A07165A0CE52B7DC71489CA67AC4A6E6176B547B" \
+    "A1C233E3C7898C283E82B3E74B9056F84F7B4A10B5CE10FF" \
+    "7D43107B68F2381E64C77C61474DE8CA70EA8DF935D43CD2" \
+    "CE208D9F7E468F07A93A74676ED1A3C77CB1CD59E96DCA77" \
+    "125DE5B672798FC943048FDBB24167B1"
+
+#define MODP_3072_G \
+    "38B2B12253661411B63E62F3FAC5BE7CF6A416F249E4A039" \
+    "0884765C18F2EDF93FCC2646B888ED64B783765D576887B1" \
+    "74ABB76123ECA6537DDC1F95757645F3C870CBFF2D40E40D" \
+    "C2556A14115C37BE299BDCB0F07AB7AAE0D8FA6CF44A0C22" \
+    "ED5368922EF028EC2B5B0AB42F858D5D780828A508C252A7" \
+    "96F8CE7AA9C83D1E820F6991771AAA2286A7754FCCB3AA16" \
+    "51D840EC788C5DDEAFAAC0C82EAC84EBFF5EB52699BE4020" \
+    "F62607937EB168766BCC1F786F4FCDDBB66C0BCEA983AE87" \
+    "5C2DD6C201FBF5C178308E64831D14F12399F21761D13BC1" \
+    "20B2377FBAD73613FA7B7E443BEE3879E7EEFB0A625A0EBA" \
+    "2D379E8F5EA62C91BC58A6FCDD5D7435B0E747B7B65A47BE" \
+    "0CA769DE340E611A98A6DDED72E89486875F02DAE24715E8" \
+    "3787A5DB53AA28D3F838E7F11EE80F0310C8597B585D6B1A" \
+    "3991FBD7459ED277C34C9A4AE0AE6DC7EE5C99B14F366129" \
+    "C3747617B724A2BED48F5BF3106B40E60CC3677780F1A39D" \
+    "430154C2B460CC676AACC7B34F792621D743D1AC59EDBAC6"
+
+#define MODP_3072_X \
+    "4391157AD824806F07421C1545AA795E26B120A5CEE427F0" \
+    "6725BB247E6B2F4C4BE052E4B240B2DD6194B37F3423FA3F" \
+    "00C3DF9F4C2165662FCCC9B8DE52C19001E8D54E9053A605" \
+    "24BCA6AB0698632EB5D62451987E89AF0FA63479D344E2A7" \
+    "58ED8DB5D287600C85A8DD08D9E2E5587177AB6A25A76C71" \
+    "5BCAA737FB7DC45E371F4DEC13B40CA9D461A99A98847E1B" \
+    "D9CD1BA02DCC331B5B2256887B7F0139A9E7BEA8A6CDA318" \
+    "B95E12A1CEE6A26EC070C34C270067C79DBC906295C3C9DF" \
+    "2FA6D6B637B7CE81B535DB2D6E196F46ED2F92F3EE8EACE1" \
+    "002349D035550A44B75E76B7A77A6A670EC13E334201B543" \
+    "B1708295F33B777BD4555A032313C3388DBD5ABC5FB0FEFD" \
+    "A9A98C0CC4C7E919927BDC8D46B5347A1266A4C8331C2EB0" \
+    "C93DB67244BD6CE2757BA61A063DDD0DF0561A97786D1299" \
+    "EBE3EAC838F420D1A0DC9D633B2F16CCE91E436C0413CE6A" \
+    "F98E0273FC5C08A4EA70D6DC09A1855AFB402E02BD9F261E" \
+    "863717A552F4A83D4DD5060CB70E2D4D7FFAEE912C2C4408"
+
+void dhm_bench( void )
+{
+    dhm_bench_case( "1024", POLARSSL_DHM_RFC5114_MODP_1024_P,
+            MODP_1024_G, MODP_1024_X );
+
+    dhm_bench_case( "2048", POLARSSL_DHM_RFC3526_MODP_2048_P,
+            MODP_2048_G, MODP_2048_X );
+
+    dhm_bench_case( "3072", POLARSSL_DHM_RFC3526_MODP_3072_P,
+            MODP_3072_G, MODP_3072_X );
+}
+
+void ecp_bench_case( size_t dp, char *s, char *m )
+{
+    unsigned long i;
+    ecp_group grp;
+    ecp_point R;
+    mpi M;
+
+    ecp_group_init( &grp ); ecp_point_init( &R ); mpi_init( &M );
+
+    ecp_use_known_dp( &grp, dp );
+    mpi_read_string( &M, 16, m );
+
+    printf( "  ECP-%s  : ", s );
+    fflush( stdout );
+    set_alarm( 3 );
+
+    for( i = 1; ! alarmed; i++ )
+        ecp_mul( &grp, &R, &M, &grp.G );
+
+    printf( "%9lu mul/s\n", i / 3 );
+
+    ecp_group_free( &grp ); ecp_point_free( &R ); mpi_free( &M );
+}
+
+#define ECP_192_M \
+    "FE61330B02915F25970C2AF8575CBB227E6B6394774E6EC8"
+#define ECP_224_M \
+    "EAC63628087E32F61A383DCAED57E4348081FF3637D95B904C2FD487"
+#define ECP_256_M \
+    "83C4106612BDDB781DD446CF2A873D78AA0620B9003789244A18F83B39B3EA63"
+#define ECP_384_M \
+    "3E45569675A7E2E0E2E663A11E4226FBEF0F99A96CD6E547" \
+    "9ABDDF36DD9AB7278BCD8B96A0775847A6431D2AF7476CD9"
+#define ECP_521_M \
+    "017F540D09F24EC6B102E8E4A9F14B850442D98C68FB29A6B09B9B9D40E2A750" \
+    "7F3D2D6C5B6536B607EF2BCEA4797BB3A68F0D745410EB5CFFC7FF7FB17381544E"
+
+void ecp_bench( void )
+{
+    ecp_bench_case( 0, "192", ECP_192_M );
+    ecp_bench_case( 1, "224", ECP_224_M );
+    ecp_bench_case( 2, "256", ECP_256_M );
+    ecp_bench_case( 3, "384", ECP_384_M );
+    ecp_bench_case( 4, "521", ECP_521_M );
+}
+
+int main( int argc, char *argv[] )
+{
+    ((void) argv);
+    if( argc > 1 )
+    {
+        dhm_bench();
+    }
+
+    ecp_bench();
+
+    return( 0 );
+}
+#endif
