Making message size limit an exportable constant
authorDr. Maxim Orlovsky <orlovsky@pandoracore.com>
Sun, 17 May 2020 14:02:56 +0000 (16:02 +0200)
committerDr Maxim Orlovsky <dr.orlovsky@gmail.com>
Tue, 21 Jul 2020 16:10:58 +0000 (18:10 +0200)
lightning/src/ln/mod.rs
lightning/src/ln/peer_channel_encryptor.rs
lightning/src/ln/wire.rs

index 163799b0031d4a509e7865f3e39253329bd2c141..dd91333a6a26b19a9805f979bd21a2b7075cfd59 100644 (file)
@@ -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;
index 152426577adf33a7980c00890c3eae830a738b4f..6965aac560519c4182accdea8485663d939eb477 100644 (file)
@@ -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<u8> {
-               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<Vec<u8>, LightningError> {
-               if msg.len() > 65535 + 16 {
+               if msg.len() > LN_MAX_MSG_LEN + 16 {
                        panic!("Attempted to encrypt message longer than 65535 bytes!");
                }
 
index 15a218060e6ffc52b4843272c3d6fa64113408b2..42889ce035d2ae03f9708365d9401a7be08ec7ce 100644 (file)
 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.
 ///