openEngiadina wiki

NaCl

NaCl (pronounced "salt") is a new easy-to-use high-speed software library for network communication, encryption, decryption, signatures, etc. NaCl's goal is to provide all of the core operations needed to build higher-level cryptographic tools.

See The security impactof a new cryptographic library (2012) for design motivations and contrast to other crypto libraries.

The cryptography used in NaCl is described in Cryptography in NaCl (2009).

Libsodium (an implementation of NaCl) has a good documentation of the API.

Implementations

Concerns have been expressed on relying on an API with a single implementation (libsodium). However there are implementations that do not rely on libsodium:

libsodium

libsodium is the most commonly used library implementing the NaCL API. Most NaCl bindings for other languages use libsodium.

TweetNaCl

A C implementation that fits into 100 Tweets.

tweetnacl-js

JavaScript (pure) port of TweetNaCl.

pure Go implementations

pure Java implementation

HACL *: A Verified Modern Cryptographic Library (2018)

A formally-verified implementation written in F* and then compiled to C.