https://github.com/banyc/tokio_chacha20
Encrypt/Decrypt async stream data (`AsyncRead/Write`) using ChaCha20
https://github.com/banyc/tokio_chacha20
chacha20 poly1305 tokio
Last synced: 7 months ago
JSON representation
Encrypt/Decrypt async stream data (`AsyncRead/Write`) using ChaCha20
- Host: GitHub
- URL: https://github.com/banyc/tokio_chacha20
- Owner: Banyc
- Created: 2023-12-30T14:24:36.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-25T06:15:16.000Z (10 months ago)
- Last Synced: 2025-01-20T05:49:04.969Z (9 months ago)
- Topics: chacha20, poly1305, tokio
- Language: Rust
- Homepage:
- Size: 51.8 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `tokio_chacha20`
ChaCha20 and Poly1305 primitives (primitives are not AEAD).
## How to use
Async:
```rust
let config = create_random_config();let (client, server) = tokio::io::duplex(1024);
let (r, w) = tokio::io::split(client);
let mut client = WholeStream::from_key_halves(*config.key(), r, w);
let (r, w) = tokio::io::split(server);
let mut server = WholeStream::from_key_halves(*config.key(), r, w);let data = b"Hello, world!";
let mut buf = [0u8; 1024];
client.write_all(data).await.unwrap();
server.read_exact(&mut buf[..data.len()]).await.unwrap();
```Sync:
```rust
let config = create_random_config();let msg = b"Hello world!";
let mut en = EncryptCursor::new(*config.key());
let mut de = DecryptCursor::new(*config.key());
let mut buf = [0; 1024];let (_, n) = en.encrypt(msg, &mut buf).unwrap();
let i = de.decrypt(&mut buf[..n]).unwrap();
let i = i.unwrap();
assert_eq!(&buf[i..n], &msg[..]);
```