📄 speed.c
字号:
/* apps/speed.c *//* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] *//* most of this code has been pilfered from my libdes speed.c program */#undef SECONDS#define SECONDS 3 #define RSA_SECONDS 10#define DSA_SECONDS 10/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added *//* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */#undef PROG#define PROG speed_main#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <string.h>#include <math.h>#include "apps.h"#ifdef NO_STDIO#define APPS_WIN16#endif#include <openssl/crypto.h>#include <openssl/rand.h>#include <openssl/err.h>#if defined(__FreeBSD__)# define USE_TOD#elif !defined(MSDOS) && (!defined(VMS) || defined(__DECC))# define TIMES#endif#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(MPE)# define TIMEB#endif#ifndef _IRIX# include <time.h>#endif#ifdef TIMES# include <sys/types.h># include <sys/times.h>#endif#ifdef USE_TOD# include <sys/time.h># include <sys/resource.h>#endif/* Depending on the VMS version, the tms structure is perhaps defined. The __TMS macro will show if it was. If it wasn't defined, we should undefine TIMES, since that tells the rest of the program how things should be handled. -- Richard Levitte */#if defined(VMS) && defined(__DECC) && !defined(__TMS)#undef TIMES#endif#ifdef TIMEB#include <sys/timeb.h>#endif#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD)#error "It seems neither struct tms nor struct timeb is supported in this platform!"#endif#if defined(sun) || defined(__ultrix)#define _POSIX_SOURCE#include <limits.h>#include <sys/param.h>#endif#ifndef NO_DES#include <openssl/des.h>#endif#ifndef NO_MD2#include <openssl/md2.h>#endif#ifndef NO_MDC2#include <openssl/mdc2.h>#endif#ifndef NO_MD4#include <openssl/md4.h>#endif#ifndef NO_MD5#include <openssl/md5.h>#endif#ifndef NO_HMAC#include <openssl/hmac.h>#endif#include <openssl/evp.h>#ifndef NO_SHA#include <openssl/sha.h>#endif#ifndef NO_RIPEMD#include <openssl/ripemd.h>#endif#ifndef NO_RC4#include <openssl/rc4.h>#endif#ifndef NO_RC5#include <openssl/rc5.h>#endif#ifndef NO_RC2#include <openssl/rc2.h>#endif#ifndef NO_IDEA#include <openssl/idea.h>#endif#ifndef NO_BF#include <openssl/blowfish.h>#endif#ifndef NO_CAST#include <openssl/cast.h>#endif#ifndef NO_RSA#include <openssl/rsa.h>#include "./testrsa.h"#endif#include <openssl/x509.h>#ifndef NO_DSA#include "./testdsa.h"#endif/* The following if from times(3) man page. It may need to be changed */#ifndef HZ# ifndef CLK_TCK# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */# define HZ 100.0# else /* _BSD_CLK_TCK_ */# define HZ ((double)_BSD_CLK_TCK_)# endif# else /* CLK_TCK */# define HZ ((double)CLK_TCK)# endif#endif#undef BUFSIZE#define BUFSIZE ((long)1024*8+1)int run=0;static double Time_F(int s, int usertime);static void print_message(char *s,long num,int length);static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);#ifdef SIGALRM#if defined(__STDC__) || defined(sgi) || defined(_AIX)#define SIGRETTYPE void#else#define SIGRETTYPE int#endif static SIGRETTYPE sig_done(int sig);static SIGRETTYPE sig_done(int sig) { signal(SIGALRM,sig_done); run=0;#ifdef LINT sig=sig;#endif }#endif#define START 0#define STOP 1static double Time_F(int s, int usertime) { double ret;#ifdef USE_TOD if(usertime) { static struct rusage tstart,tend; if (s == START) { getrusage(RUSAGE_SELF,&tstart); return(0); } else { long i; getrusage(RUSAGE_SELF,&tend); i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec; ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec)) +((double)i)/1000000.0; return((ret < 0.001)?0.001:ret); } } else { static struct timeval tstart,tend; long i; if (s == START) { gettimeofday(&tstart,NULL); return(0); } else { gettimeofday(&tend,NULL); i=(long)tend.tv_usec-(long)tstart.tv_usec; ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0; return((ret < 0.001)?0.001:ret); } }#else /* ndef USE_TOD */ # ifdef TIMES if (usertime) { static struct tms tstart,tend; if (s == START) { times(&tstart); return(0); } else { times(&tend); ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ; return((ret < 1e-3)?1e-3:ret); } }# endif /* times() */# if defined(TIMES) && defined(TIMEB) else# endif# ifdef TIMEB { static struct timeb tstart,tend; long i; if (s == START) { ftime(&tstart); return(0); } else { ftime(&tend); i=(long)tend.millitm-(long)tstart.millitm; ret=((double)(tend.time-tstart.time))+((double)i)/1000.0; return((ret < 0.001)?0.001:ret); } }# endif#endif }int MAIN(int, char **);int MAIN(int argc, char **argv) { unsigned char *buf=NULL,*buf2=NULL; int mret=1;#define ALGOR_NUM 15#define SIZE_NUM 5#define RSA_NUM 4#define DSA_NUM 3 long count,rsa_count; int i,j,k; unsigned rsa_num;#ifndef NO_MD2 unsigned char md2[MD2_DIGEST_LENGTH];#endif#ifndef NO_MDC2 unsigned char mdc2[MDC2_DIGEST_LENGTH];#endif#ifndef NO_MD4 unsigned char md4[MD4_DIGEST_LENGTH];#endif#ifndef NO_MD5 unsigned char md5[MD5_DIGEST_LENGTH]; unsigned char hmac[MD5_DIGEST_LENGTH];#endif#ifndef NO_SHA unsigned char sha[SHA_DIGEST_LENGTH];#endif#ifndef NO_RIPEMD unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];#endif#ifndef NO_RC4 RC4_KEY rc4_ks;#endif#ifndef NO_RC5 RC5_32_KEY rc5_ks;#endif#ifndef NO_RC2 RC2_KEY rc2_ks;#endif#ifndef NO_IDEA IDEA_KEY_SCHEDULE idea_ks;#endif#ifndef NO_BF BF_KEY bf_ks;#endif#ifndef NO_CAST CAST_KEY cast_ks;#endif static unsigned char key16[16]= {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0, 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; unsigned char iv[8];#ifndef 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}; des_key_schedule sch,sch2,sch3;#endif#define D_MD2 0#define D_MDC2 1#define D_MD4 2#define D_MD5 3#define D_HMAC 4#define D_SHA1 5#define D_RMD160 6#define D_RC4 7#define D_CBC_DES 8#define D_EDE3_DES 9#define D_CBC_IDEA 10#define D_CBC_RC2 11#define D_CBC_RC5 12#define D_CBC_BF 13#define D_CBC_CAST 14 double d,results[ALGOR_NUM][SIZE_NUM]; static int lengths[SIZE_NUM]={8,64,256,1024,8*1024}; long c[ALGOR_NUM][SIZE_NUM]; static char *names[ALGOR_NUM]={ "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4", "des cbc","des ede3","idea cbc", "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};#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#ifndef NO_RSA RSA *rsa_key[RSA_NUM]; long rsa_c[RSA_NUM][2]; double rsa_results[RSA_NUM][2]; static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096}; static unsigned char *rsa_data[RSA_NUM]= {test512,test1024,test2048,test4096}; static int rsa_data_length[RSA_NUM]={ sizeof(test512),sizeof(test1024), sizeof(test2048),sizeof(test4096)};#endif#ifndef NO_DSA DSA *dsa_key[DSA_NUM]; long dsa_c[DSA_NUM][2]; double dsa_results[DSA_NUM][2]; static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};#endif int rsa_doit[RSA_NUM]; int dsa_doit[DSA_NUM]; int doit[ALGOR_NUM]; int pr_header=0; int usertime=1;#ifndef TIMES usertime=-1;#endif apps_startup(); memset(results, 0, sizeof(results));#ifndef NO_DSA memset(dsa_key,0,sizeof(dsa_key));#endif if (bio_err == NULL) if ((bio_err=BIO_new(BIO_s_file())) != NULL) BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);#ifndef NO_RSA memset(rsa_key,0,sizeof(rsa_key)); for (i=0; i<RSA_NUM; i++) rsa_key[i]=NULL;#endif if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL) { BIO_printf(bio_err,"out of memory\n"); goto end; }#ifndef 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"); goto end; } memset(c,0,sizeof(c)); memset(iv,0,sizeof(iv)); for (i=0; i<ALGOR_NUM; i++) doit[i]=0; for (i=0; i<RSA_NUM; i++) rsa_doit[i]=0; for (i=0; i<DSA_NUM; i++) dsa_doit[i]=0; j=0; argc--; argv++; while (argc) { if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0)) usertime = 0;#ifndef NO_MD2 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1; else#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -