Skip to content

fix(workspace): move off the yanked chacha20 0.10.1 - #337

Merged
MarcusKainth merged 1 commit into
mainfrom
fix/unyank-chacha20
Aug 27, 2026
Merged

MarcusKainth merged 1 commit into
mainfrom
fix/unyank-chacha20

Conversation

@MarcusKainth

Copy link
Copy Markdown
Contributor

What this changes, and why

chacha20 0.10.0 and 0.10.1 were yanked from crates.io, and 0.10.1 is what the lockfile pins. deny.toml sets yanked = "deny", so make deny fails on every branch until the lock moves. This bumps it to 0.10.2 and regenerates THIRD-PARTY.md, which carries the version.

The yank is worth stating plainly, because two consecutive releases of a cryptographic primitive being pulled reads worse than it is. The SSE2 backend of the RNG and the legacy 64-bit-counter variants used _mm_extract_epi32, an SSE4.1 intrinsic. A CPU with SSE2 and without SSE4.1 therefore met an illegal instruction rather than a working fallback. 0.10.2 replaces it with _mm_storeu_si128, which is SSE2 (RustCrypto/stream-ciphers#580).

Nothing about ciphertext, key handling or nonce handling changes, on any hardware that ran at all. The fault is portability, and the affected path needs x86_64 hardware predating SSE4.1 to reach. Our own exposure was nil in practice: the aarch64 targets take the NEON backend, and any x86_64 CPU new enough to select the AVX2 backend never entered the SSE2 path.

The crate reaches the shipped tree transitively, through apache-avro and async-nats, both by way of rand 0.10.2. No first-party code calls it.

Invariants

None.

Semver

  • Additive — nothing existing changes

A lockfile bump within a patch release of a transitive dependency. No public API moves.

Checks

  • make gates
  • Conventional Commits, scoped to the crate touched, no AI attribution trailers
  • A fragment under changelog.d/, if this reaches a crate somebody upgrading would care about

workspace is an exempt scope and the commit carries Changelog: none. Nothing a user calls behaves differently, so there is nothing for a fragment to say.

Anything else

make deny is the check that matters here, and it goes from failing on the yank to advisories ok, bans ok, licenses ok, sources ok. THIRD-PARTY.md is regenerated with make attribution rather than edited, so it stays a function of Cargo.lock.

#336 is blocked on this and should rebase once it lands.

`chacha20` 0.10.0 and 0.10.1 were yanked from crates.io. The SSE2 backend of
the RNG and legacy 64-bit-counter variants used `_mm_extract_epi32`, an SSE4.1
intrinsic, so a CPU with SSE2 and without SSE4.1 met an illegal instruction
instead of a working fallback. 0.10.2 replaces it with `_mm_storeu_si128`,
which is SSE2 (RustCrypto/stream-ciphers#580).

Nothing about ciphertext, keys or nonces changes. The fault is portability, and
the affected path is reachable only on x86_64 hardware predating SSE4.1.

`deny.toml` sets `yanked = "deny"`, so the yank fails `make deny` on every
branch until the lockfile moves. The crate reaches the shipped tree through
`apache-avro` and `async-nats`, both by way of `rand` 0.10.2.

THIRD-PARTY.md carries the version, so it is regenerated here.

Changelog: none
@github-actions github-actions Bot added area: docs The prose under docs/ area: workspace The root manifest, the lockfile, and cross-crate plumbing area: supply-chain Licenses, advisories, and the third-party inventory labels Aug 27, 2026
@MarcusKainth
MarcusKainth enabled auto-merge (squash) August 27, 2026 22:18
@codecov

codecov Bot commented Aug 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@MarcusKainth
MarcusKainth merged commit cfd30be into main Aug 27, 2026
28 checks passed
@MarcusKainth
MarcusKainth deleted the fix/unyank-chacha20 branch August 27, 2026 22:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: docs The prose under docs/ area: supply-chain Licenses, advisories, and the third-party inventory area: workspace The root manifest, the lockfile, and cross-crate plumbing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant