Skip to content

Ruby bindings for the Salsa20 stream cipher algorithm

License

Notifications You must be signed in to change notification settings

dubek/salsa20-ruby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

cb5527b · Oct 12, 2021

History

31 Commits
Oct 12, 2021
Sep 23, 2018
Aug 19, 2011
Mar 20, 2019
Jun 27, 2014
Sep 7, 2020
Sep 23, 2018
Jun 27, 2014
Sep 23, 2018
Jun 28, 2014
Mar 21, 2019
Sep 13, 2020

Repository files navigation

salsa20

Ruby-wrapper for the Salsa20 stream cipher algorithm designed by Daniel Bernstein. Salsa20 is a family of 256-bit stream ciphers designed in 2005 and submitted to eSTREAM, the ECRYPT Stream Cipher Project.

How to install

gem install salsa20

You’ll need a working compiler – the crypto code is the original C implementation from Daniel Bernstein.

Usage

require 'salsa20'

key = "VERY_SECRET_256_BIT_KEY_12345678"
iv = "-RANDOM-"
plain_text = "Salsa20 is a family of 256-bit stream ciphers"

encryptor = Salsa20.new(key, iv)
encrypted_text = encryptor.encrypt(plain_text)
p encrypted_text
# => "\x9D\x1C\xE4\x83\xAB\x8E\xB7\x85a,\xC3\xF6\x981*\x03\b-\x99\xAD\xDF\xBFS\x96\x94$\xA0\xF0U\v\xABz;=R\xBB\xE1\xB0\xDD\xBC\x1A9\xB8\xBEb"

decryptor = Salsa20.new(key, iv)
decrypted_text = decryptor.decrypt(encrypted_text)
p decrypted_text
# => "Salsa20 is a family of 256-bit stream ciphers"

The Salsa20 cipher algorhitm supports efficiently seeking to any 64-bytes boundry position in the stream using the seek method. Use position to tell the current stream position in bytes.

For more information, see the detailed rdoc of the Salsa20 class.

References

License

MIT open source license (full license text in the LICENSE file).

Contact

Author

Dov Murik (dov.murik@gmail.com)

Project homepage

github.com/dubek/salsa20-ruby