Skip to content

Commit b4f3edb

Browse files
committed
multi: Support jumbo size om packets
Onion messages allow for payloads that exceed 1300 bytes, in which case the payload should become 32768 bytes. This commit introduces support for those jumbo packets.
1 parent 987a4c3 commit b4f3edb

File tree

4 files changed

+137
-61
lines changed

4 files changed

+137
-61
lines changed

cmd/main.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ func main() {
7070
"data.",
7171
Value: defaultHopDataPath,
7272
},
73+
cli.BoolFlag{
74+
Name: "onion-message",
75+
Usage: "Create an onion message " +
76+
"packet rather than a " +
77+
"payment onion.",
78+
},
7379
},
7480
},
7581
{
@@ -203,8 +209,14 @@ func generate(ctx *cli.Context) error {
203209
return fmt.Errorf("could not peel onion spec: %v", err)
204210
}
205211

212+
var onionOpts []sphinx.OnionPacketOption
213+
if ctx.Bool("onion-message") {
214+
onionOpts = append(onionOpts, sphinx.WithOnionMessage())
215+
}
216+
206217
msg, err := sphinx.NewOnionPacket(
207218
path, sessionKey, assocData, sphinx.DeterministicPacketFiller,
219+
onionOpts...,
208220
)
209221
if err != nil {
210222
return fmt.Errorf("error creating message: %v", err)

packetfiller.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ import (
1212
// in order to ensure we don't leak information on the true route length to the
1313
// receiver. The packet filler may also use the session key to generate a set
1414
// of filler bytes if it wishes to be deterministic.
15-
type PacketFiller func(*btcec.PrivateKey, *[routingInfoSize]byte) error
15+
type PacketFiller func(*btcec.PrivateKey, []byte) error
1616

1717
// RandPacketFiller is a packet filler that reads a set of random bytes from a
1818
// CSPRNG.
19-
func RandPacketFiller(_ *btcec.PrivateKey, mixHeader *[routingInfoSize]byte) error {
19+
func RandPacketFiller(_ *btcec.PrivateKey, mixHeader []byte) error {
2020
// Read out random bytes to fill out the rest of the starting packet
2121
// after the hop payload for the final node. This mitigates a privacy
2222
// leak that may reveal a lower bound on the true path length to the
2323
// receiver.
24-
if _, err := rand.Read(mixHeader[:]); err != nil {
24+
if _, err := rand.Read(mixHeader); err != nil {
2525
return err
2626
}
2727

@@ -31,15 +31,15 @@ func RandPacketFiller(_ *btcec.PrivateKey, mixHeader *[routingInfoSize]byte) err
3131
// BlankPacketFiller is a packet filler that doesn't attempt to fill out the
3232
// packet at all. It should ONLY be used for generating test vectors or other
3333
// instances that required deterministic packet generation.
34-
func BlankPacketFiller(_ *btcec.PrivateKey, _ *[routingInfoSize]byte) error {
34+
func BlankPacketFiller(_ *btcec.PrivateKey, _ []byte) error {
3535
return nil
3636
}
3737

3838
// DeterministicPacketFiller is a packet filler that generates a deterministic
3939
// set of filler bytes by using chacha20 with a key derived from the session
4040
// key.
4141
func DeterministicPacketFiller(sessionKey *btcec.PrivateKey,
42-
mixHeader *[routingInfoSize]byte) error {
42+
mixHeader []byte) error {
4343

4444
// First, we'll generate a new key that'll be used to generate some
4545
// random bytes for our padding purposes. To derive this new key, we
@@ -55,7 +55,7 @@ func DeterministicPacketFiller(sessionKey *btcec.PrivateKey,
5555
if err != nil {
5656
return err
5757
}
58-
padCipher.XORKeyStream(mixHeader[:], mixHeader[:])
58+
padCipher.XORKeyStream(mixHeader, mixHeader)
5959

6060
return nil
6161
}

0 commit comments

Comments
 (0)