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