node:crypto
O módulo node:crypto no Azion Runtime: hashes, assinaturas HMAC, valores aleatórios seguros e acesso à Web Crypto API, com exemplos e as APIs com suporte.
O módulo node:crypto fornece as funções criptográficas do Node.js: hashing, assinaturas HMAC, criptografia, descriptografia e valores aleatórios seguros. No Node.js, o módulo encapsula as funções de hash, HMAC, cifra, decifra, assinatura e verificação do OpenSSL. No Azion Runtime, o módulo está disponível por meio da compatibilidade com Node.js, e você pode usá-lo dentro de uma function para assinar requisições, verificar a integridade de mensagens ou gerar identificadores únicos. Sua exportação subtle, na importação nomeada e na exportação padrão, é o mesmo objeto que globalThis.crypto.subtle, e o módulo também exporta webcrypto.
Exemplos
Cada exemplo é uma function completa que importa de node:crypto. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna. Valores aleatórios, como UUIDs e tokens, mudam a cada requisição.
HMAC e geração de UUID
Esta function assina uma string com uma chave HMAC, imprime a assinatura e responde com um UUID aleatório:
A function responde com o UUID:
Geração de hash com SHA-256
Esta function gera o hash de uma string fixa para verificar a integridade dos dados e gera o hash da URL da requisição para criar uma chave de cache determinística:
A function responde com os dois hashes. O valor digest é o mesmo a cada requisição; o valor cacheKey depende da URL da requisição, então o seu é diferente:
Geração de bytes aleatórios
Esta function gera valores aleatórios seguros para um token, um ID de sessão e um nonce, e define o nonce em um header Content-Security-Policy:
A function responde com os três valores e define Content-Security-Policy como script-src 'nonce-<nonce>', em que <nonce> é o valor de nonce da mesma resposta. Os valores mudam a cada requisição:
Integração com a Web Crypto API
O módulo crypto também dá acesso à Web Crypto API por meio de crypto.subtle, que é o mesmo objeto que globalThis.crypto.subtle. Esta function gera uma chave AES, exporta essa chave e criptografa uma string com ela:
A function responde com uma confirmação, depois de registrar no log um tamanho de chave de 32 bytes e um tamanho criptografado de 41 bytes:
APIs com suporte
A tabela lista o status de cada API de node:crypto no Azion Runtime:
| API | Status |
|---|---|
constants | 🟢 Com suporte |
createHash() | 🟢 Com suporte |
createHmac() | 🟢 Com suporte |
getRandomValues() | 🟢 Com suporte |
randomBytes() | 🟢 Com suporte |
randomUUID() | 🟢 Com suporte |
subtle | 🟢 Com suporte |
webcrypto | 🟢 Com suporte |
createCipher() | 🟡 Parcialmente suportado |
createDecipher() | 🟡 Parcialmente suportado |
createSign() | 🟡 Parcialmente suportado |
createVerify() | 🟡 Parcialmente suportado |
As APIs marcadas como 🟡 Parcialmente suportado têm funcionalidade limitada em comparação com a implementação completa do Node.js. Para criptografia e assinatura, a Web Crypto API (crypto.subtle) é uma alternativa mais completa. O módulo também exporta funções que a tabela não lista: createCipheriv() e createDecipheriv() criptografam e descriptografam com aes-256-cbc, pbkdf2Sync() deriva uma chave a partir de uma senha e getHashes() está disponível. timingSafeEqual() e generateKeyPairSync(), também exportadas, funcionam em uma function após o deploy.