Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Temporary mini-benchmark for ECP multiplication |
| 3 | * (and comparision with GF(p) exponentation if any argument is given) |
| 4 | */ |
| 5 | |
| 6 | #include <string.h> |
| 7 | #include <stdlib.h> |
| 8 | #include <stdio.h> |
| 9 | |
| 10 | #include "polarssl/config.h" |
| 11 | |
| 12 | #include "polarssl/dhm.h" |
| 13 | #include "polarssl/ecp.h" |
| 14 | #include "polarssl/timing.h" |
| 15 | #include "polarssl/error.h" |
| 16 | |
| 17 | #if !defined(POLARSSL_TIMING_C) || !defined(POLARSSL_BIGNUM_C) || \ |
| 18 | !defined(POLARSSL_DHM_C) || !defined(POLARSSL_ECP_C) |
| 19 | |
| 20 | int main( int argc, char *argv[] ) |
| 21 | { |
| 22 | ((void) argc); |
| 23 | ((void) argv); |
| 24 | |
| 25 | printf("POLARSSL_{TIMING,BIGNUM,DHM,ECP}_C not defined.\n"); |
| 26 | return( 0 ); |
| 27 | } |
| 28 | |
| 29 | #else |
| 30 | |
Paul Bakker | 3c5ef71 | 2013-06-25 16:37:45 +0200 | [diff] [blame] | 31 | static void dhm_bench_case( const char *s, const char *p, |
| 32 | const char *g, const char *x ) |
Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 33 | { |
| 34 | unsigned long i; |
| 35 | mpi P, G, X, R, C; |
| 36 | |
| 37 | mpi_init( &P ); mpi_init( &G ); mpi_init( &X ); mpi_init( &R ); |
| 38 | mpi_init( &C ); |
| 39 | |
| 40 | mpi_read_string( &P, 16, p ); |
| 41 | mpi_read_string( &G, 16, g ); |
| 42 | mpi_read_string( &X, 16, x ); |
| 43 | |
| 44 | printf( " MODP-%s : ", s ); |
| 45 | fflush( stdout ); |
| 46 | set_alarm( 3 ); |
| 47 | |
| 48 | for( i = 1; ! alarmed; i++ ) |
| 49 | mpi_exp_mod( &R, &G, &X, &P, &C ); |
| 50 | |
| 51 | printf( "%9lu exp/s\n", i / 3 ); |
| 52 | |
| 53 | mpi_free( &P ); mpi_free( &G ); mpi_free( &X ); mpi_free( &R ); |
| 54 | mpi_free( &C ); |
| 55 | } |
| 56 | |
| 57 | #define MODP_1024_G \ |
| 58 | "205BE4D89282CE6A9488626CA9BCC1264E7C9525903F049D" \ |
| 59 | "D6A77315AA12B01467EB1EA21B25569BECEC276623859A8C" \ |
| 60 | "518D445DF43DCBA1B75D23B6BB6B96084FA3C10CA8DC1A96" \ |
| 61 | "77E26332152233E13F4E6BF3C5D48514BC264A35AF385463" \ |
| 62 | "8B8AE5E363BD6AE0B5D44875BB60A73A5E4075FB2037B833" \ |
| 63 | "DC382EA6DD458EAE" |
| 64 | |
| 65 | #define MODP_1024_X \ |
| 66 | "262F6727B2E44AF61981AAAB2AA749F64FD79AD18A1FC999" \ |
| 67 | "2E71795130CB69F89BCFB70DB2A0F2A49A825A0AAA50715D" \ |
| 68 | "5D9AE98198F0522AECBF8A0A2D331AB0296110617FC685FF" \ |
| 69 | "7338F4201329ABDFDEAEC779E4D56CC46A0A38B18DC18DFE" \ |
| 70 | "640865426A7360BCCD4E4F82B3686B4804071D4B9F5582ED" \ |
| 71 | "E4758F170C3A1415" |
| 72 | |
| 73 | #define MODP_2048_G \ |
| 74 | "717892E6698EB3CD62113AAE793EA6690791F89290FD83C3" \ |
| 75 | "A059F328C5FBD10AB25C1E8F96245836600FC7772AFB42ED" \ |
| 76 | "F7A809FC3D38F7794574CAC8A318D41C917EE34C81EA8838" \ |
| 77 | "BA6068E81ED3C7F039A83914D044AB2379B3C5C24F0FFD4E" \ |
| 78 | "B6642F26F1EDF015AB7829E9EDC8DCD8A4013C76682338E8" \ |
| 79 | "3D44B0F4E870CF3134874EAA3AC0803DA2CE30922E251B02" \ |
| 80 | "BDDD94137F9DFD41627AE20B7E4137BA94496A4B2AEB0354" \ |
| 81 | "8E1C4126A87240B43E23BB574D354EF1AD01FED5627F240C" \ |
| 82 | "2F4F5521D2F51DFE0702D18EED6DDF022D93554E7AB67D81" \ |
| 83 | "AD4C5256A6AC00DE1AD0751FDCC17F8C7136C194F48A39F5" \ |
| 84 | "957B831081C9058CA0C3A03C7C41F1C9" |
| 85 | |
| 86 | #define MODP_2048_X \ |
| 87 | "AFA7186FC7A0370DE6E3DD95473C9D10C916BD186E41FB48" \ |
| 88 | "195D123E5CFE8D237A2A640DCE19B3DD7028C6168084A61D" \ |
| 89 | "4E4E218A1D98E0C2C93E2E1516F97E596B50C811CE93417B" \ |
| 90 | "905DA6833D1CE41838AEAA9CA6CE36E2430A244A6696E99B" \ |
| 91 | "54B6AAC75D4F6FF6F0568145BDBBC83F5F603D698198A8EE" \ |
| 92 | "2098F5DCABDD458C465E795520EDD46C3B992EAFACF24A56" \ |
| 93 | "263850C9A07165A0CE52B7DC71489CA67AC4A6E6176B547B" \ |
| 94 | "A1C233E3C7898C283E82B3E74B9056F84F7B4A10B5CE10FF" \ |
| 95 | "7D43107B68F2381E64C77C61474DE8CA70EA8DF935D43CD2" \ |
| 96 | "CE208D9F7E468F07A93A74676ED1A3C77CB1CD59E96DCA77" \ |
| 97 | "125DE5B672798FC943048FDBB24167B1" |
| 98 | |
| 99 | #define MODP_3072_G \ |
| 100 | "38B2B12253661411B63E62F3FAC5BE7CF6A416F249E4A039" \ |
| 101 | "0884765C18F2EDF93FCC2646B888ED64B783765D576887B1" \ |
| 102 | "74ABB76123ECA6537DDC1F95757645F3C870CBFF2D40E40D" \ |
| 103 | "C2556A14115C37BE299BDCB0F07AB7AAE0D8FA6CF44A0C22" \ |
| 104 | "ED5368922EF028EC2B5B0AB42F858D5D780828A508C252A7" \ |
| 105 | "96F8CE7AA9C83D1E820F6991771AAA2286A7754FCCB3AA16" \ |
| 106 | "51D840EC788C5DDEAFAAC0C82EAC84EBFF5EB52699BE4020" \ |
| 107 | "F62607937EB168766BCC1F786F4FCDDBB66C0BCEA983AE87" \ |
| 108 | "5C2DD6C201FBF5C178308E64831D14F12399F21761D13BC1" \ |
| 109 | "20B2377FBAD73613FA7B7E443BEE3879E7EEFB0A625A0EBA" \ |
| 110 | "2D379E8F5EA62C91BC58A6FCDD5D7435B0E747B7B65A47BE" \ |
| 111 | "0CA769DE340E611A98A6DDED72E89486875F02DAE24715E8" \ |
| 112 | "3787A5DB53AA28D3F838E7F11EE80F0310C8597B585D6B1A" \ |
| 113 | "3991FBD7459ED277C34C9A4AE0AE6DC7EE5C99B14F366129" \ |
| 114 | "C3747617B724A2BED48F5BF3106B40E60CC3677780F1A39D" \ |
| 115 | "430154C2B460CC676AACC7B34F792621D743D1AC59EDBAC6" |
| 116 | |
| 117 | #define MODP_3072_X \ |
| 118 | "4391157AD824806F07421C1545AA795E26B120A5CEE427F0" \ |
| 119 | "6725BB247E6B2F4C4BE052E4B240B2DD6194B37F3423FA3F" \ |
| 120 | "00C3DF9F4C2165662FCCC9B8DE52C19001E8D54E9053A605" \ |
| 121 | "24BCA6AB0698632EB5D62451987E89AF0FA63479D344E2A7" \ |
| 122 | "58ED8DB5D287600C85A8DD08D9E2E5587177AB6A25A76C71" \ |
| 123 | "5BCAA737FB7DC45E371F4DEC13B40CA9D461A99A98847E1B" \ |
| 124 | "D9CD1BA02DCC331B5B2256887B7F0139A9E7BEA8A6CDA318" \ |
| 125 | "B95E12A1CEE6A26EC070C34C270067C79DBC906295C3C9DF" \ |
| 126 | "2FA6D6B637B7CE81B535DB2D6E196F46ED2F92F3EE8EACE1" \ |
| 127 | "002349D035550A44B75E76B7A77A6A670EC13E334201B543" \ |
| 128 | "B1708295F33B777BD4555A032313C3388DBD5ABC5FB0FEFD" \ |
| 129 | "A9A98C0CC4C7E919927BDC8D46B5347A1266A4C8331C2EB0" \ |
| 130 | "C93DB67244BD6CE2757BA61A063DDD0DF0561A97786D1299" \ |
| 131 | "EBE3EAC838F420D1A0DC9D633B2F16CCE91E436C0413CE6A" \ |
| 132 | "F98E0273FC5C08A4EA70D6DC09A1855AFB402E02BD9F261E" \ |
| 133 | "863717A552F4A83D4DD5060CB70E2D4D7FFAEE912C2C4408" |
| 134 | |
Paul Bakker | 3c5ef71 | 2013-06-25 16:37:45 +0200 | [diff] [blame] | 135 | static void dhm_bench( void ) |
Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 136 | { |
| 137 | dhm_bench_case( "1024", POLARSSL_DHM_RFC5114_MODP_1024_P, |
| 138 | MODP_1024_G, MODP_1024_X ); |
| 139 | |
| 140 | dhm_bench_case( "2048", POLARSSL_DHM_RFC3526_MODP_2048_P, |
| 141 | MODP_2048_G, MODP_2048_X ); |
| 142 | |
| 143 | dhm_bench_case( "3072", POLARSSL_DHM_RFC3526_MODP_3072_P, |
| 144 | MODP_3072_G, MODP_3072_X ); |
| 145 | } |
| 146 | |
Paul Bakker | 3c5ef71 | 2013-06-25 16:37:45 +0200 | [diff] [blame] | 147 | static void ecp_bench_case( size_t dp, const char *s, const char *m ) |
Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 148 | { |
| 149 | unsigned long i; |
| 150 | ecp_group grp; |
| 151 | ecp_point R; |
| 152 | mpi M; |
| 153 | |
| 154 | ecp_group_init( &grp ); ecp_point_init( &R ); mpi_init( &M ); |
| 155 | |
| 156 | ecp_use_known_dp( &grp, dp ); |
| 157 | mpi_read_string( &M, 16, m ); |
| 158 | |
| 159 | printf( " ECP-%s : ", s ); |
| 160 | fflush( stdout ); |
| 161 | set_alarm( 3 ); |
| 162 | |
| 163 | for( i = 1; ! alarmed; i++ ) |
| 164 | ecp_mul( &grp, &R, &M, &grp.G ); |
| 165 | |
| 166 | printf( "%9lu mul/s\n", i / 3 ); |
| 167 | |
| 168 | ecp_group_free( &grp ); ecp_point_free( &R ); mpi_free( &M ); |
| 169 | } |
| 170 | |
| 171 | #define ECP_192_M \ |
| 172 | "FE61330B02915F25970C2AF8575CBB227E6B6394774E6EC8" |
| 173 | #define ECP_224_M \ |
| 174 | "EAC63628087E32F61A383DCAED57E4348081FF3637D95B904C2FD487" |
| 175 | #define ECP_256_M \ |
| 176 | "83C4106612BDDB781DD446CF2A873D78AA0620B9003789244A18F83B39B3EA63" |
| 177 | #define ECP_384_M \ |
| 178 | "3E45569675A7E2E0E2E663A11E4226FBEF0F99A96CD6E547" \ |
| 179 | "9ABDDF36DD9AB7278BCD8B96A0775847A6431D2AF7476CD9" |
| 180 | #define ECP_521_M \ |
| 181 | "017F540D09F24EC6B102E8E4A9F14B850442D98C68FB29A6B09B9B9D40E2A750" \ |
| 182 | "7F3D2D6C5B6536B607EF2BCEA4797BB3A68F0D745410EB5CFFC7FF7FB17381544E" |
| 183 | |
Paul Bakker | 3c5ef71 | 2013-06-25 16:37:45 +0200 | [diff] [blame] | 184 | static void ecp_bench( void ) |
Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 185 | { |
Paul Bakker | 5dc6b5f | 2013-06-29 23:26:34 +0200 | [diff] [blame^] | 186 | #if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) |
| 187 | ecp_bench_case( POLARSSL_ECP_DP_SECP192R1, "192", ECP_192_M ); |
| 188 | #endif |
| 189 | #if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) |
| 190 | ecp_bench_case( POLARSSL_ECP_DP_SECP224R1, "224", ECP_224_M ); |
| 191 | #endif |
| 192 | #if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) |
| 193 | ecp_bench_case( POLARSSL_ECP_DP_SECP256R1, "256", ECP_256_M ); |
| 194 | #endif |
| 195 | #if defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) |
| 196 | ecp_bench_case( POLARSSL_ECP_DP_SECP384R1, "384", ECP_384_M ); |
| 197 | #endif |
| 198 | #if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) |
| 199 | ecp_bench_case( POLARSSL_ECP_DP_SECP521R1, "521", ECP_521_M ); |
| 200 | #endif |
Manuel Pégourié-Gonnard | 52a422f | 2012-11-08 14:56:25 +0100 | [diff] [blame] | 201 | } |
| 202 | |
| 203 | int main( int argc, char *argv[] ) |
| 204 | { |
| 205 | ((void) argv); |
| 206 | if( argc > 1 ) |
| 207 | { |
| 208 | dhm_bench(); |
| 209 | } |
| 210 | |
| 211 | ecp_bench(); |
| 212 | |
| 213 | return( 0 ); |
| 214 | } |
| 215 | #endif |