pub struct AuthCert {
pub dir_key_certificate_version: AuthCertVersion,
pub dir_address: Option<SocketAddrV4>,
pub fingerprint: Fingerprint,
pub dir_key_published: Iso8601TimeSp,
pub dir_key_expires: Iso8601TimeSp,
pub dir_identity_key: PublicKey,
pub dir_signing_key: PublicKey,
pub dir_key_crosscert: CrossCert,
/* private fields */
}Expand description
A single directory authority key certificate
This is the body, not including signatures.
https://spec.torproject.org/dir-spec/creating-key-certificates.html
To make a fresh AuthCert, use AuthCertConstructor.
Fields§
§dir_key_certificate_version: AuthCertVersionIntro line
Currently must be version 3.
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-key-certificate-version
dir_address: Option<SocketAddrV4>An IPv4 address for this authority.
fingerprint: FingerprintH(KP_auth_id_rsa)
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:fingerprint
dir_key_published: Iso8601TimeSpDeclared time when this certificate was published
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-key-published
dir_key_expires: Iso8601TimeSpDeclared time when this certificate expires.
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-key-expires
dir_identity_key: PublicKeyKP_auth_id_rsa
The long-term RSA identity key for this authority
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-identity-key
dir_signing_key: PublicKeyKP_auth_sign_rsa
The medium-term RSA signing key for this authority
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-signing-key
dir_key_crosscert: CrossCertSHA1(DER(KP_auth_id_rsa)) signed by KP_auth_sign_rsa
https://spec.torproject.org/dir-spec/creating-key-certificates.html#item:dir-key-crosscert
Implementations§
Source§impl AuthCert
impl AuthCert
Sourcepub fn builder() -> AuthCertBuilder
👎Deprecated: use AuthCertConstructor instead
pub fn builder() -> AuthCertBuilder
use AuthCertConstructor instead
Make an AuthCertBuilder object that can be used to
construct authority certificates for testing.
Sourcepub fn parse(s: &str) -> Result<UncheckedAuthCert>
pub fn parse(s: &str) -> Result<UncheckedAuthCert>
Parse an authority certificate from a string.
This function verifies the certificate’s signatures, but doesn’t check its expiration dates.
Sourcepub fn parse_multiple(
s: &str,
) -> Result<impl Iterator<Item = Result<UncheckedAuthCert>> + '_>
pub fn parse_multiple( s: &str, ) -> Result<impl Iterator<Item = Result<UncheckedAuthCert>> + '_>
Return an iterator yielding authority certificates from a string.
Sourcepub fn signing_key(&self) -> &PublicKey
pub fn signing_key(&self) -> &PublicKey
Return the signing key certified by this certificate.
Sourcepub fn key_ids(&self) -> AuthCertKeyIds
pub fn key_ids(&self) -> AuthCertKeyIds
Return an AuthCertKeyIds object describing the keys in this certificate.
Sourcepub fn id_fingerprint(&self) -> &RsaIdentity
pub fn id_fingerprint(&self) -> &RsaIdentity
Return an RsaIdentity for this certificate’s identity key.
Sourcepub fn published(&self) -> SystemTime
pub fn published(&self) -> SystemTime
Return the time when this certificate says it was published.
Sourcepub fn expires(&self) -> SystemTime
pub fn expires(&self) -> SystemTime
Return the time when this certificate says it should expire.
Sourcefn from_body(
body: &Section<'_, AuthCertKwd>,
s: &str,
) -> Result<UncheckedAuthCert>
fn from_body( body: &Section<'_, AuthCertKwd>, s: &str, ) -> Result<UncheckedAuthCert>
Parse an authority certificate from a reader.
Source§impl AuthCert
impl AuthCert
Sourcepub fn new_base(
k_auth_id_rsa: &KeyPair,
k_auth_sign_rsa: &KeyPair,
published: SystemTime,
expires: SystemTime,
) -> StdResult<Self, Bug>
pub fn new_base( k_auth_id_rsa: &KeyPair, k_auth_sign_rsa: &KeyPair, published: SystemTime, expires: SystemTime, ) -> StdResult<Self, Bug>
Make the base for a new AuthCert
This contains only the mandatory fields (the ones in AuthCertConstructor).
This method is an alternative to providing a AuthCertConstructor value display,
and is convenient because an authcert contains much recapitulated information.
§Example
use tor_netdoc::doc::authcert::AuthCert;
let (k_auth_id_rsa, k_auth_sign_rsa, published, expires) = todo!();
let authcert = AuthCert {
dir_address: Some("192.0.2.17:7000".parse()?),
..AuthCert::new_base(&k_auth_id_rsa, &k_auth_sign_rsa, published, expires)?
};Sourcepub fn encode_sign(
&self,
k_auth_id_rsa: &KeyPair,
) -> StdResult<EncodedAuthCert, Bug>
pub fn encode_sign( &self, k_auth_id_rsa: &KeyPair, ) -> StdResult<EncodedAuthCert, Bug>
Encode this AuthCert and sign it with k_auth_id_rsa
Yields the string representation of the signed, encoded, document,
as an EncodedAuthCert.
Trait Implementations§
Source§impl From<AuthCert> for AuthCertUnverifiedParsedBody
impl From<AuthCert> for AuthCertUnverifiedParsedBody
Source§impl From<AuthCertConstructor> for AuthCert
impl From<AuthCertConstructor> for AuthCert
Source§fn from(constructor: AuthCertConstructor) -> AuthCert
fn from(constructor: AuthCertConstructor) -> AuthCert
Source§impl HasUnverifiedParsedBody for AuthCert
impl HasUnverifiedParsedBody for AuthCert
Source§type UnverifiedParsedBody = AuthCertUnverifiedParsedBody
type UnverifiedParsedBody = AuthCertUnverifiedParsedBody
Source§fn unverified_into_inner_unchecked(
unverified: Self::UnverifiedParsedBody,
) -> Self
fn unverified_into_inner_unchecked( unverified: Self::UnverifiedParsedBody, ) -> Self
Source§impl NetdocEncodable for AuthCert
impl NetdocEncodable for AuthCert
Source§fn encode_unsigned(&self, out: &mut NetdocEncoder) -> Result<(), Bug>
fn encode_unsigned(&self, out: &mut NetdocEncoder) -> Result<(), Bug>
outAuto Trait Implementations§
impl Freeze for AuthCert
impl RefUnwindSafe for AuthCert
impl Send for AuthCert
impl Sync for AuthCert
impl Unpin for AuthCert
impl UnsafeUnpin for AuthCert
impl UnwindSafe for AuthCert
Blanket Implementations§
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,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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 more