Skip to main content

WrappedStoreKey

Struct WrappedStoreKey 

Source
pub struct WrappedStoreKey {
    pub author_pubkey: String,
    pub generation: u64,
    pub sealed: String,
    pub signature: String,
}
Expand description

A Store encryption keyring sealed to one member and signed by an Owner.

Membership authority names the immutable exact object through WrappedStoreKeyRef. The sealed box authenticates no sender, so the Owner signature additionally binds the Store, recipient, generation, author, and sealed bytes. The reader verifies both the exact reference and that signature before opening the keyring.

recipient_pubkey is part of the signed payload and exact path rather than duplicated in this value, so a wrap cannot be relocated to another member.

Fields§

§author_pubkey: String

Hex-encoded Ed25519 public key of the Owner that signed this wrapped key.

§generation: u64

The keyring’s current generation, covered by the Owner signature and the exact reference.

§sealed: String

Hex-encoded sealed box (seal_box_encrypt output) carrying the store key.

§signature: String

Hex-encoded detached signature over WrappedKeyFields, produced by the owner.

Implementations§

Source§

impl WrappedStoreKey

Source

pub fn seal_keyring( store_id: &str, recipient_pubkey: &str, recipient_x25519_pk: &[u8; 32], encryption: &EncryptionService, owner: &UserKeypair, ) -> Result<Self, EncryptionError>

Source

pub fn signed( store_id: &str, recipient_pubkey: &str, generation: u64, sealed: Vec<u8>, owner: &UserKeypair, ) -> Self

Wrap sealed (a sealed box of the store key, already encrypted to recipient_pubkey) and sign the binding with owner: fills signature with the owner’s detached signature over the canonical payload.

Source

pub fn verify_and_unwrap<'a>( &self, store_id: &str, recipient_pubkey: &str, expected_owners: impl IntoIterator<Item = &'a str>, ) -> Result<Vec<u8>, WrappedKeyError>

Verify this wrapped key was authentically produced by one of expected_owners for recipient_pubkey in store_id, and return the sealed-box bytes to decrypt. Verifies the signature against the authorized Owner set for this context over the binding (store_id, recipient_pubkey, author_pubkey, sealed). Fails closed, naming why, if the signature doesn’t verify against that set (a substituted, forged, replayed, or relocated key) or the sealed box is malformed; neither must be adopted.

Source

pub fn verify_and_open_keyring<'a>( &self, store_id: &str, recipient_pubkey: &str, expected_owners: impl IntoIterator<Item = &'a str>, expected_generation: u64, recipient: &dyn IdentityKeyAuthority, ) -> Result<EncryptionService, WrappedKeyringError>

Trait Implementations§

Source§

impl Clone for WrappedStoreKey

Source§

fn clone(&self) -> WrappedStoreKey

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 WrappedStoreKey

Source§

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

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

impl<'de> Deserialize<'de> for WrappedStoreKey

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 PartialEq for WrappedStoreKey

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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 Serialize for WrappedStoreKey

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
Source§

impl Eq for WrappedStoreKey

Source§

impl StructuralPartialEq for WrappedStoreKey

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.

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,

Source§

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

§

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