@@ -35,8 +35,8 @@ use bitcoin::{secp256k1, EcdsaSighashType};
3535use crate :: ln:: channel:: INITIAL_COMMITMENT_NUMBER ;
3636use crate :: ln:: { PaymentHash , PaymentPreimage } ;
3737use crate :: ln:: msgs:: DecodeError ;
38- use crate :: ln:: chan_utils ;
39- use crate :: ln:: chan_utils:: { CommitmentTransaction , CounterpartyCommitmentSecrets , HTLCOutputInCommitment , HTLCClaim , ChannelTransactionParameters , HolderCommitmentTransaction , TxCreationKeys } ;
38+ use crate :: ln:: channel_keys :: { DelayedPaymentKey , DelayedPaymentBasepoint , HtlcBasepoint } ;
39+ use crate :: ln:: chan_utils:: { self , CommitmentTransaction , CounterpartyCommitmentSecrets , HTLCOutputInCommitment , HTLCClaim , ChannelTransactionParameters , HolderCommitmentTransaction , TxCreationKeys } ;
4040use crate :: ln:: channelmanager:: { HTLCSource , SentHTLCId } ;
4141use crate :: chain;
4242use crate :: chain:: { BestBlock , WatchedOutput } ;
@@ -240,7 +240,7 @@ struct HolderSignedTx {
240240 revocation_key : PublicKey ,
241241 a_htlc_key : PublicKey ,
242242 b_htlc_key : PublicKey ,
243- delayed_payment_key : PublicKey ,
243+ delayed_payment_key : DelayedPaymentKey ,
244244 per_commitment_point : PublicKey ,
245245 htlc_outputs : Vec < ( HTLCOutputInCommitment , Option < Signature > , Option < HTLCSource > ) > ,
246246 to_self_value_sat : u64 ,
@@ -277,8 +277,8 @@ impl HolderSignedTx {
277277/// justice or 2nd-stage preimage/timeout transactions.
278278#[ derive( Clone , PartialEq , Eq ) ]
279279struct CounterpartyCommitmentParameters {
280- counterparty_delayed_payment_base_key : PublicKey ,
281- counterparty_htlc_base_key : PublicKey ,
280+ counterparty_delayed_payment_base_key : DelayedPaymentBasepoint ,
281+ counterparty_htlc_base_key : HtlcBasepoint ,
282282 on_counterparty_tx_csv : u16 ,
283283}
284284
@@ -1162,8 +1162,8 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitor<Signer> {
11621162 let holder_commitment_tx = HolderSignedTx {
11631163 txid,
11641164 revocation_key : tx_keys. revocation_key ,
1165- a_htlc_key : tx_keys. broadcaster_htlc_key ,
1166- b_htlc_key : tx_keys. countersignatory_htlc_key ,
1165+ a_htlc_key : tx_keys. broadcaster_htlc_key . to_public_key ( ) ,
1166+ b_htlc_key : tx_keys. countersignatory_htlc_key . to_public_key ( ) ,
11671167 delayed_payment_key : tx_keys. broadcaster_delayed_payment_key ,
11681168 per_commitment_point : tx_keys. per_commitment_point ,
11691169 htlc_outputs : Vec :: new ( ) , // There are never any HTLCs in the initial commitment transactions
@@ -2493,8 +2493,8 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
24932493 let mut new_holder_commitment_tx = HolderSignedTx {
24942494 txid,
24952495 revocation_key : tx_keys. revocation_key ,
2496- a_htlc_key : tx_keys. broadcaster_htlc_key ,
2497- b_htlc_key : tx_keys. countersignatory_htlc_key ,
2496+ a_htlc_key : tx_keys. broadcaster_htlc_key . to_public_key ( ) ,
2497+ b_htlc_key : tx_keys. countersignatory_htlc_key . to_public_key ( ) ,
24982498 delayed_payment_key : tx_keys. broadcaster_delayed_payment_key ,
24992499 per_commitment_point : tx_keys. per_commitment_point ,
25002500 htlc_outputs,
@@ -2926,9 +2926,10 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
29262926 let revocation_pubkey = chan_utils:: derive_public_revocation_key (
29272927 & self . onchain_tx_handler . secp_ctx , & their_per_commitment_point,
29282928 & self . holder_revocation_basepoint ) ;
2929- let delayed_key = chan_utils:: derive_public_key ( & self . onchain_tx_handler . secp_ctx ,
2930- & their_per_commitment_point,
2931- & self . counterparty_commitment_params . counterparty_delayed_payment_base_key ) ;
2929+ let delayed_payment_basepoint = DelayedPaymentBasepoint :: from ( self . counterparty_commitment_params . counterparty_delayed_payment_base_key ) ;
2930+ let delayed_key = DelayedPaymentKey :: from_basepoint ( & self . onchain_tx_handler . secp_ctx ,
2931+ & delayed_payment_basepoint,
2932+ & their_per_commitment_point) ;
29322933 let revokeable_redeemscript = chan_utils:: get_revokeable_redeemscript ( & revocation_pubkey,
29332934 self . counterparty_commitment_params . on_counterparty_tx_csv , & delayed_key) ;
29342935
@@ -2992,7 +2993,7 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
29922993 let per_commitment_key = ignore_error ! ( SecretKey :: from_slice( & secret) ) ;
29932994 let per_commitment_point = PublicKey :: from_secret_key ( & self . onchain_tx_handler . secp_ctx , & per_commitment_key) ;
29942995 let revocation_pubkey = chan_utils:: derive_public_revocation_key ( & self . onchain_tx_handler . secp_ctx , & per_commitment_point, & self . holder_revocation_basepoint ) ;
2995- let delayed_key = chan_utils :: derive_public_key ( & self . onchain_tx_handler . secp_ctx , & PublicKey :: from_secret_key ( & self . onchain_tx_handler . secp_ctx , & per_commitment_key) , & self . counterparty_commitment_params . counterparty_delayed_payment_base_key ) ;
2996+ let delayed_key = DelayedPaymentKey :: from_basepoint ( & self . onchain_tx_handler . secp_ctx , & self . counterparty_commitment_params . counterparty_delayed_payment_base_key , & PublicKey :: from_secret_key ( & self . onchain_tx_handler . secp_ctx , & per_commitment_key) ) ;
29962997
29972998 let revokeable_redeemscript = chan_utils:: get_revokeable_redeemscript ( & revocation_pubkey, self . counterparty_commitment_params . on_counterparty_tx_csv , & delayed_key) ;
29982999 let revokeable_p2wsh = revokeable_redeemscript. to_v0_p2wsh ( ) ;
@@ -3106,9 +3107,9 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
31063107 if let Some ( transaction) = tx {
31073108 let revocation_pubkey = chan_utils:: derive_public_revocation_key (
31083109 & self . onchain_tx_handler . secp_ctx , & per_commitment_point, & self . holder_revocation_basepoint ) ;
3109- let delayed_key = chan_utils :: derive_public_key ( & self . onchain_tx_handler . secp_ctx ,
3110- & per_commitment_point ,
3111- & self . counterparty_commitment_params . counterparty_delayed_payment_base_key ) ;
3110+
3111+ let delayed_key = DelayedPaymentKey :: from_basepoint ( & self . onchain_tx_handler . secp_ctx , & self . counterparty_commitment_params . counterparty_delayed_payment_base_key , & per_commitment_point ) ;
3112+
31123113 let revokeable_p2wsh = chan_utils:: get_revokeable_redeemscript ( & revocation_pubkey,
31133114 self . counterparty_commitment_params . on_counterparty_tx_csv ,
31143115 & delayed_key) . to_v0_p2wsh ( ) ;
@@ -4504,8 +4505,8 @@ mod tests {
45044505 use crate :: chain:: transaction:: OutPoint ;
45054506 use crate :: sign:: InMemorySigner ;
45064507 use crate :: ln:: { PaymentPreimage , PaymentHash } ;
4507- use crate :: ln:: chan_utils ;
4508- use crate :: ln:: chan_utils:: { HTLCOutputInCommitment , ChannelPublicKeys , ChannelTransactionParameters , HolderCommitmentTransaction , CounterpartyChannelTransactionParameters } ;
4508+ use crate :: ln:: channel_keys :: { DelayedPaymentBasepoint , DelayedPaymentKey , HtlcBasepoint } ;
4509+ use crate :: ln:: chan_utils:: { self , HTLCOutputInCommitment , ChannelPublicKeys , ChannelTransactionParameters , HolderCommitmentTransaction , CounterpartyChannelTransactionParameters } ;
45094510 use crate :: ln:: channelmanager:: { PaymentSendFailure , PaymentId , RecipientOnionFields } ;
45104511 use crate :: ln:: functional_test_utils:: * ;
45114512 use crate :: ln:: script:: ShutdownScript ;
@@ -4673,8 +4674,8 @@ mod tests {
46734674 funding_pubkey : PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 44 ; 32 ] ) . unwrap ( ) ) ,
46744675 revocation_basepoint : PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 45 ; 32 ] ) . unwrap ( ) ) ,
46754676 payment_point : PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 46 ; 32 ] ) . unwrap ( ) ) ,
4676- delayed_payment_basepoint : PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 47 ; 32 ] ) . unwrap ( ) ) ,
4677- htlc_basepoint : PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 48 ; 32 ] ) . unwrap ( ) )
4677+ delayed_payment_basepoint : DelayedPaymentBasepoint :: from ( PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 47 ; 32 ] ) . unwrap ( ) ) ) ,
4678+ htlc_basepoint : HtlcBasepoint :: from ( PublicKey :: from_secret_key ( & secp_ctx, & SecretKey :: from_slice ( & [ 48 ; 32 ] ) . unwrap ( ) ) )
46784679 } ;
46794680 let funding_outpoint = OutPoint { txid : Txid :: all_zeros ( ) , index : u16:: max_value ( ) } ;
46804681 let channel_parameters = ChannelTransactionParameters {
@@ -4764,6 +4765,7 @@ mod tests {
47644765 let privkey = SecretKey :: from_slice ( & hex:: decode ( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap ( ) [ ..] ) . unwrap ( ) ;
47654766 let pubkey = PublicKey :: from_secret_key ( & secp_ctx, & privkey) ;
47664767
4768+ use crate :: ln:: channel_keys:: { HtlcKey , HtlcBasepoint } ;
47674769 macro_rules! sign_input {
47684770 ( $sighash_parts: expr, $idx: expr, $amount: expr, $weight: expr, $sum_actual_sigs: expr, $opt_anchors: expr) => {
47694771 let htlc = HTLCOutputInCommitment {
@@ -4773,7 +4775,7 @@ mod tests {
47734775 payment_hash: PaymentHash ( [ 1 ; 32 ] ) ,
47744776 transaction_output_index: Some ( $idx as u32 ) ,
47754777 } ;
4776- let redeem_script = if * $weight == WEIGHT_REVOKED_OUTPUT { chan_utils:: get_revokeable_redeemscript( & pubkey, 256 , & pubkey) } else { chan_utils:: get_htlc_redeemscript_with_explicit_keys( & htlc, $opt_anchors, & pubkey, & pubkey, & pubkey) } ;
4778+ let redeem_script = if * $weight == WEIGHT_REVOKED_OUTPUT { chan_utils:: get_revokeable_redeemscript( & pubkey, 256 , & DelayedPaymentKey :: from_basepoint ( & secp_ctx , & DelayedPaymentBasepoint :: from ( pubkey) , & pubkey ) ) } else { chan_utils:: get_htlc_redeemscript_with_explicit_keys( & htlc, $opt_anchors, & HtlcKey :: from_basepoint ( & secp_ctx , & HtlcBasepoint :: from ( pubkey) , & pubkey) , & HtlcKey :: from_basepoint ( & secp_ctx , & HtlcBasepoint :: from ( pubkey ) , & pubkey ) , & pubkey) } ;
47774779 let sighash = hash_to_message!( & $sighash_parts. segwit_signature_hash( $idx, & redeem_script, $amount, EcdsaSighashType :: All ) . unwrap( ) [ ..] ) ;
47784780 let sig = secp_ctx. sign_ecdsa( & sighash, & privkey) ;
47794781 let mut ser_sig = sig. serialize_der( ) . to_vec( ) ;
0 commit comments