Combine libhydrogen with a good implementation of string encoding in C, Nick Galbreath's base64 implementation in this case, and the end result is hopefully a fast method of encrypting data in a way that is URL safe.
Add this line to your application's Gemfile:
gem "ffi-hydrogen"
And then execute:
$ bundle
Or install it yourself as:
$ gem install ffi-hydrogen
key = ::FFI::Hydrogen.hydro_secretbox_keygen
context = "examples"
message = "0123456789"
encrypted = ::FFI::Hydrogen.hydro_secretbox_encrypt(message, context, key)
encoded = ::FFI::Hydrogen.modp_b64_encode(encrypted)
decoded = ::FFI::Hydrogen.modp_b64_decode(encoded)
decrypted = ::FFI::Hydrogen.hydro_secretbox_decrypt(decoded, context, key)
puts "message: #{message}"
puts "encrypted: #{encrypted}"
puts "encoded: #{encoded}"
puts "decoded: #{decoded}"
puts "decrypted: #{decrypted}"
ctx = "examples"
key = ::FFI::Hydrogen.hydro_secretbox_keygen
box = ::FFI::Hydrogen::Secretbox.new(ctx, key)
message = "0123456789"
boxed = box.encrypt_encode(message)
unboxed = box.decode_decrypt(boxed)
puts "message: #{message}"
puts "boxed: #{boxed}"
puts "unboxed: #{unboxed}"
After checking out the repo, run bin/setup
to install dependencies. Then, run
rake spec
to run the tests. You can also run bin/console
for an interactive
prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To
release a new version, update the version number in ffi-hydrogen.gemspec
, and
then run bundle exec rake release
, which will create a git tag for the
version, push git commits and tags, and push the .gem
file to
rubygems.org.