arnaucube
arnaucube/sonobePublic Self-hosted repository
sonobe/src/folding/protogalaxy/utils.rs
src/folding/protogalaxy/utils.rsRaw
 1use ark_ff::PrimeField;
 2
 3// returns (b, b^2, b^4, ..., b^{2^{t-1}})
 4pub fn exponential_powers<F: PrimeField>(b: F, t: usize) -> Vec<F> {
 5    let mut r = vec![F::zero(); t];
 6    r[0] = b;
 7    for i in 1..t {
 8        r[i] = r[i - 1].square();
 9    }
10    r
11}
12pub fn all_powers<F: PrimeField>(a: F, n: usize) -> Vec<F> {
13    let mut r = vec![F::zero(); n];
14    for (i, r_i) in r.iter_mut().enumerate() {
15        *r_i = a.pow([i as u64]);
16    }
17    r
18}
19
20// returns a vector containing βᵢ* = βᵢ + α ⋅ δᵢ
21pub fn betas_star<F: PrimeField>(betas: &[F], deltas: &[F], alpha: F) -> Vec<F> {
22    betas
23        .iter()
24        .zip(
25            deltas
26                .iter()
27                .map(|delta_i| alpha * delta_i)
28                .collect::<Vec<F>>(),
29        )
30        .map(|(beta_i, delta_i_alpha)| *beta_i + delta_i_alpha)
31        .collect()
32}