tests/fuzzers: added bn marshaling fuzzers

This commit is contained in:
MariusVanDerWijden 2025-06-17 11:28:02 +02:00
parent 190b236966
commit 4e87e12ec4
3 changed files with 75 additions and 0 deletions

View file

@ -152,6 +152,14 @@ compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
FuzzPair fuzzBn256Pair \
$repo/tests/fuzzers/bn256/bn256_test.go
compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
FuzzUnmarshalG1 fuzzBn256UnmarshalG1 \
$repo/tests/fuzzers/bn256/bn256_test.go
compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/bn256 \
FuzzUnmarshalG2 fuzzBn256UnmarshalG2 \
$repo/tests/fuzzers/bn256/bn256_test.go
compile_fuzzer github.com/ethereum/go-ethereum/tests/fuzzers/txfetcher \
Fuzz fuzzTxfetcher \
$repo/tests/fuzzers/txfetcher/txfetcher_test.go

View file

@ -161,6 +161,61 @@ func fuzzPair(data []byte) int {
return 1
}
func fuzzUnmarshalG1(input []byte) int {
rc := new(cloudflare.G1)
_, errC := rc.Unmarshal(input)
rg := new(google.G1)
_, errG := rg.Unmarshal(input)
rs := new(gnark.G1)
_, errS := rs.Unmarshal(input)
if errC != nil && errG != nil && errS != nil {
return 0 // bad input
}
if errC == nil && errG == nil && errS == nil {
//make sure we unmarshalled the same points:
if !bytes.Equal(rc.Marshal(), rg.Marshal()) {
panic("marshaling mismatch: cloudflare/google")
}
if !bytes.Equal(rc.Marshal(), rs.Marshal()) {
panic("marshaling mismatch: cloudflare/gnark")
}
return 1
} else {
//panic(fmt.Sprintf("error missmatch: cf: %v g: %v gn: %v", errC, errG, errS))
return 0
}
}
func fuzzUnmarshalG2(input []byte) int {
rc := new(cloudflare.G2)
_, errC := rc.Unmarshal(input)
rg := new(google.G2)
_, errG := rg.Unmarshal(input)
rs := new(gnark.G2)
_, errS := rs.Unmarshal(input)
if errC != nil && errG != nil && errS != nil {
return 0 // bad input
}
if errC == nil && errG == nil && errS == nil {
//make sure we unmarshalled the same points:
if !bytes.Equal(rc.Marshal(), rg.Marshal()) {
panic("marshaling mismatch: cloudflare/google")
}
if !bytes.Equal(rc.Marshal(), rs.Marshal()) {
panic("marshaling mismatch: cloudflare/gnark")
}
return 1
} else {
panic(fmt.Sprintf("error missmatch: cf: %v g: %v gn: %v", errC, errG, errS))
}
}
// normalizeGTToGnark scales a Cloudflare/Google GT element by `s`
// so that it can be compared with a gnark GT point.
//

View file

@ -35,3 +35,15 @@ func FuzzPair(f *testing.F) {
fuzzPair(data)
})
}
func FuzzUnmarshalG1(f *testing.F) {
f.Fuzz(func(t *testing.T, data []byte) {
fuzzUnmarshalG1(data)
})
}
func FuzzUnmarshalG2(f *testing.F) {
f.Fuzz(func(t *testing.T, data []byte) {
fuzzUnmarshalG2(data)
})
}