pub trait SNARKVerifierGadget<N: SNARK, F: Field> {
type VerificationKeyGadget: AllocGadget<N::VerifyingKey, F> + AllocBytesGadget<Vec<u8>, F> + ToBytesGadget<F>;
type ProofGadget: AllocGadget<N::Proof, F> + AllocBytesGadget<Vec<u8>, F>;
type Input: ToBitsBEGadget<F> + Clone + ?Sized;
fn check_verify<'a, CS: ConstraintSystem<F>, I: Iterator<Item = Self::Input>>(
cs: CS,
verification_key: &Self::VerificationKeyGadget,
input: I,
proof: &Self::ProofGadget
) -> Result<(), SynthesisError>;
}
impl<Pairing: PairingEngine, F: Field, P: PairingGadget<Pairing, F>, C: ConstraintSynthesizer<Pairing::Fr>, V: ToConstraintField<Pairing::Fr>> SNARKVerifierGadget<GM17<Pairing, C, V>, F> for GM17VerifierGadget<Pairing, F, P>
impl<PairingE, ConstraintF, P, C, V> SNARKVerifierGadget<Groth16<PairingE, C, V>, ConstraintF> for Groth16VerifierGadget<PairingE, ConstraintF, P> where
PairingE: PairingEngine,
ConstraintF: Field,
C: ConstraintSynthesizer<PairingE::Fr>,
V: ToConstraintField<PairingE::Fr>,
P: PairingGadget<PairingE, ConstraintF>,