1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/des/speed.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 11-Sep-92 Andrew Daviel   Support for Silicon Graphics IRIX added */
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 06-Apr-92 Luke Brennan    Support for VMS and add extra signal calls */
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define TIMES
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/e_os2.h>
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include OPENSSL_UNISTD_IO
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_DECLARE_EXIT
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_SYS_NETWARE
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <signal.h>
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define crypt(c,s) (des_crypt((c),(s)))
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef _IRIX
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <time.h>
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef TIMES
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/types.h>
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/times.h>
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Depending on the VMS version, the tms structure is perhaps defined.
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   The __TMS macro will show if it was.  If it wasn't defined, we should
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   undefine TIMES, since that tells the rest of the program how things
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   should be handled.				-- Richard Levitte */
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef TIMES
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef TIMES
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/timeb.h>
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(sun) || defined(__ultrix)
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define _POSIX_SOURCE
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <limits.h>
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/param.h>
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/des.h>
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following if from times(3) man page.  It may need to be changed */
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HZ
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ifndef CLK_TCK
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  ifndef _BSD_CLK_TCK_ /* FreeBSD fix */
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#   define HZ	100.0
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  else /* _BSD_CLK_TCK_ */
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#   define HZ ((double)_BSD_CLK_TCK_)
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  endif
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# else /* CLK_TCK */
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  define HZ ((double)CLK_TCK)
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# endif
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define BUFSIZE	((long)1024)
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong run=0;
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectdouble Time_F(int s);
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef SIGALRM
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(__STDC__) || defined(sgi) || defined(_AIX)
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SIGRETTYPE void
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SIGRETTYPE int
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSIGRETTYPE sig_done(int sig);
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSIGRETTYPE sig_done(int sig)
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	signal(SIGALRM,sig_done);
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	run=0;
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LINT
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sig=sig;
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define START	0
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define STOP	1
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectdouble Time_F(int s)
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	double ret;
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef TIMES
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static struct tms tstart,tend;
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (s == START)
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		times(&tstart);
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(0);
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		times(&tend);
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return((ret == 0.0)?1e-6:ret);
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* !times() */
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static struct timeb tstart,tend;
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long i;
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (s == START)
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ftime(&tstart);
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(0);
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ftime(&tend);
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		i=(long)tend.millitm-(long)tstart.millitm;
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=((double)(tend.time-tstart.time))+((double)i)/1e3;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return((ret == 0.0)?1e-6:ret);
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char **argv)
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long count;
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static unsigned char buf[BUFSIZE];
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static DES_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static DES_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static DES_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DES_key_schedule sch,sch2,sch3;
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	double a,b,c,d,e;
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef SIGALRM
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long ca,cb,cc,cd,ce;
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef TIMES
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("To get the most accurate results, try to run this\n");
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("program when this computer is idle.\n");
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DES_set_key_unchecked(&key2,&sch2);
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DES_set_key_unchecked(&key3,&sch3);
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef SIGALRM
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("First we calculate the approximate speed ...\n");
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	DES_set_key_unchecked(&key,&sch);
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	count=10;
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	do	{
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		long i;
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_LONG data[2];
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		count*=2;
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		Time_F(START);
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		for (i=count; i; i--)
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			DES_encrypt1(data,&sch,DES_ENCRYPT);
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		d=Time_F(STOP);
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		} while (d < 3.0);
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ca=count;
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	cb=count*3;
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	cc=count*3*8/BUFSIZE+1;
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	cd=count*8/BUFSIZE+1;
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ce=count/20+1;
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing set_key %ld times\n",ca);
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define COND(d)	(count != (d))
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define COUNT(d) (d)
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define COND(c)	(run)
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define COUNT(d) (count)
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	signal(SIGALRM,sig_done);
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing set_key for 10 seconds\n");
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	alarm(10);
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Time_F(START);
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (count=0,run=1; COND(ca); count++)
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_set_key_unchecked(&key,&sch);
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	d=Time_F(STOP);
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("%ld set_key's in %.2f seconds\n",count,d);
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	a=((double)COUNT(ca))/d;
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef SIGALRM
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_encrypt's for 10 seconds\n");
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	alarm(10);
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_encrypt %ld times\n",cb);
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Time_F(START);
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (count=0,run=1; COND(cb); count++)
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_LONG data[2];
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_encrypt1(data,&sch,DES_ENCRYPT);
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	d=Time_F(STOP);
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("%ld DES_encrypt's in %.2f second\n",count,d);
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b=((double)COUNT(cb)*8)/d;
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef SIGALRM
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_cbc_encrypt on %ld byte blocks for 10 seconds\n",
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BUFSIZE);
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	alarm(10);
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_cbc_encrypt %ld times on %ld byte blocks\n",cc,
260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BUFSIZE);
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Time_F(START);
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (count=0,run=1; COND(cc); count++)
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_ncbc_encrypt(buf,buf,BUFSIZE,&sch,
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			&key,DES_ENCRYPT);
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	d=Time_F(STOP);
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("%ld DES_cbc_encrypt's of %ld byte blocks in %.2f second\n",
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		count,BUFSIZE,d);
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	c=((double)COUNT(cc)*BUFSIZE)/d;
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef SIGALRM
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_ede_cbc_encrypt on %ld byte blocks for 10 seconds\n",
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BUFSIZE);
274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	alarm(10);
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing DES_ede_cbc_encrypt %ld times on %ld byte blocks\n",cd,
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BUFSIZE);
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Time_F(START);
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (count=0,run=1; COND(cd); count++)
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		DES_ede3_cbc_encrypt(buf,buf,BUFSIZE,
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			&sch,
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			&sch2,
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			&sch3,
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			&key,
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			DES_ENCRYPT);
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	d=Time_F(STOP);
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("%ld DES_ede_cbc_encrypt's of %ld byte blocks in %.2f second\n",
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		count,BUFSIZE,d);
290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	d=((double)COUNT(cd)*BUFSIZE)/d;
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef SIGALRM
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing crypt for 10 seconds\n");
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	alarm(10);
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("Doing crypt %ld times\n",ce);
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	Time_F(START);
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (count=0,run=1; COND(ce); count++)
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		crypt("testing1","ef");
301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	e=Time_F(STOP);
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("%ld crypts in %.2f second\n",count,e);
303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	e=((double)COUNT(ce))/e;
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("set_key            per sec = %12.2f (%9.3fuS)\n",a,1.0e6/a);
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("DES raw ecb bytes  per sec = %12.2f (%9.3fuS)\n",b,8.0e6/b);
307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("DES cbc bytes      per sec = %12.2f (%9.3fuS)\n",c,8.0e6/c);
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("DES ede cbc bytes  per sec = %12.2f (%9.3fuS)\n",d,8.0e6/d);
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	printf("crypt              per sec = %12.2f (%9.3fuS)\n",e,1.0e6/e);
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	exit(0);
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(LINT) || defined(OPENSSL_SYS_MSDOS)
312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(0);
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
315