X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=apps%2Fspeed.c;h=619269bc694644e1259486a6347cf45c8124cdad;hb=2f1dffa88e1b120add4f0b3a794fbca65aa7768d;hp=1bd2ce264c213618f5384b0c996d10cec2ff0d1e;hpb=bab534057b855a7dbf98261d494897b3542bd9d5;p=openssl.git diff --git a/apps/speed.c b/apps/speed.c index 1bd2ce264c..619269bc69 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -74,9 +74,10 @@ #ifndef OPENSSL_NO_SPEED #undef SECONDS -#define SECONDS 3 -#define RSA_SECONDS 10 -#define DSA_SECONDS 10 +#define SECONDS 3 +#define PRIME_SECONDS 10 +#define RSA_SECONDS 10 +#define DSA_SECONDS 10 #define ECDSA_SECONDS 10 #define ECDH_SECONDS 10 @@ -108,8 +109,14 @@ #include #endif -#ifdef _WIN32 +#if defined(_WIN32) || defined(__CYGWIN__) #include +# if defined(__CYGWIN__) && !defined(_WIN32) + /* should define _WIN32, which normally is mutually + * exclusive with __CYGWIN__, but if it didn't... */ +# define _WIN32 + /* this is done because Cygwin alarm() fails sometimes. */ +# endif #endif #include @@ -183,9 +190,22 @@ #ifndef OPENSSL_NO_ECDH #include #endif +#include -#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2) && !defined(OPENSSL_SYS_NETWARE) -# define HAVE_FORK 1 +#include "../crypto/bn/bn_lcl.h" + +#ifndef HAVE_FORK +# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MACINTOSH_CLASSIC) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE) +# define HAVE_FORK 0 +# else +# define HAVE_FORK 1 +# endif +#endif + +#if HAVE_FORK +#undef NO_FORK +#else +#define NO_FORK #endif #undef BUFSIZE @@ -197,15 +217,18 @@ static int usertime=1; static double Time_F(int s); static void print_message(const char *s,long num,int length); +static void prime_print_message(const char *s, long num); static void pkey_print_message(const char *str, const char *str2, long num, int bits, int sec); static void print_result(int alg,int run_no,int count,double time_used); -#ifdef HAVE_FORK +static void prime_print_result(int alg, int count, double time_used); +#ifndef NO_FORK static int do_multi(int multi); #endif -#define ALGOR_NUM 29 +#define ALGOR_NUM 30 #define SIZE_NUM 5 +#define PRIME_NUM 3 #define RSA_NUM 4 #define DSA_NUM 3 @@ -219,11 +242,17 @@ static const char *names[ALGOR_NUM]={ "aes-128 cbc","aes-192 cbc","aes-256 cbc", "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc", "evp","sha256","sha512","whirlpool", - "aes-128 ige","aes-192 ige","aes-256 ige"}; + "aes-128 ige","aes-192 ige","aes-256 ige","ghash" }; static double results[ALGOR_NUM][SIZE_NUM]; static int lengths[SIZE_NUM]={16,64,256,1024,8*1024}; +static const char *prime_names[PRIME_NUM]={ + "prime trial division", "prime trial division retry", "prime coprime" }; +#ifndef OPENSSL_NO_RSA static double rsa_results[RSA_NUM][2]; +#endif +#ifndef OPENSSL_NO_DSA static double dsa_results[DSA_NUM][2]; +#endif #ifndef OPENSSL_NO_ECDSA static double ecdsa_results[EC_NUM][2]; #endif @@ -259,9 +288,12 @@ static SIGRETTYPE sig_done(int sig) #if defined(_WIN32) -#define SIGALRM +#if !defined(SIGALRM) +# define SIGALRM +#endif static unsigned int lapse,schlock; -static void alarm(unsigned int secs) { lapse = secs*1000; } +static void alarm_win32(unsigned int secs) { lapse = secs*1000; } +#define alarm alarm_win32 static DWORD WINAPI sleepy(VOID *arg) { @@ -273,9 +305,11 @@ static DWORD WINAPI sleepy(VOID *arg) static double Time_F(int s) { + double ret; + static HANDLE thr; + if (s == START) { - HANDLE thr; schlock = 0; thr = CreateThread(NULL,4096,sleepy,NULL,0,NULL); if (thr==NULL) @@ -284,17 +318,25 @@ static double Time_F(int s) BIO_printf(bio_err,"unable to CreateThread (%d)",ret); ExitProcess(ret); } - CloseHandle(thr); /* detach the thread */ while (!schlock) Sleep(0); /* scheduler spinlock */ + ret = app_tminterval(s,usertime); + } + else + { + ret = app_tminterval(s,usertime); + if (run) TerminateThread(thr,0); + CloseHandle(thr); } - return app_tminterval(s,usertime); + return ret; } #else static double Time_F(int s) { - return app_tminterval(s,usertime); + double ret = app_tminterval(s,usertime); + if (s == STOP) alarm(0); + return ret; } #endif @@ -320,9 +362,6 @@ int MAIN(int, char **); int MAIN(int argc, char **argv) { -#ifndef OPENSSL_NO_ENGINE - ENGINE *e = NULL; -#endif unsigned char *buf=NULL,*buf2=NULL; int mret=1; long count=0,save_count=0; @@ -416,7 +455,6 @@ int MAIN(int argc, char **argv) unsigned char DES_iv[8]; unsigned char iv[2*MAX_BLOCK_SIZE/8]; #ifndef OPENSSL_NO_DES - DES_cblock *buf_as_des_cblock = NULL; static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}; static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; @@ -459,8 +497,15 @@ int MAIN(int argc, char **argv) #define D_IGE_128_AES 26 #define D_IGE_192_AES 27 #define D_IGE_256_AES 28 +#define D_GHASH 29 double d=0.0; long c[ALGOR_NUM][SIZE_NUM]; + +#define D_PRIME_TRIAL_DIVISION 0 +#define D_PRIME_TRIAL_DIVISION_RETRY 1 +#define D_PRIME_COPRIME 2 + long prime_c[PRIME_NUM]; + #define R_DSA_512 0 #define R_DSA_1024 1 #define R_DSA_2048 2 @@ -574,6 +619,7 @@ int MAIN(int argc, char **argv) long ecdh_c[EC_NUM][2]; #endif + int prime_doit[PRIME_NUM]; int rsa_doit[RSA_NUM]; int dsa_doit[DSA_NUM]; #ifndef OPENSSL_NO_ECDSA @@ -587,7 +633,7 @@ int MAIN(int argc, char **argv) const EVP_CIPHER *evp_cipher=NULL; const EVP_MD *evp_md=NULL; int decrypt=0; -#ifdef HAVE_FORK +#ifndef NO_FORK int multi=0; #endif @@ -630,9 +676,6 @@ int MAIN(int argc, char **argv) BIO_printf(bio_err,"out of memory\n"); goto end; } -#ifndef OPENSSL_NO_DES - buf_as_des_cblock = (DES_cblock *)buf; -#endif if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) { BIO_printf(bio_err,"out of memory\n"); @@ -657,6 +700,8 @@ int MAIN(int argc, char **argv) for (i=0; i 0) && (strcmp(*argv,"-multi") == 0)) { argc--; @@ -887,6 +932,10 @@ int MAIN(int argc, char **argv) doit[D_CBC_192_AES]=1; doit[D_CBC_256_AES]=1; } + else if (strcmp(*argv,"ghash") == 0) + { + doit[D_GHASH]=1; + } else #endif #ifndef OPENSSL_NO_CAMELLIA @@ -942,7 +991,7 @@ int MAIN(int argc, char **argv) else #endif #ifndef OPENSSL_NO_ECDH - if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2; + if (strcmp(*argv,"ecdhp160") == 0) ecdh_doit[R_EC_P160]=2; else if (strcmp(*argv,"ecdhp192") == 0) ecdh_doit[R_EC_P192]=2; else if (strcmp(*argv,"ecdhp224") == 0) ecdh_doit[R_EC_P224]=2; else if (strcmp(*argv,"ecdhp256") == 0) ecdh_doit[R_EC_P256]=2; @@ -965,6 +1014,18 @@ int MAIN(int argc, char **argv) } else #endif + if (strcmp(*argv,"prime-trial-division") == 0) + prime_doit[D_PRIME_TRIAL_DIVISION] = 1; + else if (strcmp(*argv,"prime-trial-division-retry") == 0) + prime_doit[D_PRIME_TRIAL_DIVISION_RETRY] = 1; + else if (strcmp(*argv,"prime-coprime") == 0) + prime_doit[D_PRIME_COPRIME] = 1; + else if (strcmp(*argv,"prime") == 0) + { + for (i=0; i < PRIME_NUM; i++) + prime_doit[i]=1; + } + else { BIO_printf(bio_err,"Error: bad option or value\n"); BIO_printf(bio_err,"\n"); @@ -1091,6 +1152,7 @@ int MAIN(int argc, char **argv) !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA) BIO_printf(bio_err,"\n"); #endif + BIO_printf(bio_err,"prime-trial-division prime-coprime\n"); BIO_printf(bio_err,"\n"); BIO_printf(bio_err,"Available options:\n"); @@ -1103,7 +1165,7 @@ int MAIN(int argc, char **argv) BIO_printf(bio_err,"-evp e use EVP e.\n"); BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n"); BIO_printf(bio_err,"-mr produce machine readable output.\n"); -#ifdef HAVE_FORK +#ifndef NO_FORK BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n"); #endif goto end; @@ -1113,7 +1175,7 @@ int MAIN(int argc, char **argv) j++; } -#ifdef HAVE_FORK +#ifndef NO_FORK if(multi && do_multi(multi)) goto show_res; #endif @@ -1129,6 +1191,14 @@ int MAIN(int argc, char **argv) rsa_doit[i]=1; for (i=0; i