diff --git a/zebra-chain/src/proofs/groth16.rs b/zebra-chain/src/proofs/groth16.rs index 15c68ed9..ee6d213c 100644 --- a/zebra-chain/src/proofs/groth16.rs +++ b/zebra-chain/src/proofs/groth16.rs @@ -1,5 +1,8 @@ use std::{fmt, io}; +#[cfg(test)] +use proptest::{arbitrary::Arbitrary, collection::vec, prelude::*}; + use crate::serialization::{SerializationError, ZcashDeserialize, ZcashSerialize}; /// An encoding of a Groth16 proof, as used in Zcash. @@ -47,3 +50,21 @@ impl ZcashDeserialize for Groth16Proof { Ok(Self(bytes)) } } + + +#[cfg(test)] +impl Arbitrary for Groth16Proof { + type Parameters = (); + + fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy { + (vec(any::(), 192)) + .prop_map(|v| { + let mut bytes = [0; 192]; + bytes.copy_from_slice(v.as_slice()); + return Self(bytes); + }) + .boxed() + } + + type Strategy = BoxedStrategy; +}