mirror of https://github.com/zcash/halo2.git
Merge pull request #654 from zcash/bug-instances-len
`plonk::prover::create_proof`: Check that `circuits` and `instances` have equal lengths
This commit is contained in:
commit
2bdb369393
|
@ -46,6 +46,10 @@ pub fn create_proof<
|
|||
mut rng: R,
|
||||
transcript: &mut T,
|
||||
) -> Result<(), Error> {
|
||||
if circuits.len() != instances.len() {
|
||||
return Err(Error::InvalidInstances);
|
||||
}
|
||||
|
||||
for instance in instances.iter() {
|
||||
if instance.len() != pk.vk.cs.num_instance_columns {
|
||||
return Err(Error::InvalidInstances);
|
||||
|
@ -720,3 +724,64 @@ pub fn create_proof<
|
|||
|
||||
multiopen::create_proof(params, rng, transcript, instances).map_err(|_| Error::Opening)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_proof() {
|
||||
use crate::{
|
||||
circuit::SimpleFloorPlanner,
|
||||
plonk::{keygen_pk, keygen_vk},
|
||||
transcript::{Blake2bWrite, Challenge255},
|
||||
};
|
||||
use pasta_curves::EqAffine;
|
||||
use rand_core::OsRng;
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
struct MyCircuit;
|
||||
|
||||
impl<F: Field> Circuit<F> for MyCircuit {
|
||||
type Config = ();
|
||||
|
||||
type FloorPlanner = SimpleFloorPlanner;
|
||||
|
||||
fn without_witnesses(&self) -> Self {
|
||||
*self
|
||||
}
|
||||
|
||||
fn configure(_meta: &mut ConstraintSystem<F>) -> Self::Config {}
|
||||
|
||||
fn synthesize(
|
||||
&self,
|
||||
_config: Self::Config,
|
||||
_layouter: impl crate::circuit::Layouter<F>,
|
||||
) -> Result<(), Error> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
let params: Params<EqAffine> = Params::new(3);
|
||||
let vk = keygen_vk(¶ms, &MyCircuit).expect("keygen_vk should not fail");
|
||||
let pk = keygen_pk(¶ms, vk, &MyCircuit).expect("keygen_pk should not fail");
|
||||
let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]);
|
||||
|
||||
// Create proof with wrong number of instances
|
||||
let proof = create_proof(
|
||||
¶ms,
|
||||
&pk,
|
||||
&[MyCircuit, MyCircuit],
|
||||
&[],
|
||||
OsRng,
|
||||
&mut transcript,
|
||||
);
|
||||
assert!(matches!(proof.unwrap_err(), Error::InvalidInstances));
|
||||
|
||||
// Create proof with correct number of instances
|
||||
create_proof(
|
||||
¶ms,
|
||||
&pk,
|
||||
&[MyCircuit, MyCircuit],
|
||||
&[&[], &[]],
|
||||
OsRng,
|
||||
&mut transcript,
|
||||
)
|
||||
.expect("proof generation should not fail");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue