run402 4.70.8 → 4.71.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/gitvault-surface.json +1 -1
- package/lib/cold-start.mjs +33 -7
- package/lib/command-manifest.mjs +8 -1
- package/lib/contacts.mjs +2 -2
- package/lib/org-context.mjs +8 -2
- package/lib/rooms-context.mjs +14 -3
- package/lib/rooms.mjs +299 -2
- package/lib/sdk-errors.mjs +25 -0
- package/package.json +1 -1
- package/sdk/dist/namespaces/rooms.d.ts +53 -1
- package/sdk/dist/namespaces/rooms.d.ts.map +1 -1
- package/sdk/dist/namespaces/rooms.js +130 -0
- package/sdk/dist/namespaces/rooms.js.map +1 -1
- package/sdk/dist/namespaces/rooms.types.d.ts +94 -0
- package/sdk/dist/namespaces/rooms.types.d.ts.map +1 -1
- package/sdk/dist/node/bearer-claim-key.d.ts +126 -0
- package/sdk/dist/node/bearer-claim-key.d.ts.map +1 -0
- package/sdk/dist/node/bearer-claim-key.js +209 -0
- package/sdk/dist/node/bearer-claim-key.js.map +1 -0
- package/sdk/dist/node/gitvault-address.d.ts +19 -0
- package/sdk/dist/node/gitvault-address.d.ts.map +1 -1
- package/sdk/dist/node/gitvault-address.js +20 -0
- package/sdk/dist/node/gitvault-address.js.map +1 -1
- package/sdk/dist/node/gitvault-handoff.d.ts +3 -95
- package/sdk/dist/node/gitvault-handoff.d.ts.map +1 -1
- package/sdk/dist/node/gitvault-handoff.js +9 -122
- package/sdk/dist/node/gitvault-handoff.js.map +1 -1
- package/sdk/dist/node/index.d.ts +3 -1
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js +8 -1
- package/sdk/dist/node/index.js.map +1 -1
- package/sdk/dist/node/paid-fetch.d.ts +8 -0
- package/sdk/dist/node/paid-fetch.d.ts.map +1 -1
- package/sdk/dist/node/paid-fetch.js +41 -1
- package/sdk/dist/node/paid-fetch.js.map +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bearer-claim key format — the pure, kind-agnostic primitives shared by
|
|
3
|
+
* every bearer-addressed membership claim key this SDK mints or parses
|
|
4
|
+
* (add-room-invite design D2/D3, mirroring the gateway's own
|
|
5
|
+
* `services/bearer-claim-key.ts`).
|
|
6
|
+
*
|
|
7
|
+
* Through kygit-invite this lived inline in `gitvault-handoff.ts`: the key
|
|
8
|
+
* registry (`HANDOFF_KEY_PREFIXES`), `uuidToBytes`, the generic
|
|
9
|
+
* assemble/parse helpers, and the HKDF derivations for `auth_secret` /
|
|
10
|
+
* `wrap_key`. add-room-invite adds a THIRD kind — `room` (`kri1_…`) — whose
|
|
11
|
+
* claim confers org membership rather than vault access and carries no
|
|
12
|
+
* `wrap_key`/envelope/admission-seed at all (design D3). Rather than teach
|
|
13
|
+
* the vault-shaped module a room-shaped kind, the pure key-format
|
|
14
|
+
* primitives move HERE (a move, not a copy — `gitvault-handoff.ts`
|
|
15
|
+
* re-exports every symbol it previously exported, under its existing name,
|
|
16
|
+
* so nothing importing it changes) and gain the room row alongside them.
|
|
17
|
+
* Everything that is genuinely vault-specific — the sealed envelope, the
|
|
18
|
+
* writer-admission grant/acceptance, the Handoff/Invite Note — stays in
|
|
19
|
+
* `gitvault-handoff.ts`, which imports the pieces it needs from here.
|
|
20
|
+
*
|
|
21
|
+
* `HANDOFF_KEY_PREFIXES` is a REGISTRY: `kgh1_` (handoff, `resume`), `kgi1_`
|
|
22
|
+
* (invite, `repos join`), `kri1_` (room, `rooms join`). `parseClaimKey`
|
|
23
|
+
* refuses any other recognized-shape-but-wrong-kind prefix BY NAME, naming
|
|
24
|
+
* the door it actually belongs at, rather than misreading it as a malformed
|
|
25
|
+
* key of the kind the caller expected — never contacting the gateway.
|
|
26
|
+
*/
|
|
27
|
+
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
28
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
29
|
+
import { concatBytes, utf8ToBytes } from "@noble/hashes/utils.js";
|
|
30
|
+
import { LocalError } from "../errors.js";
|
|
31
|
+
import { fromBase64url, randomBytes, toBase64url, bytesToHex } from "../namespaces/gitvault.crypto.js";
|
|
32
|
+
function fail(code, message, context, details) {
|
|
33
|
+
throw new LocalError(message, context, { code, details });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `kgh1_` is the first row (handoff); `kgi1_` the second (invite,
|
|
37
|
+
* kygit-invite design D3); `kri1_` the third (room, add-room-invite design
|
|
38
|
+
* D3). A future kind is a SIBLING row here, never a branch on an existing
|
|
39
|
+
* one's parser.
|
|
40
|
+
*/
|
|
41
|
+
export const HANDOFF_KEY_PREFIXES = [
|
|
42
|
+
{ prefix: "kgh1_", kind: "handoff", verb: "resume", errorPrefix: "HANDOFF", doorLabel: "run402 repos resume", envelopeKind: "kygit-handoff-envelope-v2", noteSchema: "kygit.handoff-note.v1", frameMagic: "KGH1" },
|
|
43
|
+
{ prefix: "kgi1_", kind: "invite", verb: "join", errorPrefix: "INVITE", doorLabel: "run402 repos join", envelopeKind: "kygit-invite-envelope-v2", noteSchema: "kygit.invite-note.v1", frameMagic: "KGI1" },
|
|
44
|
+
{ prefix: "kri1_", kind: "room", verb: "join", errorPrefix: "ROOM_INVITE", doorLabel: "run402 rooms join" },
|
|
45
|
+
];
|
|
46
|
+
const HANDOFF_ENTRY = HANDOFF_KEY_PREFIXES[0];
|
|
47
|
+
const INVITE_ENTRY = HANDOFF_KEY_PREFIXES[1];
|
|
48
|
+
const ROOM_ENTRY = HANDOFF_KEY_PREFIXES[2];
|
|
49
|
+
function entryForKind(kind) {
|
|
50
|
+
return kind === "handoff" ? HANDOFF_ENTRY : kind === "invite" ? INVITE_ENTRY : ROOM_ENTRY;
|
|
51
|
+
}
|
|
52
|
+
const CLAIM_ID_BYTES = 16;
|
|
53
|
+
const MASTER_SECRET_BYTES = 32;
|
|
54
|
+
const CLAIM_KEY_BODY_BYTES = CLAIM_ID_BYTES + MASTER_SECRET_BYTES;
|
|
55
|
+
function bytesToUuid(bytes) {
|
|
56
|
+
const h = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
57
|
+
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
|
|
58
|
+
}
|
|
59
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
60
|
+
export function uuidToBytes(uuid, field = "handoff_id") {
|
|
61
|
+
if (!UUID_RE.test(uuid))
|
|
62
|
+
fail("HANDOFF_ID_INVALID", `${field} is not a canonical UUID`, "parsing handoff id", { field });
|
|
63
|
+
const hex = uuid.replace(/-/g, "").toLowerCase();
|
|
64
|
+
const out = new Uint8Array(16);
|
|
65
|
+
for (let i = 0; i < 16; i++)
|
|
66
|
+
out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/** A fresh RFC 4122 v4 UUID — the client-generated claim id every bearer-claim kind mints with (design D3: `auth_secret` derives off it, so it cannot be gateway-assigned). */
|
|
70
|
+
export function randomClaimId() {
|
|
71
|
+
const b = randomBytes(16);
|
|
72
|
+
b[6] = ((b[6] ?? 0) & 0x0f) | 0x40;
|
|
73
|
+
b[8] = ((b[8] ?? 0) & 0x3f) | 0x80;
|
|
74
|
+
return bytesToUuid(b);
|
|
75
|
+
}
|
|
76
|
+
/** Assemble a printed claim key from a fresh 32-byte master secret and the (client-generated or gateway-minted) claim id, for `entry`'s kind. */
|
|
77
|
+
function assembleClaimKey(entry, claimId, masterSecret) {
|
|
78
|
+
if (masterSecret.length !== MASTER_SECRET_BYTES)
|
|
79
|
+
fail(`${entry.errorPrefix}_KEY_INVALID`, "master_secret must be 32 bytes", `assembling ${entry.kind} key`);
|
|
80
|
+
const idBytes = uuidToBytes(claimId, `${entry.kind}_id`);
|
|
81
|
+
const body = concatBytes(idBytes, masterSecret);
|
|
82
|
+
return { key: `${entry.prefix}${toBase64url(body)}`, id_bytes: idBytes, master_secret: masterSecret };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Assemble the printed key from a fresh 32-byte master secret and the
|
|
86
|
+
* gateway-minted `handoff_id`. The gateway never sees `master_secret` — the
|
|
87
|
+
* caller derives `auth_hash` (via {@link deriveHandoffSecrets}) and sends
|
|
88
|
+
* ONLY that.
|
|
89
|
+
*/
|
|
90
|
+
export function assembleHandoffKey(handoffId, masterSecret = randomBytes(MASTER_SECRET_BYTES)) {
|
|
91
|
+
const { key, id_bytes, master_secret } = assembleClaimKey(HANDOFF_ENTRY, handoffId, masterSecret);
|
|
92
|
+
return { key, handoff_id_bytes: id_bytes, master_secret };
|
|
93
|
+
}
|
|
94
|
+
/** The invite-kind sibling of {@link assembleHandoffKey} (kygit-invite design D3). */
|
|
95
|
+
export function assembleInviteKey(inviteId, masterSecret = randomBytes(MASTER_SECRET_BYTES)) {
|
|
96
|
+
const { key, id_bytes, master_secret } = assembleClaimKey(INVITE_ENTRY, inviteId, masterSecret);
|
|
97
|
+
return { key, invite_id_bytes: id_bytes, master_secret };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The room-kind sibling of {@link assembleHandoffKey}/{@link assembleInviteKey}
|
|
101
|
+
* (add-room-invite design D3). `invite_id` is CLIENT-generated (unlike the
|
|
102
|
+
* vault kinds, whose id the gateway mints) — the client sends it verbatim in
|
|
103
|
+
* the mint request and the gateway uses it as the row id, refusing a
|
|
104
|
+
* collision with `409 ROOM_INVITE_ID_CONFLICT`.
|
|
105
|
+
*/
|
|
106
|
+
export function assembleRoomInviteKey(inviteId, masterSecret = randomBytes(MASTER_SECRET_BYTES)) {
|
|
107
|
+
const { key, id_bytes, master_secret } = assembleClaimKey(ROOM_ENTRY, inviteId, masterSecret);
|
|
108
|
+
return { key, invite_id_bytes: id_bytes, master_secret };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Parse ANY registered claim-family key by its prefix registry against the
|
|
112
|
+
* `expectedKind` the calling verb accepts. A recognized prefix of a
|
|
113
|
+
* DIFFERENT kind (a `kgi1_` invite key handed to `resume`, a `kri1_` room
|
|
114
|
+
* key handed to `repos join`/`resume`, or a `kgi1_`/`kgh1_` vault key handed
|
|
115
|
+
* to `rooms join`) refuses BY NAME pointing at its own door — never misread
|
|
116
|
+
* as a malformed key of the expected kind, and never contacting the gateway
|
|
117
|
+
* (design D9 rule 4 / kygit-invite design D3 / add-room-invite design D3).
|
|
118
|
+
*/
|
|
119
|
+
export function parseClaimKey(raw, expectedKind) {
|
|
120
|
+
const expectedEntry = entryForKind(expectedKind);
|
|
121
|
+
const trimmed = raw.trim();
|
|
122
|
+
const entry = HANDOFF_KEY_PREFIXES.find((e) => trimmed.startsWith(e.prefix));
|
|
123
|
+
if (!entry) {
|
|
124
|
+
fail(`${expectedEntry.errorPrefix}_KEY_INVALID`, `not a recognized run402 claim key (expected a key starting ${expectedEntry.prefix})`, "parsing claim key");
|
|
125
|
+
}
|
|
126
|
+
if (entry.kind !== expectedKind) {
|
|
127
|
+
fail(`${expectedEntry.errorPrefix}_KEY_WRONG_KIND`, `this key is a ${entry.kind} key — use \`${entry.doorLabel}\` instead of \`${expectedEntry.doorLabel}\``, "parsing claim key", { kind: entry.kind, verb: entry.verb });
|
|
128
|
+
}
|
|
129
|
+
const body = trimmed.slice(entry.prefix.length);
|
|
130
|
+
let bytes;
|
|
131
|
+
try {
|
|
132
|
+
bytes = fromBase64url(body, `${entry.kind} key body`);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
fail(`${entry.errorPrefix}_KEY_INVALID`, "the key body is not valid base64url", "parsing claim key");
|
|
136
|
+
}
|
|
137
|
+
if (bytes.length !== CLAIM_KEY_BODY_BYTES) {
|
|
138
|
+
fail(`${entry.errorPrefix}_KEY_INVALID`, `the key decodes to ${bytes.length} bytes; expected ${CLAIM_KEY_BODY_BYTES}`, "parsing claim key");
|
|
139
|
+
}
|
|
140
|
+
const idBytes = bytes.subarray(0, CLAIM_ID_BYTES);
|
|
141
|
+
const masterSecret = bytes.subarray(CLAIM_ID_BYTES);
|
|
142
|
+
return { kind: entry.kind, id_bytes: idBytes, id: bytesToUuid(idBytes), master_secret: masterSecret };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Parse ANY registered claim-family key by its prefix registry. A
|
|
146
|
+
* recognized prefix of a DIFFERENT kind (an invite or room key handed to
|
|
147
|
+
* `resume`) refuses BY NAME pointing at its own door — never misread as a
|
|
148
|
+
* malformed handoff key (design D9 rule 4). Kind-bound alias of
|
|
149
|
+
* {@link parseClaimKey}.
|
|
150
|
+
*/
|
|
151
|
+
export function parseHandoffKey(raw) {
|
|
152
|
+
const parsed = parseClaimKey(raw, "handoff");
|
|
153
|
+
return { kind: "handoff", handoff_id_bytes: parsed.id_bytes, handoff_id: parsed.id, master_secret: parsed.master_secret };
|
|
154
|
+
}
|
|
155
|
+
/** The invite-kind sibling of {@link parseHandoffKey} (kygit-invite design D3). */
|
|
156
|
+
export function parseInviteKey(raw) {
|
|
157
|
+
const parsed = parseClaimKey(raw, "invite");
|
|
158
|
+
return { kind: "invite", invite_id_bytes: parsed.id_bytes, invite_id: parsed.id, master_secret: parsed.master_secret };
|
|
159
|
+
}
|
|
160
|
+
/** The room-kind sibling of {@link parseHandoffKey}/{@link parseInviteKey} (add-room-invite design D3). */
|
|
161
|
+
export function parseRoomInviteKey(raw) {
|
|
162
|
+
const parsed = parseClaimKey(raw, "room");
|
|
163
|
+
return { kind: "room", invite_id_bytes: parsed.id_bytes, invite_id: parsed.id, master_secret: parsed.master_secret };
|
|
164
|
+
}
|
|
165
|
+
/** `HKDF-SHA256(ikm=master_secret, salt=id[16], info=…)` per D3, domain-separated by kind, for both `auth_secret` and `wrap_key`. Vault kinds only — `room` has no `wrap_key` and derives separately below. */
|
|
166
|
+
function deriveClaimSecrets(kind, idBytes, masterSecret) {
|
|
167
|
+
const authInfo = `kygit/${kind}/auth/v1`;
|
|
168
|
+
const wrapInfo = `kygit/${kind}/wrap/v1`;
|
|
169
|
+
const authHashLabel = `kygit/${kind}/auth-hash/v1`;
|
|
170
|
+
const authSecret = hkdf(sha256, masterSecret, idBytes, utf8ToBytes(authInfo), 32);
|
|
171
|
+
const wrapKey = hkdf(sha256, masterSecret, idBytes, utf8ToBytes(wrapInfo), 32);
|
|
172
|
+
const authHash = sha256(concatBytes(utf8ToBytes(authHashLabel), authSecret));
|
|
173
|
+
// ONE SHA-256 over (label ‖ auth_secret), hex-encoded — exactly what the
|
|
174
|
+
// gateway recomputes at claim (`computeAuthHash`). Through 4.68.1 this line
|
|
175
|
+
// ran the digest through `sha256Hex` (which hashes its input again), so the
|
|
176
|
+
// stored value was sha256(sha256(label ‖ secret)) and NO key minted by any
|
|
177
|
+
// published client could ever verify. The cross-side vector in
|
|
178
|
+
// gitvault-handoff.test.ts now recomputes the gateway's hash independently.
|
|
179
|
+
return { auth_secret: authSecret, wrap_key: wrapKey, auth_hash_hex: bytesToHex(authHash) };
|
|
180
|
+
}
|
|
181
|
+
/** `HKDF-SHA256(ikm=master_secret, salt=handoff_id[16], info=kygit/handoff/…)` per D3, for both `auth_secret` and `wrap_key`. */
|
|
182
|
+
export function deriveHandoffSecrets(handoffIdBytes, masterSecret) {
|
|
183
|
+
return deriveClaimSecrets("handoff", handoffIdBytes, masterSecret);
|
|
184
|
+
}
|
|
185
|
+
/** The invite-kind sibling of {@link deriveHandoffSecrets}, domain-separated under `kygit/invite/…` info strings (kygit-invite design D3) — an invite secret never verifies as a handoff hash, or the reverse. */
|
|
186
|
+
export function deriveInviteSecrets(inviteIdBytes, masterSecret) {
|
|
187
|
+
return deriveClaimSecrets("invite", inviteIdBytes, masterSecret);
|
|
188
|
+
}
|
|
189
|
+
// ─── HKDF derivation — room kind (add-room-invite design D3) ────────────────
|
|
190
|
+
//
|
|
191
|
+
// A room invite derives EXACTLY ONE secret — no `wrap_key`, no envelope, no
|
|
192
|
+
// admission seed exist for this kind (there is nothing sealed: the gateway
|
|
193
|
+
// already reads every room message in plaintext, so there is no secret to
|
|
194
|
+
// hide from it). The info string and hash label are their OWN
|
|
195
|
+
// `run402/room-invite/…` namespace, never `kygit/room/…` — domain-separated
|
|
196
|
+
// from every vault kind so a room secret never verifies as a handoff/invite
|
|
197
|
+
// hash and neither of those ever verifies as a room hash, even for a row
|
|
198
|
+
// whose id every parser recovers.
|
|
199
|
+
const ROOM_INVITE_AUTH_INFO = "run402/room-invite/auth/v1";
|
|
200
|
+
const ROOM_INVITE_AUTH_HASH_LABEL = "run402/room-invite/auth-hash/v1";
|
|
201
|
+
/** `HKDF-SHA256(ikm=master_secret, salt=invite_id[16], info="run402/room-invite/auth/v1")` — the ONE secret a room invite derives (design D3). */
|
|
202
|
+
export function deriveRoomInviteAuthSecret(inviteIdBytes, masterSecret) {
|
|
203
|
+
return hkdf(sha256, masterSecret, inviteIdBytes, utf8ToBytes(ROOM_INVITE_AUTH_INFO), 32);
|
|
204
|
+
}
|
|
205
|
+
/** `SHA-256("run402/room-invite/auth-hash/v1" ‖ auth_secret)`, lowercase hex — exactly what the gateway's `mintRoomInvite`/`claimRoomInvite` compute and store/compare (design D3). */
|
|
206
|
+
export function computeRoomInviteAuthHash(authSecret) {
|
|
207
|
+
return bytesToHex(sha256(concatBytes(utf8ToBytes(ROOM_INVITE_AUTH_HASH_LABEL), authSecret)));
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=bearer-claim-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer-claim-key.js","sourceRoot":"","sources":["../../src/node/bearer-claim-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,25 @@ export declare function pinGitvaultRepo(repoDir: string, repoId: string, resolve
|
|
|
65
65
|
org_id: string;
|
|
66
66
|
room_key?: string;
|
|
67
67
|
}): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* add-room-invite design D10: a bare `rooms join <key>` arrival standing
|
|
70
|
+
* inside a git repository pins `r402.orgId`/`r402.room` in this checkout's
|
|
71
|
+
* LOCAL git config — the SAME two keys {@link pinGitvaultRepo} writes
|
|
72
|
+
* alongside a vault's `r402.repoId` — but WITHOUT one, since a room-only
|
|
73
|
+
* join has no vault to pin. Read back by {@link readPinnedRoomBinding},
|
|
74
|
+
* independent of {@link readPinnedGitvaultRepo}'s own gate on `r402.repoId`
|
|
75
|
+
* being present (a room-only checkout never sets it, so that reader would
|
|
76
|
+
* otherwise see this pin as absent).
|
|
77
|
+
*/
|
|
78
|
+
export declare function pinRoomBinding(repoDir: string, ids: {
|
|
79
|
+
org_id: string;
|
|
80
|
+
room_key: string;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
/** Read `r402.orgId`/`r402.room` directly, with NO gate on `r402.repoId` (design D10) — the counterpart read for {@link pinRoomBinding}. Either field is `null` when unset (no repository, or never pinned). */
|
|
83
|
+
export declare function readPinnedRoomBinding(repoDir: string): Promise<{
|
|
84
|
+
org_id: string | null;
|
|
85
|
+
room: string | null;
|
|
86
|
+
}>;
|
|
68
87
|
export interface GitvaultAddressResolution {
|
|
69
88
|
repo_id: string;
|
|
70
89
|
project_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitvault-address.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-address.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitvault-address.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-address.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,6 +99,26 @@ export async function pinGitvaultRepo(repoDir, repoId, resolvedFrom, ids) {
|
|
|
99
99
|
await hardenedGit(repoDir, ["config", "--local", CONFIG_KEY_ROOM, ids.room_key ?? ids.project_id]);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* add-room-invite design D10: a bare `rooms join <key>` arrival standing
|
|
104
|
+
* inside a git repository pins `r402.orgId`/`r402.room` in this checkout's
|
|
105
|
+
* LOCAL git config — the SAME two keys {@link pinGitvaultRepo} writes
|
|
106
|
+
* alongside a vault's `r402.repoId` — but WITHOUT one, since a room-only
|
|
107
|
+
* join has no vault to pin. Read back by {@link readPinnedRoomBinding},
|
|
108
|
+
* independent of {@link readPinnedGitvaultRepo}'s own gate on `r402.repoId`
|
|
109
|
+
* being present (a room-only checkout never sets it, so that reader would
|
|
110
|
+
* otherwise see this pin as absent).
|
|
111
|
+
*/
|
|
112
|
+
export async function pinRoomBinding(repoDir, ids) {
|
|
113
|
+
await hardenedGit(repoDir, ["config", "--local", CONFIG_KEY_ORG_ID, ids.org_id]);
|
|
114
|
+
await hardenedGit(repoDir, ["config", "--local", CONFIG_KEY_ROOM, ids.room_key]);
|
|
115
|
+
}
|
|
116
|
+
/** Read `r402.orgId`/`r402.room` directly, with NO gate on `r402.repoId` (design D10) — the counterpart read for {@link pinRoomBinding}. Either field is `null` when unset (no repository, or never pinned). */
|
|
117
|
+
export async function readPinnedRoomBinding(repoDir) {
|
|
118
|
+
const org_id = await readLocalGitConfig(repoDir, CONFIG_KEY_ORG_ID);
|
|
119
|
+
const room = await readLocalGitConfig(repoDir, CONFIG_KEY_ROOM);
|
|
120
|
+
return { org_id, room };
|
|
121
|
+
}
|
|
102
122
|
/** Clear a pin this checkout no longer trusts (design D4: a pinned id that 404s). Tolerates an absent key — `git config --unset` on a key that was never set is not a failure here. */
|
|
103
123
|
async function clearPinnedGitvaultRepo(repoDir) {
|
|
104
124
|
for (const key of [CONFIG_KEY_REPO_ID, CONFIG_KEY_ADDRESS, CONFIG_KEY_PROJECT_ID, CONFIG_KEY_ORG_ID, CONFIG_KEY_ROOM]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitvault-address.js","sourceRoot":"","sources":["../../src/node/gitvault-address.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitvault-address.js","sourceRoot":"","sources":["../../src/node/gitvault-address.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +1,7 @@
|
|
|
1
1
|
import { GITVAULT_FORMAT, GITVAULT_SUITE } from "../namespaces/gitvault.crypto.js";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
kind: ClaimKind;
|
|
6
|
-
verb: string;
|
|
7
|
-
/** Error-code prefix for this kind (`HANDOFF` | `INVITE`) — every client-side code this module throws is `${errorPrefix}_…`. */
|
|
8
|
-
errorPrefix: string;
|
|
9
|
-
/**
|
|
10
|
-
* The sealed-envelope `envelope_kind` tag this kind's mint seals TODAY —
|
|
11
|
-
* the v2 shape for both kinds (`v: 2`, `writer_admission_grant_sha256`,
|
|
12
|
-
* `epoch_keys`), since writer admission rides the envelope for every claim
|
|
13
|
-
* kind (gitvault-multi-writer D4). `kygit-handoff-envelope-v1` survives
|
|
14
|
-
* only as a legacy OPENER constant ({@link HANDOFF_ENVELOPE_KIND}); no
|
|
15
|
-
* invite v1 ever existed.
|
|
16
|
-
*/
|
|
17
|
-
envelopeKind: string;
|
|
18
|
-
/** This kind's note schema tag. */
|
|
19
|
-
noteSchema: string;
|
|
20
|
-
/** This kind's envelope frame magic (4 ASCII bytes). */
|
|
21
|
-
frameMagic: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* `kgh1_` is the first row (handoff); `kgi1_` is the second (invite,
|
|
25
|
-
* kygit-invite design D3). A future third kind is a SIBLING row here, never
|
|
26
|
-
* a branch on either existing one's parser.
|
|
27
|
-
*/
|
|
28
|
-
export declare const HANDOFF_KEY_PREFIXES: readonly HandoffKeyPrefixEntry[];
|
|
29
|
-
export interface ClaimKeyParts {
|
|
30
|
-
kind: ClaimKind;
|
|
31
|
-
id_bytes: Uint8Array;
|
|
32
|
-
/** Canonical lowercase-hyphenated UUID form of `id_bytes` — the wire id (`handoff_id`/`invite_id`). */
|
|
33
|
-
id: string;
|
|
34
|
-
master_secret: Uint8Array;
|
|
35
|
-
}
|
|
36
|
-
/** {@link parseHandoffKey}'s legacy field names, preserved byte-identical. */
|
|
37
|
-
export interface HandoffKeyParts {
|
|
38
|
-
kind: "handoff";
|
|
39
|
-
handoff_id_bytes: Uint8Array;
|
|
40
|
-
handoff_id: string;
|
|
41
|
-
master_secret: Uint8Array;
|
|
42
|
-
}
|
|
43
|
-
/** {@link parseInviteKey}'s field names — the invite-kind sibling of {@link HandoffKeyParts}. */
|
|
44
|
-
export interface InviteKeyParts {
|
|
45
|
-
kind: "invite";
|
|
46
|
-
invite_id_bytes: Uint8Array;
|
|
47
|
-
invite_id: string;
|
|
48
|
-
master_secret: Uint8Array;
|
|
49
|
-
}
|
|
50
|
-
export declare function uuidToBytes(uuid: string, field?: string): Uint8Array;
|
|
51
|
-
/**
|
|
52
|
-
* Assemble the printed key from a fresh 32-byte master secret and the
|
|
53
|
-
* gateway-minted `handoff_id`. The gateway never sees `master_secret` — the
|
|
54
|
-
* caller derives `auth_hash` (via {@link deriveHandoffSecrets}) and sends
|
|
55
|
-
* ONLY that.
|
|
56
|
-
*/
|
|
57
|
-
export declare function assembleHandoffKey(handoffId: string, masterSecret?: Uint8Array): {
|
|
58
|
-
key: string;
|
|
59
|
-
handoff_id_bytes: Uint8Array;
|
|
60
|
-
master_secret: Uint8Array;
|
|
61
|
-
};
|
|
62
|
-
/** The invite-kind sibling of {@link assembleHandoffKey} (kygit-invite design D3). */
|
|
63
|
-
export declare function assembleInviteKey(inviteId: string, masterSecret?: Uint8Array): {
|
|
64
|
-
key: string;
|
|
65
|
-
invite_id_bytes: Uint8Array;
|
|
66
|
-
master_secret: Uint8Array;
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Parse ANY `kg**_` claim-family key by its prefix registry against the
|
|
70
|
-
* `expectedKind` the calling verb accepts. A recognized prefix of a
|
|
71
|
-
* DIFFERENT kind (a `kgi1_` invite key handed to `resume`, or a `kgh1_`
|
|
72
|
-
* handoff key handed to `join`) refuses BY NAME pointing at its own verb —
|
|
73
|
-
* never misread as a malformed key of the expected kind, and never
|
|
74
|
-
* contacting the gateway (design D9 rule 4 / kygit-invite design D3).
|
|
75
|
-
*/
|
|
76
|
-
export declare function parseClaimKey(raw: string, expectedKind: ClaimKind): ClaimKeyParts;
|
|
77
|
-
/**
|
|
78
|
-
* Parse ANY `kg**_` handoff-family key by its prefix registry. A recognized
|
|
79
|
-
* prefix of a DIFFERENT kind (an invite key handed to `resume`) refuses BY
|
|
80
|
-
* NAME pointing at its own verb — never misread as a malformed handoff key
|
|
81
|
-
* (design D9 rule 4). Kind-bound alias of {@link parseClaimKey}.
|
|
82
|
-
*/
|
|
83
|
-
export declare function parseHandoffKey(raw: string): HandoffKeyParts;
|
|
84
|
-
/** The invite-kind sibling of {@link parseHandoffKey} (kygit-invite design D3). */
|
|
85
|
-
export declare function parseInviteKey(raw: string): InviteKeyParts;
|
|
86
|
-
export interface HandoffSecrets {
|
|
87
|
-
auth_secret: Uint8Array;
|
|
88
|
-
wrap_key: Uint8Array;
|
|
89
|
-
/** `SHA-256(auth-hash-label ‖ auth_secret)`, lowercase hex — the ONLY thing the gateway ever stores. */
|
|
90
|
-
auth_hash_hex: string;
|
|
91
|
-
}
|
|
92
|
-
/** `HKDF-SHA256(ikm=master_secret, salt=handoff_id[16], info=kygit/handoff/…)` per D3, for both `auth_secret` and `wrap_key`. */
|
|
93
|
-
export declare function deriveHandoffSecrets(handoffIdBytes: Uint8Array, masterSecret: Uint8Array): HandoffSecrets;
|
|
94
|
-
/** The invite-kind sibling of {@link deriveHandoffSecrets}, domain-separated under `kygit/invite/…` info strings (kygit-invite design D3) — an invite secret never verifies as a handoff hash, or the reverse. */
|
|
95
|
-
export declare function deriveInviteSecrets(inviteIdBytes: Uint8Array, masterSecret: Uint8Array): HandoffSecrets;
|
|
2
|
+
import { type ClaimKind, type HandoffKeyPrefixEntry, type ClaimKeyParts, type HandoffKeyParts, type InviteKeyParts, type HandoffSecrets, HANDOFF_KEY_PREFIXES, uuidToBytes, assembleHandoffKey, assembleInviteKey, parseClaimKey, parseHandoffKey, parseInviteKey, deriveHandoffSecrets, deriveInviteSecrets } from "./bearer-claim-key.js";
|
|
3
|
+
export { HANDOFF_KEY_PREFIXES, uuidToBytes, assembleHandoffKey, assembleInviteKey, parseClaimKey, parseHandoffKey, parseInviteKey, deriveHandoffSecrets, deriveInviteSecrets, };
|
|
4
|
+
export type { ClaimKind, HandoffKeyPrefixEntry, ClaimKeyParts, HandoffKeyParts, InviteKeyParts, HandoffSecrets };
|
|
96
5
|
/**
|
|
97
6
|
* Third HKDF output of a claim key's `master_secret` (design D4, protocol
|
|
98
7
|
* §4.17; kind-parameterized by kygit-invite design D3): the one-use
|
|
@@ -332,5 +241,4 @@ export declare function scanInviteNoteForSecrets(note: KygitInviteNote): Handoff
|
|
|
332
241
|
export declare function assertHandoffNoteHasNoSecret(note: KygitHandoffNote): void;
|
|
333
242
|
/** Throws `INVITE_NOTE_CONTAINS_SECRET` naming the field — call before the invite commit is written (kygit-invite design D3). */
|
|
334
243
|
export declare function assertInviteNoteHasNoSecret(note: KygitInviteNote): void;
|
|
335
|
-
export {};
|
|
336
244
|
//# sourceMappingURL=gitvault-handoff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitvault-handoff.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-handoff.ts"],"names":[],"mappings":"AA0CA,OAAO,
|
|
1
|
+
{"version":3,"file":"gitvault-handoff.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,133 +40,20 @@ import { concatBytes, utf8ToBytes } from "@noble/hashes/utils.js";
|
|
|
40
40
|
import { xchacha20poly1305 } from "@noble/ciphers/chacha.js";
|
|
41
41
|
import { base64 } from "@scure/base";
|
|
42
42
|
import { LocalError } from "../errors.js";
|
|
43
|
-
import { _gitvaultAeadBackend, fromBase64url, randomBytes, toBase64url,
|
|
43
|
+
import { _gitvaultAeadBackend, fromBase64url, randomBytes, toBase64url, GITVAULT_FORMAT, GITVAULT_SUITE, GITVAULT_HEX16_RE, GITVAULT_SHA256_RE, signaturePreimage, ed25519Sign, ed25519PublicKey, ed25519VerifyStrict, vkFingerprint, ekFingerprint, } from "../namespaces/gitvault.crypto.js";
|
|
44
|
+
// add-room-invite design D2: the pure key-format primitives (the registry,
|
|
45
|
+
// uuidToBytes, assemble/parse, the HKDF derive) moved to
|
|
46
|
+
// `bearer-claim-key.ts` — a move, not a copy — so the room kind (`kri1_`)
|
|
47
|
+
// can share them without teaching THIS vault-shaped module a room-shaped
|
|
48
|
+
// kind. Every symbol this module previously exported is re-exported here
|
|
49
|
+
// under its existing name, so nothing importing it changes.
|
|
50
|
+
import { HANDOFF_KEY_PREFIXES, uuidToBytes, assembleHandoffKey, assembleInviteKey, parseClaimKey, parseHandoffKey, parseInviteKey, deriveHandoffSecrets, deriveInviteSecrets, } from "./bearer-claim-key.js";
|
|
51
|
+
export { HANDOFF_KEY_PREFIXES, uuidToBytes, assembleHandoffKey, assembleInviteKey, parseClaimKey, parseHandoffKey, parseInviteKey, deriveHandoffSecrets, deriveInviteSecrets, };
|
|
44
52
|
function fail(code, message, context, details) {
|
|
45
53
|
throw new LocalError(message, context, { code, details });
|
|
46
54
|
}
|
|
47
|
-
/**
|
|
48
|
-
* `kgh1_` is the first row (handoff); `kgi1_` is the second (invite,
|
|
49
|
-
* kygit-invite design D3). A future third kind is a SIBLING row here, never
|
|
50
|
-
* a branch on either existing one's parser.
|
|
51
|
-
*/
|
|
52
|
-
export const HANDOFF_KEY_PREFIXES = [
|
|
53
|
-
{ prefix: "kgh1_", kind: "handoff", verb: "resume", errorPrefix: "HANDOFF", envelopeKind: "kygit-handoff-envelope-v2", noteSchema: "kygit.handoff-note.v1", frameMagic: "KGH1" },
|
|
54
|
-
{ prefix: "kgi1_", kind: "invite", verb: "join", errorPrefix: "INVITE", envelopeKind: "kygit-invite-envelope-v2", noteSchema: "kygit.invite-note.v1", frameMagic: "KGI1" },
|
|
55
|
-
];
|
|
56
55
|
const HANDOFF_ENTRY = HANDOFF_KEY_PREFIXES[0];
|
|
57
56
|
const INVITE_ENTRY = HANDOFF_KEY_PREFIXES[1];
|
|
58
|
-
const CLAIM_ID_BYTES = 16;
|
|
59
|
-
const MASTER_SECRET_BYTES = 32;
|
|
60
|
-
const CLAIM_KEY_BODY_BYTES = CLAIM_ID_BYTES + MASTER_SECRET_BYTES;
|
|
61
|
-
function bytesToUuid(bytes) {
|
|
62
|
-
const h = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
63
|
-
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;
|
|
64
|
-
}
|
|
65
|
-
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
66
|
-
export function uuidToBytes(uuid, field = "handoff_id") {
|
|
67
|
-
if (!UUID_RE.test(uuid))
|
|
68
|
-
fail("HANDOFF_ID_INVALID", `${field} is not a canonical UUID`, "parsing handoff id", { field });
|
|
69
|
-
const hex = uuid.replace(/-/g, "").toLowerCase();
|
|
70
|
-
const out = new Uint8Array(16);
|
|
71
|
-
for (let i = 0; i < 16; i++)
|
|
72
|
-
out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
73
|
-
return out;
|
|
74
|
-
}
|
|
75
|
-
/** Assemble a printed claim key from a fresh 32-byte master secret and the gateway-minted claim id, for `entry`'s kind. */
|
|
76
|
-
function assembleClaimKey(entry, claimId, masterSecret) {
|
|
77
|
-
if (masterSecret.length !== MASTER_SECRET_BYTES)
|
|
78
|
-
fail(`${entry.errorPrefix}_KEY_INVALID`, "master_secret must be 32 bytes", `assembling ${entry.kind} key`);
|
|
79
|
-
const idBytes = uuidToBytes(claimId, `${entry.kind}_id`);
|
|
80
|
-
const body = concatBytes(idBytes, masterSecret);
|
|
81
|
-
return { key: `${entry.prefix}${toBase64url(body)}`, id_bytes: idBytes, master_secret: masterSecret };
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Assemble the printed key from a fresh 32-byte master secret and the
|
|
85
|
-
* gateway-minted `handoff_id`. The gateway never sees `master_secret` — the
|
|
86
|
-
* caller derives `auth_hash` (via {@link deriveHandoffSecrets}) and sends
|
|
87
|
-
* ONLY that.
|
|
88
|
-
*/
|
|
89
|
-
export function assembleHandoffKey(handoffId, masterSecret = randomBytes(MASTER_SECRET_BYTES)) {
|
|
90
|
-
const { key, id_bytes, master_secret } = assembleClaimKey(HANDOFF_ENTRY, handoffId, masterSecret);
|
|
91
|
-
return { key, handoff_id_bytes: id_bytes, master_secret };
|
|
92
|
-
}
|
|
93
|
-
/** The invite-kind sibling of {@link assembleHandoffKey} (kygit-invite design D3). */
|
|
94
|
-
export function assembleInviteKey(inviteId, masterSecret = randomBytes(MASTER_SECRET_BYTES)) {
|
|
95
|
-
const { key, id_bytes, master_secret } = assembleClaimKey(INVITE_ENTRY, inviteId, masterSecret);
|
|
96
|
-
return { key, invite_id_bytes: id_bytes, master_secret };
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Parse ANY `kg**_` claim-family key by its prefix registry against the
|
|
100
|
-
* `expectedKind` the calling verb accepts. A recognized prefix of a
|
|
101
|
-
* DIFFERENT kind (a `kgi1_` invite key handed to `resume`, or a `kgh1_`
|
|
102
|
-
* handoff key handed to `join`) refuses BY NAME pointing at its own verb —
|
|
103
|
-
* never misread as a malformed key of the expected kind, and never
|
|
104
|
-
* contacting the gateway (design D9 rule 4 / kygit-invite design D3).
|
|
105
|
-
*/
|
|
106
|
-
export function parseClaimKey(raw, expectedKind) {
|
|
107
|
-
const expectedEntry = expectedKind === "handoff" ? HANDOFF_ENTRY : INVITE_ENTRY;
|
|
108
|
-
const trimmed = raw.trim();
|
|
109
|
-
const entry = HANDOFF_KEY_PREFIXES.find((e) => trimmed.startsWith(e.prefix));
|
|
110
|
-
if (!entry) {
|
|
111
|
-
fail(`${expectedEntry.errorPrefix}_KEY_INVALID`, `not a recognized kygit key (expected a key starting ${expectedEntry.prefix})`, "parsing claim key");
|
|
112
|
-
}
|
|
113
|
-
if (entry.kind !== expectedKind) {
|
|
114
|
-
fail(`${expectedEntry.errorPrefix}_KEY_WRONG_KIND`, `this key is a ${entry.kind} key — use \`kygit ${entry.verb}\` instead of ${expectedEntry.verb}`, "parsing claim key", { kind: entry.kind, verb: entry.verb });
|
|
115
|
-
}
|
|
116
|
-
const body = trimmed.slice(entry.prefix.length);
|
|
117
|
-
let bytes;
|
|
118
|
-
try {
|
|
119
|
-
bytes = fromBase64url(body, `${entry.kind} key body`);
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
fail(`${entry.errorPrefix}_KEY_INVALID`, "the key body is not valid base64url", "parsing claim key");
|
|
123
|
-
}
|
|
124
|
-
if (bytes.length !== CLAIM_KEY_BODY_BYTES) {
|
|
125
|
-
fail(`${entry.errorPrefix}_KEY_INVALID`, `the key decodes to ${bytes.length} bytes; expected ${CLAIM_KEY_BODY_BYTES}`, "parsing claim key");
|
|
126
|
-
}
|
|
127
|
-
const idBytes = bytes.subarray(0, CLAIM_ID_BYTES);
|
|
128
|
-
const masterSecret = bytes.subarray(CLAIM_ID_BYTES);
|
|
129
|
-
return { kind: entry.kind, id_bytes: idBytes, id: bytesToUuid(idBytes), master_secret: masterSecret };
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Parse ANY `kg**_` handoff-family key by its prefix registry. A recognized
|
|
133
|
-
* prefix of a DIFFERENT kind (an invite key handed to `resume`) refuses BY
|
|
134
|
-
* NAME pointing at its own verb — never misread as a malformed handoff key
|
|
135
|
-
* (design D9 rule 4). Kind-bound alias of {@link parseClaimKey}.
|
|
136
|
-
*/
|
|
137
|
-
export function parseHandoffKey(raw) {
|
|
138
|
-
const parsed = parseClaimKey(raw, "handoff");
|
|
139
|
-
return { kind: "handoff", handoff_id_bytes: parsed.id_bytes, handoff_id: parsed.id, master_secret: parsed.master_secret };
|
|
140
|
-
}
|
|
141
|
-
/** The invite-kind sibling of {@link parseHandoffKey} (kygit-invite design D3). */
|
|
142
|
-
export function parseInviteKey(raw) {
|
|
143
|
-
const parsed = parseClaimKey(raw, "invite");
|
|
144
|
-
return { kind: "invite", invite_id_bytes: parsed.id_bytes, invite_id: parsed.id, master_secret: parsed.master_secret };
|
|
145
|
-
}
|
|
146
|
-
/** `HKDF-SHA256(ikm=master_secret, salt=id[16], info=…)` per D3, domain-separated by kind, for both `auth_secret` and `wrap_key`. */
|
|
147
|
-
function deriveClaimSecrets(kind, idBytes, masterSecret) {
|
|
148
|
-
const authInfo = `kygit/${kind}/auth/v1`;
|
|
149
|
-
const wrapInfo = `kygit/${kind}/wrap/v1`;
|
|
150
|
-
const authHashLabel = `kygit/${kind}/auth-hash/v1`;
|
|
151
|
-
const authSecret = hkdf(sha256, masterSecret, idBytes, utf8ToBytes(authInfo), 32);
|
|
152
|
-
const wrapKey = hkdf(sha256, masterSecret, idBytes, utf8ToBytes(wrapInfo), 32);
|
|
153
|
-
const authHash = sha256(concatBytes(utf8ToBytes(authHashLabel), authSecret));
|
|
154
|
-
// ONE SHA-256 over (label ‖ auth_secret), hex-encoded — exactly what the
|
|
155
|
-
// gateway recomputes at claim (`computeAuthHash`). Through 4.68.1 this line
|
|
156
|
-
// ran the digest through `sha256Hex` (which hashes its input again), so the
|
|
157
|
-
// stored value was sha256(sha256(label ‖ secret)) and NO key minted by any
|
|
158
|
-
// published client could ever verify. The cross-side vector in
|
|
159
|
-
// gitvault-handoff.test.ts now recomputes the gateway's hash independently.
|
|
160
|
-
return { auth_secret: authSecret, wrap_key: wrapKey, auth_hash_hex: bytesToHex(authHash) };
|
|
161
|
-
}
|
|
162
|
-
/** `HKDF-SHA256(ikm=master_secret, salt=handoff_id[16], info=kygit/handoff/…)` per D3, for both `auth_secret` and `wrap_key`. */
|
|
163
|
-
export function deriveHandoffSecrets(handoffIdBytes, masterSecret) {
|
|
164
|
-
return deriveClaimSecrets("handoff", handoffIdBytes, masterSecret);
|
|
165
|
-
}
|
|
166
|
-
/** The invite-kind sibling of {@link deriveHandoffSecrets}, domain-separated under `kygit/invite/…` info strings (kygit-invite design D3) — an invite secret never verifies as a handoff hash, or the reverse. */
|
|
167
|
-
export function deriveInviteSecrets(inviteIdBytes, masterSecret) {
|
|
168
|
-
return deriveClaimSecrets("invite", inviteIdBytes, masterSecret);
|
|
169
|
-
}
|
|
170
57
|
// ─── Writer-admission grant + acceptance (gitvault-multi-writer D4/§4.17) ───
|
|
171
58
|
//
|
|
172
59
|
// The bearer-completable path for `add_writer_key{authorization.kind:
|