Criptografia & Assinatura

Operações criptograficas incluindo criptografia, HMAC, JWT e derivação de chaves. Adaptado para workflows.

Carregamento

local crypto = require("crypto")

Geração Aleatoria

Bytes Aleatorios

local bytes, err = crypto.random.bytes(32)
Parâmetro Tipo Descrição
length integer Numero de bytes (1 a 1.048.576)

Retorna: string, error

String Aleatoria

local str, err = crypto.random.string(32)
local str, err = crypto.random.string(32, "0123456789abcdef")
Parâmetro Tipo Descrição
length integer Tamanho da string (1 a 1.048.576)
charset string? Caracteres para usar (padrão: alfanumerico)

Retorna: string, error

UUID Aleatorio

local id, err = crypto.random.uuid()

Retorna: string, error

HMAC

HMAC-SHA256

local hex, err = crypto.hmac.sha256(key, data)
Parâmetro Tipo Descrição
key string Chave HMAC
data string Dados para autenticar

Retorna: string, error

HMAC-SHA512

local hex, err = crypto.hmac.sha512(key, data)
Parâmetro Tipo Descrição
key string Chave HMAC
data string Dados para autenticar

Retorna: string, error

Criptografia

AES-GCM {id="encrypt-aes-gcm"}

local encrypted, err = crypto.encrypt.aes(data, key)
local encrypted, err = crypto.encrypt.aes(data, key, aad)
Parâmetro Tipo Descrição
data string Texto plano para criptografar
key string 16, 24 ou 32 bytes (AES-128/192/256)
aad string? Dados adicionais autenticados

Retorna: string, error (nonce prepended)

ChaCha20-Poly1305 {id="encrypt-chacha20"}

local encrypted, err = crypto.encrypt.chacha20(data, key)
local encrypted, err = crypto.encrypt.chacha20(data, key, aad)
Parâmetro Tipo Descrição
data string Texto plano para criptografar
key string Deve ter 32 bytes
aad string? Dados adicionais autenticados

Retorna: string, error

Descriptografia

AES-GCM {id="decrypt-aes-gcm"}

local plaintext, err = crypto.decrypt.aes(encrypted, key)
local plaintext, err = crypto.decrypt.aes(encrypted, key, aad)
Parâmetro Tipo Descrição
data string Dados criptografados de encrypt.aes
key string Mesma chave usada na criptografia
aad string? Deve coincidir com AAD usado na criptografia

Retorna: string, error

ChaCha20-Poly1305 {id="decrypt-chacha20"}

local plaintext, err = crypto.decrypt.chacha20(encrypted, key)
local plaintext, err = crypto.decrypt.chacha20(encrypted, key, aad)
Parâmetro Tipo Descrição
data string Dados criptografados de encrypt.chacha20
key string Mesma chave usada na criptografia
aad string? Deve coincidir com AAD usado na criptografia

Retorna: string, error

JWT

Encode

local token, err = crypto.jwt.encode(payload, secret)
local token, err = crypto.jwt.encode(payload, secret, "HS256")
local token, err = crypto.jwt.encode(payload, private_key_pem, "RS256")
Parâmetro Tipo Descrição
payload table Claims JWT (_header para header customizado)
key string Secret (HMAC) ou chave privada PEM (RSA)
alg string? HS256, HS384, HS512, RS256 (padrão: HS256)

Retorna: string, error

Verify

local claims, err = crypto.jwt.verify(token, secret)
local claims, err = crypto.jwt.verify(token, secret, "HS256", false)
local claims, err = crypto.jwt.verify(token, public_key_pem, "RS256")
Parâmetro Tipo Descrição
token string Token JWT para verificar
key string Secret (HMAC) ou chave publica PEM (RSA)
alg string? Algoritmo esperado (padrão: HS256)
require_exp boolean? Validar expiração (padrão: true)

Retorna: table, error

Derivação de Chaves

PBKDF2

local key, err = crypto.pbkdf2(password, salt, iterations, key_length)
local key, err = crypto.pbkdf2(password, salt, iterations, key_length, "sha512")
Parâmetro Tipo Descrição
password string Senha/passphrase
salt string Valor de salt
iterations integer Contagem de iteracoes (max 10.000.000)
key_length integer Tamanho desejado da chave em bytes
hash string? sha256 ou sha512 (padrão: sha256)

Retorna: string, error

Utilitarios

Comparação em Tempo Constante

local equal = crypto.constant_time_compare(a, b)
Parâmetro Tipo Descrição
a string Primeira string
b string Segunda string

Retorna: boolean

Erros

Condição Tipo Retentável
Tamanho inválido errors.INVALID não
Chave vazia errors.INVALID não
Tamanho de chave inválido errors.INVALID não
Descriptografia falhou errors.INTERNAL não
Token expirado errors.INTERNAL não

Veja Error Handling para trabalhar com erros.