PackageTrack
Sign in Get early access

biscuit

A library to work with Javascript Object Signing and Encryption(JOSE), including JSON Web Tokens (JWT), JSON Web Signature (JWS) and JSON Web Encryption (JWE).

0.8.0 6.1M downloads/mo #4110 most downloaded on crates.io lawliet89/biscuit

What this package is like to depend on

Last release 4 months ago

05 Apr 2026

Ships unpredictably

gaps range from 1 weeks to 2.4 years

Nearly every release is documented

notes for 19 of 19 stable releases

1 version withdrawn

withdrawn after publishing

9 years old

23 releases · first in 2017

1 release in the last 12 months

see the full history below

Release timeline

23 releases · Mar 2017 to Apr 2026
2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 23
  1. 0.8.0 05 Apr 2026
    Release notes

    0.8.0

    Breaking Changes

    • Bump Minimum Supported Rust Version (MSRV) to 1.66.0 (#323)

    Enhancements & Fixes

    • Fix build errors for current stable Rust (#320)
    • Bump ring dependency to ~0.17.13 (#317)
    Open source →
    Release notes

    Breaking Changes

    • Bump Minimum Supported Rust Version (MSRV) to 1.66.0 (#323)

    Enhancements & Fixes

    • Fix build errors for current stable Rust (#320)
    • Bump ring dependency to ~0.17.13 (#317)
    Open source →
  2. 0.7.0 10 Nov 2023
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v0.6.0...v0.7.0

    Open source →
    Release notes

    Enhancements & Fixes

    • Add Support for P-256 (#310)
    • Update ring version to 0.17.5 (#313)
    • Fix a few typos (#311)
    Open source →
  3. 0.6.0 29 Mar 2023
    Release notes

    0.6.0

    Breaking Changes

    • Fix build errors and bump MSRV by @lawliet89 in #308
    • jws::RegisteredHeader field web_key
      is now of type Option<jwk::JWK<Empty>> instead of Option<String>. If you were not using JWKs,
      continue setting the value to None will not breaking. If you were previously serializing your
      JWK as JSON strings, you will now have to deserialize them into jwk::JWK<Empty>. Please raise
      issues if you encounter any bugs. [#189]

    Enhancements

    • Add support for Flattened JWS [#190]
    • Added more documentation for using OpenSSL to manipulate keys [#179]
    • Derive Clone for JWKSet by @lawliet89 in #204
    • Lints fixes

    New Contributors

    Full Changelog: v0.5.0...v0.6.0

    Open source →
    Release notes

    Breaking Changes

    • Fix build errors and bump MSRV by @lawliet89 in https://github.com/lawliet89/biscuit/pull/308
    • jws::RegisteredHeader field web_key is now of type Option<jwk::JWK<Empty>> instead of Option<String>. If you were not using JWKs, continue setting the value to None will not breaking. If you were previously serializing your JWK as JSON strings, you will now have to deserialize them into jwk::JWK<Empty>. Please raise issues if you encounter any bugs. [#189]

    Enhancements

    • Add support for Flattened JWS [#190]
    • Added more documentation for using OpenSSL to manipulate keys [#179]
    • Derive Clone for JWKSet by @lawliet89 in https://github.com/lawliet89/biscuit/pull/204
    • Lints fixes
    Open source →
  4. 0.6.0-beta1 24 Feb 2021 pre-release
    Release notes

    0.6.0-beta1 (2021-02-24)

    Breaking Changes

    • jws::RegisteredHeader field web_key
      is now of type Option<jwk::JWK<Empty>> instead of Option<String>. If you were not using JWKs,
      continue setting the value to None will not breaking. If you were previously serializing your
      JWK as JSON strings, you will now have to deserialize them into jwk::JWK<Empty>. Please raise
      issues if you encounter any bugs. [#189]

    Enhancements

    • Add support for Flattened JWS [#190]
    • Added more documentation for using OpenSSL to manipulate keys [#179]
    Open source →
  5. 0.5.0 17 Nov 2020
    Release notes

    The only changes since v0.5.0-beta2 are dependencies upgrades and setting a higher MSRV.

    0.5.0 (2020-11-17)

    These are changes since v0.4.2.

    Breaking Changes

    • MSRV is now Rust 1.41 due to changes in Cargo.lock format.
      See announcement.

    • The jwk::AlgorithmParameters::OctetKey enum variant is now a newtype variant which takes a
      jwk::OctetKeyParameters struct for its parameters. To migrate your existing code, you can do
      the following

      -jwk::AlgorithmParameters::OctetKey {
      +jwk::AlgorithmParameters::OctetKey(jwk::OctetKeyParameters {
         value: key,
         key_type: Default::default(),
      -}
      +})

      (#125)

    • jws::Compact::decode_with_jwks now supports JWK without an alg specified. However, a new
      parameter to specify an expected parameter had to be added to support this use case. This is to
      mitigate against issues like
      this.
      Existing usage of JWK with the alg specified can simply add a None as the second parameter.
      (#130)

    • Remove StringOrUri because it was hard to get the Uri type working properly. Replace all usage
      of StringOrUri with Strings instead. (#131)

    Enhancements

    • Add new jwk::AlgorithmParameters::OctetKeyPair variant to support (de)serializing OKP
      key types. (#125)
    • Add support for JWK thumbprints (RFC 7638) (#156)
    • Allow verifying tokens with a keypair as Secret
      (#132)

    Bug Fixes

    • Fix computing Aad per the RFC by doing base64 encoding
      (#147)
    Open source →
    Release notes

    Breaking Changes

    • MSRV is now Rust 1.41 due to changes in Cargo.lock format. See announcement.

    • The jwk::AlgorithmParameters::OctetKey enum variant is now a newtype variant which takes a jwk::OctetKeyParameters struct for its parameters. To migrate your existing code, you can do the following

      -jwk::AlgorithmParameters::OctetKey {
      +jwk::AlgorithmParameters::OctetKey(jwk::OctetKeyParameters {
         value: key,
         key_type: Default::default(),
      -}
      +})
      

      (#125)

    • jws::Compact::decode_with_jwks now supports JWK without an alg specified. However, a new parameter to specify an expected parameter had to be added to support this use case. This is to mitigate against issues like this. Existing usage of JWK with the alg specified can simply add a None as the second parameter. (#130)

    • Remove StringOrUri because it was hard to get the Uri type working properly. Replace all usage of StringOrUri with Strings instead. (#131)

    Enhancements

    • Add new jwk::AlgorithmParameters::OctetKeyPair variant to support (de)serializing OKP key types. (#125)
    • Add support for JWK thumbprints (RFC 7638) (#156)
    • Allow verifying tokens with a keypair as Secret (#132)

    Bug Fixes

    • Fix computing Aad per the RFC by doing base64 encoding (#147)
    Open source →
  6. 0.5.0-beta2 22 Jul 2020 pre-release
    Release notes

    0.5.0-beta2 (2020-07-22)

    The changes below are since 0.5.0-beta1

    Breaking Changes

    • Remove StringOrUri because it was hard to get the Uri type working properly. Replace all usage
      of StringOrUri with Strings instead. (#131)

    Enhancements

    • Add support for JWK thumbprints (RFC 7638) (#156)
    • Allow verifying tokens with a keypair as Secret
      (#132)

    Bug Fixes

    • Fix computing Aad per the RFC by doing base64 encoding
      (#147)
    Open source →
  7. 0.5.0-beta1 29 Apr 2020 pre-release
    Release notes

    0.5.0-beta1 (2020-04-29)

    Breaking Changes

    • The jwk::AlgorithmParameters::OctetKey enum variant is now a newtype variant which takes a
      jwk::OctetKeyParameters struct for its parameters. To migrate your existing code, you can do
      the following

      -jwk::AlgorithmParameters::OctetKey {
      +jwk::AlgorithmParameters::OctetKey(jwk::OctetKeyParameters {
         value: key,
         key_type: Default::default(),
      -}
      +})

      (#125)

    • jws::Compact::decode_with_jwks now supports JWK without an alg specified. However, a new
      parameter to specify an expected parameter had to be added to support this use case. This is to
      mitigate against issues like
      this.
      Existing usage of JWK with the alg specified can simply add a None as the second parameter.
      (#130)

    Enhancements

    • Add new jwk::AlgorithmParameters::OctetKeyPair variant to support (de)serializing OKP
      key types. (#125)
    Open source →
  8. 0.4.2 07 Jan 2020
    Release notes

    0.4.2 (2020-01-07)

    Enhancements

    • Add jws::Compact::decode_with_jwks method to decode a JWT with JWKs (#124)

    Internal Changes

    • Replace lazy_static with once_cell (#123)
    Open source →
    Release notes

    Enhancements

    • Add jws::Compact::decode_with_jwks method to decode a JWT with JWKs (#124)

    Internal Changes

    • Replace lazy_static with once_cell (#123)
    Open source →
  9. 0.4.1 06 Nov 2019
    Release notes

    0.4.1 (2019-11-06)

    • Fix documentation build on 1.40 Nightly
    Open source →
    Release notes
    • Fix documentation build on 1.40 Nightly
    Open source →
  10. 0.4.0 06 Nov 2019
    Release notes

    0.4.0 (2019-11-06)

    There are no new feature except for some breaking changes to correct some errors.

    Breaking Changes

    Octet Misspelling

    All misspelling of octect have been corrected to octet. The following
    types have been renamed and the old misspelt version is no longer available.

    To migrate, you can simply do a case sensitive replace of Octect with Octet and
    octect with octet in your code.

    The following types have been renamed:

    • jwk::KeyType::Octect 🡒 jwk::KeyType::Octet
    • jwk::KeyType::OctectKeyPair 🡒 jwk::KeyType::OctetKeyPair
    • jwk::OctectKeyType 🡒 jwk::OctetKeyType
    • jwk::OctectKeyType::Octect 🡒 jwk::OctetKeyType::Octet
    • jwk::AlgorithmParameters::OctectKey 🡒 jwk::AlgorithmParameters::OctetKey

    The following functions have been renamed:

    • jwk::JWK::new_octect_key 🡒 jwk::JWK::new_octet_key
    • jwk::JWK::octect_key 🡒 jwk::JWK::octet_key
    • jwk::AlgorithmParameters::octect_key 🡒 jwk::AlgorithmParameters::octet_key

    Clippy trivially_copy_pass_by_ref lint

    This release also fixes the
    Clippy trivially_copy_pass_by_ref lint
    by modifying function arguments that would have taken a reference of a 1 byte value that
    implements Copy to take the value of itself. This mainly affects all struct methods
    of the following types

    There should be no need to modify your code for this because the types are Copy.

    • jwa::SignatureAlgorithm
    • jwa::KeyManagementAlgorithm
    • jwa::ContentEncryptionAlgorithm
    • jwk::KeyType
    Open source →
    Release notes

    There are no new feature except for some breaking changes to correct some errors.

    Breaking Changes

    Octet Misspelling

    All misspelling of octect have been corrected to octet. The following types have been renamed and the old misspelt version is no longer available.

    To migrate, you can simply do a case sensitive replace of Octect with Octet and octect with octet in your code.

    The following types have been renamed:

    • jwk::KeyType::Octect 🡒 jwk::KeyType::Octet
    • jwk::KeyType::OctectKeyPair 🡒 jwk::KeyType::OctetKeyPair
    • jwk::OctectKeyType 🡒 jwk::OctetKeyType
    • jwk::OctectKeyType::Octect 🡒 jwk::OctetKeyType::Octet
    • jwk::AlgorithmParameters::OctectKey 🡒 jwk::AlgorithmParameters::OctetKey

    The following functions have been renamed:

    • jwk::JWK::new_octect_key 🡒 jwk::JWK::new_octet_key
    • jwk::JWK::octect_key 🡒 jwk::JWK::octet_key
    • jwk::AlgorithmParameters::octect_key 🡒 jwk::AlgorithmParameters::octet_key

    Clippy trivially_copy_pass_by_ref lint

    This release also fixes the Clippy trivially_copy_pass_by_ref lint by modifying function arguments that would have taken a reference of a 1 byte value that implements Copy to take the value of itself. This mainly affects all struct methods of the following types

    There should be no need to modify your code for this because the types are Copy.

    • jwa::SignatureAlgorithm
    • jwa::KeyManagementAlgorithm
    • jwa::ContentEncryptionAlgorithm
    • jwk::KeyType
    Open source →
  11. 0.3.1 30 Jul 2019
    Release notes

    There are no new features except for ring dependency changes.

    • biscuit now depends on ring 0.16.5
    • Changed internal usage of ring's AEAD APIs
    • Removed Compact::to_string. Compact now implements Display which has a blanket implementation of std::string::ToString. Use that instead. This should not break any users because std::string::ToString is used by the std prelude.
    Open source →
  12. 0.3.0 19 Jul 2019 withdrawn
    Release notes

    There are no new features or API changes except for ring dependency changes.

    Breaking Changes

    • Minimum supported Rust version is now 1.36 due to Ring's usage of newer Rust features
    • biscuit now depends on ring 0.16
    Open source →
  13. 0.2.0 11 Mar 2019
    Release notes
    • Minimum Rust 1.31 is needed for editions support on dependencies
    • biscuit now depends on ring 0.14
    Open source →
  14. 0.1.1 18 Mar 2019
    Release notes
    • Minimum Rust 1.31 is needed for editions support on dependencies
    Open source →
  15. 0.1.0 29 Oct 2018
    Release notes

    Breaking Change

    • Minimum Rust 1.27.2 supported. Older versions might build, but this might not be supported.
    • Ring 0.13.2 minimum required. This breaks with other libraries using any other versions

    Features

    • Add ECDSA support (https://github.com/lawliet89/biscuit/pull/95)
    • Additional claims validation (https://github.com/lawliet89/biscuit/pull/99)
    • RSA signature validation with only the exponent and modulus (https://github.com/lawliet89/biscuit/pull/100)
    Open source →
  16. 0.0.8 14 Feb 2018
    Release notes

    There are breaking changes in this release:

    • ring was upgraded to 0.12. Until #619 lands, this crate will now be incompatible with all other crates that uses a different version of ring.
    • jwa::rng is no longer public
    • #84 All AES GCM encryption now requires a user provided nonce. See this example.
    • SignatureAlgorithm::verify now returns Result<(), Error> instead of Result<bool, Error>.
    • Bumped various dependencies, although they should not break any user facing code: lazy_static, data-encoding.

    Other non-breaking changes include:

    • New helper function in JWKSet to find key by Key ID
    • New helper functions in jws::Compact to retrieve parts without signature verification.
    Open source →
  17. 0.0.7 19 Jul 2017
    Release notes

    There are no breaking changes in this release.

    Added a convenience validate_times function to jwe::Compact and jws::Compact that allows quick temporal validation if their payloads are ClaimSets.

    Open source →
  18. 0.0.6 13 Jul 2017
    Release notes

    This release adds no new features and breaks no API. It simply bumps ring to 0.11.

    Open source →
  19. 0.0.5 05 Jul 2017
    Release notes

    This release adds no new features and breaks no API. It simply bumps Chrono and Ring to their newest version.

    Open source →
  20. 0.0.4 15 May 2017
    Release notes

    Update dependency to ring 0.9.4 so that different versions of ring can no longer be used in a Rust build.

    There are no new features or API change.

    Open source →
  21. 0.0.3 23 Apr 2017
    Release notes

    Minor bug fix release. Fixed incorrect ECDSA signature verification.

    Thanks to @hobofan.

    Open source →
  22. 0.0.2 23 Apr 2017
    Release notes

    This is a major breaking release. Not all algorithms, verification, and features are supported yet.

    New Features

    • JSON Web Encryption support (JWE)
    • JSON Web Key (JWK)
    • Replaced rustc_serialize with serde
    • Support custom headers for JWS
    • Added a biscuit::Empty convenice empty struct that users can plug into type parameters when they do not need them, such as the type parameter of custom headers.
    • Added SingleOrMultiple and StringOrUri enums to better represent the types of values that the JOSE RFCs allow.

    Breaking Changes

    • biscuit::JWT is no longer a struct. It is now a type alias for jws::Compact, which according to the RFC, is the compact serialization of a JSON Web Signature (JWS).
    • Moved biscuit::Algorithm to biscuit::jwa::SignatureAlgorithm to better reflect its use.
    • Various internal traits that should be implementation detail and opaque to users of biscuit have been changed, added, or removed.
    Open source →
  23. 0.0.1 17 Mar 2017
    Release notes

    This is an initial release after forking from Version 1.1.6 of Keats/rust-jwt.

    • Added RSA signing and verification
    • Added ECDSA verification (signing support is pending addition of support in ring)
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive