fix(deps): update rust crate rusty_paseto to 0.10.0 #196
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/rusty_paseto-0.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
0.7.2→0.10.0Release Notes
rrrodzilla/rusty_paseto (rusty_paseto)
v0.10.0Compare Source
This release is a focused security pass driven by a full internal audit of the
crate against the PASETO specification and current advisory database.
Security
Ed25519verification is now strict (RFC 8032).Paseto::<V2, Public>andPaseto::<V4, Public>now called25519_dalek::VerifyingKey::verify_strictinstead of the lenient
verify. The strict path rejects signatures withtorsion components and non-canonical R encodings, eliminating
ed25519signature malleability. All 56 default tests and the official PASETO v2/v4
public test vectors continue to pass.
expclaim. A second-lookaudit highlighted an asymmetry: the builder required an explicit
set_no_expiration_danger_acknowledged()to mint non-expiring tokens, butthe parser silently accepted them. The parser is now symmetric — an absent,
null, or non-string
expreturnsPasetoClaimError::Missing("exp"). Usethe new
PasetoParser::set_no_expiration_danger_acknowledged()to opt inwhen you genuinely want to accept non-expiring tokens.
Paseto::MAX_TOKEN_SIZE(64 KiB) and
Paseto::MAX_FOOTER_SIZE(1024 bytes, per PASETO specrecommendation) are enforced in both
parse_raw_tokenandUntrustedToken::try_parsebefore any base64 decoding or PAE construction.Bounds the work an attacker can force on inputs that would have failed MAC
verification. New error variants
Error::TokenTooLargeandError::FooterTooLarge.EncryptionKey,AuthenticationKey, andHkdfKeyderiveZeroize+ZeroizeOnDrop. The rootPasetoSymmetricKey(Key<N>) wasalready zeroized; this closes the gap for per-message Ek/Ak material derived
via HKDF (v1/v3) and BLAKE2b (v4).
Key::<N>::from(&[u8])andPasetoAsymmetricPrivateKey::<V2|V4, Public>::from(&[u8])previously called
copy_from_sliceinto fixed-size buffers, panicking thethread on size mismatch. Both now use
TryFrom<&[u8]>returningPasetoError::InvalidKey. The infallible array-typedFromimpls remainfor callers that already have a correctly-sized array.
Dependencies
time0.3 → 0.3.47 to resolve RUSTSEC-2026-0009 (DoS via stackexhaustion in claim parsing).
zeroize1.4 → 1.8 for current derive macros and bug fixes.Fixed
nbfclaim boundary. A token withnbf == nowis now accepted, perRFC 7519 §4.1.5. Previously the strict
<=check rejected tokens for oneinstant at the boundary.
Breaking changes
PasetoParser::default()now rejects tokens missingexpby default;callers that want non-expiring tokens must add
.set_no_expiration_danger_acknowledged()on the parser (mirroring theexisting builder method).
Key::<N>::from(&[u8])removed. Callers usingKey::<N>::from(slice)with a slice (rather than an array) must switch to
Key::<N>::try_from(slice)?. The array-typedFrom<[u8; N]>andFrom<&[u8; N]>impls are unchanged.PasetoAsymmetricPrivateKey::<V2|V4, Public>::from(&[u8])is nowTryFrom<&[u8]>. Callers usingfrom(slice)must switch totry_from(slice)?. V1 (RSA, arbitrary-length) and V3 (Key<48>-typed)are unaffected.
Spec compliance
le64now masks the high bit (n &= 0x7FFF_FFFF_FFFF_FFFF) forbyte-exact compatibility with the reference implementation. In Rust this is
structurally redundant — slice/Vec lengths are bounded by
isize::MAX— butthe masking matches the spec pseudocode.
Documentation
v1_public_insecurerationale. Previous docs citedRUSTSEC-2023-0071 (Marvin Attack), which targets the
rsacrate. This crateuses
ring's RSA-PSS, which is constant-time blinded and not affected bythat advisory. The
_insecuresuffix and#[deprecated]attributes remain— V1 is the legacy PASETO version (2048-bit RSA-PSS-SHA384) and the spec
recommends V4 — but the justification now reflects reality.
SECURITY.mdrewritten with private disclosure channels (GitHubSecurity Advisory plus
rrrodzilla@proton.me), supported-versions table,SLA expectations, and hardening guidance for users.
actix_identityexample hardened. Replaced hardcoded keys with envvars (
PASETO_KEY,COOKIE_KEYas 32-byte hex; random fallback perprocess start), removed
.expect()/.unwrap()from request handlers,and added a leading module doc explaining what to fix before adapting it
to production.
Meta
(transitive
time-core 0.1.8requiresedition2024).Notes
cargo auditagainst the library's runtime dependency tree is clean.Two
randwarnings (RUSTSEC-2026-0097, "unsound with a custom logger")remain in the dev-dependency tree, reachable only through
proptestand the actix-web-based
actix_identityexample. They do not affectconsumers of
rusty_pasetoitself.v0.9.0Compare Source
See CHANGELOG for details.
v0.8.0Compare Source
Added
Changed
Fixed
ed25519-dalek dependency in v1_public (#71)Refactored
Documentation
CI/CD
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
⚠️ Artifact update problem
Renovate failed to update artifacts related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
The artifact failure details are included below:
File name: Cargo.lock
File name: crates/chir-rs/Cargo.toml
File name: crates/chir-rs/Cargo.toml
File name: crates/chir-rs/Cargo.toml
51a7ff18622f2b776981fix(deps): update rust crate rusty_paseto to 0.8.0to fix(deps): update rust crate rusty_paseto to 0.9.02f2b77698171fbda3f5ffix(deps): update rust crate rusty_paseto to 0.9.0to fix(deps): update rust crate rusty_paseto to 0.10.0View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.