@@ -36,7 +36,7 @@ use crate::chain::keysinterface::{Sign, KeysInterface};
36
36
use crate :: chain:: package:: PackageSolvingData ;
37
37
use crate :: chain:: package:: PackageTemplate ;
38
38
use 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 } ;
40
40
use crate :: util:: byte_utils;
41
41
42
42
use crate :: io;
@@ -250,7 +250,7 @@ pub struct OnchainTxHandler<ChannelSigner: Sign> {
250
250
pub ( super ) secp_ctx : Secp256k1 < secp256k1:: All > ,
251
251
}
252
252
253
- const SERIALIZATION_VERSION : u8 = 2 ;
253
+ const SERIALIZATION_VERSION : u8 = 1 ;
254
254
const MIN_SERIALIZATION_VERSION : u8 = 1 ;
255
255
256
256
impl < ChannelSigner : Sign > OnchainTxHandler < ChannelSigner > {
@@ -265,6 +265,13 @@ impl<ChannelSigner: Sign> OnchainTxHandler<ChannelSigner> {
265
265
266
266
self . channel_transaction_parameters . write ( writer) ?;
267
267
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
+
268
275
writer. write_all ( & byte_utils:: be64_to_array ( self . pending_claim_requests . len ( ) as u64 ) ) ?;
269
276
for ( ref ancestor_claim_txid, request) in self . pending_claim_requests . iter ( ) {
270
277
ancestor_claim_txid. write ( writer) ?;
@@ -303,7 +310,7 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan
303
310
let channel_value_satoshis = args. 1 ;
304
311
let channel_keys_id = args. 2 ;
305
312
306
- let ver = read_ver_prefix ! ( reader, SERIALIZATION_VERSION ) ;
313
+ let _ver = read_ver_prefix ! ( reader, SERIALIZATION_VERSION ) ;
307
314
308
315
let destination_script = Readable :: read ( reader) ?;
309
316
@@ -314,21 +321,19 @@ impl<'a, K: KeysInterface> ReadableArgs<(&'a K, u64, [u8; 32])> for OnchainTxHan
314
321
315
322
let channel_parameters = Readable :: read ( reader) ?;
316
323
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) ;
331
334
}
335
+
336
+ let mut signer = keys_manager. derive_channel_signer ( channel_value_satoshis, Some ( channel_keys_id) ) ;
332
337
signer. ready_channel ( & channel_parameters) ;
333
338
334
339
let pending_claim_requests_len: u64 = Readable :: read ( reader) ?;
0 commit comments