Classe: Mongo::Crypt::ExplicitEncrypter Private

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Definido em:
lib/mongo/crypt/explicit_encrypter.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Um ExplicitEncrypter é um objeto que executa operações de criptografia explícitas e lida com todas as opções associadas e variáveis de instância.

Recolhimento do Resumo do método de instância

Detalhes do construtor

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Crie um novo objeto ExplicitEncrypter.

Parâmetros:

  • key_vault_client (Mongo::Client)

    Uma instância do Mongo::Client para se conectar à coleção de cofre de chaves.

  • key_vault_namespace (string)

    O namespace da Key Vault Collection no formato “db_name.collection_name”.

  • kms_providers (Criptografia::KMS::Credenciais)

    Um hash de informações de configuração do KMS.

  • kms_tls_options (Hash)

    Opções de TLS para se conectar a provedores de KMS. As chaves do hash devem ser nomes de provedor KSM; Os valores devem ser hashes de opções de conexão TLS . As opções são equivalentes às opções de conexão TLS do Mongo::Client.

  • timeout_ms (Inteiro | nulo) (padrão para: nil)

    Tempo limite para cada operação executada neste objeto.



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

def inicializar(key_vault_client, key_vault_namespace, kms_providers, kms_tls_options, timeout_ms = nada)
  Criptografar.validate_ffi!
  @crypt_handle = Lidar.Novo(
    kms_providers,
    kms_tls_options,
    explicitamente_encryption_only: true
  )
  @encryption_io = EncryptionIO.Novo(
    key_vault_client: key_vault_client,
    metadata_client: nada,
    key_vault_namespace: key_vault_namespace
  )
  @timeout_ms = timeout_ms
end

Detalhes do método de instância

#add_key_alt_name(ID, key_alt_name) ➤ BSON::Document | nada

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Adiciona um key_alt_name para a chave na key vault collection com o ID fornecido.

Parâmetros:

  • id (BSON::Binary)

    ID da chave para adicionar o novo nome alternativo da chave.

  • key_alt_name (string)

    Novo nome alternativo da chave para adicionar.

Retorna:

  • (BSON::Document | nil)

    Documento que descreve a chave identificada antes de adicionar o nome alternativo da chave ou nulo se não houver essa chave.



203
204
205
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 203

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

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Gera uma chave de dados usada para criptografia/descriptografia e armazena essa chave na coleção KMS. A chave gerada é criptografada com a chave mestre KMS.

Parâmetros:

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

    O documento de chave mestra que contém parâmetros de chave mestra de criptografia.

  • key_alt_names (Array<String> | nil)

    Uma array opcional de strings especificando nomes alternativos para a nova chave de dados.

  • key_material (string | nil) (padrão para: nil)

    96 bytes opcionais para utilizar como material de chave personalizado para a chave de dados que está sendo criada. Se a opção key_material for fornecida, o material da chave personalizada será usado para criptografar e descriptografar dados.

Retorna:

  • (BSON::Binary)

    O 16bytes UUID da nova chave de dados como um objeto BSON::Binary com tipo :uuid.



70
71
72
73
74
75
76
77
78
79
80
81
82
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 70

def create_and_insert_data_key(master_key_document, key_alt_names, key_material = nada)
  data_key_document = Criptografar::DataKeyContext.Novo(
    @crypt_handle,
    @encryption_io,
    master_key_document,
    key_alt_names,
    key_material
  ).run_state_machine(timeout_holder)

  @encryption_io.insert_data_key(
    data_key_document, timeout_ms: timeout_holder.remaining_timeout_ms!
  ).insert_id
end

#descriptografar(valor) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Descriptografa um valor que já foi criptografado

Parâmetros:

  • valor (BSON::Binary)

    Um objeto binário BSON do subtipo 6 (texto cifrado) que será descriptografado

Retorna:

  • (Objeto)

    O valor descriptografado



188
189
190
191
192
193
194
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 188

def Descriptografar(valor)
  Criptografar::ExplicitDecryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: valor }
  ).run_state_machine(timeout_holder)['v']
end

#delete_key(ID) ➤ Operação::Result

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Remove a chave com o ID fornecido da coleção de cofre de chave.

Parâmetros:

  • id (BSON::Binary)

    ID da chave a ser excluída.

Retorna:

  • (Operação::Resultado)

    A resposta do banco de dados para a operação delete_one que exclui a chave.



213
214
215
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 213

def delete_key(id)
  @encryption_io.delete_key(id, timeout_ms: @timeout_ms)
end

#encrypt(value, options) ➤ BSON::Binary

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

As opções :key_id e :key_alt_name são mutuamente exclusivas. Apenas um é necessário para executar a criptografia explícita.

Criptografa um valor usando a chave de encriptação e o algoritmo especificados

se o algoritmo de criptografia estiver definido como "Indexado". O tipo de query deve ser definido

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

Parâmetros:

  • valor (Objeto)

    O valor a ser criptografado

  • opções (Hash)

Hash de opções (opções):

  • :key_id (BSON::Binary)

    Um objeto BSON::Binary do tipo :uuid representando o UUID da chave de criptografia conforme armazenado na coleção de cofre de chaves.

  • :key_alt_name (string)

    O nome alternativo da chave de criptografia.

  • :algorithm (string)

    O algoritmo usado para criptografar o valor. Algoritmos válidos são "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", "AEAD_AES_256_CBC_HMAC_SHA_512-Random", "Indexado", "não indexado".

  • :contention_factor (Inteiro | nulo)

    Fator de contenção a ser aplicado se o algoritmo de criptografia estiver definido como "Indexado". Se não for fornecido, o padrão será um valor de 0. O fator de contenção deve ser definido somente se o algoritmo de criptografia estiver definido como "Indexado".

  • query_type (string | nil)

    Tipo de query a ser aplicada

Retorna:

  • (BSON::Binary)

    Um objeto binário BSON do subtipo 6 (texto cifrado) representando o valor criptografado

Aumenta:

  • (ArgumentError)

    se container_factor ou query_type estiver definido e o algoritmo não for "Indexado".



113
114
115
116
117
118
119
120
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 113

def criptografar(valor, opções)
  Criptografar::ExplicitEncryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: valor },
    opções
  ).run_state_machine(timeout_holder)['v']
end

#encrypt_expression(expressão, opções) ➤ BSON::Binary

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

O algoritmo Range é apenas experimental. Não é

Observação:

As opções :key_id e :key_alt_name são mutuamente exclusivas. Apenas um é necessário para executar a criptografia explícita.

Criptografa uma expressão de correspondência ou expressão de agregação para consultar um índice de faixa.

Somente suportado quando queryType for "range" e algoritmo for "Range". @note: o algoritmo Range é apenas experimental. Não é destinado

for public use. It is subject to breaking changes.

# Opções de [Hash] destinadas ao uso público.

Exemplos:

Criptografar expressão de correspondência.

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

Criptografar expressão agregada.

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

Parâmetros:

  • expressão (Hash)

    Expressão a ser criptografada.

  • opções (Hash)

    um conjunto personalizável de opções

Hash de opções (opções):

  • :key_id (BSON::Binary)

    Um objeto BSON::Binary do tipo :uuid representando o UUID da chave de criptografia conforme armazenado na coleção de cofre de chaves.

  • :key_alt_name (string)

    O nome alternativo da chave de criptografia.

  • :algorithm (string)

    O algoritmo utilizado para criptografar a expressão. O único valor permitido é "Intervalo"

  • :contention_factor (Inteiro | nulo)

    Fator de contenção a ser aplicado Se não for fornecido, o padrão será um valor de 0.

  • query_type (string | nil)

    Tipo de query a ser aplicada. O único valor permitido é "faixa".

  • :range_opts (Hash | nulo)

    Especifica opções de índice para um campo de Queryable Encryption que oferece suporte a queries de "faixa". As opções permitidas são:

    • :min

    • :max

    • :trim_factor

    • :sparsity

    • :precision

    min, max, trim_factor, sparsity e precisão devem corresponder aos valores definidos nos encryptionFields da collection de destino. Para128 duplo e decimal, min/max/precision devem todos ser definidos ou todos desconfigurados.

Retorna:

  • (BSON::Binary)

    Um objeto Binary BSON do subtipo 6 (texto cifrado) representando a expressão criptografada.

Aumenta:

  • (ArgumentError)

    se valores não permitidos nas opções estiverem definidos.



173
174
175
176
177
178
179
180
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 173

def encryption_expression(expressão, opções)
  Criptografar::ExplicitEncryptionExpressionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: expressão },
    opções
  ).run_state_machine(timeout_holder)['v']
end

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Encontra uma única chave com o ID fornecido.

Parâmetros:

  • id (BSON::Binary)

    ID da chave a ser obtida.

Retorna:

  • (BSON::Document | nil)

    O documento chave encontrado ou nulo se não for encontrado.



223
224
225
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 223

def get_key(id)
  @encryption_io.get_key(id, timeout_ms: @timeout_ms)
end

#get_key_by_alt_name(key_alt_name) ➤ BSON::Document | nada

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna uma chave na key vault collection com o key_alt_name fornecido.

Parâmetros:

  • key_alt_name (string)

    Nome alternativo da chave para encontrar uma chave.

Retorna:

  • (BSON::Document | nil)

    O documento chave encontrado ou nulo se não for encontrado.



233
234
235
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 233

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

#get_keysCollection::View

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna todas as chaves na key vault collection.

rubocop:disable Naming/AccessorMethodName O nome deste método é definido na especificação FLE

Retorna:



242
243
244
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 242

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

#remove_key_alt_name(ID, key_alt_name) ➤ BSON::Document | nada

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Remove um key_alt_name de uma chave na key vault collection com o ID fornecido.

Parâmetros:

  • id (BSON::Binary)

    ID da chave para remover o nome alternativo da chave.

  • key_alt_name (string)

    Nome alternativo da chave a ser removido.

Retorna:

  • (BSON::Document | nil)

    Documento que descreve a chave identificada antes de remover o nome alternativo da chave ou nulo se não houver essa chave.



254
255
256
# Arquivo 'lib/mongo/crypt/explicit_encrypter.rb', linha 254

def remove_key_alt_name(id, key_alt_name)
  @encryption_io.remove_key_alt_name(id, key_alt_name, timeout_ms: @timeout_ms)
end

#rewrap_many_data_key(filter, opts = {}) ➤ Crypt::RewrapManyDataKeyResult

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Descriptografa várias chaves de dados e (re)criptografa com uma nova master_key,

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

Parâmetros:

  • filtro, filtro (Hash)

    Filtro usado para encontrar chaves a serem atualizadas.

  • opções (Hash)

Retorna:



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

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

  master_key_document = master_key_for_provider(opciona)

  rewrap_result = Criptografar::RewrapManyDataKeyContext.Novo(
    @crypt_handle,
    @encryption_io,
    filtro, filtro,
    master_key_document
  ).run_state_machine(timeout_holder)

  Método RewrapManyDataKeyResult.Novo(nada) se rewrap_result.nada?

  Atualizações = Updates_from_data_key_documents(rewrap_result.buscar('v'))
  RewrapManyDataKeyResult.Novo(
    @encryption_io.update_data_keys(Atualizações, timeout_ms: @timeout_ms)
  )
end