blob: f4bff5c1da2d814f02607f84dd22a2b7a875165e [file] [log] [blame]
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001/* apps/speed.c */
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00002/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00003 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59/* most of this code has been pilfered from my libdes speed.c program */
60
61#undef SECONDS
62#define SECONDS 3
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +000063#define RSA_SECONDS 10
64#define DSA_SECONDS 10
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000065
66/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
67/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
68
69#undef PROG
70#define PROG speed_main
71
72#include <stdio.h>
73#include <stdlib.h>
74#include <signal.h>
75#include <string.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000076#include <math.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000077#include "apps.h"
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000078#ifdef NO_STDIO
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000079#define APPS_WIN16
80#endif
Bodo Möllerec577821999-04-23 22:13:45 +000081#include <openssl/crypto.h>
82#include <openssl/rand.h>
83#include <openssl/err.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000084
Ulf Möller7d7d2cb1999-05-13 11:37:32 +000085#if !defined(MSDOS) && (!defined(VMS) || defined(__DECC))
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000086#define TIMES
87#endif
88
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000089#ifndef _IRIX
90#include <time.h>
91#endif
92#ifdef TIMES
93#include <sys/types.h>
94#include <sys/times.h>
95#endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +000096
97/* Depending on the VMS version, the tms structure is perhaps defined.
98 The __TMS macro will show if it was. If it wasn't defined, we should
99 undefine TIMES, since that tells the rest of the program how things
100 should be handled. -- Richard Levitte */
101#if defined(VMS) && defined(__DECC) && !defined(__TMS)
102#undef TIMES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000103#endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000104
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000105#ifndef TIMES
106#include <sys/timeb.h>
107#endif
108
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000109#if defined(sun) || defined(__ultrix)
110#define _POSIX_SOURCE
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000111#include <limits.h>
112#include <sys/param.h>
113#endif
114
115#ifndef NO_DES
Bodo Möllerec577821999-04-23 22:13:45 +0000116#include <openssl/des.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000117#endif
118#ifndef NO_MD2
Bodo Möllerec577821999-04-23 22:13:45 +0000119#include <openssl/md2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000120#endif
121#ifndef NO_MDC2
Bodo Möllerec577821999-04-23 22:13:45 +0000122#include <openssl/mdc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000123#endif
124#ifndef NO_MD5
Bodo Möllerec577821999-04-23 22:13:45 +0000125#include <openssl/md5.h>
126#include <openssl/hmac.h>
127#include <openssl/evp.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000128#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000129#ifndef NO_SHA
Bodo Möllerec577821999-04-23 22:13:45 +0000130#include <openssl/sha.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000131#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000132#ifndef NO_RIPEMD
Bodo Möllerec577821999-04-23 22:13:45 +0000133#include <openssl/ripemd.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000134#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000135#ifndef NO_RC4
Bodo Möllerec577821999-04-23 22:13:45 +0000136#include <openssl/rc4.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000137#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000138#ifndef NO_RC5
Bodo Möllerec577821999-04-23 22:13:45 +0000139#include <openssl/rc5.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000140#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000141#ifndef NO_RC2
Bodo Möllerec577821999-04-23 22:13:45 +0000142#include <openssl/rc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000143#endif
144#ifndef NO_IDEA
Bodo Möllerec577821999-04-23 22:13:45 +0000145#include <openssl/idea.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000146#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000147#ifndef NO_BF
Bodo Möllerec577821999-04-23 22:13:45 +0000148#include <openssl/blowfish.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000149#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000150#ifndef NO_CAST
Bodo Möllerec577821999-04-23 22:13:45 +0000151#include <openssl/cast.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000152#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000153#ifndef NO_RSA
Bodo Möllerec577821999-04-23 22:13:45 +0000154#include <openssl/rsa.h>
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000155#include "./testrsa.h"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000156#endif
Bodo Möllerec577821999-04-23 22:13:45 +0000157#include <openssl/x509.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000158#ifndef NO_DSA
159#include "./testdsa.h"
160#endif
161
162/* The following if from times(3) man page. It may need to be changed */
163#ifndef HZ
164# ifndef CLK_TCK
165# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
166# ifndef VMS
167# define HZ 100.0
168# else /* VMS */
169# define HZ 100.0
170# endif
171# else /* _BSD_CLK_TCK_ */
172# define HZ ((double)_BSD_CLK_TCK_)
173# endif
174# else /* CLK_TCK */
175# define HZ ((double)CLK_TCK)
176# endif
177#endif
178
179#undef BUFSIZE
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000180#define BUFSIZE ((long)1024*8+1)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000181int run=0;
182
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000183static double Time_F(int s);
184static void print_message(char *s,long num,int length);
185static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000186#ifdef SIGALRM
187#if defined(__STDC__) || defined(sgi) || defined(_AIX)
188#define SIGRETTYPE void
189#else
190#define SIGRETTYPE int
191#endif
192
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000193static SIGRETTYPE sig_done(int sig);
Ulf Möller6b691a51999-04-19 21:31:43 +0000194static SIGRETTYPE sig_done(int sig)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000195 {
196 signal(SIGALRM,sig_done);
197 run=0;
198#ifdef LINT
199 sig=sig;
200#endif
201 }
202#endif
203
204#define START 0
205#define STOP 1
206
Ulf Möller6b691a51999-04-19 21:31:43 +0000207static double Time_F(int s)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000208 {
209 double ret;
210#ifdef TIMES
211 static struct tms tstart,tend;
212
213 if (s == START)
214 {
215 times(&tstart);
216 return(0);
217 }
218 else
219 {
220 times(&tend);
221 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
222 return((ret < 1e-3)?1e-3:ret);
223 }
224#else /* !times() */
225 static struct timeb tstart,tend;
226 long i;
227
228 if (s == START)
229 {
230 ftime(&tstart);
231 return(0);
232 }
233 else
234 {
235 ftime(&tend);
236 i=(long)tend.millitm-(long)tstart.millitm;
237 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
238 return((ret < 0.001)?0.001:ret);
239 }
240#endif
241 }
242
Ulf Möller6b691a51999-04-19 21:31:43 +0000243int MAIN(int argc, char **argv)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000244 {
245 unsigned char *buf=NULL,*buf2=NULL;
246 int ret=1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000247#define ALGOR_NUM 14
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000248#define SIZE_NUM 5
249#define RSA_NUM 4
250#define DSA_NUM 3
251 long count,rsa_count;
252 int i,j,k,rsa_num,rsa_num2;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000253#ifndef NO_MD2
254 unsigned char md2[MD2_DIGEST_LENGTH];
255#endif
256#ifndef NO_MDC2
257 unsigned char mdc2[MDC2_DIGEST_LENGTH];
258#endif
259#ifndef NO_MD5
260 unsigned char md5[MD5_DIGEST_LENGTH];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000261 unsigned char hmac[MD5_DIGEST_LENGTH];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000262#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000263#ifndef NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000264 unsigned char sha[SHA_DIGEST_LENGTH];
265#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000266#ifndef NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000267 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
268#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000269#ifndef NO_RC4
270 RC4_KEY rc4_ks;
271#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000272#ifndef NO_RC5
273 RC5_32_KEY rc5_ks;
274#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000275#ifndef NO_RC2
276 RC2_KEY rc2_ks;
277#endif
278#ifndef NO_IDEA
279 IDEA_KEY_SCHEDULE idea_ks;
280#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000281#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000282 BF_KEY bf_ks;
283#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000284#ifndef NO_CAST
285 CAST_KEY cast_ks;
286#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000287 static unsigned char key16[16]=
288 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
289 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
290 unsigned char iv[8];
291#ifndef NO_DES
292 static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
293 static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
294 static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
295 des_key_schedule sch,sch2,sch3;
296#endif
297#define D_MD2 0
298#define D_MDC2 1
299#define D_MD5 2
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000300#define D_HMAC 3
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000301#define D_SHA1 4
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000302#define D_RMD160 5
303#define D_RC4 6
304#define D_CBC_DES 7
305#define D_EDE3_DES 8
306#define D_CBC_IDEA 9
307#define D_CBC_RC2 10
308#define D_CBC_RC5 11
309#define D_CBC_BF 12
310#define D_CBC_CAST 13
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000311 double d,results[ALGOR_NUM][SIZE_NUM];
312 static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
313 long c[ALGOR_NUM][SIZE_NUM];
314 static char *names[ALGOR_NUM]={
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000315 "md2","mdc2","md5","hmac(md5)","sha1","rmd160","rc4",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000316 "des cbc","des ede3","idea cbc",
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000317 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000318#define R_DSA_512 0
319#define R_DSA_1024 1
320#define R_DSA_2048 2
321#define R_RSA_512 0
322#define R_RSA_1024 1
323#define R_RSA_2048 2
324#define R_RSA_4096 3
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000325#ifndef NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000326 RSA *rsa_key[RSA_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000327 long rsa_c[RSA_NUM][2];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000328 double rsa_results[RSA_NUM][2];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000329 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000330 static unsigned char *rsa_data[RSA_NUM]=
331 {test512,test1024,test2048,test4096};
332 static int rsa_data_length[RSA_NUM]={
333 sizeof(test512),sizeof(test1024),
334 sizeof(test2048),sizeof(test4096)};
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000335#endif
336#ifndef NO_DSA
337 DSA *dsa_key[DSA_NUM];
338 long dsa_c[DSA_NUM][2];
339 double dsa_results[DSA_NUM][2];
340 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
341#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000342 int rsa_doit[RSA_NUM];
343 int dsa_doit[DSA_NUM];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000344 int doit[ALGOR_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000345 int pr_header=0;
346
347 apps_startup();
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000348#ifndef NO_DSA
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000349 memset(dsa_key,0,sizeof(dsa_key));
350#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000351
352 if (bio_err == NULL)
353 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000354 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000355
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000356#ifndef NO_RSA
357 memset(rsa_key,0,sizeof(rsa_key));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000358 for (i=0; i<RSA_NUM; i++)
359 rsa_key[i]=NULL;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000360#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000361
362 if ((buf=(unsigned char *)Malloc((int)BUFSIZE)) == NULL)
363 {
364 BIO_printf(bio_err,"out of memory\n");
365 goto end;
366 }
367 if ((buf2=(unsigned char *)Malloc((int)BUFSIZE)) == NULL)
368 {
369 BIO_printf(bio_err,"out of memory\n");
370 goto end;
371 }
372
373 memset(c,0,sizeof(c));
374 memset(iv,0,sizeof(iv));
375
376 for (i=0; i<ALGOR_NUM; i++)
377 doit[i]=0;
378 for (i=0; i<RSA_NUM; i++)
379 rsa_doit[i]=0;
380 for (i=0; i<DSA_NUM; i++)
381 dsa_doit[i]=0;
382
383 j=0;
384 argc--;
385 argv++;
386 while (argc)
387 {
388#ifndef NO_MD2
389 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
390 else
391#endif
392#ifndef NO_MDC2
393 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
394 else
395#endif
396#ifndef NO_MD5
397 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
398 else
399#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000400#ifndef NO_MD5
401 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000402 else
403#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000404#ifndef NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000405 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
406 else
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000407 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
408 else
409#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000410#ifndef NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000411 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
412 else
413 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
414 else
415 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
416 else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000417#endif
418#ifndef NO_RC4
419 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
420 else
421#endif
422#ifndef NO_DEF
423 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
424 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
425 else
426#endif
427#ifndef NO_RSA
428#ifdef RSAref
429 if (strcmp(*argv,"rsaref") == 0)
430 {
431 RSA_set_default_method(RSA_PKCS1_RSAref());
432 j--;
433 }
434 else
435#endif
Paul C. Suttone170a5c1999-01-02 14:42:23 +0000436 if (strcmp(*argv,"openssl") == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000437 {
438 RSA_set_default_method(RSA_PKCS1_SSLeay());
439 j--;
440 }
441 else
442#endif /* !NO_RSA */
443 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
444 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
445 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
446 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
447 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
448 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
449 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
450 else
451#ifndef NO_RC2
452 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
453 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
454 else
455#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000456#ifndef NO_RC5
457 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
458 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
459 else
460#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000461#ifndef NO_IDEA
462 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
463 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
464 else
465#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000466#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000467 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
468 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000469 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
470 else
471#endif
472#ifndef NO_CAST
473 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
474 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
475 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000476 else
477#endif
478#ifndef NO_DES
479 if (strcmp(*argv,"des") == 0)
480 {
481 doit[D_CBC_DES]=1;
482 doit[D_EDE3_DES]=1;
483 }
484 else
485#endif
486#ifndef NO_RSA
487 if (strcmp(*argv,"rsa") == 0)
488 {
489 rsa_doit[R_RSA_512]=1;
490 rsa_doit[R_RSA_1024]=1;
491 rsa_doit[R_RSA_2048]=1;
492 rsa_doit[R_RSA_4096]=1;
493 }
494 else
495#endif
496#ifndef NO_DSA
497 if (strcmp(*argv,"dsa") == 0)
498 {
499 dsa_doit[R_DSA_512]=1;
500 dsa_doit[R_DSA_1024]=1;
501 }
502 else
503#endif
504 {
505 BIO_printf(bio_err,"bad value, pick one of\n");
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000506 BIO_printf(bio_err,"md2 mdc2 md5 hmac sha1 rmd160\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000507#ifndef NO_IDEA
508 BIO_printf(bio_err,"idea-cbc ");
509#endif
510#ifndef NO_RC2
511 BIO_printf(bio_err,"rc2-cbc ");
512#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000513#ifndef NO_RC5
514 BIO_printf(bio_err,"rc5-cbc ");
515#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000516#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000517 BIO_printf(bio_err,"bf-cbc");
518#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000519#if !defined(NO_IDEA) && !defined(NO_RC2) && !defined(NO_BF) && !defined(NO_RC5)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000520 BIO_printf(bio_err,"\n");
521#endif
522 BIO_printf(bio_err,"des-cbc des-ede3 ");
523#ifndef NO_RC4
524 BIO_printf(bio_err,"rc4");
525#endif
526#ifndef NO_RSA
527 BIO_printf(bio_err,"\nrsa512 rsa1024 rsa2048 rsa4096\n");
528#endif
529#ifndef NO_DSA
530 BIO_printf(bio_err,"\ndsa512 dsa1024 dsa2048\n");
531#endif
532 BIO_printf(bio_err,"idea rc2 des rsa blowfish\n");
533 goto end;
534 }
535 argc--;
536 argv++;
537 j++;
538 }
539
540 if (j == 0)
541 {
542 for (i=0; i<ALGOR_NUM; i++)
543 doit[i]=1;
544 for (i=0; i<RSA_NUM; i++)
545 rsa_doit[i]=1;
546 for (i=0; i<DSA_NUM; i++)
547 dsa_doit[i]=1;
548 }
549 for (i=0; i<ALGOR_NUM; i++)
550 if (doit[i]) pr_header++;
551
552#ifndef TIMES
553 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
554 BIO_printf(bio_err,"program when this computer is idle.\n");
555#endif
556
557#ifndef NO_RSA
558 for (i=0; i<RSA_NUM; i++)
559 {
560 unsigned char *p;
561
562 p=rsa_data[i];
563 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
564 if (rsa_key[i] == NULL)
565 {
566 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
567 goto end;
568 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000569#if 0
570 else
571 {
572 BIO_printf(bio_err,"Loaded RSA key, %d bit modulus and e= 0x",BN_num_bits(rsa_key[i]->n));
573 BN_print(bio_err,rsa_key[i]->e);
574 BIO_printf(bio_err,"\n");
575 }
576#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000577 }
578#endif
579
580#ifndef NO_DSA
581 dsa_key[0]=get_dsa512();
582 dsa_key[1]=get_dsa1024();
583 dsa_key[2]=get_dsa2048();
584#endif
585
586#ifndef NO_DES
Ben Laurie4e31df21999-02-13 18:52:38 +0000587 des_set_key(key,sch);
588 des_set_key(key2,sch2);
589 des_set_key(key3,sch3);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000590#endif
591#ifndef NO_IDEA
592 idea_set_encrypt_key(key16,&idea_ks);
593#endif
594#ifndef NO_RC4
595 RC4_set_key(&rc4_ks,16,key16);
596#endif
597#ifndef NO_RC2
598 RC2_set_key(&rc2_ks,16,key16,128);
599#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000600#ifndef NO_RC5
601 RC5_32_set_key(&rc5_ks,16,key16,12);
602#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000603#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000604 BF_set_key(&bf_ks,16,key16);
605#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000606#ifndef NO_CAST
607 CAST_set_key(&cast_ks,16,key16);
608#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000609#ifndef NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000610 memset(rsa_c,0,sizeof(rsa_c));
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000611#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000612#ifndef SIGALRM
613 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
614 count=10;
615 do {
616 long i;
617 count*=2;
618 Time_F(START);
619 for (i=count; i; i--)
Dr. Stephen Henson5c008791999-02-14 00:40:13 +0000620 des_ecb_encrypt(buf,buf, &(sch[0]),DES_ENCRYPT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000621 d=Time_F(STOP);
622 } while (d <3);
623 c[D_MD2][0]=count/10;
624 c[D_MDC2][0]=count/10;
625 c[D_MD5][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000626 c[D_HMAC][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000627 c[D_SHA1][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000628 c[D_RMD160][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000629 c[D_RC4][0]=count*5;
630 c[D_CBC_DES][0]=count;
631 c[D_EDE3_DES][0]=count/3;
632 c[D_CBC_IDEA][0]=count;
633 c[D_CBC_RC2][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000634 c[D_CBC_RC5][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000635 c[D_CBC_BF][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000636 c[D_CBC_CAST][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000637
638 for (i=1; i<SIZE_NUM; i++)
639 {
640 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
641 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
642 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000643 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000644 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000645 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000646 }
647 for (i=1; i<SIZE_NUM; i++)
648 {
649 long l0,l1;
650
651 l0=(long)lengths[i-1];
652 l1=(long)lengths[i];
653 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
654 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
655 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
656 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
657 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000658 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000659 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000660 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000661 }
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000662#ifndef NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000663 rsa_c[R_RSA_512][0]=count/2000;
664 rsa_c[R_RSA_512][1]=count/400;
665 for (i=1; i<RSA_NUM; i++)
666 {
667 rsa_c[i][0]=rsa_c[i-1][0]/8;
668 rsa_c[i][1]=rsa_c[i-1][1]/4;
669 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
670 rsa_doit[i]=0;
671 else
672 {
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000673 if (rsa_c[i][0] == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000674 {
675 rsa_c[i][0]=1;
676 rsa_c[i][1]=20;
677 }
678 }
679 }
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000680#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000681
682 dsa_c[R_DSA_512][0]=count/1000;
683 dsa_c[R_DSA_512][1]=count/1000/2;
684 for (i=1; i<DSA_NUM; i++)
685 {
686 dsa_c[i][0]=dsa_c[i-1][0]/4;
687 dsa_c[i][1]=dsa_c[i-1][1]/4;
688 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
689 dsa_doit[i]=0;
690 else
691 {
692 if (dsa_c[i] == 0)
693 {
694 dsa_c[i][0]=1;
695 dsa_c[i][1]=1;
696 }
697 }
698 }
699
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000700#define COND(d) (count < (d))
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000701#define COUNT(d) (d)
702#else
703#define COND(c) (run)
704#define COUNT(d) (count)
705 signal(SIGALRM,sig_done);
706#endif
707
708#ifndef NO_MD2
709 if (doit[D_MD2])
710 {
711 for (j=0; j<SIZE_NUM; j++)
712 {
713 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
714 Time_F(START);
715 for (count=0,run=1; COND(c[D_MD2][j]); count++)
716 MD2(buf,(unsigned long)lengths[j],&(md2[0]));
717 d=Time_F(STOP);
718 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
719 count,names[D_MD2],d);
720 results[D_MD2][j]=((double)count)/d*lengths[j];
721 }
722 }
723#endif
724#ifndef NO_MDC2
725 if (doit[D_MDC2])
726 {
727 for (j=0; j<SIZE_NUM; j++)
728 {
729 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
730 Time_F(START);
731 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
732 MDC2(buf,(unsigned long)lengths[j],&(mdc2[0]));
733 d=Time_F(STOP);
734 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
735 count,names[D_MDC2],d);
736 results[D_MDC2][j]=((double)count)/d*lengths[j];
737 }
738 }
739#endif
740
741#ifndef NO_MD5
742 if (doit[D_MD5])
743 {
744 for (j=0; j<SIZE_NUM; j++)
745 {
746 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
747 Time_F(START);
748 for (count=0,run=1; COND(c[D_MD5][j]); count++)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000749 MD5(&(buf[0]),(unsigned long)lengths[j],&(md5[0]));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000750 d=Time_F(STOP);
751 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
752 count,names[D_MD5],d);
753 results[D_MD5][j]=((double)count)/d*lengths[j];
754 }
755 }
756#endif
757
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000758#ifndef NO_MD5
759 if (doit[D_HMAC])
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000760 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000761 HMAC_CTX hctx;
762 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
763 16,EVP_md5());
764
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000765 for (j=0; j<SIZE_NUM; j++)
766 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000767 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000768 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000769 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
770 {
771 HMAC_Init(&hctx,NULL,0,NULL);
772 HMAC_Update(&hctx,buf,lengths[j]);
773 HMAC_Final(&hctx,&(hmac[0]),NULL);
774 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000775 d=Time_F(STOP);
776 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000777 count,names[D_HMAC],d);
778 results[D_HMAC][j]=((double)count)/d*lengths[j];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000779 }
780 }
781#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000782#ifndef NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000783 if (doit[D_SHA1])
784 {
785 for (j=0; j<SIZE_NUM; j++)
786 {
787 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
788 Time_F(START);
789 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
790 SHA1(buf,(unsigned long)lengths[j],&(sha[0]));
791 d=Time_F(STOP);
792 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
793 count,names[D_SHA1],d);
794 results[D_SHA1][j]=((double)count)/d*lengths[j];
795 }
796 }
797#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000798#ifndef NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000799 if (doit[D_RMD160])
800 {
801 for (j=0; j<SIZE_NUM; j++)
802 {
803 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
804 Time_F(START);
805 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
806 RIPEMD160(buf,(unsigned long)lengths[j],&(rmd160[0]));
807 d=Time_F(STOP);
808 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
809 count,names[D_RMD160],d);
810 results[D_RMD160][j]=((double)count)/d*lengths[j];
811 }
812 }
813#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000814#ifndef NO_RC4
815 if (doit[D_RC4])
816 {
817 for (j=0; j<SIZE_NUM; j++)
818 {
819 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
820 Time_F(START);
821 for (count=0,run=1; COND(c[D_RC4][j]); count++)
822 RC4(&rc4_ks,(unsigned int)lengths[j],
823 buf,buf);
824 d=Time_F(STOP);
825 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
826 count,names[D_RC4],d);
827 results[D_RC4][j]=((double)count)/d*lengths[j];
828 }
829 }
830#endif
831#ifndef NO_DES
832 if (doit[D_CBC_DES])
833 {
834 for (j=0; j<SIZE_NUM; j++)
835 {
836 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
837 Time_F(START);
838 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
Ben Laurie4e31df21999-02-13 18:52:38 +0000839 des_ncbc_encrypt(buf,buf,lengths[j],sch,
840 &(iv[0]),DES_ENCRYPT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000841 d=Time_F(STOP);
842 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
843 count,names[D_CBC_DES],d);
844 results[D_CBC_DES][j]=((double)count)/d*lengths[j];
845 }
846 }
847
848 if (doit[D_EDE3_DES])
849 {
850 for (j=0; j<SIZE_NUM; j++)
851 {
852 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
853 Time_F(START);
854 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
Ben Laurie4e31df21999-02-13 18:52:38 +0000855 des_ede3_cbc_encrypt(buf,buf,lengths[j],
856 sch,sch2,sch3,
857 &(iv[0]),DES_ENCRYPT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000858 d=Time_F(STOP);
859 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
860 count,names[D_EDE3_DES],d);
861 results[D_EDE3_DES][j]=((double)count)/d*lengths[j];
862 }
863 }
864#endif
865#ifndef NO_IDEA
866 if (doit[D_CBC_IDEA])
867 {
868 for (j=0; j<SIZE_NUM; j++)
869 {
870 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
871 Time_F(START);
872 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
873 idea_cbc_encrypt(buf,buf,
874 (unsigned long)lengths[j],&idea_ks,
875 (unsigned char *)&(iv[0]),IDEA_ENCRYPT);
876 d=Time_F(STOP);
877 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
878 count,names[D_CBC_IDEA],d);
879 results[D_CBC_IDEA][j]=((double)count)/d*lengths[j];
880 }
881 }
882#endif
883#ifndef NO_RC2
884 if (doit[D_CBC_RC2])
885 {
886 for (j=0; j<SIZE_NUM; j++)
887 {
888 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
889 Time_F(START);
890 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
891 RC2_cbc_encrypt(buf,buf,
892 (unsigned long)lengths[j],&rc2_ks,
893 (unsigned char *)&(iv[0]),RC2_ENCRYPT);
894 d=Time_F(STOP);
895 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
896 count,names[D_CBC_RC2],d);
897 results[D_CBC_RC2][j]=((double)count)/d*lengths[j];
898 }
899 }
900#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000901#ifndef NO_RC5
902 if (doit[D_CBC_RC5])
903 {
904 for (j=0; j<SIZE_NUM; j++)
905 {
906 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
907 Time_F(START);
908 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
909 RC5_32_cbc_encrypt(buf,buf,
910 (unsigned long)lengths[j],&rc5_ks,
911 (unsigned char *)&(iv[0]),RC5_ENCRYPT);
912 d=Time_F(STOP);
913 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
914 count,names[D_CBC_RC5],d);
915 results[D_CBC_RC5][j]=((double)count)/d*lengths[j];
916 }
917 }
918#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000919#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000920 if (doit[D_CBC_BF])
921 {
922 for (j=0; j<SIZE_NUM; j++)
923 {
924 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
925 Time_F(START);
926 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
927 BF_cbc_encrypt(buf,buf,
928 (unsigned long)lengths[j],&bf_ks,
929 (unsigned char *)&(iv[0]),BF_ENCRYPT);
930 d=Time_F(STOP);
931 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
932 count,names[D_CBC_BF],d);
933 results[D_CBC_BF][j]=((double)count)/d*lengths[j];
934 }
935 }
936#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000937#ifndef NO_CAST
938 if (doit[D_CBC_CAST])
939 {
940 for (j=0; j<SIZE_NUM; j++)
941 {
942 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
943 Time_F(START);
944 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
945 CAST_cbc_encrypt(buf,buf,
946 (unsigned long)lengths[j],&cast_ks,
947 (unsigned char *)&(iv[0]),CAST_ENCRYPT);
948 d=Time_F(STOP);
949 BIO_printf(bio_err,"%ld %s's in %.2fs\n",
950 count,names[D_CBC_CAST],d);
951 results[D_CBC_CAST][j]=((double)count)/d*lengths[j];
952 }
953 }
954#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000955
956 RAND_bytes(buf,30);
957#ifndef NO_RSA
958 for (j=0; j<RSA_NUM; j++)
959 {
960 if (!rsa_doit[j]) continue;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000961 rsa_num=RSA_private_encrypt(30,buf,buf2,rsa_key[j],
962 RSA_PKCS1_PADDING);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000963 pkey_print_message("private","rsa",rsa_c[j][0],rsa_bits[j],
964 RSA_SECONDS);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000965/* RSA_blinding_on(rsa_key[j],NULL); */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000966 Time_F(START);
967 for (count=0,run=1; COND(rsa_c[j][0]); count++)
968 {
969 rsa_num=RSA_private_encrypt(30,buf,buf2,rsa_key[j],
970 RSA_PKCS1_PADDING);
971 if (rsa_num <= 0)
972 {
973 BIO_printf(bio_err,"RSA private encrypt failure\n");
974 ERR_print_errors(bio_err);
975 count=1;
976 break;
977 }
978 }
979 d=Time_F(STOP);
980 BIO_printf(bio_err,"%ld %d bit private RSA's in %.2fs\n",
981 count,rsa_bits[j],d);
982 rsa_results[j][0]=d/(double)count;
983 rsa_count=count;
984
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000985#if 1
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000986 rsa_num2=RSA_public_decrypt(rsa_num,buf2,buf,rsa_key[j],
987 RSA_PKCS1_PADDING);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000988 pkey_print_message("public","rsa",rsa_c[j][1],rsa_bits[j],
989 RSA_SECONDS);
990 Time_F(START);
991 for (count=0,run=1; COND(rsa_c[j][1]); count++)
992 {
993 rsa_num2=RSA_public_decrypt(rsa_num,buf2,buf,rsa_key[j],
994 RSA_PKCS1_PADDING);
995 if (rsa_num2 <= 0)
996 {
997 BIO_printf(bio_err,"RSA public encrypt failure\n");
998 ERR_print_errors(bio_err);
999 count=1;
1000 break;
1001 }
1002 }
1003 d=Time_F(STOP);
1004 BIO_printf(bio_err,"%ld %d bit public RSA's in %.2fs\n",
1005 count,rsa_bits[j],d);
1006 rsa_results[j][1]=d/(double)count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001007#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001008
1009 if (rsa_count <= 1)
1010 {
1011 /* if longer than 10s, don't do any more */
1012 for (j++; j<RSA_NUM; j++)
1013 rsa_doit[j]=0;
1014 }
1015 }
1016#endif
1017
1018 RAND_bytes(buf,20);
1019#ifndef NO_DSA
1020 for (j=0; j<DSA_NUM; j++)
1021 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001022 unsigned int kk;
1023
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001024 if (!dsa_doit[j]) continue;
1025 DSA_generate_key(dsa_key[j]);
1026/* DSA_sign_setup(dsa_key[j],NULL); */
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001027 rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1028 &kk,dsa_key[j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001029 pkey_print_message("sign","dsa",dsa_c[j][0],dsa_bits[j],
1030 DSA_SECONDS);
1031 Time_F(START);
1032 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1033 {
1034 rsa_num=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1035 &kk,dsa_key[j]);
1036 if (rsa_num <= 0)
1037 {
1038 BIO_printf(bio_err,"DSA sign failure\n");
1039 ERR_print_errors(bio_err);
1040 count=1;
1041 break;
1042 }
1043 }
1044 d=Time_F(STOP);
1045 BIO_printf(bio_err,"%ld %d bit DSA signs in %.2fs\n",
1046 count,dsa_bits[j],d);
1047 dsa_results[j][0]=d/(double)count;
1048 rsa_count=count;
1049
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001050 rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1051 kk,dsa_key[j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001052 pkey_print_message("verify","dsa",dsa_c[j][1],dsa_bits[j],
1053 DSA_SECONDS);
1054 Time_F(START);
1055 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1056 {
1057 rsa_num2=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1058 kk,dsa_key[j]);
1059 if (rsa_num2 <= 0)
1060 {
1061 BIO_printf(bio_err,"DSA verify failure\n");
1062 ERR_print_errors(bio_err);
1063 count=1;
1064 break;
1065 }
1066 }
1067 d=Time_F(STOP);
1068 BIO_printf(bio_err,"%ld %d bit DSA verify in %.2fs\n",
1069 count,dsa_bits[j],d);
1070 dsa_results[j][1]=d/(double)count;
1071
1072 if (rsa_count <= 1)
1073 {
1074 /* if longer than 10s, don't do any more */
1075 for (j++; j<DSA_NUM; j++)
1076 dsa_doit[j]=0;
1077 }
1078 }
1079#endif
1080
1081 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
1082 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
1083 printf("options:");
1084 printf("%s ",BN_options());
1085#ifndef NO_MD2
1086 printf("%s ",MD2_options());
1087#endif
1088#ifndef NO_RC4
1089 printf("%s ",RC4_options());
1090#endif
1091#ifndef NO_DES
1092 printf("%s ",des_options());
1093#endif
1094#ifndef NO_IDEA
1095 printf("%s ",idea_options());
1096#endif
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001097#ifndef NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001098 printf("%s ",BF_options());
1099#endif
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001100 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001101
1102 if (pr_header)
1103 {
1104 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1105 fprintf(stdout,"type ");
1106 for (j=0; j<SIZE_NUM; j++)
1107 fprintf(stdout,"%7d bytes",lengths[j]);
1108 fprintf(stdout,"\n");
1109 }
1110
1111 for (k=0; k<ALGOR_NUM; k++)
1112 {
1113 if (!doit[k]) continue;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001114 fprintf(stdout,"%-13s",names[k]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001115 for (j=0; j<SIZE_NUM; j++)
1116 {
1117 if (results[k][j] > 10000)
1118 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1119 else
1120 fprintf(stdout," %11.2f ",results[k][j]);
1121 }
1122 fprintf(stdout,"\n");
1123 }
1124#ifndef NO_RSA
1125 j=1;
1126 for (k=0; k<RSA_NUM; k++)
1127 {
1128 if (!rsa_doit[k]) continue;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001129 if (j)
1130 {
1131 printf("%18ssign verify sign/s verify/s\n"," ");
1132 j=0;
1133 }
1134 fprintf(stdout,"rsa %4d bits %8.4fs %8.4fs %8.1f %8.1f",
1135 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1136 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001137 fprintf(stdout,"\n");
1138 }
1139#endif
1140#ifndef NO_DSA
1141 j=1;
1142 for (k=0; k<DSA_NUM; k++)
1143 {
1144 if (!dsa_doit[k]) continue;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001145 if (j) {
1146 printf("%18ssign verify sign/s verify/s\n"," ");
1147 j=0;
1148 }
1149 fprintf(stdout,"dsa %4d bits %8.4fs %8.4fs %8.1f %8.1f",
1150 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1151 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001152 fprintf(stdout,"\n");
1153 }
1154#endif
1155 ret=0;
1156end:
1157 if (buf != NULL) Free(buf);
1158 if (buf2 != NULL) Free(buf2);
1159#ifndef NO_RSA
1160 for (i=0; i<RSA_NUM; i++)
1161 if (rsa_key[i] != NULL)
1162 RSA_free(rsa_key[i]);
1163#endif
1164#ifndef NO_DSA
1165 for (i=0; i<DSA_NUM; i++)
1166 if (dsa_key[i] != NULL)
1167 DSA_free(dsa_key[i]);
1168#endif
1169 EXIT(ret);
1170 }
1171
Ulf Möller6b691a51999-04-19 21:31:43 +00001172static void print_message(char *s, long num, int length)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001173 {
1174#ifdef SIGALRM
1175 BIO_printf(bio_err,"Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
1176 BIO_flush(bio_err);
1177 alarm(SECONDS);
1178#else
1179 BIO_printf(bio_err,"Doing %s %ld times on %d size blocks: ",s,num,length);
1180 BIO_flush(bio_err);
1181#endif
1182#ifdef LINT
1183 num=num;
1184#endif
1185 }
1186
Ulf Möller6b691a51999-04-19 21:31:43 +00001187static void pkey_print_message(char *str, char *str2, long num, int bits,
1188 int tm)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001189 {
1190#ifdef SIGALRM
1191 BIO_printf(bio_err,"Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
1192 BIO_flush(bio_err);
1193 alarm(RSA_SECONDS);
1194#else
1195 BIO_printf(bio_err,"Doing %ld %d bit %s %s's: ",num,bits,str,str2);
1196 BIO_flush(bio_err);
1197#endif
1198#ifdef LINT
1199 num=num;
1200#endif
1201 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001202