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
Type Name Latest commit message Commit time
Failed to load latest commit information.

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


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