Crystal wrapper for the libsodium crypto API
Switch branches/tags
Nothing to show
Clone or download
andrewhamon Merge pull request #5 from rzane/nonce-bytes
Cox::LibSodium::NONCE_BYTES points to the wrong function
Latest commit 8346d47 Mar 22, 2018


Build Status

Crystal bindings for the libsodium box API

Given a recipients public key, you can encrypt and sign a message for them. Upon receipt, they can decrypt and authenticate the message as having come from you.


Install libsodium, then:

Add this to your application's shard.yml:

    github: andrewhamon/cox


require "cox"

data = "Hello World!"

# Alice is the sender
alice =

# Bob is the recipient
bob =

# Encrypt a message for Bob using his public key, signing it with Alice's
# secret key
nonce, encrypted = Cox.encrypt(data, bob.public, alice.secret)

# Decrypt the message using Bob's secret key, and verify its signature against
# Alice's public key
decrypted = Cox.decrypt(encrypted, nonce, alice.public, bob.secret) # => "Hello World!"

# Public key signing

message = "Hello World!"

signing_pair =

# Sign the message
signature = Cox.sign_detached(message, signing_pair.secret)

# And verify
Cox.verify_detached(signature, message, signing_pair.public) # => true


  1. Fork it ( )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request