Skip to content

Commit 2cfc1db

Browse files
committed
Remove unreachable Err cases when constructing TxCreationKeys
1 parent 5671d29 commit 2cfc1db

File tree

4 files changed

+62
-67
lines changed

4 files changed

+62
-67
lines changed

lightning/src/chain/package.rs

Lines changed: 40 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -381,57 +381,53 @@ impl PackageSolvingData {
381381
fn finalize_input<Signer: Sign>(&self, bumped_tx: &mut Transaction, i: usize, onchain_handler: &mut OnchainTxHandler<Signer>) -> bool {
382382
match self {
383383
PackageSolvingData::RevokedOutput(ref outp) => {
384-
if let Ok(chan_keys) = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint) {
385-
let witness_script = chan_utils::get_revokeable_redeemscript(&chan_keys.revocation_key, outp.on_counterparty_tx_csv, &chan_keys.broadcaster_delayed_payment_key);
386-
//TODO: should we panic on signer failure ?
387-
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_output(&bumped_tx, i, outp.amount, &outp.per_commitment_key, &onchain_handler.secp_ctx) {
388-
let mut ser_sig = sig.serialize_der().to_vec();
389-
ser_sig.push(EcdsaSighashType::All as u8);
390-
bumped_tx.input[i].witness.push(ser_sig);
391-
bumped_tx.input[i].witness.push(vec!(1));
392-
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
393-
} else { return false; }
394-
}
384+
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
385+
let witness_script = chan_utils::get_revokeable_redeemscript(&chan_keys.revocation_key, outp.on_counterparty_tx_csv, &chan_keys.broadcaster_delayed_payment_key);
386+
//TODO: should we panic on signer failure ?
387+
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_output(&bumped_tx, i, outp.amount, &outp.per_commitment_key, &onchain_handler.secp_ctx) {
388+
let mut ser_sig = sig.serialize_der().to_vec();
389+
ser_sig.push(EcdsaSighashType::All as u8);
390+
bumped_tx.input[i].witness.push(ser_sig);
391+
bumped_tx.input[i].witness.push(vec!(1));
392+
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
393+
} else { return false; }
395394
},
396395
PackageSolvingData::RevokedHTLCOutput(ref outp) => {
397-
if let Ok(chan_keys) = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint) {
398-
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
399-
//TODO: should we panic on signer failure ?
400-
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_htlc(&bumped_tx, i, outp.amount, &outp.per_commitment_key, &outp.htlc, &onchain_handler.secp_ctx) {
401-
let mut ser_sig = sig.serialize_der().to_vec();
402-
ser_sig.push(EcdsaSighashType::All as u8);
403-
bumped_tx.input[i].witness.push(ser_sig);
404-
bumped_tx.input[i].witness.push(chan_keys.revocation_key.clone().serialize().to_vec());
405-
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
406-
} else { return false; }
407-
}
396+
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
397+
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
398+
//TODO: should we panic on signer failure ?
399+
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_htlc(&bumped_tx, i, outp.amount, &outp.per_commitment_key, &outp.htlc, &onchain_handler.secp_ctx) {
400+
let mut ser_sig = sig.serialize_der().to_vec();
401+
ser_sig.push(EcdsaSighashType::All as u8);
402+
bumped_tx.input[i].witness.push(ser_sig);
403+
bumped_tx.input[i].witness.push(chan_keys.revocation_key.clone().serialize().to_vec());
404+
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
405+
} else { return false; }
408406
},
409407
PackageSolvingData::CounterpartyOfferedHTLCOutput(ref outp) => {
410-
if let Ok(chan_keys) = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint) {
411-
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
412-
413-
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
414-
let mut ser_sig = sig.serialize_der().to_vec();
415-
ser_sig.push(EcdsaSighashType::All as u8);
416-
bumped_tx.input[i].witness.push(ser_sig);
417-
bumped_tx.input[i].witness.push(outp.preimage.0.to_vec());
418-
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
419-
}
408+
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
409+
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
410+
411+
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
412+
let mut ser_sig = sig.serialize_der().to_vec();
413+
ser_sig.push(EcdsaSighashType::All as u8);
414+
bumped_tx.input[i].witness.push(ser_sig);
415+
bumped_tx.input[i].witness.push(outp.preimage.0.to_vec());
416+
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
420417
}
421418
},
422419
PackageSolvingData::CounterpartyReceivedHTLCOutput(ref outp) => {
423-
if let Ok(chan_keys) = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint) {
424-
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
425-
426-
bumped_tx.lock_time = PackedLockTime(outp.htlc.cltv_expiry); // Right now we don't aggregate time-locked transaction, if we do we should set lock_time before to avoid breaking hash computation
427-
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
428-
let mut ser_sig = sig.serialize_der().to_vec();
429-
ser_sig.push(EcdsaSighashType::All as u8);
430-
bumped_tx.input[i].witness.push(ser_sig);
431-
// Due to BIP146 (MINIMALIF) this must be a zero-length element to relay.
432-
bumped_tx.input[i].witness.push(vec![]);
433-
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
434-
}
420+
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
421+
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
422+
423+
bumped_tx.lock_time = PackedLockTime(outp.htlc.cltv_expiry); // Right now we don't aggregate time-locked transaction, if we do we should set lock_time before to avoid breaking hash computation
424+
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
425+
let mut ser_sig = sig.serialize_der().to_vec();
426+
ser_sig.push(EcdsaSighashType::All as u8);
427+
bumped_tx.input[i].witness.push(ser_sig);
428+
// Due to BIP146 (MINIMALIF) this must be a zero-length element to relay.
429+
bumped_tx.input[i].witness.push(vec![]);
430+
bumped_tx.input[i].witness.push(witness_script.clone().into_bytes());
435431
}
436432
},
437433
_ => { panic!("API Error!"); }

lightning/src/ln/chan_utils.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use crate::util::{byte_utils, transaction_utils};
2828
use bitcoin::hash_types::WPubkeyHash;
2929
use bitcoin::secp256k1::{SecretKey, PublicKey, Scalar};
3030
use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature, Message};
31-
use bitcoin::secp256k1::Error as SecpError;
3231
use bitcoin::{PackedLockTime, secp256k1, Sequence, Witness};
3332

3433
use crate::io;
@@ -483,19 +482,19 @@ impl_writeable_tlv_based!(ChannelPublicKeys, {
483482
impl TxCreationKeys {
484483
/// Create per-state keys from channel base points and the per-commitment point.
485484
/// Key set is asymmetric and can't be used as part of counter-signatory set of transactions.
486-
pub fn derive_new<T: secp256k1::Signing + secp256k1::Verification>(secp_ctx: &Secp256k1<T>, per_commitment_point: &PublicKey, broadcaster_delayed_payment_base: &PublicKey, broadcaster_htlc_base: &PublicKey, countersignatory_revocation_base: &PublicKey, countersignatory_htlc_base: &PublicKey) -> Result<TxCreationKeys, SecpError> {
487-
Ok(TxCreationKeys {
485+
pub fn derive_new<T: secp256k1::Signing + secp256k1::Verification>(secp_ctx: &Secp256k1<T>, per_commitment_point: &PublicKey, broadcaster_delayed_payment_base: &PublicKey, broadcaster_htlc_base: &PublicKey, countersignatory_revocation_base: &PublicKey, countersignatory_htlc_base: &PublicKey) -> TxCreationKeys {
486+
TxCreationKeys {
488487
per_commitment_point: per_commitment_point.clone(),
489488
revocation_key: derive_public_revocation_key(&secp_ctx, &per_commitment_point, &countersignatory_revocation_base),
490489
broadcaster_htlc_key: derive_public_key(&secp_ctx, &per_commitment_point, &broadcaster_htlc_base),
491490
countersignatory_htlc_key: derive_public_key(&secp_ctx, &per_commitment_point, &countersignatory_htlc_base),
492491
broadcaster_delayed_payment_key: derive_public_key(&secp_ctx, &per_commitment_point, &broadcaster_delayed_payment_base),
493-
})
492+
}
494493
}
495494

496495
/// Generate per-state keys from channel static keys.
497496
/// Key set is asymmetric and can't be used as part of counter-signatory set of transactions.
498-
pub fn from_channel_static_keys<T: secp256k1::Signing + secp256k1::Verification>(per_commitment_point: &PublicKey, broadcaster_keys: &ChannelPublicKeys, countersignatory_keys: &ChannelPublicKeys, secp_ctx: &Secp256k1<T>) -> Result<TxCreationKeys, SecpError> {
497+
pub fn from_channel_static_keys<T: secp256k1::Signing + secp256k1::Verification>(per_commitment_point: &PublicKey, broadcaster_keys: &ChannelPublicKeys, countersignatory_keys: &ChannelPublicKeys, secp_ctx: &Secp256k1<T>) -> TxCreationKeys {
499498
TxCreationKeys::derive_new(
500499
&secp_ctx,
501500
&per_commitment_point,
@@ -1450,7 +1449,7 @@ impl CommitmentTransaction {
14501449
pub fn verify<T: secp256k1::Signing + secp256k1::Verification>(&self, channel_parameters: &DirectedChannelTransactionParameters, broadcaster_keys: &ChannelPublicKeys, countersignatory_keys: &ChannelPublicKeys, secp_ctx: &Secp256k1<T>) -> Result<TrustedCommitmentTransaction, ()> {
14511450
// This is the only field of the key cache that we trust
14521451
let per_commitment_point = self.keys.per_commitment_point;
1453-
let keys = TxCreationKeys::from_channel_static_keys(&per_commitment_point, broadcaster_keys, countersignatory_keys, secp_ctx).unwrap();
1452+
let keys = TxCreationKeys::from_channel_static_keys(&per_commitment_point, broadcaster_keys, countersignatory_keys, secp_ctx);
14541453
if keys != self.keys {
14551454
return Err(());
14561455
}
@@ -1629,7 +1628,7 @@ mod tests {
16291628
let htlc_basepoint = &signer.pubkeys().htlc_basepoint;
16301629
let holder_pubkeys = signer.pubkeys();
16311630
let counterparty_pubkeys = counterparty_signer.pubkeys();
1632-
let keys = TxCreationKeys::derive_new(&secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint).unwrap();
1631+
let keys = TxCreationKeys::derive_new(&secp_ctx, &per_commitment_point, delayed_payment_base, htlc_basepoint, &counterparty_pubkeys.revocation_basepoint, &counterparty_pubkeys.htlc_basepoint);
16331632
let mut channel_parameters = ChannelTransactionParameters {
16341633
holder_pubkeys: holder_pubkeys.clone(),
16351634
holder_selected_contest_delay: 0,

0 commit comments

Comments
 (0)