diff --git a/src/lib.rs b/src/lib.rs index 41180a3..65366eb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,8 +10,8 @@ use deserializer::{deserialize_proof_with_pubs, deserialize_vk}; use plonky2::field::extension::Extendable; use plonky2::hash::hash_types::RichField; -use plonky2::plonk::config::GenericConfig; -use plonky2::util::serialization::GateSerializer; +use plonky2::plonk::config::{GenericConfig, KeccakGoldilocksConfig, PoseidonGoldilocksConfig}; +use plonky2::util::serialization::{DefaultGateSerializer, GateSerializer}; use snafu::Snafu; pub use deserializer::DeserializeError; @@ -54,3 +54,23 @@ where vk.verify(proof).map_err(|_| VerifyError::Failure) } + +/// Verification with preset Poseidon over Goldilocks config available in `plonky2`. +/// Uses `DefaultGateSerializer`. +pub fn verify_default_poseidon(vk: &[u8], proof: &[u8], pubs: &[u8]) -> Result<(), VerifyError> { + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + verify::(vk, proof, pubs, &DefaultGateSerializer) +} + +/// Verification with preset Keccak over Goldilocks config available in `plonky2`. +/// Uses `DefaultGateSerializer`. +pub fn verify_default_keccak(vk: &[u8], proof: &[u8], pubs: &[u8]) -> Result<(), VerifyError> { + const D: usize = 2; + type C = KeccakGoldilocksConfig; + type F = >::F; + + verify::(vk, proof, pubs, &DefaultGateSerializer) +} diff --git a/tests/integration.rs b/tests/integration.rs index 9f266e6..657689c 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,9 +1,7 @@ #[path = "artifacts_generator.rs"] mod artifacts_generator; -use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; -use plonky2::util::serialization::DefaultGateSerializer; -use plonky2_verifier::{verify, DeserializeError, VerifyError}; +use plonky2_verifier::{verify_default_poseidon, DeserializeError, VerifyError}; use std::path::Path; const PROOF_PATH: &str = "tests/artifacts/proof.bin"; @@ -31,24 +29,10 @@ fn load_data() -> Result { Ok((vk, proof, pubs)) } -/// Helper to run `verify` with preset types. -fn verify_non_generic(vk: &Vec, proof: &Vec, pubs: &Vec) -> Result<(), VerifyError> { - const D: usize = 2; - type C = PoseidonGoldilocksConfig; - type F = >::F; - - verify::( - vk.as_slice(), - proof.as_slice(), - pubs.as_slice(), - &DefaultGateSerializer, - ) -} - #[test] fn should_verify_valid_proof() { let (vk, proof, pubs) = load_data().expect("Failed to load data"); - assert!(verify_non_generic(&vk, &proof, &pubs).is_ok()); + assert!(verify_default_poseidon(&vk, &proof, &pubs).is_ok()); } #[test] @@ -59,7 +43,7 @@ fn should_not_deserialize_invalid_pubs() { assert!( matches!( - verify_non_generic(&vk, &proof, &pubs), + verify_default_poseidon(&vk, &proof, &pubs), Err(VerifyError::InvalidData { cause: DeserializeError::InvalidProof }) @@ -77,7 +61,7 @@ fn should_not_verify_false_proof() { assert!( matches!( - verify_non_generic(&vk, &proof, &pubs), + verify_default_poseidon(&vk, &proof, &pubs), Err(VerifyError::Failure { .. }) ), "Expected a Failure error when `proof` is corrupted"