Skip to content

deps: RustCrypto stack split between 0.10 and 0.11 lines (turso/aes-gcm blocked) #1634

@chaliy

Description

@chaliy

Context

The 2026-05-17 maintenance pass surfaced a persistent split in the workspace dependency tree across the RustCrypto stack:

Crate Old line (via turso_core 0.5 / aes-gcm 0.10) New line (used directly by bashkit)
crypto-common 0.1.7 0.2.1
digest (transitive 0.10) 0.11.3
sha1 (transitive 0.10) 0.11.0
sha2 (transitive 0.10) 0.11.0
hmac (transitive 0.12) 0.13.0
aes 0.8.4
cipher 0.4.4
ctr 0.9.2
cpufeatures 0.2.17 0.3.0

Verified via cargo tree --workspace --duplicates after a clean cargo update.

Why this matters

Bigger binaries (two builds of every common hash primitive), and a real source of confusion when someone tries to audit which version of, e.g., sha2 actually backs a given API. Not a correctness issue today — neither line is unsound — but the longer it persists, the more likely subtle divergence between hash implementations becomes a debugging hazard.

Why it's blocked

Both 0.10-line consumers in the tree are pulled by upstreams we don't control:

  1. turso_core 0.5.3 depends on aes-gcm 0.10.3 (which transitively brings aes, cipher, ctr, cpufeatures 0.2, crypto-common 0.1, and the 0.10 digest/sha* line). The dependabot config explicitly excludes turso_* from group bumps because turso is BETA upstream; latest is 0.7.0-pre.1.
  2. aes-gcm 0.10.3 has not yet released a 0.11 line that targets RustCrypto's 0.11 cohort.

We can't unify locally — every workaround (patch-target overrides, vendored forks) costs more than the duplication.

What to track

  • Watch RustCrypto/AEADs for aes-gcm 0.11.
  • Watch tursodatabase/turso for a stable 0.7 or later that drops or replaces aes-gcm 0.10.
  • Once either lands, run cargo update and confirm cargo tree --workspace --duplicates | grep -E '^(aes|sha[12]|digest|hmac|cipher|crypto-common|ctr) ' returns nothing.
  • Update specs/maintenance.md deferred-items section when this is resolved.

Not in scope

  • Replacing turso_core. Embedded SQLite via Turso is a core feature, not a candidate for swap.
  • Adding [patch.crates-io] overrides. Maintenance burden outweighs the duplicated-build cost.

Surfaced during PR #1632 deep-maintenance pass.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions