@@ -165,6 +165,19 @@ impl MerkleClaimAndProofTarget {
165165 pw. set_target_arr ( & self . value . elements , & mp. value . 0 ) ?;
166166 pw. set_bool_target ( self . existence , mp. proof . existence ) ?;
167167
168+ // pad siblings with zeros to length max_depth
169+ assert ! ( mp. proof. siblings. len( ) <= self . max_depth) ;
170+ for ( i, sibling) in mp
171+ . proof
172+ . siblings
173+ . iter ( )
174+ . chain ( iter:: repeat ( & EMPTY_HASH ) )
175+ . take ( self . max_depth )
176+ . enumerate ( )
177+ {
178+ pw. set_hash_target ( self . siblings [ i] , HashOut :: from_vec ( sibling. 0 . to_vec ( ) ) ) ?;
179+ }
180+
168181 assert_eq ! ( mp. proof. siblings. len( ) , self . max_depth) ;
169182 for ( i, sibling) in mp. proof . siblings . iter ( ) . enumerate ( ) {
170183 pw. set_hash_target ( self . siblings [ i] , HashOut :: from_vec ( sibling. 0 . to_vec ( ) ) ) ?;
@@ -259,9 +272,15 @@ impl MerkleProofExistenceTarget {
259272 pw. set_target_arr ( & self . value . elements , & mp. value . 0 ) ?;
260273
261274 // pad siblings with zeros to length max_depth
262- assert_eq ! ( mp. proof. siblings. len( ) , self . max_depth) ;
263-
264- for ( i, sibling) in mp. proof . siblings . iter ( ) . enumerate ( ) {
275+ assert ! ( mp. proof. siblings. len( ) <= self . max_depth) ;
276+ for ( i, sibling) in mp
277+ . proof
278+ . siblings
279+ . iter ( )
280+ . chain ( iter:: repeat ( & EMPTY_HASH ) )
281+ . take ( self . max_depth )
282+ . enumerate ( )
283+ {
265284 pw. set_hash_target ( self . siblings [ i] , HashOut :: from_vec ( sibling. 0 . to_vec ( ) ) ) ?;
266285 }
267286
@@ -515,7 +534,7 @@ pub mod tests {
515534 let targets = MerkleProofGadget { max_depth } . eval ( & mut builder) ?;
516535 targets. set_targets (
517536 & mut pw,
518- & MerkleClaimAndProof :: new ( max_depth , tree. root ( ) , key, Some ( value) , & proof) ? ,
537+ & MerkleClaimAndProof :: new ( tree. root ( ) , key, Some ( value) , proof) ,
519538 ) ?;
520539
521540 // generate & verify proof
@@ -560,7 +579,7 @@ pub mod tests {
560579 let targets = MerkleProofExistenceGadget { max_depth } . eval ( & mut builder) ?;
561580 targets. set_targets (
562581 & mut pw,
563- & MerkleClaimAndProof :: new ( max_depth , tree. root ( ) , key, Some ( value) , & proof) ? ,
582+ & MerkleClaimAndProof :: new ( tree. root ( ) , key, Some ( value) , proof) ,
564583 ) ?;
565584
566585 // generate & verify proof
@@ -634,7 +653,7 @@ pub mod tests {
634653 let targets = MerkleProofGadget { max_depth } . eval ( & mut builder) ?;
635654 targets. set_targets (
636655 & mut pw,
637- & MerkleClaimAndProof :: new ( max_depth , tree. root ( ) , key, Some ( value) , & proof) ? ,
656+ & MerkleClaimAndProof :: new ( tree. root ( ) , key, Some ( value) , proof) ,
638657 ) ?;
639658
640659 // generate & verify proof
@@ -677,7 +696,7 @@ pub mod tests {
677696
678697 let targets = MerkleProofGadget { max_depth } . eval ( & mut builder) ?;
679698 // verification enabled & proof of existence
680- let mut mp = MerkleClaimAndProof :: new ( max_depth , tree2. root ( ) , key, Some ( value) , & proof) ? ;
699+ let mut mp = MerkleClaimAndProof :: new ( tree2. root ( ) , key, Some ( value) , proof) ;
681700 targets. set_targets ( & mut pw, & mp) ?;
682701
683702 // generate proof, expecting it to fail (since we're using the wrong
0 commit comments