pub struct OnionExitDescriptor {Show 13 fields
pub schema_version: u16,
pub did: Did,
pub public_key: VerificationPublicKey,
pub session_public_key: PublicKey<33>,
pub node_type: OnlineNodeType,
pub network_id: u32,
pub service: OnionExitService,
pub policy: OnionExitPolicy,
pub started_at_ms: u128,
pub heartbeat_at_ms: u128,
pub expires_at_ms: u128,
pub version: String,
pub signature: MessageVerification,
}Expand description
Signed descriptor published by onion exits.
Fields§
§schema_version: u16Onion-exit descriptor wire schema version covered by the descriptor signature.
did: DidDID of the exit node/account.
public_key: VerificationPublicKeyAccount public key corresponding to did.
session_public_key: PublicKey<33>Session public key used for encrypted onion exit frames.
node_type: OnlineNodeTypeRuntime family of this exit node.
network_id: u32Network identifier.
service: OnionExitServiceService this descriptor is willing to expose.
policy: OnionExitPolicySigned exit policy.
started_at_ms: u128Process start timestamp in milliseconds since Unix epoch.
heartbeat_at_ms: u128Heartbeat timestamp in milliseconds since Unix epoch.
expires_at_ms: u128Expiry timestamp in milliseconds since Unix epoch.
version: StringNode software version.
signature: MessageVerificationSignature covering every descriptor field above.
Implementations§
Source§impl OnionExitDescriptor
impl OnionExitDescriptor
Sourcepub fn new_signed(
body: OnionExitDescriptorBody,
session_sk: &SessionSk,
) -> CoreResult<Self>
pub fn new_signed( body: OnionExitDescriptorBody, session_sk: &SessionSk, ) -> CoreResult<Self>
Create and sign an onion-exit descriptor.
Sourcepub const fn has_supported_schema(&self) -> bool
pub const fn has_supported_schema(&self) -> bool
Return whether this descriptor uses the local registry wire schema.
Sourcepub const fn matches_network(&self, network_id: u32) -> bool
pub const fn matches_network(&self, network_id: u32) -> bool
Return whether this descriptor belongs to network_id.
Sourcepub fn advertises_service_name(&self, service: &str) -> bool
pub fn advertises_service_name(&self, service: &str) -> bool
Return whether this descriptor advertises the requested service name.
Sourcepub fn offers_service(&self, service: &str) -> bool
pub fn offers_service(&self, service: &str) -> bool
Return whether this descriptor offers service.
Sourcepub fn offers_service_transport(
&self,
service: &str,
transport: OnionExitTransport,
) -> bool
pub fn offers_service_transport( &self, service: &str, transport: OnionExitTransport, ) -> bool
Return whether this descriptor offers service over transport.
Sourcepub fn verify_signature(&self) -> bool
pub fn verify_signature(&self) -> bool
Verify the descriptor signature and DID/public-key binding.
Sourcepub fn is_expired_at(&self, now_ms: u128) -> bool
pub fn is_expired_at(&self, now_ms: u128) -> bool
Returns whether this descriptor is expired at now_ms.
Sourcepub fn is_live_at(&self, now_ms: u128) -> bool
pub fn is_live_at(&self, now_ms: u128) -> bool
Returns whether this descriptor has a valid signature and is not expired.
Sourcepub fn latest_valid_by_service_did(
descriptors: impl IntoIterator<Item = Self>,
now_ms: u128,
include_expired: bool,
) -> Vec<Self>
pub fn latest_valid_by_service_did( descriptors: impl IntoIterator<Item = Self>, now_ms: u128, include_expired: bool, ) -> Vec<Self>
Select the newest valid onion-exit descriptor per (DID, service).
Invariant: an exit may publish independent TCP and HTTPS registrations under the same DID.
Preservation: heartbeat ordering is compared only inside each (DID, service name, transport) key.
Trait Implementations§
Source§impl Clone for OnionExitDescriptor
impl Clone for OnionExitDescriptor
Source§fn clone(&self) -> OnionExitDescriptor
fn clone(&self) -> OnionExitDescriptor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OnionExitDescriptor
impl Debug for OnionExitDescriptor
Source§impl Decoder for OnionExitDescriptor
impl Decoder for OnionExitDescriptor
Source§fn from_encoded(encoded: &Encoded) -> CoreResult<Self>
fn from_encoded(encoded: &Encoded) -> CoreResult<Self>
Self from an Encoded wrapper.Source§impl<'de> Deserialize<'de> for OnionExitDescriptor
impl<'de> Deserialize<'de> for OnionExitDescriptor
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 Encoder for OnionExitDescriptor
impl Encoder for OnionExitDescriptor
impl Eq for OnionExitDescriptor
Source§impl PartialEq for OnionExitDescriptor
impl PartialEq for OnionExitDescriptor
Source§impl Serialize for OnionExitDescriptor
impl Serialize for OnionExitDescriptor
impl StructuralPartialEq for OnionExitDescriptor
Auto Trait Implementations§
impl Freeze for OnionExitDescriptor
impl RefUnwindSafe for OnionExitDescriptor
impl Send for OnionExitDescriptor
impl Sync for OnionExitDescriptor
impl Unpin for OnionExitDescriptor
impl UnsafeUnpin for OnionExitDescriptor
impl UnwindSafe for OnionExitDescriptor
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
impl<T> MaybeSend for T
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.