Skip to content

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 15:45
2b0c4c0

Breaking changes

  • Invalid signatures now exit nonzero. When a key is provided via --key/-k or JWTD_KEY, an invalid JWS signature still prints Signature: INVALID with the reason, but jwtd now exits with status 1. Scripts that gate on jwtd's exit status must expect failure for tokens that do not verify.
  • Malformed structured keys are rejected. Key input that looks like PEM, DER, an X.509 certificate, or a JWK/JWK Set but fails to parse is now an error. Previously such data silently fell back to being used as a raw symmetric key, which could turn a public certificate or a typo'd key file into an attacker-known HMAC secret. Opaque text and binary key files continue to work as symmetric keys.
  • Error output format changed. Runtime errors print a single Error: ... line to stderr; Cobra's usage text is no longer appended.

New

  • X.509 certificates as verification keys. PEM and DER certificates are accepted anywhere a key is; the public key is extracted for signature verification. SEC 1 EC keys are also supported.
  • Complete JWE protected header display. Every field of the compact protected header is shown, not just alg/kid/jwk.
  • Exact number display. JSON numbers in headers, claims, and decrypted payloads are printed with full precision (no float64 rounding of large values), and iat/exp/nbf formatting handles fractional timestamps.
  • Terminal-safe output. Control characters, DEL, C1 controls, invalid UTF-8, and bidirectional override characters in token content are escaped instead of being written raw to the terminal.
  • Malformed or trailing JSON data in any displayed segment is rejected instead of partially rendered.

Release integrity

Releases are now built by a hardened pipeline: SHA-pinned actions, dispatch restricted to main, semver validation, the release tag cryptographically bound to the built commit, reproducible archives, and byte-for-byte verification of published assets against the build artifacts before the release is published.

Full changelog: v2.1.1...v3.0.0