Skip to content

Commit 5c2aea5

Browse files
committed
Serialize hop_data without length in VariableLengthOnionPacket.
1 parent 6870049 commit 5c2aea5

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

lightning/src/ln/msgs.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2250,7 +2250,8 @@ impl Writeable for VariableLengthOnionPacket {
22502250
Ok(pubkey) => pubkey.write(w)?,
22512251
Err(_) => [0u8;33].write(w)?,
22522252
}
2253-
&self.hop_data.write(w)?;
2253+
// don't encode the length of hop_data
2254+
w.write_all(&self.hop_data)?;
22542255
&self.hmac.write(w)?;
22552256
Ok(())
22562257
}
@@ -4186,7 +4187,7 @@ mod tests {
41864187
hmac: [2; 32],
41874188
};
41884189
let encoded_trampoline_packet = trampoline_packet.encode();
4189-
assert_eq!(encoded_trampoline_packet.len(), 718);
4190+
assert_eq!(encoded_trampoline_packet.len(), 716);
41904191

41914192
let msg = msgs::OutboundOnionPayload::Receive {
41924193
payment_data: None,
@@ -4210,6 +4211,28 @@ mod tests {
42104211
assert_eq!(trampoline_length_big_size.0, encoded_trampoline_packet.len() as u64);
42114212
}
42124213

4214+
#[test]
4215+
fn encoding_final_onion_hop_data_with_eclair_trampoline_packet() {
4216+
let public_key = PublicKey::from_slice(&<Vec<u8>>::from_hex("02eec7245d6b7d2ccb30380bfbe2a3648cd7a942653f5aa340edcea1f283686619").unwrap()).unwrap();
4217+
let hop_data = <Vec<u8>>::from_hex("cff34152f3a36e52ca94e74927203a560392b9cc7ce3c45809c6be52166c24a595716880f95f178bf5b30ca63141f74db6e92795c6130877cfdac3d4bd3087ee73c65d627ddd709112a848cc99e303f3706509aa43ba7c8a88cba175fccf9a8f5016ef06d3b935dbb15196d7ce16dc1a7157845566901d7b2197e52cab4ce487014b14816e5805f9fcacb4f8f88b8ff176f1b94f6ce6b00bc43221130c17d20ef629db7c5f7eafaa166578c720619561dd14b3277db557ec7dcdb793771aef0f2f667cfdbeae3ac8d331c5994779dffb31e5fc0dbdedc0c592ca6d21c18e47fe3528d6975c19517d7e2ea8c5391cf17d0fe30c80913ed887234ccb48808f7ef9425bcd815c3b586210979e3bb286ef2851bf9ce04e28c40a203df98fd648d2f1936fd2f1def0e77eecb277229b4b682322371c0a1dbfcd723a991993df8cc1f2696b84b055b40a1792a29f710295a18fbd351b0f3ff34cd13941131b8278ba79303c89117120eea691738a9954908195143b039dbeed98f26a92585f3d15cf742c953799d3272e0545e9b744be9d3b4c").unwrap();
4218+
let hmac_vector = <Vec<u8>>::from_hex("bb079bfc4b35190eee9f59a1d7b41ba2f773179f322dafb4b1af900c289ebd6c").unwrap();
4219+
let mut hmac = [0; 32];
4220+
hmac.copy_from_slice(&hmac_vector);
4221+
4222+
let compressed_public_key = public_key.serialize();
4223+
assert_eq!(compressed_public_key.len(), 33);
4224+
4225+
let trampoline_packet = VariableLengthOnionPacket {
4226+
version: 0,
4227+
public_key: Ok(public_key),
4228+
hop_data,
4229+
hmac
4230+
};
4231+
let encoded_trampoline_packet = trampoline_packet.encode();
4232+
let expected_eclair_trampoline_packet = <Vec<u8>>::from_hex("0002eec7245d6b7d2ccb30380bfbe2a3648cd7a942653f5aa340edcea1f283686619cff34152f3a36e52ca94e74927203a560392b9cc7ce3c45809c6be52166c24a595716880f95f178bf5b30ca63141f74db6e92795c6130877cfdac3d4bd3087ee73c65d627ddd709112a848cc99e303f3706509aa43ba7c8a88cba175fccf9a8f5016ef06d3b935dbb15196d7ce16dc1a7157845566901d7b2197e52cab4ce487014b14816e5805f9fcacb4f8f88b8ff176f1b94f6ce6b00bc43221130c17d20ef629db7c5f7eafaa166578c720619561dd14b3277db557ec7dcdb793771aef0f2f667cfdbeae3ac8d331c5994779dffb31e5fc0dbdedc0c592ca6d21c18e47fe3528d6975c19517d7e2ea8c5391cf17d0fe30c80913ed887234ccb48808f7ef9425bcd815c3b586210979e3bb286ef2851bf9ce04e28c40a203df98fd648d2f1936fd2f1def0e77eecb277229b4b682322371c0a1dbfcd723a991993df8cc1f2696b84b055b40a1792a29f710295a18fbd351b0f3ff34cd13941131b8278ba79303c89117120eea691738a9954908195143b039dbeed98f26a92585f3d15cf742c953799d3272e0545e9b744be9d3b4cbb079bfc4b35190eee9f59a1d7b41ba2f773179f322dafb4b1af900c289ebd6c").unwrap();
4233+
assert_eq!(encoded_trampoline_packet, expected_eclair_trampoline_packet);
4234+
}
4235+
42134236
#[test]
42144237
fn query_channel_range_end_blocknum() {
42154238
let tests: Vec<(u32, u32, u32)> = vec![

0 commit comments

Comments
 (0)