A Rust implementation of the Cipher Block Chaining (CBC) mode of the SPECK cipher.
Don't use this unless you know what you are doing, as practical attacks exist against
CBC mode in certain cases.
Example
# extern crate rand;
# extern crate pkcs7;
# extern crate speck_cbc;
# extern crate byteorder;
#
# fn example() -> std::io::Result<()> {
use rand::{Rng, OsRng};
use byteorder::NetworkEndian;
let key = [0u8; speck_cbc::BLOCK_SIZE];
let input = b"This is a test.";
let mut buffer: Vec<u8> = input.to_vec();
let mut iv = [0u8; speck_cbc::BLOCK_SIZE];
OsRng::new()?.fill_bytes(&mut iv);
pkcs7::pad(&mut buffer, speck_cbc::BLOCK_SIZE as u8);
speck_cbc::encrypt::<NetworkEndian>(&mut buffer, &key, &iv);
speck_cbc::decrypt::<NetworkEndian>(&mut buffer, &key, &iv);
pkcs7::un_pad(&mut buffer);
assert_eq!(buffer.as_slice(), input);
# Ok(())
# }
# fn main() { example().unwrap() }