Módulo: Mongo::Crypt::Hooks Privado

Definido en:
lib/mongo/crypt/hooks.rb

Overview

Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.

Un módulo asistente que implementa métodos de criptografía requeridos para los ganchos criptográficos nativos de Ruby. Estos métodos se pasan a FFI como funciones de retorno de C y se llaman desde la librería libmongocrypt.

Resumen del método de clase colapsar

Detalles del método de clase

.aes(key, iv, input, decrypt: false, moda: :CBC) ⇒ String

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.

Un método de encriptación o desencriptación AES.

Parámetros:

  • llave (string)

    La 32-byte AES llave de cifrado

  • iv (string)

    El IV AES de 16bytes

  • entrada (string)

    Los datos a encriptar/desencriptar

  • descifrar (true | false) (por defecto: false)

    Si este método está descifrando. El valor **por defecto** es falso, lo que significa que el método creará un **cifrado** de forma **por defecto**.

  • moda (Símbolo) (por defecto: :CBC)

    Modo de operación AES

Devuelve:

  • (string)

    Salida

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



40
41
42
43
44
45
46
47
48
49
# Archivo 'lib/mongo/crypt/hooks.rb', línea 40

def aes(llave, iv, entrada, descifrar: false, moda: Loja: CBC)
  cifrado = OpenSSL::Cifrado::AES.Nuevo(256, moda)

  descifrar ? cifrado.descifrar : cifrado.cifrado
  cifrado.llave = llave
  cifrado.iv = iv
  cifrado.Relleno = 0

  cifrado.update(entrada)
end

.hash_sha256(input) ⇒ String

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.

Una función hash criptográfica (SHA-256)

Parámetros:

  • entrada (string)

    Los datos a ser encriptados

Devuelve:

  • (string)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



85
86
87
# Archivo 'lib/mongo/crypt/hooks.rb', línea 85

def hash_sha256(entrada)
  Resumen::SHA2.Nuevo(256).digest(entrada)
end

.hmac_sha(digest_name, key, input) ⇒ String

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.

Una función HMAC SHA-512 o SHA-256

Parámetros:

  • digest_name (string)

    El nombre del resumen, ya sea "SHA256" o "SHA512"

  • llave (string)

    La 32-byte AES llave de cifrado

  • entrada (string)

    Los datos que se van a etiquetar

Devuelve:

  • (string)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



73
74
75
# Archivo 'lib/mongo/crypt/hooks.rb', línea 73

def hmac_sha(digest_name, llave, entrada)
  OpenSSL::HMAC.digest(digest_name, llave, entrada)
end

.random(num_bytes) ⇒ String

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.

Función criptográficamente segura de generación aleatoria

Parámetros:

  • num_bytes (Número entero)

    El número de bytes aleatorios solicitados

Devuelve:

  • (string)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



59
60
61
# Archivo 'lib/mongo/crypt/hooks.rb', línea 59

def aleatorio(num_bytes)
  SecureRandom.random_bytes(num_bytes)
end

.rsaes_pkcs_signature(clave, input) ⇒ String

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.

Una función de firma RSASSA-PKCS1-v1_5 con SHA-256.

Parámetros:

  • llave (string)

    La clave privada PKCS#8 en formato DER, codificada en base64.

  • entrada (string)

    Los datos a firmar.

Devuelve:

  • (string)

    La firma.



96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Archivo 'lib/mongo/crypt/hooks.rb', línea 96

def firma_rsaes_pkcs(llave, entrada)
  private_key = si BSON::Entorno.jruby?
                  # JRuby no puede leer el formato DER, primero necesitamos convertir la clave a PEM.
                  key_pem = [
                    '-----BEGIN llave privada-----',
                    Base64.strict_encode64(Base64.descodificar64(llave)).escáner(/.{1,64}/),
                    '-----FIN DE LA CLAVE PRIVADA-----',
                  ].unirse("\n")
                  OpenSSL::PKey::RSA.Nuevo(key_pem)
                else
                  OpenSSL::PKey.Lea(Base64.descodificar64(llave))
                end
  private_key.Firma(OpenSSL::Resumen.Nuevo('SHA256'), entrada)
end