lnwallet/channel: reject received commitment with too many htlc sigs
This commit adds a check that will make LightningChannel reject a
received commitment if it is accompanied with too many HTLC signatures.
This enforces the requirement in BOLT-2, saying:
if num_htlcs is not equal to the number of HTLC outputs in the local commitment transaction:
* MUST fail the channel.
A test exercising the behaviour is added.
This commit is contained in:
2 files changed
+36
No files matched your search
@@ -3606,6 +3606,13 @@ func genHtlcSigValidationJobs(localCommitmentView *commitment,
|
|||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we received a number of HTLC signatures that doesn't match our
|
||||||
|
// commitment, we'll return an error now.
|
||||||
|
if len(htlcSigs) != i {
|
||||||
|
return nil, fmt.Errorf("number of htlc sig mismatch. "+
|
||||||
|
"Expected %v sigs, got %v", i, len(htlcSigs))
|
||||||
|
}
|
||||||
|
|
||||||
return verifyJobs, nil
|
return verifyJobs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1601,6 +1601,35 @@ func TestHTLCSigNumber(t *testing.T) {
|
|||||||
t.Fatalf("Bob failed receiving commitment: %v", err)
|
t.Fatalf("Bob failed receiving commitment: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ====================================================================
|
||||||
|
// Test that Bob will not validate a received commitment if Alice sends
|
||||||
|
// signatures for HTLCs below the dust limit.
|
||||||
|
// ====================================================================
|
||||||
|
aliceChannel, bobChannel, cleanUp = createChanWithHTLC(belowDust,
|
||||||
|
aboveDust)
|
||||||
|
defer cleanUp()
|
||||||
|
|
||||||
|
// Alice should produce only one signature, since one HTLC is below
|
||||||
|
// dust.
|
||||||
|
aliceSig, aliceHtlcSigs, err = aliceChannel.SignNextCommitment()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Error signing next commitment: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(aliceHtlcSigs) != 1 {
|
||||||
|
t.Fatalf("expected 1 htlc sig, instead got %v",
|
||||||
|
len(aliceHtlcSigs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add an extra signature.
|
||||||
|
aliceHtlcSigs = append(aliceHtlcSigs, aliceHtlcSigs[0])
|
||||||
|
|
||||||
|
// Bob should reject these signatures since they don't match the number
|
||||||
|
// of HTLCs above dust.
|
||||||
|
err = bobChannel.ReceiveNewCommitment(aliceSig, aliceHtlcSigs)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("Expected Bob to reject signatures")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChannelBalanceDustLimit tests the condition when the remaining balance
|
// TestChannelBalanceDustLimit tests the condition when the remaining balance
|
||||||
|
|||||||
Reference in new issue
Block a user