diff --git a/lntemp/rpc/signer.go b/lntemp/rpc/signer.go index 58cfb6f5f..4955003eb 100644 --- a/lntemp/rpc/signer.go +++ b/lntemp/rpc/signer.go @@ -147,3 +147,33 @@ func (h *HarnessRPC) MuSig2Cleanup( return resp } + +// SignMessageSigner makes a RPC call to the node's SignerClient and asserts. +// +// NOTE: there's already `SignMessage` in `h.LN`. +func (h *HarnessRPC) SignMessageSigner( + req *signrpc.SignMessageReq) *signrpc.SignMessageResp { + + ctxt, cancel := context.WithTimeout(h.runCtx, DefaultTimeout) + defer cancel() + + resp, err := h.Signer.SignMessage(ctxt, req) + h.NoError(err, "SignMessage") + + return resp +} + +// VerifyMessageSigner makes a RPC call to the node's SignerClient and asserts. +// +// NOTE: there's already `VerifyMessageSigner` in `h.LN`. +func (h *HarnessRPC) VerifyMessageSigner( + req *signrpc.VerifyMessageReq) *signrpc.VerifyMessageResp { + + ctxt, cancel := context.WithTimeout(h.runCtx, DefaultTimeout) + defer cancel() + + resp, err := h.Signer.VerifyMessage(ctxt, req) + h.NoError(err, "VerifyMessage") + + return resp +} diff --git a/lntest/itest/list_on_test.go b/lntest/itest/list_on_test.go index d4ff5e011..674cd96b8 100644 --- a/lntest/itest/list_on_test.go +++ b/lntest/itest/list_on_test.go @@ -449,4 +449,8 @@ var allTestCasesTemp = []*lntemp.TestCase{ Name: "sign output raw", TestFunc: testSignOutputRaw, }, + { + Name: "sign verify message", + TestFunc: testSignVerifyMessage, + }, } diff --git a/lntest/itest/lnd_signer_test.go b/lntest/itest/lnd_signer_test.go index 50d7a242e..f43f0ee11 100644 --- a/lntest/itest/lnd_signer_test.go +++ b/lntest/itest/lnd_signer_test.go @@ -2,9 +2,7 @@ package itest import ( "bytes" - "context" "crypto/sha256" - "fmt" "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/btcec/v2/schnorr" @@ -17,7 +15,6 @@ import ( "github.com/lightningnetwork/lnd/lnrpc/walletrpc" "github.com/lightningnetwork/lnd/lntemp" "github.com/lightningnetwork/lnd/lntemp/node" - "github.com/lightningnetwork/lnd/lntest" "github.com/stretchr/testify/require" ) @@ -362,42 +359,17 @@ func assertSignOutputRaw(ht *lntemp.HarnessTest, ht.MineBlocksAndAssertNumTxes(1, 1) } -// deriveCustomizedKey uses the family and index to derive a public key from -// the node's walletkit client. -func deriveCustomizedKey(ctx context.Context, node *lntest.HarnessNode, - keyLoc *signrpc.KeyLocator) (*btcec.PublicKey, error) { - - ctxt, cancel := context.WithTimeout(ctx, defaultTimeout) - defer cancel() - - resp, err := node.WalletKitClient.DeriveKey(ctxt, keyLoc) - if err != nil { - return nil, fmt.Errorf("failed to derive key: %v", err) - } - pub, err := btcec.ParsePubKey(resp.RawKeyBytes) - if err != nil { - return nil, fmt.Errorf("failed to parse node pubkey: %v", err) - } - return pub, nil -} - // testSignVerifyMessage makes sure that the SignMessage RPC can be used with // all custom flags by verifying with VerifyMessage. Tests both ECDSA and // Schnorr signatures. -func testSignVerifyMessage(net *lntest.NetworkHarness, t *harnessTest) { - runSignVerifyMessage(t, net, net.Alice) +func testSignVerifyMessage(ht *lntemp.HarnessTest) { + runSignVerifyMessage(ht, ht.Alice) } -// runSignVerifyMessage makes sure that the SignMessage RPC can be used with all -// custom flags by verifying with VerifyMessage. Tests both ECDSA and Schnorr -// signatures. -func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, - alice *lntest.HarnessNode) { - - ctxb := context.Background() - ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout) - defer cancel() - +// runSignVerifyMessage makes sure that the SignMessage RPC can be used with +// all custom flags by verifying with VerifyMessage. Tests both ECDSA and +// Schnorr signatures. +func runSignVerifyMessage(ht *lntemp.HarnessTest, alice *node.HarnessNode) { aliceMsg := []byte("alice msg") keyLoc := &signrpc.KeyLocator{ KeyFamily: int32(keychain.KeyFamilyNodeKey), @@ -411,11 +383,16 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, SchnorrSig: false, } - signMsgResp, err := alice.SignerClient.SignMessage(ctxt, signMsgReq) - require.NoError(t.t, err, "failed to sign message") + signMsgResp := alice.RPC.SignMessageSigner(signMsgReq) - customPubKey, err := deriveCustomizedKey(ctxt, alice, keyLoc) - require.NoError(t.t, err, "failed to create customized pubkey") + deriveCustomizedKey := func() *btcec.PublicKey { + resp := alice.RPC.DeriveKey(keyLoc) + pub, err := btcec.ParsePubKey(resp.RawKeyBytes) + require.NoError(ht, err, "failed to parse node pubkey") + return pub + } + + customPubKey := deriveCustomizedKey() verifyReq := &signrpc.VerifyMessageReq{ Msg: aliceMsg, @@ -423,10 +400,8 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, Pubkey: customPubKey.SerializeCompressed(), IsSchnorrSig: false, } - verifyResp, err := alice.SignerClient.VerifyMessage(ctxt, verifyReq) - require.NoError(t.t, err) - - require.True(t.t, verifyResp.Valid, "failed to verify message") + verifyResp := alice.RPC.VerifyMessageSigner(verifyReq) + require.True(ht, verifyResp.Valid, "failed to verify message") // Use a different key locator. keyLoc = &signrpc.KeyLocator{ @@ -440,12 +415,8 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, KeyLoc: keyLoc, SchnorrSig: true, } - - signMsgResp, err = alice.SignerClient.SignMessage(ctxt, signMsgReq) - require.NoError(t.t, err) - - customPubKey, err = deriveCustomizedKey(ctxt, alice, keyLoc) - require.NoError(t.t, err, "failed to create customized pubkey") + signMsgResp = alice.RPC.SignMessageSigner(signMsgReq) + customPubKey = deriveCustomizedKey() // Verify the Schnorr signature. verifyReq = &signrpc.VerifyMessageReq{ @@ -454,10 +425,8 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, Pubkey: schnorr.SerializePubKey(customPubKey), IsSchnorrSig: true, } - verifyResp, err = alice.SignerClient.VerifyMessage(ctxt, verifyReq) - require.NoError(t.t, err) - - require.True(t.t, verifyResp.Valid, "failed to verify message") + verifyResp = alice.RPC.VerifyMessageSigner(verifyReq) + require.True(ht, verifyResp.Valid, "failed to verify message") // Also test that we can tweak a private key and verify the message // against the tweaked public key. @@ -467,8 +436,7 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, ) signMsgReq.SchnorrSigTapTweak = tweakBytes[:] - signMsgResp, err = alice.SignerClient.SignMessage(ctxt, signMsgReq) - require.NoError(t.t, err) + signMsgResp = alice.RPC.SignMessageSigner(signMsgReq) verifyReq = &signrpc.VerifyMessageReq{ Msg: aliceMsg, @@ -476,8 +444,6 @@ func runSignVerifyMessage(t *harnessTest, net *lntest.NetworkHarness, Pubkey: schnorr.SerializePubKey(tweakedPubKey), IsSchnorrSig: true, } - verifyResp, err = alice.SignerClient.VerifyMessage(ctxt, verifyReq) - require.NoError(t.t, err) - - require.True(t.t, verifyResp.Valid, "failed to verify message") + verifyResp = alice.RPC.VerifyMessageSigner(verifyReq) + require.True(ht, verifyResp.Valid, "failed to verify message") } diff --git a/lntest/itest/lnd_test_list_on_test.go b/lntest/itest/lnd_test_list_on_test.go index 92448ec61..09943e2c5 100644 --- a/lntest/itest/lnd_test_list_on_test.go +++ b/lntest/itest/lnd_test_list_on_test.go @@ -4,10 +4,6 @@ package itest var allTestCases = []*testCase{ - { - name: "sign verify message", - test: testSignVerifyMessage, - }, { name: "async payments benchmark", test: testAsyncPayments,