Browse Source

plugin: Pass the full raw_payload including realm to htlc_accepted

So far we've only handled legacy payloads, which meant we could drop the realm
byte since it was always 0x00. Once we start handling TLV payloads the first
byte, i.e., the former realm byte, is important since it gives us the length
of the payload. This is a breaking change, however I don't think there's
anyone using the `raw_payload` as of yet.

Changelog-Changed: JSON-RPC: the `raw_payload` now includes the first byte, i.e., the realm byte, of the payload as well. This allows correct decoding of a TLV payload in the plugins.
travis-debug
Christian Decker 5 years ago
parent
commit
dda792c766
  1. 5
      common/sphinx.c
  2. 4
      tests/test_plugin.py

5
common/sphinx.c

@ -580,7 +580,7 @@ static void sphinx_parse_payload(struct route_step *step, const u8 *src)
} }
/* Copy common pieces over */ /* Copy common pieces over */
step->raw_payload = tal_dup_arr(step, u8, src + vsize, raw_size, 0); step->raw_payload = tal_dup_arr(step, u8, src, raw_size + vsize, 0);
memcpy(step->next->mac, src + hop_size - HMAC_SIZE, HMAC_SIZE); memcpy(step->next->mac, src + hop_size - HMAC_SIZE, HMAC_SIZE);
/* And now try to parse whatever the payload contains so we can use it /* And now try to parse whatever the payload contains so we can use it
@ -738,9 +738,6 @@ struct route_step *process_onionpacket(
return tal_free(step); return tal_free(step);
} }
step->raw_payload = tal_dup_arr(step, u8, paddedheader + 1,
shift_size - 1 - HMAC_SIZE, 0);
/* Copy the hmac from the last HMAC_SIZE bytes */ /* Copy the hmac from the last HMAC_SIZE bytes */
memcpy(&step->next->mac, paddedheader + shift_size - HMAC_SIZE, HMAC_SIZE); memcpy(&step->next->mac, paddedheader + shift_size - HMAC_SIZE, HMAC_SIZE);

4
tests/test_plugin.py

@ -538,8 +538,8 @@ def test_htlc_accepted_hook_forward_restart(node_factory, executor):
assert re.match(r'^020203e80401..0608................$', onion['payload']) assert re.match(r'^020203e80401..0608................$', onion['payload'])
else: else:
assert onion['type'] == 'legacy' assert onion['type'] == 'legacy'
assert re.match(r'^00006700000.000100000000000003e8000000..000000000000000000000000$', onion['payload']) assert re.match(r'^0000006700000.000100000000000003e8000000..000000000000000000000000$', onion['payload'])
assert len(onion['payload']) == 64 assert len(onion['payload']) == 66
assert len(onion['shared_secret']) == 64 assert len(onion['shared_secret']) == 64
assert onion['forward_amount'] == '1000msat' assert onion['forward_amount'] == '1000msat'
assert len(onion['next_onion']) == 2 * (1300 + 32 + 33 + 1) assert len(onion['next_onion']) == 2 * (1300 + 32 + 33 + 1)

Loading…
Cancel
Save