Struct ScopedCipher
pub struct ScopedCipher<C> { /* private fields */ }Expand description
A Scoped Cipher is one which has been initialized for a specific keyset. It can be used only to encrypt and decrypt data for that keyset.
§Lifetime
Initialise once per process and hold an Arc<ScopedCipher<_>> for the
process lifetime. Recreating a ScopedCipher on a periodic schedule
(e.g. “refresh every N rows” in a bulk-ingest loop) is an anti-pattern:
ScopedCiphercarries no TTL of its own — it’s a thin wrapper around the keyset’s index key plus anArcto the underlying ZeroKMS client. The “scope” refers to the keyset binding, not a session lifetime.- Auth tokens used by the underlying client auto-refresh through
stack_auth::AutoRefresh— preemptively, 90 s before expiry, with in-flight refreshes shared across concurrent callers via a mutex. RecreatingScopedCipherdoesn’t trigger or improve this; it only discards the cached token and forces an immediate re-auth. - Recreating the cipher discards the warm
reqwest::Clientconnection pool. The next call after re-init pays a cold-start tax (DNS + TCP + TLS handshake) that can blow past the request timeout under variable network conditions.
If you’re working around symptoms that look like session expiry, check
the actual error chain — auth errors surface as
zerokms::Error::Auth, not as
ZeroKMS error 'Unexpected error'. The latter is almost always a
transport-level timeout (SendRequest) that periodic re-init makes
worse, not better.
See the “Tuning for bulk ingest” section on
ZeroKMSBuilder for the timeout /
pool / batch knobs that do help long-running encrypt loops.
Implementations§
§impl<C> ScopedCipher<C>
impl<C> ScopedCipher<C>
pub async fn init_default(
client: Arc<ZeroKMSWithClientKey<C>>,
) -> Result<Self, Error>
pub async fn init_default( client: Arc<ZeroKMSWithClientKey<C>>, ) -> Result<Self, Error>
Initialize a new ScopedCipher for the default keyset_id.
pub async fn init(
client: Arc<ZeroKMSWithClientKey<C>>,
keyset_id: Option<IdentifiedBy>,
) -> Result<Self, Error>
pub async fn init( client: Arc<ZeroKMSWithClientKey<C>>, keyset_id: Option<IdentifiedBy>, ) -> Result<Self, Error>
Initialize a new ScopedCipher for the given keyset_id. If the keyset_id is None, the ScopedCipher will be initialized with the default keyset_id for the client.
pub fn mac<const N: usize>(&self, value: &str, prefix: Option<&str>) -> [u8; N]
pub fn mac<const N: usize>(&self, value: &str, prefix: Option<&str>) -> [u8; N]
This value is used for term index keys and “encrypted” partition / sort keys
pub fn compound_index<I>(
&self,
index: I,
plaintext: ComposablePlaintext,
info: String,
) -> Result<IndexTerm, EncryptionError>where
I: ComposableIndex + Send,
pub fn compound_query<I>(
&self,
index: I,
input: ComposablePlaintext,
info: String,
) -> Result<IndexTerm, EncryptionError>where
I: ComposableIndex + Send,
pub async fn encrypt(
&self,
payloads: impl IntoIterator<Item = EncryptPayload<'_>>,
) -> Result<Vec<EncryptedRecord>, Error>
pub async fn encrypt( &self, payloads: impl IntoIterator<Item = EncryptPayload<'_>>, ) -> Result<Vec<EncryptedRecord>, Error>
Encrypt a stream of EncryptPayload and return them as an EncryptedRecord.
This function wraps the ZeroKMSWithClientKey::encrypt function but with the keyset_id set.
pub async fn decrypt<'a, D>(
&self,
payloads: impl IntoIterator<Item = D>,
opts: &DecryptOptions<'a>,
) -> Result<Vec<Vec<u8>>, Error>
pub async fn decrypt<'a, D>( &self, payloads: impl IntoIterator<Item = D>, opts: &DecryptOptions<'a>, ) -> Result<Vec<Vec<u8>>, Error>
Decrypt a stream of encrypted values (of type D where D: Decryptable) and return the raw decrypted binary
blob.
pub async fn decrypt_fallible<'a, D>( &self, payloads: impl IntoIterator<Item = D>, opts: &DecryptOptions<'a>, ) -> Result<Vec<Result<Vec<u8>, RecordDecryptError>>, Error>
pub fn index_key(&self) -> &IndexKey
pub fn keyset_id(&self) -> Uuid
Trait Implementations§
§impl<C> Debug for ScopedCipher<C>
impl<C> Debug for ScopedCipher<C>
§impl<C> Drop for ScopedCipher<C>
impl<C> Drop for ScopedCipher<C>
§impl<C> Zeroize for ScopedCipher<C>
impl<C> Zeroize for ScopedCipher<C>
Auto Trait Implementations§
impl<C> Freeze for ScopedCipher<C>
impl<C> !RefUnwindSafe for ScopedCipher<C>
impl<C> Send for ScopedCipher<C>
impl<C> Sync for ScopedCipher<C>
impl<C> Unpin for ScopedCipher<C>
impl<C> UnsafeUnpin for ScopedCipher<C>
impl<C> !UnwindSafe for ScopedCipher<C>
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> 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<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more