crypto::salsa
crypto::salsa provides an implementation of the Salsa20 and XSalsa20 stream
ciphers, per "Salsa20 specification" by Daniel J. Bernstein.
Use salsa20 to create a stream and either xsalsa20_init or
salsa20_init to set handle, key and nonce of the appropriate size,
NONCESIZE for salsa20 or XNONCESIZE for XSalsa20. After calling the
appropriate init function, io::write may be used to encrypt blocks to the
handle or io::read to decrypt blocks from the handle. The stream must be
closed with io::close to wipe sensitive data from memory.
Writing blocks of length BLOCKSIZE is not required. However, seeking the key
stream with setctr only operates in units of BLOCKSIZE.
This is a low-level module which implements cryptographic primitives. Direct use
of cryptographic primitives is not recommended for non-experts, as incorrect use
of these primitives can easily lead to the introduction of security
vulnerabilities. Non-experts are advised to use the high-level operations
available in the top-level crypto module.
Be advised that Hare's cryptography implementations have not been audited.
Index
Types
type stream;
Constants
const BLOCKSIZE: size;
const KEYSIZE: size;
const NONCESIZE: size;
const XNONCESIZE: size;
Functions
fn salsa20() stream;
fn salsa20_init(*stream, io::handle, []u8, []u8) void;
fn setctr(*stream, u64) void;
fn xsalsa20_init(*stream, io::handle, []u8, []u8) void;
Types
type stream
Show undocumented member
type stream = struct {
cipher::xorstream,
state: [16]u32,
xorbuf: [BLOCKSIZE]u8,
xorused: size,
rounds: size,
};
Constants
def BLOCKSIZE
def BLOCKSIZE: size;
The block size of the Salsa cipher.
def KEYSIZE
def KEYSIZE: size;
Size of a Salsa key, in bytes.
def NONCESIZE
def NONCESIZE: size;
Size of the Salsa20 nonce, in bytes.
def XNONCESIZE
def XNONCESIZE: size;
Size of the XSalsa20 nonce, in bytes.
Functions
fn salsa20
fn salsa20() stream;
Create a Salsa20 or XSalsa20 stream. Must be initialized with either
salsa20_init or xsalsa20_init, and must be closed with io::close
after use to wipe sensitive data from memory.
fn salsa20_init
fn salsa20_init(s: *stream, h: io::handle, key: []u8, nonce: []u8) void;
Initialize a Salsa20 stream.
fn setctr
fn setctr(s: *stream, counter: u64) void;
Advances the key stream to "seek" to a future state by 'counter' times
BLOCKSIZE.
fn xsalsa20_init
fn xsalsa20_init(s: *stream, h: io::handle, key: []u8, nonce: []u8) void;
Initialize an XSalsa20 stream. XSalsa20 differs from Salsa20 via the use of a
larger nonce parameter.