Salchicha
A pure-ish Elixir cryptography tool for the Salsa20 and ChaCha20 ciphers.
Installation
The package can be installed by adding salchicha to your list of dependencies in mix.exs:
def deps do
[
{:salchicha, "~> 0.3"}
]
end
Usage
iex()> key = Salchicha.generate_secret_key()
iex()> nonce = Salchicha.generate_nonce()
iex()> "Hello, World!"
|> Salchicha.secretbox(nonce, key)
|> Salchicha.secretbox_open(nonce, key)
|> IO.iodata_to_binary()
"Hello, World!"
Background
The purpose of this library is to have a lightweight, NaCl/libsodium compatible tool for symmetric key encryption/decryption that doesn't depend on any other packages or NIFs.
KCl is an impressive pure-elixir NaCl/libsodium
library we had previously used for Discord Voice encryption in nostrum. While adding support for newer encryption modes, I opted to remove
:kcl in favor of leveraging what was available via erlang's native :crypto module
and implementing the rest more adroitly. In this library the functions have been made
more general-purpose and have analogues in the NaCl/libsodium API.
NaCl/libsodium (and KCl) has a lot of other functionality for public key cryptography
via EC25519, which erlang's :crypto module already supports. I may add some of that
here in the future but in the meantime I've just brought over the XSalsa and XChaCha functions.