ferrocrypt 0.3.0-rc.5

Recipient-oriented file and directory encryption: passphrase (Argon2id) and X25519 public-key recipients, XChaCha20-Poly1305 STREAM payloads, HKDF-SHA3-256 / HMAC-SHA3-256 key derivation and authentication.
Documentation
# Release config for the ferrocrypt (lib) crate.
#
# `prerelease = true` is REQUIRED on every rule: cargo-release does not apply
# pre-release-replacements on pre-release versions (0.3.0-beta.3, 1.0.0-rc.1, …)
# unless it is set. Every rule runs during the lib's release step; the lib is
# always part of a shared-version release.
#
# Paths are relative to this directory (ferrocrypt-lib/):
#   - ../CHANGELOG.md            workspace-root changelog; gets a dated section.
#   - ../ferrocrypt-desktop/...  excluded from the workspace, so shared-version
#                                does not bump it; its version is synced here.
#   - ../README.md               the crates.io page of both crates; its version
#                                links and install commands are synced here.

# The hook updates the lock files outside the workspace and runs the tests,
# once for the whole workspace, before the release commit; a failure stops the
# release. It is set here rather than in ../release.toml, which would run it
# once for every crate. cargo-release runs it in this directory.
pre-release-hook = ["bash", "../scripts/release_hook.sh"]

[[pre-release-replacements]]
file = "../CHANGELOG.md"
search = "(?m)^## \\[Unreleased\\]\\n\\n"
replace = """## [Unreleased]

## [{{version}}] - {{date}}

"""
prerelease = true

[[pre-release-replacements]]
file = "../ferrocrypt-desktop/Cargo.toml"
search = '^version = ".*"'
replace = 'version = "{{version}}"'
exactly = 1
prerelease = true

# A README that gains or loses a pinned version stops the release here until
# `exactly` is updated with it.
[[pre-release-replacements]]
file = "../README.md"
search = '(crates\.io/crates/ferrocrypt(?:-cli)?/|docs\.rs/ferrocrypt/|cargo add ferrocrypt@|cargo install ferrocrypt-cli --version )[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?'
replace = '${1}{{version}}'
exactly = 5
prerelease = true