From ddf0571031092d9c5e1aad305127a4e186d16b72 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Fri, 6 May 2022 12:29:12 +0200 Subject: [PATCH 1/3] itest: cover musig2 combine without all signatures ready --- lntest/itest/lnd_taproot_test.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lntest/itest/lnd_taproot_test.go b/lntest/itest/lnd_taproot_test.go index 589b75e8e..4492bf973 100644 --- a/lntest/itest/lnd_taproot_test.go +++ b/lntest/itest/lnd_taproot_test.go @@ -902,6 +902,20 @@ func testTaprootMuSig2CombinedLeafKeySpend(ctxt context.Context, t *harnessTest, ) require.NoError(t.t, err) + // Before we have all partial signatures, we shouldn't get a final + // signature back. + combineSigResp, err := alice.SignerClient.MuSig2CombineSig( + ctxt, &signrpc.MuSig2CombineSigRequest{ + SessionId: sessResp1.SessionId, + OtherPartialSignatures: [][]byte{ + signResp2.LocalPartialSignature, + }, + }, + ) + require.NoError(t.t, err) + require.False(t.t, combineSigResp.HaveAllSignatures) + require.Empty(t.t, combineSigResp.FinalSignature) + signResp3, err := alice.SignerClient.MuSig2Sign( ctxt, &signrpc.MuSig2SignRequest{ SessionId: sessResp3.SessionId, @@ -935,7 +949,6 @@ func testTaprootMuSig2CombinedLeafKeySpend(ctxt context.Context, t *harnessTest, ctxt, &signrpc.MuSig2CombineSigRequest{ SessionId: sessResp1.SessionId, OtherPartialSignatures: [][]byte{ - signResp2.LocalPartialSignature, signResp3.LocalPartialSignature, }, }, From c4c188f6d9f85a92cb4a423a9d99402892b9a991 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Thu, 5 May 2022 20:20:03 +0200 Subject: [PATCH 2/3] signer: fix crash when musig combine doesn't have final sig --- lnrpc/signrpc/signer_server.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lnrpc/signrpc/signer_server.go b/lnrpc/signrpc/signer_server.go index ba98f276d..36a9de6fa 100644 --- a/lnrpc/signrpc/signer_server.go +++ b/lnrpc/signrpc/signer_server.go @@ -938,10 +938,15 @@ func (s *Server) MuSig2CombineSig(_ context.Context, return nil, fmt.Errorf("error combining signatures: %v", err) } - return &MuSig2CombineSigResponse{ + resp := &MuSig2CombineSigResponse{ HaveAllSignatures: haveAllSigs, - FinalSignature: finalSig.Serialize(), - }, nil + } + + if haveAllSigs { + resp.FinalSignature = finalSig.Serialize() + } + + return resp, err } // MuSig2Cleanup removes a session from memory to free up resources. From bbe953d70dcd9911510f71deb6fc977953703eff Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Thu, 5 May 2022 20:21:36 +0200 Subject: [PATCH 3/3] docs: update release notes 0.15.0 --- docs/release-notes/release-notes-0.15.0.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/release-notes/release-notes-0.15.0.md b/docs/release-notes/release-notes-0.15.0.md index 658ee46fd..d7485c7d8 100644 --- a/docs/release-notes/release-notes-0.15.0.md +++ b/docs/release-notes/release-notes-0.15.0.md @@ -85,6 +85,8 @@ to Bitcoin nodes that advertise a Tor v3 onion service address. * [Fixed an edge case where the lnd might be stuck at starting due to channel arbitrator relying on htlcswitch to be started first](https://github.com/lightningnetwork/lnd/pull/6214). + +* [Fixed crash in MuSig2Combine](https://github.com/lightningnetwork/lnd/pull/6502) ## Neutrino