|  | #include "os.h" | 
|  | #include <mp.h> | 
|  |  | 
|  | void | 
|  | testcrt(mpint **p) | 
|  | { | 
|  | CRTpre *crt; | 
|  | CRTres *res; | 
|  | mpint *m, *x, *y; | 
|  | int i; | 
|  |  | 
|  | fmtinstall('B', mpconv); | 
|  |  | 
|  | /* get a modulus and a test number */ | 
|  | m = mpnew(1024+160); | 
|  | mpmul(p[0], p[1], m); | 
|  | x = mpnew(1024+160); | 
|  | mpadd(m, mpone, x); | 
|  |  | 
|  | /* do the precomputation for crt conversion */ | 
|  | crt = crtpre(2, p); | 
|  |  | 
|  | /* convert x to residues */ | 
|  | res = crtin(crt, x); | 
|  |  | 
|  | /* convert back */ | 
|  | y = mpnew(1024+160); | 
|  | crtout(crt, res, y); | 
|  | print("x %B\ny %B\n", x, y); | 
|  | mpfree(m); | 
|  | mpfree(x); | 
|  | mpfree(y); | 
|  | } | 
|  |  | 
|  | void | 
|  | main(void) | 
|  | { | 
|  | int i; | 
|  | mpint *p[2]; | 
|  | long start; | 
|  |  | 
|  | start = time(0); | 
|  | for(i = 0; i < 10; i++){ | 
|  | p[0] = mpnew(1024); | 
|  | p[1] = mpnew(1024); | 
|  | DSAprimes(p[0], p[1], nil); | 
|  | testcrt(p); | 
|  | mpfree(p[0]); | 
|  | mpfree(p[1]); | 
|  | } | 
|  | print("%d secs with more\n", time(0)-start); | 
|  | exits(0); | 
|  | } |