crypto

Geração de tokens, checksums e identificadores estilo UUID em Bern puro.

import crypto
Nota: Esses auxiliares são úteis para IDs e checksums, mas não substituem criptografia moderna auditada (AES, SHA-2, ed25519, …). Não os use para proteger segredos.

Utilitários aleatórios

crypto_random_token(comprimento) → string

Um token alfanumérico aleatório do comprimento dado.

crypto_random_token(12)
-- Saída: "a8Kx2Mq0Zb1p"   (exemplo)
crypto_random_hex(num_bytes) → string

Texto hexadecimal aleatório, dois caracteres por byte pedido.

crypto_random_hex(8)
-- Saída: (16 chars hex, ex.: "3f0a9c12bb47de08")

Hashing & comparação

crypto_checksum32(texto) → int

Um checksum de 32 bits estilo Adler do texto.

crypto_checksum32("bern")
-- Saída: (um inteiro de 32 bits)
crypto_hash32_hex(texto) → string

O checksum renderizado como uma string hex de 8 caracteres - útil como impressão digital curta do conteúdo.

crypto_hash32_hex("bern")
-- Saída: (8 chars hex)
crypto_hash32_hex("bern") == crypto_hash32_hex("bern")
-- Saída: true   (mesma entrada → mesmo hash)
crypto_secure_compare(a, b) → booleano

Compara duas strings com varredura de comprimento fixo para reduzir vazamento de tempo.

crypto_secure_compare("token123", "token123")
-- Saída: true
crypto_secure_compare("token123", "token124")
-- Saída: false

IDs estilo UUID

crypto_uuid_v4_like() → string

Um identificador aleatório no formato de um UUID v4.

crypto_uuid_v4_like()
-- Saída: "3f1a9c20-8b4e-4d77-9a2c-1e5f0b7c3d92"   (exemplo)

Juntando tudo

Um padrão comum é emitir um ID junto com uma impressão digital e depois verificá-lo com uma comparação de tempo constante:

Emitindo e verificando um token assinado

import crypto

-- emitir
id    = crypto_uuid_v4_like()
token = crypto_random_token(16)
sig   = crypto_hash32_hex(id + token)

-- ...depois, verificar um par (id, token) apresentado
def verify(id, token, sig) -> crypto_secure_compare(crypto_hash32_hex(id + token), sig)

verify(id, token, sig)
-- Saída: true

verify(id, "token-errado", sig)
-- Saída: false