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. ```rust // 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.writeall(input.asbytes()).unwrap();
sink.flush().unwrap(); // flush
also clears the in-memory buffer if there is left over data in it.
let outputencrypted = sink.intoinner();
// 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.writeall(&outputencrypted[..]).unwrap();
sink.flush().unwrap();
let outputdecrypted = sink.intoinner();
asserteq!(&outputdecrypted[..], 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
.MIT