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

无运行时依赖