Skip to content

Commit f975901

Browse files
authored
Merge pull request #344 from ellemouton/handshake_v2
multi: persist remote static key for handshakev2
2 parents 037aa41 + 31713c6 commit f975901

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)