portal-lib

A small Protocol Library for Portal - An encrypted file transfer utility

This crate enables a consumer to:

Example of SPAKE2 key negotiation:

```rust // receiver let dir = Some(Direction::Receiver); let pass ="test".tostring(); let (mut receiver,receivermsg) = Portal::init(dir,"id".to_string(),pass,None);

// sender let dir = Some(Direction::Sender); let pass ="test".tostring(); let (mut sender,sendermsg) = Portal::init(dir,"id".to_string(),pass,None);

receiver.confirmpeer(&sendermsg).unwrap(); sender.confirmpeer(&receivermsg).unwrap();

assert_eq!(receiver.key,sender.key); ```

Example of Sending a file:

```rust // open file read-only for sending let mut file = portal.load_file(fpath)?;

// Encrypt the file and share state file.encrypt()?; file.syncfilestate(&mut client)?;

// Get an iterator over the file in chunks let chunks = portal.getchunks(&file,portal::CHUNKSIZE);

// Iterate over the chunks sending the via the client TcpStream for data in chunks.intoiter() { client.writeall(&data)?; total += data.len(); } ```

Example of Receiving a file:

```rust // create outfile let mut file = portal.create_file(&fname, fsize)?;

// Receive until connection is done let len = match file.downloadfile(&client,|x| {pb.setposition(x)})?;

assert_eq!(len as u64, fsize);

// Decrypt the file file.decrypt()?; ```