@primust/artifact-core 1.2.0 → 1.3.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.
@@ -24,6 +24,33 @@ export interface CommitmentResult {
24
24
  hash: string;
25
25
  algorithm: CommitmentAlgorithm;
26
26
  }
27
+ /**
28
+ * Convert bytes to BN254 field elements.
29
+ * Each chunk of 31 bytes is interpreted as a big-endian unsigned integer
30
+ * to stay within the BN254 scalar field modulus.
31
+ *
32
+ * Underscore prefix marks this as an INTERNAL primitive shared with
33
+ * `hierarchical_leaf.ts`. Not exported from `index.ts` — not part of
34
+ * the public API surface. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
35
+ */
36
+ export declare function _bytesToFieldElements(input: Uint8Array): bigint[];
37
+ /**
38
+ * Poseidon2 sponge over a sequence of field elements.
39
+ * Absorbs pairs (left, right) in order; right=0n at odd tail.
40
+ * state' = poseidon2Hash([state + left, right]).
41
+ *
42
+ * Internal primitive shared with `hierarchical_leaf.ts`. Not exported
43
+ * from `index.ts`. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
44
+ */
45
+ export declare function _poseidon2Sponge(elements: bigint[]): bigint;
46
+ /**
47
+ * Parse a commitment hash string to extract the raw bigint value.
48
+ * Accepts both 'poseidon2:hex' and 'sha256:hex' formats.
49
+ *
50
+ * Internal primitive shared with `hierarchical_leaf.ts`. Not exported
51
+ * from `index.ts`. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
52
+ */
53
+ export declare function _parseHashToField(hash: string): bigint;
27
54
  /**
28
55
  * Compute a commitment hash over input bytes.
29
56
  *
@@ -1 +1 @@
1
- {"version":3,"file":"commitment.d.ts","sourceRoot":"","sources":["../src/commitment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI3E,kEAAkE;AAClE,eAAO,MAAM,cAAc,EAAG,KAAc,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,iFAAiF,CAAC;AAI5G,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,mBAAmB,CAAC;CAChC;AA6ED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,mBAAmB,GAC9B,gBAAgB,CAMlB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAMjE;AA4BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CASpG;AAuCD,4CAA4C;AAC5C,KAAK,SAAS,GACV,oBAAoB,GACpB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,uBAAuB,GACvB,sBAAsB,GACtB,2BAA2B,GAC3B,gBAAgB,GAChB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,SAAS,GACT,mBAAmB,GAEnB,UAAU,GACV,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,WAAW,CAAC;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CA6BjE"}
1
+ {"version":3,"file":"commitment.d.ts","sourceRoot":"","sources":["../src/commitment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI3E,kEAAkE;AAClE,eAAO,MAAM,cAAc,EAAG,KAAc,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,iFAAiF,CAAC;AAI5G,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAID;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAgBjE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ3D;AA8BD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAID;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,UAAU,EACjB,SAAS,CAAC,EAAE,mBAAmB,GAC9B,gBAAgB,CAMlB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAMjE;AA4BD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CASpG;AAuCD,4CAA4C;AAC5C,KAAK,SAAS,GACV,oBAAoB,GACpB,eAAe,GACf,qBAAqB,GACrB,eAAe,GACf,uBAAuB,GACvB,sBAAsB,GACtB,2BAA2B,GAC3B,gBAAgB,GAChB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,SAAS,GACT,mBAAmB,GAEnB,UAAU,GACV,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,WAAW,CAAC;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CA6BjE"}
@@ -27,8 +27,12 @@ export const BN254_MODULUS = 218882428718392752222464057452572750885483644004160
27
27
  * Convert bytes to BN254 field elements.
28
28
  * Each chunk of 31 bytes is interpreted as a big-endian unsigned integer
29
29
  * to stay within the BN254 scalar field modulus.
30
+ *
31
+ * Underscore prefix marks this as an INTERNAL primitive shared with
32
+ * `hierarchical_leaf.ts`. Not exported from `index.ts` — not part of
33
+ * the public API surface. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
30
34
  */
31
- function bytesToFieldElements(input) {
35
+ export function _bytesToFieldElements(input) {
32
36
  if (input.length === 0)
33
37
  return [0n];
34
38
  const elements = [];
@@ -44,19 +48,29 @@ function bytesToFieldElements(input) {
44
48
  return elements;
45
49
  }
46
50
  /**
47
- * Poseidon2 hash over arbitrary bytes.
48
- * Converts to field elements, then applies Poseidon2 sponge-style:
49
- * absorb pairs of elements, squeeze final hash.
51
+ * Poseidon2 sponge over a sequence of field elements.
52
+ * Absorbs pairs (left, right) in order; right=0n at odd tail.
53
+ * state' = poseidon2Hash([state + left, right]).
54
+ *
55
+ * Internal primitive shared with `hierarchical_leaf.ts`. Not exported
56
+ * from `index.ts`. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
50
57
  */
51
- function poseidon2(input) {
52
- const elements = bytesToFieldElements(input);
53
- // Sponge: absorb pairs of field elements
58
+ export function _poseidon2Sponge(elements) {
54
59
  let state = 0n;
55
60
  for (let i = 0; i < elements.length; i += 2) {
56
61
  const left = elements[i];
57
62
  const right = i + 1 < elements.length ? elements[i + 1] : 0n;
58
63
  state = poseidon2Hash([state + left, right]);
59
64
  }
65
+ return state;
66
+ }
67
+ /**
68
+ * Poseidon2 hash over arbitrary bytes.
69
+ * Converts to field elements, then applies Poseidon2 sponge-style:
70
+ * absorb pairs of elements, squeeze final hash.
71
+ */
72
+ function poseidon2(input) {
73
+ const state = _poseidon2Sponge(_bytesToFieldElements(input));
60
74
  return 'poseidon2:' + state.toString(16).padStart(64, '0');
61
75
  }
62
76
  /**
@@ -78,8 +92,11 @@ function poseidon2Pair(left, right) {
78
92
  /**
79
93
  * Parse a commitment hash string to extract the raw bigint value.
80
94
  * Accepts both 'poseidon2:hex' and 'sha256:hex' formats.
95
+ *
96
+ * Internal primitive shared with `hierarchical_leaf.ts`. Not exported
97
+ * from `index.ts`. See L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §3.6.
81
98
  */
82
- function parseHashToField(hash) {
99
+ export function _parseHashToField(hash) {
83
100
  const colonIdx = hash.indexOf(':');
84
101
  if (colonIdx === -1)
85
102
  throw new Error(`Invalid hash format: ${hash}`);
@@ -155,7 +172,7 @@ export function buildCommitmentRoot(hashes, algorithm) {
155
172
  return buildSha256MerkleRoot(hashes);
156
173
  }
157
174
  function buildPoseidon2MerkleRoot(hashes) {
158
- let layer = hashes.map(parseHashToField);
175
+ let layer = hashes.map(_parseHashToField);
159
176
  while (layer.length > 1) {
160
177
  const next = [];
161
178
  for (let i = 0; i < layer.length; i += 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"commitment.js","sourceRoot":"","sources":["../src/commitment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commitment.js","sourceRoot":"","sources":["../src/commitment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Primust Artifact Core — Hierarchical-ZK Canonical Encoder (L13 P3)
3
+ *
4
+ * Implements the leaf encoders specified in
5
+ * `followup/L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md` §3.6.
6
+ *
7
+ * This module is the language-independent encoding contract: TS (SDK +
8
+ * verifier) and Python (`primust-verify`) MUST produce byte-identical
9
+ * `poseidon2:<hex>` output for the same logical input. The parity test at
10
+ * §13 T-7 exercises shared fixtures against both implementations.
11
+ *
12
+ * No new crypto primitive is introduced — every step is a composition of
13
+ * `_bytesToFieldElements` + `_parseHashToField` + `_poseidon2Sponge` +
14
+ * the `poseidon2:` hex-format helper.
15
+ *
16
+ * Three leaf shapes are exposed:
17
+ *
18
+ * 1. `poseidon2HexRecordLeaf` (§4) — the 4-tuple per-record leaf hash
19
+ * (commitment_hash, check_result_u8, manifest_hash, sequence_index).
20
+ * Fed into `buildCommitmentRoot(record_leaves, 'poseidon2')` to
21
+ * obtain an action-unit's `action_unit_merkle_root`.
22
+ *
23
+ * 2. `poseidon2HexL1ActionUnitLeaf` (§3.1) — the 3-tuple action-unit
24
+ * leaf (action_unit_id, aggregated_result_u8, action_unit_merkle_root).
25
+ * Used as a run leaf when action_unit_count ≤ 64.
26
+ *
27
+ * 3. `poseidon2HexL2SuperUnitLeaf` (§3.2) — the 3-tuple super-unit
28
+ * leaf (super_unit_id, super_unit_aggregated_result_u8,
29
+ * super_unit_action_unit_merkle_root). Used as a run leaf when
30
+ * action_unit_count > 64. Identical math to L1; the circuit cannot
31
+ * tell L1 and L2 leaves apart.
32
+ */
33
+ /**
34
+ * Per-record leaf hash (§4). The 4-tuple feeds the per-action-unit
35
+ * Merkle fold whose root is the `action_unit_merkle_root` consumed by
36
+ * the L1/L2 leaf encoders below.
37
+ *
38
+ * Encoding (§3.6):
39
+ * elements = [
40
+ * parseHashToField(commitment_hash),
41
+ * BigInt(check_result_u8),
42
+ * parseHashToField(manifest_hash),
43
+ * BigInt(sequence_index),
44
+ * ]
45
+ * return 'poseidon2:' + sponge(elements).hex64
46
+ *
47
+ * @param commitmentHash must match `^(sha256|poseidon2):[0-9a-f]{64}$`.
48
+ * @param checkResultU8 0..255 (codec spec lives outside this module).
49
+ * @param manifestHash same shape as commitmentHash.
50
+ * @param sequenceIndex 0..BN254_MODULUS-1; bigint or number.
51
+ */
52
+ export declare function poseidon2HexRecordLeaf(commitmentHash: string, checkResultU8: number, manifestHash: string, sequenceIndex: bigint | number): string;
53
+ /**
54
+ * L1 action-unit leaf (§3.1). Used as a run leaf when
55
+ * action_unit_count ≤ 64.
56
+ *
57
+ * Encoding (§3.6):
58
+ * elements = concat(
59
+ * bytesToFieldElements(utf8(action_unit_id)),
60
+ * [BigInt(aggregated_result_u8)],
61
+ * [parseHashToField(action_unit_merkle_root)],
62
+ * )
63
+ * return 'poseidon2:' + sponge(elements).hex64
64
+ */
65
+ export declare function poseidon2HexL1ActionUnitLeaf(actionUnitId: string, aggregatedResultU8: number, actionUnitMerkleRoot: string): string;
66
+ /**
67
+ * L2 super-unit leaf (§3.2). Used as a run leaf when
68
+ * action_unit_count > 64. Identical math to L1; the circuit cannot
69
+ * distinguish the two leaf shapes.
70
+ */
71
+ export declare function poseidon2HexL2SuperUnitLeaf(superUnitId: string, superUnitAggregatedResultU8: number, superUnitActionUnitMerkleRoot: string): string;
72
+ //# sourceMappingURL=hierarchical_leaf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical_leaf.d.ts","sourceRoot":"","sources":["../src/hierarchical_leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAqEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,MAAM,CAQR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,EAC1B,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAOR;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,2BAA2B,EAAE,MAAM,EACnC,6BAA6B,EAAE,MAAM,GACpC,MAAM,CAOR"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Primust Artifact Core — Hierarchical-ZK Canonical Encoder (L13 P3)
3
+ *
4
+ * Implements the leaf encoders specified in
5
+ * `followup/L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md` §3.6.
6
+ *
7
+ * This module is the language-independent encoding contract: TS (SDK +
8
+ * verifier) and Python (`primust-verify`) MUST produce byte-identical
9
+ * `poseidon2:<hex>` output for the same logical input. The parity test at
10
+ * §13 T-7 exercises shared fixtures against both implementations.
11
+ *
12
+ * No new crypto primitive is introduced — every step is a composition of
13
+ * `_bytesToFieldElements` + `_parseHashToField` + `_poseidon2Sponge` +
14
+ * the `poseidon2:` hex-format helper.
15
+ *
16
+ * Three leaf shapes are exposed:
17
+ *
18
+ * 1. `poseidon2HexRecordLeaf` (§4) — the 4-tuple per-record leaf hash
19
+ * (commitment_hash, check_result_u8, manifest_hash, sequence_index).
20
+ * Fed into `buildCommitmentRoot(record_leaves, 'poseidon2')` to
21
+ * obtain an action-unit's `action_unit_merkle_root`.
22
+ *
23
+ * 2. `poseidon2HexL1ActionUnitLeaf` (§3.1) — the 3-tuple action-unit
24
+ * leaf (action_unit_id, aggregated_result_u8, action_unit_merkle_root).
25
+ * Used as a run leaf when action_unit_count ≤ 64.
26
+ *
27
+ * 3. `poseidon2HexL2SuperUnitLeaf` (§3.2) — the 3-tuple super-unit
28
+ * leaf (super_unit_id, super_unit_aggregated_result_u8,
29
+ * super_unit_action_unit_merkle_root). Used as a run leaf when
30
+ * action_unit_count > 64. Identical math to L1; the circuit cannot
31
+ * tell L1 and L2 leaves apart.
32
+ */
33
+ import { BN254_MODULUS, _bytesToFieldElements, _parseHashToField, _poseidon2Sponge, } from './commitment.js';
34
+ // ── Helpers ──────────────────────────────────────────────────────────
35
+ /** Format a BN254 field element as a poseidon2-prefixed 64-hex commitment. */
36
+ function _poseidon2Hex(field) {
37
+ return 'poseidon2:' + field.toString(16).padStart(64, '0');
38
+ }
39
+ /** UTF-8 encode a string to bytes — wrapped so behavior is one line per call. */
40
+ const _utf8Encoder = new TextEncoder();
41
+ function _utf8(value) {
42
+ return _utf8Encoder.encode(value);
43
+ }
44
+ /** Encode an unsigned 8-bit value as a single field element. */
45
+ function _encodeU8(value, fieldName) {
46
+ if (!Number.isInteger(value) || value < 0 || value > 255) {
47
+ throw new Error(`${fieldName} must be an integer in [0, 255]; got ${value}`);
48
+ }
49
+ return BigInt(value);
50
+ }
51
+ /**
52
+ * Encode a u64 sequence index as a single field element.
53
+ *
54
+ * Rejects JS `number` values that are not safe integers — per t_62bc
55
+ * correctness HOLD on PR #363: `BigInt(unsafeNumber)` silently rounds
56
+ * the value BEFORE conversion (`9007199254740993` → `9007199254740992`
57
+ * because JS already lost the bit), so a Python caller that passes the
58
+ * exact integer would produce a different field element than a JS
59
+ * caller passing the same numeric literal. To preserve TS↔Python
60
+ * parity, the encoder requires either a `bigint` or a safe-integer
61
+ * `number`.
62
+ */
63
+ function _encodeU64(value, fieldName) {
64
+ if (typeof value === 'number') {
65
+ if (!Number.isInteger(value)) {
66
+ throw new Error(`${fieldName} must be an integer; got ${value}`);
67
+ }
68
+ if (!Number.isSafeInteger(value)) {
69
+ throw new Error(`${fieldName} number ${value} exceeds Number.MAX_SAFE_INTEGER ` +
70
+ `(${Number.MAX_SAFE_INTEGER}); pass a bigint to avoid silent ` +
71
+ 'rounding (TS↔Python parity)');
72
+ }
73
+ }
74
+ const v = typeof value === 'bigint' ? value : BigInt(value);
75
+ if (v < 0n)
76
+ throw new Error(`${fieldName} must be non-negative; got ${v}`);
77
+ if (v >= BN254_MODULUS) {
78
+ throw new Error(`${fieldName} must be < BN254_MODULUS; got ${v} (exceeds field)`);
79
+ }
80
+ return v;
81
+ }
82
+ // ── Public API ───────────────────────────────────────────────────────
83
+ /**
84
+ * Per-record leaf hash (§4). The 4-tuple feeds the per-action-unit
85
+ * Merkle fold whose root is the `action_unit_merkle_root` consumed by
86
+ * the L1/L2 leaf encoders below.
87
+ *
88
+ * Encoding (§3.6):
89
+ * elements = [
90
+ * parseHashToField(commitment_hash),
91
+ * BigInt(check_result_u8),
92
+ * parseHashToField(manifest_hash),
93
+ * BigInt(sequence_index),
94
+ * ]
95
+ * return 'poseidon2:' + sponge(elements).hex64
96
+ *
97
+ * @param commitmentHash must match `^(sha256|poseidon2):[0-9a-f]{64}$`.
98
+ * @param checkResultU8 0..255 (codec spec lives outside this module).
99
+ * @param manifestHash same shape as commitmentHash.
100
+ * @param sequenceIndex 0..BN254_MODULUS-1; bigint or number.
101
+ */
102
+ export function poseidon2HexRecordLeaf(commitmentHash, checkResultU8, manifestHash, sequenceIndex) {
103
+ const elements = [
104
+ _parseHashToField(commitmentHash),
105
+ _encodeU8(checkResultU8, 'checkResultU8'),
106
+ _parseHashToField(manifestHash),
107
+ _encodeU64(sequenceIndex, 'sequenceIndex'),
108
+ ];
109
+ return _poseidon2Hex(_poseidon2Sponge(elements));
110
+ }
111
+ /**
112
+ * L1 action-unit leaf (§3.1). Used as a run leaf when
113
+ * action_unit_count ≤ 64.
114
+ *
115
+ * Encoding (§3.6):
116
+ * elements = concat(
117
+ * bytesToFieldElements(utf8(action_unit_id)),
118
+ * [BigInt(aggregated_result_u8)],
119
+ * [parseHashToField(action_unit_merkle_root)],
120
+ * )
121
+ * return 'poseidon2:' + sponge(elements).hex64
122
+ */
123
+ export function poseidon2HexL1ActionUnitLeaf(actionUnitId, aggregatedResultU8, actionUnitMerkleRoot) {
124
+ const elements = [
125
+ ..._bytesToFieldElements(_utf8(actionUnitId)),
126
+ _encodeU8(aggregatedResultU8, 'aggregatedResultU8'),
127
+ _parseHashToField(actionUnitMerkleRoot),
128
+ ];
129
+ return _poseidon2Hex(_poseidon2Sponge(elements));
130
+ }
131
+ /**
132
+ * L2 super-unit leaf (§3.2). Used as a run leaf when
133
+ * action_unit_count > 64. Identical math to L1; the circuit cannot
134
+ * distinguish the two leaf shapes.
135
+ */
136
+ export function poseidon2HexL2SuperUnitLeaf(superUnitId, superUnitAggregatedResultU8, superUnitActionUnitMerkleRoot) {
137
+ const elements = [
138
+ ..._bytesToFieldElements(_utf8(superUnitId)),
139
+ _encodeU8(superUnitAggregatedResultU8, 'superUnitAggregatedResultU8'),
140
+ _parseHashToField(superUnitActionUnitMerkleRoot),
141
+ ];
142
+ return _poseidon2Hex(_poseidon2Sponge(elements));
143
+ }
144
+ //# sourceMappingURL=hierarchical_leaf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical_leaf.js","sourceRoot":"","sources":["../src/hierarchical_leaf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,wEAAwE;AAExE,8EAA8E;AAC9E,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,iFAAiF;AACjF,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;AACvC,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAAC,KAAa,EAAE,SAAiB;IACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,wCAAwC,KAAK,EAAE,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,UAAU,CAAC,KAAsB,EAAE,SAAiB;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,WAAW,KAAK,mCAAmC;gBAC7D,IAAI,MAAM,CAAC,gBAAgB,mCAAmC;gBAC9D,6BAA6B,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,8BAA8B,CAAC,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,iCAAiC,CAAC,kBAAkB,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,wEAAwE;AAExE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,aAAqB,EACrB,YAAoB,EACpB,aAA8B;IAE9B,MAAM,QAAQ,GAAG;QACf,iBAAiB,CAAC,cAAc,CAAC;QACjC,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC;QACzC,iBAAiB,CAAC,YAAY,CAAC;QAC/B,UAAU,CAAC,aAAa,EAAE,eAAe,CAAC;KAC3C,CAAC;IACF,OAAO,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,YAAoB,EACpB,kBAA0B,EAC1B,oBAA4B;IAE5B,MAAM,QAAQ,GAAG;QACf,GAAG,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC7C,SAAS,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;QACnD,iBAAiB,CAAC,oBAAoB,CAAC;KACxC,CAAC;IACF,OAAO,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,WAAmB,EACnB,2BAAmC,EACnC,6BAAqC;IAErC,MAAM,QAAQ,GAAG;QACf,GAAG,qBAAqB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,SAAS,CAAC,2BAA2B,EAAE,6BAA6B,CAAC;QACrE,iBAAiB,CAAC,6BAA6B,CAAC;KACjD,CAAC;IACF,OAAO,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * T-7 cross-language parity tests for the L13 P3 canonical encoder.
3
+ *
4
+ * The golden fixtures at `schemas/golden/hierarchical_leaf_vectors.json`
5
+ * are produced by the Python encoder and asserted byte-for-byte by both
6
+ * Python and TS test suites. A drift between TS and Python on any fixture
7
+ * means a sealed VPEC's verifier-side root recompute will diverge from the
8
+ * SDK-side root emission — i.e. proofs that the SDK generates will not
9
+ * verify.
10
+ *
11
+ * Per merged design doc:
12
+ * followup/L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §13 T-7.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=hierarchical_leaf.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical_leaf.test.d.ts","sourceRoot":"","sources":["../src/hierarchical_leaf.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * T-7 cross-language parity tests for the L13 P3 canonical encoder.
3
+ *
4
+ * The golden fixtures at `schemas/golden/hierarchical_leaf_vectors.json`
5
+ * are produced by the Python encoder and asserted byte-for-byte by both
6
+ * Python and TS test suites. A drift between TS and Python on any fixture
7
+ * means a sealed VPEC's verifier-side root recompute will diverge from the
8
+ * SDK-side root emission — i.e. proofs that the SDK generates will not
9
+ * verify.
10
+ *
11
+ * Per merged design doc:
12
+ * followup/L13_STEP3_HIERARCHICAL_ZK_LEAF_DESIGN.md §13 T-7.
13
+ */
14
+ import { readFileSync } from 'node:fs';
15
+ import { resolve } from 'node:path';
16
+ import { describe, expect, it } from 'vitest';
17
+ import { BN254_MODULUS } from './commitment.js';
18
+ import { poseidon2HexL1ActionUnitLeaf, poseidon2HexL2SuperUnitLeaf, poseidon2HexRecordLeaf, } from './hierarchical_leaf.js';
19
+ // ── Fixture loading ──────────────────────────────────────────────────
20
+ const vectorsPath = resolve(__dirname, '../../../schemas/golden/hierarchical_leaf_vectors.json');
21
+ const VECTORS = JSON.parse(readFileSync(vectorsPath, 'utf-8'));
22
+ // ── record-leaf (§4 / §3.6) ──────────────────────────────────────────
23
+ describe('hierarchical_leaf / record leaf (§4)', () => {
24
+ for (const v of VECTORS.record_leaves) {
25
+ it(`golden vector — ${v.name}`, () => {
26
+ const actual = poseidon2HexRecordLeaf(v.inputs.commitment_hash, v.inputs.check_result_u8, v.inputs.manifest_hash, BigInt(v.inputs.sequence_index));
27
+ expect(actual).toBe(v.expected);
28
+ });
29
+ }
30
+ });
31
+ // ── L1 action-unit leaf (§3.1 / §3.6) ────────────────────────────────
32
+ describe('hierarchical_leaf / L1 action-unit leaf (§3.1)', () => {
33
+ for (const v of VECTORS.l1_action_unit_leaves) {
34
+ it(`golden vector — ${v.name}`, () => {
35
+ const actual = poseidon2HexL1ActionUnitLeaf(v.inputs.action_unit_id, v.inputs.aggregated_result_u8, v.inputs.action_unit_merkle_root);
36
+ expect(actual).toBe(v.expected);
37
+ });
38
+ }
39
+ });
40
+ // ── L2 super-unit leaf (§3.2 / §3.6) ─────────────────────────────────
41
+ describe('hierarchical_leaf / L2 super-unit leaf (§3.2)', () => {
42
+ for (const v of VECTORS.l2_super_unit_leaves) {
43
+ it(`golden vector — ${v.name}`, () => {
44
+ const actual = poseidon2HexL2SuperUnitLeaf(v.inputs.super_unit_id, v.inputs.super_unit_aggregated_result_u8, v.inputs.super_unit_action_unit_merkle_root);
45
+ expect(actual).toBe(v.expected);
46
+ });
47
+ }
48
+ });
49
+ // ── L1 / L2 indistinguishability invariant ───────────────────────────
50
+ describe('hierarchical_leaf / L1 == L2 indistinguishability (§3.2)', () => {
51
+ for (const v of VECTORS.l1_l2_indistinguishability) {
52
+ it(`circuit cannot distinguish L1 vs L2 — ${v.name}`, () => {
53
+ const l1 = poseidon2HexL1ActionUnitLeaf(v.inputs.id, v.inputs.result_u8, v.inputs.sub_root);
54
+ const l2 = poseidon2HexL2SuperUnitLeaf(v.inputs.id, v.inputs.result_u8, v.inputs.sub_root);
55
+ expect(l1).toBe(v.expected_l1);
56
+ expect(l2).toBe(v.expected_l2);
57
+ expect(l1).toBe(l2);
58
+ });
59
+ }
60
+ });
61
+ // ── Negative paths — input validation ────────────────────────────────
62
+ describe('hierarchical_leaf / validation', () => {
63
+ const VALID = 'poseidon2:' + 'a'.repeat(64);
64
+ it('rejects negative u8 in record leaf', () => {
65
+ expect(() => poseidon2HexRecordLeaf(VALID, -1, VALID, 0n)).toThrow(/checkResultU8/);
66
+ });
67
+ it('rejects u8 > 255 in record leaf', () => {
68
+ expect(() => poseidon2HexRecordLeaf(VALID, 256, VALID, 0n)).toThrow(/checkResultU8/);
69
+ });
70
+ it('rejects non-integer u8', () => {
71
+ expect(() => poseidon2HexRecordLeaf(VALID, 1.5, VALID, 0n)).toThrow(/checkResultU8/);
72
+ });
73
+ it('rejects negative sequence_index', () => {
74
+ expect(() => poseidon2HexRecordLeaf(VALID, 0, VALID, -1n)).toThrow(/sequenceIndex/);
75
+ });
76
+ it('rejects sequence_index overflowing BN254', () => {
77
+ expect(() => poseidon2HexRecordLeaf(VALID, 0, VALID, BN254_MODULUS)).toThrow(/sequenceIndex/);
78
+ });
79
+ it('rejects prefixless hash in L1 leaf', () => {
80
+ expect(() => poseidon2HexL1ActionUnitLeaf('au_x', 0, 'a'.repeat(64))).toThrow(/Invalid hash format/);
81
+ });
82
+ // t_62bc HOLD #2898 — unsafe-integer numeric sequenceIndex parity gap.
83
+ // JS BigInt() silently rounds a number above Number.MAX_SAFE_INTEGER
84
+ // BEFORE conversion, so the TS encoder would hash a different field
85
+ // element than the Python encoder for the same integer literal. The
86
+ // encoder must reject such values, forcing callers to pass a bigint.
87
+ it('rejects numeric sequenceIndex above Number.MAX_SAFE_INTEGER (T-7 parity gap)', () => {
88
+ // Number.MAX_SAFE_INTEGER + 2 is 9007199254740993 mathematically,
89
+ // but JS already loses the bit and stores it as 9007199254740992.
90
+ // The encoder must reject the value rather than silently encode
91
+ // the rounded number — Python would encode the exact integer
92
+ // 9007199254740993, so the TS↔Python parity breaks. The test
93
+ // demonstrates the encoder's rejection on a non-safe-integer
94
+ // numeric input.
95
+ const unsafe = Number.MAX_SAFE_INTEGER + 2;
96
+ expect(Number.isSafeInteger(unsafe)).toBe(false);
97
+ expect(() => poseidon2HexRecordLeaf(VALID, 0, VALID, unsafe)).toThrow(/exceeds Number\.MAX_SAFE_INTEGER|pass a bigint/);
98
+ });
99
+ it('rejects non-integer numeric sequenceIndex (defensive)', () => {
100
+ expect(() => poseidon2HexRecordLeaf(VALID, 0, VALID, 1.5)).toThrow(/must be an integer/);
101
+ });
102
+ it('accepts bigint sequenceIndex above Number.MAX_SAFE_INTEGER (parity path)', () => {
103
+ // The bigint path is the parity-correct way to encode a sequence
104
+ // index above 2**53-1 — TS encodes the exact field element, no
105
+ // rounding. (BN254_MODULUS upper bound still applies.)
106
+ const aboveSafe = BigInt(Number.MAX_SAFE_INTEGER) + 2n;
107
+ expect(() => poseidon2HexRecordLeaf(VALID, 0, VALID, aboveSafe)).not.toThrow();
108
+ });
109
+ });
110
+ // ── Encoding invariants spot-checks ──────────────────────────────────
111
+ describe('hierarchical_leaf / encoding invariants', () => {
112
+ const ROOT = 'poseidon2:' + '0'.repeat(64);
113
+ it('record leaf produces poseidon2:hex64 shape', () => {
114
+ const r = poseidon2HexRecordLeaf(ROOT, 0, ROOT, 0n);
115
+ expect(r.startsWith('poseidon2:')).toBe(true);
116
+ expect(r.length).toBe('poseidon2:'.length + 64);
117
+ });
118
+ it('L1 leaf produces poseidon2:hex64 shape', () => {
119
+ const r = poseidon2HexL1ActionUnitLeaf('au_x', 0, ROOT);
120
+ expect(r.startsWith('poseidon2:')).toBe(true);
121
+ expect(r.length).toBe('poseidon2:'.length + 64);
122
+ });
123
+ it('L2 leaf produces poseidon2:hex64 shape', () => {
124
+ const r = poseidon2HexL2SuperUnitLeaf('su_x', 0, ROOT);
125
+ expect(r.startsWith('poseidon2:')).toBe(true);
126
+ expect(r.length).toBe('poseidon2:'.length + 64);
127
+ });
128
+ it('record leaf is deterministic', () => {
129
+ const a = poseidon2HexRecordLeaf(ROOT, 4, ROOT, 42n);
130
+ const b = poseidon2HexRecordLeaf(ROOT, 4, ROOT, 42n);
131
+ expect(a).toBe(b);
132
+ });
133
+ it('different commitment_hash produces different leaf', () => {
134
+ const a = poseidon2HexRecordLeaf('sha256:' + 'a'.repeat(64), 0, ROOT, 0n);
135
+ const b = poseidon2HexRecordLeaf('sha256:' + 'b'.repeat(64), 0, ROOT, 0n);
136
+ expect(a).not.toBe(b);
137
+ });
138
+ it('sha256:HEX and poseidon2:HEX produce identical leaf (algorithm-agnostic-after-parse, per ZK ruling §3.2)', () => {
139
+ const hex = 'a'.repeat(64);
140
+ const a = poseidon2HexRecordLeaf('sha256:' + hex, 0, ROOT, 0n);
141
+ const b = poseidon2HexRecordLeaf('poseidon2:' + hex, 0, ROOT, 0n);
142
+ expect(a).toBe(b);
143
+ });
144
+ });
145
+ //# sourceMappingURL=hierarchical_leaf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hierarchical_leaf.test.js","sourceRoot":"","sources":["../src/hierarchical_leaf.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export { canonical } from './canonical.js';
2
2
  export { generateKeyPair, sign, verify, rotateKey, toBase64Url, fromBase64Url } from './signing.js';
3
3
  export { commit, commitOutput, buildCommitmentRoot, selectProofLevel, ZK_IS_BLOCKING, BN254_MODULUS, } from './commitment.js';
4
4
  export type { CommitmentResult } from './commitment.js';
5
+ export { poseidon2HexRecordLeaf, poseidon2HexL1ActionUnitLeaf, poseidon2HexL2SuperUnitLeaf, } from './hierarchical_leaf.js';
5
6
  export { validateArtifact } from './validate-artifact.js';
6
7
  export type { ValidationError, ValidationResult } from './validate-artifact.js';
7
8
  export type { SignerRecord, SignatureEnvelope, KeyStatus, RevocationReason, SignerType, } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,OAAO,EACP,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,IAAI,qBAAqB,EACjC,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,IAAI,iBAAiB,EAC7B,UAAU,IAAI,mBAAmB,GAClC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,OAAO,EACP,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,IAAI,qBAAqB,EACjC,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,IAAI,iBAAiB,EAC7B,UAAU,IAAI,mBAAmB,GAClC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  export { canonical } from './canonical.js';
3
3
  export { generateKeyPair, sign, verify, rotateKey, toBase64Url, fromBase64Url } from './signing.js';
4
4
  export { commit, commitOutput, buildCommitmentRoot, selectProofLevel, ZK_IS_BLOCKING, BN254_MODULUS, } from './commitment.js';
5
+ export { poseidon2HexRecordLeaf, poseidon2HexL1ActionUnitLeaf, poseidon2HexL2SuperUnitLeaf, } from './hierarchical_leaf.js';
5
6
  export { validateArtifact } from './validate-artifact.js';
6
7
  export { TAXONOMY_VERSION, REVERSIBILITY_CLASSES, isReversibilityClass, classify as classifyReversibility, isWedgeSurfaceCovered, } from './reversibility_taxonomy.js';
7
8
  export { MAPPING_VERSION, TRUST_EDGES, classify as classifyTrustEdge, knownKinds as knownTrustEdgeKinds, } from './trust_edge_mapping.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAoC1D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,IAAI,qBAAqB,EACjC,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,IAAI,iBAAiB,EAC7B,UAAU,IAAI,mBAAmB,GAClC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAoC1D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,QAAQ,IAAI,qBAAqB,EACjC,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,IAAI,iBAAiB,EAC7B,UAAU,IAAI,mBAAmB,GAClC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primust/artifact-core",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Canonical JSON, commitment hashing, and Ed25519 signing primitives for Primust.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",