Skip to content

Commit e23d32d

Browse files
committed
Remove InMemorySigner (de-)serialization support
InMemorySigner no longer holds channel_value_satoshis and channel_parameters. Instead of writing 0 and None, respectively, drop (de-)serialization support entirely since InMemorySigner hasn't been serialized since SERIALIZATION_VERSION 2.
1 parent fa867f3 commit e23d32d

File tree

9 files changed

+12
-179
lines changed

9 files changed

+12
-179
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ use lightning::ln::channelmanager::{
5252
};
5353
use lightning::ln::functional_test_utils::*;
5454
use lightning::ln::inbound_payment::ExpandedKey;
55-
use lightning::ln::msgs::{
56-
ChannelMessageHandler, CommitmentUpdate, DecodeError, Init, UpdateAddHTLC,
57-
};
55+
use lightning::ln::msgs::{ChannelMessageHandler, CommitmentUpdate, Init, UpdateAddHTLC};
5856
use lightning::ln::script::ShutdownScript;
5957
use lightning::ln::types::ChannelId;
6058
use lightning::offers::invoice::UnsignedBolt12Invoice;
@@ -385,15 +383,6 @@ impl SignerProvider for KeyProvider {
385383
TestChannelSigner::new_with_revoked(keys, revoked_commitment, false)
386384
}
387385

388-
fn read_chan_signer(&self, buffer: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> {
389-
let mut reader = lightning::io::Cursor::new(buffer);
390-
391-
let inner: InMemorySigner = ReadableArgs::read(&mut reader, self)?;
392-
let state = self.make_enforcement_state_cell(inner.commitment_seed);
393-
394-
Ok(TestChannelSigner::new_with_revoked(inner, state, false))
395-
}
396-
397386
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
398387
let secp_ctx = Secp256k1::signing_only();
399388
#[rustfmt::skip]

fuzz/src/full_stack.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ use lightning::ln::channelmanager::{
4444
};
4545
use lightning::ln::functional_test_utils::*;
4646
use lightning::ln::inbound_payment::ExpandedKey;
47-
use lightning::ln::msgs::DecodeError;
4847
use lightning::ln::peer_handler::{
4948
IgnoringMessageHandler, MessageHandler, PeerManager, SocketDescriptor,
5049
};
@@ -63,7 +62,7 @@ use lightning::util::config::{ChannelConfig, UserConfig};
6362
use lightning::util::errors::APIError;
6463
use lightning::util::hash_tables::*;
6564
use lightning::util::logger::Logger;
66-
use lightning::util::ser::{Readable, ReadableArgs, Writeable};
65+
use lightning::util::ser::{Readable, Writeable};
6766
use lightning::util::test_channel_signer::{EnforcementState, TestChannelSigner};
6867

6968
use lightning_invoice::RawBolt11Invoice;
@@ -522,13 +521,6 @@ impl SignerProvider for KeyProvider {
522521
)
523522
}
524523

525-
fn read_chan_signer(&self, mut data: &[u8]) -> Result<TestChannelSigner, DecodeError> {
526-
let inner: InMemorySigner = ReadableArgs::read(&mut data, self)?;
527-
let state = Arc::new(Mutex::new(EnforcementState::new()));
528-
529-
Ok(TestChannelSigner::new_with_revoked(inner, state, false))
530-
}
531-
532524
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
533525
let secp_ctx = Secp256k1::signing_only();
534526
let channel_monitor_claim_key = SecretKey::from_slice(

fuzz/src/onion_message.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use lightning::blinded_path::message::{
1010
};
1111
use lightning::blinded_path::EmptyNodeIdLookUp;
1212
use lightning::ln::inbound_payment::ExpandedKey;
13-
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
13+
use lightning::ln::msgs::{self, OnionMessageHandler};
1414
use lightning::ln::peer_handler::IgnoringMessageHandler;
1515
use lightning::ln::script::ShutdownScript;
1616
use lightning::offers::invoice::UnsignedBolt12Invoice;
@@ -265,10 +265,6 @@ impl SignerProvider for KeyProvider {
265265
unreachable!()
266266
}
267267

268-
fn read_chan_signer(&self, _data: &[u8]) -> Result<TestChannelSigner, DecodeError> {
269-
unreachable!()
270-
}
271-
272268
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
273269
unreachable!()
274270
}

lightning/src/ln/channel.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10297,7 +10297,6 @@ impl<SP: Deref> Writeable for FundedChannel<SP> where SP::Target: SignerProvider
1029710297
}
1029810298
}
1029910299

10300-
const MAX_ALLOC_SIZE: usize = 64*1024;
1030110300
impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c ChannelTypeFeatures)> for FundedChannel<SP>
1030210301
where
1030310302
ES::Target: EntropySource,
@@ -10330,21 +10329,6 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
1033010329

1033110330
let latest_monitor_update_id = Readable::read(reader)?;
1033210331

10333-
let mut keys_data = None;
10334-
if ver <= 2 {
10335-
// Read the serialize signer bytes. We'll choose to deserialize them or not based on whether
10336-
// the `channel_keys_id` TLV is present below.
10337-
let keys_len: u32 = Readable::read(reader)?;
10338-
keys_data = Some(Vec::with_capacity(cmp::min(keys_len as usize, MAX_ALLOC_SIZE)));
10339-
while keys_data.as_ref().unwrap().len() != keys_len as usize {
10340-
// Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
10341-
let mut data = [0; 1024];
10342-
let read_slice = &mut data[0..cmp::min(1024, keys_len as usize - keys_data.as_ref().unwrap().len())];
10343-
reader.read_exact(read_slice)?;
10344-
keys_data.as_mut().unwrap().extend_from_slice(read_slice);
10345-
}
10346-
}
10347-
1034810332
// Read the old serialization for shutdown_pubkey, preferring the TLV field later if set.
1034910333
let mut shutdown_scriptpubkey = match <PublicKey as Readable>::read(reader) {
1035010334
Ok(pubkey) => Some(ShutdownScript::new_p2wpkh_from_pubkey(pubkey)),
@@ -10641,10 +10625,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
1064110625
}
1064210626
(channel_keys_id, holder_signer)
1064310627
} else {
10644-
// `keys_data` can be `None` if we had corrupted data.
10645-
let keys_data = keys_data.ok_or(DecodeError::InvalidValue)?;
10646-
let holder_signer = signer_provider.read_chan_signer(&keys_data)?;
10647-
(holder_signer.channel_keys_id(), holder_signer)
10628+
return Err(DecodeError::InvalidValue);
1064810629
};
1064910630

1065010631
if let Some(preimages) = preimages_opt {
@@ -10931,7 +10912,7 @@ mod tests {
1093110912
use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
1093210913
use crate::types::features::{ChannelFeatures, ChannelTypeFeatures, NodeFeatures};
1093310914
use crate::ln::msgs;
10934-
use crate::ln::msgs::{ChannelUpdate, DecodeError, UnsignedChannelUpdate, MAX_VALUE_MSAT};
10915+
use crate::ln::msgs::{ChannelUpdate, UnsignedChannelUpdate, MAX_VALUE_MSAT};
1093510916
use crate::ln::script::ShutdownScript;
1093610917
use crate::ln::chan_utils::{self, htlc_success_tx_weight, htlc_timeout_tx_weight};
1093710918
use crate::chain::BestBlock;
@@ -11003,8 +10984,6 @@ mod tests {
1100310984
self.signer.clone()
1100410985
}
1100510986

11006-
fn read_chan_signer(&self, _data: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> { panic!(); }
11007-
1100810987
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
1100910988
let secp_ctx = Secp256k1::signing_only();
1101010989
let channel_monitor_claim_key = SecretKey::from_slice(&<Vec<u8>>::from_hex("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap();

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13488,8 +13488,8 @@ where
1348813488
pub node_signer: NS,
1348913489

1349013490
/// The keys provider which will give us relevant keys. Some keys will be loaded during
13491-
/// deserialization and KeysInterface::read_chan_signer will be used to read per-Channel
13492-
/// signing data.
13491+
/// deserialization and [`SignerProvider::derive_channel_signer`] will be used to derive
13492+
/// per-Channel signing data.
1349313493
pub signer_provider: SP,
1349413494

1349513495
/// The fee_estimator for use in the ChannelManager in the future.

lightning/src/sign/mod.rs

Lines changed: 2 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,10 @@ use crate::ln::msgs::{UnsignedChannelAnnouncement, UnsignedGossipMessage};
5858
use crate::ln::script::ShutdownScript;
5959
use crate::offers::invoice::UnsignedBolt12Invoice;
6060
use crate::types::payment::PaymentPreimage;
61-
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
61+
use crate::util::ser::Writeable;
6262
use crate::util::transaction_utils;
6363

6464
use crate::crypto::chacha20::ChaCha20;
65-
use crate::io::{self, Error};
66-
use crate::ln::msgs::DecodeError;
6765
use crate::prelude::*;
6866
use crate::sign::ecdsa::EcdsaChannelSigner;
6967
#[cfg(taproot)]
@@ -811,8 +809,7 @@ pub trait ChannelSigner {
811809
///
812810
/// This data is static, and will never change for a channel once set. For a given [`ChannelSigner`]
813811
/// instance, LDK will call this method exactly once - either immediately after construction
814-
/// (not including if done via [`SignerProvider::read_chan_signer`]) or when the funding
815-
/// information has been generated.
812+
/// or when the funding information has been generated.
816813
///
817814
/// channel_parameters.is_populated() MUST be true.
818815
fn provide_channel_parameters(&mut self, channel_parameters: &ChannelTransactionParameters);
@@ -983,21 +980,6 @@ pub trait SignerProvider {
983980
&self, channel_value_satoshis: u64, channel_keys_id: [u8; 32],
984981
) -> Self::EcdsaSigner;
985982

986-
/// Reads a [`Signer`] for this [`SignerProvider`] from the given input stream.
987-
/// This is only called during deserialization of other objects which contain
988-
/// [`EcdsaChannelSigner`]-implementing objects (i.e., [`ChannelMonitor`]s and [`ChannelManager`]s).
989-
/// The bytes are exactly those which `<Self::Signer as Writeable>::write()` writes, and
990-
/// contain no versioning scheme. You may wish to include your own version prefix and ensure
991-
/// you've read all of the provided bytes to ensure no corruption occurred.
992-
///
993-
/// This method is slowly being phased out -- it will only be called when reading objects
994-
/// written by LDK versions prior to 0.0.113.
995-
///
996-
/// [`Signer`]: Self::EcdsaSigner
997-
/// [`ChannelMonitor`]: crate::chain::channelmonitor::ChannelMonitor
998-
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
999-
fn read_chan_signer(&self, reader: &[u8]) -> Result<Self::EcdsaSigner, DecodeError>;
1000-
1001983
/// Get a script pubkey which we send funds to when claiming on-chain contestable outputs.
1002984
///
1003985
/// If this function returns an error, this will result in a channel failing to open.
@@ -1789,74 +1771,6 @@ impl TaprootChannelSigner for InMemorySigner {
17891771
}
17901772
}
17911773

1792-
const SERIALIZATION_VERSION: u8 = 1;
1793-
1794-
const MIN_SERIALIZATION_VERSION: u8 = 1;
1795-
1796-
impl Writeable for InMemorySigner {
1797-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), Error> {
1798-
write_ver_prefix!(writer, SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION);
1799-
1800-
self.funding_key.write(writer)?;
1801-
self.revocation_base_key.write(writer)?;
1802-
self.payment_key.write(writer)?;
1803-
self.delayed_payment_base_key.write(writer)?;
1804-
self.htlc_base_key.write(writer)?;
1805-
self.commitment_seed.write(writer)?;
1806-
self.channel_parameters.write(writer)?;
1807-
self.channel_value_satoshis.write(writer)?;
1808-
self.channel_keys_id.write(writer)?;
1809-
1810-
write_tlv_fields!(writer, {});
1811-
1812-
Ok(())
1813-
}
1814-
}
1815-
1816-
impl<ES: Deref> ReadableArgs<ES> for InMemorySigner
1817-
where
1818-
ES::Target: EntropySource,
1819-
{
1820-
fn read<R: io::Read>(reader: &mut R, entropy_source: ES) -> Result<Self, DecodeError> {
1821-
let _ver = read_ver_prefix!(reader, SERIALIZATION_VERSION);
1822-
1823-
let funding_key = Readable::read(reader)?;
1824-
let revocation_base_key = Readable::read(reader)?;
1825-
let payment_key = Readable::read(reader)?;
1826-
let delayed_payment_base_key = Readable::read(reader)?;
1827-
let htlc_base_key = Readable::read(reader)?;
1828-
let commitment_seed = Readable::read(reader)?;
1829-
let counterparty_channel_data = Readable::read(reader)?;
1830-
let channel_value_satoshis = Readable::read(reader)?;
1831-
let secp_ctx = Secp256k1::signing_only();
1832-
let holder_channel_pubkeys = InMemorySigner::make_holder_keys(
1833-
&secp_ctx,
1834-
&funding_key,
1835-
&revocation_base_key,
1836-
&payment_key,
1837-
&delayed_payment_base_key,
1838-
&htlc_base_key,
1839-
);
1840-
let keys_id = Readable::read(reader)?;
1841-
1842-
read_tlv_fields!(reader, {});
1843-
1844-
Ok(InMemorySigner {
1845-
funding_key,
1846-
revocation_base_key,
1847-
payment_key,
1848-
delayed_payment_base_key,
1849-
htlc_base_key,
1850-
commitment_seed,
1851-
channel_value_satoshis,
1852-
holder_channel_pubkeys,
1853-
channel_parameters: counterparty_channel_data,
1854-
channel_keys_id: keys_id,
1855-
entropy_source: RandomBytes::new(entropy_source.get_secure_random_bytes()),
1856-
})
1857-
}
1858-
}
1859-
18601774
/// Simple implementation of [`EntropySource`], [`NodeSigner`], and [`SignerProvider`] that takes a
18611775
/// 32-byte seed for use as a BIP 32 extended key and derives keys from that.
18621776
///
@@ -2295,10 +2209,6 @@ impl SignerProvider for KeysManager {
22952209
self.derive_channel_keys(channel_value_satoshis, &channel_keys_id)
22962210
}
22972211

2298-
fn read_chan_signer(&self, reader: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> {
2299-
InMemorySigner::read(&mut io::Cursor::new(reader), self)
2300-
}
2301-
23022212
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
23032213
Ok(self.destination_script.clone())
23042214
}
@@ -2428,10 +2338,6 @@ impl SignerProvider for PhantomKeysManager {
24282338
self.inner.derive_channel_signer(channel_value_satoshis, channel_keys_id)
24292339
}
24302340

2431-
fn read_chan_signer(&self, reader: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> {
2432-
self.inner.read_chan_signer(reader)
2433-
}
2434-
24352341
fn get_destination_script(&self, channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
24362342
self.inner.get_destination_script(channel_keys_id)
24372343
}

lightning/src/util/test_channel_signer.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ use bitcoin::sighash;
3131
use bitcoin::sighash::EcdsaSighashType;
3232
use bitcoin::transaction::Transaction;
3333

34-
use crate::io::Error;
3534
#[cfg(taproot)]
3635
use crate::ln::msgs::PartialSignatureWithNonce;
3736
#[cfg(taproot)]
3837
use crate::sign::taproot::TaprootChannelSigner;
3938
use crate::sign::HTLCDescriptor;
4039
use crate::types::features::ChannelTypeFeatures;
41-
use crate::util::ser::{Writeable, Writer};
4240
use bitcoin::secp256k1;
4341
#[cfg(taproot)]
4442
use bitcoin::secp256k1::All;
@@ -530,17 +528,6 @@ impl TaprootChannelSigner for TestChannelSigner {
530528
}
531529
}
532530

533-
impl Writeable for TestChannelSigner {
534-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), Error> {
535-
// TestChannelSigner has two fields - `inner` ([`InMemorySigner`]) and `state`
536-
// ([`EnforcementState`]). `inner` is serialized here and deserialized by
537-
// [`SignerProvider::read_chan_signer`]. `state` is managed by [`SignerProvider`]
538-
// and will be serialized as needed by the implementation of that trait.
539-
self.inner.write(writer)?;
540-
Ok(())
541-
}
542-
}
543-
544531
impl TestChannelSigner {
545532
fn verify_counterparty_commitment_tx<'a, T: secp256k1::Signing + secp256k1::Verification>(
546533
&self, commitment_tx: &'a CommitmentTransaction, secp_ctx: &Secp256k1<T>,

lightning/src/util/test_utils.rs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ use lightning_invoice::RawBolt11Invoice;
7575

7676
use crate::io;
7777
use crate::prelude::*;
78-
use crate::sign::{
79-
EntropySource, InMemorySigner, NodeSigner, RandomBytes, Recipient, SignerProvider,
80-
};
78+
use crate::sign::{EntropySource, NodeSigner, RandomBytes, Recipient, SignerProvider};
8179
use crate::sync::{Arc, Mutex};
8280
use core::cell::RefCell;
8381
use core::mem;
@@ -370,13 +368,6 @@ impl SignerProvider for OnlyReadsKeysInterface {
370368
unreachable!();
371369
}
372370

373-
fn read_chan_signer(&self, mut reader: &[u8]) -> Result<Self::EcdsaSigner, msgs::DecodeError> {
374-
let inner: InMemorySigner = ReadableArgs::read(&mut reader, self)?;
375-
let state = Arc::new(Mutex::new(EnforcementState::new()));
376-
377-
Ok(TestChannelSigner::new_with_revoked(inner, state, false))
378-
}
379-
380371
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
381372
Err(())
382373
}
@@ -1580,15 +1571,6 @@ impl SignerProvider for TestKeysInterface {
15801571
signer
15811572
}
15821573

1583-
fn read_chan_signer(&self, buffer: &[u8]) -> Result<Self::EcdsaSigner, msgs::DecodeError> {
1584-
let mut reader = io::Cursor::new(buffer);
1585-
1586-
let inner: InMemorySigner = ReadableArgs::read(&mut reader, self)?;
1587-
let state = self.make_enforcement_state_cell(inner.commitment_seed);
1588-
1589-
Ok(TestChannelSigner::new_with_revoked(inner, state, self.disable_revocation_policy_check))
1590-
}
1591-
15921574
fn get_destination_script(&self, channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
15931575
self.backing.get_destination_script(channel_keys_id)
15941576
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
## API Updates (0.2)
2+
* Upgrading from versions prior to 0.0.113 is no longer supported (#3604).

0 commit comments

Comments
 (0)