Clase: Mongo::Crypt::ExplicitEncrypter Privado

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

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

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

Colapso del resumen del método de instancia

Detalles del constructor

#inicializar(cliente de key_vault, espacio de nombres de key_vault, proveedores de kms, opciones de kms_tls, tiempo de espera_ms = nulo) ⇒ ExplicitEncrypter

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Crea un nuevo objeto ExplicitEncrypter.

Parámetros:

  • cliente de bóveda de claves (Mongo::Cliente)

    Una instancia de Mongo::Client para conectarse a la colección de bóveda de claves.

  • key_vault_namespace (Cadena) -

    El espacio de nombres de la colección de almacén de claves en el formato “db_name.collection_name”.

  • proveedores de kms (Crypt::KMS::Credenciales)

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

  • opciones_kms_tls (Hash)

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

  • tiempo de espera_ms (Integer | nil) (predeterminado: nulo)

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



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 40

def inicializar(cliente de bóveda de claves, key_vault_namespace, proveedores de kms, opciones_kms_tls, tiempo de espera_ms = nulo)
  Cripta.validate_ffi!
  @crypt_handle = Manejar.Nuevo(
    proveedores de kms,
    opciones_kms_tls,
    solo cifrado explícito: true
  )
  @encryption_io = EncryptionIO.Nuevo(
    cliente de bóveda de claves: cliente de bóveda de claves,
    metadata_client: nulo,
    key_vault_namespace: key_vault_namespace
  )
  @timeout_ms = tiempo de espera_ms
end

Detalles del método de instancia

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

Este método forma parte de una API privada. Debe evitarlo 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 almacén de claves con la identificación dada.

Parámetros:

  • ID. (BSON::Binario)

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

  • key_alt_name (Cadena) -

    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 nulo si no existe dicha clave.



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

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

#crear_e_insertar_clave_de_datos(documento_de_clave_maestra, nombres_alt_de_clave, material_de_clave = nulo) ⇒ BSON::Binary

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Genera una clave de datos para el cifrado/descifrado y la almacena en la colección KMS. La clave generada se cifra con la clave maestra de KMS.

Parámetros:

  • documento de clave maestra (Mongo::Crypt::KMS::MasterKeyDocument)

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

  • nombres de teclas alternativas (Matriz<String> | nulo ) —

    Una matriz opcional de cadenas que especifican nombres alternativos para la nueva clave de datos.

  • material de clave (String | nil) (predeterminado: nulo)

    Bytes 96 opcionales para usar como material de clave personalizado para la clave de datos que se está creando. Si se especifica la opción key_material, el material de clave personalizado se usa para cifrar y descifrar datos.

Devuelve:

  • (BSON::Binario)

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



70
71
72
73
74
75
76
77
78
79
80
81
82
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 70

def crear_e_insertar_clave_de_datos(documento de clave maestra, nombres de teclas alternativas, material de clave = nulo)
  data_key_document = Cripta::Contexto de clave de datos.Nuevo(
    @crypt_handle,
    @encryption_io,
    documento de clave maestra,
    nombres de teclas alternativas,
    material de clave
  ).máquina de estado de ejecución(timeout_holder)

  @encryption_io.insert_data_key(
    data_key_document, tiempo de espera_ms: timeout_holder.¡tiempo de espera restante_ms!
  ).inserted_id
end

#descifrar(valor) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo 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::Binario)

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

Devuelve:

  • (Objeto) -

    El valor descifrado



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

def desencriptar(valor)
  Cripta::ExplicitDecryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: valor }
  ).máquina de estado de ejecución(timeout_holder)['v']
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Elimina la clave con la identificación dada de la colección de bóveda de claves.

Parámetros:

  • ID. (BSON::Binario)

    Id de la clave a eliminar.

Devuelve:

  • (Operación::Resultado)

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



213
214
215
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 213

def tecla_de_eliminar(ID.)
  @encryption_io.tecla_de_eliminar(ID., tiempo de espera_ms: @timeout_ms)
end

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

Este método forma parte de una API privada. Debe evitarlo 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 una para realizar el cifrado explícito.

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

Si el algoritmo de cifrado está configurado como "Indexado", se debe configurar el tipo de consulta.

only if encryption algorithm is set to "Indexed". The only allowed
value is "equality".

Parámetros:

  • valor (Objeto) -

    El valor a cifrar

  • opciones (Hash)

Opciones Hash(opciones):

  • :identificación_de_clave (BSON::Binario)

    Un objeto BSON::Binary de tipo :uuid que representa el UUID de la clave de cifrado tal como está almacenada en la colección de almacén de claves.

  • :key_alt_name (Cadena)

    El nombre alternativo para la clave de cifrado.

  • :algoritmo (Cadena)

    El algoritmo utilizado para cifrar el valor. Los algoritmos válidos son: «AEAD_AES_256_CBC_HMAC_SHA_512-Determinista», «AEAD_AES_256_CBC_HMAC_SHA_512-Aleatorio», «Indexado» y «Sin indexar».

  • :factor_de_contención (Integer | nil)

    El factor de contención se aplicará si el algoritmo de cifrado está configurado como "Indexado". Si no se proporciona, el valor predeterminado es 0. El factor de contención solo debe configurarse si el algoritmo de cifrado está configurado como "Indexado".

  • tipo de consulta (String | nil)

    Tipo de consulta a aplicar

Devuelve:

  • (BSON::Binario)

    Un objeto binario BSON del subtipo 6 (texto cifrado) que representa el valor cifrado

Aumentos:

  • (ArgumentError)

    si se establece contention_factor o query_type y el algoritmo no está “Indexado”.



113
114
115
116
117
118
119
120
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 113

def cifrar(valor, opciones)
  Cripta::Contexto de cifrado explícito.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: valor },
    opciones
  ).máquina de estado de ejecución(timeout_holder)['v']
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

El algoritmo de rango es solo experimental. No es

Nota:

Las opciones :key_id y :key_alt_name son mutuamente excluyentes. Solo se requiere una 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 el tipo de consulta es "rango" y el algoritmo es "Rango". @nota: El algoritmo de rango es solo experimental. No está diseñado para...

for public use. It is subject to breaking changes.

# @param [ Hash ] opciones destinadas al uso público.

Ejemplos:

Cifrar expresión de coincidencia.

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

Cifrar expresión agregada.

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

Parámetros:

  • expresión (Hash)

    Expresión para cifrar.

  • opciones (Hash)

    un conjunto personalizable de opciones

Opciones Hash(opciones):

  • :identificación_de_clave (BSON::Binario)

    Un objeto BSON::Binary de tipo :uuid que representa el UUID de la clave de cifrado tal como está almacenada en la colección de almacén de claves.

  • :key_alt_name (Cadena)

    El nombre alternativo para la clave de cifrado.

  • :algoritmo (Cadena)

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

  • :factor_de_contención (Integer | nil)

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

  • tipo de consulta (String | nil)

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

  • :opciones_de_rango (Hash | nulo)

    Especifica las opciones de índice para un campo de cifrado consultable que admite consultas de rango. Las opciones permitidas son:

    • :min

    • :máximo

    • :factor de recorte

    • :escasez

    • :precisión

    Mínimo, máximo, factor de recorte, escasez y precisión deben coincidir con los valores definidos en los campos cifrados de la colección de destino. Para valores dobles y decimales128, los valores mínimo, máximo y precisión deben estar definidos o no definidos.

Devuelve:

  • (BSON::Binario)

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

Aumentos:

  • (ArgumentError)

    Si se establecen valores no permitidos en las opciones.



173
174
175
176
177
178
179
180
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 173

def expresión_cifrada(expresión, opciones)
  Cripta::Contexto de expresión de cifrado explícito.Nuevo(
    @crypt_handle,
    @encryption_io,
    { v: expresión },
    opciones
  ).máquina de estado de ejecución(timeout_holder)['v']
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Encuentra una sola clave con la identificación dada.

Parámetros:

  • ID. (BSON::Binario)

    Id de la clave a obtener.

Devuelve:

  • (BSON::Document | nil)

    El documento clave encontrado o nulo si no se encuentra.



223
224
225
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 223

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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve una clave en la colección de almacén de claves con el key_alt_name indicado.

Parámetros:

  • key_alt_name (Cadena) -

    Nombre de la tecla alt para buscar una tecla.

Devuelve:

  • (BSON::Document | nil)

    El documento clave encontrado o nulo si no se encuentra.



233
234
235
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 233

def obtener_clave_por_nombre_alt(key_alt_name)
  @encryption_io.obtener_clave_por_nombre_alt(key_alt_name, tiempo de espera_ms: @timeout_ms)
end

#get_keysColección::Vista

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve todas las claves de la colección de almacén de claves.

rubocop:disable Naming/AccessorMethodName El nombre de este método se define en la especificación FLE

Devuelve:



242
243
244
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 242

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 forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Elimina un key_alt_name de una clave en la colección de almacén de claves con la identificación dada.

Parámetros:

  • ID. (BSON::Binario)

    Id de la clave para eliminar el nombre alternativo de la clave.

  • key_alt_name (Cadena) -

    Tecla alt nombre para eliminar.

Devuelve:

  • (BSON::Document | nil)

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



254
255
256
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 254

def eliminar_tecla_alt_nombre(ID., key_alt_name)
  @encryption_io.eliminar_tecla_alt_nombre(ID., key_alt_name, tiempo de espera_ms: @timeout_ms)
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Descifra múltiples claves de datos y las vuelve a cifrar con una nueva clave maestra.

or with their current master_key if a new one is not given.

Parámetros:

  • filtro (Hash)

    Filtro utilizado para encontrar claves a actualizar.

  • opciones (Hash)

Devuelve:



269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
# Archivo 'lib/mongo/crypt/explicit_encrypter.rb', línea 269

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

  documento de clave maestra = llave maestra para proveedor(opta)

  resultado de reenvolver = Cripta::ReenvolverMuchosDatosContextoClave.Nuevo(
    @crypt_handle,
    @encryption_io,
    filtro,
    documento de clave maestra
  ).máquina de estado de ejecución(timeout_holder)

  return Resultado de clave de datos múltiples de reajuste.Nuevo(nulo) Si resultado de reenvolver.nil?

  updates = updates_from_data_key_documents(resultado de reenvolver.Fetch('v'))
  Resultado de clave de datos múltiples de reajuste.Nuevo(
    @encryption_io.update_data_keys(updates, tiempo de espera_ms: @timeout_ms)
  )
end