xref: /plan9/sys/src/libsec/port/eggen.c (revision 3ff48bf5ed603850fcd251ddf13025d23d693782)
180ee5cbfSDavid du Colombier #include "os.h"
280ee5cbfSDavid du Colombier #include <mp.h>
380ee5cbfSDavid du Colombier #include <libsec.h>
480ee5cbfSDavid du Colombier 
580ee5cbfSDavid du Colombier EGpriv*
eggen(int nlen,int rounds)680ee5cbfSDavid du Colombier eggen(int nlen, int rounds)
780ee5cbfSDavid du Colombier {
880ee5cbfSDavid du Colombier 	EGpub *pub;
980ee5cbfSDavid du Colombier 	EGpriv *priv;
1080ee5cbfSDavid du Colombier 
1180ee5cbfSDavid du Colombier 	priv = egprivalloc();
1280ee5cbfSDavid du Colombier 	pub = &priv->pub;
1380ee5cbfSDavid du Colombier 	pub->p = mpnew(0);
1480ee5cbfSDavid du Colombier 	pub->alpha = mpnew(0);
1580ee5cbfSDavid du Colombier 	pub->key = mpnew(0);
1680ee5cbfSDavid du Colombier 	priv->secret = mpnew(0);
1780ee5cbfSDavid du Colombier 	gensafeprime(pub->p, pub->alpha, nlen, rounds);
18*3ff48bf5SDavid du Colombier 	mprand(nlen-1, genrandom, priv->secret);
1980ee5cbfSDavid du Colombier 	mpexp(pub->alpha, priv->secret, pub->p, pub->key);
2080ee5cbfSDavid du Colombier 	return priv;
2180ee5cbfSDavid du Colombier }
22