commonware-cryptography 2026.10.0

Generate keys, sign arbitrary messages, and deterministically verify signatures.
Documentation
use commonware_cryptography::{
    Signer,
    ed25519::PrivateKey,
    handshake::sake::{Context, Error, Version, dial_end, dial_start, listen_end, listen_start},
    transcript::Transcript,
};
use commonware_math::algebra::Random;
use commonware_utils::test_rng;
use criterion::{Criterion, criterion_group};

fn connect() -> Result<(Transcript, Transcript), Error> {
    let mut rng = test_rng();
    let dialer_crypto = PrivateKey::random(&mut rng);
    let listener_crypto = PrivateKey::random(&mut rng);

    let (d_state, msg1) = dial_start(
        &mut rng,
        Context::new(
            b"bench_namespace",
            0,
            0..1,
            dialer_crypto.clone(),
            listener_crypto.public_key(),
            Version::V1,
        ),
    );
    let (l_state, msg2) = listen_start(
        &mut rng,
        Context::new(
            b"bench_namespace",
            0,
            0..1,
            listener_crypto,
            dialer_crypto.public_key(),
            Version::V1,
        ),
        msg1,
    )?;
    let (msg3, dialer) = dial_end(d_state, msg2)?;
    let listener = listen_end(l_state, msg3)?;
    Ok((dialer, listener))
}

fn bench_connect(c: &mut Criterion) {
    c.bench_function(module_path!(), |b| b.iter(|| connect().unwrap()));
}

criterion_group!(benches, bench_connect);