v0.8.0
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.tomlnow declaresedition = "2024"andrust-version = "1.89". - Rust 2024 reserves
genas a keyword. Prefer the newgenerate()APIs. Existing generation APIs remain available through raw identifier syntax such asKey::r#gen()for compatibility and are documented as candidates for future deprecation. - Several direct dependencies were updated to current major versions, including
base640.22,chacha200.10,salsa200.11,sha20.11,rand0.10,subtle2.6, andzeroize1.8.
Upgrade Notes
Update your Rust toolchain and manifest before building:
rustup update stable
cargo update -p dryoc --precise 0.8.0If 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 externdeclarations, explicit unsafe operations inside unsafe functions, and raw-identifier support for the existinggenAPI. - 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
wincodefeature for direct binary serialization of supported Rustaceous box types, includingDryocBoxandDryocSecretBox. - 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_secretboxbehindsimd_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,nightlyis enabled. - Reduced buffering overhead in the portable SIMD BLAKE2b update path.
- Added
BENCHMARKS.mdwith side-by-side software and SIMD benchmark commands and results.
Correctness and Hardening
- Fixed protected-memory calls so
mprotectandVirtualProtectcover 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
VirtualAllocfailure handling. - Added fuzz targets for secretstream pull paths, password-hash string parsing, and Rustaceous
from_bytesconstructors. - 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)