Skip to content

Commit 9ee20b9

Browse files
committed
Make Trampoline onion deserializable.
1 parent ac9a2c8 commit 9ee20b9

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

lightning/src/ln/msgs.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ use crate::sign::{NodeSigner, Recipient};
4141
#[allow(unused_imports)]
4242
use crate::prelude::*;
4343

44+
use core::cmp;
4445
use core::fmt;
4546
use core::fmt::Debug;
4647
use core::ops::Deref;
@@ -55,7 +56,7 @@ use crate::io_extras::read_to_end;
5556
use crate::events::{EventsProvider, MessageSendEventsProvider};
5657
use crate::crypto::streams::ChaChaPolyReadAdapter;
5758
use crate::util::logger;
58-
use crate::util::ser::{LengthReadable, LengthReadableArgs, Readable, ReadableArgs, Writeable, Writer, WithoutLength, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, TransactionU16LenLimited, BigSize};
59+
use crate::util::ser::{BigSize, FixedLengthReader, HighZeroBytesDroppedBigSize, Hostname, LengthRead, LengthReadable, LengthReadableArgs, Readable, ReadableArgs, TransactionU16LenLimited, WithoutLength, Writeable, Writer};
5960
use crate::util::base32;
6061

6162
use crate::routing::gossip::{NodeAlias, NodeId};
@@ -1856,6 +1857,34 @@ impl Writeable for TrampolineOnionPacket {
18561857
}
18571858
}
18581859

1860+
impl LengthReadable for TrampolineOnionPacket {
1861+
fn read<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
1862+
const READ_BUFFER_SIZE: usize = 4096;
1863+
1864+
let version = Readable::read(r)?;
1865+
let public_key = Readable::read(r)?;
1866+
1867+
let mut hop_data = Vec::new();
1868+
let hop_data_len = r.total_bytes().saturating_sub(66) as usize; // 1 (version) + 33 (pubkey) + 32 (HMAC) = 66
1869+
let mut read_idx = 0;
1870+
while read_idx < hop_data_len {
1871+
let mut read_buffer = [0; READ_BUFFER_SIZE];
1872+
let read_amt = cmp::min(hop_data_len - read_idx, READ_BUFFER_SIZE);
1873+
r.read_exact(&mut read_buffer[..read_amt])?;
1874+
hop_data.extend_from_slice(&read_buffer[..read_amt]);
1875+
read_idx += read_amt;
1876+
}
1877+
1878+
let hmac = Readable::read(r)?;
1879+
Ok(TrampolineOnionPacket {
1880+
version,
1881+
public_key,
1882+
hop_data,
1883+
hmac,
1884+
})
1885+
}
1886+
}
1887+
18591888
impl Debug for TrampolineOnionPacket {
18601889
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
18611890
f.write_fmt(format_args!("TrampolineOnionPacket version {} with hmac {:?}", self.version, &self.hmac[..]))

0 commit comments

Comments
 (0)