You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.2 KiB

//! RSA and chacha20 key exchange methods
use super::*;
/*
use tokio::prelude::*;
pub async fn write_cckey<W: AsyncWrite + Unpin>(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<u8>,
/// 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!()`?
}