exp.c revision 259065
1249259Sdim/* unused */
2249259Sdim
3249259Sdim#include <stdio.h>
4249259Sdim#include <openssl/tmdiff.h>
5249259Sdim#include "bn_lcl.h"
6249259Sdim
7249259Sdim#define SIZE	256
8249259Sdim#define NUM	(8*8*8)
9249259Sdim#define MOD	(8*8*8*8*8)
10249259Sdim
11249259Sdimmain(argc,argv)
12249259Sdimint argc;
13249259Sdimchar *argv[];
14249259Sdim	{
15249259Sdim	BN_CTX ctx;
16249259Sdim	BIGNUM a,b,c,r,rr,t,l;
17327952Sdim	int j,i,size=SIZE,num=NUM,mod=MOD;
18327952Sdim	char *start,*end;
19276479Sdim	BN_MONT_CTX mont;
20276479Sdim	double d,md;
21327952Sdim
22276479Sdim	BN_MONT_CTX_init(&mont);
23309124Sdim	BN_CTX_init(&ctx);
24309124Sdim	BN_init(&a);
25327952Sdim	BN_init(&b);
26249259Sdim	BN_init(&c);
27327952Sdim	BN_init(&r);
28327952Sdim
29249259Sdim	start=ms_time_new();
30249259Sdim	end=ms_time_new();
31327952Sdim	while (size <= 1024*8)
32327952Sdim		{
33249259Sdim		BN_rand(&a,size,0,0);
34249259Sdim		BN_rand(&b,size,1,0);
35276479Sdim		BN_rand(&c,size,0,1);
36276479Sdim
37249259Sdim		BN_mod(&a,&a,&c,&ctx);
38249259Sdim
39249259Sdim		ms_time_get(start);
40249259Sdim		for (i=0; i<10; i++)
41249259Sdim			BN_MONT_CTX_set(&mont,&c,&ctx);
42249259Sdim		ms_time_get(end);
43249259Sdim		md=ms_time_diff(start,end);
44249259Sdim
45249259Sdim		ms_time_get(start);
46249259Sdim		for (i=0; i<num; i++)
47327952Sdim			{
48249259Sdim			/* bn_mull(&r,&a,&b,&ctx); */
49327952Sdim			/* BN_sqr(&r,&a,&ctx); */
50249259Sdim			BN_mod_exp_mont(&r,&a,&b,&c,&ctx,&mont);
51327952Sdim			}
52249259Sdim		ms_time_get(end);
53249259Sdim		d=ms_time_diff(start,end)/* *50/33 */;
54249259Sdim		printf("%5d bit:%6.2f %6d %6.4f %4d m_set(%5.4f)\n",size,
55249259Sdim			d,num,d/num,(int)((d/num)*mod),md/10.0);
56249259Sdim		num/=8;
57249259Sdim		mod/=8;
58309124Sdim		if (num <= 0) num=1;
59309124Sdim		size*=2;
60309124Sdim		}
61309124Sdim
62249259Sdim	}
63276479Sdim