3 releases (breaking)

0.3.0 Mar 12, 2024
0.2.0 Mar 6, 2024
0.1.0 Mar 4, 2024

#1717 in Cryptography

Download history 10/week @ 2024-07-29

123 downloads per month

Custom license

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

No runtime deps