//! RSA and chacha20 key exchange methods use super::*; /* use tokio::prelude::*; pub async fn write_cckey(mut to: W, rsa: &crypt::RsaPublicKey, key: &crypt::Key, iv: &crypt::IV) -> std::io::Result<()> { let key = { let mut buf = Vec::with_capacity(chacha20stream::key::KEY_SIZE); crypt::rsa_encrypt(rsa, &mut buf, key.as_ref())?; buf }; to.write_all(&key[..]).await?; //TODO: Find size of `key` here. to.write_all(iv.as_ref()).await?; Ok(()) } */ /// A future that writes an RSA encrypted chacha20 key to a stream when awaited //TODO: Find size of RSA ecnrypted chacha `Key`. #[pin_project] struct CCKeyWrite<'a, W: AsyncWrite>{ /// The bytes of an **already encrypted** chacha20 key. enc_key: Vec, /// A non-encrypted chacha20 IV. iv: [u8; chacha20stream::key::IV_SIZE], /// Stream to write the data to when this future is awaited. #[pin] stream: &'a mut W, } //TODO: impl `Future` for CCKeyWrite should `write_all` both `enc_key` and `iv` to `stream` when `.await`ed. impl<'a, W: AsyncWrite> Future for CCKeyWrite<'a, S> { type Output = io::Result<()>; //todo: how to we `write_all` in `poll`? implement it outselves with looping `poll_write` and `futures::ready!()`? }