From c9fb4a376064c0be67f4031260957ba1c3800a37 Mon Sep 17 00:00:00 2001 From: Arik Sosman Date: Wed, 17 Apr 2024 22:59:21 -0700 Subject: [PATCH] Make Trampoline onion deserializable. --- lightning/src/ln/msgs.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index cbdb29bfc..9af5ec527 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -55,7 +55,7 @@ use crate::io_extras::read_to_end; use crate::events::{EventsProvider, MessageSendEventsProvider}; use crate::crypto::streams::ChaChaPolyReadAdapter; use crate::util::logger; -use crate::util::ser::{LengthReadable, LengthReadableArgs, Readable, ReadableArgs, Writeable, Writer, WithoutLength, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, TransactionU16LenLimited, BigSize}; +use crate::util::ser::{BigSize, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, LengthRead, LengthReadable, LengthReadableArgs, Readable, ReadableArgs, TransactionU16LenLimited, WithoutLength, Writeable, Writer}; use crate::util::base32; use crate::routing::gossip::{NodeAlias, NodeId}; @@ -1856,6 +1856,26 @@ impl Writeable for TrampolineOnionPacket { } } +impl LengthReadable for TrampolineOnionPacket { + fn read(r: &mut R) -> Result { + let version = Readable::read(r)?; + let public_key = Readable::read(r)?; + + let hop_data_len = r.total_bytes().saturating_sub(66); // 1 (version) + 33 (pubkey) + 32 (HMAC) = 66 + let mut rd = FixedLengthReader::new(r, hop_data_len); + let hop_data = WithoutLength::>::read(&mut rd)?.0; + + let hmac = Readable::read(r)?; + + Ok(TrampolineOnionPacket { + version, + public_key, + hop_data, + hmac, + }) + } +} + impl Debug for TrampolineOnionPacket { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_fmt(format_args!("TrampolineOnionPacket version {} with hmac {:?}", self.version, &self.hmac[..])) -- 2.39.5