Skip to content

Commit d614343

Browse files
committed
autopilotserver/mock: upgrade mock for session linking
1 parent 64b5ae4 commit d614343

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

autopilotserver/mock/server.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"sync"
99

1010
"github.com/btcsuite/btcd/btcec/v2"
11+
"github.com/btcsuite/btcd/btcec/v2/ecdsa"
12+
"github.com/btcsuite/btcd/chaincfg/chainhash"
1113
"github.com/lightninglabs/lightning-terminal/autopilotserverrpc"
1214
"github.com/lightninglabs/lightning-terminal/rules"
1315
"github.com/lightningnetwork/lnd/lntest/node"
@@ -44,6 +46,7 @@ type ClientState uint8
4446
const (
4547
ClientStateActive = iota
4648
ClientStateInactive
49+
ClientStateRevoked
4750
)
4851

4952
type clientSession struct {
@@ -172,6 +175,32 @@ func (m *Server) RegisterSession(_ context.Context,
172175
return nil, err
173176
}
174177

178+
// If linked session, check that signature is valid.
179+
if len(req.GroupResponderKey) != 0 {
180+
// Check that the group key is a known key.
181+
_, ok := m.sessions[hex.EncodeToString(req.GroupResponderKey)]
182+
if !ok {
183+
return nil, fmt.Errorf("unknown group key")
184+
}
185+
186+
// Check that the signature provided is valid.
187+
sig, err := ecdsa.ParseDERSignature(req.GroupResponderSig)
188+
if err != nil {
189+
return nil, err
190+
}
191+
192+
msg := chainhash.HashB(req.ResponderPubKey)
193+
194+
groupKey, err := btcec.ParsePubKey(req.GroupResponderKey)
195+
if err != nil {
196+
return nil, err
197+
}
198+
199+
if !sig.Verify(msg, groupKey) {
200+
return nil, fmt.Errorf("invalid signature")
201+
}
202+
}
203+
175204
m.sessions[hex.EncodeToString(req.ResponderPubKey)] = &clientSession{
176205
key: priv,
177206
state: ClientStateActive,
@@ -209,7 +238,12 @@ func (m *Server) RevokeSession(_ context.Context,
209238
m.sessMu.Lock()
210239
defer m.sessMu.Unlock()
211240

212-
delete(m.sessions, hex.EncodeToString(req.ResponderPubKey))
241+
sess, ok := m.sessions[hex.EncodeToString(req.ResponderPubKey)]
242+
if !ok {
243+
return nil, nil
244+
}
245+
246+
sess.state = ClientStateRevoked
213247

214248
return &autopilotserverrpc.RevokeSessionResponse{}, nil
215249
}

0 commit comments

Comments
 (0)