mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-28 13:52:55 +02:00
brontide: modify the max payload length to be 65535 bytes total
This commit modifies the current implementation of the p2p crypto protocol to further constrain the max allowed payload size. With this change we now use 16-bits (2-bytes) for the maximum payload length. This change puts us closer to strict adherence of the Noise spec, and simplifies the memory management w.r.t implementing the current version of our scheme. Note that this doesn’t restrict the size of messages that are able to be sent over the wire within the LN p2p protocol. Larger message can safely be encapsulated within the crypt messages via fragmentation that will detected take place if a larger message is detected.
This commit is contained in:
@@ -2,6 +2,7 @@ package brontide
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"math"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
@@ -97,6 +98,44 @@ func TestConnectionCorrectness(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaxPayloadLength(t *testing.T) {
|
||||
b := BrontideMachine{}
|
||||
b.split()
|
||||
|
||||
// Create a payload that's juust over the maximum alloted payload
|
||||
// length.
|
||||
payloadToReject := make([]byte, math.MaxUint16+1)
|
||||
|
||||
var buf bytes.Buffer
|
||||
|
||||
// A write of the payload generated above to the state machine should
|
||||
// be rejected as it's over the max payload length.
|
||||
err := b.WriteMessage(&buf, payloadToReject)
|
||||
if err != ErrMaxMessageLengthExceeded {
|
||||
t.Fatalf("payload is over the max allowed length, the write " +
|
||||
"should have been rejected")
|
||||
}
|
||||
|
||||
// Generate another payload which with the MAC acounted for, should be
|
||||
// accepted as a valid payload.
|
||||
payloadToAccept := make([]byte, math.MaxUint16-macSize)
|
||||
if err := b.WriteMessage(&buf, payloadToAccept); err != nil {
|
||||
t.Fatalf("write for payload was rejected, should have been " +
|
||||
"accepted")
|
||||
}
|
||||
|
||||
// Generate a final payload which is juuust over the max payload length
|
||||
// when the MAC is accounted for.
|
||||
payloadToReject = make([]byte, math.MaxUint16-macSize+1)
|
||||
|
||||
// This payload should be rejected.
|
||||
err = b.WriteMessage(&buf, payloadToReject)
|
||||
if err != ErrMaxMessageLengthExceeded {
|
||||
t.Fatalf("payload is over the max allowed length, the write " +
|
||||
"should have been rejected")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNoiseIdentityHiding(t *testing.T) {
|
||||
// TODO(roasbeef): fin
|
||||
}
|
||||
|
Reference in New Issue
Block a user