From 315caaba7e83eb6680a0407ea13e04b5f7739788 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Tue, 3 Mar 2015 11:18:07 +0000 Subject: Add functions for signing and verifying messages using curve25519 keys --- lib/ed25519_additions.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 lib/ed25519_additions.c (limited to 'lib/ed25519_additions.c') diff --git a/lib/ed25519_additions.c b/lib/ed25519_additions.c new file mode 100644 index 0000000..5fa0c68 --- /dev/null +++ b/lib/ed25519_additions.c @@ -0,0 +1,43 @@ +void convert_curve25519_to_ed25519( + unsigned char * public_key, + unsigned char * signature +) { + fe mont_x, mont_x_minus_one, mont_x_plus_one, inv_mont_x_plus_one; + fe one; + fe ed_y; + + fe_frombytes(mont_x, public_key); + fe_1(one); + fe_sub(mont_x_minus_one, mont_x, one); + fe_add(mont_x_plus_one, mont_x, one); + fe_invert(inv_mont_x_plus_one, mont_x_plus_one); + fe_mul(ed_y, mont_x_minus_one, inv_mont_x_plus_one); + fe_tobytes(public_key, ed_y); + + public_key[31] &= 0x7F; + public_key[31] |= (signature[63] & 0x80); + signature[63] &= 0x7F; +} + + +void convert_ed25519_to_curve25519( + unsigned char const * public_key, + unsigned char * signature +) { + unsigned char sign_bit = public_key[31] & 0x80; + signature[63] &= 0x7F; + signature[63] |= sign_bit; +} + + +void ed25519_keypair( + unsigned char * private_key, + unsigned char * public_key +) { + ge_p3 A; + private_key[0] &= 248; + private_key[31] &= 63; + private_key[31] |= 64; + ge_scalarmult_base(&A, private_key); + ge_p3_tobytes(public_key, &A); +} -- cgit v1.2.3