ekzg_single_open/
lib.rs

1mod errors;
2pub use errors::VerifierError;
3
4pub mod prover;
5pub mod verifier;
6
7fn bitreverse(mut n: u32, l: u32) -> u32 {
8    let mut r = 0;
9    for _ in 0..l {
10        r = (r << 1) | (n & 1);
11        n >>= 1;
12    }
13    r
14}
15
16pub fn bitreverse_slice<T>(a: &mut [T]) {
17    if a.is_empty() {
18        return;
19    }
20
21    let n = a.len();
22    let log_n = n.ilog2();
23    assert_eq!(n, 1 << log_n);
24
25    for k in 0..n {
26        let rk = bitreverse(k as u32, log_n) as usize;
27        if k < rk {
28            a.swap(rk, k);
29        }
30    }
31}