How LogVeil works
Seven stages, one compiled map, a signed statement
in development Nothing is rewritten until the whole map exists. The first pass walks every member and collects the observed value set per class. The map is then compiled as a total function over the observed set — dictionary first, algorithmic fallback, validation against the output pool, and an injectivity check: no two originals may share a replacement, and no algorithmic output may collide with a dictionary target or with an observed unmapped value; on a collision the value is re-derived with a recorded tweak counter. The second pass rewrites. No unmapped value leaves the engine unless it is on the preserve list — silent pass-through would make reversal ambiguous.
Structure-aware, whole-bundle
in development LogVeil understands the anatomy of the bundle — every member, every nested archive, every filename and header — and has no file-size ceiling.
LogVeil detects containers by their bytes, not their names, and walks nested archives to any depth. It knows what a Cisco FMC or FTD troubleshoot, an ISE support bundle and a Catalyst Center RCA look like inside — which members are logs, which are object dumps, which are certificates, which are database exports — and it treats filenames, archive paths and container headers as content, because they leak too: in one Catalyst Center bundle, fifty-five gzip headers were found carrying original filenames. Processing streams member by member with bounded memory, so a multi-gigabyte member is handled the same way as a small one.
Your policy, your dictionary, your key
in development The customer writes the rules and holds the key; Zindagi never sees either.
The policy is a versioned, signed YAML document owned by the customer. Explicit dictionary pins — this subnet to that subnet, this site name to SITE-07 — always win; prefix length is preserved, and a rule whose two sides differ in length is rejected when the policy is compiled. Everything else is rewritten by key-derived, prefix-preserving transforms, so subnet structure survives and the TAC can still reason about the topology. The same key gives the same replacement across bundles and across time, so a case thread that spans several uploads stays coherent. Secrets are never tokenised — credentials, keys and private-key bodies are dropped and marked.
Verified — and honest about what isn’t
in development A separate verification stage re-scans the output with independent scanners, fails closed, and signs an attestation that also says what is not claimed.
Verification is its own stage with its own code path, run on the output bundle, never on the engine's internal state. The engine's recognisers re-run on the output; a differential canary scan searches for every original value in every enumerated encoding across every member and every container-metadata field; independent secret scanners (gitleaks and detect-secrets) run unmodified; container metadata is checked against a versioned residual-leak catalogue; every passed-through binary is listed. A job with a canary hit, an unresolved review item or a scanner error produces no downloadable output. The signed Sanitisation Attestation records per-member actions with hashes, policy and pack versions, the scanners run and their results, the time source — and the non-assertions: classes outside the policy, encodings outside the enumerated list, binaries passed through by name, structural inference that was not rewritten, unknown member formats, anything the review queue overrode. A standalone tool verifies any output against its attestation without the server.
Reversible under control
in development When the TAC replies about a masked address, your engineer can translate it back — and nobody else can.
Nothing unmapped leaves the engine; the complete map is compiled before anything is rewritten, checked for collisions, and stored encrypted with envelope keys. Reversal is per token: a Reverser submits a masked value and a justification, a second person approves, the original is returned, and the whole exchange is written to an append-only, hash-chained audit log. Bulk export of the map is not a function of the product. The key-encryption key is never at rest in plaintext.