#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
+#if !defined(OPENSSL_SYS_MSDOS)
#include OPENSSL_UNISTD
+#endif
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
# define USE_TOD
# endif
#endif
+#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2)
+# define HAVE_FORK 1
+#endif
+
#undef BUFSIZE
#define BUFSIZE ((long)1024*8+1)
int run=0;
static void print_message(const char *s,long num,int length);
static void pkey_print_message(char *str,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 int do_multi(int multi);
-#ifdef SIGALRM
-#if defined(__STDC__) || defined(sgi) || defined(_AIX)
-#define SIGRETTYPE void
-#else
-#define SIGRETTYPE int
-#endif
+#endif
#define ALGOR_NUM 16
#define SIZE_NUM 5
static double rsa_results[RSA_NUM][2];
static double dsa_results[DSA_NUM][2];
+#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)
{
ENGINE *e;
unsigned char *buf=NULL,*buf2=NULL;
int mret=1;
- long count,rsa_count,save_count=0;
+ long count=0,rsa_count,save_count=0;
int i,j,k;
#ifndef OPENSSL_NO_RSA
unsigned rsa_num;
#endif
+ unsigned char md[EVP_MAX_MD_SIZE];
#ifndef OPENSSL_NO_MD2
unsigned char md2[MD2_DIGEST_LENGTH];
#endif
#define D_CBC_BF 13
#define D_CBC_CAST 14
#define D_EVP 15
- double d;
+ double d=0;
long c[ALGOR_NUM][SIZE_NUM];
#define R_DSA_512 0
#define R_DSA_1024 1
int dsa_doit[DSA_NUM];
int doit[ALGOR_NUM];
int pr_header=0;
- const EVP_CIPHER *evp=NULL;
+ const EVP_CIPHER *evp_cipher=NULL;
+ const EVP_MD *evp_md=NULL;
int decrypt=0;
+#ifdef HAVE_FORK
int multi=0;
+#endif
#ifndef TIMES
usertime=-1;
BIO_printf(bio_err,"no EVP given\n");
goto end;
}
- evp=EVP_get_cipherbyname(*argv);
- if(!evp)
+ evp_cipher=EVP_get_cipherbyname(*argv);
+ if(!evp_cipher)
{
- BIO_printf(bio_err,"%s is an unknown cipher\n",*argv);
+ evp_md=EVP_get_digestbyname(*argv);
+ }
+ if(!evp_cipher && !evp_md)
+ {
+ BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
goto end;
}
doit[D_EVP]=1;
means all of them should be run) */
j--;
}
+#ifdef HAVE_FORK
else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
{
argc--;
BIO_printf(bio_err,"bad multi count\n");
goto end;
}
+ j--; /* Otherwise, -mr gets confused with
+ an algorithm. */
}
+#endif
else if (argc > 0 && !strcmp(*argv,"-mr"))
{
mr=1;
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
BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
+#endif
goto end;
}
argc--;
j++;
}
+#ifdef HAVE_FORK
if(multi && do_multi(multi))
goto show_res;
+#endif
if (j == 0)
{
do {
long i;
count*=2;
- Time_F(START,usertime);
+ Time_F(START);
for (i=count; i; i--)
- des_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
+ DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
&sch,DES_ENCRYPT);
d=Time_F(STOP);
} while (d <3);
HMAC_CTX hctx;
HMAC_CTX_init(&hctx);
- HMAC_Init(&hctx,(unsigned char *)"This is a key...",
- 16,EVP_md5());
+ HMAC_Init_ex(&hctx,(unsigned char *)"This is a key...",
+ 16,EVP_md5());
for (j=0; j<SIZE_NUM; j++)
{
Time_F(START);
for (count=0,run=1; COND(c[D_HMAC][j]); count++)
{
- HMAC_Init(&hctx,NULL,0,NULL);
+ HMAC_Init_ex(&hctx,NULL,0,NULL);
HMAC_Update(&hctx,buf,lengths[j]);
HMAC_Final(&hctx,&(hmac[0]),NULL);
}
{
for (j=0; j<SIZE_NUM; j++)
{
- EVP_CIPHER_CTX ctx;
- int outl;
-
- names[D_EVP]=OBJ_nid2ln(evp->nid);
- print_message(names[D_EVP],save_count,
- lengths[j]);
- EVP_CIPHER_CTX_init(&ctx);
- if(decrypt)
- EVP_DecryptInit_ex(&ctx,evp,NULL,key16,iv);
- else
- EVP_EncryptInit_ex(&ctx,evp,NULL,key16,iv);
-
- Time_F(START);
- if(decrypt)
- for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
- EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
- else
+ if (evp_cipher)
+ {
+ EVP_CIPHER_CTX ctx;
+ int outl;
+
+ names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
+ print_message(names[D_EVP],save_count,
+ lengths[j]);
+
+ EVP_CIPHER_CTX_init(&ctx);
+ if(decrypt)
+ EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
+ else
+ EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
+
+ Time_F(START);
+ if(decrypt)
+ for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
+ EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
+ else
+ for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
+ EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
+ if(decrypt)
+ EVP_DecryptFinal_ex(&ctx,buf,&outl);
+ else
+ EVP_EncryptFinal_ex(&ctx,buf,&outl);
+ d=Time_F(STOP);
+ }
+ if (evp_md)
+ {
+ names[D_EVP]=OBJ_nid2ln(evp_md->type);
+ print_message(names[D_EVP],save_count,
+ lengths[j]);
+
+ Time_F(START);
for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
- EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
- if(decrypt)
- EVP_DecryptFinal_ex(&ctx,buf,&outl);
- else
- EVP_EncryptFinal_ex(&ctx,buf,&outl);
- d=Time_F(STOP);
+ EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
+
+ d=Time_F(STOP);
+ }
print_result(D_EVP,j,count,d);
}
}
}
if (rnd_fake) RAND_cleanup();
#endif
+#ifdef HAVE_FORK
show_res:
+#endif
if(!mr)
{
fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
#endif
#ifdef HZ
#define as_string(s) (#s)
- printf("HZ=%g", HZ);
+ printf("HZ=%g", (double)HZ);
# ifdef _SC_CLK_TCK
printf(" [sysconf value]");
# endif
return token;
}
+#ifdef HAVE_FORK
static int do_multi(int multi)
{
int n;
}
return 1;
}
-
+#endif