ligerito 0.6.2

Ligerito polynomial commitment scheme over binary extension fields
Documentation
use ligerito::{hardcoded_config_20, prove_sha256};
use ligerito_binary_fields::{BinaryElem128, BinaryElem32};
use std::marker::PhantomData;
use std::time::Instant;

fn main() {
    let config = hardcoded_config_20(PhantomData::<BinaryElem32>, PhantomData::<BinaryElem128>);

    let poly: Vec<BinaryElem32> = (0..(1 << 20))
        .map(|i| BinaryElem32::from(i as u32))
        .collect();

    println!("Warming up...");
    let _ = prove_sha256(&config, &poly).unwrap();

    println!("Running benchmark...");
    let mut times = Vec::new();

    for i in 0..5 {
        let start = Instant::now();
        let proof = prove_sha256(&config, &poly).unwrap();
        let elapsed = start.elapsed();
        times.push(elapsed);
        println!(
            "  Run {}: {:?} (proof size: {} bytes)",
            i + 1,
            elapsed,
            proof.size_of()
        );
    }

    let avg = times.iter().map(|d| d.as_millis()).sum::<u128>() / times.len() as u128;
    let min = times.iter().map(|d| d.as_millis()).min().unwrap();
    let max = times.iter().map(|d| d.as_millis()).max().unwrap();

    println!("\nResults for 2^20 proving:");
    println!("  Average: {}ms", avg);
    println!("  Min: {}ms", min);
    println!("  Max: {}ms", max);
    println!("  Threads: {}", rayon::current_num_threads());
}