| #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); |
| } |