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

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

Overview

Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse 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 forma parte de una API privada. Debe evitarlo 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 descifra. El valor predeterminado es falso, lo que significa que el método creará un cifrado predeterminado.

  • moda (Símbolo) (predeterminado a::CBC)

    Modo de operación AES

Devuelve:

  • (string)

    Salida

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



43
44
45
46
47
48
49
50
51
52
# Archivo 'lib/mongo/crypt/hooks.rb', línea 43

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

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

  cifrado = cifrado.update(entrada)
end

.hash_sha256(entrada) ⇒ Cadena

Este método forma parte de una API privada. Debe evitarlo 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 que se van a convertir en hash

Devuelve:

  • (Cadena)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



88
89
90
# Archivo 'lib/mongo/crypt/hooks.rb', línea 88

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

.hmac_sha(digest_name, key, input) ⇒ String

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

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

Parámetros:

  • nombre_del_complemento (string)

    El nombre del digest, puede ser "SHA256" o "SHA512"

  • llave (string)

    La 32-byte AES llave de cifrado

  • entrada (string)

    Los datos que se van a etiquetar

Devuelve:

  • (Cadena)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



76
77
78
# Archivo 'lib/mongo/crypt/hooks.rb', línea 76

def hmac_sha(nombre_del_complemento, llave, entrada)
  OpenSSL::HMAC.digerir(nombre_del_complemento, llave, entrada)
end

.random(num_bytes) ⇒ String

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

  • (Cadena)

Aumenta:

  • (Exception)

    Las excepciones planteadas durante el cifrado se propagan al llamador.



62
63
64
# Archivo 'lib/mongo/crypt/hooks.rb', línea 62

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

.rsaes_pkcs_signature(clave, input) ⇒ String

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



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

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 PRIVATE KEY-----",
      Base64.strict_encode64(Base64.descodificar64(llave)).escáner(/.{1,64}/),
      "-----END PRIVATE KEY-----",
    ].unirse("\n")
    OpenSSL::PKey::RSA.Nuevo(key_pem)
  else
    OpenSSL::PKey.Lea(Base64.descodificar64(llave))
  end
  private_key.Firma(OpenSSL::Resumen::SHA256.Nuevo, entrada)
end