hsmd: check *all* anchor inputs for short sigs.
Anchors will have one input from the commitment tx, and at least on
more (in this case, 3 more); we were only checking the first one for
short signatures.
```
total_feerate_perkw = total_fees / total_weight * 1000
> check_feerate([l3, l2], total_feerate_perkw, feerate)
tests/test_closing.py:4064:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
nodes = [<fixtures.LightningNode object at 0x7f3e9a2c74f0>, <fixtures.LightningNode object at 0x7f3e991d5f30>]
actual_feerate = 14006.105538595726, expected_feerate = 14000
def check_feerate(nodes, actual_feerate, expected_feerate):
# Feerate can't be lower.
assert actual_feerate > expected_feerate - 2
if actual_feerate >= expected_feerate + 2:
if any([did_short_sig(n) for n in nodes]):
return
# Use assert as it shows the actual values on failure
> assert actual_feerate < expected_feerate + 2
E AssertionError
```
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -1820,12 +1820,16 @@ static u8 *handle_sign_anchorspend(struct hsmd_client *c, const u8 *msg_in)
|
||||
fmt_pubkey(tmpctx, &local_funding_pubkey),
|
||||
fmt_wally_psbt(tmpctx, psbt));
|
||||
}
|
||||
if (dev_warn_on_overgrind
|
||||
&& psbt->inputs[0].signatures.num_items == 1
|
||||
&& psbt->inputs[0].signatures.items[0].value_len < 71) {
|
||||
hsmd_status_fmt(LOG_BROKEN, NULL,
|
||||
"overgrind: short signature length %zu",
|
||||
psbt->inputs[0].signatures.items[0].value_len);
|
||||
|
||||
if (dev_warn_on_overgrind) {
|
||||
for (size_t i = 0; i < psbt->num_inputs; i++) {
|
||||
if (psbt->inputs[i].signatures.num_items == 1
|
||||
&& psbt->inputs[i].signatures.items[0].value_len < 71) {
|
||||
hsmd_status_fmt(LOG_BROKEN, NULL,
|
||||
"overgrind: short signature length %zu",
|
||||
psbt->inputs[i].signatures.items[0].value_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return towire_hsmd_sign_anchorspend_reply(NULL, psbt);
|
||||
|
||||
Reference in New Issue
Block a user