Blame


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