pub struct MetaPacket<S, H, const P: usize> { /* private fields */ }Expand description
An encrypted packet with a payload of size P.
The final packet size is given by MetaPacket::SIZE.
A sender can create a new packet via MetaPacket::new and send it.
Once received by the recipient, it is parsed first by calling MetaPacket::try_from
and then it can be transformed into ForwardedMetaPacket by calling
the MetaPacket::into_forwarded method. The ForwardedMetaPacket then contains the information
about the next recipient of this packet or the payload for the final destination.
The packet format is directly dependent on the used SphinxSuite.
Implementations§
Source§impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> MetaPacket<S, H, P>
impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> MetaPacket<S, H, P>
Sourcepub const PACKET_LEN: usize
pub const PACKET_LEN: usize
The fixed length of the padded packet.
Sourcepub fn new<M: KeyIdMapper<S, H>>(
payload: PaddedPayload<P>,
routing: MetaPacketRouting<'_, S, H>,
key_mapper: &M,
) -> Result<Self, SphinxError>
pub fn new<M: KeyIdMapper<S, H>>( payload: PaddedPayload<P>, routing: MetaPacketRouting<'_, S, H>, key_mapper: &M, ) -> Result<Self, SphinxError>
Creates a new outgoing packet with the given payload msg and routing.
The size of the msg must be less or equal P, otherwise the
constructor will return an error.
Sourcepub fn into_forwarded<'a, K, F>(
self,
node_keypair: &'a S::P,
key_mapper: &K,
reply_openers: F,
) -> Result<ForwardedMetaPacket<S, H, P>, SphinxError>where
K: KeyIdMapper<S, H>,
F: FnMut(&H::PacketReceiverData) -> Option<ReplyOpener>,
&'a GenericArray<u8, <S::G as GroupElement<S::E>>::AlphaLen>: From<&'a <S::P as Keypair>::Public>,
pub fn into_forwarded<'a, K, F>(
self,
node_keypair: &'a S::P,
key_mapper: &K,
reply_openers: F,
) -> Result<ForwardedMetaPacket<S, H, P>, SphinxError>where
K: KeyIdMapper<S, H>,
F: FnMut(&H::PacketReceiverData) -> Option<ReplyOpener>,
&'a GenericArray<u8, <S::G as GroupElement<S::E>>::AlphaLen>: From<&'a <S::P as Keypair>::Public>,
Attempts to remove the layer of encryption in this packet by using the given node_keypair.
This will transform this packet into the ForwardedMetaPacket.
Trait Implementations§
Source§impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> AsRef<[u8]> for MetaPacket<S, H, P>
impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> AsRef<[u8]> for MetaPacket<S, H, P>
Source§impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> BytesRepresentable for MetaPacket<S, H, P>
impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> BytesRepresentable for MetaPacket<S, H, P>
Source§impl<S, H, const P: usize> Clone for MetaPacket<S, H, P>
impl<S, H, const P: usize> Clone for MetaPacket<S, H, P>
Source§impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> Debug for MetaPacket<S, H, P>
impl<S: SphinxSuite, H: SphinxHeaderSpec, const P: usize> Debug for MetaPacket<S, H, P>
Auto Trait Implementations§
impl<S, H, const P: usize> Freeze for MetaPacket<S, H, P>
impl<S, H, const P: usize> RefUnwindSafe for MetaPacket<S, H, P>where
S: RefUnwindSafe,
H: RefUnwindSafe,
impl<S, H, const P: usize> Send for MetaPacket<S, H, P>
impl<S, H, const P: usize> Sync for MetaPacket<S, H, P>
impl<S, H, const P: usize> Unpin for MetaPacket<S, H, P>
impl<S, H, const P: usize> UnwindSafe for MetaPacket<S, H, P>where
S: UnwindSafe,
H: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> ToHex for Twhere
T: BytesRepresentable,
impl<T> ToHex for Twhere
T: BytesRepresentable,
Source§impl<T> ToHex for T
impl<T> ToHex for T
Source§fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex<U>(&self) -> Uwhere
U: FromIterator<char>,
self into the result. Lower case
letters are used (e.g. f9b4ca)Source§fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
fn encode_hex_upper<U>(&self) -> Uwhere
U: FromIterator<char>,
self into the result. Upper case
letters are used (e.g. F9B4CA)