1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* unused */
2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* crypto/bn/bnspeed.c */
4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * All rights reserved.
6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
7c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This package is an SSL implementation written
8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * by Eric Young (eay@cryptsoft.com).
9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The implementation was written so as to conform with Netscapes SSL.
10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This library is free for commercial and non-commercial use as long as
12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the following conditions are aheared to.  The following conditions
13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * apply to all code found in this distribution, be it the RC4, RSA,
14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * included with this distribution is covered by the same copyright terms
16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * except that the holder is Tim Hudson (tjh@cryptsoft.com).
17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Copyright remains Eric Young's, and as such any Copyright notices in
19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the code are not to be removed.
20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * If this package is used in a product, Eric Young should be given attribution
21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * as the author of the parts of the library used.
22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This can be in the form of a textual message at program startup or
23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * in documentation (online or textual) provided with the package.
24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Redistribution and use in source and binary forms, with or without
26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * modification, are permitted provided that the following conditions
27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * are met:
28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 1. Redistributions of source code must retain the copyright
29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer.
30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 2. Redistributions in binary form must reproduce the above copyright
31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    notice, this list of conditions and the following disclaimer in the
32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    documentation and/or other materials provided with the distribution.
33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 3. All advertising materials mentioning features or use of this software
34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    must display the following acknowledgement:
35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes cryptographic software written by
36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *     Eric Young (eay@cryptsoft.com)"
37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    The word 'cryptographic' can be left out if the rouines from the library
38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    being used are not cryptographic related :-).
39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 4. If you include any Windows specific code (or a derivative thereof) from
40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    the apps directory (application code) you must include an acknowledgement:
41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * SUCH DAMAGE.
54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org *
55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * The licence and distribution terms for any publically available version or
56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * derivative of this code cannot be changed.  i.e. this code cannot simply be
57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * copied and put under another distribution licence
58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * [including the GNU Public Licence.]
59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */
60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* most of this code has been pilfered from my libdes speed.c program */
62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define BASENUM	1000000
64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef PROG
65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define PROG bnspeed_main
66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <stdio.h>
68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <stdlib.h>
69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <signal.h>
70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <string.h>
71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/crypto.h>
72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/err.h>
73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define TIMES
76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef _IRIX
79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <time.h>
80c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
81c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef TIMES
82c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sys/types.h>
83c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sys/times.h>
84c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
85c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
86c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Depending on the VMS version, the tms structure is perhaps defined.
87c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org   The __TMS macro will show if it was.  If it wasn't defined, we should
88c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org   undefine TIMES, since that tells the rest of the program how things
89c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org   should be handled.				-- Richard Levitte */
90c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
91c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef TIMES
92c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
93c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
94c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef TIMES
95c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sys/timeb.h>
96c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
97c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
98c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#if defined(sun) || defined(__ultrix)
99c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define _POSIX_SOURCE
100c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <limits.h>
101c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <sys/param.h>
102c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
103c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
104c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/bn.h>
105c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/x509.h>
106c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
107c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* The following if from times(3) man page.  It may need to be changed */
108c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifndef HZ
109c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# ifndef CLK_TCK
110c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  ifndef _BSD_CLK_TCK_ /* FreeBSD hack */
111c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#   define HZ	100.0
112c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  else /* _BSD_CLK_TCK_ */
113c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#   define HZ ((double)_BSD_CLK_TCK_)
114c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  endif
115c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# else /* CLK_TCK */
116c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#  define HZ ((double)CLK_TCK)
117c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org# endif
118c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
119c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
120c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#undef BUFSIZE
121c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define BUFSIZE	((long)1024*8)
122c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint run=0;
123c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
124c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic double Time_F(int s);
125c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define START	0
126c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define STOP	1
127c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
128c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic double Time_F(int s)
129c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
130c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	double ret;
131c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef TIMES
132c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	static struct tms tstart,tend;
133c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
134c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (s == START)
135c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
136c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		times(&tstart);
137c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		return(0);
138c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
139c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else
140c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
141c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		times(&tend);
142c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
143c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		return((ret < 1e-3)?1e-3:ret);
144c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
145c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#else /* !times() */
146c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	static struct timeb tstart,tend;
147c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	long i;
148c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
149c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	if (s == START)
150c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
151c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ftime(&tstart);
152c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		return(0);
153c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
154c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	else
155c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
156c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ftime(&tend);
157c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		i=(long)tend.millitm-(long)tstart.millitm;
158c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		ret=((double)(tend.time-tstart.time))+((double)i)/1000.0;
159c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		return((ret < 0.001)?0.001:ret);
160c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
161c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif
162c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
163c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
164c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#define NUM_SIZES	5
165c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic int sizes[NUM_SIZES]={128,256,512,1024,2048};
166c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/*static int sizes[NUM_SIZES]={59,179,299,419,539}; */
167c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
168c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid do_mul(BIGNUM *r,BIGNUM *a,BIGNUM *b,BN_CTX *ctx);
169c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
170c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgint main(int argc, char **argv)
171c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
172c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BN_CTX *ctx;
173c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BIGNUM a,b,c;
174c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
175c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	ctx=BN_CTX_new();
176c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BN_init(&a);
177c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BN_init(&b);
178c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	BN_init(&c);
179c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
180c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	do_mul(&a,&b,&c,ctx);
181c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
182c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
183c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid do_mul(BIGNUM *r, BIGNUM *a, BIGNUM *b, BN_CTX *ctx)
184c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	{
185c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	int i,j,k;
186c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	double tm;
187c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	long num;
188c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
189c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	for (i=0; i<NUM_SIZES; i++)
190c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
191c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		num=BASENUM;
192c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (i) num/=(i*3);
193c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BN_rand(a,sizes[i],1,0);
194c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		for (j=i; j<NUM_SIZES; j++)
195c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
196c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BN_rand(b,sizes[j],1,0);
197c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			Time_F(START);
198c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			for (k=0; k<num; k++)
199c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BN_mul(r,b,a,ctx);
200c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			tm=Time_F(STOP);
201c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			printf("mul %4d x %4d -> %8.3fms\n",sizes[i],sizes[j],tm*1000.0/num);
202c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
203c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
204c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
205c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	for (i=0; i<NUM_SIZES; i++)
206c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
207c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		num=BASENUM;
208c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (i) num/=(i*3);
209c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BN_rand(a,sizes[i],1,0);
210c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		Time_F(START);
211c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		for (k=0; k<num; k++)
212c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BN_sqr(r,a,ctx);
213c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		tm=Time_F(STOP);
214c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		printf("sqr %4d x %4d -> %8.3fms\n",sizes[i],sizes[i],tm*1000.0/num);
215c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
216c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
217c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	for (i=0; i<NUM_SIZES; i++)
218c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		{
219c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		num=BASENUM/10;
220c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		if (i) num/=(i*3);
221c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		BN_rand(a,sizes[i]-1,1,0);
222c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		for (j=i; j<NUM_SIZES; j++)
223c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			{
224c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			BN_rand(b,sizes[j],1,0);
225c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			Time_F(START);
226c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			for (k=0; k<100000; k++)
227c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org				BN_div(r, NULL, b, a,ctx);
228c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			tm=Time_F(STOP);
229c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			printf("div %4d / %4d -> %8.3fms\n",sizes[j],sizes[i]-1,tm*1000.0/num);
230c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org			}
231c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org		}
232c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org	}
233c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org
234