sign.c 565 B

12345678910111213141516171819202122232425262728
  1. #include <string.h>
  2. #include "crypto_sign.h"
  3. #include "crypto_hash_sha512.h"
  4. #include "ge.h"
  5. #include "sc.h"
  6. int crypto_sign(
  7. unsigned char *sig,
  8. const unsigned char *m,uint64_t mlen,
  9. const unsigned char *sk,const unsigned char *pk
  10. )
  11. {
  12. unsigned char nonce[64];
  13. unsigned char hram[64];
  14. ge_p3 R;
  15. crypto_hash_sha512_2(nonce, sk+32, 32, m, mlen);
  16. sc_reduce(nonce);
  17. ge_scalarmult_base(&R,nonce);
  18. ge_p3_tobytes(sig,&R);
  19. crypto_hash_sha512_3(hram, sig, 32, pk, 32, m, mlen);
  20. sc_reduce(hram);
  21. sc_muladd(sig + 32,hram,sk,nonce);
  22. return 0;
  23. }