From: Dr. Maxim Orlovsky Date: Sun, 17 May 2020 14:02:56 +0000 (+0200) Subject: Making message size limit an exportable constant X-Git-Tag: v0.0.12~49^2~5 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=eb8bcaae879dee1c94eff600374ce3c5e5b9dbd3;p=rust-lightning Making message size limit an exportable constant --- 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. ///