mirror of
https://github.com/block/buzz.git
synced 2026-10-27 04:30:52 +00:00
fix(audit): frame hash inputs with TLV (#7492)
Hash new audit entries from a TLV buffer built with one-byte field tags, big-endian u64 byte lengths, and raw values. Absent optional fields are omitted; present empty values retain their tag and zero length. This prevents bytes from moving between fields without restricting object IDs or inferring boundaries from field contents. Store an explicit `hash_version`. Migration 0048 labels existing rows as version 1, and new writers use version 2. Historical hashes are unchanged and mixed-version chains verify. The legacy encoding retains its original ambiguity; TLV protects new entries. Apply the migration before deploying the updated writers and verifiers. Tests cover both boundary collisions, absent versus empty fields, stable digests, unknown versions, mixed-version chains, and stored-row tampering. All 16 audit and 128 database unit tests passed. The six PostgreSQL audit tests passed against both migrated and fresh schemas, and a populated-row migration check preserved the historical hash. Full `just ci` passed. Related audit fixes: #4216 and #4249; issue #4173. Signed-off-by: Jordan Mecom <jm@squareup.com>
This commit is contained in:
1
Justfile
1
Justfile
@@ -365,6 +365,7 @@ test-unit:
|
||||
./scripts/test-ensure-local-relay-key.sh
|
||||
if command -v cargo-nextest &>/dev/null; then
|
||||
cargo nextest run -p buzz-core -p buzz-auth --lib
|
||||
cargo nextest run -p buzz-audit --lib
|
||||
# buzz-auth NIP-FI verifier doctests. The sealed-authority
|
||||
# `compile_fail` doctests prove the default-feature public API alone
|
||||
# cannot forge the issuer→JWKS authority; nextest does not run
|
||||
|
||||
Reference in New Issue
Block a user