Skip to content

Commit a2f1245

Browse files
committed
multi: persist remote static key for handshakev2
In this commit, we update the go mod to point to the version of LNC that contains the logic for handshake version 2. This requires that we pass in a call back that LNC can call to persist the remote static key once it is received. This then needs to be provided each time we start up the session again.
1 parent 0f7b1ec commit a2f1245

File tree

6 files changed

+28
-15
lines changed

6 files changed

+28
-15
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,6 @@ require (
3434
gopkg.in/macaroon.v2 v2.1.0
3535
)
3636

37+
replace github.com/lightninglabs/lightning-node-connect => github.com/ellemouton/lightning-node-connect v0.1.5-alpha.0.20220321121554-214be2e1be66
38+
3739
go 1.16

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ github.com/dvyukov/go-fuzz v0.0.0-20210602112143-b1f3d6f4ef4e h1:qTP1telKJHlToHl
222222
github.com/dvyukov/go-fuzz v0.0.0-20210602112143-b1f3d6f4ef4e/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
223223
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
224224
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
225+
github.com/ellemouton/lightning-node-connect v0.1.5-alpha.0.20220321121554-214be2e1be66 h1:ufoiX9ZbA90H7lotSuekcEAI004BIthQFX0JRdvocKM=
226+
github.com/ellemouton/lightning-node-connect v0.1.5-alpha.0.20220321121554-214be2e1be66/go.mod h1:jxSnezQYIvhNXqjyyiMEmdpOURrdVaujPZV6zGCVi8o=
225227
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
226228
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
227229
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -610,8 +612,6 @@ github.com/lightninglabs/faraday v0.2.7-alpha h1:lpSUk3RFfgr4/OCx1OdJ2AMHCAiTObK
610612
github.com/lightninglabs/faraday v0.2.7-alpha/go.mod h1:77P9EctYhneIXLvm9a6ylV9LCht/rj7j8mLwXpBgxB8=
611613
github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf h1:HZKvJUHlcXI/f/O0Avg7t8sqkPo78HFzjmeYFl6DPnc=
612614
github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf/go.mod h1:vxmQPeIQxPf6Jf9rM8R+B4rKBqLA2AjttNxkFBL2Plk=
613-
github.com/lightninglabs/lightning-node-connect v0.1.7-alpha.0.20220215190639-abe533aa98b8 h1:jjfS+6eQkqxO4gdxp33/ccO1ImhX3dt8AqRnQ58HkiQ=
614-
github.com/lightninglabs/lightning-node-connect v0.1.7-alpha.0.20220215190639-abe533aa98b8/go.mod h1:jxSnezQYIvhNXqjyyiMEmdpOURrdVaujPZV6zGCVi8o=
615615
github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.2 h1:Er1miPZD2XZwcfE4xoS5AILqP1mj7kqnhbBSxW9BDxY=
616616
github.com/lightninglabs/lightning-node-connect/hashmailrpc v1.0.2/go.mod h1:antQGRDRJiuyQF6l+k6NECCSImgCpwaZapATth2Chv4=
617617
github.com/lightninglabs/lndclient v0.11.0-4/go.mod h1:8/cTKNwgL87NX123gmlv3Xh6p1a7pvzu+40Un3PhHiI=

itest/litd_mode_integrated_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package itest
33
import (
44
"bytes"
55
"context"
6-
"crypto/sha512"
76
"crypto/tls"
87
"crypto/x509"
98
"encoding/base64"
@@ -769,20 +768,18 @@ func connectMailbox(ctx context.Context,
769768
copy(mnemonicWords[:], connectPhrase)
770769
password := mailbox.PasswordMnemonicToEntropy(mnemonicWords)
771770

772-
sid := sha512.Sum512(password[:])
773-
774771
privKey, err := btcec.NewPrivateKey(btcec.S256())
775772
if err != nil {
776773
return nil, err
777774
}
778775
ecdh := &keychain.PrivKeyECDH{PrivKey: privKey}
779776

780-
transportConn, err := mailbox.NewClient(ctx, sid)
777+
transportConn, err := mailbox.NewClient(ctx, ecdh, nil, password[:])
781778
if err != nil {
782779
return nil, err
783780
}
784781

785-
noiseConn := mailbox.NewNoiseGrpcConn(ecdh, nil, password[:])
782+
noiseConn := mailbox.NewNoiseGrpcConn(ecdh, nil, nil, password[:], nil)
786783

787784
dialOpts := []grpc.DialOption{
788785
grpc.WithContextDialer(transportConn.Dial),

session/server.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,20 @@ func newMailboxSession() *mailboxSession {
3232
}
3333

3434
func (m *mailboxSession) start(session *Session,
35-
serverCreator GRPCServerCreator, authData []byte) error {
35+
serverCreator GRPCServerCreator, authData []byte,
36+
onUpdate func(sess *Session) error) error {
3637

3738
tlsConfig := &tls.Config{}
3839
if session.DevServer {
3940
tlsConfig = &tls.Config{InsecureSkipVerify: true}
4041
}
4142

43+
ecdh := &keychain.PrivKeyECDH{PrivKey: session.LocalPrivateKey}
44+
4245
// Start the mailbox gRPC server.
4346
mailboxServer, err := mailbox.NewServer(
4447
session.ServerAddr, session.PairingSecret[:],
48+
ecdh, session.RemotePublicKey,
4549
grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),
4650
grpc.WithKeepaliveParams(keepalive.ClientParameters{
4751
Time: 2 * time.Minute,
@@ -51,9 +55,16 @@ func (m *mailboxSession) start(session *Session,
5155
return err
5256
}
5357

54-
ecdh := &keychain.PrivKeyECDH{PrivKey: session.LocalPrivateKey}
5558
noiseConn := mailbox.NewNoiseGrpcConn(
56-
ecdh, authData, session.PairingSecret[:],
59+
ecdh, session.RemotePublicKey, authData,
60+
session.PairingSecret[:], func(key *btcec.PublicKey) error {
61+
session.RemotePublicKey = key
62+
if err := onUpdate(session); err != nil {
63+
return err
64+
}
65+
mailboxServer.SetRemoteKey(key)
66+
return nil
67+
},
5768
)
5869
m.server = serverCreator(grpc.Creds(noiseConn))
5970

@@ -95,8 +106,8 @@ func NewServer(serverCreator GRPCServerCreator) *Server {
95106
}
96107
}
97108

98-
func (s *Server) StartSession(session *Session, authData []byte) (chan struct{},
99-
error) {
109+
func (s *Server) StartSession(session *Session, authData []byte,
110+
onUpdate func(sess *Session) error) (chan struct{}, error) {
100111

101112
s.activeSessionsMtx.Lock()
102113
defer s.activeSessionsMtx.Unlock()
@@ -112,7 +123,9 @@ func (s *Server) StartSession(session *Session, authData []byte) (chan struct{},
112123
sess := newMailboxSession()
113124
s.activeSessions[id] = sess
114125

115-
return sess.quit, sess.start(session, s.serverCreator, authData)
126+
return sess.quit, sess.start(
127+
session, s.serverCreator, authData, onUpdate,
128+
)
116129
}
117130

118131
func (s *Server) StopSession(localPublicKey *btcec.PublicKey) error {

session/store.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package session
33
import (
44
"bytes"
55
"errors"
6-
76
"github.com/btcsuite/btcd/btcec"
87
"go.etcd.io/bbolt"
98
)

session_rpcserver.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ func (s *sessionRpcServer) resumeSession(sess *session.Session) error {
141141
return nil
142142
}
143143

144-
sessionClosedSub, err := s.sessionServer.StartSession(sess, authData)
144+
sessionClosedSub, err := s.sessionServer.StartSession(
145+
sess, authData, s.db.StoreSession,
146+
)
145147
if err != nil {
146148
return err
147149
}

0 commit comments

Comments
 (0)