xref: /plan9/sys/src/cmd/unix/drawterm/libsec/eggen.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
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 EGpriv*
eggen(int nlen,int rounds)6*8ccd4a63SDavid du Colombier eggen(int nlen, int rounds)
7*8ccd4a63SDavid du Colombier {
8*8ccd4a63SDavid du Colombier 	EGpub *pub;
9*8ccd4a63SDavid du Colombier 	EGpriv *priv;
10*8ccd4a63SDavid du Colombier 
11*8ccd4a63SDavid du Colombier 	priv = egprivalloc();
12*8ccd4a63SDavid du Colombier 	pub = &priv->pub;
13*8ccd4a63SDavid du Colombier 	pub->p = mpnew(0);
14*8ccd4a63SDavid du Colombier 	pub->alpha = mpnew(0);
15*8ccd4a63SDavid du Colombier 	pub->key = mpnew(0);
16*8ccd4a63SDavid du Colombier 	priv->secret = mpnew(0);
17*8ccd4a63SDavid du Colombier 	gensafeprime(pub->p, pub->alpha, nlen, rounds);
18*8ccd4a63SDavid du Colombier 	mprand(nlen-1, genrandom, priv->secret);
19*8ccd4a63SDavid du Colombier 	mpexp(pub->alpha, priv->secret, pub->p, pub->key);
20*8ccd4a63SDavid du Colombier 	return priv;
21*8ccd4a63SDavid du Colombier }
22