Crates.io | chacha20stream |
lib.rs | chacha20stream |
version | 2.2.1 |
source | src |
created_at | 2021-04-08 19:03:03.433249 |
updated_at | 2021-08-20 20:29:57.249614 |
description | A writable wrapper stream for encryption and decryption with the stream cipher chacha20_poly1305 |
homepage | https://git.flanchan.moe/flanchan/chacha20stream |
repository | https://github.com/notflan/chacha20stream |
max_upload_size | |
id | 381000 |
size | 72,353 |
Contains a writable stream that wraps another, applying the chacha20_poly1305 cipher to the input before writing for either encryption or decryption.
Encrypt and decrypt message with an in-memory buffer.
// Generate random key and IV for the operations.
let (key, iv) = chacha20stream::keygen();
let input = "Hello world!";
// Encryption into a new `Vec<u8>`. (Any implementor of `io::Write` or `&mut io::Write` can be used.)
let mut sink = Sink::encrypt(Vec::new(), key, iv).expect("Failed to create encryptor");
sink.write_all(input.as_bytes()).unwrap();
sink.flush().unwrap(); // `flush` also clears the in-memory buffer if there is left over data in it.
let output_encrypted = sink.into_inner();
// Decryption into a new `Vec<u8>`. (Any implementor of `std::io::Write` or `&mut std::io::Write` can be used.)
let mut sink = Sink::decrypt(Vec::new(), key, iv).expect("Failed to create decryptor");
sink.write_all(&output_encrypted[..]).unwrap();
sink.flush().unwrap();
let output_decrypted = sink.into_inner();
assert_eq!(&output_decrypted[..], input.as_bytes());
smallvec
crate to store the in-memory buffer on the stack if it's smalle enough (default)AsyncSink
with Tokio 0.2 AsyncWrite
. The API is the same as for the regular Sink
.include/cc20.h
.) The output libraries are generated in target/{debug,release}/libchacha20stream.{a,so}
.MIT