From 9ca9fde47d732aeb4aaa41703976b503a68a5300 Mon Sep 17 00:00:00 2001 From: Isabelle L Date: Wed, 27 May 2020 19:58:26 -0500 Subject: [PATCH] adjusted `initialize_connection` so errors aren't potentially panicking --- Cargo.toml | 4 ++-- src/lib.rs | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b467a5b..0a06106 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,13 +5,13 @@ authors = ["Isabelle L. "] edition = "2018" [dependencies] -serde = { version = "1.0.110", features = ["derive"]} +serde = { version = "1.0.110", features = ["derive"] } serde_json = "1.0.53" futures = "0.3.5" futures-util = "0.3.5" uuid = { version = "0.8.1", features = ["v4"] } chrono = "0.4.11" -ring = "0.16.13" +ring = { version = "0.16.13", features = ["std"] } anyhow = "1.0.30" thiserror = "1.0.17" crc32fast = "1.2.0" diff --git a/src/lib.rs b/src/lib.rs index 9b6810a..d30e571 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -40,7 +40,9 @@ struct NetworkPacket(Vec); /// a type of data that can be sent pub trait Sendable: Sized { + /// create a packet from the struct fn to_packet(&self, encrypt_kind: EncryptKind) -> Result; + /// create the struct from a packet fn from_packet(packet: Packet) -> Result; } @@ -169,7 +171,7 @@ pub enum IlmpError { #[error("orion error")] Orion(#[from] orion::errors::UnknownCryptoError), #[error("ring fucking broke")] - Ring, + Ring(#[from] ring::error::Unspecified), } /// reads a `Packet` from a stream @@ -249,9 +251,8 @@ where { // create / send agree key let rng = rand::SystemRandom::new(); - let my_priv_key = - agree::EphemeralPrivateKey::generate(&agree::X25519, &rng).expect("ring broke"); - let my_pub_key = my_priv_key.compute_public_key().expect("ring broke"); + let my_priv_key = agree::EphemeralPrivateKey::generate(&agree::X25519, &rng)?; + let my_pub_key = my_priv_key.compute_public_key()?; let agree_packet = Agreement::new(my_pub_key.as_ref().into()); crate::write(write, agree_packet, &encrypt::NoEncrypt::new()).await?; @@ -266,7 +267,7 @@ where agree::agree_ephemeral( my_priv_key, &peer_pub_key, - IlmpError::Ring, + IlmpError::Ring(ring::error::Unspecified), |key_material| { let key_material = digest::digest(&digest::SHA256, key_material.as_ref().into()) .as_ref()