Crate feistel

Source
Expand description

Generic implementation of a Feistel Cipher.

Warning: this crate for now values ease of use and genericity over having perfect timing-attack-resistent implementations.

let network = key
    .chunks_exact(4)
    .map(|chunk| {
        move |half: &XorArray<u8, ConstArrayLength<32>>| {
            let mut hasher = Sha256::new();
            hasher.update(half);
            hasher.update(chunk);
            let value: [u8; 32] = hasher.finalize().into();
            XorArray(value.into())
        }
    })
    .feistel_symmetric();
let original = [0; 64].into();
let encrypted = network.clone().array_encrypt(original);
assert_ne!(original, encrypted);
let decrypted = network.clone().array_decrypt(encrypted);
assert_eq!(original, decrypted);

Structs§

Array
ArrayNetwork wrapper around an IntoIterator.
Symmetric
SymmetricNetwork wrapper around an IntoIterator.
XorArray
Array that implements BitXor.

Traits§

ArrayExt
Extension trait for creating ArrayNetworks.
ArrayNetwork
Network dealing with GenericArrays.
Network
Feistel network.
Round
Hash function for a specific round. Usually depends on a key.
SymmetricExt
Extension trait for creating SymmetricNetworks.
SymmetricNetwork
Network with Network::L equal to Network::R and Network::forward equivalent to Network::backward.