• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lightningnetwork / lnd / 13211764208

08 Feb 2025 03:08AM UTC coverage: 49.288% (-9.5%) from 58.815%
13211764208

Pull #9489

github

calvinrzachman
itest: verify switchrpc server enforces send then track

We prevent the rpc server from allowing onion dispatches for
attempt IDs which have already been tracked by rpc clients.

This helps protect the client from leaking a duplicate onion
attempt. NOTE: This is not the only method for solving this
issue! The issue could be addressed via careful client side
programming which accounts for the uncertainty and async
nature of dispatching onions to a remote process via RPC.
This would require some lnd ChannelRouter changes for how
we intend to use these RPCs though.
Pull Request #9489: multi: add BuildOnion, SendOnion, and TrackOnion RPCs

474 of 990 new or added lines in 11 files covered. (47.88%)

27321 existing lines in 435 files now uncovered.

101192 of 205306 relevant lines covered (49.29%)

1.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

35.85
/keychain/signer.go
1
package keychain
2

3
import (
4
        "github.com/btcsuite/btcd/btcec/v2"
5
        "github.com/btcsuite/btcd/btcec/v2/ecdsa"
6
        "github.com/btcsuite/btcd/chaincfg/chainhash"
7
)
8

9
func NewPubKeyMessageSigner(pubKey *btcec.PublicKey, keyLoc KeyLocator,
10
        signer MessageSignerRing) *PubKeyMessageSigner {
3✔
11

3✔
12
        return &PubKeyMessageSigner{
3✔
13
                pubKey:       pubKey,
3✔
14
                keyLoc:       keyLoc,
3✔
15
                digestSigner: signer,
3✔
16
        }
3✔
17
}
3✔
18

19
type PubKeyMessageSigner struct {
20
        pubKey       *btcec.PublicKey
21
        keyLoc       KeyLocator
22
        digestSigner MessageSignerRing
23
}
24

25
func (p *PubKeyMessageSigner) PubKey() *btcec.PublicKey {
×
26
        return p.pubKey
×
27
}
×
28

29
func (p *PubKeyMessageSigner) KeyLocator() KeyLocator {
3✔
30
        return p.keyLoc
3✔
31
}
3✔
32

33
func (p *PubKeyMessageSigner) SignMessage(message []byte,
34
        doubleHash bool) (*ecdsa.Signature, error) {
3✔
35

3✔
36
        return p.digestSigner.SignMessage(p.keyLoc, message, doubleHash)
3✔
37
}
3✔
38

39
func (p *PubKeyMessageSigner) SignMessageCompact(msg []byte,
40
        doubleHash bool) ([]byte, error) {
3✔
41

3✔
42
        return p.digestSigner.SignMessageCompact(p.keyLoc, msg, doubleHash)
3✔
43
}
3✔
44

45
func NewPrivKeyMessageSigner(privKey *btcec.PrivateKey,
UNCOV
46
        keyLoc KeyLocator) *PrivKeyMessageSigner {
×
UNCOV
47

×
UNCOV
48
        return &PrivKeyMessageSigner{
×
UNCOV
49
                privKey: privKey,
×
UNCOV
50
                keyLoc:  keyLoc,
×
UNCOV
51
        }
×
UNCOV
52
}
×
53

54
type PrivKeyMessageSigner struct {
55
        keyLoc  KeyLocator
56
        privKey *btcec.PrivateKey
57
}
58

59
func (p *PrivKeyMessageSigner) PubKey() *btcec.PublicKey {
×
60
        return p.privKey.PubKey()
×
61
}
×
62

UNCOV
63
func (p *PrivKeyMessageSigner) KeyLocator() KeyLocator {
×
UNCOV
64
        return p.keyLoc
×
UNCOV
65
}
×
66

67
func (p *PrivKeyMessageSigner) SignMessage(msg []byte,
UNCOV
68
        doubleHash bool) (*ecdsa.Signature, error) {
×
UNCOV
69

×
UNCOV
70
        var digest []byte
×
UNCOV
71
        if doubleHash {
×
UNCOV
72
                digest = chainhash.DoubleHashB(msg)
×
UNCOV
73
        } else {
×
74
                digest = chainhash.HashB(msg)
×
75
        }
×
UNCOV
76
        return ecdsa.Sign(p.privKey, digest), nil
×
77
}
78

79
func (p *PrivKeyMessageSigner) SignMessageCompact(msg []byte,
80
        doubleHash bool) ([]byte, error) {
×
81

×
82
        var digest []byte
×
83
        if doubleHash {
×
84
                digest = chainhash.DoubleHashB(msg)
×
85
        } else {
×
86
                digest = chainhash.HashB(msg)
×
87
        }
×
88

89
        return ecdsa.SignCompact(p.privKey, digest, true), nil
×
90
}
91

92
var _ SingleKeyMessageSigner = (*PubKeyMessageSigner)(nil)
93
var _ SingleKeyMessageSigner = (*PrivKeyMessageSigner)(nil)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc