pqfile v4.1.0
Full Changelog: v4.0.0...v4.1.0
Full line-by-line audit across all 11 areas from the audit prompt. Findings:
- 1 High -
signdecryptstreamed plaintext to writer before ML-DSA signature verification - 5 Medium - v6 compressed decrypt buffered all ciphertext in memory; archive
file_sizeunbounded; Windows device names not rejected in archive paths;PqfReaderleft decrypted plaintext in non-zeroizing buffer;signdecryptAPI misuse risk - 5 Low - Lagrange denominator zero not trapped; SSH seed returned as non-Zeroizing;
find_session_keytiming; legacy Argon2 timing; zero key_commitment sentinel for v2 files - 8 Informational - hybrid HKDF salt, SSH HKDF salt, 8-byte streaming nonce entropy, v2 no key commitment, ml-dsa audit status, add_recipient binding, signcrypt recipient binding, parallel decrypt zeroize
Fixes Applied
File | Change -- | -- shamir.rs | Lagrange denominator zero guard before gf_div keygen.rs | extract_ssh_ed25519_seed returns Zeroizing<[u8;32]> archive.rs | file_size capped at MAX_ORIGINAL_SIZE; Windows device names rejected signcrypt.rs | Added signdecrypt_bytes that buffers and only returns plaintext after verification decrypt.rs | v6 streams through zstd::stream::write::Decoder instead of buffering; parallel decrypt plaintext wrapped in Zeroizing reader.rs | current_ct[..ct_len] zeroed after copy to plaintext buffer387 tests pass.
GitHub Workflows
Structural changes:
release.yml- dropped redundanttestjob (CI already tested the commit);buildandwasmnow depend directly oncheck-versions, saving ~12 min per releasepublish.yml- changed trigger fromworkflow_runtorelease: published; publish now fires once when you manually publish the GitHub draft, not automatically after every Release run; added idempotency check so re-runs skip already-published cratesci.yml-benchjob gets its own concurrency group (cancel-in-progress: false) so a code push cannot corrupt gh-pages benchmark history mid-writefuzz.yml- replacedcargo install cargo-fuzz(source compile) withtaiki-e/install-action(cached binary)mutants.yml- removed GTK/XCB system deps not needed for core-library mutation testing
Action version bumps (3 actions updated, 8 already current):
actions/checkoutv6 -> v6.0.3dtolnay/rust-toolchainupdated to latest v1 SHAtaiki-e/install-actionupdated to v2.81.3
Other Fixes
.gitleaks.toml- addedtests/compat/to path allowlist so test-fixture private keys no longer fail secret scanningsupply-chain/config.toml- added 36 exemptions for new crate versions (proptest,notify,qrcode,rand0.9/0.10,mio,nix0.31, etc.)scripts/bump-version.ps1- fixed$root = $PSScriptRootbug (was resolving toscripts/subdirectory instead of repo root)