commonware-cryptography 2026.9.0

Generate keys, sign arbitrary messages, and deterministically verify signatures.
Documentation
use commonware_cryptography::bls12381::{
    primitives::{ops, variant::MinSig},
    tle::{Block, decrypt, encrypt},
};
use commonware_utils::test_rng;
use criterion::{BatchSize, Criterion, criterion_group};
use std::hint::black_box;

fn bench_tle_decrypt(c: &mut Criterion) {
    let mut rng = test_rng();
    let (master_secret, master_public) = ops::keypair::<_, MinSig>(&mut rng);
    let target = 10u64.to_be_bytes();
    let message = Block::new([0x42u8; 32]);
    let signature = ops::sign_message::<MinSig>(&master_secret, b"_BENCH_TLE_", &target);

    c.bench_function(module_path!(), |b| {
        b.iter_batched(
            || {
                encrypt::<_, MinSig>(&mut rng, master_public, (b"_BENCH_TLE_", &target), &message)
                    .expect("encryption should succeed")
            },
            |ciphertext| {
                black_box(decrypt::<MinSig>(&signature, &ciphertext).unwrap());
            },
            BatchSize::SmallInput,
        );
    });
}

criterion_group! {
    name = benches;
    config = Criterion::default().sample_size(10);
    targets = bench_tle_decrypt
}