Crate async_psec[][src]

Expand description

Asynchronous PSEC implementation.

PSEC (Peer-to-peer Secure Ephemeral Communications) is a simplification/adaptation of TLS 1.3 for P2P networks which provides an encrypted and authenticated secure transport layer for ephemeral communications. PSEC ensures deniability, forward secrecy, future secrecy, and optional plaintext length obfuscation. This crate is an implementation of this protocol built with the tokio framework.

Usage

Add this in your Cargo.toml:

[dependencies]
async-psec = "0.3"

And then:

use rand::rngs::OsRng;
use tokio::net::TcpStream;
use async_psec::{Session, Identity, PsecReader, PsecWriter, PsecError};

#[tokio::main]
async fn main() -> Result<(), PsecError> {
    let identity = Identity::generate(&mut OsRng); //generate a new PSEC identity

    //connect to another PSEC node listening on 10.152.152.10:7530
    let stream = TcpStream::connect("10.152.152.10:7530").await.unwrap();

    let mut psec_session = Session::from(stream); //wrap the TcpStream into a PSEC session
    psec_session.do_handshake(&identity).await?; //perform the PSEC handshake
    
    //encrypt a message, obfuscate its length with padding then send it
    psec_session.encrypt_and_send(b"Hello I'm Alice", true).await?;
    //receive then decrypt a message
    println!("Received: {:?}", psec_session.receive_and_decrypt().await?);
}

Split Feature

If you want to split the Session struct in two parts, you must enable the split feature:

[dependencies]
async-psec = { version = "0.3", feature = ["split"] }

This can be useful if you want to send data from one thread/task and receive from another in parallel.

Structs

Session

A PSEC connection.

SessionReadHalf

The read half of a PSEC session. Obtained with Session::into_split.

SessionWriteHalf

The write half of a PSEC session. Obtained with Session::into_split.

Enums

PsecError

Errors that can be returned by PSEC operations.

Constants

PUBLIC_KEY_LENGTH

The length of a PSEC public key, in bytes.

Traits

PsecReader

Read from a PSEC session.

PsecWriter

Write to a PSEC session.

Type Definitions

Identity

A PSEC Identity.