#密钥交换 #加密密钥 #惰性求值 #chacha #chacha20 #x25519 #chacha20-poly1305

lazychacha

基于RustCrypto: ChaCha20Poly1305的Rust中的Lazy ChaCha20-Poly1305。

1个不稳定版本

0.1.1 2024年4月18日

#2026 in 加密学

自定义许可证

9KB
116

lazychacha-rs

基于RustCrypto: ChaCha20Poly1305的Rust中的Lazy ChaCha20-Poly1305。

"Buy Me A Coffee"

算法细节

  • 密钥交换:X25519
  • 加密:ChaCha20
  • 认证:Poly1305

基准测试

Gnuplot not found, using plotters backend
encrypt                 time:   [1.2343 µs 1.2372 µs 1.2407 µs]
                        change: [-1.9100% -1.5520% -1.2222%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  5 (5.00%) high mild
  2 (2.00%) high severe
Benchmarking decrypt: Warming up for 3.0000 s
decrypt                 time:   [1.0420 µs 1.0439 µs 1.0462 µs]
                        change: [-16.591% -14.215% -12.124%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe

如何使用

  • 生成密钥对
let keypair = KeyPair::new();
  • 密钥交换 & 共享密钥
let client_kp = KeyPair::new();
let server_kp = KeyPair::new();
let server_pk = server_kp.pk_string();

let shared_key = SharedKey::new(server_pk, client_kp.sk);
  • 加密
let lazychacha = LazyChaCha::new();
let shared_key = SharedKey::new(server_pk, client_kp.sk);
let plaintext = r#"{"message": "hi"}"#;

let ciphertext = lazychacha.encrypt(plaintext, shared_key);
  • 解密
let lazychacha = LazyChaCha::new();
let shared_key = SharedKey::new(server_pk, client_kp.sk);
let ciphertext = "58b99ca4a7";

let plaintext = lazychacha.decrypt(ciphertext, shared_key);

依赖项

~2.5–4MB
~79K SLoC