Go to file
Didactic Drunk 484847d57f Add ability to use existing buffer for encrypt_easy. 2019-05-29 00:59:32 -07:00
spec Add secret key encrypt_easy. 2019-05-28 16:15:57 -07:00
src Add ability to use existing buffer for encrypt_easy. 2019-05-29 00:59:32 -07:00
.editorconfig Initial commit 2017-07-11 22:15:35 -05:00
.gitignore Initial commit 2017-07-11 22:15:35 -05:00
.travis.yml install libsodium for travis 2018-02-13 21:06:28 -05:00
LICENSE Initial commit 2017-07-11 22:15:35 -05:00
README.md Add libsodium kdf. 2019-05-28 14:31:31 -07:00
shard.yml change crystal version in shard.yml 2018-02-13 19:40:14 -05:00
travis-install-lib-sodium.sh Use LATEST rather than specific libsodium release in tests 2018-02-16 16:24:20 -05:00

README.md

cox

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.

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

  1. Fork it ( https://github.com/andrewhamon/cox/fork )
  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

Contributors