Classe: Mongo::Crypt::ExplicitEncrypter Private

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Definido em:
build/ruby-driver-v2.19/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) ➤ 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.



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 38

def inicializar(key_vault_client, key_vault_namespace, kms_providers, kms_tls_options)
  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
  )
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.



197
198
199
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 197

def add_key_alt_name(id, key_alt_name)
  @encryption_io.add_key_alt_name(id, key_alt_name)
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.



67
68
69
70
71
72
73
74
75
76
77
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 67

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

  @encryption_io.insert_data_key(data_key_document).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



182
183
184
185
186
187
188
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 182

def Descriptografar(valor)
  Criptografar::ExplicitDecryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: valor }
  ).run_state_machine['v']
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".



108
109
110
111
112
113
114
115
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 108

def criptografar(valor, opções)
  Criptografar::ExplicitEncryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: valor },
    opções
  ).run_state_machine['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 RangePreview é 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 "rangePreview" e algoritmo for "RangePreview". @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 é "RangePreview"

  • :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 é "rangePreview".

  • :range_opts (Hash | nulo)

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

    • :min

    • :max

    • :sparsity

    • :precision

    min, max, sparsity e range devem corresponder aos valores definidos em 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.



167
168
169
170
171
172
173
174
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 167

def encryption_expression(expressão, opções)
  Criptografar::ExplicitEncryptionExpressionContext.Novo(
    @crypt_handle,
    @encryption_io,
    { v: expressão },
    opções
  ).run_state_machine['v']
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:



250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/explicit_encrypter.rb', linha 250

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

  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))
end