X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=apps%2Fspeed.c;h=e5742e624bfa42a46ae42eb725abab3c0e0d00e8;hb=5ad4fdce41bb1ce7762b70fb50f732f70e3772cf;hp=de07054077efcc2bbc3569c3b5273e479c064364;hpb=91f0828c9582106fb7c1c319c2cb21cce7a03e13;p=oweals%2Fopenssl.git diff --git a/apps/speed.c b/apps/speed.c index de07054077..e5742e624b 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 @@ -92,9 +93,6 @@ #include #include #include "apps.h" -#ifdef OPENSSL_NO_STDIO -#define APPS_WIN16 -#endif #include #include #include @@ -108,8 +106,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 @@ -185,8 +189,10 @@ #endif #include +#include + #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) +# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_OS2) || defined(OPENSSL_SYS_NETWARE) # define HAVE_FORK 0 # else # define HAVE_FORK 1 @@ -200,7 +206,9 @@ #endif #undef BUFSIZE -#define BUFSIZE ((long)1024*8+1) +#define BUFSIZE (1024*8+1) +#define MAX_MISALIGNMENT 63 + int run=0; static int mr=0; @@ -217,7 +225,8 @@ static int do_multi(int multi); #define ALGOR_NUM 30 #define SIZE_NUM 5 -#define RSA_NUM 4 +#define PRIME_NUM 3 +#define RSA_NUM 7 #define DSA_NUM 3 #define EC_NUM 16 @@ -263,9 +272,6 @@ static SIGRETTYPE sig_done(int sig) { signal(SIGALRM,sig_done); run=0; -#ifdef LINT - sig=sig; -#endif } #endif @@ -274,9 +280,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) { @@ -340,11 +349,13 @@ static void *KDF1_SHA1(const void *in, size_t inlen, void *out, size_t *outlen) } #endif /* OPENSSL_NO_ECDH */ +static void multiblock_speed(const EVP_CIPHER *evp_cipher); int MAIN(int, char **); int MAIN(int argc, char **argv) { + unsigned char *buf_malloc=NULL, *buf2_malloc=NULL; unsigned char *buf=NULL,*buf2=NULL; int mret=1; long count=0,save_count=0; @@ -480,16 +491,22 @@ 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 +#define D_GHASH 29 double d=0.0; long c[ALGOR_NUM][SIZE_NUM]; + +#ifndef OPENSSL_SYS_WIN32 +#endif #define R_DSA_512 0 #define R_DSA_1024 1 #define R_DSA_2048 2 #define R_RSA_512 0 #define R_RSA_1024 1 #define R_RSA_2048 2 -#define R_RSA_4096 3 +#define R_RSA_3072 3 +#define R_RSA_4096 4 +#define R_RSA_7680 5 +#define R_RSA_15360 6 #define R_EC_P160 0 #define R_EC_P192 1 @@ -511,12 +528,14 @@ int MAIN(int argc, char **argv) #ifndef OPENSSL_NO_RSA RSA *rsa_key[RSA_NUM]; long rsa_c[RSA_NUM][2]; - static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096}; + static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,3072,4096,7680,15360}; static unsigned char *rsa_data[RSA_NUM]= - {test512,test1024,test2048,test4096}; + {test512,test1024,test2048,test3072,test4096,test7680,test15360}; static int rsa_data_length[RSA_NUM]={ sizeof(test512),sizeof(test1024), - sizeof(test2048),sizeof(test4096)}; + sizeof(test2048),sizeof(test3072), + sizeof(test4096),sizeof(test7680), + sizeof(test15360)}; #endif #ifndef OPENSSL_NO_DSA DSA *dsa_key[DSA_NUM]; @@ -612,6 +631,8 @@ int MAIN(int argc, char **argv) #ifndef NO_FORK int multi=0; #endif + int multiblock=0; + int misalign=MAX_MISALIGNMENT+1; #ifndef TIMES usertime=-1; @@ -647,17 +668,21 @@ int MAIN(int argc, char **argv) rsa_key[i]=NULL; #endif - if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) + if ((buf_malloc=(unsigned char *)OPENSSL_malloc(BUFSIZE+misalign)) == NULL) { BIO_printf(bio_err,"out of memory\n"); goto end; } - if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) + if ((buf2_malloc=(unsigned char *)OPENSSL_malloc(BUFSIZE+misalign)) == NULL) { BIO_printf(bio_err,"out of memory\n"); goto end; } + misalign = 0; /* set later and buf/buf2 are adjusted accordingly */ + buf=buf_malloc; + buf2=buf2_malloc; + memset(c,0,sizeof(c)); memset(DES_iv,0,sizeof(DES_iv)); memset(iv,0,sizeof(iv)); @@ -676,7 +701,6 @@ int MAIN(int argc, char **argv) for (i=0; i 0 && !strcmp(*argv,"-mb")) + { + multiblock=1; + j--; + } + else if (argc > 0 && !strcmp(*argv,"-misalign")) + { + argc--; + argv++; + if (argc == 0) + { + BIO_printf(bio_err,"no misalignment given\n"); + goto end; + } + misalign=atoi(argv[0]); + if (misalign<0 || misalign>MAX_MISALIGNMENT) + { + BIO_printf(bio_err,"misalignment is outsize permitted range 0-%d\n",MAX_MISALIGNMENT); + goto end; + } + buf=buf_malloc+misalign; + buf2=buf2_malloc+misalign; + j--; + } else #ifndef OPENSSL_NO_MD2 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1; @@ -857,7 +905,10 @@ int MAIN(int argc, char **argv) else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2; else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2; else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2; + else if (strcmp(*argv,"rsa3072") == 0) rsa_doit[R_RSA_3072]=2; else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2; + else if (strcmp(*argv,"rsa7680") == 0) rsa_doit[R_RSA_7680]=2; + else if (strcmp(*argv,"rsa15360") == 0) rsa_doit[R_RSA_15360]=2; else #ifndef OPENSSL_NO_RC2 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1; @@ -927,7 +978,10 @@ int MAIN(int argc, char **argv) rsa_doit[R_RSA_512]=1; rsa_doit[R_RSA_1024]=1; rsa_doit[R_RSA_2048]=1; + rsa_doit[R_RSA_3072]=1; rsa_doit[R_RSA_4096]=1; + rsa_doit[R_RSA_7680]=1; + rsa_doit[R_RSA_15360]=1; } else #endif @@ -965,7 +1019,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; @@ -1065,7 +1119,8 @@ int MAIN(int argc, char **argv) BIO_printf(bio_err,"\n"); #ifndef OPENSSL_NO_RSA - BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n"); + BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa3072 rsa4096\n"); + BIO_printf(bio_err,"rsa7680 rsa15360\n"); #endif #ifndef OPENSSL_NO_DSA @@ -1126,6 +1181,8 @@ 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"); + BIO_printf(bio_err,"-mb perform multi-block benchmark (for specific ciphers)\n"); + BIO_printf(bio_err,"-misalign n perform benchmark with misaligned data\n"); #ifndef NO_FORK BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n"); #endif @@ -1282,25 +1339,26 @@ int MAIN(int argc, char **argv) c[D_IGE_256_AES][0]=count; c[D_GHASH][0]=count; - for (i=1; inid)); + goto end; + } + multiblock_speed(evp_cipher); + mret=0; + goto end; + } +#endif for (j=0; jnid); + + for (j=0; j0) + { + mb_param.out = out; + mb_param.inp = inp; + mb_param.len = len; + EVP_CIPHER_CTX_ctrl(&ctx, + EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT, + sizeof(mb_param),&mb_param); + } + else + { + int pad; + + RAND_bytes(out,16); + len+=16; + aad[11] = len>>8; + aad[12] = len; + pad=EVP_CIPHER_CTX_ctrl(&ctx, + EVP_CTRL_AEAD_TLS1_AAD,13,aad); + EVP_Cipher(&ctx,out,inp,len+pad); + } + } + d=Time_F(STOP); + BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n" + : "%d %s's in %.2fs\n",count,"evp",d); + results[D_EVP][j]=((double)count)/d*mblengths[j]; + } + + if (mr) + { + fprintf(stdout,"+H"); + for (j=0; j 10000) + fprintf(stdout," %11.2fk",results[D_EVP][j]/1e3); + else + fprintf(stdout," %11.2f ",results[D_EVP][j]); + } + fprintf(stdout,"\n"); + } + + OPENSSL_free(inp); + OPENSSL_free(out); + } #endif