ソースを参照

minor changes when working with the actual server/client

master
Isabelle L. 5年前
コミット
9ec1604849
1個のファイルの変更6行の追加21行の削除
  1. +6
    -21
      src/lib.rs

+ 6
- 21
src/lib.rs ファイルの表示

@@ -35,7 +35,7 @@ pub trait Sendable: Sized {


/// data to be sent /// data to be sent
pub struct Packet { pub struct Packet {
kind: PacketKind,
pub kind: PacketKind,
integrity_hash: Vec<u8>, integrity_hash: Vec<u8>,
contents: Vec<u8>, contents: Vec<u8>,
} }
@@ -44,11 +44,7 @@ impl Packet {
/// create a new `Packet` /// create a new `Packet`
pub fn new(kind: PacketKind, contents: Vec<u8>) -> Packet { pub fn new(kind: PacketKind, contents: Vec<u8>) -> 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,
}
Packet { kind, integrity_hash, contents }
} }


// generate a checksum from the packet // generate a checksum from the packet
@@ -86,18 +82,12 @@ 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 {
Err(IlmpError::BadHashIntegrity {
found: self.integrity_hash.clone(),
expected,
}
.into())
Err(IlmpError::BadHashIntegrity { found: self.integrity_hash.clone(), expected }.into())
} }
} }


@@ -118,7 +108,6 @@ impl Packet {
#[repr(u8)] #[repr(u8)]
pub enum PacketKind { pub enum PacketKind {
Message = 0, Message = 0,
PublicKey = 1,
} }


impl PacketKind { impl PacketKind {
@@ -162,7 +151,7 @@ where


let kind = PacketKind::from_u8(info_buf[0]).unwrap(); let kind = PacketKind::from_u8(info_buf[0]).unwrap();
let length = u64::from_le_bytes(info_buf[1..9].try_into().unwrap()) as usize; let length = u64::from_le_bytes(info_buf[1..9].try_into().unwrap()) as usize;
let checksum = u32::from_le_bytes(info_buf[10..14].try_into().unwrap());
let checksum = u32::from_le_bytes(info_buf[9..13].try_into().unwrap());


let mut integrity_hash: Vec<u8> = vec![0; 32]; let mut integrity_hash: Vec<u8> = vec![0; 32];
stream.read(&mut integrity_hash).await?; stream.read(&mut integrity_hash).await?;
@@ -170,11 +159,7 @@ 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,
};
let packet = Packet { kind, contents, integrity_hash };
packet.verify_integrity()?; packet.verify_integrity()?;
packet.verify_checksum(checksum)?; packet.verify_checksum(checksum)?;




読み込み中…
キャンセル
保存