Struct ZeroKMS
pub struct ZeroKMS<C, ClientKeyState = ()>where
ClientKeyState: Zeroize,{ /* private fields */ }
Implementations§
§impl<C: Credentials<Token = ServiceToken>> ZeroKMS<C>
impl<C: Credentials<Token = ServiceToken>> ZeroKMS<C>
pub fn new(
base_url: &Url,
credentials: C,
decryption_log_path: Option<&Path>,
) -> Self
pub fn new( base_url: &Url, credentials: C, decryption_log_path: Option<&Path>, ) -> Self
Create a new instance of the ZeroKMS
client.
In most cases it is prefered to use crate::config::ZeroKMSConfig::create_client
instead of calling
this manually.
pub fn new_with_client_key(
base_url: &Url,
credentials: C,
decryption_log_path: Option<&Path>,
client_key: ClientKey,
) -> ZeroKMSWithClientKey<C>
pub fn new_with_client_key( base_url: &Url, credentials: C, decryption_log_path: Option<&Path>, client_key: ClientKey, ) -> ZeroKMSWithClientKey<C>
Create a new instance of the ZeroKMS
client with a ClientKey
.
In most cases it is prefered to use crate::config::ZeroKMSConfigWithClientKey::create_client
instead of calling
this manually.
§impl<C: Credentials<Token = ServiceToken>, K> ZeroKMS<C, K>where
K: Zeroize,
impl<C: Credentials<Token = ServiceToken>, K> ZeroKMS<C, K>where
K: Zeroize,
pub fn log_decryptions(&self, records: &[EncryptedRecord], access_token: &str)
pub async fn create_dataset(
&self,
name: &str,
description: &str,
) -> Result<Dataset, Error>
pub async fn create_dataset( &self, name: &str, description: &str, ) -> Result<Dataset, Error>
Create a Dataset in ZeroKMS used to encrypt data. The name and description are used to identify the dataset.
pub async fn grant_dataset(
&self,
client_id: Uuid,
dataset_id: Uuid,
) -> Result<(), Error>
pub async fn grant_dataset( &self, client_id: Uuid, dataset_id: Uuid, ) -> Result<(), Error>
Grant a client with the given client_id
access to a Dataset with an ID of dataset_id
.
For this to work, the client must already exist and have access to at least one dayaset.
If you are creating a new client, use Self::create_client
instead.
Note that the client and dataset must be in the same workspace.
pub async fn revoke_dataset(
&self,
client_id: Uuid,
dataset_id: Uuid,
) -> Result<(), Error>
pub async fn revoke_dataset( &self, client_id: Uuid, dataset_id: Uuid, ) -> Result<(), Error>
Revoke a Client with the given client_id
access to the Dataset with dataset_id
.
If the client only has access to one dataset, this is the same as deleting the client.
pub async fn list_datasets(&self) -> Result<Vec<Dataset>, Error>
pub async fn list_datasets(&self) -> Result<Vec<Dataset>, Error>
List all Datasets in ZeroKMS for the current workspace.
pub async fn enable_dataset(&self, dataset_id: Uuid) -> Result<(), Error>
pub async fn enable_dataset(&self, dataset_id: Uuid) -> Result<(), Error>
Enable a Dataset by ID if it has been disabled.
pub async fn disable_dataset(&self, dataset_id: Uuid) -> Result<(), Error>
pub async fn disable_dataset(&self, dataset_id: Uuid) -> Result<(), Error>
Disable a Dataset by ID.
A disabled dataset will deny all attempts to encrypt and decrypt data.
pub async fn modify_dataset(
&self,
dataset_id: Uuid,
name: Option<&str>,
description: Option<&str>,
) -> Result<(), Error>
pub async fn modify_dataset( &self, dataset_id: Uuid, name: Option<&str>, description: Option<&str>, ) -> Result<(), Error>
Modify a Dataset by ID by setting a new name or description.
pub async fn create_client(
&self,
name: &str,
description: &str,
dataset_id: Uuid,
) -> Result<CreateClientResponse, Error>
pub async fn create_client( &self, name: &str, description: &str, dataset_id: Uuid, ) -> Result<CreateClientResponse, Error>
Create a new client for the specified dataset.
Clients are required to generate and retrieve datasets key a specified dataset. Use the
ClientKey
returned by CreateClientResponse
to create a ZeroKMSWithClientKey
client that can
encrypt and decrypt.
This ClientKey
can not be retrieved again after creating the client. So it’s important
to keep it somewhere safe.
§ClientKey compromise
If you suspect that a ClientKey
has been compromised, you should revoke the client and create a new one.
See Self::delete_client
for more information.
§Create vs Grant
If you are creating a new client, use this method. If you are granting access to an existing client,
use Self::grant_dataset
instead.
pub async fn list_clients(&self) -> Result<Vec<DatasetClient>, Error>
pub async fn list_clients(&self) -> Result<Vec<DatasetClient>, Error>
List clients for the current workspace in ZeroKMS.
pub async fn delete_client(
&self,
client_id: Uuid,
) -> Result<DeleteClientResponse, Error>
pub async fn delete_client( &self, client_id: Uuid, ) -> Result<DeleteClientResponse, Error>
Delete client by ID.
Once a client is deleted it can’t be used to generate or retrieve data keys.
This method nullifies the ClientKey
for the client.
Even if an attacker has the ClientKey
, they can’t use it to decrypt data.
To revoke access only to a specific dataset, use Self::revoke_dataset
instead.
§impl<C: Credentials<Token = ServiceToken>> ZeroKMS<C, ClientKey>
impl<C: Credentials<Token = ServiceToken>> ZeroKMS<C, ClientKey>
pub async fn encrypt(
&self,
payloads: impl IntoIterator<Item = EncryptPayload<'_>>,
dataset_id: Option<Uuid>,
) -> Result<Vec<EncryptedRecord>, Error>
pub async fn encrypt( &self, payloads: impl IntoIterator<Item = EncryptPayload<'_>>, dataset_id: Option<Uuid>, ) -> Result<Vec<EncryptedRecord>, Error>
Encrypt a stream of EncryptPayload
and return them as an EncryptedRecord
.
Note that this only works when Self is a ZeroKMSWithClientKey
client.
pub async fn encrypt_single(
&self,
payload: EncryptPayload<'_>,
dataset_id: Option<Uuid>,
) -> Result<EncryptedRecord, Error>
pub async fn encrypt_single( &self, payload: EncryptPayload<'_>, dataset_id: Option<Uuid>, ) -> Result<EncryptedRecord, Error>
Encrypt a single EncryptPayload
.
Note that this only works when Self is a ZeroKMSWithClientKey
client.
pub async fn decrypt(
&self,
payloads: impl IntoIterator<Item = EncryptedRecord>,
) -> Result<Vec<Vec<u8>>, Error>
pub async fn decrypt( &self, payloads: impl IntoIterator<Item = EncryptedRecord>, ) -> Result<Vec<Vec<u8>>, Error>
Decrypt a stream of EncryptedRecord
and return the raw decrypted binary blob.
Note that this only works when Self is a ZeroKMSWithClientKey
client.
This function will decrypt records from any dataset that the client has access to.
pub async fn decrypt_single(
&self,
payload: EncryptedRecord,
) -> Result<Vec<u8>, Error>
pub async fn decrypt_single( &self, payload: EncryptedRecord, ) -> Result<Vec<u8>, Error>
Decrypt a single EncryptedRecord
.
Note that this only works when Self is a ZeroKMSWithClientKey
client.
Trait Implementations§
Auto Trait Implementations§
impl<C, ClientKeyState = ()> !Freeze for ZeroKMS<C, ClientKeyState>
impl<C, ClientKeyState = ()> !RefUnwindSafe for ZeroKMS<C, ClientKeyState>
impl<C, ClientKeyState> Send for ZeroKMS<C, ClientKeyState>
impl<C, ClientKeyState> Sync for ZeroKMS<C, ClientKeyState>
impl<C, ClientKeyState> Unpin for ZeroKMS<C, ClientKeyState>
impl<C, ClientKeyState = ()> !UnwindSafe for ZeroKMS<C, ClientKeyState>
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
§impl<T> Fake for T
impl<T> Fake for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<D> OwoColorize for D
impl<D> OwoColorize for D
§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
§fn on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
fn on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
§fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
§fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
§fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
§fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
§fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
§fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
§fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
§fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
§fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
§fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
§fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
§fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
§fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
§fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
§fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
§fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
§fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
§fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
§fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
§fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
§fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
§fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
§fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
§fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
§fn strikethrough<'a>(&'a self) -> StrikeThroughDisplay<'a, Self>
fn strikethrough<'a>(&'a self) -> StrikeThroughDisplay<'a, Self>
§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 more§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