Skip to content

Releases: lestrrat-go/jwx

v4.0.2

07 May 00:58

Choose a tag to compare

For more detailed release notes, see Changes.

What's Changed

  • ci: print coverage summary in GitHub Actions run summary by @lestrrat in #2078
  • ci: also run on push to target branches by @lestrrat in #2079
  • jws: refuse "b64" header in VerifyCompactFast by @lestrrat in #2080
  • jws: VerifyCompactFast refusals match jws.VerifyError() class by @lestrrat in #2082
  • jws: name loose keySet options in fan-out verify error by @lestrrat in #2084
  • jws: honor RFC 7797 b64=false in Message.MarshalJSON by @lestrrat in #2086
  • jws: reject literal-JSON "protected" in general-form JWS by @lestrrat in #2088
  • jwt: ParseRequest: don't skip form body on chunked transfer by @lestrrat in #2090
  • jwt: Settings rejects out-of-range NumericDate precision by @lestrrat in #2092
  • jwt: pedantic mode enforces cty=JWT nested-envelope shape by @lestrrat in #2093
  • jwt: reshape base64-corruption hint as diagnosis-first by @lestrrat in #2095
  • jwt: defensively reject missing claims in MaxDeltaIs / MinDeltaIs by @lestrrat in #2098
  • jwt: ParseInsecure: parse loop-local payload, not original input by @lestrrat in #2096
  • jwt: align Validate fast/slow paths to same iat,exp,nbf check order by @lestrrat in #2100
  • jws: Verify rejects b64=false without "b64" listed in "crit" by @lestrrat in #2101
  • jws: Sign auto-declares "b64" in "crit" when emitting b64=false by @lestrrat in #2103
  • jws: declare "b64" as typed bool header field by @lestrrat in #2105
  • jws: reject general-form JWS with top-level "header" sibling of "signatures" by @lestrrat in #2107
  • jws: typed sentinel for AlgorithmsForKey unclassifiable-key failures by @lestrrat in #2109
  • jws: VerifyMessage observes ctx cancellation between loop iterations by @lestrrat in #2111
  • jws: cleanup follow-ups from recent review (low-severity batch) by @lestrrat in #2113
  • jwe/jwebb: document Register{HPKE,MLKEM,MLKEMDirect}Algorithm as privileged extension points by @lestrrat in #2115
  • jwe: DecryptMessage observes ctx cancellation between loop iterations by @lestrrat in #2116
  • jwe: parse and bound-check PBES2 p2c in int64 space; name the violated bound by @lestrrat in #2118
  • jwe: WithKey validates alg-vs-key shape at option-time by @lestrrat in #2120
  • jwe: compression cap error names "decompressed" payload, the option, and the size by @lestrrat in #2122
  • jwe: bound joined-error count and drop redundant outer Decrypt prefix by @lestrrat in #2124
  • jwe: keySetProvider surfaces per-key errors via errors.Join by @lestrrat in #2126
  • jwe: add WithDisabledKeyAlgorithms global policy hook by @lestrrat in #2128
  • jwe: document WithMaxDecompressBufferSize behavior at non-positive values by @lestrrat in #2130
  • jwk: stop duplicating JWK fields at JWKS top level on parse by @lestrrat in #2132
  • jwk: wrap ParseKey/ParseKeyAs errors with ParseError sentinel by @lestrrat in #2134
  • jwk: stream the keys array with cap-before-allocate by @lestrrat in #2136
  • jwk: probe tolerates duplicate JSON field names by @lestrrat in #2138
  • jwk: treat nil key from custom KeyParser as continue, not success by @lestrrat in #2139
  • jwk: fix phantom ContinueParseError refs and unmarshaler typo in docs by @lestrrat in #2141
  • jwk: add UnknownKeyTypeError typed error by @lestrrat in #2143
  • jwk: document AKP-specific Thumbprint canonicalization on public methods by @lestrrat in #2144
  • docs/jwk: use jwk.WithX509(true) in PEM section prose by @lestrrat in #2145
  • docs/jwk: document EncodePEM emit-to-PEM path by @lestrrat in #2146
  • MIGRATION: document PublicSetOf default-reject for symmetric keys by @lestrrat in #2147
  • jwk: clarify that any value <= 0 disables the RSA strength floor by @lestrrat in #2148
  • jwk: move extension-authoring walkthrough from doc.go to docs/04-jwk.md by @lestrrat in #2149
  • jwk: correct Import godoc for crypto/ecdh dispatch by @lestrrat in #2150
  • jwk: surface Export type mismatch as KeyTypeMismatchError by @lestrrat in #2151
  • jwk: RegisterKeyImporter takes KeyImporter, not a typed function by @lestrrat in #2152
  • Changes: draft v4.0.2 release notes by @lestrrat in #2154

Full Changelog: v4.0.1...v4.0.2

v3.1.1

07 May 01:04

Choose a tag to compare

For more detailed release notes, see Changes.

What's Changed

  • build(deps): bump pozil/auto-assign-issue from 2.2.0 to 2.2.1 by @dependabot[bot] in #2045
  • guard ecdsa coordinates against oversized big.Int by @lestrrat in #2050
  • reject jwe with conflicting alg in protected vs per-recipient by @lestrrat in #2052
  • fix AddressClaim.MarshalJSON for non-printable bytes by @lestrrat in #2056
  • jwt: only call ParseForm when WithFormKey is supplied by @lestrrat in #2058
  • jws: jkuProvider rejects fetched keys marked use=enc by @lestrrat in #2060
  • jwa: unify SignatureAlgorithm/KeyEncryption/ContentEncryption into one registry by @lestrrat in #2066
  • build(deps): bump pozil/auto-assign-issue from f245a9119ba5cc2fed4aa7b8268d576d40acddf0 to 7bf9d82c77d45976224660b873fc83e60576c5aa by @dependabot[bot] in #2065
  • cmd/jwx: warn on private-key-to-tty + reject keysize<=0 for oct by @lestrrat in #2071
  • jws: refuse "b64" header in VerifyCompactFast by @lestrrat in #2081
  • jws: VerifyCompactFast refusals match jws.VerifyError() class by @lestrrat in #2083
  • jws: name loose keySet options in fan-out verify error by @lestrrat in #2085
  • jws: honor RFC 7797 b64=false in Message.MarshalJSON by @lestrrat in #2087
  • jws: reject literal-JSON "protected" in general-form JWS by @lestrrat in #2089
  • jwt: ParseRequest: don't skip form body on chunked transfer by @lestrrat in #2091
  • jwt: pedantic mode enforces cty=JWT nested-envelope shape by @lestrrat in #2094
  • jwt: defensively reject missing claims in MaxDeltaIs / MinDeltaIs by @lestrrat in #2099
  • jwt: ParseInsecure: parse loop-local payload, not original input by @lestrrat in #2097
  • jws: Verify rejects b64=false without "b64" listed in "crit" by @lestrrat in #2102
  • jws: Sign auto-declares "b64" in "crit" when emitting b64=false by @lestrrat in #2104
  • jws: declare "b64" as typed bool header field by @lestrrat in #2106
  • jws: reject general-form JWS with top-level "header" sibling of "signatures" by @lestrrat in #2108
  • jws: typed sentinel for AlgorithmsForKey unclassifiable-key failures by @lestrrat in #2110
  • jws: VerifyMessage observes ctx cancellation between loop iterations by @lestrrat in #2112
  • jws: cleanup follow-ups from recent review (low-severity batch) by @lestrrat in #2114
  • jwe: DecryptMessage observes ctx cancellation between loop iterations by @lestrrat in #2117
  • jwe: parse and bound-check PBES2 p2c in int64 space; name the violated bound by @lestrrat in #2119
  • jwe: WithKey validates alg-vs-key shape at option-time by @lestrrat in #2121
  • jwe: compression cap error names "decompressed" payload, the option, and the size by @lestrrat in #2123
  • jwe: bound joined-error count and drop redundant outer Decrypt prefix by @lestrrat in #2125
  • jwe: keySetProvider surfaces per-key errors via errors.Join by @lestrrat in #2127
  • jwe: add WithDisabledKeyAlgorithms global policy hook by @lestrrat in #2129
  • jwe: document WithMaxDecompressBufferSize behavior at non-positive values by @lestrrat in #2131
  • jwk: stop duplicating JWK fields at JWKS top level on parse by @lestrrat in #2133
  • jwk: wrap ParseKey errors with ParseError sentinel by @lestrrat in #2135
  • jwk: stream the keys array with cap-before-allocate by @lestrrat in #2137
  • jwk: treat nil key from custom KeyParser as continue, not success by @lestrrat in #2140
  • jwk: fix phantom ContinueParseError refs and unmarshaler typo in docs by @lestrrat in #2142
  • Changes: draft v3.1.1 release notes by @lestrrat in #2155

Full Changelog: v3.1.0...v3.1.1

v4.0.1

28 Apr 13:02

Choose a tag to compare

What's Changed

  • docs: add jwxfilter to extension modules doc by @lestrrat in #2041
  • autodoc updates by @github-actions[bot] in #2042
  • docs: fix broken v3-to-v4.yaml link in Changes-v4.md by @lestrrat in #2048
  • guard ecdsa coordinates against oversized big.Int by @lestrrat in #2049
  • reject jwe with conflicting alg in protected vs per-recipient by @lestrrat in #2051
  • autodoc updates by @github-actions[bot] in #2053
  • docs: document PrivateClaims concurrency contract by @lestrrat in #2055
  • fix AddressClaim.MarshalJSON for non-printable bytes by @lestrrat in #2054
  • jwt: only call ParseForm when WithFormKey is supplied by @lestrrat in #2057
  • jws: jkuProvider rejects fetched keys marked use=enc by @lestrrat in #2059
  • jwk: refuse RegisterKeyImporter for built-in raw key types by @lestrrat in #2061
  • jwa: unify SignatureAlgorithm/KeyEncryption/ContentEncryption into one registry by @lestrrat in #2062
  • docs: jwkbb X509 registry is a privileged extension point by @lestrrat in #2067
  • docs(internals): record Settings unknown-option handling as design intent by @lestrrat in #2068
  • cmd/jwx: warn on private-key-to-tty + reject keysize<=0 for oct by @lestrrat in #2070
  • autodoc updates by @github-actions[bot] in #2069
  • fix jwxmigrate install path in MIGRATION.md by @lestrrat in #2076

Full Changelog: v4.0.0...v4.0.1

v4.0.0

19 Apr 00:16

Choose a tag to compare

Changes

v4 has many incompatibilities with v3. To see the full list of differences between
v3 and v4, please read the Changes-v4.md file. Coding Agents should read MIGRATION.md

v4.0.0 - 19 Apr 2026

  • Initial v4 release. Major features:
    • Lighter: Core / Companion module separation. Less dependencies in core.
    • Faster: Use of generics and other optimizations make v4 2x~3x faster than before.
    • Quantum-Ready: ML-KEM and ML-DSA, HPKE (+Hybrid) are supported through companion modules.
  • See Changes-v4.md for a full set of Changes since v3.

v3.1.0

19 Apr 00:02

Choose a tag to compare

See Changes file for curated list of changes

What's Changed

Read more

v3.0.13

12 Jan 06:40

Choose a tag to compare

What's Changed

Full Changelog: v3.0.12...v3.0.13

v3.0.12

20 Oct 09:24
9873799

Choose a tag to compare

What's Changed

  • Change go.mod version requirements to go 1.24.0 and introduce toolchain directive by @henrymcconville in #1465
  • Use go.mod for go version in Bazel module by @henrymcconville in #1466
  • Enable legacy signers by default, and explicitly populate new signer instances by @lestrrat in #1460
  • autodoc updates by @github-actions[bot] in #1475
  • Fix godoclint issues by @babakks in #1469
  • Bump actions/cache from 4.2.4 to 4.3.0 by @dependabot[bot] in #1463
  • Bump actions/stale from 10.0.0 to 10.1.0 by @dependabot[bot] in #1468
  • Bump github.com/segmentio/asm from 1.2.0 to 1.2.1 by @dependabot[bot] in #1462
  • Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #1472
  • Bump golang.org/x/crypto from 0.42.0 to 0.43.0 by @dependabot[bot] in #1474
  • revive godoclint by @lestrrat in #1478
  • [jwe] Add option to explicitly clear per-recipient headers ("header") for flattened JSON serialization by @lestrrat in #1477
  • autodoc updates by @github-actions[bot] in #1480

New Contributors

Full Changelog: v3.0.11...v3.0.12

v3.0.11

14 Sep 02:52
9e9c27a

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v3.0.10...v3.0.11

v3.0.10

04 Aug 12:38
e14eb9b

Choose a tag to compare

What's Changed

Full Changelog: v3.0.9...v3.0.10

v3.0.9

31 Jul 07:00
8babbb1

Choose a tag to compare

What's Changed

Full Changelog: v3.0.8...v3.0.9