proofman-verifier 1.1.0-alpha

STARK proof verifier with Poseidon transcripts for the PIL2 proofman framework
#![cfg_attr(not(feature = "std"), no_std)]

extern crate alloc;

#[macro_use]
mod log;

mod proof;
mod verifier;

pub mod poseidon1 {
    pub mod recursive2_verifier;
    pub mod vadcop_final;
    pub mod vadcop_final_compressed;
}

pub mod poseidon2 {
    pub mod recursive2_verifier;
    pub mod vadcop_final;
    pub mod vadcop_final_compressed;
}

pub use proof::*;
pub use verifier::*;

pub trait Verifier: Sync {
    fn verify_recursive2(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool;
    fn verify_recursive2_u64(&self, proof: &[u64], vk: &[u64]) -> bool;
    fn verify_vadcop_final(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool;
    fn verify_vadcop_final_u64(&self, proof: &[u64], vk: &[u64]) -> bool;
    fn verify_vadcop_final_compressed(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool;
    fn verify_vadcop_final_compressed_u64(&self, proof: &[u64], vk: &[u64]) -> bool;
    fn expected_vadcop_final_proof_bytes(&self) -> usize;
    fn expected_vadcop_final_compressed_proof_bytes(&self) -> usize;
}

pub struct Poseidon1Verifier;
pub struct Poseidon2Verifier;

impl Verifier for Poseidon1Verifier {
    fn verify_recursive2(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon1::recursive2_verifier::verify(proof, vk)
    }
    fn verify_recursive2_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon1::recursive2_verifier::verify_u64(proof, vk)
    }
    fn verify_vadcop_final(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon1::vadcop_final::verify(proof, vk)
    }
    fn verify_vadcop_final_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon1::vadcop_final::verify_u64(proof, vk)
    }
    fn verify_vadcop_final_compressed(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon1::vadcop_final_compressed::verify(proof, vk)
    }
    fn verify_vadcop_final_compressed_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon1::vadcop_final_compressed::verify_u64(proof, vk)
    }
    fn expected_vadcop_final_proof_bytes(&self) -> usize {
        poseidon1::vadcop_final::expected_proof_bytes()
    }
    fn expected_vadcop_final_compressed_proof_bytes(&self) -> usize {
        poseidon1::vadcop_final_compressed::expected_proof_bytes()
    }
}

impl Verifier for Poseidon2Verifier {
    fn verify_recursive2(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon2::recursive2_verifier::verify(proof, vk)
    }
    fn verify_recursive2_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon2::recursive2_verifier::verify_u64(proof, vk)
    }
    fn verify_vadcop_final(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon2::vadcop_final::verify(proof, vk)
    }
    fn verify_vadcop_final_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon2::vadcop_final::verify_u64(proof, vk)
    }
    fn verify_vadcop_final_compressed(&self, proof: &VadcopFinalProof, vk: &[u64]) -> bool {
        poseidon2::vadcop_final_compressed::verify(proof, vk)
    }
    fn verify_vadcop_final_compressed_u64(&self, proof: &[u64], vk: &[u64]) -> bool {
        poseidon2::vadcop_final_compressed::verify_u64(proof, vk)
    }
    fn expected_vadcop_final_proof_bytes(&self) -> usize {
        poseidon2::vadcop_final::expected_proof_bytes()
    }
    fn expected_vadcop_final_compressed_proof_bytes(&self) -> usize {
        poseidon2::vadcop_final_compressed::expected_proof_bytes()
    }
}

pub fn verifier(hash_id: &str) -> &'static dyn Verifier {
    match hash_id {
        "Poseidon1" => &Poseidon1Verifier,
        "Poseidon2" => &Poseidon2Verifier,
        other => panic!("Unknown hash family: {other:?}"),
    }
}