pub enum SealedHost {
Plain(IpOrHost),
Sealed(Box<[u8]>),
}Expand description
Contains optionally encrypted IpOrHost.
This is useful for hiding the IpOrHost instance from the Entry node.
The client first encrypts the IpOrHost instance via SealedHost::seal using
the Exit node’s public key.
Upon receiving the SealedHost instance by the Exit node, it can call
SealedHost::unseal using its private key to get the original IpOrHost instance.
Sealing is fully randomized and therefore does not leak information about equal IpOrHost
instances.
The length of the encrypted host is also obscured by the use of random padding before encryption.
§Example
use hopr_crypto_types::prelude::{Keypair, OffchainKeypair};
use hopr_network_types::prelude::{IpOrHost, SealedHost};
use libp2p_identity::PeerId;
let keypair = OffchainKeypair::random();
let exit_node_peer_id: PeerId = keypair.public().into();
let host: IpOrHost = "127.0.0.1:1000".parse()?;
// On the Client
let encrypted = SealedHost::seal(host.clone(), keypair.public().into())?;
// On the Exit node
let decrypted = encrypted.unseal(&keypair)?;
assert_eq!(host, decrypted);
// Plain SealedHost unseals trivially
let plain_sealed: SealedHost = host.clone().into();
assert_eq!(host, plain_sealed.try_into()?);
// The same host sealing is randomized
let encrypted_1 = SealedHost::seal(host.clone(), keypair.public().into())?;
let encrypted_2 = SealedHost::seal(host.clone(), keypair.public().into())?;
assert_ne!(encrypted_1, encrypted_2);
Variants§
Implementations§
Source§impl SealedHost
impl SealedHost
pub fn try_as_plain(self) -> Option<IpOrHost>
pub const fn try_as_plain_ref(&self) -> Option<&IpOrHost>
pub fn try_as_plain_mut(&mut self) -> Option<&mut IpOrHost>
pub fn try_as_sealed(self) -> Option<Box<[u8]>>
pub const fn try_as_sealed_ref(&self) -> Option<&Box<[u8]>>
pub fn try_as_sealed_mut(&mut self) -> Option<&mut Box<[u8]>>
Source§impl SealedHost
impl SealedHost
Sourcepub const PADDING_CHAR: char = '@'
pub const PADDING_CHAR: char = '@'
Character that can be appended to the host to obscure its length.
User can add as many of this character to the host, and it will be removed during unsealing.
Trait Implementations§
Source§impl Clone for SealedHost
impl Clone for SealedHost
Source§fn clone(&self) -> SealedHost
fn clone(&self) -> SealedHost
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SealedHost
impl Debug for SealedHost
Source§impl<'de> Deserialize<'de> for SealedHost
impl<'de> Deserialize<'de> for SealedHost
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for SealedHost
impl Display for SealedHost
Source§impl From<IpOrHost> for SealedHost
impl From<IpOrHost> for SealedHost
Source§impl Hash for SealedHost
impl Hash for SealedHost
Source§impl PartialEq for SealedHost
impl PartialEq for SealedHost
Source§impl Serialize for SealedHost
impl Serialize for SealedHost
Source§impl TryFrom<SealedHost> for IpOrHost
impl TryFrom<SealedHost> for IpOrHost
Source§type Error = NetworkTypeError
type Error = NetworkTypeError
impl Eq for SealedHost
impl StructuralPartialEq for SealedHost
Auto Trait Implementations§
impl Freeze for SealedHost
impl RefUnwindSafe for SealedHost
impl Send for SealedHost
impl Sync for SealedHost
impl Unpin for SealedHost
impl UnwindSafe for SealedHost
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§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>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.