Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 15 May 12:52
· 34 commits to main since this release
Immutable release. Only release title and notes can be modified.
v0.8.0
742f239

dryoc v0.8.0

dryoc 0.8.0 moves the crate to Rust 2024 with Rust 1.89 as the MSRV, adds optional direct wincode serialization for Rustaceous box types, and expands opt-in nightly portable SIMD coverage for secretbox, Poly1305, Argon2, and BLAKE2b internals.

This release also fixes protected-memory permission coverage, adds generate() aliases for Rust 2024 callers, and broadens fuzz coverage around parser and decryptor boundaries.

Full Changelog: v0.7.2...v0.8.0

Breaking Changes

  • The minimum supported Rust version is now Rust 1.89. Cargo.toml now declares edition = "2024" and rust-version = "1.89".
  • Rust 2024 reserves gen as a keyword. Prefer the new generate() APIs. Existing generation APIs remain available through raw identifier syntax such as Key::r#gen() for compatibility and are documented as candidates for future deprecation.
  • Several direct dependencies were updated to current major versions, including base64 0.22, chacha20 0.10, salsa20 0.11, sha2 0.11, rand 0.10, subtle 2.6, and zeroize 1.8.

Upgrade Notes

Update your Rust toolchain and manifest before building:

rustup update stable
cargo update -p dryoc --precise 0.8.0

If your Cargo.toml pins a 0.7 requirement, update it to 0.8 first:

dryoc = "0.8"

For random generation in Rust 2024 code, prefer:

let key = dryoc::dryocsecretbox::Key::generate();

Existing compatibility calls use raw identifier syntax:

let key = dryoc::dryocsecretbox::Key::r#gen();

Enable direct wincode serialization only where needed:

dryoc = { version = "0.8", features = ["wincode"] }

The internal portable SIMD backends remain opt-in and nightly-gated:

dryoc = { version = "0.8", features = ["simd_backend", "nightly"] }

Highlights Since v0.7.2

Rust 2024 and API Compatibility

  • Upgraded the crate and fuzz workspace to Rust 2024 and adjusted edition-sensitive syntax, including unsafe extern declarations, explicit unsafe operations inside unsafe functions, and raw-identifier support for the existing gen API.
  • Added preferred generate() aliases for fixed-size byte arrays, keypairs, signing keypairs, and KDF generation so Rust 2024 callers do not need raw identifier syntax.
  • Raised the MSRV to Rust 1.89 to match the updated dependency set.

Optional Serialization

  • Added the wincode feature for direct binary serialization of supported Rustaceous box types, including DryocBox and DryocSecretBox.
  • Added integration coverage for direct wincode serialization of public-key boxes, sealed boxes, and secret boxes.

SIMD and Performance

  • Added a portable SIMD Salsa20/XSalsa20 backend for crypto_secretbox behind simd_backend,nightly.
  • Added an opt-in portable SIMD Poly1305 backend and wired it into one-time authentication and secretbox authentication paths.
  • Added portable SIMD Argon2 block mixing for password hashing when simd_backend,nightly is enabled.
  • Reduced buffering overhead in the portable SIMD BLAKE2b update path.
  • Added BENCHMARKS.md with side-by-side software and SIMD benchmark commands and results.

Correctness and Hardening

  • Fixed protected-memory calls so mprotect and VirtualProtect cover the full target slice instead of one byte less than the slice length.
  • Hardened protected-memory allocation with checked page rounding, checked guard-page sizing, and Windows VirtualAlloc failure handling.
  • Added fuzz targets for secretstream pull paths, password-hash string parsing, and Rustaceous from_bytes constructors.
  • Short secretstream ciphertexts now return a normal error before length arithmetic can underflow.

Documentation and Release Infrastructure

  • Documented the crate's non-test unsafe code inventory in rustdoc and linked the README unsafe note to that canonical rustdoc section.
  • Added repository guidance for future agent-based maintenance work.
  • Updated GitHub Actions to use crates.io trusted publishing and added cargo-hold to improve CI cache reuse.

Pull Requests by Category

Features

  • feat: add wincode serialization support (#106)
  • feat: upgrade crate to Rust 2024 (#107)
  • feat: add portable SIMD Salsa20 secretbox backend (#108)
  • feat: add generate aliases for random generation (#110)

Performance

  • perf: optimize blake2b simd buffering (#111)
  • perf: add portable SIMD Poly1305 backend (#112)
  • perf: add Argon2 SIMD block mixing (#115)

Bug Fixes and Hardening

  • fix: satisfy clippy explicit-counter-loop in argon2 (#100)
  • fix: protect full memory regions (#105)
  • test: add fuzz targets for parsing boundaries (#109)

Documentation

  • docs: add agent repository guidelines (#104)
  • docs: document unsafe code usage (#113)
  • docs: link README unsafe note to rustdoc (#114)

CI and Maintenance

  • chore: bump version (#96)
  • ci: use crates.io trusted publishing (#99)
  • ci: add cargo-hold to workflows (#101)
  • chore: update Rust dependencies (#103)