Erlang NIF for ed25519 key generation, message signing, signature verification, and key pair serialization.
Switch branches/tags
Nothing to show
Clone or download
Kevin A. Smith
Latest commit f8eb1f3 Jan 4, 2014
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
c_src
include
src
test
.gitignore
LICENSE
README.md
rebar.config

README.md

brine is a set of Erlang NIFs supplying ed25519 key generation, message signing, signature verification and key pair serialization. brine aspires to provide a simple API coupled with robust performance.

Benchmark results (as of Dec 30 2013):

===== Key Generation =====
Iterations: 1000000
Total runtime: 216s
Keys per sec: 4630
===== Message Signing =====
Iterations: 1000000
Message size: 4096 bytes
Total runtime: 23s
Signatures per sec: 43478
===== Key Pair Serialization  =====
Iterations: 1000000
Total runtime: 69s
Roundtrips per sec: 14493
Note: 1 roundtrip converts a key pair to a binary blob and back to an Erlang record

Test server: Intel Core i7-4770 (Haswell, hyperthreading enabled) @ 3.4 GHz CPU w/32 GB DDR3 RAM

Test environment: Ubuntu 13.10, gcc 4.8.1, Erlang R16B03

Special tuning: rngd and timer_entropyd used to increase available entropy

Thanks to the following folks for making brine possible:

  • Jean-Phillips Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn, and Christian Winnerlein for BLAKE2
  • Orson Peters for the clean and easy-to-use ed25519 implementation
  • Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe, and Bo-Yin Yang for designing ed25519

TODO:

  • Document brine's serialization format
  • Refactor brine into libbrine w/NIF adapter to simplify writing bindings for other languages