484847d57f | ||
---|---|---|
spec | ||
src | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
LICENSE | ||
README.md | ||
shard.yml | ||
travis-install-lib-sodium.sh |
README.md
cox
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.
Installation
Install libsodium, then:
Add this to your application's shard.yml
:
dependencies:
cox:
github: andrewhamon/cox
Usage
require "cox"
data = "Hello World!"
# Alice is the sender
alice = Cox::KeyPair.new
# Bob is the recipient
bob = Cox::KeyPair.new
# 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)
String.new(decrypted) # => "Hello World!"
# Public key signing
message = "Hello World!"
signing_pair = Cox::SignKeyPair.new
# Sign the message
signature = Cox.sign_detached(message, signing_pair.secret)
# And verify
Cox.verify_detached(signature, message, signing_pair.public) # => true
Key derivation
kdf = Cox::Kdf.new
kdf.derive(8_byte_context, subkey_size, subkey_id)
subkey1 = kdf.derive "context1", 16, 0 subkey2 = kdf.derive "context1", 16, 1 subkey3 = kdf.derive "context2", 32, 0 subkey4 = kdf.derive "context2", 64, 1
Contributing
- Fork it ( https://github.com/andrewhamon/cox/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- andrewhamon Andrew Hamon - creator, maintainer
- dorkrawk Dave Schwantes - contributor