{"id":31847903,"url":"https://github.com/wireapp/rusty-jwt-tools","last_synced_at":"2025-10-12T09:58:30.002Z","repository":{"id":63612179,"uuid":"530279574","full_name":"wireapp/rusty-jwt-tools","owner":"wireapp","description":"Tools for manipulating JSON Web Tokens, JWS, JWE, and JWK in Rust","archived":false,"fork":false,"pushed_at":"2025-09-30T11:02:24.000Z","size":2201,"stargazers_count":9,"open_issues_count":3,"forks_count":4,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-09-30T12:17:04.184Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wireapp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-29T15:27:27.000Z","updated_at":"2025-09-30T11:02:27.000Z","dependencies_parsed_at":"2023-10-13T05:14:05.708Z","dependency_job_id":"fa8e8beb-ec2b-4629-a412-45dc96a10d05","html_url":"https://github.com/wireapp/rusty-jwt-tools","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/wireapp/rusty-jwt-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Frusty-jwt-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Frusty-jwt-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Frusty-jwt-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Frusty-jwt-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wireapp","download_url":"https://codeload.github.com/wireapp/rusty-jwt-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wireapp%2Frusty-jwt-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279010951,"owners_count":26084841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-12T09:58:26.860Z","updated_at":"2025-10-12T09:58:29.997Z","avatar_url":"https://github.com/wireapp.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rusty JWT Tools\n\nA collection of JWT utilities.\n\nThis repository is part of the source code of Wire. You can find more information at [wire.com](https://wire.com) or by\ncontacting opensource@wire.com.\n\nYou can find the published source code at [github.com/wireapp/wire](https://github.com/wireapp/wire).\n\nFor licensing information, see the attached LICENSE file and the list of third-party licenses\nat [wire.com/legal/licenses/](https://wire.com/legal/licenses/).\n\nNo license is granted to the Wire trademark and its associated logos, all of which will continue to be owned exclusively\nby Wire Swiss GmbH. Any use of the Wire trademark and/or its associated logos is expressly prohibited without the\nexpress prior written consent of Wire Swiss GmbH.\n\n## Parts\n\n* acme: types that deal with ACME certificate enrollment\n* e2e-identity: implementation of the Wire end-to-end identity workflow, built on top of acme and jwt\n* ffi: Haskell bindings for rusty-jwt-tools, only used by wire-server\n* jwt: a collection of JWT utilities\n* x509-check: helpers for X509 certificate validation, only used by acme\n\n## Building\n\nFor the build requirements, look at [the information in core-crypto repo](\nhttps://github.com/wireapp/core-crypto?tab=readme-ov-file#general-requirements).\n\n\u003e [!note]\n\u003e Building rusty-jwt-tools independently of core-crypto for Android targets is currently not supported due to\n\u003e missing configuration bits. However, the necessary bits are in core-crypto so one can build rusty-jwt-tools\n\u003e for Android targets as part of a core-crypto build.\n\nBuilding is as simple as\n```bash\ncargo build\n```\n\n## Testing\n\nInstall cargo-nextest to allow running tests in parallel:\n```bash\ncargo install cargo-nextest\n```\n\nMake sure the docker daemon is running (this is needed because the test suite runs an OIDC provider\ninside a container).\n\n\n### Running all tests at once\n\nSimply execute the `run-tests.sh` script:\n```bash\nsh run-tests.sh\n```\nThe script will take care of cleaning up processes and containers that are started during tests.\n\n### Running specific tests\n\n`run-tests.sh` forwards its arguments to `cargo nextest`, so, to run a specific test, or any\nsubset of tests, e.g.\n```bash\nsh run-tests.sh alg::p256\n```\n\n### Manually invoking tests\n\nFirst, you need to start `test-wire-server`:\n```bash\n$ cargo run test-wire-server\n[...]\n127.0.0.1:20530\n```\n\nNote the IP and port printed by `test-wire-server` and export that as `TEST_WIRE_SERVER_ADDR`:\n```bash\nexport TEST_WIRE_SERVER_ADDR=127.0.0.1:20530\n```\n\nNow that the environment is ready, you can run a specific test, or any subset of tests, e.g.\n```bash\ncargo nextest run --locked alg::p256\n```\n\nOnce you are done with testing, terminate the Keycloak container that has been started:\n```bash\ndocker kill keycloak \u0026\u0026 docker rm keycloak\n```\nas well as the `test-wire-server` instance.\n\n### Testing the Haskell FFI\n\nMake sure you have [Cabal](https://www.haskell.org/cabal/) installed.\n\nThen run:\n```bash\ncd ffi\ncargo make hs-test\n```\n\n## Git workflow\n\nSee [core-crypto git workflow](https://github.com/wireapp/core-crypto?tab=readme-ov-file#git-workflow).\n\n## Publishing\n\nNo crates are published on crates.io or any other Rust crate registry.\nThe only release artifacts are source archives on github.\n\n### Versioning\n\nThe versioning scheme used is [SemVer AKA Semantic Versioning](https://semver.org).\n\n### Making a new release\n\n1. Make a branch based on `main` to prepare for release (`git checkout -b prepare-release/X.Y.Z`)\n1. Update the version of all workspace members to `X.Y.Z`, including places that refer to them.\n1. Generate a fresh `e2e-identity/README.md.test`:\n   ```\n    cargo test --package wire-e2e-identity --test e2e demo_should_succeed\n   ```\n   If there are non-trivial differences between `e2e-identity/README.md` and the generated file,\n   update `e2e-identity/README.md` and commit the changes.\n1. Generate the relevant changelog section:\n   ```\n   git cliff --bump --unreleased\n   ```\n   and add it to the top of `CHANGELOG.md`.\n   Make sure the version number generated by `git cliff` matches the release version.\n1. If there are any release highlights, add them as the first subsection below release title:\n   ```markdown\n   ## v0.10.0 - 2024-05-02\n\n   ### Highlights\n\n   - foo\n   - bar\n   - baz\n   ```\n1. Push your `prepare-release/X.Y.Z` branch and create a PR for it\n1. Get it reviewed, then merge it into `main` and remove the `prepare-release/X.Y.Z` branch from the remote\n1. Now, pull your local `main`: `git checkout main \u0026\u0026 git pull`\n1. Create the release tag: `git tag -s vX.Y.Z`\n1. Push the new tag: `git push origin tag vX.Y.Z`\n1. Create a new release on github, copying the relevant section from `CHANGELOG.md`\n1. Voilà!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwireapp%2Frusty-jwt-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwireapp%2Frusty-jwt-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwireapp%2Frusty-jwt-tools/lists"}