summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/speed.c
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:15 +0000
committerryker <>1998-10-05 20:13:15 +0000
commit536c76cbb863bab152f19842ab88772c01e922c7 (patch)
treedfecec371a097b73d605aae665887946d9982219 /src/lib/libcrypto/des/speed.c
downloadopenbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.gz
openbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.bz2
openbsd-536c76cbb863bab152f19842ab88772c01e922c7.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/des/speed.c')
-rw-r--r--src/lib/libcrypto/des/speed.c329
1 files changed, 329 insertions, 0 deletions
diff --git a/src/lib/libcrypto/des/speed.c b/src/lib/libcrypto/des/speed.c
new file mode 100644
index 0000000000..5bbe8b01d6
--- /dev/null
+++ b/src/lib/libcrypto/des/speed.c
@@ -0,0 +1,329 @@
1/* crypto/des/speed.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * 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/* 11-Sep-92 Andrew Daviel Support for Silicon Graphics IRIX added */
60/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
61
62#ifndef MSDOS
63#define TIMES
64#endif
65
66#include <stdio.h>
67#ifndef MSDOS
68#include <unistd.h>
69#else
70#include <io.h>
71extern int exit();
72#endif
73#include <signal.h>
74#ifndef VMS
75#ifndef _IRIX
76#include <time.h>
77#endif
78#ifdef TIMES
79#include <sys/types.h>
80#include <sys/times.h>
81#endif
82#else /* VMS */
83#include <types.h>
84struct tms {
85 time_t tms_utime;
86 time_t tms_stime;
87 time_t tms_uchild; /* I dunno... */
88 time_t tms_uchildsys; /* so these names are a guess :-) */
89 }
90#endif
91#ifndef TIMES
92#include <sys/timeb.h>
93#endif
94
95#ifdef sun
96#include <limits.h>
97#include <sys/param.h>
98#endif
99
100#include "des.h"
101
102/* The following if from times(3) man page. It may need to be changed */
103#ifndef HZ
104# ifndef CLK_TCK
105# ifndef _BSD_CLK_TCK_ /* FreeBSD fix */
106# ifndef VMS
107# define HZ 100.0
108# else /* VMS */
109# define HZ 100.0
110# endif
111# else /* _BSD_CLK_TCK_ */
112# define HZ ((double)_BSD_CLK_TCK_)
113# endif
114# else /* CLK_TCK */
115# define HZ ((double)CLK_TCK)
116# endif
117#endif
118
119#define BUFSIZE ((long)1024)
120long run=0;
121
122#ifndef NOPROTO
123double Time_F(int s);
124#else
125double Time_F();
126#endif
127
128#ifdef SIGALRM
129#if defined(__STDC__) || defined(sgi) || defined(_AIX)
130#define SIGRETTYPE void
131#else
132#define SIGRETTYPE int
133#endif
134
135#ifndef NOPROTO
136SIGRETTYPE sig_done(int sig);
137#else
138SIGRETTYPE sig_done();
139#endif
140
141SIGRETTYPE sig_done(sig)
142int sig;
143 {
144 signal(SIGALRM,sig_done);
145 run=0;
146#ifdef LINT
147 sig=sig;
148#endif
149 }
150#endif
151
152#define START 0
153#define STOP 1
154
155double Time_F(s)
156int s;
157 {
158 double ret;
159#ifdef TIMES
160 static struct tms tstart,tend;
161
162 if (s == START)
163 {
164 times(&tstart);
165 return(0);
166 }
167 else
168 {
169 times(&tend);
170 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
171 return((ret == 0.0)?1e-6:ret);
172 }
173#else /* !times() */
174 static struct timeb tstart,tend;
175 long i;
176
177 if (s == START)
178 {
179 ftime(&tstart);
180 return(0);
181 }
182 else
183 {
184 ftime(&tend);
185 i=(long)tend.millitm-(long)tstart.millitm;
186 ret=((double)(tend.time-tstart.time))+((double)i)/1e3;
187 return((ret == 0.0)?1e-6:ret);
188 }
189#endif
190 }
191
192int main(argc,argv)
193int argc;
194char **argv;
195 {
196 long count;
197 static unsigned char buf[BUFSIZE];
198 static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
199 static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12};
200 static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34};
201 des_key_schedule sch,sch2,sch3;
202 double a,b,c,d,e;
203#ifndef SIGALRM
204 long ca,cb,cc,cd,ce;
205#endif
206
207#ifndef TIMES
208 printf("To get the most acurate results, try to run this\n");
209 printf("program when this computer is idle.\n");
210#endif
211
212 des_set_key((C_Block *)key2,sch2);
213 des_set_key((C_Block *)key3,sch3);
214
215#ifndef SIGALRM
216 printf("First we calculate the approximate speed ...\n");
217 des_set_key((C_Block *)key,sch);
218 count=10;
219 do {
220 long i;
221 DES_LONG data[2];
222
223 count*=2;
224 Time_F(START);
225 for (i=count; i; i--)
226 des_encrypt(data,&(sch[0]),DES_ENCRYPT);
227 d=Time_F(STOP);
228 } while (d < 3.0);
229 ca=count;
230 cb=count*3;
231 cc=count*3*8/BUFSIZE+1;
232 cd=count*8/BUFSIZE+1;
233 ce=count/20+1;
234 printf("Doing set_key %ld times\n",ca);
235#define COND(d) (count != (d))
236#define COUNT(d) (d)
237#else
238#define COND(c) (run)
239#define COUNT(d) (count)
240 signal(SIGALRM,sig_done);
241 printf("Doing set_key for 10 seconds\n");
242 alarm(10);
243#endif
244
245 Time_F(START);
246 for (count=0,run=1; COND(ca); count++)
247 des_set_key((C_Block *)key,sch);
248 d=Time_F(STOP);
249 printf("%ld set_key's in %.2f seconds\n",count,d);
250 a=((double)COUNT(ca))/d;
251
252#ifdef SIGALRM
253 printf("Doing des_encrypt's for 10 seconds\n");
254 alarm(10);
255#else
256 printf("Doing des_encrypt %ld times\n",cb);
257#endif
258 Time_F(START);
259 for (count=0,run=1; COND(cb); count++)
260 {
261 DES_LONG data[2];
262
263 des_encrypt(data,&(sch[0]),DES_ENCRYPT);
264 }
265 d=Time_F(STOP);
266 printf("%ld des_encrypt's in %.2f second\n",count,d);
267 b=((double)COUNT(cb)*8)/d;
268
269#ifdef SIGALRM
270 printf("Doing des_cbc_encrypt on %ld byte blocks for 10 seconds\n",
271 BUFSIZE);
272 alarm(10);
273#else
274 printf("Doing des_cbc_encrypt %ld times on %ld byte blocks\n",cc,
275 BUFSIZE);
276#endif
277 Time_F(START);
278 for (count=0,run=1; COND(cc); count++)
279 des_ncbc_encrypt((C_Block *)buf,(C_Block *)buf,BUFSIZE,&(sch[0]),
280 (C_Block *)&(key[0]),DES_ENCRYPT);
281 d=Time_F(STOP);
282 printf("%ld des_cbc_encrypt's of %ld byte blocks in %.2f second\n",
283 count,BUFSIZE,d);
284 c=((double)COUNT(cc)*BUFSIZE)/d;
285
286#ifdef SIGALRM
287 printf("Doing des_ede_cbc_encrypt on %ld byte blocks for 10 seconds\n",
288 BUFSIZE);
289 alarm(10);
290#else
291 printf("Doing des_ede_cbc_encrypt %ld times on %ld byte blocks\n",cd,
292 BUFSIZE);
293#endif
294 Time_F(START);
295 for (count=0,run=1; COND(cd); count++)
296 des_ede3_cbc_encrypt((C_Block *)buf,(C_Block *)buf,BUFSIZE,
297 &(sch[0]),
298 &(sch2[0]),
299 &(sch3[0]),
300 (C_Block *)&(key[0]),
301 DES_ENCRYPT);
302 d=Time_F(STOP);
303 printf("%ld des_ede_cbc_encrypt's of %ld byte blocks in %.2f second\n",
304 count,BUFSIZE,d);
305 d=((double)COUNT(cd)*BUFSIZE)/d;
306
307#ifdef SIGALRM
308 printf("Doing crypt for 10 seconds\n");
309 alarm(10);
310#else
311 printf("Doing crypt %ld times\n",ce);
312#endif
313 Time_F(START);
314 for (count=0,run=1; COND(ce); count++)
315 crypt("testing1","ef");
316 e=Time_F(STOP);
317 printf("%ld crypts in %.2f second\n",count,e);
318 e=((double)COUNT(ce))/e;
319
320 printf("set_key per sec = %12.2f (%9.3fuS)\n",a,1.0e6/a);
321 printf("DES raw ecb bytes per sec = %12.2f (%9.3fuS)\n",b,8.0e6/b);
322 printf("DES cbc bytes per sec = %12.2f (%9.3fuS)\n",c,8.0e6/c);
323 printf("DES ede cbc bytes per sec = %12.2f (%9.3fuS)\n",d,8.0e6/d);
324 printf("crypt per sec = %12.2f (%9.3fuS)\n",e,1.0e6/e);
325 exit(0);
326#if defined(LINT) || defined(MSDOS)
327 return(0);
328#endif
329 }