summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/cast/castopts.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/cast/castopts.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/cast/castopts.c')
-rw-r--r--src/lib/libcrypto/cast/castopts.c358
1 files changed, 358 insertions, 0 deletions
diff --git a/src/lib/libcrypto/cast/castopts.c b/src/lib/libcrypto/cast/castopts.c
new file mode 100644
index 0000000000..68cf5a4a60
--- /dev/null
+++ b/src/lib/libcrypto/cast/castopts.c
@@ -0,0 +1,358 @@
1/* crypto/cast/castopts.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/* define PART1, PART2, PART3 or PART4 to build only with a few of the options.
60 * This is for machines with 64k code segment size restrictions. */
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 void 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 "cast.h"
101
102#define CAST_DEFAULT_OPTIONS
103
104#undef E_CAST
105#define CAST_encrypt CAST_encrypt_normal
106#define CAST_decrypt CAST_decrypt_normal
107#define CAST_cbc_encrypt CAST_cbc_encrypt_normal
108#undef HEADER_CAST_LOCL_H
109#include "c_enc.c"
110
111#define CAST_PTR
112#undef CAST_PTR2
113#undef E_CAST
114#undef CAST_encrypt
115#undef CAST_decrypt
116#undef CAST_cbc_encrypt
117#define CAST_encrypt CAST_encrypt_ptr
118#define CAST_decrypt CAST_decrypt_ptr
119#define CAST_cbc_encrypt CAST_cbc_encrypt_ptr
120#undef HEADER_CAST_LOCL_H
121#include "c_enc.c"
122
123#undef CAST_PTR
124#define CAST_PTR2
125#undef E_CAST
126#undef CAST_encrypt
127#undef CAST_decrypt
128#undef CAST_cbc_encrypt
129#define CAST_encrypt CAST_encrypt_ptr2
130#define CAST_decrypt CAST_decrypt_ptr2
131#define CAST_cbc_encrypt CAST_cbc_encrypt_ptr2
132#undef HEADER_CAST_LOCL_H
133#include "c_enc.c"
134
135/* The following if from times(3) man page. It may need to be changed */
136#ifndef HZ
137# ifndef CLK_TCK
138# ifndef _BSD_CLK_TCK_ /* FreeBSD fix */
139# ifndef VMS
140# define HZ 100.0
141# else /* VMS */
142# define HZ 100.0
143# endif
144# else /* _BSD_CLK_TCK_ */
145# define HZ ((double)_BSD_CLK_TCK_)
146# endif
147# else /* CLK_TCK */
148# define HZ ((double)CLK_TCK)
149# endif
150#endif
151
152#define BUFSIZE ((long)1024)
153long run=0;
154
155#ifndef NOPROTO
156double Time_F(int s);
157#else
158double Time_F();
159#endif
160
161#ifdef SIGALRM
162#if defined(__STDC__) || defined(sgi)
163#define SIGRETTYPE void
164#else
165#define SIGRETTYPE int
166#endif
167
168#ifndef NOPROTO
169SIGRETTYPE sig_done(int sig);
170#else
171SIGRETTYPE sig_done();
172#endif
173
174SIGRETTYPE sig_done(sig)
175int sig;
176 {
177 signal(SIGALRM,sig_done);
178 run=0;
179#ifdef LINT
180 sig=sig;
181#endif
182 }
183#endif
184
185#define START 0
186#define STOP 1
187
188double Time_F(s)
189int s;
190 {
191 double ret;
192#ifdef TIMES
193 static struct tms tstart,tend;
194
195 if (s == START)
196 {
197 times(&tstart);
198 return(0);
199 }
200 else
201 {
202 times(&tend);
203 ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
204 return((ret == 0.0)?1e-6:ret);
205 }
206#else /* !times() */
207 static struct timeb tstart,tend;
208 long i;
209
210 if (s == START)
211 {
212 ftime(&tstart);
213 return(0);
214 }
215 else
216 {
217 ftime(&tend);
218 i=(long)tend.millitm-(long)tstart.millitm;
219 ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
220 return((ret == 0.0)?1e-6:ret);
221 }
222#endif
223 }
224
225#ifdef SIGALRM
226#define print_name(name) fprintf(stderr,"Doing %s's for 10 seconds\n",name); alarm(10);
227#else
228#define print_name(name) fprintf(stderr,"Doing %s %ld times\n",name,cb);
229#endif
230
231#define time_it(func,name,index) \
232 print_name(name); \
233 Time_F(START); \
234 for (count=0,run=1; COND(cb); count+=4) \
235 { \
236 unsigned long d[2]; \
237 func(d,&sch); \
238 func(d,&sch); \
239 func(d,&sch); \
240 func(d,&sch); \
241 } \
242 tm[index]=Time_F(STOP); \
243 fprintf(stderr,"%ld %s's in %.2f second\n",count,name,tm[index]); \
244 tm[index]=((double)COUNT(cb))/tm[index];
245
246#define print_it(name,index) \
247 fprintf(stderr,"%s bytes per sec = %12.2f (%5.1fuS)\n",name, \
248 tm[index]*8,1.0e6/tm[index]);
249
250int main(argc,argv)
251int argc;
252char **argv;
253 {
254 long count;
255 static unsigned char buf[BUFSIZE];
256 static char key[16]={ 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
257 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
258 CAST_KEY sch;
259 double d,tm[16],max=0;
260 int rank[16];
261 char *str[16];
262 int max_idx=0,i,num=0,j;
263#ifndef SIGALARM
264 long ca,cb,cc,cd,ce;
265#endif
266
267 for (i=0; i<12; i++)
268 {
269 tm[i]=0.0;
270 rank[i]=0;
271 }
272
273#ifndef TIMES
274 fprintf(stderr,"To get the most acurate results, try to run this\n");
275 fprintf(stderr,"program when this computer is idle.\n");
276#endif
277
278 CAST_set_key(&sch,16,key);
279
280#ifndef SIGALRM
281 fprintf(stderr,"First we calculate the approximate speed ...\n");
282 count=10;
283 do {
284 long i;
285 unsigned long data[2];
286
287 count*=2;
288 Time_F(START);
289 for (i=count; i; i--)
290 CAST_encrypt(data,&sch);
291 d=Time_F(STOP);
292 } while (d < 3.0);
293 ca=count;
294 cb=count*3;
295 cc=count*3*8/BUFSIZE+1;
296 cd=count*8/BUFSIZE+1;
297
298 ce=count/20+1;
299#define COND(d) (count != (d))
300#define COUNT(d) (d)
301#else
302#define COND(c) (run)
303#define COUNT(d) (count)
304 signal(SIGALRM,sig_done);
305 alarm(10);
306#endif
307
308 time_it(CAST_encrypt_normal, "CAST_encrypt_normal ", 0);
309 time_it(CAST_encrypt_ptr, "CAST_encrypt_ptr ", 1);
310 time_it(CAST_encrypt_ptr2, "CAST_encrypt_ptr2 ", 2);
311 num+=3;
312
313 str[0]="<nothing>";
314 print_it("CAST_encrypt_normal ",0);
315 max=tm[0];
316 max_idx=0;
317 str[1]="ptr ";
318 print_it("CAST_encrypt_ptr ",1);
319 if (max < tm[1]) { max=tm[1]; max_idx=1; }
320 str[2]="ptr2 ";
321 print_it("CAST_encrypt_ptr2 ",2);
322 if (max < tm[2]) { max=tm[2]; max_idx=2; }
323
324 printf("options CAST ecb/s\n");
325 printf("%s %12.2f 100.0%%\n",str[max_idx],tm[max_idx]);
326 d=tm[max_idx];
327 tm[max_idx]= -2.0;
328 max= -1.0;
329 for (;;)
330 {
331 for (i=0; i<3; i++)
332 {
333 if (max < tm[i]) { max=tm[i]; j=i; }
334 }
335 if (max < 0.0) break;
336 printf("%s %12.2f %4.1f%%\n",str[j],tm[j],tm[j]/d*100.0);
337 tm[j]= -2.0;
338 max= -1.0;
339 }
340
341 switch (max_idx)
342 {
343 case 0:
344 printf("-DCAST_DEFAULT_OPTIONS\n");
345 break;
346 case 1:
347 printf("-DCAST_PTR\n");
348 break;
349 case 2:
350 printf("-DCAST_PTR2\n");
351 break;
352 }
353 exit(0);
354#if defined(LINT) || defined(MSDOS)
355 return(0);
356#endif
357 }
358