From a6a7066454980370b0d06845cdb53aba32975d7e Mon Sep 17 00:00:00 2001 From: Matt Morehouse Date: Thu, 27 Apr 2023 15:25:13 -0500 Subject: [PATCH 1/3] lnwire: add FuzzParseRawSignature test Test parsing and serialization of raw DER-encoded signatures. --- lnwire/fuzz_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lnwire/fuzz_test.go b/lnwire/fuzz_test.go index f578663a3..b1392881e 100644 --- a/lnwire/fuzz_test.go +++ b/lnwire/fuzz_test.go @@ -822,3 +822,24 @@ 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) + } + }) +} From e198e6693fa281d448540f2ffabb09ef237f8499 Mon Sep 17 00:00:00 2001 From: Matt Morehouse Date: Fri, 28 Apr 2023 10:20:08 -0500 Subject: [PATCH 2/3] lnwire: add FuzzConvertFixedSignature test Test conversion of fixed 64-byte signatures to DER-encoded signatures. --- lnwire/fuzz_test.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lnwire/fuzz_test.go b/lnwire/fuzz_test.go index b1392881e..53f152328 100644 --- a/lnwire/fuzz_test.go +++ b/lnwire/fuzz_test.go @@ -843,3 +843,39 @@ func FuzzParseRawSignature(f *testing.F) { } }) } + +// 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) + } + }) +} From 55aa7a7bb210dbfc0e1ccd1a5695fb887625b7d7 Mon Sep 17 00:00:00 2001 From: Matt Morehouse Date: Thu, 11 May 2023 16:58:39 -0500 Subject: [PATCH 3/3] docs: release note for #7649 --- docs/release-notes/release-notes-0.17.0.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index cba104f89..a6fda9f46 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -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