[go: up one dir, main page]

Struct mongocrypt::CryptBuilder

source ·
pub struct CryptBuilder { /* private fields */ }

Implementations§

source§

impl CryptBuilder

source

pub fn log_handler<F>(self, handler: F) -> Result<Self>
where F: Fn(LogLevel, &str) + 'static + UnwindSafe,

Set a handler to get called on every log message.

source

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 - A crypto fn.
  • aes_256_cbc_decrypt - A crypto fn.
  • random - A random fn.
  • hmac_sha_512 - A hmac fn.
  • hmac_sha_256 - A hmac fn.
  • sha_256 - A hash 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.
source

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 - A crypto fn. The crypto callback function for encrypt operation.
  • aes_256_ctr_decrypt - A crypto fn. The crypto callback function for decrypt operation.
source

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 - A crypto fn. The crypto callback function for encrypt operation.
source

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 - A hmac fn. The crypto callback function.
source§

impl CryptBuilder

source

pub fn new() -> Self

source

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 with Ctx::provide_kms_providers.
source

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.
source

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.
source

pub fn append_crypt_shared_lib_search_path(self, path: &Path) -> Result<Self>

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.

source

pub fn set_crypt_shared_lib_path_override(self, path: &Path) -> Result<Self>

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.

source

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.

source

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 Ctx will never enter the State::NeedMarkings state.
source

pub fn build(self) -> Result<Crypt>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V