X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fonion_message%2Fpacket.rs;h=2fb2407dbdd093bdbe4ae260e31f12fbe4722d8a;hb=0ecb4b093ac1134cbf06275cc48dd79ef7524774;hp=8fff53642e128682638ec187eab0c8a31afca260;hpb=2f0ddf0763767fbdd22dafbe4574228c6be88b1e;p=rust-lightning diff --git a/lightning/src/onion_message/packet.rs b/lightning/src/onion_message/packet.rs index 8fff5364..2fb2407d 100644 --- a/lightning/src/onion_message/packet.rs +++ b/lightning/src/onion_message/packet.rs @@ -12,9 +12,9 @@ use bitcoin::secp256k1::PublicKey; use bitcoin::secp256k1::ecdh::SharedSecret; +use crate::blinded_path::{BlindedPath, ForwardTlvs, ReceiveTlvs}; use crate::ln::msgs::DecodeError; use crate::ln::onion_utils; -use super::blinded_route::{BlindedRoute, ForwardTlvs, ReceiveTlvs}; use super::messenger::CustomOnionMessageHandler; use crate::util::chacha20poly1305rfc::{ChaChaPolyReadAdapter, ChaChaPolyWriteAdapter}; use crate::util::ser::{BigSize, FixedLengthReader, LengthRead, LengthReadable, LengthReadableArgs, Readable, ReadableArgs, Writeable, Writer}; @@ -99,7 +99,7 @@ pub(super) enum Payload { /// This payload is for the final hop. Receive { control_tlvs: ReceiveControlTlvs, - reply_path: Option, + reply_path: Option, message: OnionMessageContents, } } @@ -118,6 +118,8 @@ pub enum OnionMessageContents { impl OnionMessageContents { /// Returns the type that was used to decode the message payload. + /// + /// This is not exported to bindings users as methods on non-cloneable enums are not currently exportable pub fn tlv_type(&self) -> u64 { match self { &OnionMessageContents::Custom(ref msg) => msg.tlv_type(), @@ -125,6 +127,7 @@ impl OnionMessageContents { } } +/// This is not exported to bindings users as methods on non-cloneable enums are not currently exportable impl Writeable for OnionMessageContents { fn write(&self, w: &mut W) -> Result<(), io::Error> { match self { @@ -141,12 +144,12 @@ pub trait CustomOnionMessageContents: Writeable { /// Forward control TLVs in their blinded and unblinded form. pub(super) enum ForwardControlTlvs { - /// If we're sending to a blinded route, the node that constructed the blinded route has provided + /// If we're sending to a blinded path, the node that constructed the blinded path has provided /// this hop's control TLVs, already encrypted into bytes. Blinded(Vec), /// If we're constructing an onion message hop through an intermediate unblinded node, we'll need /// to construct the intermediate hop's control TLVs in their unblinded state to avoid encoding - /// them into an intermediate Vec. See [`super::blinded_route::ForwardTlvs`] for more info. + /// them into an intermediate Vec. See [`crate::blinded_path::ForwardTlvs`] for more info. Unblinded(ForwardTlvs), } @@ -154,7 +157,7 @@ pub(super) enum ForwardControlTlvs { pub(super) enum ReceiveControlTlvs { /// See [`ForwardControlTlvs::Blinded`]. Blinded(Vec), - /// See [`ForwardControlTlvs::Unblinded`] and [`super::blinded_route::ReceiveTlvs`]. + /// See [`ForwardControlTlvs::Unblinded`] and [`crate::blinded_path::ReceiveTlvs`]. Unblinded(ReceiveTlvs), } @@ -163,14 +166,14 @@ impl Writeable for (Payload, [u8; 32]) { fn write(&self, w: &mut W) -> Result<(), io::Error> { match &self.0 { Payload::Forward(ForwardControlTlvs::Blinded(encrypted_bytes)) => { - encode_varint_length_prefixed_tlv!(w, { + _encode_varint_length_prefixed_tlv!(w, { (4, *encrypted_bytes, vec_type) }) }, Payload::Receive { control_tlvs: ReceiveControlTlvs::Blinded(encrypted_bytes), reply_path, message, } => { - encode_varint_length_prefixed_tlv!(w, { + _encode_varint_length_prefixed_tlv!(w, { (2, reply_path, option), (4, *encrypted_bytes, vec_type), (message.tlv_type(), message, required) @@ -178,7 +181,7 @@ impl Writeable for (Payload, [u8; 32]) { }, Payload::Forward(ForwardControlTlvs::Unblinded(control_tlvs)) => { let write_adapter = ChaChaPolyWriteAdapter::new(self.1, &control_tlvs); - encode_varint_length_prefixed_tlv!(w, { + _encode_varint_length_prefixed_tlv!(w, { (4, write_adapter, required) }) }, @@ -186,7 +189,7 @@ impl Writeable for (Payload, [u8; 32]) { control_tlvs: ReceiveControlTlvs::Unblinded(control_tlvs), reply_path, message, } => { let write_adapter = ChaChaPolyWriteAdapter::new(self.1, &control_tlvs); - encode_varint_length_prefixed_tlv!(w, { + _encode_varint_length_prefixed_tlv!(w, { (2, reply_path, option), (4, write_adapter, required), (message.tlv_type(), message, required) @@ -204,12 +207,12 @@ impl ReadableArgs<(SharedSecret, &H)> for Payload< let v: BigSize = Readable::read(r)?; let mut rd = FixedLengthReader::new(r, v.0); - let mut reply_path: Option = None; + let mut reply_path: Option = None; let mut read_adapter: Option> = None; let rho = onion_utils::gen_rho_from_shared_secret(&encrypted_tlvs_ss.secret_bytes()); let mut message_type: Option = None; let mut message = None; - decode_tlv_stream!(&mut rd, { + decode_tlv_stream_with_custom_tlv_decode!(&mut rd, { (2, reply_path, option), (4, read_adapter, (option: LengthReadableArgs, rho)), }, |msg_type, msg_reader| { @@ -252,7 +255,7 @@ impl ReadableArgs<(SharedSecret, &H)> for Payload< /// When reading a packet off the wire, we don't know a priori whether the packet is to be forwarded /// or received. Thus we read a ControlTlvs rather than reading a ForwardControlTlvs or /// ReceiveControlTlvs directly. -pub(super) enum ControlTlvs { +pub(crate) enum ControlTlvs { /// This onion message is intended to be forwarded. Forward(ForwardTlvs), /// This onion message is intended to be received.