Merge pull request #7649 from morehouse/fuzz_lnwire_signature

lnwire: signature parsing/conversion fuzz tests
This commit is contained in:
Oliver Gugger
2023-05-12 18:35:06 +02:00
committed by GitHub
2 changed files with 63 additions and 0 deletions

View File

@@ -54,6 +54,11 @@ unlock or create.
`github.com/golang/protobuf/jsonpb`
module](https://github.com/lightningnetwork/lnd/pull/7659).
## Testing
* [Added fuzz tests](https://github.com/lightningnetwork/lnd/pull/7649) for
signature parsing and conversion.
# Contributors (Alphabetical Order)
* Carla Kirk-Cohen
@@ -62,6 +67,7 @@ unlock or create.
* Erik Arvstedt
* hieblmi
* Jordi Montes
* Matt Morehouse
* Michael Street
* Oliver Gugger
* ziggie1984

View File

@@ -822,3 +822,60 @@ func FuzzCustomMessage(f *testing.F) {
harness(t, data)
})
}
// FuzzParseRawSignature tests that our DER-encoded signature parsing does not
// panic for arbitrary inputs and that serializing and reparsing the signatures
// does not mutate them.
func FuzzParseRawSignature(f *testing.F) {
f.Fuzz(func(t *testing.T, data []byte) {
sig, err := NewSigFromRawSignature(data)
if err != nil {
return
}
sig2, err := NewSigFromRawSignature(sig.ToSignatureBytes())
if err != nil {
t.Fatalf("failed to reparse signature: %v", err)
}
if !reflect.DeepEqual(sig, sig2) {
t.Fatalf("signature mismatch: %v != %v", sig, sig2)
}
})
}
// FuzzConvertFixedSignature tests that conversion of fixed 64-byte signatures
// to DER-encoded signatures does not panic and that parsing and reconverting
// the signatures does not mutate them.
func FuzzConvertFixedSignature(f *testing.F) {
f.Fuzz(func(t *testing.T, data []byte) {
var sig Sig
if len(data) > len(sig) {
return
}
copy(sig[:], data)
derSig, err := sig.ToSignature()
if err != nil {
return
}
sig2, err := NewSigFromSignature(derSig)
if err != nil {
t.Fatalf("failed to parse signature: %v", err)
}
derSig2, err := sig2.ToSignature()
if err != nil {
t.Fatalf("failed to reconvert signature to DER: %v",
err)
}
derBytes := derSig.Serialize()
derBytes2 := derSig2.Serialize()
if !bytes.Equal(derBytes, derBytes2) {
t.Fatalf("signature mismatch: %v != %v", derBytes,
derBytes2)
}
})
}