Clase: Mongo::Crypt::ExplicitEncrypter Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Definido en:
lib/mongo/crypt/explicit_encrypter.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Un ExplicitEncrypter es un objeto que realiza operaciones de cifrado explícitas y gestiona todas las opciones asociadas y variables de instancia.

Resumen del método de instancia colapsar

Detalles del Constructor

#initialize(key_vault_client, key_vault_namespace, kms_providers, kms_tls_options, timeout_ms = nil, key_expiration_ms = nil) ⇒ ExplicitEncrypter

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Crea un nuevo objeto ExplicitEncrypter.

Parámetros:

  • key_vault_client (Mongo::cliente) —

    Una instancia de Mongo::cliente para conectarse a la Colección de Bóvedas de Llaves.

  • key_vault_namespace (string) —

    El namespace de la Colección de Bóvedas de Llaves en el formato "db_name.collection_name".

  • kms_providers (Crypt::KMS::Credentials) —

    Un hash de información de configuración del servicio de gestión de claves.

  • kms_tls_options (encriptada) —

    Opciones de TLS para conectarse a los proveedores de KMS. Las claves del hash deben ser nombres de los proveedores de KSM; los valores deben ser hashes de opciones de conexión TLS. Las opciones son equivalentes a las opciones de conexión TLS de Mongo::Client.

  • timeout_ms (Integer | nil) (valor por defecto: nil) —

    Tiempo de espera para cada operación ejecutada en este objeto.

  • key_expiration_ms (Integer | nil) (valor por defecto: nil) —

    Duración de la caché de claves de cifrado de datos, en milisegundos. Un valor de 0 significa que la caché nunca caduca. Si es nulo, se utiliza el valor predeterminado de libmongocrypt, 60000.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 43

def inicializar(
  key_vault_client, key_vault_namespace, kms_providers, kms_tls_options,
  timeout_ms = nulo, key_expiration_ms = nulo
)
  Cripta.validate_ffi!
  @crypt_handle = gestionar.Nuevo(
    kms_providers,
    kms_tls_options,
    solo_cifrado_explícito: true,
    key_expiration_ms: key_expiration_ms
  )
  @encryption_io = EncryptionIO.Nuevo(
    key_vault_client: key_vault_client,
    metadata_client: nulo,
    key_vault_namespace: key_vault_namespace
  )
  @timeout_ms = timeout_ms
end

Detalles del método de instancia

#add_key_alt_name(id, key_alt_name) ⇒ BSON::Document | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Agrega un key_alt_name para la clave en la Colección de Bóvedas de Llaves con el ID proporcionado.

Parámetros:

  • ID (BSON::Binary) —

    Id. de la clave para agregar un nombre alternativo de clave nuevo.

  • key_alt_name (string) —

    Nuevo nombre alternativo de clave para agregar.

Devuelve:

  • (BSON::Document | nil) —

    Documento que describe la clave identificada antes de agregar el nombre alternativo de la clave, o nil si no existe tal clave.



218
219
220
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 218

def add_key_alt_name(ID, key_alt_name)
  @encryption_io.add_key_alt_name(ID, key_alt_name, tiempo_de_espera_ms: @timeout_ms)
end

#create_and_insert_data_key(master_key_document, key_alt_names, key_material = nil) ⇒ BSON::Binary

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Genera una clave de datos utilizada para el cifrado/descifrado y almacena esa clave en la colección KMS. La clave generada está cifrado con la clave maestra KMS.

Parámetros:

  • master_key_document (Mongo::Crypt::KMS::MasterKeyDocument) —

    El documento de clave principal que contiene los parámetros de la llave de cifrado.

  • clave_nombres_alternativos (arreglo<String> | nil) —

    Un arreglo opcional de cadenas que especifica nombres alternativos para la nueva clave de datos.

  • material de clave (String | nil) (valor por defecto: nil) —

    Opcional 96 bytes para usar como material clave personalizado para la clave de datos que se está creando. Si se proporciona la opción key_material, el material clave personalizado se utiliza para cifrar y descifrar los datos.

Devuelve:

  • (BSON::Binary) —

    El UUID de 16bytes de la nueva clave de datos como un objeto BSON::Binary con tipo :uuid.



77
78
79
80
81
82
83
84
85
86
87
88
89
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 77

def create_and_insert_data_key(master_key_document, clave_nombres_alternativos, material de clave = nulo)
  data_key_document = Cripta::DataKeyContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    master_key_document,
    clave_nombres_alternativos,
    material de clave
  ).run_state_machine(timeout_holder)

  @encryption_io.insert_data_key(
    data_key_document, tiempo_de_espera_ms: timeout_holder.remaining_timeout_ms!
  ).inserted_id
end

#descifrar(valor) ⇒ Objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Descifra un valor que ya ha sido cifrado

Parámetros:

  • Valor (BSON::Binary) —

    Un objeto binario BSON de subtipo 6 (texto cifrado) que se descifrará

Devuelve:

  • (objeto) —

    El valor descifrado



203
204
205
206
207
208
209
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 203

def descifrar(Valor)
  Cripta::ExplicitDecryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: Valor }
  ).run_state_machine(timeout_holder)['v']
end

#delete_key(id) ⇒ Operación::Result

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Remueve la clave con la ID indicada de la Colección de Bóvedas de Llaves.

Parámetros:

  • ID (BSON::Binary) —

    ID de la clave a borrar.

Devuelve:

  • (Operation::Result) —

    La respuesta de la base de datos para la operación delete_one que elimina la clave.



228
229
230
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 228

def delete_key(ID)
  @encryption_io.delete_key(ID, tiempo_de_espera_ms: @timeout_ms)
end

#encriptar(valor, opciones) ⇒ BSON::Binary

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Las opciones :key_id y :key_alt_name son mutuamente excluyentes. Solo se requiere uno para realizar el cifrado explícito.

Cifra un valor utilizando la llave de cifrado y el algoritmo especificados

Parámetros:

  • Valor (objeto) —

    El valor a cifrar

  • opciones (encriptada)

Opciones Hash (options):

  • :key_id (BSON::Binary) —

    Un objeto BSON::Binary de tipo :uuid que representa el UUID de la llave de cifrado tal y como está almacenado en la Colección de Bóvedas de Llaves.

  • :key_alt_name (string) —

    El nombre alternativo para la clave de cifrado.

  • algoritmo (string) —

    El algoritmo utilizado para cifrar el valor. Los algoritmos válidos son "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "AEAD_AES_256_CBC_HMAC_SHA_512-Random", "Indexed", "Unindexed", "Range" y "String".

  • :contention_factor (Integer | nil) —

    Factor de contención que se aplicará si el algoritmo de cifrado se establece en "Indexado", "Rango" o "Cadena". Si no se especifica, se utiliza el valor predeterminado 0. El factor de contención solo debe establecerse si el algoritmo de cifrado se establece en "Indexado", "Rango" o "Cadena".

  • :tipo_de_consulta (String | nil) —

    Tipo de consulta que se aplicará si el algoritmo de cifrado está configurado como "Indexado", "Rango" o "Cadena". Los valores permitidos son "igualdad" (para "Indexado"), "rango" (para "Rango") y "prefijo", "sufijo" o "subcadena" (para "Cadena").

  • Opciones de rango (Hash | nil) —

    Especifica las opciones de índice para un campo de cifrado consultable que admite consultas de tipo "rango". Es obligatorio cuando el algoritmo es "Rango".

  • :string_opts (Hash | nil) —

    Especifica las opciones de índice para un campo de cifrado consultable que admite consultas de "prefijo", "sufijo" o "subcadena". Es obligatorio cuando el algoritmo es "String".

Devuelve:

  • (BSON::Binary) —

    Un objeto BSON Binary de subtipo 6 (texto cifrado) que representa el valor cifrado

Aumenta:

  • (ArgumentError) —

    si se establece contention_factor o query_type, y algorithm no es "Indexed", "Range" o "String".



128
129
130
131
132
133
134
135
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 128

def cifrado(Valor, opciones)
  Cripta::ExplicitEncryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: Valor },
    opciones
  ).run_state_machine(timeout_holder)['v']
end

#encrypt_expression(expresión, opciones) ⇒ BSON::Binary

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

El algoritmo de rango es únicamente experimental. No es

Nota:

Las opciones :key_id y :key_alt_name son mutuamente excluyentes. Solo se requiere uno para realizar el cifrado explícito.

Encripta una expresión de coincidencia o una expresión de agregación para consultar un índice de rango.

Solo se admite cuando queryType es "range" y el algoritmo es "Range". @note: El algoritmo de Rango es solo experimental. No está destinado al uso público. Está sujeto a cambios disruptivos.

@param [ Hash ] opciones

destinado al uso público.

Ejemplos:

Encripta expresión de coincidencia.

encryption.encrypt_expression(
  {'$and' =>  [{'field' => {'$gt' => 10}}, {'field' =>  {'$lt' => 20 }}]}
)

Encriptar expresión agregada.

encryption.encrypt_expression(
  {'$and' =>  [{'$gt' => ['$field', 10]}, {'$lt' => ['$field', 20]}}
)
{$and: [{$gt: [<fieldpath>, <value1>]}, {$lt: [<fieldpath>, <value2>]}]

Parámetros:

  • expresión (encriptada) —

    Expresión para cifrar.

  • opciones (encriptada) —

    un conjunto personalizable de opciones

Opciones Hash (options):

  • :key_id (BSON::Binary) —

    Un objeto BSON::Binary de tipo :uuid que representa el UUID de la llave de cifrado tal y como está almacenado en la Colección de Bóvedas de Llaves.

  • :key_alt_name (string) —

    El nombre alternativo para la clave de cifrado.

  • algoritmo (string) —

    El algoritmo utilizado para cifrar la expresión. El único valor permitido es "Rango"

  • :contention_factor (Integer | nil) —

    Factor de contención a aplicar Si no se proporciona, el valor por defecto es 0.

  • query_type (String | nil) —

    Tipo de consulta que se aplicará. El único valor permitido es "rango".

  • Opciones de rango (Hash | nil) —

    Especifica las opciones de índice para un campo de Queryable Encryption que admite consultas de "rango". Las opciones permitidas son:

    • :min
    • max:
    • trim_factor
    • escasez
    • La :precisión min, max, trim_factor, sparsity y precisión deben coincidir con los valores definidos en encryptedFields de la colección de destino. Para double y decimal128, min/máx/precisión deben estar todos activados o todos desactivados.

Devuelve:

  • (BSON::Binary) —

    Un objeto BSON Binary de subtipo 6 (texto cifrado) que representa la expresión cifrada.

Aumenta:

  • (ArgumentError) —

    si se establecen valores no permitidos en las opciones.



188
189
190
191
192
193
194
195
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 188

def encrypt_expression(expresión, opciones)
  Cripta::ExplicitEncryptionExpressionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: expresión },
    opciones
  ).run_state_machine(timeout_holder)['v']
end

#get_key(id) ⇒ BSON::Document | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Encuentra una sola clave con el ID proporcionado.

Parámetros:

  • ID (BSON::Binary) —

    Id de la clave a obtener.

Devuelve:

  • (BSON::Document | nil) —

    El documento clave encontrado o nulo si no se encuentra.



238
239
240
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 238

def obtener_clave(ID)
  @encryption_io.obtener_clave(ID, tiempo_de_espera_ms: @timeout_ms)
end

#get_key_by_alt_name(key_alt_name) ⇒ BSON::Document | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve una clave en la Colección de Bóvedas de Llaves con el key_alt_name (nombre alternativo de clave) proporcionado.

Parámetros:

  • key_alt_name (string) —

    Nombre alternativo clave para encontrar una clave.

Devuelve:

  • (BSON::Document | nil) —

    El documento clave encontrado o nulo si no se encuentra.



248
249
250
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 248

def get_key_by_alt_name(key_alt_name)
  @encryption_io.get_key_by_alt_name(key_alt_name, tiempo_de_espera_ms: @timeout_ms)
end

#get_keys ⇒ colección::View

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve todas las Colección de Bóvedas de Llaves.

rubocop:disable Naming/AccessorMethodName El nombre de este método está definido en la especificación de FLE.

Devuelve:



257
258
259
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 257

def get_keys
  @encryption_io.get_keys(tiempo_de_espera_ms: @timeout_ms)
end

#remove_key_alt_name(id, key_alt_name) ⇒ BSON::Document | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Remueve un key_alt_name de una clave en la Colección de Bóvedas de Llaves con el ID especificado.

Parámetros:

  • ID (BSON::Binary) —

    ID de la clave para remover el nombre alternativo de la clave.

  • key_alt_name (string) —

    Nombre alternativo clave a remover.

Devuelve:

  • (BSON::Document | nil) —

    Documento que describe la clave identificada antes de remover el nombre alternativo de la clave, o nulo si no existe tal clave.



269
270
271
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 269

def eliminar_nombre_alternativo_de_clave(ID, key_alt_name)
  @encryption_io.eliminar_nombre_alternativo_de_clave(ID, key_alt_name, tiempo_de_espera_ms: @timeout_ms)
end

#rewrap_many_data_key(filtro, opts = {}) ⇒ Crypt::RewrapManyDataKeyResult

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Descifra varias claves de datos y las (re)encripta con una nueva master_key, o con su master_key actual si no se proporciona una nueva.

Parámetros:

  • filtro (encriptada) —

    Filtro usado para encontrar claves que serán actualizadas.

  • opciones (encriptada)

Devuelve:



284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 284

def rewrap_many_data_key(filtro, opciones = {})
  validate_rewrap_options!(opciones)

  master_key_document = master_key_for_provider(opciones)

  rewrap_result = Cripta::RewrapManyDataKeyContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    filtro,
    master_key_document
  ).run_state_machine(timeout_holder)

  return RewrapManyDataKeyResult.Nuevo(nulo) si rewrap_result.nil?

  updates = updates_from_data_key_documents(rewrap_result.obtener('v'))
  RewrapManyDataKeyResult.Nuevo(
    @encryption_io.update_data_keys(updates, tiempo_de_espera_ms: @timeout_ms)
  )
end