crypto.cipher #
fn new_cbc #
fn new_cbc(b Block, iv []u8) Cbc
new_cbc returns a DesCbc which encrypts in cipher block chaining mode, using the given Block. The length of iv must be the same as the Block's block size.
fn new_cfb_decrypter #
fn new_cfb_decrypter(b Block, iv []u8) Cfb
new_cfb_decrypter returns a Cfb which decrypts with cipher feedback mode, using the given Block. The iv must be the same length as the Block's block size
fn new_cfb_encrypter #
fn new_cfb_encrypter(b Block, iv []u8) Cfb
new_cfb_encrypter returns a Cfb which encrypts with cipher feedback mode, using the given Block. The iv must be the same length as the Block's block size
fn new_ctr #
fn new_ctr(b Block, iv []u8) Ctr
new_ctr returns a Ctr which encrypts/decrypts using the given Block in counter mode. The length of iv must be the same as the Block's block size.
fn new_ofb #
fn new_ofb(b Block, iv []u8) Ofb
new_ofb returns a Ofb that encrypts or decrypts using the block cipher b in output feedback mode. The initialization vector iv's length must be equal to b's block size.
fn safe_xor_bytes #
fn safe_xor_bytes(mut dst []u8, a []u8, b []u8, n int)
safe_xor_bytes XORs the bytes in a and b into dst it does so n times. Please note: n needs to be smaller or equal than the length of a and b.
fn xor_bytes #
fn xor_bytes(mut dst []u8, a []u8, b []u8) int
Note: Implement other versions (joe-c)xor_bytes xors the bytes in a and b. The destination should have enough space, otherwise xor_bytes will panic. Returns the number of bytes xor'd.
fn xor_words #
fn xor_words(mut dst []u8, a []u8, b []u8)
xor_words XORs multiples of 4 or 8 bytes (depending on architecture.) The slice arguments a and b are assumed to be of equal length.
interface AEAD #
interface AEAD {
// nonce_size returns the size of nonce (in bytes) used by this AEAD that must be
// passed to `.encrypt` or `.decrypt`.
nonce_size() int
// overhead returns the maximum difference between the lengths of a plaintext and its ciphertext.
overhead() int
// encrypt encrypts and authenticates the provided plaintext along with the nonce and
// additional data in `ad`. The nonce must be `nonce_size()` bytes long and unique
// for all time, for a given key. It returns encrypted (and authenticated) ciphertext bytes
// where its encoded form is up to implementation and not dictated by the interfaces.
// Commonly, its contains encrypted text plus some authentication tag, and maybe some other bytes.
encrypt(plaintext []u8, nonce []u8, ad []u8) ![]u8
// decrypt decrypts and authenticates (verifies) the provided ciphertext along with a nonce, and
// additional data. The nonce must be `nonce_size()` bytes long and both it and the additional data
// must match the value passed to `encrypt`.
// Its returns the verified plaintext on success, or errors on fails.
decrypt(ciphertext []u8, nonce []u8, ad []u8) ![]u8
}
AEAD provides an authenticated encryption with associated data for encryption (decryption).
interface Block #
interface Block {
block_size int // block_size returns the cipher's block size.
encrypt(mut dst []u8, src []u8) // Encrypt encrypts the first block in src into dst.
// Dst and src must overlap entirely or not at all.
decrypt(mut dst []u8, src []u8) // Decrypt decrypts the first block in src into dst.
// Dst and src must overlap entirely or not at all.
}
A Block represents an implementation of block cipher using a given key. It provides the capability to encrypt or decrypt individual blocks. The mode implementations extend that capability to streams of blocks.
interface BlockMode #
interface BlockMode {
block_size int // block_size returns the mode's block size.
crypt_blocks(mut dst []u8, src []u8) // crypt_blocks encrypts or decrypts a number of blocks. The length of
// src must be a multiple of the block size. Dst and src must overlap
// entirely or not at all.
//
// If len(dst) < len(src), crypt_blocks should panic. It is acceptable
// to pass a dst bigger than src, and in that case, crypt_blocks will
// only update dst[:len(src)] and will not touch the rest of dst.
//
// Multiple calls to crypt_blocks behave as if the concatenation of
// the src buffers was passed in a single run. That is, BlockMode
// maintains state and does not reset at each crypt_blocks call.
}
A BlockMode represents a block cipher running in a block-based mode (CBC, ECB etc).
interface Stream #
interface Stream {
mut:
// xor_key_stream XORs each byte in the given slice with a byte from the
// cipher's key stream. Dst and src must overlap entirely or not at all.
//
// If len(dst) < len(src), xor_key_stream should panic. It is acceptable
// to pass a dst bigger than src, and in that case, xor_key_stream will
// only update dst[:len(src)] and will not touch the rest of dst.
//
// Multiple calls to xor_key_stream behave as if the concatenation of
// the src buffers was passed in a single run. That is, Stream
// maintains state and does not reset at each xor_key_stream call.
xor_key_stream(mut dst []u8, src []u8)
}
A Stream represents a stream cipher.
fn (Cbc) free #
fn (mut x Cbc) free()
free the resources taken by the Cbc x
fn (Cbc) encrypt_blocks #
fn (mut x Cbc) encrypt_blocks(mut dst_ []u8, src_ []u8)
encrypt_blocks encrypts the blocks in src_ to dst_. Please note: dst_ is mutable for performance reasons.
fn (Cbc) decrypt_blocks #
fn (mut x Cbc) decrypt_blocks(mut dst []u8, src []u8)
decrypt_blocks decrypts the blocks in src to dst. Please note: dst is mutable for performance reasons.
fn (Cfb) free #
fn (mut x Cfb) free()
free the resources taken by the Cfb x
fn (Cfb) xor_key_stream #
fn (mut x Cfb) xor_key_stream(mut dst []u8, src []u8)
xor_key_stream xors each byte in the given slice with a byte from the key stream.
fn (Ctr) free #
fn (mut x Ctr) free()
free the resources taken by the Ctr c
fn (Ctr) xor_key_stream #
fn (mut x Ctr) xor_key_stream(mut dst []u8, src []u8)
xor_key_stream xors each byte in the given slice with a byte from the key stream.
fn (Ofb) xor_key_stream #
fn (mut x Ofb) xor_key_stream(mut dst []u8, src []u8)
xor_key_stream xors each byte in the given slice with a byte from the key stream.