@@ -36,7 +36,7 @@ use crate::chain::keysinterface::{Sign, KeysInterface};
3636use crate :: chain:: package:: PackageSolvingData ;
3737use crate :: chain:: package:: PackageTemplate ;
3838use crate :: util:: logger:: Logger ;
39- use crate :: util:: ser:: { Readable , ReadableArgs , MaybeReadable , Writer , Writeable } ;
39+ use crate :: util:: ser:: { Readable , ReadableArgs , MaybeReadable , Writer , Writeable , VecWriter } ;
4040use crate :: util:: byte_utils;
4141
4242use crate :: io;
@@ -250,7 +250,7 @@ pub struct OnchainTxHandler<ChannelSigner: Sign> {
250250 pub ( super ) secp_ctx : Secp256k1 < secp256k1:: All > ,
251251}
252252
253- const SERIALIZATION_VERSION : u8 = 2 ;
253+ const SERIALIZATION_VERSION : u8 = 1 ;
254254const MIN_SERIALIZATION_VERSION : u8 = 1 ;
255255
256256impl < ChannelSigner : Sign > OnchainTxHandler < ChannelSigner > {
@@ -265,6 +265,13 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
265265
266266 self . channel_transaction_parameters . write ( writer) ?;
267267
268+ let mut key_data = VecWriter ( Vec :: new ( ) ) ;
269+ self . signer . write ( & mut key_data) ?;
270+ assert ! ( key_data. 0 . len( ) < core:: usize :: MAX ) ;
271+ assert ! ( key_data. 0 . len( ) < core:: u32 :: MAX as usize ) ;
272+ ( key_data. 0 . len ( ) as u32 ) . write ( writer) ?;
273+ writer. write_all ( & key_data. 0 [ ..] ) ?;
274+
268275 writer. write_all ( & byte_utils:: be64_to_array ( self . pending_claim_requests . len ( ) as u64 ) ) ?;
269276 for ( ref ancestor_claim_txid, request) in self . pending_claim_requests . iter ( ) {
270277 ancestor_claim_txid. write ( writer) ?;
@@ -303,7 +310,7 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan
303310 let channel_value_satoshis = args. 1 ;
304311 let channel_keys_id = args. 2 ;
305312
306- let ver = read_ver_prefix ! ( reader, SERIALIZATION_VERSION ) ;
313+ let _ver = read_ver_prefix ! ( reader, SERIALIZATION_VERSION ) ;
307314
308315 let destination_script = Readable :: read ( reader) ?;
309316
@@ -314,21 +321,19 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan
314321
315322 let channel_parameters = Readable :: read ( reader) ?;
316323
317- let mut signer: K :: Signer ;
318- if ver <= 1 {
319- let keys_len: u32 = Readable :: read ( reader) ?;
320- let mut keys_data = Vec :: with_capacity ( cmp:: min ( keys_len as usize , MAX_ALLOC_SIZE ) ) ;
321- while keys_data. len ( ) != keys_len as usize {
322- // Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
323- let mut data = [ 0 ; 1024 ] ;
324- let read_slice = & mut data[ 0 ..cmp:: min ( 1024 , keys_len as usize - keys_data. len ( ) ) ] ;
325- reader. read_exact ( read_slice) ?;
326- keys_data. extend_from_slice ( read_slice) ;
327- }
328- signer = keys_manager. read_chan_signer ( & keys_data) ?;
329- } else {
330- signer = keys_manager. derive_channel_signer ( channel_value_satoshis, channel_keys_id) ;
324+ // Read the serialized signer bytes, but don't deserialize them, as we'll obtain our signer
325+ // by re-deriving the private key material.
326+ let keys_len: u32 = Readable :: read ( reader) ?;
327+ let mut keys_data = Vec :: with_capacity ( cmp:: min ( keys_len as usize , MAX_ALLOC_SIZE ) ) ;
328+ while keys_data. len ( ) != keys_len as usize {
329+ // Read 1KB at a time to avoid accidentally allocating 4GB on corrupted channel keys
330+ let mut data = [ 0 ; 1024 ] ;
331+ let read_slice = & mut data[ 0 ..cmp:: min ( 1024 , keys_len as usize - keys_data. len ( ) ) ] ;
332+ reader. read_exact ( read_slice) ?;
333+ keys_data. extend_from_slice ( read_slice) ;
331334 }
335+
336+ let mut signer = keys_manager. derive_channel_signer ( channel_value_satoshis, Some ( channel_keys_id) ) ;
332337 signer. ready_channel ( & channel_parameters) ;
333338
334339 let pending_claim_requests_len: u64 = Readable :: read ( reader) ?;
0 commit comments