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 auxiliar que implementa los métodos de criptografía necesarios para los ganchos de criptografía nativos de Ruby. Estos métodos se pasan a FFI como devoluciones de llamada en C y se invocan desde la biblioteca libmongocrypt.

Colapso delresumen del método de clase

Detalles del método de clase

.aes(clave, iv, entrada, descifrar: falso, modo::CBC) ⇒ 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.

Un método de cifrado o descifrado AES.

Parámetros:

  • clave (Cadena) -

    La clave de cifrado AES de 32bytes

  • iv (Cadena) -

    El AES IV de 16bytes

  • entrada (Cadena) -

    Los datos que se van a cifrar/descifrar

  • desencriptar (true | false) (predeterminado: falso)

    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 funcionamiento AES

Devuelve:

  • (Cadena) -

    Salida

Aumentos:

  • (Excepción) -

    Las excepciones generadas 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(clave, iv, entrada, descifrar: false, modo: :CBC)
  cifrado = OpenSSL::Cifrar::AES.Nuevo(256, moda)

  desencriptar ? cifrado.desencriptar : cifrado.cifrar
  cifrado.clave = clave
  cifrado.iv = iv
  cifrado.relleno = 0

  cifrada = 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 (Cadena) -

    Los datos que se van a convertir en hash

Devuelve:

  • (Cadena)

Aumentos:

  • (Excepción) -

    Las excepciones generadas 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(nombre_de_resumen, clave, 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 HMAC SHA-512 o SHA-256

Parámetros:

  • nombre_del_complemento (Cadena) -

    El nombre del resumen, ya sea “SHA256” o “SHA512”

  • clave (Cadena) -

    La clave de cifrado AES de 32bytes

  • entrada (Cadena) -

    Los datos que se van a etiquetar

Devuelve:

  • (Cadena)

Aumentos:

  • (Excepción) -

    Las excepciones generadas 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, clave, entrada)
  OpenSSL::HMAC.digerir(nombre_del_complemento, clave, entrada)
end

.aleatorio(num_bytes) ⇒ 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.

Función aleatoria segura de criptomonedas

Parámetros:

  • num_bytes (Entero)

    El número de bytes aleatorios solicitados

Devuelve:

  • (Cadena)

Aumentos:

  • (Excepción) -

    Las excepciones generadas durante el cifrado se propagan al llamador.



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

def aleatorio(num_bytes)
  SecureRandom.bytes aleatorios(num_bytes)
end

.rsaes_pkcs_signature(clave, 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 RSASSA-PKCS1-v1_5 con firma SHA-256.

Parámetros:

  • clave (Cadena) -

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

  • entrada (Cadena) -

    Los datos a firmar.

Devuelve:

  • (Cadena) -

    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(clave, 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.codificación estricta64(Base64.decodificar64(clave)).exploración(/.{1,64}/),
      "-----END PRIVATE KEY-----",
    ].Join("\n")
    OpenSSL::PKey::RSA.Nuevo(key_pem)
  else
    OpenSSL::PKey.Lea(Base64.decodificar64(clave))
  end
  private_key.Firma(OpenSSL::Resumen::SHA256.Nuevo, entrada)
end