mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 07:17:40 +01:00
Merge pull request #3006 from arik-so/arik/trampoline/2024-04-trampoline-onion-deserialization
Trampoline Onion Deserialization
This commit is contained in:
commit
2c71923a5a
1 changed files with 29 additions and 2 deletions
|
@ -55,7 +55,7 @@ use crate::io_extras::read_to_end;
|
||||||
use crate::events::{EventsProvider, MessageSendEventsProvider};
|
use crate::events::{EventsProvider, MessageSendEventsProvider};
|
||||||
use crate::crypto::streams::ChaChaPolyReadAdapter;
|
use crate::crypto::streams::ChaChaPolyReadAdapter;
|
||||||
use crate::util::logger;
|
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::util::base32;
|
||||||
|
|
||||||
use crate::routing::gossip::{NodeAlias, NodeId};
|
use crate::routing::gossip::{NodeAlias, NodeId};
|
||||||
|
@ -1857,6 +1857,26 @@ impl Writeable for TrampolineOnionPacket {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl LengthReadable for TrampolineOnionPacket {
|
||||||
|
fn read<R: LengthRead>(r: &mut R) -> Result<Self, DecodeError> {
|
||||||
|
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::<Vec<u8>>::read(&mut rd)?.0;
|
||||||
|
|
||||||
|
let hmac = Readable::read(r)?;
|
||||||
|
|
||||||
|
Ok(TrampolineOnionPacket {
|
||||||
|
version,
|
||||||
|
public_key,
|
||||||
|
hop_data,
|
||||||
|
hmac,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Debug for TrampolineOnionPacket {
|
impl Debug for TrampolineOnionPacket {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
f.write_fmt(format_args!("TrampolineOnionPacket version {} with hmac {:?}", self.version, &self.hmac[..]))
|
f.write_fmt(format_args!("TrampolineOnionPacket version {} with hmac {:?}", self.version, &self.hmac[..]))
|
||||||
|
@ -3181,7 +3201,7 @@ mod tests {
|
||||||
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket, CommonOpenChannelFields, CommonAcceptChannelFields, TrampolineOnionPacket};
|
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket, CommonOpenChannelFields, CommonAcceptChannelFields, TrampolineOnionPacket};
|
||||||
use crate::ln::msgs::SocketAddress;
|
use crate::ln::msgs::SocketAddress;
|
||||||
use crate::routing::gossip::{NodeAlias, NodeId};
|
use crate::routing::gossip::{NodeAlias, NodeId};
|
||||||
use crate::util::ser::{BigSize, Hostname, Readable, ReadableArgs, TransactionU16LenLimited, Writeable};
|
use crate::util::ser::{BigSize, FixedLengthReader, Hostname, LengthReadable, Readable, ReadableArgs, TransactionU16LenLimited, Writeable};
|
||||||
use crate::util::test_utils;
|
use crate::util::test_utils;
|
||||||
|
|
||||||
use bitcoin::hashes::hex::FromHex;
|
use bitcoin::hashes::hex::FromHex;
|
||||||
|
@ -4497,6 +4517,13 @@ mod tests {
|
||||||
let encoded_trampoline_packet = trampoline_packet.encode();
|
let encoded_trampoline_packet = trampoline_packet.encode();
|
||||||
assert_eq!(encoded_trampoline_packet.len(), 716);
|
assert_eq!(encoded_trampoline_packet.len(), 716);
|
||||||
|
|
||||||
|
{ // verify that a codec round trip works
|
||||||
|
let mut reader = Cursor::new(&encoded_trampoline_packet);
|
||||||
|
let mut trampoline_packet_reader = FixedLengthReader::new(&mut reader, encoded_trampoline_packet.len() as u64);
|
||||||
|
let decoded_trampoline_packet: TrampolineOnionPacket = <TrampolineOnionPacket as LengthReadable>::read(&mut trampoline_packet_reader).unwrap();
|
||||||
|
assert_eq!(decoded_trampoline_packet.encode(), encoded_trampoline_packet);
|
||||||
|
}
|
||||||
|
|
||||||
let msg = msgs::OutboundOnionPayload::TrampolineEntrypoint {
|
let msg = msgs::OutboundOnionPayload::TrampolineEntrypoint {
|
||||||
multipath_trampoline_data: None,
|
multipath_trampoline_data: None,
|
||||||
amt_to_forward: 0x0badf00d01020304,
|
amt_to_forward: 0x0badf00d01020304,
|
||||||
|
|
Loading…
Add table
Reference in a new issue