keypair.c 492 B

12345678910111213141516171819202122232425
  1. #include <string.h>
  2. #include "crypto_sign.h"
  3. #include "crypto_hash_sha512.h"
  4. #include "randombytes.h"
  5. #include "ge25519.h"
  6. int crypto_sign_keypair(unsigned char *pk,unsigned char *sk)
  7. {
  8. unsigned char az[64];
  9. sc25519 scsk;
  10. ge25519 gepk;
  11. randombytes(sk,32);
  12. crypto_hash_sha512(az,sk,32);
  13. az[0] &= 248;
  14. az[31] &= 127;
  15. az[31] |= 64;
  16. sc25519_from32bytes(&scsk,az);
  17. ge25519_scalarmult_base(&gepk, &scsk);
  18. ge25519_pack(pk, &gepk);
  19. memmove(sk + 32,pk,32);
  20. return 0;
  21. }