Repository navigation
chore(release): 0.9.0 - #152
Merged
Merged
Conversation
security(jws): reject unrecognized crit header extensions (#132)
…ssuer perf(api): extend decode fast-path for audience, issuer and subject (#136)
…on-perf perf(claims): avoid serde_json::Value DOM allocation and manual PyDict construction (#137)
perf(jws): zero-copy header alg extraction in decode path
…y.detach on fast unverified paths
…ach-trim perf(api): avoid redundant payload copy in encode_json and optimize py.detach on fast unverified paths
…zation perf(keys): eliminate triple JSON round-trip in DecodingKey.from_jwk
docs: document encode_json, JWK fast-paths, crit enforcement, and update changelog
fix(api): export encode_json in top-level oxyjwt and add comprehensive tests
- Pre-encode standard base64 headers for all 12 supported algorithms to eliminate JSON serialization on encode with default headers - Move validate_iat, validate_sub, and empty-audience aud verification into Rust - Fast-path decode() without secondary Python-side default claim validation - Remove dead _header_to_plain_dict helper in PyJWKClient
…lidation - Add tests verifying static pre-encoded headers produce byte-identical tokens to custom headers - Add test verifying Rust rejects non-string subject claims (int, list) - Add test verifying Rust rejects unexpected aud claim when audience is None
…validation perf(core): pre-encode static headers and move claim validations to Rust (#150)
- Bump package version to 0.9.0 in pyproject.toml, rust/Cargo.toml, rust/Cargo.lock, and python/oxyjwt/__init__.py - Finalize 0.9.0 section in CHANGELOG.md and docs-site/docs/changelog.md - Add release notes in .github/RELEASE_NOTES_v0.9.0.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
OxyJWT 0.9.0 Release
Summary of Changes
This release includes performance improvements, security hardening, and API enhancements:
Security:
crit(Critical) header parameters across verified and unverified decode paths (RFC 7515 §4.1.11, RFC 7797) (security(jws): reject unrecognized 'crit' header extensions on ordinary verified decode #132).Performance:
{"typ":"JWT","alg":"<ALG>"}), eliminating header serialization and base64 allocation. HS256 encode benchmark reached ~895,000 ops/s (+10% gain) (perf(core): pre-encode static headers and move fast-path claim validations to Rust #150).iat, unrequestedaudrejection, andsubvalidation into Rust, allowing the fast-path decode to return claims directly without secondary Python passes (perf(api): extend decode fast-path to handle audience, issuer and subject without decode_complete fallback #136, perf(core): pre-encode static headers and move fast-path claim validations to Rust #150).serde_json::ValueDOM trees; parsed in a single pass viaorjson.dumpsand streamingjsonwebtoken::jwk::Jwkparsing (10× to 21× speedup) (perf(keys): eliminate triple JSON round-trip in DecodingKey.from_jwk #140).decode_completestreams JSON tokens intoPyDictwithout building an intermediate Rust DOM (perf(claims): avoid serde_json::Value DOM allocation and manual PyDict construction for claims decoding #137).encode_jsonbuilds signing input directly from borrowed bytes; sub-microsecond non-crypto helpers run attached to the GIL to eliminatepy.detachoverhead (perf(api): avoid redundant payload copy in encode_json and optimize py.detach on fast unverified paths #139).API & Typing:
encode_jsonat top-level (oxyjwt.encode_json) and onPyJWT.encode_jsonwith full typing and parity coverage (fix(api): export encode_json in top-level oxyjwt and add comprehensive tests #148).bytesdirectly inDecodingKey.from_jwk,PyJWK, andPyJWKSet.from_json(perf(keys): eliminate triple JSON round-trip in DecodingKey.from_jwk #140).Verification
cargo test --manifest-path rust/Cargo.toml: 23 passedcargo fmt --manifest-path rust/Cargo.toml --check: cleancargo clippy --manifest-path rust/Cargo.toml --all-targets -- -D warnings: cleanpytest: 327 passed, 1 skipped, 0 failuresmypy python/oxyjwt tests/typing: 0 issues in 11 filesmkdocs build --strict -f docs-site/mkdocs.yml: cleanly built