zpay32: allow fuzzer to choose invoice net

We add a parameter to select which network will be used for the fuzz
tests, rather than hardcoding the network.
This commit is contained in:
Matt Morehouse 2023-06-13 11:46:18 -05:00
parent e5fcc57bbc
commit 9200abf96e
No known key found for this signature in database
GPG Key ID: CC8ECA224831C982

View File

@ -7,9 +7,44 @@ import (
"github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg"
) )
// getPrefixAndChainParams selects network chain parameters based on the fuzzer-
// selected input byte "net". 50% of the time mainnet is selected, while the
// other 50% of the time one of the test networks is selected. For each network
// the appropriate invoice HRP prefix is also returned, with a small chance that
// no prefix is returned, allowing the fuzzer to generate invalid prefixes too.
func getPrefixAndChainParams(net byte) (string, *chaincfg.Params) {
switch {
case net == 0x00:
return "", &chaincfg.RegressionNetParams
case net < 0x20:
return "lnbcrt", &chaincfg.RegressionNetParams
case net == 0x20:
return "", &chaincfg.TestNet3Params
case net < 0x40:
return "lntb", &chaincfg.TestNet3Params
case net == 0x40:
return "", &chaincfg.SimNetParams
case net < 0x60:
return "lnsb", &chaincfg.SimNetParams
case net == 0x60:
return "", &chaincfg.SigNetParams
case net < 0x80:
return "lntbs", &chaincfg.SigNetParams
case net == 0x80:
return "", &chaincfg.MainNetParams
default:
return "lnbc", &chaincfg.MainNetParams
}
}
func FuzzDecode(f *testing.F) { func FuzzDecode(f *testing.F) {
f.Fuzz(func(t *testing.T, data string) { f.Fuzz(func(t *testing.T, net byte, data string) {
_, _ = Decode(data, &chaincfg.TestNet3Params) _, chainParams := getPrefixAndChainParams(net)
_, _ = Decode(data, chainParams)
}) })
} }
@ -44,13 +79,14 @@ func appendChecksum(bech string) string {
} }
func FuzzEncode(f *testing.F) { func FuzzEncode(f *testing.F) {
f.Fuzz(func(t *testing.T, data string) { f.Fuzz(func(t *testing.T, net byte, data string) {
// Make it easier for the fuzzer to generate valid invoice // Make it easier for the fuzzer to generate valid invoice
// encodings by adding the required prefix and valid checksum. // encodings by adding the required prefix and valid checksum.
data = "lnbc" + data hrpPrefix, chainParams := getPrefixAndChainParams(net)
data = hrpPrefix + data
data = appendChecksum(data) data = appendChecksum(data)
inv, err := Decode(data, &chaincfg.MainNetParams) inv, err := Decode(data, chainParams)
if err != nil { if err != nil {
return return
} }