JWCrypto implementa la familia JOSE sobre pyca/cryptography: JWK y conjuntos de JWK, JWS, JWE y JWT. Todo se basa en objetos de clave —un objeto jwk.JWK creado a partir de PEM, JSON o generate()—, lo que hace explícito el tipo de clave en cada llamada. Su licencia es LGPL-3.0-or-later, algo que importa si redistribuyes copias modificadas.
Su cobertura de algoritmos es la más amplia de las bibliotecas JOSE de Python: las familias HS, RS, PS y ES, ES256K, EdDSA y los nombres totalmente especificados Ed25519 y Ed448, y en la 1.6.1 también ML-DSA-44, ML-DSA-65 y ML-DSA-87 con claves AKP del borrador de JOSE poscuántico; con todos ellos se firmó y se verificó en la comprobación, y todos están en la lista de algoritmos permitidos predeterminada. Esa lista predeterminada es la trampa: salvo que pases algs, cualquiera de ellos se acepta para una clave compatible, así que limítala a lo que tu emisor usa realmente, como hace el ejemplo.
Los tokens sin firmar se rechazan con Algorithm not allowed salvo que none esté en la lista, y un token HS256 presentado con una JWK pública EC falla, porque ese tipo de clave no puede calcular un HMAC. ES256 rechaza una clave P-384 con Curve requested is "P-256", but key curve is "P-384". Las firmas ES256 tienen la forma r‖s en bruto de 64 bytes; una firma DER falla con Verification failed for all signatures: comprueba la codificación en el decodificador de JWT.
Dos valores predeterminados difieren de los de otras bibliotecas. Las comprobaciones de caducidad admiten 60 segundos de desfase de reloj: un token que había caducado 57 segundos antes aún se validó y uno que había caducado 63 segundos antes, no, lo que resulta más permisivo que PyJWT o jose, que no admiten ninguno. Además, exp es opcional: un token sin él se validó salvo que check_claims lo nombre.
Crea conjuntos de claves con el constructor de JWKS e inspecciona los tokens cifrados con el inspector de JWE; para claves y firmas ML-DSA, el laboratorio de firmas poscuánticas muestra los tamaños en juego.