@cello-protocol/crypto 0.0.19 → 0.0.21
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/dist/frost/frost-resharing.js +2 -2
- package/dist/frost/frost-resharing.js.map +1 -1
- package/dist/frost/stubs.d.ts +82 -0
- package/dist/frost/stubs.d.ts.map +1 -0
- package/dist/frost/stubs.js +157 -0
- package/dist/frost/stubs.js.map +1 -0
- package/dist/frost/types.d.ts +9 -10
- package/dist/frost/types.d.ts.map +1 -1
- package/dist/frost/types.js +9 -10
- package/dist/frost/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest-test-fixture.d.ts +7 -12
- package/dist/manifest-test-fixture.d.ts.map +1 -1
- package/dist/manifest-test-fixture.js +8 -13
- package/dist/manifest-test-fixture.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* FROST proactive share resharing (PSS)
|
|
2
|
+
* FROST proactive share resharing (PSS).
|
|
3
3
|
*
|
|
4
4
|
* Zero-constant-term proactive secret sharing (Herzberg, Jarecki, Krawczyk, Yung — "Proactive Secret
|
|
5
5
|
* Sharing", CRYPTO 1995), applied to the joint FROST/Ed25519 group key (RFC 9591 §C VSS commitments).
|
|
@@ -134,7 +134,7 @@ export function verifyRefreshContribution(commitment, signers) {
|
|
|
134
134
|
export function applyRefresh(oldKey, contributions, signers, expectedParticipantIds) {
|
|
135
135
|
const j = oldKey.secret.identifier;
|
|
136
136
|
const xj = identifierScalar(j);
|
|
137
|
-
// COMPLETENESS GATE
|
|
137
|
+
// COMPLETENESS GATE: a proactive refresh — like DKG — requires EVERY current shareholder
|
|
138
138
|
// to contribute exactly one δ. The applying party MUST verify the contribution set is the full agreed
|
|
139
139
|
// roster: no missing party (a partial set lands every party on a DIFFERENT polynomial Δ and silently
|
|
140
140
|
// destroys the joint key), no extra/duplicate sender (double-counts a δ), and not empty (a no-op refresh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frost-resharing.js","sourceRoot":"","sources":["../../src/frost/frost-resharing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"frost-resharing.js","sourceRoot":"","sources":["../../src/frost/frost-resharing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process directory node stubs for FROST tests.
|
|
3
|
+
*
|
|
4
|
+
* CELLO-CRYPTO-003
|
|
5
|
+
*
|
|
6
|
+
* These stubs mimic the behavior of a real directory node's /cello/frost/1.0.0
|
|
7
|
+
* protocol handler. They exercise the same ceremony protocol logic as real nodes
|
|
8
|
+
* but run in-process for fast, deterministic tests.
|
|
9
|
+
*
|
|
10
|
+
* Stub configuration options:
|
|
11
|
+
* - Normal: responds with valid partial signatures
|
|
12
|
+
* - Unreachable: node is not reachable at initiation (caught by pre-ceremony check)
|
|
13
|
+
* - Unresponsive: reachable at initiation, but signRound times out (returns null)
|
|
14
|
+
* - InvalidResponse: returns random bytes (simulates malformed partial sig)
|
|
15
|
+
*/
|
|
16
|
+
import type { FrostPublic, FrostSecret } from "@noble/curves/abstract/frost.js";
|
|
17
|
+
import type { DirectoryNodeStub, StubSignParams, StubCommitment } from "../frost/types.js";
|
|
18
|
+
export declare class InProcessDirectoryNodeStub implements DirectoryNodeStub {
|
|
19
|
+
#private;
|
|
20
|
+
readonly id: string;
|
|
21
|
+
constructor(id: string);
|
|
22
|
+
/**
|
|
23
|
+
* Receive a FROST signing share from the bootstrap ceremony.
|
|
24
|
+
* Called by bootstrapKeyShares during setup.
|
|
25
|
+
*/
|
|
26
|
+
receiveShare(secret: FrostSecret, pub: FrostPublic): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* TEST-ONLY: Return the stored FROST key pair for use by external test harnesses
|
|
29
|
+
* (e.g., to inject a share into a FrostDirectoryHandler via injectShareForTest).
|
|
30
|
+
*
|
|
31
|
+
* This deliberately exposes the raw FrostSecret for test setup purposes.
|
|
32
|
+
* MUST NOT be called outside of test code.
|
|
33
|
+
*/
|
|
34
|
+
getShareForTest(): {
|
|
35
|
+
secret: FrostSecret;
|
|
36
|
+
pub: FrostPublic;
|
|
37
|
+
} | null;
|
|
38
|
+
/**
|
|
39
|
+
* Mark this node as unreachable at ceremony initiation.
|
|
40
|
+
* isReachable() will return false, causing the coordinator to exclude
|
|
41
|
+
* this node before any rounds begin.
|
|
42
|
+
*/
|
|
43
|
+
setUnreachable(flag: boolean): void;
|
|
44
|
+
/**
|
|
45
|
+
* Mark this node as unresponsive during signing rounds.
|
|
46
|
+
* isReachable() returns true (node is connectable) but signRound returns null
|
|
47
|
+
* (simulates a timeout after connection is established).
|
|
48
|
+
*/
|
|
49
|
+
setUnresponsive(flag: boolean): void;
|
|
50
|
+
/** Make this stub return random bytes (simulate malformed partial sig) */
|
|
51
|
+
setInvalidResponse(flag: boolean): void;
|
|
52
|
+
/**
|
|
53
|
+
* Returns whether this node is reachable at ceremony initiation.
|
|
54
|
+
* The coordinator uses this for the pre-ceremony availability check:
|
|
55
|
+
* if fewer than `threshold` nodes are reachable, fail immediately
|
|
56
|
+
* with DIRECTORY_BELOW_THRESHOLD.
|
|
57
|
+
*/
|
|
58
|
+
isReachable(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Generate a nonce commitment for the next signing round.
|
|
61
|
+
* Called by the coordinator before collecting partial signatures.
|
|
62
|
+
* Caches the nonce scalars for use in signRound().
|
|
63
|
+
*/
|
|
64
|
+
generateCommitment(): Promise<StubCommitment>;
|
|
65
|
+
/**
|
|
66
|
+
* Participate in a signing round.
|
|
67
|
+
*
|
|
68
|
+
* Uses the nonce cached from the preceding generateCommitment() call.
|
|
69
|
+
* Returns a never-resolving Promise to simulate timeout (the coordinator's
|
|
70
|
+
* per-node timer will fire first). Returns random bytes to simulate
|
|
71
|
+
* an invalid partial sig.
|
|
72
|
+
*
|
|
73
|
+
* @returns Partial signature bytes, or a hanging Promise (simulate timeout)
|
|
74
|
+
*/
|
|
75
|
+
signRound(params: StubSignParams): Promise<Uint8Array | null>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create n in-process directory node stubs.
|
|
79
|
+
* Each stub has a unique deterministic ID.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createInProcessStubs(n: number): InProcessDirectoryNodeStub[];
|
|
82
|
+
//# sourceMappingURL=stubs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/frost/stubs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEZ,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACf,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,0BAA2B,YAAW,iBAAiB;;IAClE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAaR,EAAE,EAAE,MAAM;IAMtB;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE;;;;;;OAMG;IACH,eAAe,IAAI;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAMnE;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAInC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIpC,0EAA0E;IAC1E,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMvC;;;;;OAKG;IACH,WAAW,IAAI,OAAO;IAQtB;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;IAcnD;;;;;;;;;OASG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAyCpE;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAM5E"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process directory node stubs for FROST tests.
|
|
3
|
+
*
|
|
4
|
+
* CELLO-CRYPTO-003
|
|
5
|
+
*
|
|
6
|
+
* These stubs mimic the behavior of a real directory node's /cello/frost/1.0.0
|
|
7
|
+
* protocol handler. They exercise the same ceremony protocol logic as real nodes
|
|
8
|
+
* but run in-process for fast, deterministic tests.
|
|
9
|
+
*
|
|
10
|
+
* Stub configuration options:
|
|
11
|
+
* - Normal: responds with valid partial signatures
|
|
12
|
+
* - Unreachable: node is not reachable at initiation (caught by pre-ceremony check)
|
|
13
|
+
* - Unresponsive: reachable at initiation, but signRound times out (returns null)
|
|
14
|
+
* - InvalidResponse: returns random bytes (simulates malformed partial sig)
|
|
15
|
+
*/
|
|
16
|
+
import { ed25519_FROST } from "@noble/curves/ed25519.js";
|
|
17
|
+
import { randomBytes } from "@noble/hashes/utils.js";
|
|
18
|
+
// ─── InProcessDirectoryNodeStub ───────────────────────────────────────────────
|
|
19
|
+
export class InProcessDirectoryNodeStub {
|
|
20
|
+
id;
|
|
21
|
+
// Signing key — received via receiveShare() during bootstrap
|
|
22
|
+
#key = null;
|
|
23
|
+
// Behavior flags
|
|
24
|
+
// #unreachable: not reachable at initiation (isReachable() → false)
|
|
25
|
+
#unreachable = false;
|
|
26
|
+
// #unresponsive: reachable at initiation, but signRound returns null (timeout simulation)
|
|
27
|
+
#unresponsive = false;
|
|
28
|
+
// #invalidResponse: returns random bytes on signRound (malformed partial sig)
|
|
29
|
+
#invalidResponse = false;
|
|
30
|
+
constructor(id) {
|
|
31
|
+
this.id = id;
|
|
32
|
+
}
|
|
33
|
+
// ─── DirectoryNodeStub: receiveShare ─────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Receive a FROST signing share from the bootstrap ceremony.
|
|
36
|
+
* Called by bootstrapKeyShares during setup.
|
|
37
|
+
*/
|
|
38
|
+
async receiveShare(secret, pub) {
|
|
39
|
+
this.#key = { secret, pub };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* TEST-ONLY: Return the stored FROST key pair for use by external test harnesses
|
|
43
|
+
* (e.g., to inject a share into a FrostDirectoryHandler via injectShareForTest).
|
|
44
|
+
*
|
|
45
|
+
* This deliberately exposes the raw FrostSecret for test setup purposes.
|
|
46
|
+
* MUST NOT be called outside of test code.
|
|
47
|
+
*/
|
|
48
|
+
getShareForTest() {
|
|
49
|
+
return this.#key;
|
|
50
|
+
}
|
|
51
|
+
// ─── Test control methods ────────────────────────────────────────────────────
|
|
52
|
+
/**
|
|
53
|
+
* Mark this node as unreachable at ceremony initiation.
|
|
54
|
+
* isReachable() will return false, causing the coordinator to exclude
|
|
55
|
+
* this node before any rounds begin.
|
|
56
|
+
*/
|
|
57
|
+
setUnreachable(flag) {
|
|
58
|
+
this.#unreachable = flag;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Mark this node as unresponsive during signing rounds.
|
|
62
|
+
* isReachable() returns true (node is connectable) but signRound returns null
|
|
63
|
+
* (simulates a timeout after connection is established).
|
|
64
|
+
*/
|
|
65
|
+
setUnresponsive(flag) {
|
|
66
|
+
this.#unresponsive = flag;
|
|
67
|
+
}
|
|
68
|
+
/** Make this stub return random bytes (simulate malformed partial sig) */
|
|
69
|
+
setInvalidResponse(flag) {
|
|
70
|
+
this.#invalidResponse = flag;
|
|
71
|
+
}
|
|
72
|
+
// ─── DirectoryNodeStub interface ─────────────────────────────────────────────
|
|
73
|
+
/**
|
|
74
|
+
* Returns whether this node is reachable at ceremony initiation.
|
|
75
|
+
* The coordinator uses this for the pre-ceremony availability check:
|
|
76
|
+
* if fewer than `threshold` nodes are reachable, fail immediately
|
|
77
|
+
* with DIRECTORY_BELOW_THRESHOLD.
|
|
78
|
+
*/
|
|
79
|
+
isReachable() {
|
|
80
|
+
return !this.#unreachable;
|
|
81
|
+
}
|
|
82
|
+
// Cache the pending nonce between generateCommitment() and signRound()
|
|
83
|
+
// Per RFC 9591: nonces are one-time-use — consumed after signRound
|
|
84
|
+
#pendingNonce = null;
|
|
85
|
+
/**
|
|
86
|
+
* Generate a nonce commitment for the next signing round.
|
|
87
|
+
* Called by the coordinator before collecting partial signatures.
|
|
88
|
+
* Caches the nonce scalars for use in signRound().
|
|
89
|
+
*/
|
|
90
|
+
async generateCommitment() {
|
|
91
|
+
if (!this.#key) {
|
|
92
|
+
throw new Error(`Stub ${this.id} has no key share (not bootstrapped)`);
|
|
93
|
+
}
|
|
94
|
+
const nonce = ed25519_FROST.commit(this.#key.secret);
|
|
95
|
+
// Cache nonce scalars so signRound can use them
|
|
96
|
+
this.#pendingNonce = nonce.nonces;
|
|
97
|
+
return {
|
|
98
|
+
nodeId: this.id,
|
|
99
|
+
nonceCommitment: nonce.commitments,
|
|
100
|
+
nonces: nonce.nonces,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Participate in a signing round.
|
|
105
|
+
*
|
|
106
|
+
* Uses the nonce cached from the preceding generateCommitment() call.
|
|
107
|
+
* Returns a never-resolving Promise to simulate timeout (the coordinator's
|
|
108
|
+
* per-node timer will fire first). Returns random bytes to simulate
|
|
109
|
+
* an invalid partial sig.
|
|
110
|
+
*
|
|
111
|
+
* @returns Partial signature bytes, or a hanging Promise (simulate timeout)
|
|
112
|
+
*/
|
|
113
|
+
async signRound(params) {
|
|
114
|
+
// Unresponsive: simulate a node that never responds.
|
|
115
|
+
// Return a Promise that never resolves — the coordinator's roundTimeoutMs
|
|
116
|
+
// timer will fire first, treating this as a timeout.
|
|
117
|
+
if (this.#unresponsive) {
|
|
118
|
+
return new Promise(() => {
|
|
119
|
+
// intentionally never resolve — coordinator timeout fires instead
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (!this.#key) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
// InvalidResponse: return random bytes (not a valid partial sig)
|
|
126
|
+
if (this.#invalidResponse) {
|
|
127
|
+
return new Uint8Array(randomBytes(32));
|
|
128
|
+
}
|
|
129
|
+
// Use the nonce cached from generateCommitment()
|
|
130
|
+
if (!this.#pendingNonce) {
|
|
131
|
+
// No pending nonce — should not happen in normal ceremony flow
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const nonces = this.#pendingNonce;
|
|
135
|
+
this.#pendingNonce = null; // consume nonce (one-time use per RFC 9591)
|
|
136
|
+
try {
|
|
137
|
+
const sig = ed25519_FROST.signShare(this.#key.secret, params.pub, nonces, params.commitmentList, params.msg);
|
|
138
|
+
return sig;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// ─── createInProcessStubs ─────────────────────────────────────────────────────
|
|
146
|
+
/**
|
|
147
|
+
* Create n in-process directory node stubs.
|
|
148
|
+
* Each stub has a unique deterministic ID.
|
|
149
|
+
*/
|
|
150
|
+
export function createInProcessStubs(n) {
|
|
151
|
+
return Array.from({ length: n }, (_, i) => {
|
|
152
|
+
// Use a stable, deterministic ID that works as a FROST identifier input
|
|
153
|
+
const id = `cello-test-node-${i.toString().padStart(4, "0")}`;
|
|
154
|
+
return new InProcessDirectoryNodeStub(id);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=stubs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stubs.js","sourceRoot":"","sources":["../../src/frost/stubs.ts"],"names":[],"mappings":"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"}
|
package/dist/frost/types.d.ts
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FROST Threshold Signing Abstraction — Type Definitions
|
|
3
3
|
*
|
|
4
|
-
* CELLO-CRYPTO-003
|
|
5
|
-
*
|
|
6
4
|
* Design decisions:
|
|
7
5
|
* - `IThresholdSigner` is separate from `KeyProvider`. `KeyProvider` handles K_local
|
|
8
6
|
* envelope signing; `IThresholdSigner` handles the multi-party threshold ceremony.
|
|
9
7
|
* - Domain context strings (one per message-type this ceremony machinery signs):
|
|
10
8
|
* - "cello-frost-session-establishment-v1" — session establishment TBS
|
|
11
9
|
* - "cello-frost-seal-v1" — conversation seal TBS
|
|
12
|
-
* - "cello-frost-primary-release-v1" —
|
|
10
|
+
* - "cello-frost-primary-release-v1" — device-transfer release attestation
|
|
13
11
|
* - Context is prepended to the TBS before signing to achieve domain separation.
|
|
14
12
|
* FROST over ed25519 does not support a native context parameter, so we use
|
|
15
13
|
* a framed encoding: `<context>\0<tbs>`.
|
|
@@ -19,13 +17,14 @@
|
|
|
19
17
|
export declare const CONTEXT_SESSION_ESTABLISHMENT: "cello-frost-session-establishment-v1";
|
|
20
18
|
export declare const CONTEXT_SEAL: "cello-frost-seal-v1";
|
|
21
19
|
/**
|
|
22
|
-
*
|
|
23
|
-
* docs/planning/user-stories/m8c/M8C-PRIMARY-DESIGN.md (Decision 3
|
|
24
|
-
*
|
|
25
|
-
* this context can never be replayed as a real seal or session-establishment
|
|
26
|
-
* versa. Requires the signer's OWN local FROST share to be loaded
|
|
27
|
-
* otherwise) — this is exactly what distinguishes a genuine old
|
|
28
|
-
* from a Standby that received only K_local via pairing and never
|
|
20
|
+
* The old Primary's "share released" attestation during a device-transfer, per
|
|
21
|
+
* docs/planning/user-stories/m8c/M8C-PRIMARY-DESIGN.md (Decision 3). It rides the same ceremony
|
|
22
|
+
* machinery as the other contexts — the only difference is this domain-separation string, so a
|
|
23
|
+
* signature produced for this context can never be replayed as a real seal or session-establishment
|
|
24
|
+
* signature, and vice versa. Requires the signer's OWN local FROST share to be loaded
|
|
25
|
+
* (participateInCeremony throws otherwise) — this is exactly what distinguishes a genuine old
|
|
26
|
+
* Primary (which held the share) from a Standby that received only K_local via pairing and never
|
|
27
|
+
* the share.
|
|
29
28
|
*/
|
|
30
29
|
export declare const CONTEXT_PRIMARY_RELEASE: "cello-frost-primary-release-v1";
|
|
31
30
|
export type FrostContext = typeof CONTEXT_SESSION_ESTABLISHMENT | typeof CONTEXT_SEAL | typeof CONTEXT_PRIMARY_RELEASE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/frost/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/frost/types.ts"],"names":[],"mappings":"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"}
|
package/dist/frost/types.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FROST Threshold Signing Abstraction — Type Definitions
|
|
3
3
|
*
|
|
4
|
-
* CELLO-CRYPTO-003
|
|
5
|
-
*
|
|
6
4
|
* Design decisions:
|
|
7
5
|
* - `IThresholdSigner` is separate from `KeyProvider`. `KeyProvider` handles K_local
|
|
8
6
|
* envelope signing; `IThresholdSigner` handles the multi-party threshold ceremony.
|
|
9
7
|
* - Domain context strings (one per message-type this ceremony machinery signs):
|
|
10
8
|
* - "cello-frost-session-establishment-v1" — session establishment TBS
|
|
11
9
|
* - "cello-frost-seal-v1" — conversation seal TBS
|
|
12
|
-
* - "cello-frost-primary-release-v1" —
|
|
10
|
+
* - "cello-frost-primary-release-v1" — device-transfer release attestation
|
|
13
11
|
* - Context is prepended to the TBS before signing to achieve domain separation.
|
|
14
12
|
* FROST over ed25519 does not support a native context parameter, so we use
|
|
15
13
|
* a framed encoding: `<context>\0<tbs>`.
|
|
@@ -20,13 +18,14 @@
|
|
|
20
18
|
export const CONTEXT_SESSION_ESTABLISHMENT = "cello-frost-session-establishment-v1";
|
|
21
19
|
export const CONTEXT_SEAL = "cello-frost-seal-v1";
|
|
22
20
|
/**
|
|
23
|
-
*
|
|
24
|
-
* docs/planning/user-stories/m8c/M8C-PRIMARY-DESIGN.md (Decision 3
|
|
25
|
-
*
|
|
26
|
-
* this context can never be replayed as a real seal or session-establishment
|
|
27
|
-
* versa. Requires the signer's OWN local FROST share to be loaded
|
|
28
|
-
* otherwise) — this is exactly what distinguishes a genuine old
|
|
29
|
-
* from a Standby that received only K_local via pairing and never
|
|
21
|
+
* The old Primary's "share released" attestation during a device-transfer, per
|
|
22
|
+
* docs/planning/user-stories/m8c/M8C-PRIMARY-DESIGN.md (Decision 3). It rides the same ceremony
|
|
23
|
+
* machinery as the other contexts — the only difference is this domain-separation string, so a
|
|
24
|
+
* signature produced for this context can never be replayed as a real seal or session-establishment
|
|
25
|
+
* signature, and vice versa. Requires the signer's OWN local FROST share to be loaded
|
|
26
|
+
* (participateInCeremony throws otherwise) — this is exactly what distinguishes a genuine old
|
|
27
|
+
* Primary (which held the share) from a Standby that received only K_local via pairing and never
|
|
28
|
+
* the share.
|
|
30
29
|
*/
|
|
31
30
|
export const CONTEXT_PRIMARY_RELEASE = "cello-frost-primary-release-v1";
|
|
32
31
|
//# sourceMappingURL=types.js.map
|
package/dist/frost/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/frost/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/frost/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,gFAAgF;AAEhF,MAAM,CAAC,MAAM,6BAA6B,GACxC,sCAA+C,CAAC;AAClD,MAAM,CAAC,MAAM,YAAY,GAAG,qBAA8B,CAAC;AAC3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAyC,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpI,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpI,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAK3C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG5E,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAGtG,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAG7F,YAAY,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACpK,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACxI,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxI,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,9 @@ export { verifyFrostSignature } from "./frost/frost-threshold-signer.js";
|
|
|
10
10
|
export { generateRefreshContribution, verifyRefreshContribution, applyRefresh, } from "./frost/frost-resharing.js";
|
|
11
11
|
// Client-side refresh helpers (daemon coordinator): rotate the client's own share in-package.
|
|
12
12
|
export { getClientFrostIdentifier, getClientRefreshRoster, generateClientRefreshContribution, applyRefreshToLocalShare, } from "./frost/frost-threshold-signer.js";
|
|
13
|
-
//
|
|
13
|
+
// LIVE, load-bearing: core/daemon's network-directory-node imports ed25519_FROST FROM THIS RE-EXPORT
|
|
14
|
+
// to run the client-side DKG (DKG.round1/round2/round3). It has no in-package caller, so a grep of
|
|
15
|
+
// core/crypto alone makes it look dead. It is not. Do not remove it.
|
|
14
16
|
export { ed25519_FROST } from "@noble/curves/ed25519.js";
|
|
15
17
|
// FEDERATION-002: canonical checkpoint TBS serialization and hash computation
|
|
16
18
|
export { buildCheckpointTbs, computeCheckpointHash } from "./checkpoint.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEpI,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU3F,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iGAAiG;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,uGAAuG;AACvG,0FAA0F;AAC1F,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAEpC,8FAA8F;AAC9F,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAE3C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEpI,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3F,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU3F,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iGAAiG;AACjG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,uGAAuG;AACvG,0FAA0F;AAC1F,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAEpC,8FAA8F;AAC9F,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,mCAAmC,CAAC;AAE3C,qGAAqG;AACrG,mGAAmG;AACnG,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,oEAAoE;AACpE,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAEtG,+EAA+E;AAC/E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAI7F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxI,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Test fixture for consortium manifest creation.
|
|
3
3
|
*
|
|
4
4
|
* Provides makeTestManifest() which creates a fully-signed ConsortiumManifest
|
|
5
5
|
* using deterministic test officer keys. The manifest is signed with officer
|
|
6
6
|
* indices 0, 1, 2 (meeting the threshold of 3).
|
|
7
7
|
*
|
|
8
|
-
* The private keys (TEST_OFFICER_SEEDS) are defined here and NOT exported
|
|
9
|
-
* the package index
|
|
10
|
-
*
|
|
8
|
+
* The private keys (TEST_OFFICER_SEEDS) are defined here and MUST NOT be exported
|
|
9
|
+
* from the package index. They are only available via direct import of this file
|
|
10
|
+
* for internal test use.
|
|
11
11
|
*
|
|
12
12
|
* Crypto reference: RFC 8032 (Ed25519).
|
|
13
13
|
*/
|
|
@@ -16,7 +16,7 @@ import type { ConsortiumManifestInput } from "./manifest.js";
|
|
|
16
16
|
* Deterministic test officer seeds (private keys). Used to derive
|
|
17
17
|
* TEST_CONSORTIUM_ROOT_KEYS and to sign test manifests.
|
|
18
18
|
*
|
|
19
|
-
* NOT exported from the package index — only from this file for internal use.
|
|
19
|
+
* MUST NOT be exported from the package index — only from this file for internal use.
|
|
20
20
|
*/
|
|
21
21
|
export declare const TEST_OFFICER_SEEDS: readonly [Uint8Array, Uint8Array, Uint8Array, Uint8Array, Uint8Array];
|
|
22
22
|
/** Node entry for makeTestManifest input. Structurally matches ConsortiumNode from protocol-types. */
|
|
@@ -33,13 +33,8 @@ export interface MakeTestManifestOpts {
|
|
|
33
33
|
expires?: string;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Create a test ConsortiumManifest signed by officers 0, 1, 2
|
|
37
|
-
*
|
|
38
|
-
* Pseudocode:
|
|
39
|
-
* 1. Build the manifest body with provided nodes and optional overrides.
|
|
40
|
-
* 2. Compute canonical body bytes via canonicalManifestBody.
|
|
41
|
-
* 3. Sign with TEST_OFFICER_SEEDS[0], [1], [2] using Ed25519 (RFC 8032).
|
|
42
|
-
* 4. Return the complete manifest with 3 valid signatures.
|
|
36
|
+
* Create a test ConsortiumManifest signed by officers 0, 1, 2 with Ed25519 (RFC 8032)
|
|
37
|
+
* over the canonical body bytes from canonicalManifestBody.
|
|
43
38
|
*/
|
|
44
39
|
export declare function makeTestManifest(nodes: TestConsortiumNode[], opts?: MakeTestManifestOpts): ConsortiumManifestInput;
|
|
45
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-test-fixture.d.ts","sourceRoot":"","sources":["../src/manifest-test-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAM3F,CAAC;AAEX,sGAAsG;AACtG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"manifest-test-fixture.d.ts","sourceRoot":"","sources":["../src/manifest-test-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAM3F,CAAC;AAEX,sGAAsG;AACtG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EAAE,EAC3B,IAAI,CAAC,EAAE,oBAAoB,GAC1B,uBAAuB,CAoBzB;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B;;;CAG9B,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Test fixture for consortium manifest creation.
|
|
3
3
|
*
|
|
4
4
|
* Provides makeTestManifest() which creates a fully-signed ConsortiumManifest
|
|
5
5
|
* using deterministic test officer keys. The manifest is signed with officer
|
|
6
6
|
* indices 0, 1, 2 (meeting the threshold of 3).
|
|
7
7
|
*
|
|
8
|
-
* The private keys (TEST_OFFICER_SEEDS) are defined here and NOT exported
|
|
9
|
-
* the package index
|
|
10
|
-
*
|
|
8
|
+
* The private keys (TEST_OFFICER_SEEDS) are defined here and MUST NOT be exported
|
|
9
|
+
* from the package index. They are only available via direct import of this file
|
|
10
|
+
* for internal test use.
|
|
11
11
|
*
|
|
12
12
|
* Crypto reference: RFC 8032 (Ed25519).
|
|
13
13
|
*/
|
|
@@ -17,7 +17,7 @@ import { canonicalManifestBody } from "./manifest.js";
|
|
|
17
17
|
* Deterministic test officer seeds (private keys). Used to derive
|
|
18
18
|
* TEST_CONSORTIUM_ROOT_KEYS and to sign test manifests.
|
|
19
19
|
*
|
|
20
|
-
* NOT exported from the package index — only from this file for internal use.
|
|
20
|
+
* MUST NOT be exported from the package index — only from this file for internal use.
|
|
21
21
|
*/
|
|
22
22
|
export const TEST_OFFICER_SEEDS = [
|
|
23
23
|
new Uint8Array(32).fill(0x01),
|
|
@@ -27,13 +27,8 @@ export const TEST_OFFICER_SEEDS = [
|
|
|
27
27
|
new Uint8Array(32).fill(0x05),
|
|
28
28
|
];
|
|
29
29
|
/**
|
|
30
|
-
* Create a test ConsortiumManifest signed by officers 0, 1, 2
|
|
31
|
-
*
|
|
32
|
-
* Pseudocode:
|
|
33
|
-
* 1. Build the manifest body with provided nodes and optional overrides.
|
|
34
|
-
* 2. Compute canonical body bytes via canonicalManifestBody.
|
|
35
|
-
* 3. Sign with TEST_OFFICER_SEEDS[0], [1], [2] using Ed25519 (RFC 8032).
|
|
36
|
-
* 4. Return the complete manifest with 3 valid signatures.
|
|
30
|
+
* Create a test ConsortiumManifest signed by officers 0, 1, 2 with Ed25519 (RFC 8032)
|
|
31
|
+
* over the canonical body bytes from canonicalManifestBody.
|
|
37
32
|
*/
|
|
38
33
|
export function makeTestManifest(nodes, opts) {
|
|
39
34
|
const manifest = {
|
|
@@ -53,7 +48,7 @@ export function makeTestManifest(nodes, opts) {
|
|
|
53
48
|
manifest.signatures = signatures;
|
|
54
49
|
return manifest;
|
|
55
50
|
}
|
|
56
|
-
// ───
|
|
51
|
+
// ─── Test directory node keypair ─────────────────────────────────────────────
|
|
57
52
|
/**
|
|
58
53
|
* Deterministic test directory node keypair for step-5 challenge signing tests.
|
|
59
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-test-fixture.js","sourceRoot":"","sources":["../src/manifest-test-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA0E;IACvG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACrB,CAAC;AAiBX
|
|
1
|
+
{"version":3,"file":"manifest-test-fixture.js","sourceRoot":"","sources":["../src/manifest-test-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA0E;IACvG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACrB,CAAC;AAiBX;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA2B,EAC3B,IAA2B;IAE3B,MAAM,QAAQ,GAA4B;QACxC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC;QAC3B,UAAU,EAAE,IAAI,EAAE,SAAS,IAAI,sBAAsB;QACrD,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,sBAAsB;QAChD,KAAK,EAAE,KAA2C;QAClD,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,qCAAqC;IACrC,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAE7C,sDAAsD;IACtD,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KACpF,CAAC,CAAC,CAAC;IAEJ,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,aAAa,EAAE,kEAAkE;IACjF,YAAY,EAAE,kEAAkE;CACxE,CAAC"}
|