plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

crttest.c (805B)


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