O JWCrypto implementa a família JOSE sobre o pyca/cryptography: JWK e conjuntos de chaves JWK, JWS, JWE e JWT. Tudo se baseia em objetos de chave — um jwk.JWK criado a partir de PEM, de JSON ou de generate() —, o que torna o tipo da chave explícito em cada chamada. A licença é LGPL-3.0-or-later, o que importa se você redistribuir cópias modificadas.
Sua cobertura de algoritmos é a mais ampla entre as bibliotecas JOSE para Python: as famílias HS, RS, PS e ES, ES256K, EdDSA e os totalmente especificados Ed25519 e Ed448 e, na versão 1.6.1, também ML-DSA-44, ML-DSA-65 e ML-DSA-87 com chaves AKP do rascunho de JOSE pós-quântico — todos funcionaram na assinatura e na verificação no teste, e todos estão na lista padrão de algoritmos permitidos. É nessa lista padrão que está a armadilha: a menos que você passe algs, qualquer um deles é aceito para uma chave compatível; por isso, restrinja a lista ao que seu emissor realmente usa, como faz o exemplo.
Tokens sem assinatura são recusados com Algorithm not allowed, a menos que none esteja na lista, e um token HS256 apresentado com uma JWK pública EC falha, porque esse tipo de chave não consegue executar HMAC. O ES256 recusa uma chave P-384 com Curve requested is "P-256", but key curve is "P-384". As assinaturas ES256 estão na forma r‖s bruta de 64 bytes; uma assinatura DER falha com Verification failed for all signatures — confira a codificação no depurador de JWT.
Dois padrões diferem dos de outras bibliotecas. A verificação da expiração tolera 60 segundos de diferença de relógio: um token que tinha expirado 57 segundos antes ainda foi considerado válido, e um que tinha expirado 63 segundos antes, não — mais tolerante que o PyJWT ou o jose, que não admitem nenhuma. Além disso, exp é opcional: um token sem ela foi considerado válido, a menos que check_claims a inclua.
Monte conjuntos de chaves com o construtor de JWKS e inspecione tokens criptografados com o inspetor de JWE; para chaves e assinaturas ML-DSA, o playground de assinaturas pós-quânticas mostra os tamanhos envolvidos.