Implement AUDIT-WP-0007 hash-chain integrity.
Accept now extends a single-schema chain. Verify walks it; a rewritten payload_hash is a break. Tamper evidence is that detector plus an external chain-head attestation, not WORM.
This commit is contained in:
parent
5faede18fc
commit
5fd04e2095
17 changed files with 696 additions and 29 deletions
|
|
@ -159,7 +159,12 @@ class IngestionApplication:
|
|||
|
||||
if method == "GET" and (
|
||||
path.startswith("/v1/events")
|
||||
or path in ("/v1/dead-letters", "/v1/secret-findings", "/v1/stats")
|
||||
or path in (
|
||||
"/v1/dead-letters",
|
||||
"/v1/secret-findings",
|
||||
"/v1/stats",
|
||||
"/v1/integrity",
|
||||
)
|
||||
):
|
||||
return self._read(start_response, environ, path, identity)
|
||||
|
||||
|
|
@ -241,6 +246,14 @@ class IngestionApplication:
|
|||
start_response, HTTPStatus.OK,
|
||||
{"secret_findings": self.backend.secret_findings(_limit(query))},
|
||||
)
|
||||
if path == "/v1/integrity":
|
||||
verify = getattr(self.backend, "verify_chain", None)
|
||||
if not callable(verify):
|
||||
return self._json(
|
||||
start_response, HTTPStatus.NOT_FOUND,
|
||||
{"error": "integrity_not_supported"},
|
||||
)
|
||||
return self._json(start_response, HTTPStatus.OK, verify().as_dict())
|
||||
if path == "/v1/events":
|
||||
correlation = (query.get("correlation_id") or [""])[0]
|
||||
if not correlation:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue