X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=apps%2Fspeed.c;h=e5742e624bfa42a46ae42eb725abab3c0e0d00e8;hb=5ad4fdce41bb1ce7762b70fb50f732f70e3772cf;hp=78b79239b2d1e6b6547da3a59b1ac8100b7a1ba3;hpb=c09ec5d2a0e368b18efc1cbf2444fdb37ca7270b;p=oweals%2Fopenssl.git diff --git a/apps/speed.c b/apps/speed.c index 78b79239b2..e5742e624b 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -56,7 +56,7 @@ * [including the GNU Public Licence.] */ /* ==================================================================== - * Copyright 2002-2014 Sun Microsystems, Inc. ALL RIGHTS RESERVED. + * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. @@ -93,9 +93,6 @@ #include #include #include "apps.h" -#ifdef OPENSSL_NO_STDIO -#define APPS_WIN16 -#endif #include #include #include @@ -192,10 +189,10 @@ #endif #include -#include "../crypto/bn/bn_lcl.h" +#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 @@ -209,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,19 +216,17 @@ 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); -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 30 #define SIZE_NUM 5 -#define PRIME_NUM 2 -#define RSA_NUM 4 +#define PRIME_NUM 3 +#define RSA_NUM 7 #define DSA_NUM 3 #define EC_NUM 16 @@ -245,8 +242,6 @@ static const char *names[ALGOR_NUM]={ "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 coprime" }; #ifndef OPENSSL_NO_RSA static double rsa_results[RSA_NUM][2]; #endif @@ -277,9 +272,6 @@ static SIGRETTYPE sig_done(int sig) { signal(SIGALRM,sig_done); run=0; -#ifdef LINT - sig=sig; -#endif } #endif @@ -357,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; @@ -501,17 +495,18 @@ int MAIN(int argc, char **argv) double d=0.0; long c[ALGOR_NUM][SIZE_NUM]; -#define D_PRIME_TRIAL_DIVISION 0 -#define D_PRIME_COPRIME 1 - long prime_c[PRIME_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 @@ -533,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]; @@ -618,7 +615,6 @@ 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 @@ -635,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; @@ -670,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)); @@ -699,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; @@ -880,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; @@ -950,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 @@ -1011,9 +1042,6 @@ 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-coprime") == 0) prime_doit[D_PRIME_COPRIME]=1; - else { BIO_printf(bio_err,"Error: bad option or value\n"); BIO_printf(bio_err,"\n"); @@ -1091,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 @@ -1140,7 +1169,6 @@ 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"); @@ -1153,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 @@ -1348,9 +1378,7 @@ int MAIN(int argc, char **argv) c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1; c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1; } - - prime_c[D_PRIME_TRIAL_DIVISION]=count; - prime_c[D_PRIME_COPRIME]=count; + #ifndef OPENSSL_NO_RSA rsa_c[R_RSA_512][0]=count/2000; @@ -1968,6 +1996,19 @@ int MAIN(int argc, char **argv) if (doit[D_EVP]) { +#ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK + if (multiblock && evp_cipher) + { + if (!(EVP_CIPHER_flags(evp_cipher)&EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) + { + fprintf(stderr,"%s is not multi-block capable\n",OBJ_nid2ln(evp_cipher->nid)); + 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