Skip to content

Commit 0ecf226

Browse files
authored
Merge pull request #342 from ellemouton/handshake_v2
multi: persist remote static key for handshakev2
2 parents a58779f + 53b00a4 commit 0ecf226

File tree

7 files changed

+30
-15
lines changed

7 files changed

+30
-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),

log.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package terminal
33
import (
44
"github.com/btcsuite/btclog"
55
"github.com/lightninglabs/faraday"
6+
"github.com/lightninglabs/lightning-node-connect/mailbox"
67
"github.com/lightninglabs/lightning-terminal/session"
78
"github.com/lightninglabs/loop/loopd"
89
"github.com/lightninglabs/pool"
@@ -57,6 +58,7 @@ func SetupLoggers(root *build.RotatingLogWriter, intercept signal.Interceptor) {
5758
// Add the lightning-terminal root logger.
5859
lnd.AddSubLogger(root, Subsystem, intercept, UseLogger)
5960
lnd.AddSubLogger(root, session.Subsystem, intercept, session.UseLogger)
61+
lnd.AddSubLogger(root, mailbox.Subsystem, intercept, mailbox.UseLogger)
6062

6163
// Add daemon loggers to lnd's root logger.
6264
faraday.SetupLoggers(root, intercept)

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)