Crate cts

Source
Expand description

§RustCrypto: CTS

crate Docs Apache2/MIT licensed Rust Version Project Chat Build Status

Generic implementation of the ciphertext stealing block cipher modes of operation.

§Example

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"));

§Minimum Supported Rust Version

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.

§SemVer Policy

  • All on-by-default features of this library are covered by SemVer
  • MSRV is considered exempt from SemVer as noted above

§License

Licensed under either of:

at your option.

§Contribution

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.

Re-exports§

Structs§

  • The CBC-CS-1 ciphertext stealing mode decryptor.
  • The CBC-CS-1 ciphertext stealing mode encryptor.
  • The CBC-CS-2 ciphertext stealing mode decryptor.
  • The CBC-CS-2 ciphertext stealing mode encryptor.
  • The CBC-CS-3 ciphertext stealing mode decryptor.
  • The CBC-CS-3 ciphertext stealing mode encryptor.
  • The ECB-CS-1 ciphertext stealing mode decryptor.
  • The ECB-CS-1 ciphertext stealing mode encryptor.
  • The ECB-CS-2 ciphertext stealing mode decryptor.
  • The ECB-CS-2 ciphertext stealing mode encryptor.
  • The ECB-CS-3 ciphertext stealing mode decryptor.
  • The ECB-CS-3 ciphertext stealing mode encryptor.
  • Error which indicates that message is smaller than cipher’s block size.

Traits§

  • Decryption functionality of CTS modes.
  • Encryption functionality of CTS modes.
  • Types which can be initialized from key.
  • Types which can be initialized from key and initialization vector (nonce).