Crates.io | cts |
lib.rs | cts |
version | |
source | src |
created_at | 2018-02-02 19:56:31.860091 |
updated_at | 2024-11-01 07:42:11.968738 |
description | Generic implementation of the ciphertext stealing block modes of operation |
homepage | |
repository | https://github.com/RustCrypto/block-modes |
max_upload_size | |
id | 49393 |
Cargo.toml error: | TOML parse error at line 19, column 1 | 19 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
Generic implementation of the ciphertext stealing block cipher modes of operation.
use aes::Aes128;
use cts::{Decrypt, Encrypt, KeyIvInit};
use hex_literal::hex;
let key = [0x42; 16];
let iv = [0x24; 16];
// Message must be bigger than block size (16 bytes for AES-128)
let msg = b"Lorem ipsum dolor sit amet";
let mut buf = [0u8; 26];
let enc_mode = cts::CbcCs3Enc::<Aes128>::new(&key.into(), &iv.into());
enc_mode.encrypt_b2b(msg, &mut buf).unwrap();
assert_eq!(buf, hex!("68ec97f172e322fdd38e74fca65cee52658ae2124beb5e4e5315"));
let dec_mode = cts::CbcCs3Dec::<Aes128>::new(&key.into(), &iv.into());
dec_mode.decrypt(&mut buf).unwrap();
assert_eq!(&buf, msg);
If you wan to encrypt many messages with one key, you can use a block cipher reference to create CTS modes:
use aes::Aes128;
use cts::{
cipher::{InnerIvInit, KeyInit},
Encrypt,
};
use hex_literal::hex;
let key = [0x42; 16];
let cipher = Aes128::new(&key.into());
let iv1 = [0x24; 16];
let msg1 = b"Lorem ipsum dolor sit amet";
let mut buf1 = [0u8; 26];
let iv2 = [0x25; 16];
let msg2 = b"Lorem ipsum dolor sit";
let mut buf2 = [0u8; 21];
let enc_mode = cts::CbcCs3Enc::inner_iv_init(&cipher, &iv1.into());
enc_mode.encrypt_b2b(msg1, &mut buf1).unwrap();
assert_eq!(buf1, hex!("68ec97f172e322fdd38e74fca65cee52658ae2124beb5e4e5315"));
let enc_mode = cts::CbcCs3Enc::inner_iv_init(&cipher, &iv2.into());
enc_mode.encrypt_b2b(msg2, &mut buf2).unwrap();
assert_eq!(buf2, hex!("69ebd2059e69c6e416a67351982267a26bf5672934"));
Rust 1.57 or higher.
Minimum supported Rust version can be changed in the future, but it will be done with a minor version bump.
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.