From 6dbcc641f681cefa941eb37448cffe2746ebb8e1 Mon Sep 17 00:00:00 2001 From: Isabelle L Date: Wed, 27 May 2020 17:41:09 -0500 Subject: [PATCH] removed initialize_connection and put it in ilmp --- src/client.rs | 4 +--- src/lib.rs | 35 +---------------------------------- src/server.rs | 2 +- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/src/client.rs b/src/client.rs index 6427928..c85c901 100644 --- a/src/client.rs +++ b/src/client.rs @@ -6,10 +6,8 @@ use futures::io::{ReadHalf, WriteHalf}; use futures_util::io::AsyncReadExt; use ilmp::{encrypt::SymmetricEncrypt, Sendable}; use lazy_static::lazy_static; -use std::sync::Mutex; lazy_static! { - static ref MESSAGE_BUFFER: Mutex> = Mutex::new(Vec::new()); static ref CONFIG: Config = Config::load().expect("failed to load config"); } @@ -23,7 +21,7 @@ pub async fn client(port: u16) -> Result<()> { ); let (mut read, mut write) = stream.split(); - let key = crate::initialize_connection(&mut read, &mut write).await?; + let key = ilmp::initialize_connection(&mut read, &mut write).await?; let encryption = SymmetricEncrypt::new(key); println!("successfully hardened connection"); diff --git a/src/lib.rs b/src/lib.rs index 1ee9c4f..bb26494 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,12 +3,7 @@ mod client; mod config; mod server; -use async_std::net::TcpStream; -use futures::io::{ReadHalf, WriteHalf}; -use ilmp::encrypt; -use ilmp::Sendable; -use orion::aead; -use ring::{agreement, digest, rand}; +// namespacing use thiserror::Error; // re-exports @@ -30,31 +25,3 @@ pub enum MsgError { #[error("orion error")] Orion(#[from] orion::errors::UnknownCryptoError), } - -/// uses ring's agreement to generate key material and key -pub async fn initialize_connection( - read: &mut ReadHalf, - write: &mut WriteHalf, -) -> Result { - // create / send agreement key - let rng = rand::SystemRandom::new(); - let my_priv_key = - agreement::EphemeralPrivateKey::generate(&agreement::X25519, &rng).expect("ring broke"); - let my_pub_key = my_priv_key.compute_public_key().expect("ring broke"); - let agreement_packet = ilmp::Agreement::new(my_pub_key.as_ref().into()); - ilmp::write(write, agreement_packet, &encrypt::NoEncrypt::new()).await?; - - // receive peer's pub key - let packet = ilmp::read(read, &encrypt::NoEncrypt::new()).await?.unwrap(); - let agreement_packet = ilmp::Agreement::from_packet(packet)?; - let peer_pub_key = - agreement::UnparsedPublicKey::new(&agreement::X25519, agreement_packet.public_key); - - // generate aead key - agreement::agree_ephemeral(my_priv_key, &peer_pub_key, MsgError::Ring, |key_material| { - let key_material = digest::digest(&digest::SHA256, key_material.as_ref().into()) - .as_ref() - .to_vec(); - Ok(aead::SecretKey::from_slice(&key_material)?) - }) -} diff --git a/src/server.rs b/src/server.rs index 877b5e1..feb5340 100644 --- a/src/server.rs +++ b/src/server.rs @@ -40,7 +40,7 @@ pub async fn server(port: u16) -> Result<()> { let (mut read, mut write) = stream.split(); let stream_id = Uuid::new_v4(); - let key = crate::initialize_connection(&mut read, &mut write).await?; + let key = ilmp::initialize_connection(&mut read, &mut write).await?; let encryption = encrypt::SymmetricEncrypt::new(key); println!("successfully hardened connection");