Restore splice fuzzing by default
What changed, and why it matters
This commit re-enables an existing fuzz test for a feature called 'splicing' and adds test coverage for one more signer operation. It only changes test/fuzzing code, not the production Lightning protocol code that real users run. There is no indication it fixes a security bug or changes runtime behavior.
No security action required. Treat as a normal testing/QA commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit removes the temporary cfg(splicing) gating in fuzz/Cargo.toml and fuzz/src/chanmon_consistency.rs, restoring splice fuzzing by default. It also adds SignerOp::SignSpliceSharedInput to the fuzzer’s supported signer operations and adds four new fuzz input branches (0xcf-0xd2) to unblock async signing of splice shared inputs. All changes are confined to the fuzz harness; no production library code is modified.
Changed components
fuzz/Cargo.tomlfuzz/src/chanmon_consistency.rsInspect captured patch +28 / −26
diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml
index 76b4968..bf0d463 100644
--- a/fuzz/Cargo.toml
+++ b/fuzz/Cargo.toml
@@ -43,6 +43,5 @@ check-cfg = [
"cfg(fuzzing)",
"cfg(secp256k1_fuzz)",
"cfg(hashes_fuzz)",
- "cfg(splicing)",
"cfg(chacha20_poly1305_fuzz)"
]
diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs
index 532d4fc..ea2b93e 100644
--- a/fuzz/src/chanmon_consistency.rs
+++ b/fuzz/src/chanmon_consistency.rs
@@ -720,10 +720,11 @@ impl SignerProvider for KeyProvider {
// Since this fuzzer is only concerned with live-channel operations, we don't need to worry about
// any signer operations that come after a force close.
-const SUPPORTED_SIGNER_OPS: [SignerOp; 3] = [
+const SUPPORTED_SIGNER_OPS: [SignerOp; 4] = [
SignerOp::SignCounterpartyCommitment,
SignerOp::GetPerCommitmentPoint,
SignerOp::ReleaseCommitmentSecret,
+ SignerOp::SignSpliceSharedInput,
];
impl KeyProvider {
@@ -3125,59 +3126,35 @@ pub fn do_test<Out: Output + MaybeSend + MaybeSync>(data: &[u8], out: Out) {
0x89 => harness.nodes[2].reset_fee_estimate(),
0xa0 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[1].get_our_node_id();
harness.nodes[0].splice_in(&cp_node_id, &harness.chan_a_id());
},
0xa1 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[0].get_our_node_id();
harness.nodes[1].splice_in(&cp_node_id, &harness.chan_a_id());
},
0xa2 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[2].get_our_node_id();
harness.nodes[1].splice_in(&cp_node_id, &harness.chan_b_id());
},
0xa3 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[1].get_our_node_id();
harness.nodes[2].splice_in(&cp_node_id, &harness.chan_b_id());
},
0xa4 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[1].get_our_node_id();
harness.nodes[0].splice_out(&cp_node_id, &harness.chan_a_id());
},
0xa5 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[0].get_our_node_id();
harness.nodes[1].splice_out(&cp_node_id, &harness.chan_a_id());
},
0xa6 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[2].get_our_node_id();
harness.nodes[1].splice_out(&cp_node_id, &harness.chan_b_id());
},
0xa7 => {
- if !cfg!(splicing) {
- break 'fuzz_loop;
- }
let cp_node_id = harness.nodes[1].get_our_node_id();
harness.nodes[2].splice_out(&cp_node_id, &harness.chan_b_id());
},
@@ -3306,6 +3283,32 @@ pub fn do_test<Out: Output + MaybeSend + MaybeSync>(data: &[u8], out: Out) {
.enable_op_for_all_signers(SignerOp::ReleaseCommitmentSecret);
harness.nodes[2].signer_unblocked(None);
},
+ 0xcf => {
+ harness.nodes[0]
+ .keys_manager
+ .enable_op_for_all_signers(SignerOp::SignSpliceSharedInput);
+ harness.nodes[0].signer_unblocked(None);
+ },
+ 0xd0 => {
+ harness.nodes[1]
+ .keys_manager
+ .enable_op_for_all_signers(SignerOp::SignSpliceSharedInput);
+ let filter = Some((harness.nodes[0].get_our_node_id(), harness.chan_a_id()));
+ harness.nodes[1].signer_unblocked(filter);
+ },
+ 0xd1 => {
+ harness.nodes[1]
+ .keys_manager
+ .enable_op_for_all_signers(SignerOp::SignSpliceSharedInput);
+ let filter = Some((harness.nodes[2].get_our_node_id(), harness.chan_b_id()));
+ harness.nodes[1].signer_unblocked(filter);
+ },
+ 0xd2 => {
+ harness.nodes[2]
+ .keys_manager
+ .enable_op_for_all_signers(SignerOp::SignSpliceSharedInput);
+ harness.nodes[2].signer_unblocked(None);
+ },
0xf0 => harness.ab_link.complete_monitor_updates_for_node(
0,
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.