#include "api.h" #include "crypto_hash_sha512.h" #include "randombytes.h" #include "crypto_verify_32.h" #include "ge25519.h" int crypto_sign_keypair( unsigned char *pk, unsigned char *sk ) { sc25519 scsk; ge25519 gepk; randombytes_buf(sk, 32); crypto_hash_sha512(sk, sk, 32); sk[0] &= 248; sk[31] &= 127; sk[31] |= 64; sc25519_from32bytes(&scsk,sk); ge25519_scalarmult_base(&gepk, &scsk); ge25519_pack(pk, &gepk); return 0; } int crypto_sign( unsigned char *sm,unsigned long long *smlen_p, const unsigned char *m,unsigned long long mlen, const unsigned char *sk ) { sc25519 sck, scs, scsk; ge25519 ger; unsigned char r[32]; unsigned char s[32]; unsigned long long i; unsigned char hmg[crypto_hash_sha512_BYTES]; unsigned char hmr[crypto_hash_sha512_BYTES]; if (smlen_p != NULL) { *smlen_p = mlen+64; } for(i=0;i