#include "os.h"
#include <mp.h>
#include <libsec.h>

/* find a prime p of length n and a generator alpha of Z^*_p */
/* Alg 4.86 Menezes et al () Handbook, p.164 */
void
gensafeprime(mpint *p, mpint *alpha, int n, int accuracy)
{
	mpint *q, *b;

	q = mpnew(n-1);
	while(1){
		genprime(q, n-1, accuracy);
		mpleft(q, 1, p);
		mpadd(p, mpone, p); /* p = 2*q+1 */
		if(probably_prime(p, accuracy))
			break;
	}
	/* now find a generator alpha of the multiplicative */
	/* group Z*_p of order p-1=2q */
	b = mpnew(0);
	while(1){
		mprand(n, genrandom, alpha);
		mpmod(alpha, p, alpha);
		mpmul(alpha, alpha, b);
		mpmod(b, p, b);
		if(mpcmp(b, mpone) == 0)
			continue;
		mpexp(alpha, q, p, b);
		if(mpcmp(b, mpone) != 0)
			break;
	}
	mpfree(b);
	mpfree(q);
}
