Struct mongocrypt::CryptBuilder
source · pub struct CryptBuilder { /* private fields */ }Implementations§
source§impl CryptBuilder
impl CryptBuilder
sourcepub fn log_handler<F>(self, handler: F) -> Result<Self>
pub fn log_handler<F>(self, handler: F) -> Result<Self>
Set a handler to get called on every log message.
sourcepub fn crypto_hooks(
self,
aes_256_cbc_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static,
aes_256_cbc_decrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static,
random: impl Fn(&mut dyn Write, u32) -> Result<()> + UnwindSafe + 'static,
hmac_sha_512: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static,
hmac_sha_256: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static,
sha_256: impl Fn(&[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static
) -> Result<Self>
pub fn crypto_hooks( self, aes_256_cbc_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static, aes_256_cbc_decrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static, random: impl Fn(&mut dyn Write, u32) -> Result<()> + UnwindSafe + 'static, hmac_sha_512: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static, hmac_sha_256: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static, sha_256: impl Fn(&[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static ) -> Result<Self>
Set crypto hooks.
aes_256_cbc_encrypt- Acrypto fn.aes_256_cbc_decrypt- Acrypto fn.random- Arandom fn.hmac_sha_512- Ahmac fn.hmac_sha_256- Ahmac fn.sha_256- Ahash fn.
The Fn bounds used here fall into four distinct kinds, some of which are reused elswhere:
crypto fn- A crypto AES-256-CBC encrypt or decrypt function.key- An encryption key (32 bytes for AES_256).iv- An initialization vector (16 bytes for AES_256).in- The input. Note, this is already padded. Encrypt with padding disabled.out- The output.
hmac fn- A crypto signature or HMAC function.key- An encryption key (32 bytes for HMAC_SHA512).in- The input.out- The output.
hash fn- A crypto hash (SHA-256) function.in- The input.out- The output.
random fn- A crypto secure random function.out- The output.count- The number of random bytes requested.
sourcepub fn aes_256_ctr(
self,
aes_256_ctr_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static,
aes_256_ctr_decrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static
) -> Result<Self>
pub fn aes_256_ctr( self, aes_256_ctr_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static, aes_256_ctr_decrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static ) -> Result<Self>
Set a crypto hook for the AES256-CTR operations.
aes_256_ctr_encrypt- Acrypto fn. The crypto callback function for encrypt operation.aes_256_ctr_decrypt- Acrypto fn. The crypto callback function for decrypt operation.
sourcepub fn aes_256_ecb(
self,
aes_256_ecb_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static
) -> Result<Self>
pub fn aes_256_ecb( self, aes_256_ecb_encrypt: impl Fn(&[u8], &[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static ) -> Result<Self>
Set an AES256-ECB crypto hook for the AES256-CTR operations. If CTR hook was
configured using aes_256_ctr, ECB hook will be ignored.
aes_256_ecb_encrypt- Acrypto fn. The crypto callback function for encrypt operation.
sourcepub fn crypto_hook_sign_rsassa_pkcs1_v1_5(
self,
sign_rsaes_pkcs1_v1_5: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static
) -> Result<Self>
pub fn crypto_hook_sign_rsassa_pkcs1_v1_5( self, sign_rsaes_pkcs1_v1_5: impl Fn(&[u8], &[u8], &mut dyn Write) -> Result<()> + UnwindSafe + 'static ) -> Result<Self>
Set a crypto hook for the RSASSA-PKCS1-v1_5 algorithm with a SHA-256 hash.
See: https://tools.ietf.org/html/rfc3447#section-8.2
sign_rsaes_pkcs1_v1_5- Ahmac fn. The crypto callback function.
source§impl CryptBuilder
impl CryptBuilder
pub fn new() -> Self
sourcepub fn kms_providers(self, kms_providers: &Document) -> Result<Self>
pub fn kms_providers(self, kms_providers: &Document) -> Result<Self>
Configure KMS providers with a BSON document.
kms_providers- A BSON document mapping the KMS provider names to credentials. Set a KMS provider value to an empty document to supply credentials on-demand withCtx::provide_kms_providers.
sourcepub fn schema_map(self, schema_map: &Document) -> Result<Self>
pub fn schema_map(self, schema_map: &Document) -> Result<Self>
Set a local schema map for encryption.
schema_map- A BSON document representing the schema map supplied by the user. The keys are collection namespaces and values are JSON schemas.
sourcepub fn encrypted_field_config_map(self, efc_map: &Document) -> Result<Self>
pub fn encrypted_field_config_map(self, efc_map: &Document) -> Result<Self>
Set a local EncryptedFieldConfigMap for encryption.
efc_map- A BSON document representing the EncryptedFieldConfigMap supplied by the user. The keys are collection namespaces and values are EncryptedFieldConfigMap documents.
Append an additional search directory to the search path for loading the crypt_shared dynamic library.
If the leading element of the path is the literal string “$ORIGIN”, that substring will be replaced with the directory path containing the executable libmongocrypt module. If the path string is literal “$SYSTEM”, then libmongocrypt will defer to the system’s library resolution mechanism to find the crypt_shared library.
If no crypt_shared dynamic library is found in any of the directories
specified by the search paths loaded here, build will still
succeed and continue to operate without crypt_shared.
The search paths are searched in the order that they are appended. This allows one to provide a precedence in how the library will be discovered. For example, appending known directories before appending “$SYSTEM” will allow one to supersede the system’s installed library, but still fall-back to it if the library wasn’t found otherwise. If one does not ever append “$SYSTEM”, then the system’s library-search mechanism will never be consulted.
If an absolute path to the library is specified using
set_crypt_shared_lib_path_override, then paths
appended here will have no effect.
Set a single override path for loading the crypt_shared dynamic library.
If the leading element of the path is the literal string
$ORIGIN, that substring will be replaced with the directory path containing
the executable libmongocrypt module.
This function will do no IO nor path validation. All validation will
occur during the call to build.
If a crypt_shared library path override is specified here, then no
paths given to append_crypt_shared_lib_search_path
will be consulted when opening the crypt_shared library.
If a path is provided via this API and build fails to
initialize a valid crypt_shared library instance for the path specified, then
the initialization will fail with an error.
sourcepub fn use_need_kms_credentials_state(self) -> Self
pub fn use_need_kms_credentials_state(self) -> Self
Opt-into handling the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state.
If set, before entering the MONGOCRYPT_CTX_NEED_KMS state, contexts may enter the MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS state and then wait for credentials to be supplied through @ref mongocrypt_ctx_provide_kms_providers.
A context will only enter MONGOCRYPT_CTX_NEED_KMS_CREDENTIALS if an empty document was set for a KMS provider in @ref mongocrypt_setopt_kms_providers.
sourcepub fn bypass_query_analysis(self) -> Self
pub fn bypass_query_analysis(self) -> Self
Opt-into skipping query analysis.
If opted in:
- The crypt_shared library will not attempt to be loaded.
- A
Ctxwill never enter theState::NeedMarkingsstate.
pub fn build(self) -> Result<Crypt>
Auto Trait Implementations§
impl Freeze for CryptBuilder
impl !RefUnwindSafe for CryptBuilder
impl !Send for CryptBuilder
impl !Sync for CryptBuilder
impl Unpin for CryptBuilder
impl !UnwindSafe for CryptBuilder
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> 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.