Browse Source

slight refactor

master
Isabelle L. 5 years ago
parent
commit
da9c20fded
2 changed files with 33 additions and 7 deletions
  1. +9
    -1
      src/encrypt.rs
  2. +24
    -6
      src/lib.rs

+ 9
- 1
src/encrypt.rs View File

@@ -1,5 +1,6 @@
use crate::Packet; use crate::Packet;
use orion::aead::SecretKey;
use crate::Result;
use orion::aead::{self, SecretKey};


/// trait that allows for me to be lazy /// trait that allows for me to be lazy
pub trait Encryption { pub trait Encryption {
@@ -34,6 +35,13 @@ impl SymmetricEncrypt {
pub fn new(key: SecretKey) -> SymmetricEncrypt { pub fn new(key: SecretKey) -> SymmetricEncrypt {
SymmetricEncrypt(key) SymmetricEncrypt(key)
} }

/// dear future izzy, this is a really bad idea
pub fn clone(&self) -> Result<SymmetricEncrypt> {
Ok(SymmetricEncrypt::new(aead::SecretKey::from_slice(
self.0.unprotected_as_bytes(),
)?))
}
} }


/// literally not encryption whatsoever /// literally not encryption whatsoever


+ 24
- 6
src/lib.rs View File

@@ -41,6 +41,7 @@ pub trait Sendable: Sized {
} }


/// data to be sent /// data to be sent
#[derive(Debug)]
pub struct Packet { pub struct Packet {
pub kind: PacketKind, pub kind: PacketKind,
pub encrypt_kind: EncryptKind, pub encrypt_kind: EncryptKind,
@@ -52,7 +53,12 @@ impl Packet {
/// create a new `Packet` /// create a new `Packet`
pub fn new(kind: PacketKind, contents: Vec<u8>, encrypt_kind: EncryptKind) -> Packet { pub fn new(kind: PacketKind, contents: Vec<u8>, encrypt_kind: EncryptKind) -> Packet {
let integrity_hash = digest::digest(&digest::SHA256, &contents).as_ref().to_vec(); let integrity_hash = digest::digest(&digest::SHA256, &contents).as_ref().to_vec();
Packet { kind, integrity_hash, contents, encrypt_kind }
Packet {
kind,
integrity_hash,
contents,
encrypt_kind,
}
} }


// generate a checksum from the packet // generate a checksum from the packet
@@ -93,13 +99,19 @@ impl Packet {


/// verifies SHA256 integrity /// verifies SHA256 integrity
pub fn verify_integrity(&self) -> Result<()> { pub fn verify_integrity(&self) -> Result<()> {
let expected = digest::digest(&digest::SHA256, &self.contents).as_ref().to_vec();
let expected = digest::digest(&digest::SHA256, &self.contents)
.as_ref()
.to_vec();


if expected == self.integrity_hash { if expected == self.integrity_hash {
Ok(()) Ok(())
} else { } else {
println!("bad integrity"); println!("bad integrity");
Err(IlmpError::BadHashIntegrity { found: self.integrity_hash.clone(), expected }.into())
Err(IlmpError::BadHashIntegrity {
found: self.integrity_hash.clone(),
expected,
}
.into())
} }
} }


@@ -177,7 +189,12 @@ where
let mut contents: Vec<u8> = vec![0; length]; let mut contents: Vec<u8> = vec![0; length];
stream.read(&mut contents).await?; stream.read(&mut contents).await?;


let packet = Packet { kind, contents, integrity_hash, encrypt_kind };
let packet = Packet {
kind,
contents,
integrity_hash,
encrypt_kind,
};


packet.verify_checksum(checksum)?; packet.verify_checksum(checksum)?;
packet.verify_integrity()?; packet.verify_integrity()?;
@@ -201,8 +218,9 @@ where
EncryptKind::Symmetric => { EncryptKind::Symmetric => {
let mut packet = packet.to_packet(encryption.kind())?; let mut packet = packet.to_packet(encryption.kind())?;
packet.contents = aead::seal(encryption.key().unwrap(), &packet.contents)?; packet.contents = aead::seal(encryption.key().unwrap(), &packet.contents)?;
packet.integrity_hash =
digest::digest(&digest::SHA256, &packet.contents).as_ref().to_vec();
packet.integrity_hash = digest::digest(&digest::SHA256, &packet.contents)
.as_ref()
.to_vec();
let network_packet = packet.to_network_packet(); let network_packet = packet.to_network_packet();
stream.write(&network_packet.0).await?; stream.write(&network_packet.0).await?;
Ok(()) Ok(())


Loading…
Cancel
Save