瀏覽代碼

slight refactor

master
Isabelle L. 5 年之前
父節點
當前提交
da9c20fded
共有 2 個文件被更改,包括 33 次插入7 次删除
  1. +9
    -1
      src/encrypt.rs
  2. +24
    -6
      src/lib.rs

+ 9
- 1
src/encrypt.rs 查看文件

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

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


+ 24
- 6
src/lib.rs 查看文件

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

/// data to be sent
#[derive(Debug)]
pub struct Packet {
pub kind: PacketKind,
pub encrypt_kind: EncryptKind,
@@ -52,7 +53,12 @@ impl Packet {
/// create a new `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();
Packet { kind, integrity_hash, contents, encrypt_kind }
Packet {
kind,
integrity_hash,
contents,
encrypt_kind,
}
}

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

/// verifies SHA256 integrity
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 {
Ok(())
} else {
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];
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_integrity()?;
@@ -201,8 +218,9 @@ where
EncryptKind::Symmetric => {
let mut packet = packet.to_packet(encryption.kind())?;
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();
stream.write(&network_packet.0).await?;
Ok(())


Loading…
取消
儲存