From eb8bcaae879dee1c94eff600374ce3c5e5b9dbd3 Mon Sep 17 00:00:00 2001 From: "Dr. Maxim Orlovsky" Date: Sun, 17 May 2020 16:02:56 +0200 Subject: [PATCH] Making message size limit an exportable constant --- lightning/src/ln/mod.rs | 2 ++ lightning/src/ln/peer_channel_encryptor.rs | 5 +++-- lightning/src/ln/wire.rs | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lightning/src/ln/mod.rs b/lightning/src/ln/mod.rs index 163799b00..dd91333a6 100644 --- a/lightning/src/ln/mod.rs +++ b/lightning/src/ln/mod.rs @@ -35,3 +35,5 @@ mod functional_tests; mod chanmon_update_fail_tests; #[cfg(test)] mod reorg_tests; + +pub use self::wire::LN_MAX_MSG_LEN; diff --git a/lightning/src/ln/peer_channel_encryptor.rs b/lightning/src/ln/peer_channel_encryptor.rs index 152426577..6965aac56 100644 --- a/lightning/src/ln/peer_channel_encryptor.rs +++ b/lightning/src/ln/peer_channel_encryptor.rs @@ -1,5 +1,6 @@ use ln::msgs::LightningError; use ln::msgs; +use ln::wire::LN_MAX_MSG_LEN; use bitcoin::hashes::{Hash, HashEngine, Hmac, HmacEngine}; use bitcoin::hashes::sha256::Hash as Sha256; @@ -373,7 +374,7 @@ impl PeerChannelEncryptor { /// Encrypts the given message, returning the encrypted version /// panics if msg.len() > 65535 or Noise handshake has not finished. pub fn encrypt_message(&mut self, msg: &[u8]) -> Vec { - if msg.len() > 65535 { + if msg.len() > LN_MAX_MSG_LEN { panic!("Attempted to encrypt message longer than 65535 bytes!"); } @@ -427,7 +428,7 @@ impl PeerChannelEncryptor { /// Decrypts the given message. /// panics if msg.len() > 65535 + 16 pub fn decrypt_message(&mut self, msg: &[u8]) -> Result, LightningError> { - if msg.len() > 65535 + 16 { + if msg.len() > LN_MAX_MSG_LEN + 16 { panic!("Attempted to encrypt message longer than 65535 bytes!"); } diff --git a/lightning/src/ln/wire.rs b/lightning/src/ln/wire.rs index 15a218060..42889ce03 100644 --- a/lightning/src/ln/wire.rs +++ b/lightning/src/ln/wire.rs @@ -16,6 +16,13 @@ use ln::msgs; use util::ser::{Readable, Writeable, Writer}; +/// Maximum Lightning message data length according to +/// [BOLT-8](https://github.com/lightningnetwork/lightning-rfc/blob/v1.0/08-transport.md#lightning-message-specification): +/// "The maximum size of any Lightning message MUST NOT exceed 65535 bytes. +/// A maximum size of 65535 simplifies testing, makes memory management easier, +/// and helps mitigate memory-exhaustion attacks." +pub const LN_MAX_MSG_LEN: usize = 65535; + /// A Lightning message returned by [`read`] when decoding bytes received over the wire. Each /// variant contains a message from [`ln::msgs`] or otherwise the message type if unknown. /// -- 2.39.5