O jsonwebtoken codifica e decodifica JWTs com encode, decode e um objeto Validation, usando o serde para as claims. Desde a versão 10, a criptografia vem de um backend escolhido por feature flag — aws_lc_rs ou rust_crypto —, e o teste usou aws_lc_rs. Esquecer a feature não quebra o build: só com as features padrão, a versão 11.1.0 compilou e depois entrou em pânico no primeiro encode() com Could not automatically determine the process-level CryptoProvider. Ative exatamente um backend, como faz o manifesto do exemplo.
O conjunto de algoritmos é um enum fechado: HS, RS e PS em 256/384/512, ES256, ES384 e EdDSA funcionaram tanto na assinatura quanto na verificação, enquanto ES512, ES256K e Ed25519 nem sequer são variantes. Também não há variante none; por isso, um token sem assinatura já falha na análise do cabeçalho, com unknown variant none. Validation::new(alg) é a lista de algoritmos permitidos: um token HS256 verificado com Validation::new(ES256) falhou com InvalidAlgorithm e, mesmo com os dois algoritmos permitidos, um token HS256 que usava como chave o texto PEM da chave pública EC falhou com InvalidKeyFormat, porque uma DecodingKey EC não pode servir de segredo HMAC.
A validação das claims é mais rígida do que na maioria das bibliotecas: um token sem exp falha com Missing required claim: exp, e a tolerância padrão é de 60 segundos — um token que tinha expirado 57 segundos antes ainda foi considerado válido. Reduza leeway e defina o emissor e o público-alvo na Validation, como faz o exemplo. O ES256 recusa uma chave P-384 no momento da assinatura com InvalidEcdsaKey.
As assinaturas ES256 são o r‖s bruto de 64 bytes que o JWS exige, e uma assinatura DER falha com InvalidSignature. As chaves são carregadas de PEM (from_ec_pem, from_rsa_pem, from_ed_pem) e de DER; no caso do Ed25519 em DER, a chave de codificação recebeu PKCS#8 e a chave de decodificação, a chave pública bruta de 32 bytes. Inspecione tokens com o depurador de JWT e teste segredos HMAC com o verificador de segredos JWT.
Para assinaturas fora do JWT, use diretamente os crates de backend: aws-lc-rs ou RustCrypto ecdsa.