pub struct ProtectedLocalKeyStore { /* private fields */ }Expand description
Host-owned protected storage scoped to one database at one location.
Key material lives in the host’s secret items; a separate nonsecret marker detects loss of an established authority. Neither is part of Aven’s database export, SQLite backup, or archive backup.
Implementations§
Source§impl ProtectedLocalKeyStore
impl ProtectedLocalKeyStore
Sourcepub async fn seed_http_inputs(
&self,
database: &Database,
) -> Result<(SeedAuthority, SeedPublicationIntent, Option<Package>)>
pub async fn seed_http_inputs( &self, database: &Database, ) -> Result<(SeedAuthority, SeedPublicationIntent, Option<Package>)>
Resumes sealed ownership before exposing any publication transport input.
pub fn required_seed( &self, package: &ProtectedLocalPackageKey, ) -> Result<SeedAuthority>
Sourcepub async fn prepare_seed_source(
&self,
database: &Database,
) -> Result<SeedSourceAuthority>
pub async fn prepare_seed_source( &self, database: &Database, ) -> Result<SeedSourceAuthority>
Explicit irreversible opt-in before capture. Early failure can leave the installation fenced; the denial marker never authorizes key regeneration.
Sourcepub async fn prepare_seed_adoption_intent(
&self,
database: &Database,
) -> Result<SeedPublicationIntent>
pub async fn prepare_seed_adoption_intent( &self, database: &Database, ) -> Result<SeedPublicationIntent>
Fences SQLite cancellation before persisting exact protected intent. An intent cannot be locally abandoned.
Sourcepub async fn adopt_seed_publication(
&self,
database: &Database,
outcome: &PublicationOutcome,
) -> Result<bool>
pub async fn adopt_seed_publication( &self, database: &Database, outcome: &PublicationOutcome, ) -> Result<bool>
Authenticates host authority and commits adoption, then retries pin cleanup. Cleanup failure is reported without rolling back the committed adoption.
Source§impl ProtectedLocalKeyStore
impl ProtectedLocalKeyStore
pub async fn active_inputs( &self, db: &Database, locator: &str, ) -> Result<ActiveInputs>
pub async fn adopt_refresh( &self, db: &Database, inputs: &mut ActiveInputs, evidence: Evidence, ) -> Result<()>
Sourcepub async fn adopt_verified_refresh(
&self,
db: &Database,
inputs: &mut ActiveInputs,
evidence: Evidence,
target: Membership,
) -> Result<()>
pub async fn adopt_verified_refresh( &self, db: &Database, inputs: &mut ActiveInputs, evidence: Evidence, target: Membership, ) -> Result<()>
target must be what evidence verifies to.
pub async fn open_invitation( &self, db: &Database, inputs: &ActiveInputs, ) -> Result<Option<OpenInvitation>>
Sourcepub async fn invitation_progress(
&self,
db: &Database,
handle: &[u8; 32],
) -> Result<InvitationProgress>
pub async fn invitation_progress( &self, db: &Database, handle: &[u8; 32], ) -> Result<InvitationProgress>
Reads only this invitation’s terminal phases, so waiting for a join can check it often without loading every journal.
Sourcepub async fn retire_open_invitation(
&self,
db: &Database,
inputs: &ActiveInputs,
) -> Result<(Option<Outbound>, Option<OpenInvitation>)>
pub async fn retire_open_invitation( &self, db: &Database, inputs: &ActiveInputs, ) -> Result<(Option<Outbound>, Option<OpenInvitation>)>
Retires the open invitation if no grant has been sent. The returned journal remains available for best-effort server cancellation.
pub async fn prepare_invitation( &self, db: &Database, inputs: &ActiveInputs, expires: Option<u64>, handle: Option<[u8; 32]>, ) -> Result<Outbound>
pub async fn registered_invitation( &self, db: &Database, inputs: &ActiveInputs, journal: &Outbound, ) -> Result<Invitation>
pub async fn prepare_admission( &self, db: &Database, inputs: &ActiveInputs, journal: &Outbound, request: &[u8], ) -> Result<Vec<u8>>
Sourcepub async fn expired_disclosure(
&self,
db: &Database,
inputs: &ActiveInputs,
) -> Result<Option<Outbound>>
pub async fn expired_disclosure( &self, db: &Database, inputs: &ActiveInputs, ) -> Result<Option<Outbound>>
The unresolved journal whose grant may have been sent, once its declared expiry has passed. Expiry only starts withdrawal work.
Sourcepub async fn mark_withdrawing(
&self,
db: &Database,
inputs: &ActiveInputs,
journal: &Outbound,
) -> Result<()>
pub async fn mark_withdrawing( &self, db: &Database, inputs: &ActiveInputs, journal: &Outbound, ) -> Result<()>
Fences local candidate creation and resends before remote cancellation.
Sourcepub async fn reconcile_disclosure(
&self,
db: &Database,
inputs: &ActiveInputs,
journal: &Outbound,
) -> Result<Disclosure>
pub async fn reconcile_disclosure( &self, db: &Database, inputs: &ActiveInputs, journal: &Outbound, ) -> Result<Disclosure>
Resolves a possibly disclosed journal from verified membership only.
A candidate at its signed slot is an admission and finishes ready.
withdrawn requires every stored candidate to have lost its slot, no
candidate recipient ever becoming a member, and a later non-pending
generation absent from every candidate predecessor.
pub async fn finish_inviter( &self, db: &Database, inputs: &ActiveInputs, journal: &Outbound, record: &[u8], ) -> Result<()>
Sourcepub async fn prepare_peer(
&self,
db: &Database,
locator: &str,
invitation: Option<Invitation>,
) -> Result<Joiner>
pub async fn prepare_peer( &self, db: &Database, locator: &str, invitation: Option<Invitation>, ) -> Result<Joiner>
The request to post: a known invitation’s exact attempt, otherwise the latest attempt, or the one a pinned response answers.
Sourcepub async fn replace_peer(
&self,
db: &Database,
locator: &str,
invitation: Invitation,
) -> Result<Joiner>
pub async fn replace_peer( &self, db: &Database, locator: &str, invitation: Invitation, ) -> Result<Joiner>
Like prepare_peer, but an unknown invitation becomes a new attempt
while joining is unfinished. The installation keys, enrollment pin and
fence stay unchanged, and every earlier attempt is retained.
Sourcepub async fn peer_attempts(
&self,
db: &Database,
locator: &str,
) -> Result<Vec<Joiner>>
pub async fn peer_attempts( &self, db: &Database, locator: &str, ) -> Result<Vec<Joiner>>
Every retained attempt, oldest first, or only the one a pinned response answers. Attempts are never removed.
Sourcepub async fn open_peer_response(
&self,
db: &Database,
mail: &Mailbox,
) -> Result<ProvisionalGrant>
pub async fn open_peer_response( &self, db: &Database, mail: &Mailbox, ) -> Result<ProvisionalGrant>
Opens a mailbox admission without retaining it. The signature and
membership binding are unchecked here, so only finish_peer pins it.
Sourcepub async fn finish_peer(
&self,
db: &Database,
mail: &Mailbox,
evidence: &Evidence,
) -> Result<()>
pub async fn finish_peer( &self, db: &Database, mail: &Mailbox, evidence: &Evidence, ) -> Result<()>
Pins mail only after evidence proves its exact outcome, so an
unverified response never blocks a correct one.
pub async fn install_peer_snapshot( &self, db: &Database, transport: &Client, locator: &str, downloaded: &(dyn Fn(u64, Option<u64>) + Sync), ) -> Result<SharedStateInstallReport>
pub async fn adopt_download_refresh( &self, db: &Database, identity: [u8; 32], peer: &Joiner, verified: &VerifiedEnrollment, evidence: &Evidence, target: Membership, ) -> Result<Membership>
Sourcepub async fn tail_inputs(
&self,
db: &Database,
locator: &str,
) -> Result<TailSnapshot>
pub async fn tail_inputs( &self, db: &Database, locator: &str, ) -> Result<TailSnapshot>
Validated tail material for one drain. It stays current until the enrollment marker changes or the server reports a stale context.
Sourcepub async fn association(&self, db: &Database) -> Result<Option<(bool, String)>>
pub async fn association(&self, db: &Database) -> Result<Option<(bool, String)>>
Whether this installation joined as a peer, and the server locator its enrollment identity is bound to.
pub async fn enrollment_readiness( &self, db: &Database, ) -> Result<EnrollmentReadiness>
Source§impl ProtectedLocalKeyStore
impl ProtectedLocalKeyStore
Sourcepub async fn management_intent(
&self,
db: &Database,
inputs: &ActiveInputs,
target: Option<[u8; 32]>,
withdraw: Option<[u8; 32]>,
) -> Result<Option<Intent>>
pub async fn management_intent( &self, db: &Database, inputs: &ActiveInputs, target: Option<[u8; 32]>, withdraw: Option<[u8; 32]>, ) -> Result<Option<Intent>>
target requests removal, withdraw an invitation withdrawal, and
neither resumes unfinished work or finishes a pending rotation.
pub async fn management_dispatch( &self, db: &Database, inputs: &ActiveInputs, intent: &Intent, high: u64, ) -> Result<Option<Dispatch>>
Source§impl ProtectedLocalKeyStore
impl ProtectedLocalKeyStore
Sourcepub async fn prepare_seed_claim(
&self,
database: &Database,
setup_id: [u8; 32],
) -> Result<SeedAuthority>
pub async fn prepare_seed_claim( &self, database: &Database, setup_id: [u8; 32], ) -> Result<SeedAuthority>
Persists private seed keys, bearer and exact validated genesis before use. Reuses package vault/generation/secret and refuses a changed setup binding. The public DB pin detects lost protected authority, never authorizes replacement.
Sourcepub async fn package_seed_capture(
&self,
database: &Database,
blob_dir: &Path,
setup_id: [u8; 32],
) -> Result<EncryptedLocalSharedStatePackage>
pub async fn package_seed_capture( &self, database: &Database, blob_dir: &Path, setup_id: [u8; 32], ) -> Result<EncryptedLocalSharedStatePackage>
Freezes a local package only under already persisted seed genesis context. Incompatible frozen bytes fail unchanged; cancel/recapture explicitly. This does not prove server claim admission or enable dispatch.
Source§impl ProtectedLocalKeyStore
impl ProtectedLocalKeyStore
Sourcepub async fn open(
database: &Database,
storage: Arc<dyn ProtectedStorage>,
) -> StoreResult<Self>
pub async fn open( database: &Database, storage: Arc<dyn ProtectedStorage>, ) -> StoreResult<Self>
Opens the namespace of database in storage.
Sourcepub fn load_or_create(&self) -> StoreResult<ProtectedLocalPackageKey>
pub fn load_or_create(&self) -> StoreResult<ProtectedLocalPackageKey>
Loads the established keyring, or creates and durably marks a new one.
An existing marker with missing key material is an error. Existing or corrupt material is never replaced. If key persistence succeeds but the marker write fails, retry loads the same key and completes the marker.
Sourcepub fn load_required(&self) -> StoreResult<ProtectedLocalPackageKey>
pub fn load_required(&self) -> StoreResult<ProtectedLocalPackageKey>
Loads an established authority without generating key material.
If key persistence completed before its nonsecret marker, this completes the marker using the existing key identity.
Sourcepub async fn package_local_capture(
&self,
database: &Database,
blob_dir: &Path,
membership_predecessor: [u8; 32],
) -> Result<EncryptedLocalSharedStatePackage, Error>
pub async fn package_local_capture( &self, database: &Database, blob_dir: &Path, membership_predecessor: [u8; 32], ) -> Result<EncryptedLocalSharedStatePackage, Error>
Creates or reuses protected key material before freezing package bytes. The predecessor is caller-supplied context, not membership authorization. An existing freeze requires its established authority even if bytes are missing.
Sourcepub fn erase(&self) -> StoreResult<()>
pub fn erase(&self) -> StoreResult<()>
Deletes every protected item and record of this database, including authority markers, so the database can start sync again as if it never took part. Secrets go before markers, so an interrupted erase reads as missing authority until it is rerun, never as a fresh namespace.
Auto Trait Implementations§
impl !RefUnwindSafe for ProtectedLocalKeyStore
impl !UnwindSafe for ProtectedLocalKeyStore
impl Freeze for ProtectedLocalKeyStore
impl Send for ProtectedLocalKeyStore
impl Sync for ProtectedLocalKeyStore
impl Unpin for ProtectedLocalKeyStore
impl UnsafeUnpin for ProtectedLocalKeyStore
Blanket Implementations§
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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.