pub struct CryptoVault { /* private fields */ }Expand description
Process-wide encryption service. Provide once via
ctx.provide(CryptoVault::bootstrap(source).await?), resolve anywhere
with Inject<CryptoVault> / ctx.inject::<CryptoVault>().
Implementations§
Source§impl CryptoVault
impl CryptoVault
Sourcepub async fn bootstrap(source: Arc<dyn KekSource>) -> Result<Self, CryptoError>
pub async fn bootstrap(source: Arc<dyn KekSource>) -> Result<Self, CryptoError>
Load every DEK from the KEK source and build the initial ring.
Sourcepub fn encrypt(
&self,
key: &KeyId,
plaintext: &[u8],
) -> Result<EncryptedField, CryptoError>
pub fn encrypt( &self, key: &KeyId, plaintext: &[u8], ) -> Result<EncryptedField, CryptoError>
Hot path: seal plaintext under the active version of key.
One atomic load + one hash probe + AES-256-GCM. No locks, no I/O.
Sourcepub fn decrypt(
&self,
field: &EncryptedField,
) -> Result<Secret<Vec<u8>>, CryptoError>
pub fn decrypt( &self, field: &EncryptedField, ) -> Result<Secret<Vec<u8>>, CryptoError>
Hot path: open a sealed field with the exact version that sealed it.
Returns Shredded when the key (or version) is gone — by design.
Sourcepub async fn ensure_key(&self, key: &KeyId) -> Result<(), CryptoError>
pub async fn ensure_key(&self, key: &KeyId) -> Result<(), CryptoError>
Control plane: provision the key if absent (idempotent). Use for per-subject keys minted on first write.
Sourcepub async fn rotate(&self, key: &KeyId) -> Result<u32, CryptoError>
pub async fn rotate(&self, key: &KeyId) -> Result<u32, CryptoError>
Control plane: add a new active version. Old versions keep decrypting existing ciphertext; new writes seal under the new version. Returns the new active version number.
Sourcepub async fn shred(&self, key: &KeyId) -> Result<(), CryptoError>
pub async fn shred(&self, key: &KeyId) -> Result<(), CryptoError>
Control plane: crypto-shredding. Destroys the wrapped DEK at the
KEK source, then drops it from the ring. Every ciphertext sealed
under key — in the DB, outbox, idempotency cache, DLQ, audit chain
— is permanently unreadable the moment this returns.
Auto Trait Implementations§
impl !Freeze for CryptoVault
impl !RefUnwindSafe for CryptoVault
impl !UnwindSafe for CryptoVault
impl Send for CryptoVault
impl Sync for CryptoVault
impl Unpin for CryptoVault
impl UnsafeUnpin for CryptoVault
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> Self::Output
fn aggregate_filter<P>(self, f: P) -> Self::Output
Source§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self to an expression for Diesel’s query builder. Read more