3 个版本 (重大变更)
0.3.0 | 2024 年 3 月 12 日 |
---|---|
0.2.0 | 2024 年 3 月 6 日 |
0.1.0 | 2024 年 3 月 4 日 |
#1157 in 加密学
20KB
395 行
ChaCha20
ChaCha20 流密码的 Rust 实现。代码简单、可审计。
特性
- 堆栈分配
- 无不安全代码块
- 无依赖
- 在密钥流中查找索引或在密钥流块中查找。
使用方法
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
ChaCha20 流密码的 Rust 实现。代码简单、可审计。
特性
- 堆栈分配
- 无不安全代码块
- 无依赖
- 在密钥流中查找索引或在密钥流块中查找。
使用方法
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