Skip to content

rscrypto v0.3.0

Choose a tag to compare

@loadingalias loadingalias released this 30 May 17:08
· 36 commits to main since this release
v0.3.0
7f82051

rscrypto v0.3.0 is the RSA and validation-hardening release.

Highlights:

  • RSA is now a full first-class primitive: strict DER import/export, RSA-PSS, RSASSA-PKCS1-v1_5, OAEP, RSAES-PKCS1-v1_5, key generation, X.509/JWT/COSE/TLS profile mapping, blinded private operations, and
    reusable scratch APIs.
  • RSA verification coverage landed with vectors, fuzzing, oracle checks, and benchmark fixtures.
  • RSA private operations and assembly-backed paths were completed.
  • Ed25519 assembly backends were added.
  • RSA public verification was tightened: 8192-bit verifier backend coverage widened, public Montgomery precompute deferred, and brittle scratch allocation assertions removed.
  • CI validation was hardened: Miri now focuses on UB-risk coverage, weekly validation timeouts were widened, SHA3 fuzz builds were fixed, workflow cancellation was scoped, and action pins / lockfiles were
    refreshed.
  • Benchmark docs were refreshed with the 2026-05-27 Linux CI scorecard, including RSA rows.

Performance snapshot from the latest public benchmark pass:

  • 1.61x Linux CI fastest-external geomean.
  • 3,545 wins / 5,832 fastest-external comparisons.
  • 5,210 wins-or-ties / 5,832 comparisons.
  • Checksums: 5.03x geomean.
  • SHA-3 / SHAKE: 2.15x / 1.86x geomean.
  • BLAKE3 >=64 KiB: 2.31x geomean.
  • AEAD: 1.57x geomean.
  • RSA import + verify: 1.32x geomean, with RSA verify-only still at 0.98x.

Known pressure points remain visible and intentional: PBKDF2-SHA256 low-iteration setup, X25519 DH, RSA verification on some Arm/RISC-V rows, and small-message AEAD overhead. If you're really interested in them check the benchmark_results/OVERVIEW.md file.

Get it:

[dependencies]
rscrypto = { version = "0.3.0", default-features = false, features = ["sha2"] }

Full toolbox with OS randomness:

[dependencies]
rscrypto = { version = "0.3.0", features = ["full", "getrandom"] }

References: