Haldir v0.2.1 — AES-256-GCM Vault
Vault upgraded to AES-256-GCM
Prior: AES-128-CBC + HMAC-SHA256 (Fernet).
Now: AES-256-GCM with additional authenticated data (AAD) binding each ciphertext to its (tenant_id, secret_name).
What this means for buyers
"AES-256-GCM at rest" is a compliance checklist item on every serious enterprise procurement review. Saying AES-128 previously cost a meaningless objection; making it AES-256 is accurate and stronger.
What this means for security
AAD binding means an attacker with DB write access can no longer:
- Move a ciphertext between tenants
- Rename a ciphertext under the same tenant
Decryption fails with InvalidTag in both cases — a defense-in-depth layer the old Fernet setup didn't have.
Breaking change
Existing Fernet ciphertexts are not decryptable by the new code. Self-hosted deployments upgrading from v0.2.0 must rotate every stored secret. The hosted service had no external-user secrets at upgrade time, so no action needed there.
Smoke-tested
6 cases: roundtrip, cross-tenant swap rejection, name-swap rejection, wrong-key rejection, raw-key and base64url key formats. All pass.
Full changelog: CHANGELOG.md