diff options
Diffstat (limited to 'src/ext/ed25519/ref10/sign.c')
-rw-r--r-- | src/ext/ed25519/ref10/sign.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/ext/ed25519/ref10/sign.c b/src/ext/ed25519/ref10/sign.c new file mode 100644 index 0000000000..e37b0d192d --- /dev/null +++ b/src/ext/ed25519/ref10/sign.c @@ -0,0 +1,29 @@ +/* (Modified by Tor to generate detached signatures.) */ +#include <string.h> +#include "crypto_sign.h" +#include "crypto_hash_sha512.h" +#include "ge.h" +#include "sc.h" + +int crypto_sign( + unsigned char *sig, + const unsigned char *m,uint64_t mlen, + const unsigned char *sk,const unsigned char *pk +) +{ + unsigned char nonce[64]; + unsigned char hram[64]; + ge_p3 R; + + crypto_hash_sha512_2(nonce, sk+32, 32, m, mlen); + + sc_reduce(nonce); + ge_scalarmult_base(&R,nonce); + ge_p3_tobytes(sig,&R); + + crypto_hash_sha512_3(hram, sig, 32, pk, 32, m, mlen); + sc_reduce(hram); + sc_muladd(sig + 32,hram,sk,nonce); + + return 0; +} |