1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* unused */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/bn/bnspeed.c */
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved.
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com).
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL.
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to.  The following conditions
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA,
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com).
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package.
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met:
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer.
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    documentation and/or other materials provided with the distribution.
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    must display the following acknowledgement:
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes cryptographic software written by
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *     Eric Young (eay@cryptsoft.com)"
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    The word 'cryptographic' can be left out if the rouines from the library
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    being used are not cryptographic related :-).
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    the apps directory (application code) you must include an acknowledgement:
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE.
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed.  i.e. this code cannot simply be
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.]
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* most of this code has been pilfered from my libdes speed.c program */
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define BASENUM	1000000
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef PROG
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PROG bnspeed_main
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <signal.h>
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h>
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/crypto.h>
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/err.h>
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define TIMES
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef _IRIX
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <time.h>
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef TIMES
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/types.h>
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/times.h>
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Depending on the VMS version, the tms structure is perhaps defined.
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   The __TMS macro will show if it was.  If it wasn't defined, we should
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   undefine TIMES, since that tells the rest of the program how things
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project   should be handled.				-- Richard Levitte */
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef TIMES
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef TIMES
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/timeb.h>
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(sun) || defined(__ultrix)
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define _POSIX_SOURCE
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <limits.h>
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <sys/param.h>
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/bn.h>
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/x509.h>
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following if from times(3) man page.  It may need to be changed */
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef HZ
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ifndef CLK_TCK
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#   define HZ	100.0
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  else /* _BSD_CLK_TCK_ */
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#   define HZ ((double)_BSD_CLK_TCK_)
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  endif
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# else /* CLK_TCK */
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#  define HZ ((double)CLK_TCK)
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# endif
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef BUFSIZE
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define BUFSIZE	((long)1024*8)
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint run=0;
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic double Time_F(int s);
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define START	0
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define STOP	1
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic double Time_F(int s)
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	double ret;
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef TIMES
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static struct tms tstart,tend;
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (s == START)
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		times(&tstart);
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(0);
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		times(&tend);
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return((ret < 1e-3)?1e-3:ret);
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* !times() */
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	static struct timeb tstart,tend;
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long i;
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (s == START)
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ftime(&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		ftime(&tend);
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		i=(long)tend.millitm-(long)tstart.millitm;
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return((ret < 0.001)?0.001:ret);
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define NUM_SIZES	5
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int sizes[NUM_SIZES]={128,256,512,1024,2048};
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*static int sizes[NUM_SIZES]={59,179,299,419,539}; */
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid do_mul(BIGNUM *r,BIGNUM *a,BIGNUM *b,BN_CTX *ctx);
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint main(int argc, char **argv)
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_CTX *ctx;
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BIGNUM a,b,c;
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ctx=BN_CTX_new();
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_init(&a);
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_init(&b);
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	BN_init(&c);
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	do_mul(&a,&b,&c,ctx);
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid do_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx)
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int i,j,k;
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	double tm;
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	long num;
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<NUM_SIZES; i++)
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		num=BASENUM;
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (i) num/=(i*3);
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BN_rand(a,sizes[i],1,0);
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		for (j=i; j<NUM_SIZES; j++)
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			BN_rand(b,sizes[j],1,0);
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			Time_F(START);
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			for (k=0; k<num; k++)
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				BN_mul(r,b,a,ctx);
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			tm=Time_F(STOP);
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			printf("mul %4d x %4d -> %8.3fms\n",sizes[i],sizes[j],tm*1000.0/num);
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			}
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<NUM_SIZES; i++)
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		num=BASENUM;
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (i) num/=(i*3);
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BN_rand(a,sizes[i],1,0);
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		Time_F(START);
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		for (k=0; k<num; k++)
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			BN_sqr(r,a,ctx);
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		tm=Time_F(STOP);
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		printf("sqr %4d x %4d -> %8.3fms\n",sizes[i],sizes[i],tm*1000.0/num);
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for (i=0; i<NUM_SIZES; i++)
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		num=BASENUM/10;
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (i) num/=(i*3);
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		BN_rand(a,sizes[i]-1,1,0);
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		for (j=i; j<NUM_SIZES; j++)
223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{
224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			BN_rand(b,sizes[j],1,0);
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			Time_F(START);
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			for (k=0; k<100000; k++)
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project				BN_div(r, NULL, b, a,ctx);
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			tm=Time_F(STOP);
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			printf("div %4d / %4d -> %8.3fms\n",sizes[j],sizes[i]-1,tm*1000.0/num);
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			}
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
234