enigma-protocol 0.1.0

High-level orchestrator that composes the Enigma crates into a production-ready messaging protocol
Documentation
use crate::client::MessengerClient;
use crate::error::{EnigmaProtocolError, Result};
use crate::transport::in_memory_duplex_pair;
use crate::types::{InitiatorOrResponder, SessionBootstrap};
use enigma_identity::LocalIdentity;

pub mod attachment_flow_tests;
pub mod encrypt_decrypt_tests;
pub mod negative_tests;
pub mod session_tests;

pub struct ClientPair {
    pub alice: MessengerClient,
    pub bob: MessengerClient,
}

pub fn setup_clients() -> Result<ClientPair> {
    let alice_identity = LocalIdentity::new("alice").map_err(|_| EnigmaProtocolError::Crypto)?;
    let bob_identity = LocalIdentity::new("bob").map_err(|_| EnigmaProtocolError::Crypto)?;
    let (transport_a, transport_b) = in_memory_duplex_pair(64);
    let mut alice = MessengerClient::new(alice_identity, transport_a);
    let mut bob = MessengerClient::new(bob_identity, transport_b);
    let secret = [7u8; 32];
    alice.ensure_session_with(
        "bob",
        SessionBootstrap::PreSharedSecret {
            secret32: secret,
            role: InitiatorOrResponder::Initiator,
            remote_dh_pub: None,
        },
    )?;
    bob.ensure_session_with(
        "alice",
        SessionBootstrap::PreSharedSecret {
            secret32: secret,
            role: InitiatorOrResponder::Responder,
            remote_dh_pub: None,
        },
    )?;
    Ok(ClientPair { alice, bob })
}