Struct Cert

Source
pub struct Cert {
    pub subject: Identity,
    pub context: Hash,
    pub key: String,
    pub val: String,
    pub seq: u64,
    pub start: Timestamp,
    pub end: Timestamp,
    pub valid: bool,
    pub revokes: Option<CertReplace>,
}
Expand description

A certificate, which can be encoded as a fog-pack Document and signed.

A certificate is valid for a matching subject/context/key if:

  • the current time is between the start & end times
  • “valid” is set to true

A certificate database generally only keeps one certificate for a given subject/context/key/signer combination. When deciding which of two certificates to keep, it should do the following:

  1. Pick the one with the higher start time
  2. If start times match, pick the one with the higher sequence number
  3. If the sequence numbers also match, prefer the stored one.

A database should also record the highest end time it has seen for a given certificate combo, as this lets it know when it can discard the certificate.

Sometimes, issuing this certificate requires that another be revoked at the same time - for instance, if an authority is being transferred. In this case, a “revokes” option should be added that details the revocation of another certificate. If the revocation rule is valid and can be executed successfully by the database, then this certificate is valid. Otherwise, this certificate shouldn’t be accepted.

Fields§

§subject: Identity§context: Hash§key: String§val: String§seq: u64§start: Timestamp§end: Timestamp§valid: bool§revokes: Option<CertReplace>

Implementations§

Source§

impl Cert

Source

pub fn is_valid(&self, time: Option<Timestamp>) -> bool

Check for validity. If no time is provided, the start & end times are ignored.

Source

pub fn key_eq(&self, other: &Cert) -> bool

Determine if two certificates are equal in subject/context/key

Source

pub fn should_replace(&self, other: &Cert) -> bool

Determine if the provided certificate should replace this one.

Trait Implementations§

Source§

impl Clone for Cert

Source§

fn clone(&self) -> Cert

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cert

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Cert

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Cert

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Cert

§

impl RefUnwindSafe for Cert

§

impl Send for Cert

§

impl Sync for Cert

§

impl Unpin for Cert

§

impl UnwindSafe for Cert

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,