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