AURA-VERIFIER

Strict verification in source version v1.2.0

These changes tighten verifier policy without changing the published schemas or any committed signed manifests, timestamp responses, queries or certificates. They do not establish a new conformance level or a new specification version.

Shared acceptance policy

Reference: https://www.rfc-editor.org/rfc/rfc8785.html#section-3.2.2.2

Valid Unicode pairs, existing supported manifests and the public FreeTSA vector are regression cases. Nothing is re-signed to repair historical evidence.

The historical origin_proof_version: "0.1" standard draft, Python v0.1 demo and AUTHENTICA aura_version: "0.1-pilot" are different field models. None is supported by this current verifier. Unsupported-version failures describe the scope of this implementation, not whether an old signature was forged or whether the evidence’s legal effect has changed. Preserve old evidence and identify its original implementation and trust/key-status policy for historical review. Even a mathematically valid historical signature does not override a revoked-key result under the supplied registry policy. Do not relabel or re-sign old proofs to make them appear to be current-format evidence.

Reproduce

With Node.js 20 or later and OpenSSL 3.x on PATH:

node tests/run-tests.js
node tests/test-timestamp-rfc3161.js
node tests/test-timestamp-public.js
node scripts/verify-timestamp-example.js

tests/test-strict-verification.js exercises the same signed packages through Node and WebCrypto and asserts matching verdicts and signature/integrity dimensions. It includes malformed declarations signed by their test issuer and permissively serialized negative Unicode fixtures. These are acceptance-policy tests, not demonstrations of forged Ed25519 signatures. WebCrypto runs under Node in this suite; it does not replace browser UI/platform testing or an independent implementation.

The historical committed 0.1-test fixtures remain unchanged and are explicitly tested as unsupported. The generator now writes new v1.0 packages to a separate, new destination, uses a schema-compatible identifier, and refuses overwriting. tests/test-generated-vectors.js checks all three generated cases through both engines and confirms that rerunning cannot overwrite the signed destination.

Limits and follow-up

These corrections cover the reproduced input and semantic-policy failures, not a full formal audit of RFC 8785 or every AURA semantic rule. Issuer identity assurance, registry freshness and full leap-second validation remain outside these checks. See INTEGRATORS.md for the local semantic policy. An existing base-schema pass treats date-time format as an annotation. Cryptographic validity does not establish identity, representation, ownership or dossier completeness. The local registry’s provenance/freshness remains a caller trust decision. RFC 3161 verification does not establish qualified eIDAS status; see the timestamp guide.

Pending follow-up: ambiguous inputs and asset checks

This follow-up is not a published release. Raw manifest and issuer JSON with duplicate property names is rejected as an input error, including escaped spellings of the same name and duplicates nested in objects or arrays. The CLI exits with code 2; the verification functions reject their promises, as for malformed JSON. RFC 3161 manifest-digest generation uses the same input check. No normalized or re-signed replacement is produced.

The recognized asset-hash fields (asset.hash, asset.asset_hash_sha3_256, asset_hash) must contain identical 64-character lowercase hexadecimal digests when more than one is present. Empty, malformed or contradictory non-null values are rejected, and integrity is not reported as verified. Identical aliases are retained for compatibility. Null aliases retain the historical meaning of no hash; a null canonical asset.hash remains subject to its base-schema constraint. These rules do not modify the published schemas.

A declared hash without a supplied file is not_checked with a warning, even when a catalogue marker is present. Fileless declarations without a declared hash remain not_applicable. The committed tests exercise WebCrypto under Node. Additional local UI checks passed in Chrome, Firefox and Playwright WebKit; these are not an independent implementation or a Safari application test. Declared calendar/offset checks and issuer-identifier comparisons are separate local policy; see INTEGRATORS.md. Registry provenance/freshness, trusted issuance time and independent implementation review remain open.