@@ -44,6 +44,45 @@ func FuzzConsistencyProofAndVerify(f *testing.F) {
4444 })
4545}
4646
47+ // Compute and verify subtree consistency proofs
48+ func FuzzSubtreeConsistencyProofAndVerify (f * testing.F ) {
49+ for tSize := 1 ; tSize <= 8 ; tSize ++ {
50+ for size := 1 ; size <= tSize ; size ++ {
51+ for end := 1 ; end <= tSize ; end ++ {
52+ for begin := range end {
53+ f .Add (uint64 (tSize ), uint64 (size ), uint64 (begin ), uint64 (end ))
54+ }
55+ }
56+ }
57+ }
58+ f .Fuzz (func (t * testing.T , treeSize , size , begin , end uint64 ) {
59+ // necessary to restrict size for compile_native_go_fuzzer
60+ if size >= math .MaxUint16 {
61+ return
62+ }
63+ if size > treeSize {
64+ return
65+ }
66+ if err := isSubtreeValid (begin , end ); err != nil {
67+ return
68+ }
69+ t .Logf ("treeSize=%d, size=%d, begin=%d, end=%d" , treeSize , size , begin , end )
70+ if begin > end || end > size {
71+ return
72+ }
73+ tree := newTree (genEntries (treeSize ))
74+ p , err := tree .SubtreeConsistencyProof (begin , end , size )
75+ t .Logf ("proof=%v" , p )
76+ if err != nil {
77+ t .Error (err )
78+ }
79+ err = proof .VerifySubtreeConsistency (tree .hasher , begin , end , size , p , tree .SubtreeHashAt (begin , end ), tree .HashAt (size ))
80+ if err != nil {
81+ t .Error (err )
82+ }
83+ })
84+ }
85+
4786// Compute and verify inclusion proofs
4887func FuzzInclusionProofAndVerify (f * testing.F ) {
4988 for size := range 8 + 1 {
0 commit comments