v0.9.0
Highlights
Secrets now record how they were encrypted. Until now the AEAD algorithm
was implicit — derived from the PHP host's CPU capabilities (AES-NI) at both
encrypt and decrypt time. Decrypting the same data on a different PHP host
(app-server migration, a dump restored elsewhere, a container base-image
change) or toggling the algorithm preference could silently make every secret
undecryptable. Each secret now carries an explicit per-row algorithm marker
(envelope version 2); decryption dispatches on the stored marker, never on
host capabilities. Existing rows keep decrypting byte-identically via the
legacy path and upgrade to version 2 on value rotation. New secrets default to
XChaCha20-Poly1305; AES-256-GCM can be pinned via the new
encryptionAlgorithm setting. Along the way this fixed a latent truncation
bug: the nonce columns were one size too small for base64-encoded XChaCha20
nonces.
Master-key rotation now re-keys the audit chain atomically. The
tamper-evident audit log is HMAC-keyed from the master key, so rotation used
to orphan the chain. vault:rotate-master-key now rewrites the chain under
the new key inside the same transaction as the DEK re-encryption — both
commit or both roll back — refusing to re-key a chain that doesn't verify
under the current key (tampering is never laundered), preserving per-row key
epochs, and walking the log in bounded-memory batches. Chain verification
itself now streams instead of materialising the whole table. A
consecutive-rotation functional test covers the full lifecycle end to end.
A batch of review findings in the periphery. Backend column migrations no
longer fail on {{uid}} placeholder identifiers; the OAuth token cache keys
on the full token identity (refresh-token source + audience/resource/tenant
params), eliminating cross-audience token confusion; OAuth error redaction
also catches JSON-body and quoted-prose credential echoes; OAuthConfig
fails fast on unknown grant types; the secure HTTP client rejects non-object
JSON bodies up front; and UUID v7 generation uses all of its variant-field
random bits.
Installation
composer require netresearch/nr-vaultPublication status
- TER: extensions.typo3.org/extension/nr_vault — 0.9.0 verified
- Packagist: packagist.org/packages/netresearch/nr-vault — 0.9.0 verified
- Documentation: docs.typo3.org/p/netresearch/nr-vault/0.9/en-us/ — render verified
Security
All release artifacts are signed with Sigstore keyless signing.
Verify signatures
cosign verify-blob \
--bundle nr-vault-0.9.0.zip.sigstore.json \
--certificate-identity-regexp "https://github.com/netresearch/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
nr-vault-0.9.0.zipVerify checksums
sha256sum -c checksums.txtSoftware Bill of Materials (SBOM)
SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.