jsonwebtoken codifica y decodifica JWT con encode, decode y un objeto Validation, y usa serde para los claims. Desde la versión 10, la criptografía viene de un backend que se elige con una característica (feature) de Cargo —aws_lc_rs o rust_crypto—, y la comprobación usó aws_lc_rs. Olvidar la característica no hace fallar la compilación: solo con las características predeterminadas, la 11.1.0 compiló y después entró en pánico en el primer encode() con Could not automatically determine the process-level CryptoProvider. Activa exactamente un backend, como hace el manifiesto del ejemplo.
El conjunto de algoritmos es un enum cerrado: con HS, RS y PS de 256/384/512, ES256, ES384 y EdDSA se firmó y se verificó, mientras que ES512, ES256K y Ed25519 ni siquiera son variantes. Tampoco existe la variante none, así que un token sin firmar falla al analizar su encabezado con unknown variant none. Validation::new(alg) es la lista de algoritmos permitidos: un token HS256 comprobado con Validation::new(ES256) falló con InvalidAlgorithm e, incluso con ambos algoritmos permitidos, un token HS256 con el texto PEM de la clave pública EC como clave falló con InvalidKeyFormat, porque una DecodingKey EC no puede actuar como secreto HMAC.
Las comprobaciones de los claims son más estrictas que en la mayoría de las bibliotecas: un token sin exp falla con Missing required claim: exp, y la tolerancia predeterminada es de 60 segundos, de modo que un token que había caducado 57 segundos antes aún se validó. Reduce leeway y fija el emisor y la audiencia en el Validation, como hace el ejemplo. ES256 rechaza una clave P-384 al firmar con InvalidEcdsaKey.
Las firmas ES256 son el r‖s en bruto de 64 bytes que exige JWS, y una firma DER falla con InvalidSignature. Las claves se cargan desde PEM (from_ec_pem, from_rsa_pem, from_ed_pem) y DER; para Ed25519 en DER, la clave de codificación aceptó PKCS#8 y la de decodificación, la clave pública en bruto de 32 bytes. Inspecciona los tokens con el decodificador de JWT y prueba los secretos HMAC con el comprobador de secretos JWT.
Para firmas fuera de JWT, usa directamente los crates de backend: aws-lc-rs o RustCrypto ecdsa.