159191Skris/* unused */
259191Skris
355714Skris#include <stdio.h>
455714Skris#include <openssl/tmdiff.h>
555714Skris#include "bn_lcl.h"
655714Skris
7280304Sjkim#define SIZE    256
8280304Sjkim#define NUM     (8*8*8)
9280304Sjkim#define MOD     (8*8*8*8*8)
1055714Skris
11280304Sjkimmain(argc, argv)
1255714Skrisint argc;
1355714Skrischar *argv[];
14280304Sjkim{
15280304Sjkim    BN_CTX ctx;
16280304Sjkim    BIGNUM a, b, c, r, rr, t, l;
17280304Sjkim    int j, i, size = SIZE, num = NUM, mod = MOD;
18280304Sjkim    char *start, *end;
19280304Sjkim    BN_MONT_CTX mont;
20280304Sjkim    double d, md;
2155714Skris
22280304Sjkim    BN_MONT_CTX_init(&mont);
23280304Sjkim    BN_CTX_init(&ctx);
24280304Sjkim    BN_init(&a);
25280304Sjkim    BN_init(&b);
26280304Sjkim    BN_init(&c);
27280304Sjkim    BN_init(&r);
2855714Skris
29280304Sjkim    start = ms_time_new();
30280304Sjkim    end = ms_time_new();
31280304Sjkim    while (size <= 1024 * 8) {
32280304Sjkim        BN_rand(&a, size, 0, 0);
33280304Sjkim        BN_rand(&b, size, 1, 0);
34280304Sjkim        BN_rand(&c, size, 0, 1);
3555714Skris
36280304Sjkim        BN_mod(&a, &a, &c, &ctx);
3755714Skris
38280304Sjkim        ms_time_get(start);
39280304Sjkim        for (i = 0; i < 10; i++)
40280304Sjkim            BN_MONT_CTX_set(&mont, &c, &ctx);
41280304Sjkim        ms_time_get(end);
42280304Sjkim        md = ms_time_diff(start, end);
4355714Skris
44280304Sjkim        ms_time_get(start);
45280304Sjkim        for (i = 0; i < num; i++) {
46280304Sjkim            /* bn_mull(&r,&a,&b,&ctx); */
47280304Sjkim            /* BN_sqr(&r,&a,&ctx); */
48280304Sjkim            BN_mod_exp_mont(&r, &a, &b, &c, &ctx, &mont);
49280304Sjkim        }
50280304Sjkim        ms_time_get(end);
51280304Sjkim        d = ms_time_diff(start, end) /* *50/33 */ ;
52280304Sjkim        printf("%5d bit:%6.2f %6d %6.4f %4d m_set(%5.4f)\n", size,
53280304Sjkim               d, num, d / num, (int)((d / num) * mod), md / 10.0);
54280304Sjkim        num /= 8;
55280304Sjkim        mod /= 8;
56280304Sjkim        if (num <= 0)
57280304Sjkim            num = 1;
58280304Sjkim        size *= 2;
59280304Sjkim    }
6055714Skris
61280304Sjkim}
62