3 releases (breaking)
0.3.0 | Mar 12, 2024 |
---|---|
0.2.0 | Mar 6, 2024 |
0.1.0 | Mar 4, 2024 |
#1748 in Cryptography
123 downloads per month
20KB
395 lines
ChaCha20
A Rust implementation of the ChaCha20 stream cipher. Complete with simple, auditable code.
Features
- Stack-allocated
- No unsafe code blocks
- Zero dependencies
- Seek an index in the keystream or a block in the keystream.
Usage
use chacha20::ChaCha20;
let key = hex::decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f").unwrap();
let key: [u8; 32] = key.try_into().unwrap();
let nonce = hex::decode("000000000000004a00000000").unwrap();
let nonce: [u8; 12] = nonce.try_into().unwrap();
let seek = 42; // start the cipher at the 42nd index
let mut chacha = ChaCha20::new(key, nonce, seek);
let mut binding = *b"Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
let to = binding.as_mut_slice();
chacha.apply_keystream(to);
chacha.seek(seek); // move the keystream index back to 42
lib.rs
:
ChaCha20
A Rust implementation of the ChaCha20 stream cipher. Complete with simple, auditable code.
Features
- Stack-allocated
- No unsafe code blocks
- Zero dependencies
- Seek an index in the keystream or a block in the keystream.
Usage
use chacha20::ChaCha20;
let key = hex::decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f").unwrap();
let key: [u8; 32] = key.try_into().unwrap();
let nonce = hex::decode("000000000000004a00000000").unwrap();
let nonce: [u8; 12] = nonce.try_into().unwrap();
let seek = 42; // start the cipher at the 42nd index
let mut chacha = ChaCha20::new(key, nonce, seek);
let mut binding = *b"Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
let to = binding.as_mut_slice();
chacha.apply_keystream(to);
chacha.seek(seek); // move the keystream index back to 42