You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Remove unreachable Err cases on derive_*_revocation_key
The `derive_{public,private}_revocation_key` methods hash the two
input keys and then multiply the two input keys by hashed values
before adding them together. Because addition can fail if the tweak
is the inverse of the secret key this method currently returns a
`Result`.
However, it is not cryptographically possible to reach the error
case - in order to create an issue, the point-multiplied-by-hash
values must be the inverse of each other, however each point
commits the SHA-256 hash of both keys together. Thus, because
changing either key changes the hashes (and the ultimate points
added together) in an unpredictable way, there should be no way to
construct such points.
let secret = self.get_secret(commitment_number).unwrap();
2444
2444
let per_commitment_key = ignore_error!(SecretKey::from_slice(&secret));
2445
2445
let per_commitment_point = PublicKey::from_secret_key(&self.secp_ctx,&per_commitment_key);
2446
-
let revocation_pubkey = ignore_error!(chan_utils::derive_public_revocation_key(&self.secp_ctx,&per_commitment_point,&self.holder_revocation_basepoint));
2446
+
let revocation_pubkey = chan_utils::derive_public_revocation_key(&self.secp_ctx,&per_commitment_point,&self.holder_revocation_basepoint);
2447
2447
let delayed_key = chan_utils::derive_public_key(&self.secp_ctx,&PublicKey::from_secret_key(&self.secp_ctx,&per_commitment_key),&self.counterparty_commitment_params.counterparty_delayed_payment_base_key);
2448
2448
2449
2449
let revokeable_redeemscript = chan_utils::get_revokeable_redeemscript(&revocation_pubkey,self.counterparty_commitment_params.on_counterparty_tx_csv,&delayed_key);
let revocation_key = chan_utils::derive_private_revocation_key(&secp_ctx,&per_commitment_key,&self.revocation_base_key).map_err(|_| ())?;
745
+
let revocation_key = chan_utils::derive_private_revocation_key(&secp_ctx,&per_commitment_key,&self.revocation_base_key);
746
746
let per_commitment_point = PublicKey::from_secret_key(secp_ctx,&per_commitment_key);
747
-
let revocation_pubkey = chan_utils::derive_public_revocation_key(&secp_ctx,&per_commitment_point,&self.pubkeys().revocation_basepoint).map_err(|_| ())?;
747
+
let revocation_pubkey = chan_utils::derive_public_revocation_key(&secp_ctx,&per_commitment_point,&self.pubkeys().revocation_basepoint);
748
748
let witness_script = {
749
749
let counterparty_delayedpubkey = chan_utils::derive_public_key(&secp_ctx,&per_commitment_point,&self.counterparty_pubkeys().delayed_payment_basepoint);
let revocation_key = chan_utils::derive_private_revocation_key(&secp_ctx,&per_commitment_key,&self.revocation_base_key).map_err(|_| ())?;
758
+
let revocation_key = chan_utils::derive_private_revocation_key(&secp_ctx,&per_commitment_key,&self.revocation_base_key);
759
759
let per_commitment_point = PublicKey::from_secret_key(secp_ctx,&per_commitment_key);
760
-
let revocation_pubkey = chan_utils::derive_public_revocation_key(&secp_ctx,&per_commitment_point,&self.pubkeys().revocation_basepoint).map_err(|_| ())?;
760
+
let revocation_pubkey = chan_utils::derive_public_revocation_key(&secp_ctx,&per_commitment_point,&self.pubkeys().revocation_basepoint);
761
761
let witness_script = {
762
762
let counterparty_htlcpubkey = chan_utils::derive_public_key(&secp_ctx,&per_commitment_point,&self.counterparty_pubkeys().htlc_basepoint);
763
763
let holder_htlcpubkey = chan_utils::derive_public_key(&secp_ctx,&per_commitment_point,&self.pubkeys().htlc_basepoint);
@@ -770,11 +770,10 @@ impl BaseSign for InMemorySigner {
let revocation_pubkey = chan_utils::derive_public_revocation_key(&secp_ctx,&per_commitment_point,&self.pubkeys().revocation_basepoint);
774
+
let counterparty_htlcpubkey = chan_utils::derive_public_key(&secp_ctx,&per_commitment_point,&self.counterparty_pubkeys().htlc_basepoint);
775
+
let htlcpubkey = chan_utils::derive_public_key(&secp_ctx,&per_commitment_point,&self.pubkeys().htlc_basepoint);
776
+
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&htlc,self.opt_anchors(),&counterparty_htlcpubkey,&htlcpubkey,&revocation_pubkey);
let countersignatory_contrib = countersignatory_revocation_base_secret.clone().mul_tweak(&Scalar::from_be_bytes(rev_append_commit_hash_key).unwrap())?;
373
-
let broadcaster_contrib = per_commitment_secret.clone().mul_tweak(&Scalar::from_be_bytes(commit_append_rev_hash_key).unwrap())?;
371
+
let countersignatory_contrib = countersignatory_revocation_base_secret.clone().mul_tweak(&Scalar::from_be_bytes(rev_append_commit_hash_key).unwrap())
372
+
.expect("Multiplying a secret key by a hash is expected to never fail per secp256k1 docs");
373
+
let broadcaster_contrib = per_commitment_secret.clone().mul_tweak(&Scalar::from_be_bytes(commit_append_rev_hash_key).unwrap())
374
+
.expect("Multiplying a secret key by a hash is expected to never fail per secp256k1 docs");
let countersignatory_contrib = countersignatory_revocation_base_point.clone().mul_tweak(&secp_ctx,&Scalar::from_be_bytes(rev_append_commit_hash_key).unwrap())?;
405
-
let broadcaster_contrib = per_commitment_point.clone().mul_tweak(&secp_ctx,&Scalar::from_be_bytes(commit_append_rev_hash_key).unwrap())?;
408
+
let countersignatory_contrib = countersignatory_revocation_base_point.clone().mul_tweak(&secp_ctx,&Scalar::from_be_bytes(rev_append_commit_hash_key).unwrap())
409
+
.expect("Multiplying a valid public key by a hash is expected to never fail per secp256k1 docs");
410
+
let broadcaster_contrib = per_commitment_point.clone().mul_tweak(&secp_ctx,&Scalar::from_be_bytes(commit_append_rev_hash_key).unwrap())
411
+
.expect("Multiplying a valid public key by a hash is expected to never fail per secp256k1 docs");
0 commit comments