blob: 11085eed23754155f9bd2b1b09266c4322b15a7b [file] [log] [blame]
Richard Levitte7876e442001-09-27 15:43:55 +00001/* apps/speed.c -*- mode:C; c-file-style: "eay" -*- */
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"
Richard Levittecf1b7d92001-02-19 16:06:34 +000078#ifdef OPENSSL_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>
Ben Laurie646d5692000-11-20 04:14:19 +000084#include <openssl/evp.h>
85#include <openssl/objects.h>
Richard Levittef559f312001-11-05 12:43:17 +000086#if !defined(OPENSSL_SYS_MSDOS)
Richard Levittea4a8f7b2001-09-28 10:34:48 +000087#include OPENSSL_UNISTD
Richard Levittef559f312001-11-05 12:43:17 +000088#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000089
Richard Levittec3bdbcf2001-04-11 10:06:02 +000090#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(OPENSSL_SYS_MACOSX)
Ben Laurie2bfb4db2000-07-01 16:25:20 +000091# define USE_TOD
Richard Levittebc36ee62001-02-20 08:13:47 +000092#elif !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC))
Ben Laurie2bfb4db2000-07-01 16:25:20 +000093# define TIMES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000094#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +000095#if !defined(_UNICOS) && !defined(__OpenBSD__) && !defined(sgi) && !defined(__FreeBSD__) && !(defined(__bsdi) || defined(__bsdi__)) && !defined(_AIX) && !defined(OPENSSL_SYS_MPE) && !defined(__NetBSD__) /* FIXME */
Richard Levitte3132e192000-08-03 21:54:31 +000096# define TIMEB
97#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000098
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000099#ifndef _IRIX
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000100# include <time.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000101#endif
102#ifdef TIMES
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000103# include <sys/types.h>
104# include <sys/times.h>
105#endif
106#ifdef USE_TOD
107# include <sys/time.h>
108# include <sys/resource.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000109#endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000110
111/* Depending on the VMS version, the tms structure is perhaps defined.
112 The __TMS macro will show if it was. If it wasn't defined, we should
113 undefine TIMES, since that tells the rest of the program how things
114 should be handled. -- Richard Levitte */
Richard Levittebc36ee62001-02-20 08:13:47 +0000115#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000116#undef TIMES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000117#endif
Ulf Möller7d7d2cb1999-05-13 11:37:32 +0000118
Richard Levitte3132e192000-08-03 21:54:31 +0000119#ifdef TIMEB
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000120#include <sys/timeb.h>
Richard Levitte3132e192000-08-03 21:54:31 +0000121#endif
122
Richard Levitte1cbb7292000-09-21 16:01:08 +0000123#if !defined(TIMES) && !defined(TIMEB) && !defined(USE_TOD)
Richard Levitte3132e192000-08-03 21:54:31 +0000124#error "It seems neither struct tms nor struct timeb is supported in this platform!"
125#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000126
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000127#if defined(sun) || defined(__ultrix)
128#define _POSIX_SOURCE
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000129#include <limits.h>
130#include <sys/param.h>
131#endif
132
Richard Levittecf1b7d92001-02-19 16:06:34 +0000133#ifndef OPENSSL_NO_DES
Richard Levittec2e4f172001-10-24 21:21:12 +0000134#include <openssl/des_old.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000135#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000136#ifndef OPENSSL_NO_MD2
Bodo Möllerec577821999-04-23 22:13:45 +0000137#include <openssl/md2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000138#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000139#ifndef OPENSSL_NO_MDC2
Bodo Möllerec577821999-04-23 22:13:45 +0000140#include <openssl/mdc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000141#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000142#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000143#include <openssl/md4.h>
144#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000145#ifndef OPENSSL_NO_MD5
Bodo Möllerec577821999-04-23 22:13:45 +0000146#include <openssl/md5.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000147#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000148#ifndef OPENSSL_NO_HMAC
Ulf Möller5271ebd1999-06-30 00:42:56 +0000149#include <openssl/hmac.h>
150#endif
151#include <openssl/evp.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000152#ifndef OPENSSL_NO_SHA
Bodo Möllerec577821999-04-23 22:13:45 +0000153#include <openssl/sha.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000154#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000155#ifndef OPENSSL_NO_RIPEMD
Bodo Möllerec577821999-04-23 22:13:45 +0000156#include <openssl/ripemd.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000157#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000158#ifndef OPENSSL_NO_RC4
Bodo Möllerec577821999-04-23 22:13:45 +0000159#include <openssl/rc4.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000160#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000161#ifndef OPENSSL_NO_RC5
Bodo Möllerec577821999-04-23 22:13:45 +0000162#include <openssl/rc5.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000163#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000164#ifndef OPENSSL_NO_RC2
Bodo Möllerec577821999-04-23 22:13:45 +0000165#include <openssl/rc2.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000166#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000167#ifndef OPENSSL_NO_IDEA
Bodo Möllerec577821999-04-23 22:13:45 +0000168#include <openssl/idea.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000169#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000170#ifndef OPENSSL_NO_BF
Bodo Möllerec577821999-04-23 22:13:45 +0000171#include <openssl/blowfish.h>
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000172#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000173#ifndef OPENSSL_NO_CAST
Bodo Möllerec577821999-04-23 22:13:45 +0000174#include <openssl/cast.h>
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000175#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000176#ifndef OPENSSL_NO_RSA
Bodo Möllerec577821999-04-23 22:13:45 +0000177#include <openssl/rsa.h>
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000178#include "./testrsa.h"
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000179#endif
Bodo Möllerec577821999-04-23 22:13:45 +0000180#include <openssl/x509.h>
Richard Levittecf1b7d92001-02-19 16:06:34 +0000181#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000182#include "./testdsa.h"
183#endif
184
185/* The following if from times(3) man page. It may need to be changed */
186#ifndef HZ
Richard Levittea4a8f7b2001-09-28 10:34:48 +0000187# ifdef _SC_CLK_TCK
188# define HZ ((double)sysconf(_SC_CLK_TCK))
189# else
190# ifndef CLK_TCK
191# ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
192# define HZ 100.0
193# else /* _BSD_CLK_TCK_ */
194# define HZ ((double)_BSD_CLK_TCK_)
195# endif
196# else /* CLK_TCK */
Richard Levitte7876e442001-09-27 15:43:55 +0000197# define HZ ((double)CLK_TCK)
198# endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000199# endif
200#endif
201
Richard Levitte66d3e742001-10-25 16:08:17 +0000202#if !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && !defined(OPENSSL_SYS_OS2)
203# define HAVE_FORK 1
204#endif
205
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000206#undef BUFSIZE
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000207#define BUFSIZE ((long)1024*8+1)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000208int run=0;
209
Richard Levitte7876e442001-09-27 15:43:55 +0000210static char ftime_used = 0, times_used = 0, gettimeofday_used = 0, getrusage_used = 0;
Ben Laurie0e211562001-10-25 14:27:17 +0000211static int mr=0;
212static int usertime=1;
Richard Levitte7876e442001-09-27 15:43:55 +0000213
Ben Laurie0e211562001-10-25 14:27:17 +0000214static double Time_F(int s);
Ben Laurie646d5692000-11-20 04:14:19 +0000215static void print_message(const char *s,long num,int length);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000216static void pkey_print_message(char *str,char *str2,long num,int bits,int sec);
Ben Laurie0e211562001-10-25 14:27:17 +0000217static void print_result(int alg,int run_no,int count,double time_used);
Richard Levitte66d3e742001-10-25 16:08:17 +0000218#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000219static int do_multi(int multi);
Richard Levitte66d3e742001-10-25 16:08:17 +0000220#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000221
Ben Laurie0e211562001-10-25 14:27:17 +0000222#define ALGOR_NUM 16
223#define SIZE_NUM 5
224#define RSA_NUM 4
225#define DSA_NUM 3
226static const char *names[ALGOR_NUM]={
227 "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
228 "des cbc","des ede3","idea cbc",
229 "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc"};
230static double results[ALGOR_NUM][SIZE_NUM];
231static int lengths[SIZE_NUM]={8,64,256,1024,8*1024};
232static double rsa_results[RSA_NUM][2];
233static double dsa_results[DSA_NUM][2];
234
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +0000235#ifdef SIGALRM
236#if defined(__STDC__) || defined(sgi) || defined(_AIX)
237#define SIGRETTYPE void
238#else
239#define SIGRETTYPE int
240#endif
241
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000242static SIGRETTYPE sig_done(int sig);
Ulf Möller6b691a51999-04-19 21:31:43 +0000243static SIGRETTYPE sig_done(int sig)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000244 {
245 signal(SIGALRM,sig_done);
246 run=0;
247#ifdef LINT
248 sig=sig;
249#endif
250 }
251#endif
252
253#define START 0
254#define STOP 1
255
Ben Laurie0e211562001-10-25 14:27:17 +0000256static double Time_F(int s)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000257 {
258 double ret;
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000259
260#ifdef USE_TOD
261 if(usertime)
262 {
263 static struct rusage tstart,tend;
264
Richard Levitte7876e442001-09-27 15:43:55 +0000265 getrusage_used = 1;
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000266 if (s == START)
267 {
268 getrusage(RUSAGE_SELF,&tstart);
269 return(0);
270 }
271 else
272 {
273 long i;
274
275 getrusage(RUSAGE_SELF,&tend);
276 i=(long)tend.ru_utime.tv_usec-(long)tstart.ru_utime.tv_usec;
277 ret=((double)(tend.ru_utime.tv_sec-tstart.ru_utime.tv_sec))
278 +((double)i)/1000000.0;
279 return((ret < 0.001)?0.001:ret);
280 }
281 }
282 else
283 {
284 static struct timeval tstart,tend;
285 long i;
286
Richard Levitte7876e442001-09-27 15:43:55 +0000287 gettimeofday_used = 1;
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000288 if (s == START)
289 {
290 gettimeofday(&tstart,NULL);
291 return(0);
292 }
293 else
294 {
295 gettimeofday(&tend,NULL);
296 i=(long)tend.tv_usec-(long)tstart.tv_usec;
297 ret=((double)(tend.tv_sec-tstart.tv_sec))+((double)i)/1000000.0;
298 return((ret < 0.001)?0.001:ret);
299 }
300 }
301#else /* ndef USE_TOD */
302
303# ifdef TIMES
Richard Levitte4e74239c2000-06-30 17:16:46 +0000304 if (usertime)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000305 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000306 static struct tms tstart,tend;
307
Richard Levitte7876e442001-09-27 15:43:55 +0000308 times_used = 1;
Richard Levitte4e74239c2000-06-30 17:16:46 +0000309 if (s == START)
310 {
311 times(&tstart);
312 return(0);
313 }
314 else
315 {
316 times(&tend);
317 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
318 return((ret < 1e-3)?1e-3:ret);
319 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000320 }
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000321# endif /* times() */
Richard Levitte3132e192000-08-03 21:54:31 +0000322# if defined(TIMES) && defined(TIMEB)
323 else
324# endif
325# ifdef TIMEB
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000326 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000327 static struct timeb tstart,tend;
328 long i;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000329
Richard Levitte7876e442001-09-27 15:43:55 +0000330 ftime_used = 1;
Richard Levitte4e74239c2000-06-30 17:16:46 +0000331 if (s == START)
332 {
333 ftime(&tstart);
334 return(0);
335 }
336 else
337 {
338 ftime(&tend);
339 i=(long)tend.millitm-(long)tstart.millitm;
340 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
341 return((ret < 0.001)?0.001:ret);
342 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000343 }
Richard Levitte3132e192000-08-03 21:54:31 +0000344# endif
Ben Laurie2bfb4db2000-07-01 16:25:20 +0000345#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000346 }
347
Ralf S. Engelschall667ac4e2000-02-11 09:47:18 +0000348int MAIN(int, char **);
349
Ulf Möller6b691a51999-04-19 21:31:43 +0000350int MAIN(int argc, char **argv)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000351 {
Richard Levitte5270e702000-10-26 21:07:28 +0000352 ENGINE *e;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000353 unsigned char *buf=NULL,*buf2=NULL;
Ben Laurie18c77bf1999-10-03 18:09:45 +0000354 int mret=1;
Ben Laurie646d5692000-11-20 04:14:19 +0000355 long count,rsa_count,save_count=0;
Ben Laurie18c77bf1999-10-03 18:09:45 +0000356 int i,j,k;
Richard Levittecf1b7d92001-02-19 16:06:34 +0000357#ifndef OPENSSL_NO_RSA
Richard Levitte5614bb92000-09-14 11:09:03 +0000358 unsigned rsa_num;
Ulf Möllerb2293b12001-01-09 21:39:16 +0000359#endif
Richard Levitte83c40e72001-11-15 20:19:40 +0000360 unsigned char md[EVP_MAX_MD_SIZE];
Richard Levittecf1b7d92001-02-19 16:06:34 +0000361#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000362 unsigned char md2[MD2_DIGEST_LENGTH];
363#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000364#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000365 unsigned char mdc2[MDC2_DIGEST_LENGTH];
366#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000367#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000368 unsigned char md4[MD4_DIGEST_LENGTH];
369#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000370#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000371 unsigned char md5[MD5_DIGEST_LENGTH];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000372 unsigned char hmac[MD5_DIGEST_LENGTH];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000373#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000374#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000375 unsigned char sha[SHA_DIGEST_LENGTH];
376#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000377#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000378 unsigned char rmd160[RIPEMD160_DIGEST_LENGTH];
379#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000380#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000381 RC4_KEY rc4_ks;
382#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000383#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000384 RC5_32_KEY rc5_ks;
385#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000386#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000387 RC2_KEY rc2_ks;
388#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000389#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000390 IDEA_KEY_SCHEDULE idea_ks;
391#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000392#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000393 BF_KEY bf_ks;
394#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000395#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000396 CAST_KEY cast_ks;
397#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000398 static unsigned char key16[16]=
399 {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
400 0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
401 unsigned char iv[8];
Richard Levittecf1b7d92001-02-19 16:06:34 +0000402#ifndef OPENSSL_NO_DES
Richard Levittec2e4f172001-10-24 21:21:12 +0000403 DES_cblock *buf_as_des_cblock = NULL;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000404 static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
405 static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
406 static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
Richard Levittec2e4f172001-10-24 21:21:12 +0000407 DES_key_schedule sch;
408 DES_key_schedule sch2;
409 DES_key_schedule sch3;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000410#endif
411#define D_MD2 0
412#define D_MDC2 1
Richard Levitte30094582000-08-14 14:05:53 +0000413#define D_MD4 2
414#define D_MD5 3
415#define D_HMAC 4
416#define D_SHA1 5
417#define D_RMD160 6
418#define D_RC4 7
419#define D_CBC_DES 8
420#define D_EDE3_DES 9
421#define D_CBC_IDEA 10
422#define D_CBC_RC2 11
423#define D_CBC_RC5 12
424#define D_CBC_BF 13
425#define D_CBC_CAST 14
Ben Laurie646d5692000-11-20 04:14:19 +0000426#define D_EVP 15
Ben Laurie0e211562001-10-25 14:27:17 +0000427 double d;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000428 long c[ALGOR_NUM][SIZE_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000429#define R_DSA_512 0
430#define R_DSA_1024 1
431#define R_DSA_2048 2
432#define R_RSA_512 0
433#define R_RSA_1024 1
434#define R_RSA_2048 2
435#define R_RSA_4096 3
Richard Levittecf1b7d92001-02-19 16:06:34 +0000436#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000437 RSA *rsa_key[RSA_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000438 long rsa_c[RSA_NUM][2];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000439 static unsigned int rsa_bits[RSA_NUM]={512,1024,2048,4096};
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000440 static unsigned char *rsa_data[RSA_NUM]=
441 {test512,test1024,test2048,test4096};
442 static int rsa_data_length[RSA_NUM]={
443 sizeof(test512),sizeof(test1024),
444 sizeof(test2048),sizeof(test4096)};
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000445#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000446#ifndef OPENSSL_NO_DSA
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000447 DSA *dsa_key[DSA_NUM];
448 long dsa_c[DSA_NUM][2];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000449 static unsigned int dsa_bits[DSA_NUM]={512,1024,2048};
450#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000451 int rsa_doit[RSA_NUM];
452 int dsa_doit[DSA_NUM];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000453 int doit[ALGOR_NUM];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000454 int pr_header=0;
Richard Levitte83c40e72001-11-15 20:19:40 +0000455 const EVP_CIPHER *evp_cipher=NULL;
456 const EVP_MD *evp_md=NULL;
Ben Laurie3f37e732001-07-08 12:14:41 +0000457 int decrypt=0;
Richard Levitte66d3e742001-10-25 16:08:17 +0000458#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000459 int multi=0;
Richard Levitte66d3e742001-10-25 16:08:17 +0000460#endif
Richard Levitte4e74239c2000-06-30 17:16:46 +0000461
462#ifndef TIMES
463 usertime=-1;
464#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000465
466 apps_startup();
Bodo Möller396f6311999-09-08 21:58:13 +0000467 memset(results, 0, sizeof(results));
Richard Levittecf1b7d92001-02-19 16:06:34 +0000468#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000469 memset(dsa_key,0,sizeof(dsa_key));
470#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000471
472 if (bio_err == NULL)
473 if ((bio_err=BIO_new(BIO_s_file())) != NULL)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000474 BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000475
Richard Levittecf1b7d92001-02-19 16:06:34 +0000476#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000477 memset(rsa_key,0,sizeof(rsa_key));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000478 for (i=0; i<RSA_NUM; i++)
479 rsa_key[i]=NULL;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000480#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000481
Richard Levitte26a3a482000-06-01 22:19:21 +0000482 if ((buf=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000483 {
484 BIO_printf(bio_err,"out of memory\n");
485 goto end;
486 }
Richard Levittecf1b7d92001-02-19 16:06:34 +0000487#ifndef OPENSSL_NO_DES
Bodo Möller12ba4131999-05-18 15:06:20 +0000488 buf_as_des_cblock = (des_cblock *)buf;
Ulf Möller5676d8c1999-06-29 23:52:08 +0000489#endif
Richard Levitte26a3a482000-06-01 22:19:21 +0000490 if ((buf2=(unsigned char *)OPENSSL_malloc((int)BUFSIZE)) == NULL)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000491 {
492 BIO_printf(bio_err,"out of memory\n");
493 goto end;
494 }
495
496 memset(c,0,sizeof(c));
497 memset(iv,0,sizeof(iv));
498
499 for (i=0; i<ALGOR_NUM; i++)
500 doit[i]=0;
501 for (i=0; i<RSA_NUM; i++)
502 rsa_doit[i]=0;
503 for (i=0; i<DSA_NUM; i++)
504 dsa_doit[i]=0;
505
506 j=0;
507 argc--;
508 argv++;
509 while (argc)
510 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000511 if ((argc > 0) && (strcmp(*argv,"-elapsed") == 0))
Richard Levitte7876e442001-09-27 15:43:55 +0000512 {
Richard Levitte4e74239c2000-06-30 17:16:46 +0000513 usertime = 0;
Richard Levitte7876e442001-09-27 15:43:55 +0000514 j--; /* Otherwise, -elapsed gets confused with
515 an algorithm. */
516 }
Ben Laurie646d5692000-11-20 04:14:19 +0000517 else if ((argc > 0) && (strcmp(*argv,"-evp") == 0))
518 {
519 argc--;
520 argv++;
521 if(argc == 0)
522 {
523 BIO_printf(bio_err,"no EVP given\n");
524 goto end;
525 }
Richard Levitte83c40e72001-11-15 20:19:40 +0000526 evp_cipher=EVP_get_cipherbyname(*argv);
527 if(!evp_cipher)
Ben Laurie646d5692000-11-20 04:14:19 +0000528 {
Richard Levitte83c40e72001-11-15 20:19:40 +0000529 evp_md=EVP_get_digestbyname(*argv);
530 }
531 if(!evp_cipher && !evp_md)
532 {
533 BIO_printf(bio_err,"%s is an unknown cipher or digest\n",*argv);
Ben Laurie646d5692000-11-20 04:14:19 +0000534 goto end;
535 }
536 doit[D_EVP]=1;
537 }
Richard Levitte7876e442001-09-27 15:43:55 +0000538 else if (argc > 0 && !strcmp(*argv,"-decrypt"))
539 {
Ben Laurie3f37e732001-07-08 12:14:41 +0000540 decrypt=1;
Richard Levitte7876e442001-09-27 15:43:55 +0000541 j--; /* Otherwise, -elapsed gets confused with
542 an algorithm. */
543 }
544 else if ((argc > 0) && (strcmp(*argv,"-engine") == 0))
Richard Levitte5270e702000-10-26 21:07:28 +0000545 {
546 argc--;
547 argv++;
548 if(argc == 0)
549 {
550 BIO_printf(bio_err,"no engine given\n");
551 goto end;
552 }
Richard Levitte531d6302001-06-18 06:22:33 +0000553 e = setup_engine(bio_err, *argv, 0);
554 /* j will be increased again further down. We just
Richard Levitte5270e702000-10-26 21:07:28 +0000555 don't want speed to confuse an engine with an
556 algorithm, especially when none is given (which
557 means all of them should be run) */
558 j--;
559 }
Richard Levitte66d3e742001-10-25 16:08:17 +0000560#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000561 else if ((argc > 0) && (strcmp(*argv,"-multi") == 0))
562 {
563 argc--;
564 argv++;
565 if(argc == 0)
566 {
567 BIO_printf(bio_err,"no multi count given\n");
568 goto end;
569 }
570 multi=atoi(argv[0]);
571 if(multi <= 0)
572 {
573 BIO_printf(bio_err,"bad multi count\n");
574 goto end;
575 }
Richard Levitte66d3e742001-10-25 16:08:17 +0000576 j--; /* Otherwise, -mr gets confused with
577 an algorithm. */
Ben Laurie0e211562001-10-25 14:27:17 +0000578 }
Richard Levitte66d3e742001-10-25 16:08:17 +0000579#endif
Ben Laurie0e211562001-10-25 14:27:17 +0000580 else if (argc > 0 && !strcmp(*argv,"-mr"))
581 {
582 mr=1;
583 j--; /* Otherwise, -mr gets confused with
584 an algorithm. */
585 }
Richard Levitte5270e702000-10-26 21:07:28 +0000586 else
Richard Levittecf1b7d92001-02-19 16:06:34 +0000587#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000588 if (strcmp(*argv,"md2") == 0) doit[D_MD2]=1;
589 else
590#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000591#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000592 if (strcmp(*argv,"mdc2") == 0) doit[D_MDC2]=1;
593 else
594#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000595#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000596 if (strcmp(*argv,"md4") == 0) doit[D_MD4]=1;
597 else
598#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000599#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000600 if (strcmp(*argv,"md5") == 0) doit[D_MD5]=1;
601 else
602#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000603#ifndef OPENSSL_NO_MD5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000604 if (strcmp(*argv,"hmac") == 0) doit[D_HMAC]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000605 else
606#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000607#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000608 if (strcmp(*argv,"sha1") == 0) doit[D_SHA1]=1;
609 else
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000610 if (strcmp(*argv,"sha") == 0) doit[D_SHA1]=1;
611 else
612#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000613#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000614 if (strcmp(*argv,"ripemd") == 0) doit[D_RMD160]=1;
615 else
616 if (strcmp(*argv,"rmd160") == 0) doit[D_RMD160]=1;
617 else
618 if (strcmp(*argv,"ripemd160") == 0) doit[D_RMD160]=1;
619 else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000620#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000621#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000622 if (strcmp(*argv,"rc4") == 0) doit[D_RC4]=1;
623 else
624#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000625#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000626 if (strcmp(*argv,"des-cbc") == 0) doit[D_CBC_DES]=1;
627 else if (strcmp(*argv,"des-ede3") == 0) doit[D_EDE3_DES]=1;
628 else
629#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000630#ifndef OPENSSL_NO_RSA
Richard Levitteccb96432000-11-08 17:51:37 +0000631#if 0 /* was: #ifdef RSAref */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000632 if (strcmp(*argv,"rsaref") == 0)
633 {
Richard Levitte5270e702000-10-26 21:07:28 +0000634 RSA_set_default_openssl_method(RSA_PKCS1_RSAref());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000635 j--;
636 }
637 else
638#endif
Dr. Stephen Hensonc1cd88a1999-09-08 18:19:45 +0000639#ifndef RSA_NULL
Paul C. Suttone170a5c1999-01-02 14:42:23 +0000640 if (strcmp(*argv,"openssl") == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000641 {
Geoff Thorpe6dc5d572001-09-25 20:35:01 +0000642 RSA_set_default_method(RSA_PKCS1_SSLeay());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000643 j--;
644 }
645 else
Dr. Stephen Hensonc1cd88a1999-09-08 18:19:45 +0000646#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000647#endif /* !OPENSSL_NO_RSA */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000648 if (strcmp(*argv,"dsa512") == 0) dsa_doit[R_DSA_512]=2;
649 else if (strcmp(*argv,"dsa1024") == 0) dsa_doit[R_DSA_1024]=2;
650 else if (strcmp(*argv,"dsa2048") == 0) dsa_doit[R_DSA_2048]=2;
651 else if (strcmp(*argv,"rsa512") == 0) rsa_doit[R_RSA_512]=2;
652 else if (strcmp(*argv,"rsa1024") == 0) rsa_doit[R_RSA_1024]=2;
653 else if (strcmp(*argv,"rsa2048") == 0) rsa_doit[R_RSA_2048]=2;
654 else if (strcmp(*argv,"rsa4096") == 0) rsa_doit[R_RSA_4096]=2;
655 else
Richard Levittecf1b7d92001-02-19 16:06:34 +0000656#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000657 if (strcmp(*argv,"rc2-cbc") == 0) doit[D_CBC_RC2]=1;
658 else if (strcmp(*argv,"rc2") == 0) doit[D_CBC_RC2]=1;
659 else
660#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000661#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000662 if (strcmp(*argv,"rc5-cbc") == 0) doit[D_CBC_RC5]=1;
663 else if (strcmp(*argv,"rc5") == 0) doit[D_CBC_RC5]=1;
664 else
665#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000666#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000667 if (strcmp(*argv,"idea-cbc") == 0) doit[D_CBC_IDEA]=1;
668 else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
669 else
670#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000671#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000672 if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
673 else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000674 else if (strcmp(*argv,"bf") == 0) doit[D_CBC_BF]=1;
675 else
676#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000677#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000678 if (strcmp(*argv,"cast-cbc") == 0) doit[D_CBC_CAST]=1;
679 else if (strcmp(*argv,"cast") == 0) doit[D_CBC_CAST]=1;
680 else if (strcmp(*argv,"cast5") == 0) doit[D_CBC_CAST]=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000681 else
682#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000683#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000684 if (strcmp(*argv,"des") == 0)
685 {
686 doit[D_CBC_DES]=1;
687 doit[D_EDE3_DES]=1;
688 }
689 else
690#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000691#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000692 if (strcmp(*argv,"rsa") == 0)
693 {
694 rsa_doit[R_RSA_512]=1;
695 rsa_doit[R_RSA_1024]=1;
696 rsa_doit[R_RSA_2048]=1;
697 rsa_doit[R_RSA_4096]=1;
698 }
699 else
700#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000701#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000702 if (strcmp(*argv,"dsa") == 0)
703 {
704 dsa_doit[R_DSA_512]=1;
705 dsa_doit[R_DSA_1024]=1;
706 }
707 else
708#endif
709 {
Richard Levitte30094582000-08-14 14:05:53 +0000710 BIO_printf(bio_err,"Error: bad option or value\n");
711 BIO_printf(bio_err,"\n");
712 BIO_printf(bio_err,"Available values:\n");
Richard Levittecf1b7d92001-02-19 16:06:34 +0000713#ifndef OPENSSL_NO_MD2
Richard Levitte30094582000-08-14 14:05:53 +0000714 BIO_printf(bio_err,"md2 ");
715#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000716#ifndef OPENSSL_NO_MDC2
Richard Levitte30094582000-08-14 14:05:53 +0000717 BIO_printf(bio_err,"mdc2 ");
718#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000719#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +0000720 BIO_printf(bio_err,"md4 ");
721#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000722#ifndef OPENSSL_NO_MD5
Richard Levitte30094582000-08-14 14:05:53 +0000723 BIO_printf(bio_err,"md5 ");
Richard Levittecf1b7d92001-02-19 16:06:34 +0000724#ifndef OPENSSL_NO_HMAC
Richard Levitte30094582000-08-14 14:05:53 +0000725 BIO_printf(bio_err,"hmac ");
726#endif
727#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000728#ifndef OPENSSL_NO_SHA1
Richard Levitte30094582000-08-14 14:05:53 +0000729 BIO_printf(bio_err,"sha1 ");
730#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000731#ifndef OPENSSL_NO_RIPEMD160
Richard Levitte30094582000-08-14 14:05:53 +0000732 BIO_printf(bio_err,"rmd160");
733#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000734#if !defined(OPENSSL_NO_MD2) || !defined(OPENSSL_NO_MDC2) || \
735 !defined(OPENSSL_NO_MD4) || !defined(OPENSSL_NO_MD5) || \
736 !defined(OPENSSL_NO_SHA1) || !defined(OPENSSL_NO_RIPEMD160)
Richard Levitte30094582000-08-14 14:05:53 +0000737 BIO_printf(bio_err,"\n");
738#endif
739
Richard Levittecf1b7d92001-02-19 16:06:34 +0000740#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000741 BIO_printf(bio_err,"idea-cbc ");
742#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000743#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000744 BIO_printf(bio_err,"rc2-cbc ");
745#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000746#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000747 BIO_printf(bio_err,"rc5-cbc ");
748#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000749#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000750 BIO_printf(bio_err,"bf-cbc");
751#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000752#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
753 !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000754 BIO_printf(bio_err,"\n");
755#endif
Richard Levitte30094582000-08-14 14:05:53 +0000756
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000757 BIO_printf(bio_err,"des-cbc des-ede3 ");
Richard Levittecf1b7d92001-02-19 16:06:34 +0000758#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000759 BIO_printf(bio_err,"rc4");
760#endif
Richard Levitte30094582000-08-14 14:05:53 +0000761 BIO_printf(bio_err,"\n");
762
Richard Levittecf1b7d92001-02-19 16:06:34 +0000763#ifndef OPENSSL_NO_RSA
Richard Levitte30094582000-08-14 14:05:53 +0000764 BIO_printf(bio_err,"rsa512 rsa1024 rsa2048 rsa4096\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000765#endif
Richard Levitte30094582000-08-14 14:05:53 +0000766
Richard Levittecf1b7d92001-02-19 16:06:34 +0000767#ifndef OPENSSL_NO_DSA
Richard Levitte30094582000-08-14 14:05:53 +0000768 BIO_printf(bio_err,"dsa512 dsa1024 dsa2048\n");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000769#endif
Richard Levitte30094582000-08-14 14:05:53 +0000770
Richard Levittecf1b7d92001-02-19 16:06:34 +0000771#ifndef OPENSSL_NO_IDEA
Richard Levitte30094582000-08-14 14:05:53 +0000772 BIO_printf(bio_err,"idea ");
773#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000774#ifndef OPENSSL_NO_RC2
Richard Levitte30094582000-08-14 14:05:53 +0000775 BIO_printf(bio_err,"rc2 ");
776#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000777#ifndef OPENSSL_NO_DES
Richard Levitte30094582000-08-14 14:05:53 +0000778 BIO_printf(bio_err,"des ");
779#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000780#ifndef OPENSSL_NO_RSA
Richard Levitte30094582000-08-14 14:05:53 +0000781 BIO_printf(bio_err,"rsa ");
782#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000783#ifndef OPENSSL_NO_BF
Richard Levitte30094582000-08-14 14:05:53 +0000784 BIO_printf(bio_err,"blowfish");
785#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000786#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
787 !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
788 !defined(OPENSSL_NO_BF)
Richard Levitte4e74239c2000-06-30 17:16:46 +0000789 BIO_printf(bio_err,"\n");
Richard Levitte30094582000-08-14 14:05:53 +0000790#endif
791
Richard Levitte4e74239c2000-06-30 17:16:46 +0000792 BIO_printf(bio_err,"\n");
Richard Levitte30094582000-08-14 14:05:53 +0000793 BIO_printf(bio_err,"Available options:\n");
Richard Levitte5270e702000-10-26 21:07:28 +0000794#ifdef TIMES
Richard Levitte4e74239c2000-06-30 17:16:46 +0000795 BIO_printf(bio_err,"-elapsed measure time in real time instead of CPU user time.\n");
Richard Levitte3132e192000-08-03 21:54:31 +0000796#endif
Richard Levitte5270e702000-10-26 21:07:28 +0000797 BIO_printf(bio_err,"-engine e use engine e, possibly a hardware device.\n");
Ben Laurie0e211562001-10-25 14:27:17 +0000798 BIO_printf(bio_err,"-evp e use EVP e.\n");
799 BIO_printf(bio_err,"-decrypt time decryption instead of encryption (only EVP).\n");
800 BIO_printf(bio_err,"-mr produce machine readable output.\n");
Richard Levitte66d3e742001-10-25 16:08:17 +0000801#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000802 BIO_printf(bio_err,"-multi n run n benchmarks in parallel.\n");
Richard Levitte66d3e742001-10-25 16:08:17 +0000803#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000804 goto end;
805 }
806 argc--;
807 argv++;
808 j++;
809 }
810
Richard Levitte66d3e742001-10-25 16:08:17 +0000811#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +0000812 if(multi && do_multi(multi))
813 goto show_res;
Richard Levitte66d3e742001-10-25 16:08:17 +0000814#endif
Ben Laurie0e211562001-10-25 14:27:17 +0000815
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000816 if (j == 0)
817 {
818 for (i=0; i<ALGOR_NUM; i++)
Bodo Möller53d28672000-11-29 11:04:31 +0000819 {
820 if (i != D_EVP)
821 doit[i]=1;
822 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000823 for (i=0; i<RSA_NUM; i++)
824 rsa_doit[i]=1;
825 for (i=0; i<DSA_NUM; i++)
826 dsa_doit[i]=1;
827 }
828 for (i=0; i<ALGOR_NUM; i++)
829 if (doit[i]) pr_header++;
830
Ben Laurie0e211562001-10-25 14:27:17 +0000831 if (usertime == 0 && !mr)
Richard Levitte4e74239c2000-06-30 17:16:46 +0000832 BIO_printf(bio_err,"You have chosen to measure elapsed time instead of user CPU time.\n");
Ben Laurie0e211562001-10-25 14:27:17 +0000833 if (usertime <= 0 && !mr)
Richard Levitte4e74239c2000-06-30 17:16:46 +0000834 {
835 BIO_printf(bio_err,"To get the most accurate results, try to run this\n");
836 BIO_printf(bio_err,"program when this computer is idle.\n");
837 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000838
Richard Levittecf1b7d92001-02-19 16:06:34 +0000839#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000840 for (i=0; i<RSA_NUM; i++)
841 {
Richard Levitte5e4ca422000-11-06 23:16:04 +0000842 const unsigned char *p;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000843
844 p=rsa_data[i];
845 rsa_key[i]=d2i_RSAPrivateKey(NULL,&p,rsa_data_length[i]);
846 if (rsa_key[i] == NULL)
847 {
848 BIO_printf(bio_err,"internal error loading RSA key number %d\n",i);
849 goto end;
850 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000851#if 0
852 else
853 {
Ben Laurie0e211562001-10-25 14:27:17 +0000854 BIO_printf(bio_err,mr ? "+RK:%d:"
855 : "Loaded RSA key, %d bit modulus and e= 0x",
856 BN_num_bits(rsa_key[i]->n));
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000857 BN_print(bio_err,rsa_key[i]->e);
858 BIO_printf(bio_err,"\n");
859 }
860#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000861 }
862#endif
863
Richard Levittecf1b7d92001-02-19 16:06:34 +0000864#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000865 dsa_key[0]=get_dsa512();
866 dsa_key[1]=get_dsa1024();
867 dsa_key[2]=get_dsa2048();
868#endif
869
Richard Levittecf1b7d92001-02-19 16:06:34 +0000870#ifndef OPENSSL_NO_DES
Richard Levittec2e4f172001-10-24 21:21:12 +0000871 DES_set_key_unchecked(&key,&sch);
872 DES_set_key_unchecked(&key2,&sch2);
873 DES_set_key_unchecked(&key3,&sch3);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000874#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000875#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000876 idea_set_encrypt_key(key16,&idea_ks);
877#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000878#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000879 RC4_set_key(&rc4_ks,16,key16);
880#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000881#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000882 RC2_set_key(&rc2_ks,16,key16,128);
883#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000884#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000885 RC5_32_set_key(&rc5_ks,16,key16,12);
886#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000887#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000888 BF_set_key(&bf_ks,16,key16);
889#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000890#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000891 CAST_set_key(&cast_ks,16,key16);
892#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +0000893#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000894 memset(rsa_c,0,sizeof(rsa_c));
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000895#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000896#ifndef SIGALRM
Richard Levittecf1b7d92001-02-19 16:06:34 +0000897#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000898 BIO_printf(bio_err,"First we calculate the approximate speed ...\n");
899 count=10;
900 do {
901 long i;
902 count*=2;
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +0000903 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000904 for (i=count; i; i--)
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +0000905 DES_ecb_encrypt(buf_as_des_cblock,buf_as_des_cblock,
Richard Levitte3d90a322001-10-02 11:49:55 +0000906 &sch,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +0000907 d=Time_F(STOP);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000908 } while (d <3);
Ben Laurie646d5692000-11-20 04:14:19 +0000909 save_count=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000910 c[D_MD2][0]=count/10;
911 c[D_MDC2][0]=count/10;
Richard Levitte30094582000-08-14 14:05:53 +0000912 c[D_MD4][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000913 c[D_MD5][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000914 c[D_HMAC][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000915 c[D_SHA1][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000916 c[D_RMD160][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000917 c[D_RC4][0]=count*5;
918 c[D_CBC_DES][0]=count;
919 c[D_EDE3_DES][0]=count/3;
920 c[D_CBC_IDEA][0]=count;
921 c[D_CBC_RC2][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000922 c[D_CBC_RC5][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000923 c[D_CBC_BF][0]=count;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000924 c[D_CBC_CAST][0]=count;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000925
926 for (i=1; i<SIZE_NUM; i++)
927 {
928 c[D_MD2][i]=c[D_MD2][0]*4*lengths[0]/lengths[i];
929 c[D_MDC2][i]=c[D_MDC2][0]*4*lengths[0]/lengths[i];
Richard Levitte30094582000-08-14 14:05:53 +0000930 c[D_MD4][i]=c[D_MD4][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000931 c[D_MD5][i]=c[D_MD5][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000932 c[D_HMAC][i]=c[D_HMAC][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000933 c[D_SHA1][i]=c[D_SHA1][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000934 c[D_RMD160][i]=c[D_RMD160][0]*4*lengths[0]/lengths[i];
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000935 }
936 for (i=1; i<SIZE_NUM; i++)
937 {
938 long l0,l1;
939
940 l0=(long)lengths[i-1];
941 l1=(long)lengths[i];
942 c[D_RC4][i]=c[D_RC4][i-1]*l0/l1;
943 c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
944 c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
945 c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
946 c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000947 c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000948 c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000949 c[D_CBC_CAST][i]=c[D_CBC_CAST][i-1]*l0/l1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000950 }
Richard Levittecf1b7d92001-02-19 16:06:34 +0000951#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000952 rsa_c[R_RSA_512][0]=count/2000;
953 rsa_c[R_RSA_512][1]=count/400;
954 for (i=1; i<RSA_NUM; i++)
955 {
956 rsa_c[i][0]=rsa_c[i-1][0]/8;
957 rsa_c[i][1]=rsa_c[i-1][1]/4;
958 if ((rsa_doit[i] <= 1) && (rsa_c[i][0] == 0))
959 rsa_doit[i]=0;
960 else
961 {
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000962 if (rsa_c[i][0] == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000963 {
964 rsa_c[i][0]=1;
965 rsa_c[i][1]=20;
966 }
967 }
968 }
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000969#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000970
Bodo Möllerf89aebb2001-03-22 15:06:19 +0000971#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000972 dsa_c[R_DSA_512][0]=count/1000;
973 dsa_c[R_DSA_512][1]=count/1000/2;
974 for (i=1; i<DSA_NUM; i++)
975 {
976 dsa_c[i][0]=dsa_c[i-1][0]/4;
977 dsa_c[i][1]=dsa_c[i-1][1]/4;
978 if ((dsa_doit[i] <= 1) && (dsa_c[i][0] == 0))
979 dsa_doit[i]=0;
980 else
981 {
982 if (dsa_c[i] == 0)
983 {
984 dsa_c[i][0]=1;
985 dsa_c[i][1]=1;
986 }
987 }
988 }
Bodo Möllerf89aebb2001-03-22 15:06:19 +0000989#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000990
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000991#define COND(d) (count < (d))
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000992#define COUNT(d) (d)
993#else
Bodo Möller63da21c2000-01-07 12:15:54 +0000994/* not worth fixing */
995# error "You cannot disable DES on systems without SIGALRM."
Richard Levittecf1b7d92001-02-19 16:06:34 +0000996#endif /* OPENSSL_NO_DES */
Bodo Möller63da21c2000-01-07 12:15:54 +0000997#else
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000998#define COND(c) (run)
999#define COUNT(d) (count)
1000 signal(SIGALRM,sig_done);
Bodo Möller63da21c2000-01-07 12:15:54 +00001001#endif /* SIGALRM */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001002
Richard Levittecf1b7d92001-02-19 16:06:34 +00001003#ifndef OPENSSL_NO_MD2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001004 if (doit[D_MD2])
1005 {
1006 for (j=0; j<SIZE_NUM; j++)
1007 {
1008 print_message(names[D_MD2],c[D_MD2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001009 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001010 for (count=0,run=1; COND(c[D_MD2][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001011 EVP_Digest(buf,(unsigned long)lengths[j],&(md2[0]),NULL,EVP_md2(),NULL);
1012 d=Time_F(STOP);
1013 print_result(D_MD2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001014 }
1015 }
1016#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001017#ifndef OPENSSL_NO_MDC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001018 if (doit[D_MDC2])
1019 {
1020 for (j=0; j<SIZE_NUM; j++)
1021 {
1022 print_message(names[D_MDC2],c[D_MDC2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001023 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001024 for (count=0,run=1; COND(c[D_MDC2][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001025 EVP_Digest(buf,(unsigned long)lengths[j],&(mdc2[0]),NULL,EVP_mdc2(),NULL);
1026 d=Time_F(STOP);
1027 print_result(D_MDC2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001028 }
1029 }
1030#endif
1031
Richard Levittecf1b7d92001-02-19 16:06:34 +00001032#ifndef OPENSSL_NO_MD4
Richard Levitte30094582000-08-14 14:05:53 +00001033 if (doit[D_MD4])
1034 {
1035 for (j=0; j<SIZE_NUM; j++)
1036 {
1037 print_message(names[D_MD4],c[D_MD4][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001038 Time_F(START);
Richard Levitte30094582000-08-14 14:05:53 +00001039 for (count=0,run=1; COND(c[D_MD4][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001040 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md4[0]),NULL,EVP_md4(),NULL);
1041 d=Time_F(STOP);
1042 print_result(D_MD4,j,count,d);
Richard Levitte30094582000-08-14 14:05:53 +00001043 }
1044 }
1045#endif
1046
Richard Levittecf1b7d92001-02-19 16:06:34 +00001047#ifndef OPENSSL_NO_MD5
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001048 if (doit[D_MD5])
1049 {
1050 for (j=0; j<SIZE_NUM; j++)
1051 {
1052 print_message(names[D_MD5],c[D_MD5][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001053 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001054 for (count=0,run=1; COND(c[D_MD5][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001055 EVP_Digest(&(buf[0]),(unsigned long)lengths[j],&(md5[0]),NULL,EVP_get_digestbyname("md5"),NULL);
1056 d=Time_F(STOP);
1057 print_result(D_MD5,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001058 }
1059 }
1060#endif
1061
Richard Levittecf1b7d92001-02-19 16:06:34 +00001062#if !defined(OPENSSL_NO_MD5) && !defined(OPENSSL_NO_HMAC)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001063 if (doit[D_HMAC])
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001064 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001065 HMAC_CTX hctx;
Ben Lauriedbad1692001-07-30 23:57:25 +00001066
1067 HMAC_CTX_init(&hctx);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001068 HMAC_Init(&hctx,(unsigned char *)"This is a key...",
1069 16,EVP_md5());
1070
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001071 for (j=0; j<SIZE_NUM; j++)
1072 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001073 print_message(names[D_HMAC],c[D_HMAC][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001074 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001075 for (count=0,run=1; COND(c[D_HMAC][j]); count++)
1076 {
1077 HMAC_Init(&hctx,NULL,0,NULL);
1078 HMAC_Update(&hctx,buf,lengths[j]);
1079 HMAC_Final(&hctx,&(hmac[0]),NULL);
1080 }
Ben Laurie0e211562001-10-25 14:27:17 +00001081 d=Time_F(STOP);
1082 print_result(D_HMAC,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001083 }
Ben Lauriedbad1692001-07-30 23:57:25 +00001084 HMAC_CTX_cleanup(&hctx);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001085 }
1086#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001087#ifndef OPENSSL_NO_SHA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001088 if (doit[D_SHA1])
1089 {
1090 for (j=0; j<SIZE_NUM; j++)
1091 {
1092 print_message(names[D_SHA1],c[D_SHA1][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001093 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001094 for (count=0,run=1; COND(c[D_SHA1][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001095 EVP_Digest(buf,(unsigned long)lengths[j],&(sha[0]),NULL,EVP_sha1(),NULL);
1096 d=Time_F(STOP);
1097 print_result(D_SHA1,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001098 }
1099 }
1100#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001101#ifndef OPENSSL_NO_RIPEMD
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001102 if (doit[D_RMD160])
1103 {
1104 for (j=0; j<SIZE_NUM; j++)
1105 {
1106 print_message(names[D_RMD160],c[D_RMD160][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001107 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001108 for (count=0,run=1; COND(c[D_RMD160][j]); count++)
Ben Laurie0e211562001-10-25 14:27:17 +00001109 EVP_Digest(buf,(unsigned long)lengths[j],&(rmd160[0]),NULL,EVP_ripemd160(),NULL);
1110 d=Time_F(STOP);
1111 print_result(D_RMD160,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001112 }
1113 }
1114#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001115#ifndef OPENSSL_NO_RC4
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001116 if (doit[D_RC4])
1117 {
1118 for (j=0; j<SIZE_NUM; j++)
1119 {
1120 print_message(names[D_RC4],c[D_RC4][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001121 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001122 for (count=0,run=1; COND(c[D_RC4][j]); count++)
1123 RC4(&rc4_ks,(unsigned int)lengths[j],
1124 buf,buf);
Ben Laurie0e211562001-10-25 14:27:17 +00001125 d=Time_F(STOP);
1126 print_result(D_RC4,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001127 }
1128 }
1129#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001130#ifndef OPENSSL_NO_DES
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001131 if (doit[D_CBC_DES])
1132 {
1133 for (j=0; j<SIZE_NUM; j++)
1134 {
1135 print_message(names[D_CBC_DES],c[D_CBC_DES][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001136 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001137 for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
Richard Levittec2e4f172001-10-24 21:21:12 +00001138 DES_ncbc_encrypt(buf,buf,lengths[j],&sch,
Bodo Mölleredf0bfb1999-05-16 12:26:16 +00001139 &iv,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001140 d=Time_F(STOP);
1141 print_result(D_CBC_DES,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001142 }
1143 }
1144
1145 if (doit[D_EDE3_DES])
1146 {
1147 for (j=0; j<SIZE_NUM; j++)
1148 {
1149 print_message(names[D_EDE3_DES],c[D_EDE3_DES][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001150 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001151 for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
Richard Levittec2e4f172001-10-24 21:21:12 +00001152 DES_ede3_cbc_encrypt(buf,buf,lengths[j],
Ben Lauriedbad1692001-07-30 23:57:25 +00001153 &sch,&sch2,&sch3,
Bodo Mölleredf0bfb1999-05-16 12:26:16 +00001154 &iv,DES_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001155 d=Time_F(STOP);
1156 print_result(D_EDE3_DES,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001157 }
1158 }
1159#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001160#ifndef OPENSSL_NO_IDEA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001161 if (doit[D_CBC_IDEA])
1162 {
1163 for (j=0; j<SIZE_NUM; j++)
1164 {
1165 print_message(names[D_CBC_IDEA],c[D_CBC_IDEA][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001166 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001167 for (count=0,run=1; COND(c[D_CBC_IDEA][j]); count++)
1168 idea_cbc_encrypt(buf,buf,
1169 (unsigned long)lengths[j],&idea_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001170 iv,IDEA_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001171 d=Time_F(STOP);
1172 print_result(D_CBC_IDEA,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001173 }
1174 }
1175#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001176#ifndef OPENSSL_NO_RC2
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001177 if (doit[D_CBC_RC2])
1178 {
1179 for (j=0; j<SIZE_NUM; j++)
1180 {
1181 print_message(names[D_CBC_RC2],c[D_CBC_RC2][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001182 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001183 for (count=0,run=1; COND(c[D_CBC_RC2][j]); count++)
1184 RC2_cbc_encrypt(buf,buf,
1185 (unsigned long)lengths[j],&rc2_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001186 iv,RC2_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001187 d=Time_F(STOP);
1188 print_result(D_CBC_RC2,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001189 }
1190 }
1191#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001192#ifndef OPENSSL_NO_RC5
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001193 if (doit[D_CBC_RC5])
1194 {
1195 for (j=0; j<SIZE_NUM; j++)
1196 {
1197 print_message(names[D_CBC_RC5],c[D_CBC_RC5][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001198 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001199 for (count=0,run=1; COND(c[D_CBC_RC5][j]); count++)
1200 RC5_32_cbc_encrypt(buf,buf,
1201 (unsigned long)lengths[j],&rc5_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001202 iv,RC5_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001203 d=Time_F(STOP);
1204 print_result(D_CBC_RC5,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001205 }
1206 }
1207#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001208#ifndef OPENSSL_NO_BF
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001209 if (doit[D_CBC_BF])
1210 {
1211 for (j=0; j<SIZE_NUM; j++)
1212 {
1213 print_message(names[D_CBC_BF],c[D_CBC_BF][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001214 Time_F(START);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001215 for (count=0,run=1; COND(c[D_CBC_BF][j]); count++)
1216 BF_cbc_encrypt(buf,buf,
1217 (unsigned long)lengths[j],&bf_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001218 iv,BF_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001219 d=Time_F(STOP);
1220 print_result(D_CBC_BF,j,count,d);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001221 }
1222 }
1223#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001224#ifndef OPENSSL_NO_CAST
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001225 if (doit[D_CBC_CAST])
1226 {
1227 for (j=0; j<SIZE_NUM; j++)
1228 {
1229 print_message(names[D_CBC_CAST],c[D_CBC_CAST][j],lengths[j]);
Ben Laurie0e211562001-10-25 14:27:17 +00001230 Time_F(START);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001231 for (count=0,run=1; COND(c[D_CBC_CAST][j]); count++)
1232 CAST_cbc_encrypt(buf,buf,
1233 (unsigned long)lengths[j],&cast_ks,
Bodo Möller12ba4131999-05-18 15:06:20 +00001234 iv,CAST_ENCRYPT);
Ben Laurie0e211562001-10-25 14:27:17 +00001235 d=Time_F(STOP);
1236 print_result(D_CBC_CAST,j,count,d);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001237 }
1238 }
1239#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001240
Ben Laurie646d5692000-11-20 04:14:19 +00001241 if (doit[D_EVP])
1242 {
1243 for (j=0; j<SIZE_NUM; j++)
1244 {
Richard Levitte83c40e72001-11-15 20:19:40 +00001245 if (evp_cipher)
1246 {
1247 EVP_CIPHER_CTX ctx;
1248 int outl;
Ben Laurie646d5692000-11-20 04:14:19 +00001249
Richard Levitte83c40e72001-11-15 20:19:40 +00001250 names[D_EVP]=OBJ_nid2ln(evp_cipher->nid);
1251 print_message(names[D_EVP],save_count,
1252 lengths[j]);
1253
1254 EVP_CIPHER_CTX_init(&ctx);
1255 if(decrypt)
1256 EVP_DecryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1257 else
1258 EVP_EncryptInit_ex(&ctx,evp_cipher,NULL,key16,iv);
1259
1260 Time_F(START);
1261 if(decrypt)
1262 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1263 EVP_DecryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1264 else
1265 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
1266 EVP_EncryptUpdate(&ctx,buf,&outl,buf,lengths[j]);
1267 if(decrypt)
1268 EVP_DecryptFinal_ex(&ctx,buf,&outl);
1269 else
1270 EVP_EncryptFinal_ex(&ctx,buf,&outl);
1271 d=Time_F(STOP);
1272 }
1273 if (evp_md)
1274 {
1275 names[D_EVP]=OBJ_nid2ln(evp_md->type);
1276 print_message(names[D_EVP],save_count,
1277 lengths[j]);
1278
1279 Time_F(START);
Ben Laurie3f37e732001-07-08 12:14:41 +00001280 for (count=0,run=1; COND(save_count*4*lengths[0]/lengths[j]); count++)
Richard Levitte83c40e72001-11-15 20:19:40 +00001281 EVP_Digest(buf,lengths[j],&(md[0]),NULL,evp_md,NULL);
1282
1283 d=Time_F(STOP);
1284 }
Ben Laurie0e211562001-10-25 14:27:17 +00001285 print_result(D_EVP,j,count,d);
Ben Laurie646d5692000-11-20 04:14:19 +00001286 }
1287 }
1288
Ulf Möller373b5752000-01-16 15:58:17 +00001289 RAND_pseudo_bytes(buf,36);
Richard Levittecf1b7d92001-02-19 16:06:34 +00001290#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001291 for (j=0; j<RSA_NUM; j++)
1292 {
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00001293 int ret;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001294 if (!rsa_doit[j]) continue;
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00001295 ret=RSA_sign(NID_md5_sha1, buf,36, buf2, &rsa_num, rsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001296 if (ret == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001297 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00001298 BIO_printf(bio_err,"RSA sign failure. No RSA sign will be done.\n");
1299 ERR_print_errors(bio_err);
1300 rsa_count=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001301 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00001302 else
1303 {
1304 pkey_print_message("private","rsa",
1305 rsa_c[j][0],rsa_bits[j],
1306 RSA_SECONDS);
1307/* RSA_blinding_on(rsa_key[j],NULL); */
Ben Laurie0e211562001-10-25 14:27:17 +00001308 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001309 for (count=0,run=1; COND(rsa_c[j][0]); count++)
1310 {
1311 ret=RSA_sign(NID_md5_sha1, buf,36, buf2,
1312 &rsa_num, rsa_key[j]);
1313 if (ret == 0)
1314 {
1315 BIO_printf(bio_err,
1316 "RSA sign failure\n");
1317 ERR_print_errors(bio_err);
1318 count=1;
1319 break;
1320 }
1321 }
Ben Laurie0e211562001-10-25 14:27:17 +00001322 d=Time_F(STOP);
1323 BIO_printf(bio_err,mr ? "+R1:%ld:%d:%.2f\n"
1324 : "%ld %d bit private RSA's in %.2fs\n",
1325 count,rsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001326 rsa_results[j][0]=d/(double)count;
1327 rsa_count=count;
1328 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001329
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001330#if 1
Dr. Stephen Hensonc91e1251999-10-02 01:18:19 +00001331 ret=RSA_verify(NID_md5_sha1, buf,36, buf2, rsa_num, rsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001332 if (ret <= 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001333 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00001334 BIO_printf(bio_err,"RSA verify failure. No RSA verify will be done.\n");
1335 ERR_print_errors(bio_err);
Richard Levitte51740b12001-03-16 10:30:10 +00001336 rsa_doit[j] = 0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001337 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00001338 else
1339 {
1340 pkey_print_message("public","rsa",
1341 rsa_c[j][1],rsa_bits[j],
1342 RSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00001343 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001344 for (count=0,run=1; COND(rsa_c[j][1]); count++)
1345 {
1346 ret=RSA_verify(NID_md5_sha1, buf,36, buf2,
1347 rsa_num, rsa_key[j]);
1348 if (ret == 0)
1349 {
1350 BIO_printf(bio_err,
1351 "RSA verify failure\n");
1352 ERR_print_errors(bio_err);
1353 count=1;
1354 break;
1355 }
1356 }
Ben Laurie0e211562001-10-25 14:27:17 +00001357 d=Time_F(STOP);
1358 BIO_printf(bio_err,mr ? "+R2:%ld:%d:%.2f\n"
1359 : "%ld %d bit public RSA's in %.2fs\n",
1360 count,rsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001361 rsa_results[j][1]=d/(double)count;
1362 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001363#endif
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001364
1365 if (rsa_count <= 1)
1366 {
1367 /* if longer than 10s, don't do any more */
1368 for (j++; j<RSA_NUM; j++)
1369 rsa_doit[j]=0;
1370 }
1371 }
1372#endif
1373
Ulf Möller373b5752000-01-16 15:58:17 +00001374 RAND_pseudo_bytes(buf,20);
Richard Levittecf1b7d92001-02-19 16:06:34 +00001375#ifndef OPENSSL_NO_DSA
Ulf Möller99a97052000-03-01 17:42:06 +00001376 if (RAND_status() != 1)
1377 {
1378 RAND_seed(rnd_seed, sizeof rnd_seed);
1379 rnd_fake = 1;
1380 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001381 for (j=0; j<DSA_NUM; j++)
1382 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001383 unsigned int kk;
Richard Levitte03ea28c2000-09-12 08:12:52 +00001384 int ret;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001385
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001386 if (!dsa_doit[j]) continue;
Geoff Thorpeaf436bc2001-07-11 18:59:25 +00001387/* DSA_generate_key(dsa_key[j]); */
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001388/* DSA_sign_setup(dsa_key[j],NULL); */
Richard Levitte03ea28c2000-09-12 08:12:52 +00001389 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001390 &kk,dsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001391 if (ret == 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001392 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00001393 BIO_printf(bio_err,"DSA sign failure. No DSA sign will be done.\n");
1394 ERR_print_errors(bio_err);
1395 rsa_count=1;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001396 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00001397 else
1398 {
1399 pkey_print_message("sign","dsa",
1400 dsa_c[j][0],dsa_bits[j],
1401 DSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00001402 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001403 for (count=0,run=1; COND(dsa_c[j][0]); count++)
1404 {
1405 ret=DSA_sign(EVP_PKEY_DSA,buf,20,buf2,
1406 &kk,dsa_key[j]);
1407 if (ret == 0)
1408 {
1409 BIO_printf(bio_err,
1410 "DSA sign failure\n");
1411 ERR_print_errors(bio_err);
1412 count=1;
1413 break;
1414 }
1415 }
Ben Laurie0e211562001-10-25 14:27:17 +00001416 d=Time_F(STOP);
1417 BIO_printf(bio_err,mr ? "+R3:%ld:%d:%.2f\n"
1418 : "%ld %d bit DSA signs in %.2fs\n",
1419 count,dsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001420 dsa_results[j][0]=d/(double)count;
1421 rsa_count=count;
1422 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001423
Richard Levitte03ea28c2000-09-12 08:12:52 +00001424 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001425 kk,dsa_key[j]);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001426 if (ret <= 0)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001427 {
Richard Levitte03ea28c2000-09-12 08:12:52 +00001428 BIO_printf(bio_err,"DSA verify failure. No DSA verify will be done.\n");
1429 ERR_print_errors(bio_err);
1430 dsa_doit[j] = 0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001431 }
Richard Levitte03ea28c2000-09-12 08:12:52 +00001432 else
1433 {
1434 pkey_print_message("verify","dsa",
1435 dsa_c[j][1],dsa_bits[j],
1436 DSA_SECONDS);
Ben Laurie0e211562001-10-25 14:27:17 +00001437 Time_F(START);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001438 for (count=0,run=1; COND(dsa_c[j][1]); count++)
1439 {
1440 ret=DSA_verify(EVP_PKEY_DSA,buf,20,buf2,
1441 kk,dsa_key[j]);
1442 if (ret <= 0)
1443 {
1444 BIO_printf(bio_err,
1445 "DSA verify failure\n");
1446 ERR_print_errors(bio_err);
1447 count=1;
1448 break;
1449 }
1450 }
Ben Laurie0e211562001-10-25 14:27:17 +00001451 d=Time_F(STOP);
1452 BIO_printf(bio_err,mr ? "+R4:%ld:%d:%.2f\n"
1453 : "%ld %d bit DSA verify in %.2fs\n",
1454 count,dsa_bits[j],d);
Richard Levitte03ea28c2000-09-12 08:12:52 +00001455 dsa_results[j][1]=d/(double)count;
1456 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001457
1458 if (rsa_count <= 1)
1459 {
1460 /* if longer than 10s, don't do any more */
1461 for (j++; j<DSA_NUM; j++)
1462 dsa_doit[j]=0;
1463 }
1464 }
Ulf Möller99a97052000-03-01 17:42:06 +00001465 if (rnd_fake) RAND_cleanup();
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001466#endif
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +00001467#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00001468show_res:
Dr. Stephen Hensonb83eddc2001-11-06 13:40:27 +00001469#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001470 if(!mr)
1471 {
1472 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_VERSION));
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001473 fprintf(stdout,"%s\n",SSLeay_version(SSLEAY_BUILT_ON));
Ben Laurie0e211562001-10-25 14:27:17 +00001474 printf("options:");
1475 printf("%s ",BN_options());
Richard Levittecf1b7d92001-02-19 16:06:34 +00001476#ifndef OPENSSL_NO_MD2
Ben Laurie0e211562001-10-25 14:27:17 +00001477 printf("%s ",MD2_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001478#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001479#ifndef OPENSSL_NO_RC4
Ben Laurie0e211562001-10-25 14:27:17 +00001480 printf("%s ",RC4_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001481#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001482#ifndef OPENSSL_NO_DES
Ben Laurie0e211562001-10-25 14:27:17 +00001483 printf("%s ",des_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001484#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001485#ifndef OPENSSL_NO_IDEA
Ben Laurie0e211562001-10-25 14:27:17 +00001486 printf("%s ",idea_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001487#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001488#ifndef OPENSSL_NO_BF
Ben Laurie0e211562001-10-25 14:27:17 +00001489 printf("%s ",BF_options());
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001490#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001491 fprintf(stdout,"\n%s\n",SSLeay_version(SSLEAY_CFLAGS));
1492 printf("available timing options: ");
Richard Levitte7876e442001-09-27 15:43:55 +00001493#ifdef TIMES
Ben Laurie0e211562001-10-25 14:27:17 +00001494 printf("TIMES ");
Richard Levitte7876e442001-09-27 15:43:55 +00001495#endif
1496#ifdef TIMEB
Ben Laurie0e211562001-10-25 14:27:17 +00001497 printf("TIMEB ");
Richard Levitte7876e442001-09-27 15:43:55 +00001498#endif
1499#ifdef USE_TOD
Ben Laurie0e211562001-10-25 14:27:17 +00001500 printf("USE_TOD ");
Richard Levitte7876e442001-09-27 15:43:55 +00001501#endif
1502#ifdef HZ
1503#define as_string(s) (#s)
Ben Laurie0e211562001-10-25 14:27:17 +00001504 printf("HZ=%g", HZ);
Richard Levittea4a8f7b2001-09-28 10:34:48 +00001505# ifdef _SC_CLK_TCK
Ben Laurie0e211562001-10-25 14:27:17 +00001506 printf(" [sysconf value]");
Richard Levittea4a8f7b2001-09-28 10:34:48 +00001507# endif
Richard Levitte7876e442001-09-27 15:43:55 +00001508#endif
Ben Laurie0e211562001-10-25 14:27:17 +00001509 printf("\n");
1510 printf("timing function used: %s%s%s%s%s%s%s\n",
1511 (ftime_used ? "ftime" : ""),
1512 (ftime_used + times_used > 1 ? "," : ""),
1513 (times_used ? "times" : ""),
1514 (ftime_used + times_used + gettimeofday_used > 1 ? "," : ""),
1515 (gettimeofday_used ? "gettimeofday" : ""),
1516 (ftime_used + times_used + gettimeofday_used + getrusage_used > 1 ? "," : ""),
1517 (getrusage_used ? "getrusage" : ""));
1518 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001519
1520 if (pr_header)
1521 {
Ben Laurie0e211562001-10-25 14:27:17 +00001522 if(mr)
1523 fprintf(stdout,"+H");
1524 else
1525 {
1526 fprintf(stdout,"The 'numbers' are in 1000s of bytes per second processed.\n");
1527 fprintf(stdout,"type ");
1528 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001529 for (j=0; j<SIZE_NUM; j++)
Ben Laurie0e211562001-10-25 14:27:17 +00001530 fprintf(stdout,mr ? ":%d" : "%7d bytes",lengths[j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001531 fprintf(stdout,"\n");
1532 }
1533
1534 for (k=0; k<ALGOR_NUM; k++)
1535 {
1536 if (!doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00001537 if(mr)
1538 fprintf(stdout,"+F:%d:%s",k,names[k]);
1539 else
1540 fprintf(stdout,"%-13s",names[k]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001541 for (j=0; j<SIZE_NUM; j++)
1542 {
Ben Laurie0e211562001-10-25 14:27:17 +00001543 if (results[k][j] > 10000 && !mr)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001544 fprintf(stdout," %11.2fk",results[k][j]/1e3);
1545 else
Ben Laurie0e211562001-10-25 14:27:17 +00001546 fprintf(stdout,mr ? ":%.2f" : " %11.2f ",results[k][j]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001547 }
1548 fprintf(stdout,"\n");
1549 }
Richard Levittecf1b7d92001-02-19 16:06:34 +00001550#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001551 j=1;
1552 for (k=0; k<RSA_NUM; k++)
1553 {
1554 if (!rsa_doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00001555 if (j && !mr)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001556 {
1557 printf("%18ssign verify sign/s verify/s\n"," ");
1558 j=0;
1559 }
Ben Laurie0e211562001-10-25 14:27:17 +00001560 if(mr)
1561 fprintf(stdout,"+F2:%u:%u:%f:%f\n",
1562 k,rsa_bits[k],rsa_results[k][0],
1563 rsa_results[k][1]);
1564 else
1565 fprintf(stdout,"rsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
1566 rsa_bits[k],rsa_results[k][0],rsa_results[k][1],
1567 1.0/rsa_results[k][0],1.0/rsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001568 }
1569#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001570#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001571 j=1;
1572 for (k=0; k<DSA_NUM; k++)
1573 {
1574 if (!dsa_doit[k]) continue;
Ben Laurie0e211562001-10-25 14:27:17 +00001575 if (j && !mr)
1576 {
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001577 printf("%18ssign verify sign/s verify/s\n"," ");
1578 j=0;
1579 }
Ben Laurie0e211562001-10-25 14:27:17 +00001580 if(mr)
1581 fprintf(stdout,"+F3:%u:%u:%f:%f\n",
1582 k,dsa_bits[k],dsa_results[k][0],dsa_results[k][1]);
1583 else
1584 fprintf(stdout,"dsa %4u bits %8.4fs %8.4fs %8.1f %8.1f\n",
1585 dsa_bits[k],dsa_results[k][0],dsa_results[k][1],
1586 1.0/dsa_results[k][0],1.0/dsa_results[k][1]);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001587 }
1588#endif
Ben Laurie18c77bf1999-10-03 18:09:45 +00001589 mret=0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001590end:
Richard Levitte5270e702000-10-26 21:07:28 +00001591 ERR_print_errors(bio_err);
Richard Levitte26a3a482000-06-01 22:19:21 +00001592 if (buf != NULL) OPENSSL_free(buf);
1593 if (buf2 != NULL) OPENSSL_free(buf2);
Richard Levittecf1b7d92001-02-19 16:06:34 +00001594#ifndef OPENSSL_NO_RSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001595 for (i=0; i<RSA_NUM; i++)
1596 if (rsa_key[i] != NULL)
1597 RSA_free(rsa_key[i]);
1598#endif
Richard Levittecf1b7d92001-02-19 16:06:34 +00001599#ifndef OPENSSL_NO_DSA
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001600 for (i=0; i<DSA_NUM; i++)
1601 if (dsa_key[i] != NULL)
1602 DSA_free(dsa_key[i]);
1603#endif
Richard Levittec04f8cf2001-06-23 16:37:32 +00001604 apps_shutdown();
Ben Laurie18c77bf1999-10-03 18:09:45 +00001605 EXIT(mret);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001606 }
1607
Ben Laurie646d5692000-11-20 04:14:19 +00001608static void print_message(const char *s, long num, int length)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001609 {
1610#ifdef SIGALRM
Ben Laurie0e211562001-10-25 14:27:17 +00001611 BIO_printf(bio_err,mr ? "+DT:%s:%d:%d\n"
1612 : "Doing %s for %ds on %d size blocks: ",s,SECONDS,length);
Bodo Möllerd58d0921999-06-10 16:29:32 +00001613 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001614 alarm(SECONDS);
1615#else
Ben Laurie0e211562001-10-25 14:27:17 +00001616 BIO_printf(bio_err,mr ? "+DN:%s:%ld:%d\n"
1617 : "Doing %s %ld times on %d size blocks: ",s,num,length);
Bodo Möllerd58d0921999-06-10 16:29:32 +00001618 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001619#endif
1620#ifdef LINT
1621 num=num;
1622#endif
1623 }
1624
Ulf Möller6b691a51999-04-19 21:31:43 +00001625static void pkey_print_message(char *str, char *str2, long num, int bits,
1626 int tm)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001627 {
1628#ifdef SIGALRM
Ben Laurie0e211562001-10-25 14:27:17 +00001629 BIO_printf(bio_err,mr ? "+DTP:%d:%s:%s:%d\n"
1630 : "Doing %d bit %s %s's for %ds: ",bits,str,str2,tm);
Bodo Möllerd58d0921999-06-10 16:29:32 +00001631 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001632 alarm(RSA_SECONDS);
1633#else
Ben Laurie0e211562001-10-25 14:27:17 +00001634 BIO_printf(bio_err,mr ? "+DNP:%ld:%d:%s:%s\n"
1635 : "Doing %ld %d bit %s %s's: ",num,bits,str,str2);
Bodo Möllerd58d0921999-06-10 16:29:32 +00001636 (void)BIO_flush(bio_err);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001637#endif
1638#ifdef LINT
1639 num=num;
1640#endif
1641 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001642
Ben Laurie0e211562001-10-25 14:27:17 +00001643static void print_result(int alg,int run_no,int count,double time_used)
1644 {
1645 BIO_printf(bio_err,mr ? "+R:%ld:%s:%f\n"
1646 : "%ld %s's in %.2fs\n",count,names[alg],time_used);
1647 results[alg][run_no]=((double)count)/time_used*lengths[run_no];
1648 }
1649
1650static char *sstrsep(char **string, const char *delim)
1651 {
1652 char isdelim[256];
1653 char *token = *string;
1654
1655 if (**string == 0)
1656 return NULL;
1657
1658 memset(isdelim, 0, 256);
1659 isdelim[0] = 1;
1660
1661 while (*delim)
1662 {
1663 isdelim[(unsigned char)(*delim)] = 1;
1664 delim++;
1665 }
1666
1667 while (!isdelim[(unsigned char)(**string)])
1668 {
1669 (*string)++;
1670 }
1671
1672 if (**string)
1673 {
1674 **string = 0;
1675 (*string)++;
1676 }
1677
1678 return token;
1679 }
1680
Richard Levitte66d3e742001-10-25 16:08:17 +00001681#ifdef HAVE_FORK
Ben Laurie0e211562001-10-25 14:27:17 +00001682static int do_multi(int multi)
1683 {
1684 int n;
1685 int fd[2];
1686 int *fds;
1687 static char sep[]=":";
1688
1689 fds=malloc(multi*sizeof *fds);
1690 for(n=0 ; n < multi ; ++n)
1691 {
1692 pipe(fd);
1693 if(fork())
1694 {
1695 close(fd[1]);
1696 fds[n]=fd[0];
1697 }
1698 else
1699 {
1700 close(fd[0]);
1701 close(1);
1702 dup(fd[1]);
1703 close(fd[1]);
1704 mr=1;
1705 usertime=0;
1706 return 0;
1707 }
1708 printf("Forked child %d\n",n);
1709 }
1710
1711 /* for now, assume the pipe is long enough to take all the output */
1712 for(n=0 ; n < multi ; ++n)
1713 {
1714 FILE *f;
1715 char buf[1024];
1716 char *p;
1717
1718 f=fdopen(fds[n],"r");
1719 while(fgets(buf,sizeof buf,f))
1720 {
1721 p=strchr(buf,'\n');
1722 if(p)
1723 *p='\0';
1724 if(buf[0] != '+')
1725 {
1726 fprintf(stderr,"Don't understand line '%s' from child %d\n",
1727 buf,n);
1728 continue;
1729 }
1730 printf("Got: %s from %d\n",buf,n);
1731 if(!strncmp(buf,"+F:",3))
1732 {
1733 int alg;
1734 int j;
1735
1736 p=buf+3;
1737 alg=atoi(sstrsep(&p,sep));
1738 sstrsep(&p,sep);
1739 for(j=0 ; j < SIZE_NUM ; ++j)
1740 results[alg][j]+=atof(sstrsep(&p,sep));
1741 }
1742 else if(!strncmp(buf,"+F2:",4))
1743 {
1744 int k;
1745 double d;
1746
1747 p=buf+4;
1748 k=atoi(sstrsep(&p,sep));
1749 sstrsep(&p,sep);
1750
1751 d=atof(sstrsep(&p,sep));
1752 if(n)
1753 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
1754 else
1755 rsa_results[k][0]=d;
1756
1757 d=atof(sstrsep(&p,sep));
1758 if(n)
1759 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
1760 else
1761 rsa_results[k][1]=d;
1762 }
1763 else if(!strncmp(buf,"+F2:",4))
1764 {
1765 int k;
1766 double d;
1767
1768 p=buf+4;
1769 k=atoi(sstrsep(&p,sep));
1770 sstrsep(&p,sep);
1771
1772 d=atof(sstrsep(&p,sep));
1773 if(n)
1774 rsa_results[k][0]=1/(1/rsa_results[k][0]+1/d);
1775 else
1776 rsa_results[k][0]=d;
1777
1778 d=atof(sstrsep(&p,sep));
1779 if(n)
1780 rsa_results[k][1]=1/(1/rsa_results[k][1]+1/d);
1781 else
1782 rsa_results[k][1]=d;
1783 }
1784 else if(!strncmp(buf,"+F3:",4))
1785 {
1786 int k;
1787 double d;
1788
1789 p=buf+4;
1790 k=atoi(sstrsep(&p,sep));
1791 sstrsep(&p,sep);
1792
1793 d=atof(sstrsep(&p,sep));
1794 if(n)
1795 dsa_results[k][0]=1/(1/dsa_results[k][0]+1/d);
1796 else
1797 dsa_results[k][0]=d;
1798
1799 d=atof(sstrsep(&p,sep));
1800 if(n)
1801 dsa_results[k][1]=1/(1/dsa_results[k][1]+1/d);
1802 else
1803 dsa_results[k][1]=d;
1804 }
1805 else if(!strncmp(buf,"+H:",3))
1806 {
1807 }
1808 else
1809 fprintf(stderr,"Unknown type '%s' from child %d\n",buf,n);
1810 }
1811 }
1812 return 1;
1813 }
Richard Levitte66d3e742001-10-25 16:08:17 +00001814#endif