Skip to content

Commit 31713c6

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 037aa41 commit 31713c6

File tree

7 files changed

+34
-24
lines changed

7 files changed

+34
-24
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/improbable-eng/grpc-web v0.12.0
1111
github.com/jessevdk/go-flags v1.4.0
1212
github.com/lightninglabs/faraday v0.2.7-alpha
13-
github.com/lightninglabs/lightning-node-connect v0.1.7-alpha.0.20220215190639-abe533aa98b8
13+
github.com/lightninglabs/lightning-node-connect v0.1.9-alpha
1414
github.com/lightninglabs/lndclient v0.14.0-8
1515
github.com/lightninglabs/loop v0.15.1-beta
1616
github.com/lightninglabs/pool v0.5.5-alpha

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,8 +610,8 @@ github.com/lightninglabs/faraday v0.2.7-alpha h1:lpSUk3RFfgr4/OCx1OdJ2AMHCAiTObK
610610
github.com/lightninglabs/faraday v0.2.7-alpha/go.mod h1:77P9EctYhneIXLvm9a6ylV9LCht/rj7j8mLwXpBgxB8=
611611
github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf h1:HZKvJUHlcXI/f/O0Avg7t8sqkPo78HFzjmeYFl6DPnc=
612612
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=
613+
github.com/lightninglabs/lightning-node-connect v0.1.9-alpha h1:ri3tgMegrxffg7w+hrC2vzdler5xJp/G74gI/7uCVgU=
614+
github.com/lightninglabs/lightning-node-connect v0.1.9-alpha/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: 6 additions & 7 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"
@@ -764,24 +763,24 @@ func getServerCertificates(hostPort string) ([]*x509.Certificate, error) {
764763
func connectMailbox(ctx context.Context,
765764
connectPhrase []string) (grpc.ClientConnInterface, error) {
766765

767-
var mnemonicWords [mailbox.NumPasswordWords]string
766+
var mnemonicWords [mailbox.NumPassphraseWords]string
768767
copy(mnemonicWords[:], connectPhrase)
769-
password := mailbox.PasswordMnemonicToEntropy(mnemonicWords)
770-
771-
sid := sha512.Sum512(password[:])
768+
passphrase := mailbox.PassphraseMnemonicToEntropy(mnemonicWords)
772769

773770
privKey, err := btcec.NewPrivateKey(btcec.S256())
774771
if err != nil {
775772
return nil, err
776773
}
777774
ecdh := &keychain.PrivKeyECDH{PrivKey: privKey}
778775

779-
transportConn, err := mailbox.NewClient(ctx, sid)
776+
connData := mailbox.NewConnData(ecdh, nil, passphrase[:], nil, nil, nil)
777+
778+
transportConn, err := mailbox.NewClient(ctx, connData)
780779
if err != nil {
781780
return nil, err
782781
}
783782

784-
noiseConn := mailbox.NewNoiseGrpcConn(ecdh, nil, password[:])
783+
noiseConn := mailbox.NewNoiseGrpcConn(connData)
785784

786785
dialOpts := []grpc.DialOption{
787786
grpc.WithContextDialer(transportConn.Dial),

session/interface.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ type Session struct {
4747
DevServer bool
4848
MacaroonRootKey uint64
4949
MacaroonRecipe *MacaroonRecipe
50-
PairingSecret [mailbox.NumPasswordBytes]byte
50+
PairingSecret [mailbox.NumPassphraseEntropyBytes]byte
5151
LocalPrivateKey *btcec.PrivateKey
5252
LocalPublicKey *btcec.PublicKey
5353
RemotePublicKey *btcec.PublicKey
@@ -58,7 +58,7 @@ func NewSession(label string, typ Type, expiry time.Time, serverAddr string,
5858
devServer bool, perms []bakery.Op, caveats []macaroon.Caveat) (*Session,
5959
error) {
6060

61-
_, pairingSecret, err := mailbox.NewPassword()
61+
_, pairingSecret, err := mailbox.NewPassphraseEntropy()
6262
if err != nil {
6363
return nil, fmt.Errorf("error deriving pairing secret: %v", err)
6464
}

session/server.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,27 @@ 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+
45+
keys := mailbox.NewConnData(
46+
ecdh, session.RemotePublicKey, session.PairingSecret[:],
47+
authData, func(key *btcec.PublicKey) error {
48+
session.RemotePublicKey = key
49+
return onUpdate(session)
50+
}, nil,
51+
)
52+
4253
// Start the mailbox gRPC server.
4354
mailboxServer, err := mailbox.NewServer(
44-
session.ServerAddr, session.PairingSecret[:],
55+
session.ServerAddr, keys,
4556
grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),
4657
grpc.WithKeepaliveParams(keepalive.ClientParameters{
4758
Time: 2 * time.Minute,
@@ -51,10 +62,7 @@ func (m *mailboxSession) start(session *Session,
5162
return err
5263
}
5364

54-
ecdh := &keychain.PrivKeyECDH{PrivKey: session.LocalPrivateKey}
55-
noiseConn := mailbox.NewNoiseGrpcConn(
56-
ecdh, authData, session.PairingSecret[:],
57-
)
65+
noiseConn := mailbox.NewNoiseGrpcConn(keys)
5866
m.server = serverCreator(grpc.Creds(noiseConn))
5967

6068
m.wg.Add(1)
@@ -95,8 +103,8 @@ func NewServer(serverCreator GRPCServerCreator) *Server {
95103
}
96104
}
97105

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

101109
s.activeSessionsMtx.Lock()
102110
defer s.activeSessionsMtx.Unlock()
@@ -112,7 +120,9 @@ func (s *Server) StartSession(session *Session, authData []byte) (chan struct{},
112120
sess := newMailboxSession()
113121
s.activeSessions[id] = sess
114122

115-
return sess.quit, sess.start(session, s.serverCreator, authData)
123+
return sess.quit, sess.start(
124+
session, s.serverCreator, authData, onUpdate,
125+
)
116126
}
117127

118128
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: 4 additions & 2 deletions
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
}
@@ -240,7 +242,7 @@ func marshalRPCSession(sess *session.Session) (*litrpc.Session, error) {
240242
remotePubKey = sess.RemotePublicKey.SerializeCompressed()
241243
}
242244

243-
mnemonic, err := mailbox.PasswordEntropyToMnemonic(sess.PairingSecret)
245+
mnemonic, err := mailbox.PassphraseEntropyToMnemonic(sess.PairingSecret)
244246
if err != nil {
245247
return nil, err
246248
}

0 commit comments

Comments
 (0)