jose-0.13: CHANGELOG.md
## Version 0.13 (2026-06-06)
- Update to *crypton >= 1.1.0* and *ram*. There are no
functional changes in this release. Until the release
of 0.14, any behavioural changes (bug fixes, etc) will
be released to both the 0.13 and 0.12 series.
## Version 0.12 (2025-08-18)
- GHC 9.6 is now the earliest supported version.
- Changed the header protection data types for better ergonomics
([#125](https://github.com/frasertweedale/hs-jose/issues/125)).
Previously, `()` was used for serialisations that only support
protected headers (thus, a single constructor). This release
introduces the new singleton data type `RequiredProtected` to
replace the use of `()` for this purpose. This is a breaking
change and some library users will need to update their code.
The `Protection` type has been renamed to `OptionalProtection`,
with the old name retained as a (deprecated) type synonym.
The `ProtectionIndicator` class has been renamed to
`ProtectionSupport`, with the old name retained as a (deprecated)
type synonym.
Added some convenience header and header parameter constructors:
`newJWSHeaderProtected`, `newHeaderParamProtected` and
`newHeaderParamUnprotected`.
- Generalised the types of `signJWT`, `verifyJWT` and related
functions to accept custom JWS header types. Added new type
synonym `SignedJWTWithHeader h`. This change could break some
applications by introducing ambiguity. The solution is to use
a type annotation, type application, or explicit coercion
function, as in the below examples:
```haskell
-- type application
{-# LANGUAGE TypeApplications #-}
decodeCompact @SignedJWT s >>= verifyClaims settings k
-- type annotation
do
jwt <- decodeCompact s
verifyClaims settings k (jwt :: SignedJWT)
-- coercion function
let
fixType = id :: SignedJWT -> SignedJWT
in
verifyClaims settings k . fixType =<< decodeCompact s
```
- Added `unsafeGetPayload`, `unsafeGetJWTPayload` and
`unsafeGetJWTClaimsSet` functions. These enable access to
the JWS/JWT payload without cryptographic verification. As
the name implies, these should be used with the utmost caution!
([#126](https://github.com/frasertweedale/hs-jose/issues/126))
- Add `Crypto.JOSE.JWK.negotiateJWSAlg` which chooses the
cryptographically strongest JWS algorithm for a given key,
restricted to a given set of algorithms. ([#118][])
- Added new conversion functions `Crypto.JOSE.JWK.fromX509PubKey`
and `Crypto.JOSE.JWK.fromX509PrivKey`. These convert from the
`Data.X509.PubKey` and `Data.X509.PrivKey` types, which can be
read via the *crypton-x509-store* package. They supports RSA,
NIST ECC, and Edwards curve key types (Ed25519, Ed448, X25519,
X448).
- Updated `Crypto.JOSE.JWK.fromX509Certificate` to support Edwards
curve key types (Ed25519, Ed448, X25519, X448).
- Added `Crypto.JOSE.JWK.fromRSAPublic :: RSA.PublicKey -> JWK`.
- Added `Ord` instance for `StringOrURI` ([#134]; contributed by
Chris Penner).
- Added `Semigroup` and `Monoid` instances for `JWKSet`
([#135]; contributed by Torgeir Strand Henriksen).
[#134]: https://github.com/frasertweedale/hs-jose/pull/134
[#135]: https://github.com/frasertweedale/hs-jose/pull/135
## Version 0.11 (2023-10-31)
- Migrate to the *crypton* library ecosystem. *crypton* was a hard
fork of *cryptonite*, which was no longer maintained. With this
change, the minimum supported version of GHC increased to 8.8.
There are no other notable changes in this release.
- The `v0.10` series is the last release series to support
*cryptonite*. It will continue to receive important bug fixes
until the end of 2024.
## Version 0.10 (2022-09-01)
- Introduce `newtype JOSE e m a` which behaves like `ExceptT e m a`
but also has `instance (MonadRandom m) => MonadRandom (JOSE e m)`.
The orphan `MonadRandom` instances were removed. ([#91][])
- Parameterise `JWT` over the claims data type. This is a
cleaner mechanism to support applications that use additional
claims beyond those registered by RFC 7519. `unregisteredClaims`
and `addClaim` are deprecated and will be removed in a future
release. ([#39][])
- Add Ed448 and X448 support. ([#74][])
- Add secp256k1 curve support (RFC 8812).
- Added `checkJWK :: (MonadError e m, AsError e) => JWK -> m ()`.
This action performs some key usability checks. In particular
it identifies too-small symmetric keys. ([#46][])
- Removed `QuickCheck` instances. *jose* no longer depends on
`QuickCheck`. ([#106][])
- Removed orphan `ToJSON` and `FromJSON` instances for `URI`.
- Fail signature verification when curve does not match algorithm.
This is an additional defence against curve substitution attacks.
- Improved error reporting when constructing a JWK from an X.509
certificate with ECDSA key.
- Make compatible with `mtl == 2.3.*` ([#107][])
- Make compatible with `monad-time == 0.4`
[#39]: https://github.com/frasertweedale/hs-jose/issues/39
[#46]: https://github.com/frasertweedale/hs-jose/issues/46
[#74]: https://github.com/frasertweedale/hs-jose/issues/74
[#91]: https://github.com/frasertweedale/hs-jose/issues/91
[#106]: https://github.com/frasertweedale/hs-jose/issues/106
[#107]: https://github.com/frasertweedale/hs-jose/issues/107
[#118]: https://github.com/frasertweedale/hs-jose/issues/118
[#122]: https://github.com/frasertweedale/hs-jose/issues/122
## Older versions
See Git commit history