T12 Validation — Canonical Signing Pipeline
T12 Validation — Canonical Signing Pipeline
Gate: corepack pnpm@10.34.5 gate:security
Result: 21 unit/property, 19 security, 10 architecture, and 248 retained qualification cases passed; 0 failed, 0 skipped, 0 todo. Format, lint, strict TypeScript, and build passed.
SPEC_DEVIATION: none.
Check A — Sufficient coverage
| Criterion | Assertion evidence | Spec outcome | Covered |
|---|---|---|---|
| RFC 8785 / I-JSON | evidence-integrity.test.mjs:25–72 |
Recursive UTF-16 ordering, ECMAScript number/string serialization, no normalization, and invalid I-JSON rejection | Yes |
| Cross-runtime fixture | evidence-integrity.test.mjs:75–79 |
Frozen canonical bytes produce exact SHA-256 a6b95a…68a5 |
Yes |
| Digest properties | evidence-integrity.test.mjs:81–110 |
Insertion-order invariance and leaf-change discrimination | Yes |
| Private-key boundary and purpose | evidence-integrity.test.mjs:112–131 |
Public SPKI reference only; unauthorized purpose cannot sign | Yes |
| Signed content address | evidence-integrity.test.mjs:133–173 |
Payload, schema, purpose, receiver binding, time, signer, and source state are bound | Yes |
| Positive and idempotent verification | evidence-tamper.test.mjs:36–49 |
Same artifact verifies repeatedly in the same context | Yes |
| Tamper and wrong key | evidence-tamper.test.mjs:52–109 |
Payload, digest, artifact ID, signature, unknown key, and impostor key fail closed | Yes |
| Purpose/schema/source/replay | evidence-tamper.test.mjs:112–169 |
Revocation, purpose, schema, source-state, and cross-context replay fail with stable codes | Yes |
| Trust validity and immutability | evidence-tamper.test.mjs:172–234 |
Not-yet-valid, expired, malformed, duplicate, and post-construction mutation cases fail safely | Yes |
Check B — Non-shallow
The tests call the production RFC 8785 canonicalizer, Node SHA-256 and Ed25519 implementations, actual SPKI export/import, content-address derivation, and the production trust verifier. Security cases mutate each signed layer independently and assert exact public error codes. The trust-root mutation test proves verification inputs are snapshotted rather than held by caller reference.
The JCS dependency is exact-pinned to canonicalize 3.0.0, the JavaScript implementation listed by RFC 8785 Appendix G. The pre-existing @tufjs/canonical-json dependency remains limited to TUF because it implements a different canonical JSON dialect and is not RFC 8785 compatible.
Check C — Necessary reverse mapping
| Test group | Maps to | Keep |
|---|---|---|
| JCS, fixture, digest, source-state invalidation | VES-SPC-004…005 | Yes |
| Signed envelope, purpose and receiver binding | VES-HOF-001/003 | Yes |
| Immutable trust snapshot and verification evidence | VES-RLS-005 | Yes |
| Tamper, wrong key, revocation, expiry, replay | T12 security done criterion | Yes |
Check D — Guidelines
Tests were authored before implementation. Canonical payloads remain JSON values; secrets and private keys are never serialized into artifacts or key references. Replay protection is explicit and portable: a byte-identical artifact is idempotent inside its declared binding, while reuse against another binding or source state is rejected without machine-local hidden state. The security and release gates now include unit tests so their claimed result cannot omit primitive-level security cases.
Adequacy verdict
PASS — all T12 criteria have executable evidence, 40 focused unit/property/security cases exceed the ≥25 threshold, the full security gate passed, and no test exceeds T12 scope.