eggen.c 413 B

123456789101112131415161718192021
  1. #include "os.h"
  2. #include <mp.h>
  3. #include <libsec.h>
  4. EGpriv*
  5. eggen(int nlen, int rounds)
  6. {
  7. EGpub *pub;
  8. EGpriv *priv;
  9. priv = egprivalloc();
  10. pub = &priv->pub;
  11. pub->p = mpnew(0);
  12. pub->alpha = mpnew(0);
  13. pub->key = mpnew(0);
  14. priv->secret = mpnew(0);
  15. gensafeprime(pub->p, pub->alpha, nlen, rounds);
  16. mprand(nlen-1, genrandom, priv->secret);
  17. mpexp(pub->alpha, priv->secret, pub->p, pub->key);
  18. return priv;
  19. }