1*8ccd4a63SDavid du Colombier #include "os.h"
2*8ccd4a63SDavid du Colombier #include <mp.h>
3*8ccd4a63SDavid du Colombier #include <libsec.h>
4*8ccd4a63SDavid du Colombier
5*8ccd4a63SDavid du Colombier void
testcrt(mpint ** p)6*8ccd4a63SDavid du Colombier testcrt(mpint **p)
7*8ccd4a63SDavid du Colombier {
8*8ccd4a63SDavid du Colombier CRTpre *crt;
9*8ccd4a63SDavid du Colombier CRTres *res;
10*8ccd4a63SDavid du Colombier mpint *m, *x, *y;
11*8ccd4a63SDavid du Colombier int i;
12*8ccd4a63SDavid du Colombier
13*8ccd4a63SDavid du Colombier fmtinstall('B', mpconv);
14*8ccd4a63SDavid du Colombier
15*8ccd4a63SDavid du Colombier // get a modulus and a test number
16*8ccd4a63SDavid du Colombier m = mpnew(1024+160);
17*8ccd4a63SDavid du Colombier mpmul(p[0], p[1], m);
18*8ccd4a63SDavid du Colombier x = mpnew(1024+160);
19*8ccd4a63SDavid du Colombier mpadd(m, mpone, x);
20*8ccd4a63SDavid du Colombier
21*8ccd4a63SDavid du Colombier // do the precomputation for crt conversion
22*8ccd4a63SDavid du Colombier crt = crtpre(2, p);
23*8ccd4a63SDavid du Colombier
24*8ccd4a63SDavid du Colombier // convert x to residues
25*8ccd4a63SDavid du Colombier res = crtin(crt, x);
26*8ccd4a63SDavid du Colombier
27*8ccd4a63SDavid du Colombier // convert back
28*8ccd4a63SDavid du Colombier y = mpnew(1024+160);
29*8ccd4a63SDavid du Colombier crtout(crt, res, y);
30*8ccd4a63SDavid du Colombier print("x %B\ny %B\n", x, y);
31*8ccd4a63SDavid du Colombier mpfree(m);
32*8ccd4a63SDavid du Colombier mpfree(x);
33*8ccd4a63SDavid du Colombier mpfree(y);
34*8ccd4a63SDavid du Colombier }
35*8ccd4a63SDavid du Colombier
36*8ccd4a63SDavid du Colombier void
main(void)37*8ccd4a63SDavid du Colombier main(void)
38*8ccd4a63SDavid du Colombier {
39*8ccd4a63SDavid du Colombier int i;
40*8ccd4a63SDavid du Colombier mpint *p[2];
41*8ccd4a63SDavid du Colombier long start;
42*8ccd4a63SDavid du Colombier
43*8ccd4a63SDavid du Colombier start = time(0);
44*8ccd4a63SDavid du Colombier for(i = 0; i < 10; i++){
45*8ccd4a63SDavid du Colombier p[0] = mpnew(1024);
46*8ccd4a63SDavid du Colombier p[1] = mpnew(1024);
47*8ccd4a63SDavid du Colombier DSAprimes(p[0], p[1], nil);
48*8ccd4a63SDavid du Colombier testcrt(p);
49*8ccd4a63SDavid du Colombier mpfree(p[0]);
50*8ccd4a63SDavid du Colombier mpfree(p[1]);
51*8ccd4a63SDavid du Colombier }
52*8ccd4a63SDavid du Colombier print("%d secs with more\n", time(0)-start);
53*8ccd4a63SDavid du Colombier exits(0);
54*8ccd4a63SDavid du Colombier }
55