O node-forge nasceu como uma implementação de TLS em JavaScript e hoje é usado principalmente pelas partes de PKI: gerar e analisar certificados X.509 e CSRs, ler e gravar pacotes PKCS#12, criptografia e assinaturas RSA e um parser ASN.1. Ele funciona da mesma forma em navegadores e no Node.js e não tem código nativo.
Ele não oferece suporte a curvas elípticas além do Ed25519. forge.pki expõe apenas rsa e ed25519, e o teste confirmou a consequência: certificateFromPem() em um certificado ECDSA lança Cannot read public key. OID is not RSA., e publicKeyFromPem() em uma chave pública EC lança Cannot read public key. Unknown OID. — embora os mesmos bytes sejam analisados sem problemas pelo próprio leitor ASN.1 do forge. Código que inspeciona certificados do mundo real se depara com chaves ECDSA o tempo todo e precisa de outro parser para elas; o X509Certificate do node:crypto ou o decodificador de certificados lidam com os dois tipos de chave.
Com RSA, ele interopera sem problemas quando os parâmetros coincidem. Assinaturas PKCS#1 v1.5 e PSS feitas pelo forge foram verificadas com o node:crypto; o PSS exige que o digest, o digest do MGF1 e o tamanho do salt coincidam nos dois lados, e o forge obriga você a indicar os três, como faz o exemplo. As chaves públicas são carregadas de PEM SPKI, PKCS#1 e de certificado, e as chaves privadas, de PKCS#8, PKCS#8 criptografado, PKCS#1 e PKCS#12 — abra os pacotes PKCS#12 no inspetor de PFX para ver o que contêm.
As assinaturas Ed25519 do forge foram idênticas, byte a byte, às do node:crypto para a mesma semente. A chave privada dele é a forma expandida de 64 bytes — a semente seguida da chave pública —, então bibliotecas que esperam a semente de 32 bytes precisam apenas da primeira metade.
A verificação de assinaturas tem um histórico de parser permissivo demais, e um caso continua em aberto. O alerta de segurança GHSA-86w9-cpqp-85rv (CVE-2026-85393), publicado em setembro de 2026 sem versão corrigida, relata que a verificação RSA PKCS#1 v1.5 nas versões até a 1.4.0 ignora elementos extras dentro do identificador de algoritmo do DigestInfo, o que permite falsificar assinaturas sob chaves com expoente público pequeno, como 3. O teste reproduziu essa permissividade: um bloco com padding correto e um elemento extra nesse ponto foi verificado no forge e rejeitado pelo node:crypto. Até que saia uma correção, verifique assinaturas PKCS#1 v1.5 com o node:crypto ou o WebCrypto e evite chaves RSA com expoente 3. A própria 1.4.0 corrigiu a rodada anterior — um campo extra depois do digest e assinaturas Ed25519 não canônicas passaram a ser rejeitados —, e as versões anteriores à 1.3.0 já tinham outros bugs de falsificação de assinaturas (CVE-2022-24771, CVE-2022-24772).