DJB's Curve25519 implemented in pure Ruby using core Bignum for calculations on prime Finite Fields.
Ephermeral DH Exchange
$ gem install rb-pure25519
require 'rb-pure25519' skey1 = Rb25519.random_secret_str # Local pkey1 = Rb25519.public_key_str(skey1) # Local, pkey1 shared publically skey2 = Rb25519.random_secret_str # Remote pkey2 = Rb25519.public_key_str(skey2) # Remote, pkey2 shared publically shared_secret1 = Rb25519.shared_secret_str(pkey1, skey2) # Local shared_secret2 = Rb25519.shared_secret_str(pkey2, skey1) # Remote shared_secret1 == shared_secret2 #==> true # shared_secret used for symmetric crypto
There's a number of functions for other Montgomery curves — there's a toy curve in there that I used to verify some assumptions in the Montgomery EC ladder and in the number theory usin Sage Math.
We started using EC25519 when TLS was too heavy for an embedded IoT product: Sprinkl Conserve. We were looking for a pure ruby EC25519. We landed on using RbNaCl for the server-side (it was available in the Ubuntu distribution on our cloud platform). We later returned to the subject to create this library for anyone who needs a pure ruby EC25519 implementation.
Powered by Curve25519.