1*80ee5cbfSDavid du Colombier #include "os.h" 2*80ee5cbfSDavid du Colombier #include <mp.h> 3*80ee5cbfSDavid du Colombier #include <libsec.h> 4*80ee5cbfSDavid du Colombier 5*80ee5cbfSDavid du Colombier // generate a probable prime. accuracy is the miller-rabin interations 6*80ee5cbfSDavid du Colombier void genprime(mpint * p,int n,int accuracy)7*80ee5cbfSDavid du Colombiergenprime(mpint *p, int n, int accuracy) 8*80ee5cbfSDavid du Colombier { 9*80ee5cbfSDavid du Colombier mpdigit x; 10*80ee5cbfSDavid du Colombier 11*80ee5cbfSDavid du Colombier // generate n random bits with high and low bits set 12*80ee5cbfSDavid du Colombier mpbits(p, n); 13*80ee5cbfSDavid du Colombier genrandom((uchar*)p->p, (n+7)/8); 14*80ee5cbfSDavid du Colombier p->top = (n+Dbits-1)/Dbits; 15*80ee5cbfSDavid du Colombier x = 1; 16*80ee5cbfSDavid du Colombier x <<= ((n-1)%Dbits); 17*80ee5cbfSDavid du Colombier p->p[p->top-1] &= (x-1); 18*80ee5cbfSDavid du Colombier p->p[p->top-1] |= x; 19*80ee5cbfSDavid du Colombier p->p[0] |= 1; 20*80ee5cbfSDavid du Colombier 21*80ee5cbfSDavid du Colombier // keep icrementing till it looks prime 22*80ee5cbfSDavid du Colombier for(;;){ 23*80ee5cbfSDavid du Colombier if(probably_prime(p, accuracy)) 24*80ee5cbfSDavid du Colombier break; 25*80ee5cbfSDavid du Colombier mpadd(p, mptwo, p); 26*80ee5cbfSDavid du Colombier } 27*80ee5cbfSDavid du Colombier } 28