Skip to content

Commit 472d8f4

Browse files
committed
multi: persist remote static key for handshakev2
This commit re-enables the second handshake for LNC.
1 parent 621f295 commit 472d8f4

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.8-alpha
13+
github.com/lightninglabs/lightning-node-connect v0.1.9-alpha
1414
github.com/lightninglabs/lndclient v0.14.2-3
1515
github.com/lightninglabs/loop v0.18.0-beta-lnd-14
1616
github.com/lightninglabs/loop/swapserverrpc v1.0.1

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.8-alpha h1:bJ66JvVQCqEao4nLrPSahYtGtljUQ8tU9xx2nL/QfZE=
614-
github.com/lightninglabs/lightning-node-connect v0.1.8-alpha/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"
@@ -723,24 +722,24 @@ func getServerCertificates(hostPort string) ([]*x509.Certificate, error) {
723722
func connectMailbox(ctx context.Context,
724723
connectPhrase []string) (grpc.ClientConnInterface, error) {
725724

726-
var mnemonicWords [mailbox.NumPasswordWords]string
725+
var mnemonicWords [mailbox.NumPassphraseWords]string
727726
copy(mnemonicWords[:], connectPhrase)
728-
password := mailbox.PasswordMnemonicToEntropy(mnemonicWords)
729-
730-
sid := sha512.Sum512(password[:])
727+
passphrase := mailbox.PassphraseMnemonicToEntropy(mnemonicWords)
731728

732729
privKey, err := btcec.NewPrivateKey(btcec.S256())
733730
if err != nil {
734731
return nil, err
735732
}
736733
ecdh := &keychain.PrivKeyECDH{PrivKey: privKey}
737734

738-
transportConn, err := mailbox.NewClient(ctx, sid)
735+
connData := mailbox.NewConnData(ecdh, nil, passphrase[:], nil, nil, nil)
736+
737+
transportConn, err := mailbox.NewClient(ctx, connData)
739738
if err != nil {
740739
return nil, err
741740
}
742741

743-
noiseConn := mailbox.NewNoiseGrpcConn(ecdh, nil, password[:])
742+
noiseConn := mailbox.NewNoiseGrpcConn(connData)
744743

745744
dialOpts := []grpc.DialOption{
746745
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
@@ -216,7 +216,9 @@ func (s *sessionRpcServer) resumeSession(sess *session.Session) error {
216216

217217
authData := []byte(fmt.Sprintf("%s: %s", HeaderMacaroon, mac))
218218

219-
sessionClosedSub, err := s.sessionServer.StartSession(sess, authData)
219+
sessionClosedSub, err := s.sessionServer.StartSession(
220+
sess, authData, s.db.StoreSession,
221+
)
220222
if err != nil {
221223
return err
222224
}
@@ -315,7 +317,7 @@ func marshalRPCSession(sess *session.Session) (*litrpc.Session, error) {
315317
remotePubKey = sess.RemotePublicKey.SerializeCompressed()
316318
}
317319

318-
mnemonic, err := mailbox.PasswordEntropyToMnemonic(sess.PairingSecret)
320+
mnemonic, err := mailbox.PassphraseEntropyToMnemonic(sess.PairingSecret)
319321
if err != nil {
320322
return nil, err
321323
}

0 commit comments

Comments
 (0)