proof-of-sql 0.129.1

High performance zero knowledge (ZK) prover for SQL.
Documentation
use super::{
    rand_F_tensors, rand_G_vecs, test_rng, ExtendedProverState, G1Projective, G2Projective,
    PublicParameters,
};
use crate::base::polynomial::compute_evaluation_vector;
use ark_ec::{pairing::Pairing, VariableBaseMSM};
use ark_ff::Fp;

#[test]
pub fn we_can_create_an_extended_verifier_state_from_an_extended_prover_state() {
    let mut rng = test_rng();
    let max_nu = 5;
    let pp = PublicParameters::test_rand(max_nu, &mut rng);
    let prover_setup = (&pp).into();
    for nu in 0..max_nu {
        let (v1, v2) = rand_G_vecs(nu, &mut rng);
        let (s1_tensor, s2_tensor) = rand_F_tensors(nu, &mut rng);
        let mut s1 = vec![Fp::default(); 1 << nu];
        let mut s2 = vec![Fp::default(); 1 << nu];
        compute_evaluation_vector(&mut s1, &s1_tensor);
        compute_evaluation_vector(&mut s2, &s2_tensor);
        let extended_prover_state = ExtendedProverState::new_from_tensors(
            s1_tensor.clone(),
            s2_tensor.clone(),
            v1.clone(),
            v2.clone(),
            nu,
        );
        assert_eq!(extended_prover_state.s1, s1);
        assert_eq!(extended_prover_state.s2, s2);
        let extended_verifier_state = extended_prover_state.calculate_verifier_state(&prover_setup);

        let C = Pairing::multi_pairing(&v1, &v2);
        let D_1 = Pairing::multi_pairing(&v1, prover_setup.Gamma_2[nu]);
        let D_2 = Pairing::multi_pairing(prover_setup.Gamma_1[nu], &v2);
        let E_1 = G1Projective::msm_unchecked(&v1, &s2);
        let E_2 = G2Projective::msm_unchecked(&v2, &s1);

        assert_eq!(extended_verifier_state.base_state.C, C);
        assert_eq!(extended_verifier_state.base_state.D_1, D_1);
        assert_eq!(extended_verifier_state.base_state.D_2, D_2);
        assert_eq!(extended_verifier_state.base_state.nu, nu);
        assert_eq!(extended_verifier_state.E_1, E_1);
        assert_eq!(extended_verifier_state.E_2, E_2);
        assert_eq!(extended_verifier_state.s1_tensor, s1_tensor);
        assert_eq!(extended_verifier_state.s2_tensor, s2_tensor);
    }
}