📄 speed.c
字号:
if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j<EC_NUM; j++) ecdsa_doit[j]=0; } } } if (rnd_fake) RAND_cleanup();#endif#ifndef OPENSSL_NO_ECDH if (RAND_status() != 1) { RAND_seed(rnd_seed, sizeof rnd_seed); rnd_fake = 1; } for (j=0; j<EC_NUM; j++) { if (!ecdh_doit[j]) continue; ecdh_a[j] = EC_KEY_new_by_curve_name(test_curves[j]); ecdh_b[j] = EC_KEY_new_by_curve_name(test_curves[j]); if ((ecdh_a[j] == NULL) || (ecdh_b[j] == NULL)) { BIO_printf(bio_err,"ECDH failure.\n"); ERR_print_errors(bio_err); rsa_count=1; } else { /* generate two ECDH key pairs */ if (!EC_KEY_generate_key(ecdh_a[j]) || !EC_KEY_generate_key(ecdh_b[j])) { BIO_printf(bio_err,"ECDH key generation failure.\n"); ERR_print_errors(bio_err); rsa_count=1; } else { /* If field size is not more than 24 octets, then use SHA-1 hash of result; * otherwise, use result (see section 4.8 of draft-ietf-tls-ecc-03.txt). */ int field_size, outlen; void *(*kdf)(const void *in, size_t inlen, void *out, size_t *xoutlen); field_size = EC_GROUP_get_degree(EC_KEY_get0_group(ecdh_a[j])); if (field_size <= 24 * 8) { outlen = KDF1_SHA1_len; kdf = KDF1_SHA1; } else { outlen = (field_size+7)/8; kdf = NULL; } secret_size_a = ECDH_compute_key(secret_a, outlen, EC_KEY_get0_public_key(ecdh_b[j]), ecdh_a[j], kdf); secret_size_b = ECDH_compute_key(secret_b, outlen, EC_KEY_get0_public_key(ecdh_a[j]), ecdh_b[j], kdf); if (secret_size_a != secret_size_b) ecdh_checks = 0; else ecdh_checks = 1; for (secret_idx = 0; (secret_idx < secret_size_a) && (ecdh_checks == 1); secret_idx++) { if (secret_a[secret_idx] != secret_b[secret_idx]) ecdh_checks = 0; } if (ecdh_checks == 0) { BIO_printf(bio_err,"ECDH computations don't match.\n"); ERR_print_errors(bio_err); rsa_count=1; } pkey_print_message("","ecdh", ecdh_c[j][0], test_curves_bits[j], ECDH_SECONDS); Time_F(START); for (count=0,run=1; COND(ecdh_c[j][0]); count++) { ECDH_compute_key(secret_a, outlen, EC_KEY_get0_public_key(ecdh_b[j]), ecdh_a[j], kdf); } d=Time_F(STOP); BIO_printf(bio_err, mr ? "+R7:%ld:%d:%.2f\n" :"%ld %d-bit ECDH ops in %.2fs\n", count, test_curves_bits[j], d); ecdh_results[j][0]=d/(double)count; rsa_count=count; } } if (rsa_count <= 1) { /* if longer than 10s, don't do any more */ for (j++; j<EC_NUM; j++) ecdh_doit[j]=0; } } if (rnd_fake) RAND_cleanup();#endif#ifdef HAVE_FORKshow_res:#endif if(!mr) { fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION)); fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON)); printf("options:"); printf("%s ",BN_options());#ifndef OPENSSL_NO_MD2 printf("%s ",MD2_options());#endif#ifndef OPENSSL_NO_RC4 printf("%s ",RC4_options());#endif#ifndef OPENSSL_NO_DES printf("%s ",DES_options());#endif#ifndef OPENSSL_NO_AES printf("%s ",AES_options());#endif#ifndef OPENSSL_NO_IDEA printf("%s ",idea_options());#endif#ifndef OPENSSL_NO_BF printf("%s ",BF_options());#endif fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS)); printf("available timing options: ");#ifdef TIMES printf("TIMES ");#endif#ifdef TIMEB printf("TIMEB ");#endif#ifdef USE_TOD printf("USE_TOD ");#endif#ifdef HZ#define as_string(s) (#s) { double dbl = HZ; printf("HZ=%g", dbl); }# ifdef _SC_CLK_TCK printf(" [sysconf value]");# endif#endif printf("\n"); printf("timing function used: %s%s%s%s%s%s%s\n", (ftime_used ? "ftime" : ""), (ftime_used + times_used > 1 ? "," : ""), (times_used ? "times" : ""), (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""), (gettimeofday_used ? "gettimeofday" : ""), (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""), (getrusage_used ? "getrusage" : "")); } if (pr_header) { if(mr) fprintf(stdout,"+H"); else { fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n"); fprintf(stdout,"type "); } for (j=0; j<SIZE_NUM; j++) fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]); fprintf(stdout,"\n"); } for (k=0; k<ALGOR_NUM; k++) { if (!doit[k]) continue; if(mr) fprintf(stdout,"+F:%d:%s",k,names[k]); else fprintf(stdout,"%-13s",names[k]); for (j=0; j<SIZE_NUM; j++) { if (results[k][j] > 10000 && !mr) fprintf(stdout," %11.2fk",results[k][j]/1e3); else fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]); } fprintf(stdout,"\n"); }#ifndef OPENSSL_NO_RSA j=1; for (k=0; k<RSA_NUM; k++) { if (!rsa_doit[k]) continue; if (j && !mr) { printf("%18ssign verify sign/s verify/s\n"," "); j=0; } if(mr) fprintf(stdout,"+F2:%u:%u:%f:%f\n", k,rsa_bits[k],rsa_results[k][0], rsa_results[k][1]); else fprintf(stdout,"rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", rsa_bits[k],rsa_results[k][0],rsa_results[k][1], 1.0/rsa_results[k][0],1.0/rsa_results[k][1]); }#endif#ifndef OPENSSL_NO_DSA j=1; for (k=0; k<DSA_NUM; k++) { if (!dsa_doit[k]) continue; if (j && !mr) { printf("%18ssign verify sign/s verify/s\n"," "); j=0; } if(mr) fprintf(stdout,"+F3:%u:%u:%f:%f\n", k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]); else fprintf(stdout,"dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", dsa_bits[k],dsa_results[k][0],dsa_results[k][1], 1.0/dsa_results[k][0],1.0/dsa_results[k][1]); }#endif#ifndef OPENSSL_NO_ECDSA j=1; for (k=0; k<EC_NUM; k++) { if (!ecdsa_doit[k]) continue; if (j && !mr) { printf("%30ssign verify sign/s verify/s\n"," "); j=0; } if (mr) fprintf(stdout,"+F4:%u:%u:%f:%f\n", k, test_curves_bits[k], ecdsa_results[k][0],ecdsa_results[k][1]); else fprintf(stdout, "%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", test_curves_bits[k], test_curves_names[k], ecdsa_results[k][0],ecdsa_results[k][1], 1.0/ecdsa_results[k][0],1.0/ecdsa_results[k][1]); }#endif#ifndef OPENSSL_NO_ECDH j=1; for (k=0; k<EC_NUM; k++) { if (!ecdh_doit[k]) continue; if (j && !mr) { printf("%30sop op/s\n"," "); j=0; } if (mr) fprintf(stdout,"+F5:%u:%u:%f:%f\n", k, test_curves_bits[k], ecdh_results[k][0], 1.0/ecdh_results[k][0]); else fprintf(stdout,"%4u bit ecdh (%s) %8.4fs %8.1f\n", test_curves_bits[k], test_curves_names[k], ecdh_results[k][0], 1.0/ecdh_results[k][0]); }#endif mret=0;end: ERR_print_errors(bio_err); if (buf != NULL) OPENSSL_free(buf); if (buf2 != NULL) OPENSSL_free(buf2);#ifndef OPENSSL_NO_RSA for (i=0; i<RSA_NUM; i++) if (rsa_key[i] != NULL) RSA_free(rsa_key[i]);#endif#ifndef OPENSSL_NO_DSA for (i=0; i<DSA_NUM; i++) if (dsa_key[i] != NULL) DSA_free(dsa_key[i]);#endif#ifndef OPENSSL_NO_ECDSA for (i=0; i<EC_NUM; i++) if (ecdsa[i] != NULL) EC_KEY_free(ecdsa[i]);#endif#ifndef OPENSSL_NO_ECDH for (i=0; i<EC_NUM; i++) { if (ecdh_a[i] != NULL) EC_KEY_free(ecdh_a[i]); if (ecdh_b[i] != NULL) EC_KEY_free(ecdh_b[i]); }#endif apps_shutdown(); OPENSSL_EXIT(mret); }static void print_message(const char *s, long num, int length) {#ifdef SIGALRM BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n" : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length); (void)BIO_flush(bio_err); alarm(SECONDS);#else BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n" : "Doing %s %ld times on %d size blocks: ",s,num,length); (void)BIO_flush(bio_err);#endif#ifdef LINT num=num;#endif }static void pkey_print_message(const char *str, const char *str2, long num, int bits, int tm) {#ifdef SIGALRM BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n" : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm); (void)BIO_flush(bio_err); alarm(RSA_SECONDS);#else BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n" : "Doing %ld %d bit %s %s's: ",num,bits,str,str2); (void)BIO_flush(bio_err);#endif#ifdef LINT num=num;#endif }static void print_result(int alg,int run_no,int count,double time_used) { BIO_printf(bio_err,mr ? "+R:%d:%s:%f\n" : "%d %s's in %.2fs\n",count,names[alg],time_used); results[alg][run_no]=((double)count)/time_used*lengths[run_no]; }static char *sstrsep(char **string, const char *delim) { char isdelim[256]; char *token = *string; if (**string == 0) return NULL; memset(isdelim, 0, sizeof isdelim); isdelim[0] = 1; while (*delim) { isdelim[(unsigned char)(*delim)] = 1; delim++; } while (!isdelim[(unsigned char)(**string)]) { (*string)++; } if (**string) { **string = 0; (*string)++; } return token; }#ifdef HAVE_FORKstatic int do_multi(int multi) { int n; int fd[2]; int *fds; static char sep[]=":"; fds=malloc(multi*sizeof *fds); for(n=0 ; n < multi ; ++n) { pipe(fd); if(fork()) { close(fd[1]); fds[n]=fd[0]; } else { close(fd[0]); close(1); dup(fd[1]); close(fd[1]); mr=1; usertime=0; return 0; } printf("Forked child %d\n",n); } /* for now, assume the pipe is long enough to take all the output */ for(n=0 ; n < multi ; ++n) { FILE *f; char buf[1024]; char *p; f=fdopen(fds[n],"r"); while(fgets(buf,sizeof buf,f)) { p=strchr(buf,'\n'); if(p) *p='\0'; if(buf[0] != '+') { fprintf(stderr,"Don't understand line '%s' from child %d\n", buf,n); continue; } printf("Got: %s from %d\n",buf,n); if(!strncmp(buf,"+F:",3)) { int alg; int j; p=buf+3; alg=atoi(sstrsep(&p,sep)); sstrsep(&p,sep); for(j=0 ; j < SIZE_NUM ; ++j) results[alg][j]+=atof(sstrsep(&p,sep)); } else if(!strncmp(buf,"+F2:",4)) { int k; double d; p=buf+4; k=atoi(sstrsep(&p,sep)); sstrsep(&p,sep); d=atof(sstrsep(&p,sep)); if(n) rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d); else rsa_results[k][0]=d; d=atof(sstrsep(&p,sep)); if(n) rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d); else rsa_results[k][1]=d; } else if(!strncmp(buf,"+F2:",4)) { int k; double d; p=buf+4; k=atoi(sstrsep(&p,sep)); sstrsep(&p,sep); d=atof(sstrsep(&p,sep)); if(n) rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d); else rsa_results[k][0]=d; d=atof(sstrsep(&p,sep)); if(n) rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d); else rsa_results[k][1]=d; } else if(!strncmp(buf,"+F3:",4)) { int k; double d; p=buf+4; k=atoi(sstrsep(&p,sep)); sstrsep(&p,sep); d=atof(sstrsep(&p,sep)); if(n) dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d); else dsa_results[k][0]=d; d=atof(sstrsep(&p,sep)); if(n) dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d); else dsa_results[k][1]=d; }#ifndef OPENSSL_NO_ECDSA else if(!strncmp(buf,"+F4:",4)) { int k; double d; p=buf+4; k=atoi(sstrsep(&p,sep)); sstrsep(&p,sep); d=atof(sstrsep(&p,sep)); if(n) ecdsa_results[k][0]=1/(1/ecdsa_results[k][0]+1/d)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -