mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-26 20:30:59 +01:00
plugin: Check that the preimage returned as resolution matches hash
The plugin can basically return whatever it thinks the preimage is, but we weren't handling the case in which it doesn't actually match the hash. If it doesn't match now we just return an error claiming we don't have any matching invoice.
This commit is contained in:
parent
27ea47ae37
commit
5b11bab876
1 changed files with 28 additions and 1 deletions
|
@ -826,6 +826,33 @@ static u8 *convert_failcode(const tal_t *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
htlc_accepted_hook_try_resolve(struct htlc_accepted_hook_payload *request,
|
||||
struct preimage *payment_preimage)
|
||||
{
|
||||
struct sha256 payment_hash;
|
||||
struct htlc_in *hin = request->hin;
|
||||
u8 *unknown_details;
|
||||
/* Verify that the provided secret hashes to what we need. */
|
||||
sha256(&payment_hash, payment_preimage, sizeof(struct preimage));
|
||||
|
||||
if (!sha256_eq(&payment_hash, &hin->payment_hash)) {
|
||||
log_broken(
|
||||
request->channel->log,
|
||||
"Plugin returned a preimage (sha256(%s) = %s) that doesn't "
|
||||
"match the HTLC hash (%s) it tries to resolve.",
|
||||
type_to_string(tmpctx, struct preimage, payment_preimage),
|
||||
type_to_string(tmpctx, struct sha256, &payment_hash),
|
||||
type_to_string(tmpctx, struct sha256, &hin->payment_hash));
|
||||
|
||||
unknown_details = tal_arr(NULL, u8, 0);
|
||||
towire_u16(&unknown_details, 0x400f);
|
||||
local_fail_in_htlc(hin, take(unknown_details));
|
||||
} else {
|
||||
fulfill_htlc(hin, payment_preimage);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback when a plugin answers to the htlc_accepted hook
|
||||
*/
|
||||
|
@ -893,7 +920,7 @@ static bool htlc_accepted_hook_deserialize(struct htlc_accepted_hook_payload *re
|
|||
if (!json_to_preimage(buffer, paykeytok, &payment_preimage))
|
||||
fatal("Plugin specified an invalid 'payment_key': %s",
|
||||
json_tok_full(buffer, resulttok));
|
||||
fulfill_htlc(hin, &payment_preimage);
|
||||
htlc_accepted_hook_try_resolve(request, &payment_preimage);
|
||||
return false;
|
||||
} else {
|
||||
fatal("Plugin responded with an unknown result to the "
|
||||
|
|
Loading…
Add table
Reference in a new issue