Skip to main content

SignedCommit

Struct SignedCommit 

Source
pub struct SignedCommit {
    commit: Commit,
    signature: [u8; 64],
}
Expand description

A commit and the signature over it.

Fields§

§commit: Commit§signature: [u8; 64]

Implementations§

Source§

impl SignedCommit

Source

pub fn new(commit: Commit, signature: [u8; 64]) -> Self

Reassembles a commit and a signature that were stored apart.

Source

pub fn decode(block: &[u8]) -> Result<Self, CommitError>

Reads a commit block another server wrote.

The block holds exactly the six fields a version 3 commit has, prev included even when it is null. Anything else is refused here. A field this left out of Commit::to_sign would fail the signature anyway, so refusing it first says why.

Source

pub fn commit(&self) -> &Commit

What was signed.

Source

pub fn signature(&self) -> &[u8; 64]

The 64-byte compact signature, r then s.

Source

pub fn block(&self) -> Vec<u8> ⓘ

The block a CAR file carries and a CID names.

Source

pub fn cid(&self) -> Cid

The CID of that block, which is a CAR export’s root.

Source

pub fn verify(&self, key: &VerifyingKey) -> Result<(), CommitError>

Checks the signature against a public key.

The key must come from somewhere other than this object for the answer to mean anything — a DID document, in practice. Verifying with the key that signed proves the signing code is self-consistent and nothing else; see tests/did_document.rs, which takes the key out of a serialised document instead.

A high-S signature fails, because k256 refuses one internally and atproto requires low-S. That is a known jacquard defect not applying to us, rather than something handled here.

Source

pub fn verify_for( &self, did: &str, key: &VerifyingKey, ) -> Result<(), CommitError>

Checks the signature, and that the commit is for the repository asked about.

The two go together far more often than either goes alone: a signature that verifies against the key in did:web:a’s document, on a commit whose did is did:web:b, is a valid signature and the wrong answer.

Source

pub fn verify_with(&self, did: &str, key: &CommitKey) -> Result<(), CommitError>

SignedCommit::verify_for, with a key of either curve.

A P-256 signature with a high s fails, as a secp256k1 one does: [secp256r1::VerifyingKey::verify] refuses it.

Source

fn check_repo(&self, did: &str) -> Result<(), CommitError>

Refuses a commit for any repository but did’s.

Source

fn check_version(&self) -> Result<(), CommitError>

Refuses a repository format this crate does not write.

Trait Implementations§

Source§

impl Clone for SignedCommit

Source§

fn clone(&self) -> SignedCommit

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for SignedCommit

Source§

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

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

impl PartialEq for SignedCommit

Source§

fn eq(&self, other: &SignedCommit) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for SignedCommit

Source§

impl StructuralPartialEq for SignedCommit

Auto Trait Implementations§

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
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,