Saltar a contenido

security

app.utils.security

Módulo de Python con funciones para el manejo de sistemas de criptografía, generación de uuid4, sha512, base64 y claves de cifrado basados en aes-256 y otros.

Para más información, te recomendamos leer la documentación del Proyecto.

Warning

este módulo:

  • se encuentra en revisión, puede cambiar en el futuro.
  • se necesitan más pruebas y ejemplos.

get_private_key()

Genera un objeto bytes a partir de una cadena de dígitos hexadecimales, en este caso la variable de entorno PRIVATE_KEY_HASH.

Notes

Si desea generar una nueva clave se recomienda utilizar la función generate_salt con el costo por defecto de 32 bytes

Returns:

Type Description
Optional[bytes]

un objeto bytes para uso criptográfico, ó None en caso de error

generate_uuid(remove_dash=False, use_crypto=False)

Genera un UUID basado en uuid.uuid4() ó secrets.token_hex(16) según las opciones enviadas.

Parameters:

Name Type Description Default
remove_dash bool

si se envía en verdadero(True), elimina los guiones del UUID generado, por defecto False

False
use_crypto bool

si se envía en verdadero (True), utiliza secrets.token_hex(16) como generador de UUID, por defecto False

False
Warning

Se desaconseja el uso de secrets.token_hex(16).

  • el parámetro use_crypto será eliminado en futuras versiones.

Returns:

Type Description
Optional[str]

un UUID de 32 caracteres ó None en caso de error

base64_encode(text)

Genera un base64 del texto enviado, por defecto se usa el encoding utf8.

Parameters:

Name Type Description Default
text Any

el texto a cifrar

required

Returns:

Type Description
Any

el texto cifrado en base64, óNone en caso de error

base64_decode(text)

Decodifica un base64.

Parameters:

Name Type Description Default
text Any

el texto a descifrar

required

Returns:

Type Description
Any

el texto original (objeto plano), ó None en caso de error

generate_salt(cost=DEFAULT_COST)

Genera una cadena de bytes aleatorios de tamaño adecuado para uso criptográfico. Por defecto se establece el valor de costo a DEFAULT_COST, es decir, 32 bytes.

Parameters:

Name Type Description Default
cost (int, optional, DEFAULT_COST)

el valor del costo en bytes, por defecto 32 bytes

DEFAULT_COST

Returns:

Type Description
Optional[str]

una cadena que representa los bytes aleatorios, ó None en caso de error

generate_digest(key_digest)

Genera un string sha512 basado en hashlib.sha512.

Parameters:

Name Type Description Default
key_digest Any

un objeto de cualquier tipo (usualmente texto) para generar el sha512

required

Returns:

Type Description
Optional[str]

el string (hexdigest) del sha512, ó None en caso de error

encrypt_message(message, tag=None)

Encripta un mensaje (usualmente un string) utilizando AESGCM(aes-256-gcm) se basa en una llave privada proporcionada por la función get_private_key, un nonce de al menos 32 bits de longitud y opcionalmente un tag.

Notes

tenga en cuenta que sí se utiliza un tag para cifrar datos, ese mismo tag debe ser enviado para descrifrar los datos posteriormente, ya que no se almacena en la data cifrada.

Parameters:

Name Type Description Default
message str

el texto a cifrar

required
tag str

un tag adicional mejorar el cifrado, por defecto None.

None

Returns:

Type Description
Any

un objeto en base64 con la información del cifrado, ó None en caso de error

decrypt_message(message, tag=None)

Desencripta un mensaje (usualmente un base64) con los datos necesarios para tal fin, tenga en cuenta que sí se utilizó un tag para cifrar datos, ese mismo tag debe ser enviado a esta función descrifrar los datos.

Parameters:

Name Type Description Default
message str

el mensaje a descifrar, usualmente un base64

required
tag str

un tag adicional mejorar el cifrado, por defecto None.

None

Returns:

Type Description
Any

el mesage decodificado, ó None en caso de error

hash_from_dict(data)

genera un hash de un diccionario, usando sha512

Parameters:

Name Type Description Default
data dict

el diccionario

required

Returns:

Type Description
str

el hash generado, ó None en caso de error

Examples:

hash_from_dict({"a":1, "b":2})