eggen.c 825 B

123456789101112131415161718192021222324252627282930
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. #include "os.h"
  10. #include <mp.h>
  11. #include <libsec.h>
  12. EGpriv*
  13. eggen(int nlen, int rounds)
  14. {
  15. EGpub *pub;
  16. EGpriv *priv;
  17. priv = egprivalloc();
  18. pub = &priv->pub;
  19. pub->p = mpnew(0);
  20. pub->alpha = mpnew(0);
  21. pub->key = mpnew(0);
  22. priv->secret = mpnew(0);
  23. gensafeprime(pub->p, pub->alpha, nlen, rounds);
  24. mprand(nlen-1, genrandom, priv->secret);
  25. mpexp(pub->alpha, priv->secret, pub->p, pub->key);
  26. return priv;
  27. }