Skip to content

Commit bd64372

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 721defd commit bd64372

File tree

8 files changed

+16
-168
lines changed

8 files changed

+16
-168
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: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10300,18 +10300,17 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
1030010300

1030110301
let latest_monitor_update_id = Readable::read(reader)?;
1030210302

10303-
let mut keys_data = None;
10303+
let mut _keys_data = None;
1030410304
if ver <= 2 {
10305-
// Read the serialize signer bytes. We'll choose to deserialize them or not based on whether
10306-
// the `channel_keys_id` TLV is present below.
10305+
// Read the serialize signer bytes. These are no longer used as of version 0.2.0.
1030710306
let keys_len: u32 = Readable::read(reader)?;
10308-
keys_data = Some(Vec::with_capacity(cmp::min(keys_len as usize, MAX_ALLOC_SIZE)));
10309-
while keys_data.as_ref().unwrap().len() != keys_len as usize {
10307+
_keys_data = Some(Vec::with_capacity(cmp::min(keys_len as usize, MAX_ALLOC_SIZE)));
10308+
while _keys_data.as_ref().unwrap().len() != keys_len as usize {
1031010309
// Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
1031110310
let mut data = [0; 1024];
10312-
let read_slice = &mut data[0..cmp::min(1024, keys_len as usize - keys_data.as_ref().unwrap().len())];
10311+
let read_slice = &mut data[0..cmp::min(1024, keys_len as usize - _keys_data.as_ref().unwrap().len())];
1031310312
reader.read_exact(read_slice)?;
10314-
keys_data.as_mut().unwrap().extend_from_slice(read_slice);
10313+
_keys_data.as_mut().unwrap().extend_from_slice(read_slice);
1031510314
}
1031610315
}
1031710316

@@ -10611,10 +10610,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
1061110610
}
1061210611
(channel_keys_id, holder_signer)
1061310612
} else {
10614-
// `keys_data` can be `None` if we had corrupted data.
10615-
let keys_data = keys_data.ok_or(DecodeError::InvalidValue)?;
10616-
let holder_signer = signer_provider.read_chan_signer(&keys_data)?;
10617-
(holder_signer.channel_keys_id(), holder_signer)
10613+
return Err(DecodeError::InvalidValue);
1061810614
};
1061910615

1062010616
if let Some(preimages) = preimages_opt {
@@ -10897,7 +10893,7 @@ mod tests {
1089710893
use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
1089810894
use crate::types::features::{ChannelFeatures, ChannelTypeFeatures, NodeFeatures};
1089910895
use crate::ln::msgs;
10900-
use crate::ln::msgs::{ChannelUpdate, DecodeError, UnsignedChannelUpdate, MAX_VALUE_MSAT};
10896+
use crate::ln::msgs::{ChannelUpdate, UnsignedChannelUpdate, MAX_VALUE_MSAT};
1090110897
use crate::ln::script::ShutdownScript;
1090210898
use crate::ln::chan_utils::{self, htlc_success_tx_weight, htlc_timeout_tx_weight};
1090310899
use crate::chain::BestBlock;
@@ -10969,8 +10965,6 @@ mod tests {
1096910965
self.signer.clone()
1097010966
}
1097110967

10972-
fn read_chan_signer(&self, _data: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> { panic!(); }
10973-
1097410968
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
1097510969
let secp_ctx = Secp256k1::signing_only();
1097610970
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
@@ -13507,8 +13507,8 @@ where
1350713507
pub node_signer: NS,
1350813508

1350913509
/// The keys provider which will give us relevant keys. Some keys will be loaded during
13510-
/// deserialization and KeysInterface::read_chan_signer will be used to read per-Channel
13511-
/// signing data.
13510+
/// deserialization and [`SignerProvider::derive_channel_signer`] will be used to derive
13511+
/// per-Channel signing data.
1351213512
pub signer_provider: SP,
1351313513

1351413514
/// 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,13 +31,11 @@ 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;
40-
use crate::util::ser::{Writeable, Writer};
4139
use bitcoin::secp256k1;
4240
#[cfg(taproot)]
4341
use bitcoin::secp256k1::All;
@@ -556,17 +554,6 @@ impl TaprootChannelSigner for TestChannelSigner {
556554
}
557555
}
558556

559-
impl Writeable for TestChannelSigner {
560-
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), Error> {
561-
// TestChannelSigner has two fields - `inner` ([`InMemorySigner`]) and `state`
562-
// ([`EnforcementState`]). `inner` is serialized here and deserialized by
563-
// [`SignerProvider::read_chan_signer`]. `state` is managed by [`SignerProvider`]
564-
// and will be serialized as needed by the implementation of that trait.
565-
self.inner.write(writer)?;
566-
Ok(())
567-
}
568-
}
569-
570557
impl TestChannelSigner {
571558
fn verify_counterparty_commitment_tx<'a, T: secp256k1::Signing + secp256k1::Verification>(
572559
&self, channel_parameters: &ChannelTransactionParameters,

lightning/src/util/test_utils.rs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ use lightning_invoice::RawBolt11Invoice;
7676
use crate::io;
7777
use crate::prelude::*;
7878
use crate::sign::{
79-
EntropySource, InMemorySigner, NodeSigner, RandomBytes, Recipient, SignerProvider,
79+
EntropySource, NodeSigner, RandomBytes, Recipient, SignerProvider,
8080
};
8181
use crate::sync::{Arc, Mutex};
8282
use core::cell::RefCell;
@@ -370,13 +370,6 @@ impl SignerProvider for OnlyReadsKeysInterface {
370370
unreachable!();
371371
}
372372

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-
380373
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
381374
Err(())
382375
}
@@ -1580,15 +1573,6 @@ impl SignerProvider for TestKeysInterface {
15801573
signer
15811574
}
15821575

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-
15921576
fn get_destination_script(&self, channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
15931577
self.backing.get_destination_script(channel_keys_id)
15941578
}

0 commit comments

Comments
 (0)