stwo 2.3.0

Core library implementing the Circle STARK prover and verifier
Documentation
use itertools::Itertools;
use starknet_ff::FieldElement as FieldElement252;

use super::CpuBackend;
use crate::core::fields::m31::BaseField;
use crate::core::vcs::poseidon252_merkle::Poseidon252MerkleHasher;
use crate::core::vcs::MerkleHasher;
use crate::prover::vcs::ops::MerkleOps;

impl MerkleOps<Poseidon252MerkleHasher> for CpuBackend {
    fn commit_on_layer(
        log_size: u32,
        prev_layer: Option<&Vec<FieldElement252>>,
        columns: &[&Vec<BaseField>],
    ) -> Vec<FieldElement252> {
        (0..(1 << log_size))
            .map(|i| {
                Poseidon252MerkleHasher::hash_node(
                    prev_layer.map(|prev_layer| (prev_layer[2 * i], prev_layer[2 * i + 1])),
                    &columns.iter().map(|column| column[i]).collect_vec(),
                )
            })
            .collect()
    }
}