Project

tweetnacl

0.0
No commit activity in last 3 years
No release in over 3 years
TweetNaCl is a C-extension built on top of the official TweetNaCl distribution
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

TweetNaCl for Ruby CircleCI

SUMMARY

TweetNaCl is a C-extension for Ruby built on top of the official TweetNacl distribution. It exposes the basic functions using Ruby objects.

For a detailed explanation of TweetNaCl, here's the research paper associated with it.

INSTALL

gem install tweetnacl

USAGE

input = "<text to cipher>"
nonce = "<a 24-char string>"

pk, sk = TweetNaCl.crypto_box_keypair # This generates a pair of public and secret keys

cipher = TweetNaCl.crypto_box(input, nonce, pk, sk) # Encrypt !

output = TweetNaCl.crypto_box_open(cipher, nonce, pk, sk) # Decrypt!

assert_equal input, output # They're the same !

RUBY API

KeyPair

A KeyPair object represents a pair of public and secret keys. They are created with the crypto_box_keypair function call.

keypair = KeyPair.new

One can also create a keypair with an existing tuple of keys like this:

keypair = KeyPair.new(["<public_key>","<private_key>"])

CryptoBox

initialize / new (<optional: Keypair object>)

A Cryptobox object contains all the methods required to sign, encrypt and verify messages. It is instantiated like so:

cb = CryptoBox.new(<Optional: KeyPair object>)

if no KeyPair is given, CryptoBox will create a new one by calling KeyPair.new

close(message, nonce)

Closing a box requires a message and a nonce.

cb = CryptBox.new(keypair_to_encrypt)
cb.close("hello world", "<a 24-byte nonce>")

open(box, nonce)

Opening a box requires a closed box and a nonce.

[...]
closed_box = CryptBox.new(keypair_to_encrypt).tap do |b|
  b.close("hello world", "<a 24-byte nonce>")
end

decryption_box = CryptBox.new(keypair_to_decrypt)
decryption_box.open(closed_box, "<a 24-byte nonce>")

FUNCTIONS

crypto_box_keypair

Generate a pair of public and secret keys.

crypto_box(input, nonce, public_key, secret_key)

Encrypt and sign the input given the other parameters.

crypto_box_open(ciphered_message, nonce, public_key, secret_key)

Decrypt and verify the signature of the ciphered message given the other parameters.

crypto_secretbox(input, nonce, public_key)

Encrypt the input given the other parameters.

crypto_secretbox_open(ciphered_message, nonce, public_key)

Decrypt the ciphered message given the other parameters.

crypto_sign_keypair

Generate a pair of public and secret keys.

crypto_sign(message, secret_key)

Sign a message with a secret key.

crypto_sign_open(message, public_key)

Verify the signature in message with a public key.

TODO

Raw C-API

  • crypto_box (aliased crypto_box_curve25519xsalsa20poly1305)
  • crypto_box_open (aliased crypto_box_curve25519xsalsa20poly1305_open)
  • crypto_box_keypair
  • crypto_box_beforenm
  • crypto_box_afternm
  • crypto_box_open_afternm
  • crypto_core_salsa20
  • crypto_core_hsalsa20
  • crypto_hashblocks = crypto_hashblocks_sha512
  • crypto_hash = crypto_hash_sha512
  • crypto_onetimeauth = crypto_onetimeauth_poly1305
  • crypto_onetimeauth_verify
  • crypto_scalarmult = crypto_scalarmult_curve25519
  • crypto_scalarmult_base
  • crypto_secretbox (aliased crypto_secretbox_xsalsa20poly1305)
  • crypto_secretbox_open (aliased crypto_secretbox_xsalsa20poly1305_open)
  • crypto_sign = crypto_sign_ed25519
  • crypto_sign_open
  • crypto_sign_keypair
  • crypto_stream = crypto_stream_xsalsa20
  • crypto_stream_xor
  • crypto_stream_salsa20
  • crypto_stream_salsa20_xor
  • crypto_verify_16
  • crypto_verify_32
  • USDT / probes

Ruby API

  • CryptoBox object
  • CryptoSign object

Is it PRODUCTION-READY?

No. And it never will.

Is it secure?

No. Until proven otherwise.

CONTRIBUTE

  1. Fork it ( https://github.com/franckverrot/tweetnacl/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 new Pull Request

LICENSE

Franck Verrot, Copyright 2014. See LICENSE.txt.