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}