Erlang port program for ed25519 sign and verify from libsodium.
This is a very simple implementation using a port program to access the libsodium functionality. Other, more integrated implementations with full functionality are available (enacl or salt).
First of all, install libsodium as described here.
$ wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
$ tar zxf LATEST.tar.gz
$ cd libsodium-stable/
~/libsodium-stable$ ./configure
~/libsodium-stable$ make -j 4
~/libsodium-stable$ sudo make install
~/libsodium-stable$ sudo /sbin/ldconfig
This will install the shared library under /usr/local/lib
.
Now go into the ed25519$
directory and run:
$ rebar3 clean compile
$ rebar3 eunit
This was tested for Debian. Should work for Windows, maybe with some small tweaks.
Start an Erlang shell
$ rebar3 shell
Erlang/OTP 22 [erts-10.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1]
Eshell V10.4 (abort with ^G)
1> application:start(ed25519).
ok
2> {ok, {Public_key, Secret_key}} = ed25519:ed25519_keypair().
{ok,{<<35,174,231,72,230,138,133,140,102,9,37,227,157,250,
229,40,146,164,22,122,148,15,44,149,131,116,...>>,
<<54,115,66,197,35,66,140,242,36,224,142,170,208,91,3,
209,25,203,215,127,235,9,85,188,218,...>>}}
3> Message = "This is a message".
"This is a message"
4> {ok, Signature} = ed25519:ed25519_sign(Secret_key, Message).
{ok,<<191,69,86,82,239,193,140,199,116,84,161,47,7,135,
95,26,139,77,227,83,190,34,97,233,148,222,147,...>>}
5> ed25519:ed25519_verify(Public_key, Message, Signature).
{ok,true}
6> ed25519:ed25519_verify(Public_key, "Forged message", Signature).
{ok,false}
See the docs (also the libsodium) for more functions and details.
The eunit tests use the test data from the sign.input from the original Ed25519 high-speed high-security signatures Alternate implementations software page. All 1024 test vectors should run just fine.
rebar3 eunit