lnd/lnwire
bitromortac 233e377731
lnwire: reject onion message payloads with multiple final hop fields
BOLT 4 requires the final node to ignore an onion message whose
onionmsg_tlv contains more than one payload field, where payload fields
are the tlv types reserved for the final hop (type 64 and above). Decode
previously accumulated every such field it found, so a payload bundling
invoice_request, invoice, and invoice_error together was accepted.

Reject the payload when more than one final hop field is present. Every
entry collected in FinalHopTLVs is in the final hop range, so its count
is the number of payload fields. The round-trip test for multiple fields
becomes a rejection test, and the property test now draws at most one
payload field.
2026-07-09 07:13:35 +00:00
..
accept_channel.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
accept_channel_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
announcement_signatures.go lnwire: let gossip messages implement GossipMessage 2025-11-12 22:54:03 +08:00
announcement_signatures_2.go lnwire: let gossip messages implement GossipMessage 2025-11-12 22:54:03 +08:00
announcement_signatures_2_test.go lnwire: update AnnounceSigs2 to use pure TLV 2025-09-01 12:10:30 +02:00
blinded_path.go lnwire: add bounded introNode BlindedPath codec 2026-06-03 12:11:29 +02:00
blinded_path_test.go lnwire: add bounded introNode BlindedPath codec 2026-06-03 12:11:29 +02:00
bounds.go lnwire: add bounded introNode BlindedPath codec 2026-06-03 12:11:29 +02:00
channel_announcement.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_announcement_2.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_announcement_2_test.go lnwire: add Outpoint to ChannelAnnouncement2 2025-10-01 13:13:32 +02:00
channel_id.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_id_test.go multi: make NewChanIDFromOutpoint accept value instead of pointer 2024-03-08 15:47:55 -08:00
channel_ready.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
channel_reestablish.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_type.go lnwire: create common encoder/decoder for raw feature vectors 2024-03-27 09:36:38 -04:00
channel_type_test.go lnwire: add new ChannelType field as TLV record to Open/AcceptChannel 2021-08-30 19:17:21 -07:00
channel_update.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_update_2.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
channel_update_2_test.go lnwire+netann: update ChannelUpdate2 2025-09-01 12:10:30 +02:00
closing_complete.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
closing_sig.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
closing_signed.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
commit_sig.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
commit_sig_test.go lnwire: validate MuSig2 nonce points on wire decode 2026-03-19 11:11:03 -03:00
custom.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
custom_records.go lnwire: add SetOptFromMap and AddOpt 2026-06-03 12:11:29 +02:00
custom_records_test.go lnwire: add SetOptFromMap and AddOpt 2026-06-03 12:11:29 +02:00
dns_addr.go lnwire: let DNSAddress implement RecordProducer 2025-10-01 13:49:15 +02:00
dns_addr_test.go lnwire: let DNSAddress implement RecordProducer 2025-10-01 13:49:15 +02:00
dyn_ack.go lnwire: make LocalNonce an optional tlv record and fix extra data 2025-07-11 04:11:30 +03:00
dyn_ack_test.go lnwire: patch uint test for DynAck 2025-07-11 04:11:30 +03:00
dyn_commit.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
dyn_commit_test.go lnwire: patch test and fix extra data in DynCommit 2025-07-11 04:11:31 +03:00
dyn_propose.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
dyn_propose_test.go lnwire: patch unit test for DynPropose 2025-07-11 04:09:11 +03:00
dyn_reject.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
encoding.go lnwire: add type CustomRecords 2024-08-22 18:33:24 +02:00
error.go multi: allow invalid tlv data when decoding payment fail info 2025-11-03 12:54:29 +01:00
extra_bytes.go lnwire: add method ParseAndExtractExtraData 2025-07-11 04:11:30 +03:00
extra_bytes_test.go lnwire: add ExtraOpaqueData helper functions and methods 2024-09-05 11:18:15 +02:00
features.go multi: actor-based onion message forwarding 2026-03-02 15:46:21 +01:00
features_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
funding_created.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
funding_signed.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
fuzz_test.go lnwire: add onion message type 2025-11-12 22:54:03 +08:00
gossip_timestamp_range.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
init_message.go lnwire: add custom records to init 2025-09-23 19:02:59 +02:00
init_message_test.go lnwire: update tests for init message 2025-09-23 19:05:46 +02:00
interfaces.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
intro_node.go lnwire: add bounded introNode BlindedPath codec 2026-06-03 12:11:29 +02:00
kickoff_sig.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
lnwire.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
lnwire_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
local_nonces.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
local_nonces_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
message.go lnwire: add onion message type 2025-11-12 22:54:03 +08:00
message_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
msat.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
msat_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
musig2.go lnwire: validate MuSig2 nonce points on wire decode 2026-03-19 11:11:03 -03:00
musig2_test.go lnwire: validate MuSig2 nonce points on wire decode 2026-03-19 11:11:03 -03:00
netaddress.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
netaddress_test.go multi: move many t.Fatalf calls to require.NoError 2022-06-17 04:26:55 +00:00
node_announcement.go lnwire: let gossip messages implement GossipMessage 2025-11-12 22:54:03 +08:00
node_announcement_2.go lnwire: let gossip messages implement GossipMessage 2025-11-12 22:54:03 +08:00
node_announcement_2_test.go lnwire: define NodeAnnouncement2 2025-10-02 12:15:16 +02:00
node_announcement_test.go lnwire: add test cases for node alias validation 2019-01-07 12:53:40 -08:00
onion_error.go multi: allow invalid tlv data when decoding payment fail info 2025-11-03 12:54:29 +01:00
onion_error_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
onion_message.go peer: enforce onion message rate limits at ingress 2026-04-15 13:23:50 -07:00
onion_message_test.go peer: enforce onion message rate limits at ingress 2026-04-15 13:23:50 -07:00
onion_msg_payload.go lnwire: reject onion message payloads with multiple final hop fields 2026-07-09 07:13:35 +00:00
onion_msg_payload_test.go lnwire: reject onion message payloads with multiple final hop fields 2026-07-09 07:13:35 +00:00
opaque_addrs.go lnwire: add new type OpaqueAddrs 2022-05-04 11:06:11 +02:00
open_channel.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
outpoint.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
outpoint_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
partial_sig.go lnwire: validate MuSig2 nonce points on wire decode 2026-03-19 11:11:03 -03:00
ping.go lnwire+peer: ignore no-reply pings 2026-03-26 18:55:13 +08:00
ping_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
pong.go lnwire: remove stale pong limit error 2026-03-26 18:55:13 +08:00
pure_tlv.go lnwire: generalize pure TLV signed-range filtering 2026-06-03 12:11:29 +02:00
pure_tlv_test.go lnwire: generalize pure TLV signed-range filtering 2026-06-03 12:11:29 +02:00
query_channel_range.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
query_channel_range_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
query_options.go lnwire: add QueryOptions type 2023-12-11 09:12:03 +02:00
query_short_chan_ids.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
query_short_chan_ids_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
README.md scripted-diff: replace ⛰ emoji with $ [skip ci] 2022-10-28 12:06:49 -04:00
reply_channel_range.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
reply_channel_range_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
reply_short_chan_ids_end.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
revoke_and_ack.go multi: fix linter issues 2026-04-13 12:21:42 -07:00
serialized_size_test.go lnwire: add new TestSerializedSize method 2025-03-20 18:28:53 -07:00
short_channel_id.go multi: enforce strict TLV length checks 2025-12-29 19:18:49 -03:00
short_channel_id_test.go multi: enforce strict TLV length checks 2025-12-29 19:18:49 -03:00
shutdown.go lnwallet/chancloser: fix MuSig2 nonce reuse across RBF rounds 2026-03-27 14:04:25 -07:00
shutdown_test.go lnwire: add CustomRecords to shutdown message 2024-09-19 10:18:39 +02:00
signature.go lnwire: add Record() method to lnwire.Sig 2024-02-05 16:30:16 -08:00
signature_test.go lint: remove redundant loop var copies in test files 2026-06-03 15:32:45 -03:00
stfu.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
test_message.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
test_utils.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
timestamp.go lnwire: add Timestamp interface 2026-03-16 11:25:31 +02:00
timestamp_test.go lnwire: add Timestamp interface 2026-03-16 11:25:31 +02:00
timestamps.go lnwire+discovery: rename ShortChannelIDEncoding to QueryEncoding 2023-12-11 09:12:04 +02:00
typed_delivery_addr.go lnwire: add new ChannelType field as TLV record to Open/AcceptChannel 2021-08-30 19:17:21 -07:00
typed_delivery_addr_test.go lnwire: add new ChannelType field as TLV record to Open/AcceptChannel 2021-08-30 19:17:21 -07:00
typed_fee.go multi: enforce strict TLV length checks 2025-12-29 19:18:49 -03:00
typed_fee_test.go multi: enforce strict TLV length checks 2025-12-29 19:18:49 -03:00
typed_lease_expiry.go lnwire: add LeaseExpiry custom record for Open+AcceptChannel 2021-10-19 18:30:17 -07:00
typed_lease_expiry_test.go lnwire: add LeaseExpiry custom record for Open+AcceptChannel 2021-10-19 18:30:17 -07:00
update_add_htlc.go multi: rename experimental endorsement signal to accountable 2026-01-06 09:12:31 -05:00
update_add_htlc_test.go lnwire: add custom records field to type UpdateAddHtlc 2024-09-05 11:18:15 +02:00
update_fail_htlc.go lnwire: add new TestMessage interface for property tests 2025-03-20 18:28:07 -07:00
update_fail_malformed_htlc.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
update_fee.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
update_fulfill_htlc.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
update_fulfill_htlc_test.go lnwire: add custom records field to type UpdateFulfillHtlc 2024-09-05 11:18:15 +02:00
warning.go lnwire: add new SerializedSize method to all wire messages 2025-03-20 18:27:52 -07:00
writer.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00
writer_test.go multi: upgrade to btcd v2 modules 2026-06-24 10:58:36 -07:00

lnwire

Build Status MIT licensed GoDoc

The lnwire package implements the Lightning Network wire protocol.

This package has intentionally been designed so it can be used as a standalone package for any projects needing to interface with lightning peers at the wire protocol level.

Installation and Updating

$  go get -u github.com/lightningnetwork/lnd/lnwire