| #include "os.h" |
| #include <mp.h> |
| #include <libsec.h> |
| |
| /* generate a probable prime. accuracy is the miller-rabin interations */ |
| void |
| genprime(mpint *p, int n, int accuracy) |
| { |
| mpdigit x; |
| |
| /* generate n random bits with high and low bits set */ |
| mpbits(p, n); |
| genrandom((uchar*)p->p, (n+7)/8); |
| p->top = (n+Dbits-1)/Dbits; |
| x = 1; |
| x <<= ((n-1)%Dbits); |
| p->p[p->top-1] &= (x-1); |
| p->p[p->top-1] |= x; |
| p->p[0] |= 1; |
| |
| /* keep icrementing till it looks prime */ |
| for(;;){ |
| if(probably_prime(p, accuracy)) |
| break; |
| mpadd(p, mptwo, p); |
| } |
| } |