commonware-cryptography 2026.10.0

Generate keys, sign arbitrary messages, and deterministically verify signatures.
Documentation
use commonware_cryptography::{Hasher, Sha256};
use commonware_parallel::Sequential;
use commonware_utils::test_rng;
use criterion::{Criterion, criterion_group};
use rand::Rng;
use std::hint::black_box;

fn bench_hash_pair(c: &mut Criterion) {
    let mut sampler = test_rng();
    let mut messages = [[0u8; 72]; 2];
    for message in &mut messages {
        sampler.fill_bytes(message);
    }
    for (shape, parts) in [
        (
            "bmt",
            messages
                .each_ref()
                .map(|message| vec![&message[..32], &message[32..64]]),
        ),
        (
            "mmr",
            messages
                .each_ref()
                .map(|message| vec![&message[..8], &message[8..40], &message[40..]]),
        ),
    ] {
        c.bench_function(&format!("{}/shape={shape}", module_path!()), |b| {
            b.iter(|| Sha256::hash_pair(black_box(&parts[0]), black_box(&parts[1]), &Sequential));
        });
    }
}

criterion_group!(benches, bench_hash_pair);