@nexart/cli 0.12.2 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,88 @@
1
1
  # @nexart/cli — Changelog
2
2
 
3
+ ## v0.15.0 (2026-06-17) — `verify-record` (full CER record + timestamp verification)
4
+
5
+ Additive feature. No breaking changes. `verify-bundle` is byte-for-byte unchanged.
6
+
7
+ - **New:** `nexart verify-record <file>` verifies a **full CER record** — the
8
+ self-contained envelope `{ bundle, verification: { receipt, receiptSignature },
9
+ timestamp?: { token } }` a relying party receives — rather than a bare bundle. It
10
+ lifts `verification.receipt` / `verification.receiptSignature` onto the bundle and
11
+ runs the **same** integrity + signature checks as `verify-bundle`, reusing the
12
+ identical internal verifier (`standaloneVerify.ts`, `node:crypto`-only) — **no
13
+ duplicated cryptography**.
14
+ - **Timestamp precedence:** a record-level `timestamp.token` is verified in
15
+ preference to any token embedded in the bundle (`trustedTimestamps[]` / singular
16
+ `timestamp`); when the record omits it, the embedded token is used.
17
+ - **Strictly additive / non-negotiable invariants (identical to `verify-bundle`):**
18
+ the optional RFC 3161 timestamp layer never modifies `certificateHash`, is never
19
+ canonicalised, and **never affects the Integrity/Signature results or the process
20
+ exit code** — which remains `0` only when integrity passes and the signature is not
21
+ invalid, `1` otherwise. The ASN.1 stack (`pkijs` / `asn1js`) and the TSA module are
22
+ loaded **only** under `--verify-timestamp`. TSA operational errors (e.g. an
23
+ unreadable `--tsa-roots`) are mapped to a timestamp *status* and never crash or
24
+ change the exit code.
25
+ - **Flags & output:** `--public-key`, `--kid`, `--json`, `--verbose`,
26
+ `--verify-timestamp`, `--tsa-roots` — all identical to `verify-bundle`, with the
27
+ same human-readable and `--json` shapes (shared render path).
28
+ - **Tests:** added `record.test.ts` (7 cases) covering integrity pass/fail,
29
+ signature pass/skipped, the record-vs-bundle timestamp precedence, a verified
30
+ timestamp, and an operational TSA error leaving Integrity/exit-code untouched.
31
+ - **Docs:** new README section *"Verifying a full CER record (`nexart
32
+ verify-record`)"*.
33
+
34
+ ## v0.14.0 (2026-06-17) — clearer `verify-bundle` timestamp output
35
+
36
+ Product polish for the optional RFC 3161 timestamp verification shipped in v0.13.0.
37
+ **Strictly additive and behaviour-preserving:** `certificateHash`, canonicalisation,
38
+ the signature check, the Integrity/Signature results, and the process exit code are
39
+ all byte-for-byte unchanged, and the ASN.1 stack (`pkijs`/`asn1js`) is still loaded
40
+ **only** when `--verify-timestamp` is used.
41
+
42
+ - **Clearer wording.** The timestamp line now reads `✔ Externally anchored
43
+ timestamp: valid` (and `invalid (…)` / `untrusted (unknown root)` / `present (not
44
+ verified)` / `not present`), making explicit that the check proves anchoring to an
45
+ *independent* time authority rather than an internal clock.
46
+ - **New Timestamp Details block.** When a token is actually verified, the
47
+ human-readable output now adds a `Timestamp Details:` block showing the **Provider**,
48
+ the token's **Time** (`genTime`, sub-second precision stripped), and whether the
49
+ message **Imprint** matched the bundle's `certificateHash`. The block is suppressed
50
+ when no verification was attempted (flag absent, no token, or an operational error
51
+ such as an unreadable `--tsa-roots`), so it never reports a misleading imprint state.
52
+ - **Tests:** added an imprint-mismatch case — a real TSA token minted over a
53
+ *different* digest — at both the verifier and CLI layers, asserting `invalid
54
+ (imprint mismatch)` while Integrity stays `PASS` and the exit code stays `0`.
55
+
56
+ ## v0.13.0 (2026-06-16) — optional RFC 3161 timestamp verification for `verify-bundle`
57
+
58
+ Additive feature. No breaking changes. Existing `verify-bundle` behavior is
59
+ byte-for-byte unchanged unless you opt in with `--verify-timestamp`.
60
+
61
+ - **New:** `nexart verify-bundle --verify-timestamp [--tsa-roots <pem>]` performs
62
+ an **offline** RFC 3161 TimeStampToken verification when a bundle carries one
63
+ (in `trustedTimestamps[]` or a singular `timestamp`). It checks, in order: the
64
+ TSA's CMS signature over the embedded `TSTInfo`; that the token's message
65
+ imprint equals the bundle's `certificateHash` digest; that the TSA signing
66
+ certificate chains to a trusted root supplied via `--tsa-roots`; that the
67
+ certificate is valid at the timestamp; and that the timestamp is at or after
68
+ `createdAt`.
69
+ - **Strictly additive / non-negotiable invariants:** the timestamp layer never
70
+ modifies `certificateHash`, is never included in canonicalisation, and **never
71
+ affects the Integrity or Signature results or the process exit code.** The exit
72
+ code remains a function of integrity + signature alone.
73
+ - **Dependency-light by default:** the ASN.1 stack (`pkijs` / `asn1js`) is
74
+ dynamically imported **only** when `--verify-timestamp` is used. Ordinary
75
+ integrity/signature verification loads nothing new, and `standaloneVerify.ts`
76
+ remains `node:crypto`-only and auditable.
77
+ - **Output:** a new line — `✔ Timestamp (RFC3161): VALID (<tsa>)`, or `INVALID
78
+ (signature | imprint mismatch | expired | time | malformed token)`, `UNTRUSTED
79
+ (unknown root)`, `PRESENT (not verified)` (token present, flag absent), or
80
+ `NOT PRESENT`. `--json` gains an additive, informational `timestamp` object.
81
+ - **Tests:** cross-implementation interop fixtures (OpenSSL-produced token,
82
+ pkijs-based verifier) cover valid, tampered, wrong-imprint, missing/untrusted
83
+ root, expired, time-inconsistent, malformed, present-unverified, and not-present
84
+ cases, plus CLI integration asserting integrity/exit-code are untouched.
85
+
3
86
  ## v0.12.2 (2026-06-15) — bump core to `@nexart/ai-execution@^0.23.0`
4
87
 
5
88
  Dependency alignment. No command behavior changes, no breaking changes.
package/README.md CHANGED
@@ -660,6 +660,9 @@ nexart verify-bundle cer.json --public-key node-keys.json --json
660
660
 
661
661
  # Show every intermediate step (canonical mode, byte counts, hashes)
662
662
  nexart verify-bundle cer.json --public-key node-keys.json --verbose
663
+
664
+ # Additionally verify an embedded RFC 3161 timestamp against trusted TSA roots
665
+ nexart verify-bundle cer.json --verify-timestamp --tsa-roots tsa-roots.pem
663
666
  ```
664
667
 
665
668
  ### What it checks
@@ -687,6 +690,22 @@ nexart verify-bundle cer.json --public-key node-keys.json --verbose
687
690
  If a signature is not present, integrity can still pass, but authenticity is
688
691
  not established.
689
692
 
693
+ 3. **Timestamp (RFC 3161)** *(optional, additive — `--verify-timestamp`)* — when
694
+ the bundle carries an RFC 3161 TimeStampToken (in `trustedTimestamps[]` or a
695
+ singular `timestamp`), this **offline** check confirms the token anchors the
696
+ bundle to a point in time. It verifies, in order: (1) the TSA's CMS signature
697
+ over the embedded `TSTInfo`; (2) that the token's message imprint equals the
698
+ bundle's `certificateHash` digest; (3) that the TSA signing certificate chains
699
+ to a root supplied via `--tsa-roots`; (4) that the certificate is valid at the
700
+ timestamp; and (5) that the timestamp is at or after the bundle's `createdAt`.
701
+
702
+ This layer is **strictly additive**: it never modifies `certificateHash`, is
703
+ never included in canonicalisation, and **never affects the Integrity or
704
+ Signature results or the exit code**. The ASN.1 stack (`pkijs`) is loaded
705
+ **only** when `--verify-timestamp` is passed — ordinary verification stays
706
+ dependency-light. Without the flag, an existing timestamp is reported as
707
+ `present (not verified)`; with no timestamp at all, `not present`.
708
+
690
709
  ### Output
691
710
 
692
711
  Human-readable (default):
@@ -695,6 +714,32 @@ Human-readable (default):
695
714
  ✔ Integrity: PASS
696
715
  ✔ Signature: PASS
697
716
  Protocol: 1.3.0
717
+ ✔ Externally anchored timestamp: valid
718
+
719
+ Timestamp Details:
720
+ Provider: freeTSA
721
+ Time: 2026-06-17T10:52:12Z
722
+ Imprint: match
723
+ ```
724
+
725
+ The phrasing — **"externally anchored timestamp"** — reflects that the check
726
+ proves the bundle was anchored to an *independent* time authority, not an internal
727
+ clock. When a token was actually verified, a **Timestamp Details** block follows
728
+ with the provider, the token's `genTime` (sub-second precision stripped), and
729
+ whether the message imprint matched the bundle's `certificateHash`.
730
+
731
+ The status line is one of:
732
+
733
+ ```
734
+ ✔ Externally anchored timestamp: valid
735
+ ✖ Externally anchored timestamp: invalid (signature)
736
+ ✖ Externally anchored timestamp: invalid (imprint mismatch)
737
+ ✖ Externally anchored timestamp: untrusted (unknown root)
738
+ ✖ Externally anchored timestamp: invalid (expired)
739
+ ✖ Externally anchored timestamp: invalid (time)
740
+ ✖ Externally anchored timestamp: invalid (malformed token)
741
+ ○ Externally anchored timestamp: present (not verified) # token present, flag absent
742
+ ○ Externally anchored timestamp: not present # no token in the bundle
698
743
  ```
699
744
 
700
745
  Machine-readable (`--json`):
@@ -704,13 +749,15 @@ Machine-readable (`--json`):
704
749
  "status": "verified",
705
750
  "integrity": "pass",
706
751
  "signature": "pass",
707
- "protocolVersion": "1.3.0"
752
+ "protocolVersion": "1.3.0",
753
+ "timestamp": { "status": "valid", "tsa": "freeTSA", "genTime": "2026-06-17T10:52:12.000Z" }
708
754
  }
709
755
  ```
710
756
 
711
757
  `status` is `verified` when integrity passes and the signature is not invalid
712
- (`pass` or `skipped`); otherwise it is `failed`. The process exits `0` when
713
- verified and `1` otherwise, so it is safe to use in CI.
758
+ (`pass` or `skipped`); otherwise it is `failed`. The `timestamp` field is always
759
+ present and purely informational **it never changes `status` or the exit code.**
760
+ The process exits `0` when verified and `1` otherwise, so it is safe to use in CI.
714
761
 
715
762
  **Options:**
716
763
  | Flag | Default | Description |
@@ -719,6 +766,8 @@ verified and `1` otherwise, so it is safe to use in CI.
719
766
  | `--kid` | — | Key id to select when `--public-key` is a `NodeKeysDocument`. Strict — if the requested kid is absent, the signature **fails closed** (no fallback to another key) |
720
767
  | `--json` | `false` | Emit a machine-readable result |
721
768
  | `--verbose` | `false` | Print intermediate verification steps |
769
+ | `--verify-timestamp` | `false` | Additionally verify an embedded RFC 3161 timestamp (offline; never affects the exit code) |
770
+ | `--tsa-roots` | — | Path to trusted TSA root certificate(s) (PEM) used by `--verify-timestamp`. Without trusted roots, a present token reports `UNTRUSTED` |
722
771
 
723
772
  > **Note on the command name.** This command is named `verify-bundle` rather than
724
773
  > `verify` because `nexart verify <snapshot>` already exists for Code Mode
@@ -731,6 +780,56 @@ verified and `1` otherwise, so it is safe to use in CI.
731
780
 
732
781
  ---
733
782
 
783
+ ## Verifying a full CER record (`nexart verify-record`)
784
+
785
+ `nexart verify-record` verifies a **full CER record** — the self-contained
786
+ envelope a relying party receives — rather than a bare bundle. A record bundles
787
+ the evidentiary payload together with its signed node attestation receipt and an
788
+ optional externally anchored timestamp:
789
+
790
+ ```jsonc
791
+ {
792
+ "bundle": { /* the cer.ai.execution.v1 bundle */ },
793
+ "verification": {
794
+ "receipt": { /* signed node attestation receipt */ },
795
+ "receiptSignature": "base64url-ed25519-signature"
796
+ },
797
+ "timestamp": { "token": "base64-rfc3161-timestamptoken" } // optional
798
+ }
799
+ ```
800
+
801
+ **How it differs from `verify-bundle`.** `verify-bundle` takes a bundle whose
802
+ receipt and signature are already embedded inside it. `verify-record` accepts the
803
+ record envelope above, lifts `verification.receipt` / `verification.receiptSignature`
804
+ onto the bundle, and then runs the **exact same** integrity + signature checks as
805
+ `verify-bundle` (it reuses the identical internal verifier — no duplicated crypto).
806
+ The record-level `timestamp.token` takes precedence over any token embedded in the
807
+ bundle; if the record omits it, an embedded `trustedTimestamps[]` / `timestamp` is
808
+ used instead. Everything else — flags, output, exit-code semantics — is identical
809
+ to `verify-bundle`.
810
+
811
+ ```bash
812
+ # Integrity + signature of a full record (offline)
813
+ nexart verify-record record.json --public-key node-keys.json
814
+
815
+ # Machine-readable output
816
+ nexart verify-record record.json --public-key node-keys.json --json
817
+
818
+ # Additionally verify the record's RFC 3161 timestamp against trusted TSA roots
819
+ nexart verify-record record.json --public-key node-keys.json \
820
+ --verify-timestamp --tsa-roots tsa-roots.pem
821
+ ```
822
+
823
+ The **Integrity**, **Signature**, **Timestamp** semantics, the human-readable and
824
+ `--json` shapes, and the option table are all exactly as documented for
825
+ [`verify-bundle`](#independent-verification-nexart-verify-bundle) above. The
826
+ timestamp layer is, identically, **strictly additive**: `pkijs` is loaded **only**
827
+ under `--verify-timestamp`, and the timestamp result **never** affects the
828
+ Integrity/Signature outcome or the process exit code (which is `0` only when
829
+ integrity passes and the signature is not invalid, `1` otherwise).
830
+
831
+ ---
832
+
734
833
  ### `nexart ai project-verify` (v0.7.0+)
735
834
 
736
835
  Verify a **project bundle** (`cer.project.bundle.v1`) locally. No network required. Delegates all verification logic to `verifyProjectBundle()` from `@nexart/ai-execution` — the canonical source of truth for project bundle semantics. The CLI provides the command surface and output formatting.
package/dist/index.d.ts CHANGED
@@ -214,7 +214,43 @@ export declare function verifyBundleStandaloneCommand(file: string, opts: {
214
214
  kid?: string;
215
215
  json?: boolean;
216
216
  verbose?: boolean;
217
- }): StandaloneVerifyResult;
217
+ verifyTimestamp?: boolean;
218
+ tsaRoots?: string;
219
+ }): Promise<StandaloneVerifyResult>;
220
+ /**
221
+ * nexart verify-record — Verify a full NexArt CER RECORD offline and independently.
222
+ *
223
+ * A "record" is the full verification envelope: { bundle, verification: { receipt,
224
+ * receiptSignature }, timestamp? }. This command is STRICTLY ADDITIVE alongside
225
+ * `verify-bundle` and reuses the exact same engine:
226
+ * - INTEGRITY + SIGNATURE: the record's `verification.receipt` /
227
+ * `verification.receiptSignature` are merged into a SHALLOW copy of `bundle`
228
+ * (which never affects the recomputed certificateHash — receipt/signature are
229
+ * not part of the certificate payload) and handed to verifyBundleStandalone().
230
+ * Behaviour, including --public-key / --kid, is identical to verify-bundle.
231
+ * - TIMESTAMP (optional, additive): the record-level `timestamp.token` (or a
232
+ * bundle-embedded timestamp) is verified via the same resolveTimestampResult()
233
+ * path used by verify-bundle. It NEVER affects integrity, signature, or the
234
+ * exit code, and the ASN.1 stack loads only behind --verify-timestamp.
235
+ */
236
+ export declare function verifyRecordStandaloneCommand(file: string, opts: {
237
+ publicKey?: string;
238
+ kid?: string;
239
+ json?: boolean;
240
+ verbose?: boolean;
241
+ verifyTimestamp?: boolean;
242
+ tsaRoots?: string;
243
+ }): Promise<StandaloneVerifyResult>;
244
+ /**
245
+ * Render the human-readable timestamp STATUS line WITHOUT importing the ASN.1 stack.
246
+ * This deliberately mirrors formatTsaLine() in tsaVerify.ts but lives here so the
247
+ * present-unverified / not-present paths never load pkijs (non-negotiable: ASN.1
248
+ * libs are only loaded behind --verify-timestamp). The wording — "Externally
249
+ * anchored timestamp" — reflects that we are proving anchoring to an INDEPENDENT
250
+ * authority, not running an internal check. Provider/time/imprint are surfaced
251
+ * separately in the Timestamp Details block (formatTimestampDetails).
252
+ */
253
+ export declare function formatTimestampLine(status: import('./tsaVerify.js').TsaStatus): string;
218
254
  /**
219
255
  * nexart ai project-verify — Read a cer.project.bundle.v1 JSON from file or stdin,
220
256
  * delegate all verification to verifyProjectBundle() from @nexart/ai-execution,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAcH,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,cAAc,IAAI,iBAAiB,EAqBpC,MAAM,sBAAsB,CAAC;AAi0B9B;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAerD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,OAAO,CAAC,CA0BlB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB5C;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE,CAwB9D;AAoED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,EACD,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EACD,OAAO,GAAE,OAAO,KAAwB,EACxC,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EACD,OAAO,GAAE,OAAO,KAAwB,EACxC,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CA8Df;AAqCD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAChE,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CA+Hf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7D,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,sBAAsB,CAyDxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EACvB,WAAW,GAAE,MAAM,OAAO,CAAC,MAAM,CAAiB,GACjD,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}