#tokio #stream #aead #async-io #chacha20 #read-write #wrapper

async-encrypted-stream

基于 chacha20 加密原语的异步读写包装器

3 个版本

0.1.2 2023 年 9 月 18 日
0.1.1 2023 年 8 月 3 日
0.1.0 2023 年 7 月 3 日

#1643 in 加密学

31 每月下载量

MIT 许可证

25KB
464

Async Encrypted Stream

基于 chacha20 加密原语的异步读写包装器。

该包公开了一对 [ReadHalf] 和 [WriteHalf] 结构体,分别与任何 tokio::io::AsyncReadtokio::io::AsyncWrite 配合使用。

要使用此包,还需要添加 chacha20poly1305 作为依赖项。

async-encrypted-stream = "0.1"
chacha20poly1305 = { version = "0.10", features = ["stream", "std"] }

一旦添加了必要的依赖项,创建流就相对简单

use chacha20poly1305::aead::stream::{DecryptorLE31, EncryptorLE31};
use chacha20poly1305::XChaCha20Poly1305;

use async_encrypted_stream::{ReadHalf, WriteHalf, encrypted_stream};

// The key and nonce used must be the same on both ends of the stream
// NOTE: the size of the key and nonce values are defined by the type of Encryption used
let key = [0u8; 32];
let nonce = [0u8; 20];

let (rx, tx) = tokio::io::duplex(4096);
let (mut reader, mut writer): (
    ReadHalf<_, DecryptorLE31<XChaCha20Poly1305>>,
    WriteHalf<_, EncryptorLE31<XChaCha20Poly1305>>,
) = encrypted_stream(rx, tx, key.as_ref().into(), nonce.as_ref().into());

依赖项

~2.9–4MB
~64K SLoC