raz-encrypt 2.1.0 → 2.4.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/README.md +58 -12
- package/dist/crypto/hybrid.d.ts +1 -1
- package/dist/crypto/hybrid.js.map +1 -1
- package/dist/fileCrypto.js +2 -1
- package/dist/fileCrypto.js.map +1 -1
- package/dist/identity.js +39 -3
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +51 -10
- package/dist/store.js.map +1 -1
- package/dist/trust.d.ts +32 -5
- package/dist/trust.js +242 -97
- package/dist/trust.js.map +1 -1
- package/package.json +10 -4
package/dist/trust.js
CHANGED
|
@@ -4,12 +4,14 @@ import { hkdf } from "@noble/hashes/hkdf.js";
|
|
|
4
4
|
import { hmac } from "@noble/hashes/hmac.js";
|
|
5
5
|
import { sha384 } from "@noble/hashes/sha2.js";
|
|
6
6
|
import { bytesToHex, concatBytes, hexToBytes, randomBytes, utf8ToBytes } from "@noble/hashes/utils.js";
|
|
7
|
-
import {
|
|
8
|
-
import { join } from "node:path";
|
|
7
|
+
import { readFile } from "node:fs/promises";
|
|
8
|
+
import { join, resolve } from "node:path";
|
|
9
9
|
import { canonicalize } from "./canonicalJson.js";
|
|
10
10
|
import { isValidIsoInstant, signCore, verifyCore } from "./crypto/hybrid.js";
|
|
11
|
+
import { writeFileAtomic } from "./fileCrypto.js";
|
|
11
12
|
import { fingerprint } from "./fingerprint.js";
|
|
12
13
|
import { exportPublicIdentity } from "./identity.js";
|
|
14
|
+
import { appendLogEntry } from "./store.js";
|
|
13
15
|
/**
|
|
14
16
|
* Thrown when trust.json cannot be trusted: its MAC does not verify (edited,
|
|
15
17
|
* truncated, copied from another identity), it is not valid JSON, or it is an
|
|
@@ -29,6 +31,8 @@ const TRUST_STORE_HMAC_INFO = utf8ToBytes("raz-encrypt-trust-store-v1|hmac-key")
|
|
|
29
31
|
// separate from its entry key (ADR 0019) — independent HKDF outputs per use
|
|
30
32
|
// (ADR 0027).
|
|
31
33
|
const TRUST_STORE_ENC_INFO = utf8ToBytes("raz-encrypt-trust-store-v1|enc-key");
|
|
34
|
+
// Third independent key, for the freshness sidecar (ADR 0030).
|
|
35
|
+
const TRUST_STORE_SEQ_INFO = utf8ToBytes("raz-encrypt-trust-store-v1|seq-key");
|
|
32
36
|
function trustFilePath(storageDir) {
|
|
33
37
|
return join(storageDir, "trust.json");
|
|
34
38
|
}
|
|
@@ -44,26 +48,29 @@ function deriveTrustStoreKey(identity) {
|
|
|
44
48
|
function deriveTrustStoreEncKey(identity) {
|
|
45
49
|
return hkdf(sha384, concatBytes(identity.classical.secretKey, identity.pqcSign.secretKey), undefined, TRUST_STORE_ENC_INFO, 32);
|
|
46
50
|
}
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
// `seq` joins the MAC input only when present, so files written before ADR 0030 keep verifying unchanged.
|
|
52
|
+
function computeMac(identity, entries, seq) {
|
|
53
|
+
const body = seq === undefined ? { version: 3, entries } : { version: 3, entries, seq };
|
|
54
|
+
return bytesToHex(hmac(sha384, deriveTrustStoreKey(identity), utf8ToBytes(canonicalize(body))));
|
|
49
55
|
}
|
|
50
56
|
/**
|
|
51
57
|
* Exported (ADR 0026) so the timing-safety test can exercise this exact
|
|
52
58
|
* compare in isolation, without the file I/O its only internal callers do.
|
|
53
59
|
*/
|
|
54
|
-
export function macMatches(identity, entries, mac) {
|
|
60
|
+
export function macMatches(identity, entries, mac, seq) {
|
|
55
61
|
if (typeof mac !== "string" || !/^[0-9a-f]{96}$/.test(mac))
|
|
56
62
|
return false;
|
|
57
|
-
return equalBytes(hexToBytes(mac), hexToBytes(computeMac(identity, entries)));
|
|
63
|
+
return equalBytes(hexToBytes(mac), hexToBytes(computeMac(identity, entries, seq)));
|
|
58
64
|
}
|
|
59
65
|
/** v4's MAC covers the ciphertext blob instead of the plaintext entries (ADR 0027) — same chain-authentication mechanism, different bytes underneath it. */
|
|
60
|
-
function computeMacV4(identity, nonce, ciphertext) {
|
|
61
|
-
|
|
66
|
+
function computeMacV4(identity, nonce, ciphertext, seq) {
|
|
67
|
+
const body = seq === undefined ? { version: 4, nonce, ciphertext } : { version: 4, nonce, ciphertext, seq };
|
|
68
|
+
return bytesToHex(hmac(sha384, deriveTrustStoreKey(identity), utf8ToBytes(canonicalize(body))));
|
|
62
69
|
}
|
|
63
|
-
function macMatchesV4(identity, nonce, ciphertext, mac) {
|
|
70
|
+
function macMatchesV4(identity, nonce, ciphertext, mac, seq) {
|
|
64
71
|
if (typeof mac !== "string" || !/^[0-9a-f]{96}$/.test(mac))
|
|
65
72
|
return false;
|
|
66
|
-
return equalBytes(hexToBytes(mac), hexToBytes(computeMacV4(identity, nonce, ciphertext)));
|
|
73
|
+
return equalBytes(hexToBytes(mac), hexToBytes(computeMacV4(identity, nonce, ciphertext, seq)));
|
|
67
74
|
}
|
|
68
75
|
/** Associated data for the entries AEAD: binds the ciphertext to the format version and its own nonce, same pattern as fileCrypto.ts's headerAad. */
|
|
69
76
|
function entriesAad(version, nonce) {
|
|
@@ -92,7 +99,10 @@ function isV3(data) {
|
|
|
92
99
|
if (typeof data !== "object" || data === null || data.version !== 3)
|
|
93
100
|
return false;
|
|
94
101
|
const entries = data.entries;
|
|
95
|
-
return typeof entries === "object" && entries !== null && !Array.isArray(entries);
|
|
102
|
+
return typeof entries === "object" && entries !== null && !Array.isArray(entries) && validSeq(data.seq);
|
|
103
|
+
}
|
|
104
|
+
function validSeq(seq) {
|
|
105
|
+
return seq === undefined || (typeof seq === "number" && Number.isSafeInteger(seq) && seq >= 1);
|
|
96
106
|
}
|
|
97
107
|
function isHex96(value) {
|
|
98
108
|
return typeof value === "string" && /^[0-9a-f]{96}$/.test(value);
|
|
@@ -101,7 +111,7 @@ function isV4(data) {
|
|
|
101
111
|
if (typeof data !== "object" || data === null || data.version !== 4)
|
|
102
112
|
return false;
|
|
103
113
|
const d = data;
|
|
104
|
-
return typeof d.nonce === "string" && /^[0-9a-f]{24}$/.test(d.nonce) && typeof d.ciphertext === "string" && /^[0-9a-f]*$/.test(d.ciphertext) && isHex96(d.mac);
|
|
114
|
+
return typeof d.nonce === "string" && /^[0-9a-f]{24}$/.test(d.nonce) && typeof d.ciphertext === "string" && /^[0-9a-f]*$/.test(d.ciphertext) && isHex96(d.mac) && validSeq(data.seq);
|
|
105
115
|
}
|
|
106
116
|
function isV2(data) {
|
|
107
117
|
return typeof data === "object" && data !== null && data.version === 2;
|
|
@@ -140,39 +150,128 @@ function parse(raw) {
|
|
|
140
150
|
throw new TrustStoreIntegrityError("trust.json is not valid JSON; refusing to use it.");
|
|
141
151
|
}
|
|
142
152
|
}
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
const ROLLBACK_MESSAGE = "trust.json is older than the last recorded trust change: it was rolled back (or its sequence file was removed). Refusing to use it. Restore the newest copy, or investigate before re-trusting anyone.";
|
|
154
|
+
function seqFilePath(storageDir) {
|
|
155
|
+
return join(storageDir, "trust.seq.json");
|
|
156
|
+
}
|
|
157
|
+
function computeSeqMac(identity, seq, storeMac) {
|
|
158
|
+
const key = hkdf(sha384, concatBytes(identity.classical.secretKey, identity.pqcSign.secretKey), undefined, TRUST_STORE_SEQ_INFO, 32);
|
|
159
|
+
return bytesToHex(hmac(sha384, key, utf8ToBytes(canonicalize({ version: 1, seq, storeMac }))));
|
|
160
|
+
}
|
|
161
|
+
/** The sidecar's contents, or undefined if absent. Throws TrustStoreIntegrityError if it exists but is malformed or fails its MAC. */
|
|
162
|
+
async function readSeqRecord(identity) {
|
|
163
|
+
let raw;
|
|
164
|
+
try {
|
|
165
|
+
raw = await readFile(seqFilePath(identity.storageDir), "utf8");
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (err.code === "ENOENT")
|
|
169
|
+
return undefined;
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
const bad = () => new TrustStoreIntegrityError("trust.seq.json failed its integrity check: it was modified or belongs to a different identity.");
|
|
173
|
+
let data;
|
|
174
|
+
try {
|
|
175
|
+
data = JSON.parse(raw);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
throw bad();
|
|
179
|
+
}
|
|
180
|
+
const d = data;
|
|
181
|
+
if (typeof d !== "object" || d === null || d.version !== 1 || !validSeq(d.seq) || d.seq === undefined || !isHex96(d.storeMac) || !isHex96(d.mac))
|
|
182
|
+
throw bad();
|
|
183
|
+
if (!equalBytes(hexToBytes(d.mac), hexToBytes(computeSeqMac(identity, d.seq, d.storeMac))))
|
|
184
|
+
throw bad();
|
|
185
|
+
return d;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Reads and AUTHENTICATES the trust store, transparently decrypting a v4 (issue #43) file, and
|
|
189
|
+
* checks its freshness against the sequence sidecar (ADR 0030): a store whose `seq` is below the
|
|
190
|
+
* sidecar's, or equal with a different MAC, is a rollback. A store AHEAD of the sidecar is a crash
|
|
191
|
+
* between the two writes and is accepted (the next write repairs it). Missing file = empty store.
|
|
192
|
+
*/
|
|
193
|
+
async function readStoreState(identity) {
|
|
145
194
|
const raw = await readRaw(identity.storageDir);
|
|
146
195
|
if (raw === undefined)
|
|
147
|
-
return {};
|
|
196
|
+
return { entries: {}, seq: 0, mac: "" };
|
|
148
197
|
const data = parse(raw);
|
|
198
|
+
let state;
|
|
149
199
|
if (isV4(data)) {
|
|
150
|
-
if (!macMatchesV4(identity, data.nonce, data.ciphertext, data.mac)) {
|
|
200
|
+
if (!macMatchesV4(identity, data.nonce, data.ciphertext, data.mac, data.seq)) {
|
|
151
201
|
throw new TrustStoreIntegrityError("trust.json failed its integrity check: it was modified, truncated, or belongs to a different identity.");
|
|
152
202
|
}
|
|
153
|
-
|
|
203
|
+
state = { entries: decryptEntries(identity, data.nonce, data.ciphertext), seq: data.seq ?? 0, mac: data.mac };
|
|
154
204
|
}
|
|
155
|
-
if (!isV3(data)) {
|
|
205
|
+
else if (!isV3(data)) {
|
|
156
206
|
throw new TrustStoreIntegrityError("trust.json is an unauthenticated legacy file (written before trust-store MACs). Review it, then call migrateLegacyTrustStore(identity) to adopt it.");
|
|
157
207
|
}
|
|
158
|
-
|
|
159
|
-
|
|
208
|
+
else {
|
|
209
|
+
if (!macMatches(identity, data.entries, data.mac, data.seq)) {
|
|
210
|
+
throw new TrustStoreIntegrityError("trust.json failed its integrity check: it was modified, truncated, or belongs to a different identity.");
|
|
211
|
+
}
|
|
212
|
+
state = { entries: data.entries, seq: data.seq ?? 0, mac: data.mac };
|
|
160
213
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const tmpPath = `${finalPath}.${process.pid}.${Date.now()}.tmp`;
|
|
167
|
-
try {
|
|
168
|
-
await writeFile(tmpPath, JSON.stringify(store, null, 2), { mode: 0o600 });
|
|
169
|
-
await rename(tmpPath, finalPath);
|
|
214
|
+
const record = await readSeqRecord(identity);
|
|
215
|
+
if (record === undefined) {
|
|
216
|
+
// Only a first-ever write can legitimately leave a store with no sidecar (crash between the two writes).
|
|
217
|
+
if (state.seq > 1)
|
|
218
|
+
throw new TrustStoreIntegrityError(ROLLBACK_MESSAGE);
|
|
170
219
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
220
|
+
else if (state.seq < record.seq || (state.seq === record.seq && state.mac !== record.storeMac)) {
|
|
221
|
+
throw new TrustStoreIntegrityError(ROLLBACK_MESSAGE);
|
|
222
|
+
}
|
|
223
|
+
return state;
|
|
224
|
+
}
|
|
225
|
+
async function readTrustStore(identity) {
|
|
226
|
+
return (await readStoreState(identity)).entries;
|
|
227
|
+
}
|
|
228
|
+
/** The current `{ seq, mac }` of the trust store. Store it off-box after changes you care about. */
|
|
229
|
+
export async function getTrustStoreAnchor(identity) {
|
|
230
|
+
const { seq, mac } = await readStoreState(identity);
|
|
231
|
+
return { seq, mac };
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Throws TrustStoreIntegrityError if the local trust store is older than `anchor`, or has the
|
|
235
|
+
* same sequence number with different contents. Newer is fine. This is the only check that
|
|
236
|
+
* catches a rollback where trust.json and trust.seq.json were restored together (ADR 0030).
|
|
237
|
+
*/
|
|
238
|
+
export async function verifyTrustStoreAnchor(identity, anchor) {
|
|
239
|
+
const { seq, mac } = await readStoreState(identity);
|
|
240
|
+
if (seq < anchor.seq || (seq === anchor.seq && mac !== anchor.mac)) {
|
|
241
|
+
throw new TrustStoreIntegrityError("the trust store does not match the anchor you supplied: it was rolled back or replaced.");
|
|
174
242
|
}
|
|
175
243
|
}
|
|
244
|
+
async function writeStoreFile(identity, store, seq) {
|
|
245
|
+
// Temp file with a unique name, fsync of file and directory, then rename (ADR 0028):
|
|
246
|
+
// a crash leaves the complete old file or the complete new one, never a torn one.
|
|
247
|
+
await writeFileAtomic(trustFilePath(identity.storageDir), JSON.stringify(store, null, 2));
|
|
248
|
+
// Then the freshness sidecar (ADR 0030). A crash between the two leaves the store one ahead, which reads accept.
|
|
249
|
+
const record = { version: 1, seq, storeMac: store.mac, mac: computeSeqMac(identity, seq, store.mac) };
|
|
250
|
+
await writeFileAtomic(seqFilePath(identity.storageDir), JSON.stringify(record));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Serializes every read-modify-write of one identity's trust store (ADR
|
|
254
|
+
* 0028, issue #56). Without this, two overlapping mutations each read the
|
|
255
|
+
* same snapshot and the later write erased the earlier one, so a revocation
|
|
256
|
+
* could be lost while the revoked party stayed trusted. In-process only, like
|
|
257
|
+
* the audit log's queue (ADR 0011): separate OS processes sharing one
|
|
258
|
+
* storageDir are not coordinated.
|
|
259
|
+
*
|
|
260
|
+
* A failure in one task never blocks the next. The map entry is removed once
|
|
261
|
+
* its chain drains, so it does not grow with every storageDir ever touched.
|
|
262
|
+
*/
|
|
263
|
+
const mutationQueues = new Map();
|
|
264
|
+
function serialized(identity, task) {
|
|
265
|
+
const key = resolve(identity.storageDir);
|
|
266
|
+
const run = (mutationQueues.get(key) ?? Promise.resolve()).then(task);
|
|
267
|
+
const tail = run.then(() => undefined, () => undefined);
|
|
268
|
+
mutationQueues.set(key, tail);
|
|
269
|
+
void tail.then(() => {
|
|
270
|
+
if (mutationQueues.get(key) === tail)
|
|
271
|
+
mutationQueues.delete(key);
|
|
272
|
+
});
|
|
273
|
+
return run;
|
|
274
|
+
}
|
|
176
275
|
/**
|
|
177
276
|
* Writes the store with a fresh MAC, atomically (temp file in the same
|
|
178
277
|
* directory, then rename), mode 0o600. Preserves whatever format is
|
|
@@ -183,15 +282,22 @@ async function writeStoreFile(identity, store) {
|
|
|
183
282
|
async function writeTrustStore(identity, entries) {
|
|
184
283
|
const raw = await readRaw(identity.storageDir);
|
|
185
284
|
const current = raw === undefined ? undefined : parse(raw);
|
|
285
|
+
const seq = (current?.seq ?? 0) + 1;
|
|
186
286
|
if (isV4(current)) {
|
|
187
|
-
await writeTrustStore4(identity, entries);
|
|
287
|
+
await writeTrustStore4(identity, entries, seq);
|
|
188
288
|
return;
|
|
189
289
|
}
|
|
190
|
-
await writeStoreFile(identity, { version: 3, entries, mac: computeMac(identity, entries) });
|
|
290
|
+
await writeStoreFile(identity, { version: 3, entries, seq, mac: computeMac(identity, entries, seq) }, seq);
|
|
191
291
|
}
|
|
192
|
-
async function writeTrustStore4(identity, entries) {
|
|
292
|
+
async function writeTrustStore4(identity, entries, seq) {
|
|
293
|
+
const next = seq ?? (await currentSeq(identity)) + 1;
|
|
193
294
|
const { nonce, ciphertext } = encryptEntries(identity, entries);
|
|
194
|
-
await writeStoreFile(identity, { version: 4, nonce, ciphertext, mac: computeMacV4(identity, nonce, ciphertext) });
|
|
295
|
+
await writeStoreFile(identity, { version: 4, nonce, ciphertext, seq: next, mac: computeMacV4(identity, nonce, ciphertext, next) }, next);
|
|
296
|
+
}
|
|
297
|
+
async function currentSeq(identity) {
|
|
298
|
+
const raw = await readRaw(identity.storageDir);
|
|
299
|
+
const seq = raw === undefined ? undefined : parse(raw).seq;
|
|
300
|
+
return typeof seq === "number" ? seq : 0;
|
|
195
301
|
}
|
|
196
302
|
/**
|
|
197
303
|
* One-time, explicit opt-in (issue #43/ADR 0027) to encrypt `trust.json`'s
|
|
@@ -200,13 +306,15 @@ async function writeTrustStore4(identity, entries) {
|
|
|
200
306
|
* is not implicitly adopted here — call `migrateLegacyTrustStore` first, same
|
|
201
307
|
* as reading it would require.
|
|
202
308
|
*/
|
|
203
|
-
export
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
309
|
+
export function migrateTrustStoreToEncrypted(identity) {
|
|
310
|
+
return serialized(identity, async () => {
|
|
311
|
+
const raw = await readRaw(identity.storageDir);
|
|
312
|
+
const current = raw === undefined ? undefined : parse(raw);
|
|
313
|
+
const entries = await readTrustStore(identity); // verifies/decrypts whichever format; throws on a legacy or tampered file
|
|
314
|
+
if (isV4(current))
|
|
315
|
+
return; // already encrypted — true no-op, same spirit as migrateLegacyTrustStore's
|
|
316
|
+
await writeTrustStore4(identity, entries);
|
|
317
|
+
});
|
|
210
318
|
}
|
|
211
319
|
/**
|
|
212
320
|
* One-time, explicit adoption of a trust.json written before trust-store
|
|
@@ -218,18 +326,20 @@ export async function migrateTrustStoreToEncrypted(identity) {
|
|
|
218
326
|
* adopted; returns 0 and changes nothing if the file is missing or already
|
|
219
327
|
* authenticated (a modified authenticated file still throws).
|
|
220
328
|
*/
|
|
221
|
-
export
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
329
|
+
export function migrateLegacyTrustStore(identity) {
|
|
330
|
+
return serialized(identity, async () => {
|
|
331
|
+
const raw = await readRaw(identity.storageDir);
|
|
332
|
+
if (raw === undefined)
|
|
333
|
+
return 0;
|
|
334
|
+
const data = parse(raw);
|
|
335
|
+
if (isV3(data) || isV4(data)) {
|
|
336
|
+
await readTrustStore(identity); // verifies (and decrypts, for v4); throws if tampered
|
|
337
|
+
return 0;
|
|
338
|
+
}
|
|
339
|
+
const entries = legacyEntries(data);
|
|
340
|
+
await writeTrustStore(identity, entries);
|
|
341
|
+
return Object.keys(entries).length;
|
|
342
|
+
});
|
|
233
343
|
}
|
|
234
344
|
/**
|
|
235
345
|
* Records another party's public card as trusted, keyed by the card's
|
|
@@ -241,10 +351,13 @@ export async function migrateLegacyTrustStore(identity) {
|
|
|
241
351
|
*
|
|
242
352
|
* Trusting a card again after it was revoked reinstates it (clears revokedAt).
|
|
243
353
|
*/
|
|
244
|
-
export
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
354
|
+
export function trustParty(identity, card) {
|
|
355
|
+
return serialized(identity, async () => {
|
|
356
|
+
const entries = await readTrustStore(identity);
|
|
357
|
+
entries[fingerprint(card)] = { card, trustedAt: new Date().toISOString() };
|
|
358
|
+
await writeTrustStore(identity, entries);
|
|
359
|
+
await appendLogEntry(identity, { action: "trust", counterpartAlias: card.alias });
|
|
360
|
+
});
|
|
248
361
|
}
|
|
249
362
|
/**
|
|
250
363
|
* Revokes every currently-trusted card recorded under `alias` — e.g. after a
|
|
@@ -253,14 +366,17 @@ export async function trustParty(identity, card) {
|
|
|
253
366
|
* lost, and so verify() can report "revoked-signer" distinctly from
|
|
254
367
|
* "untrusted-signer" (never trusted at all).
|
|
255
368
|
*/
|
|
256
|
-
export
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
record.
|
|
262
|
-
|
|
263
|
-
|
|
369
|
+
export function untrustParty(identity, alias) {
|
|
370
|
+
return serialized(identity, async () => {
|
|
371
|
+
const entries = await readTrustStore(identity);
|
|
372
|
+
const revokedAt = new Date().toISOString();
|
|
373
|
+
for (const record of Object.values(entries)) {
|
|
374
|
+
if (record.card.alias === alias && !record.revokedAt)
|
|
375
|
+
record.revokedAt = revokedAt;
|
|
376
|
+
}
|
|
377
|
+
await writeTrustStore(identity, entries);
|
|
378
|
+
await appendLogEntry(identity, { action: "untrust", counterpartAlias: alias });
|
|
379
|
+
});
|
|
264
380
|
}
|
|
265
381
|
/**
|
|
266
382
|
* Revokes exactly one card, identified by its `fingerprint(card)` string
|
|
@@ -269,16 +385,19 @@ export async function untrustParty(identity, alias) {
|
|
|
269
385
|
* Returns true if a currently-trusted record was revoked, false if no such
|
|
270
386
|
* trusted record exists (a typo'd fingerprint is reported, not ignored).
|
|
271
387
|
*/
|
|
272
|
-
export
|
|
388
|
+
export function untrustFingerprint(identity, fingerprintValue) {
|
|
273
389
|
const normalize = (value) => value.replace(/\s+/g, "").toUpperCase();
|
|
274
390
|
const wanted = normalize(fingerprintValue);
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
391
|
+
return serialized(identity, async () => {
|
|
392
|
+
const entries = await readTrustStore(identity);
|
|
393
|
+
const key = Object.keys(entries).find((candidate) => normalize(candidate) === wanted);
|
|
394
|
+
if (key === undefined || entries[key].revokedAt)
|
|
395
|
+
return false;
|
|
396
|
+
entries[key].revokedAt = new Date().toISOString();
|
|
397
|
+
await writeTrustStore(identity, entries);
|
|
398
|
+
await appendLogEntry(identity, { action: "untrust", counterpartAlias: entries[key].card.alias });
|
|
399
|
+
return true;
|
|
400
|
+
});
|
|
282
401
|
}
|
|
283
402
|
/** Every currently-trusted (non-revoked) card. */
|
|
284
403
|
export async function listTrustedParties(identity) {
|
|
@@ -346,7 +465,8 @@ export async function trustSignedCard(identity, card, certificate) {
|
|
|
346
465
|
* NEW identity, to get a complete, dual-signed RotationStatement — a single
|
|
347
466
|
* signature from the old key alone is never enough to redirect a peer's
|
|
348
467
|
* trust (see `applyRotation`), so this function's output is not yet usable
|
|
349
|
-
* on its own.
|
|
468
|
+
* on its own. Even a dual-signed statement is only as trustworthy as the new
|
|
469
|
+
* fingerprint the receiver confirms out of band (`applyRotation`).
|
|
350
470
|
*/
|
|
351
471
|
export async function beginRotation(oldIdentity, newCard, options = {}) {
|
|
352
472
|
const rotatedAt = options.rotatedAt ?? new Date().toISOString();
|
|
@@ -359,8 +479,11 @@ export async function beginRotation(oldIdentity, newCard, options = {}) {
|
|
|
359
479
|
/**
|
|
360
480
|
* Finishes a key rotation: the NEW identity signs the SAME document
|
|
361
481
|
* `beginRotation` produced, proving the new key exists and agrees to be
|
|
362
|
-
* named as successor
|
|
363
|
-
*
|
|
482
|
+
* named as successor. This proves the statement's author controls the new
|
|
483
|
+
* key; it does NOT prove the new key belongs to the real owner — an attacker
|
|
484
|
+
* who stole the old key can mint their own "new" identity and complete the
|
|
485
|
+
* statement themselves. Receivers close that gap with `applyRotation`'s
|
|
486
|
+
* out-of-band `confirmNewFingerprint`.
|
|
364
487
|
*/
|
|
365
488
|
export async function completeRotation(newIdentity, draft) {
|
|
366
489
|
const newCertificate = await signCore(newIdentity, draft.document);
|
|
@@ -374,8 +497,19 @@ export async function completeRotation(newIdentity, draft) {
|
|
|
374
497
|
* fingerprint). A statement for a card you never trusted is a no-op — this
|
|
375
498
|
* is not a way to seed your trust store with a card you never decided to
|
|
376
499
|
* trust in the first place.
|
|
500
|
+
*
|
|
501
|
+
* `options.confirmNewFingerprint` is REQUIRED: the new card's fingerprint as
|
|
502
|
+
* the real owner gave it to you over a channel the statement did not travel
|
|
503
|
+
* on (phone call, in person). Dual signatures alone only prove the author
|
|
504
|
+
* holds both keys; an attacker with a stolen old key supplies their own
|
|
505
|
+
* "new" key and signs both. Spacing and case are ignored when comparing.
|
|
506
|
+
* A mismatch returns `{ valid: false, reason: "fingerprint-mismatch" }` and
|
|
507
|
+
* changes nothing; a missing value throws (ADR 0029).
|
|
377
508
|
*/
|
|
378
|
-
export async function applyRotation(identity, statement) {
|
|
509
|
+
export async function applyRotation(identity, statement, options) {
|
|
510
|
+
if (typeof options?.confirmNewFingerprint !== "string" || options.confirmNewFingerprint.trim() === "") {
|
|
511
|
+
throw new Error("applyRotation requires options.confirmNewFingerprint: the new card's fingerprint, confirmed with its owner out of band (ADR 0029).");
|
|
512
|
+
}
|
|
379
513
|
const { document, oldCertificate, newCertificate } = statement;
|
|
380
514
|
const oldResult = await verifyCore(identity, document, oldCertificate, {
|
|
381
515
|
checkTrust: async (signer) => (cardMatchesSigner(document.oldCard, signer) ? "trusted" : "untrusted"),
|
|
@@ -387,16 +521,24 @@ export async function applyRotation(identity, statement) {
|
|
|
387
521
|
});
|
|
388
522
|
if (!newResult.valid)
|
|
389
523
|
return newResult;
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
524
|
+
const normalize = (value) => value.replace(/\s+/g, "").toUpperCase();
|
|
525
|
+
if (normalize(fingerprint(document.newCard)) !== normalize(options.confirmNewFingerprint)) {
|
|
526
|
+
return { valid: false, reason: "fingerprint-mismatch" };
|
|
527
|
+
}
|
|
528
|
+
// Signature checks above need no store access; only the read-modify-write is serialized.
|
|
529
|
+
return serialized(identity, async () => {
|
|
530
|
+
const entries = await readTrustStore(identity);
|
|
531
|
+
const oldKey = fingerprint(document.oldCard);
|
|
532
|
+
const existing = entries[oldKey];
|
|
533
|
+
if (!existing || existing.revokedAt)
|
|
534
|
+
return { valid: true }; // nothing trusted to migrate from — no-op
|
|
535
|
+
const revokedAt = new Date().toISOString();
|
|
536
|
+
entries[oldKey] = { ...existing, revokedAt, rotatedTo: fingerprint(document.newCard) };
|
|
537
|
+
entries[fingerprint(document.newCard)] = { card: document.newCard, trustedAt: revokedAt };
|
|
538
|
+
await writeTrustStore(identity, entries);
|
|
539
|
+
await appendLogEntry(identity, { action: "rotate", counterpartAlias: document.oldCard.alias });
|
|
540
|
+
return { valid: true };
|
|
541
|
+
});
|
|
400
542
|
}
|
|
401
543
|
/**
|
|
402
544
|
* Produces a self-signed, portable revocation notice for `identity`'s own
|
|
@@ -435,13 +577,16 @@ export async function applyRevocationNotice(identity, notice) {
|
|
|
435
577
|
});
|
|
436
578
|
if (!result.valid)
|
|
437
579
|
return result;
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
580
|
+
return serialized(identity, async () => {
|
|
581
|
+
const entries = await readTrustStore(identity);
|
|
582
|
+
const key = fingerprint(document.revokedCard);
|
|
583
|
+
const existing = entries[key];
|
|
584
|
+
if (!existing || existing.revokedAt)
|
|
585
|
+
return { valid: true }; // nothing trusted to revoke — no-op
|
|
586
|
+
entries[key] = { ...existing, revokedAt: document.revokedAt };
|
|
587
|
+
await writeTrustStore(identity, entries);
|
|
588
|
+
await appendLogEntry(identity, { action: "revoke", counterpartAlias: document.revokedCard.alias });
|
|
589
|
+
return { valid: true };
|
|
590
|
+
});
|
|
446
591
|
}
|
|
447
592
|
//# sourceMappingURL=trust.js.map
|
package/dist/trust.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "raz-encrypt",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Local-first, hybrid classical+post-quantum signing and verification for two consenting parties. No server, no database required.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
"demo:verify": "tsx demo/verify-as-bob.ts",
|
|
33
33
|
"demo:tamper": "tsx demo/verify-as-bob.ts --tamper",
|
|
34
34
|
"demo:clean": "rm -rf demo/.alice-store demo/.bob-store demo/alice-card.json demo/bob-card.json demo/signed-doc.json",
|
|
35
|
-
"prepublishOnly": "npm run typecheck && npm test && npm run build"
|
|
35
|
+
"prepublishOnly": "npm run typecheck && npm test && npm run build",
|
|
36
|
+
"lint": "eslint src",
|
|
37
|
+
"sbom": "cyclonedx-npm --omit dev --output-file sbom.cdx.json"
|
|
36
38
|
},
|
|
37
39
|
"dependencies": {
|
|
38
40
|
"@noble/ciphers": "2.4.0",
|
|
@@ -41,10 +43,15 @@
|
|
|
41
43
|
"@noble/post-quantum": "0.7.1"
|
|
42
44
|
},
|
|
43
45
|
"devDependencies": {
|
|
46
|
+
"@cyclonedx/cyclonedx-npm": "6.0.1",
|
|
47
|
+
"@eslint/js": "10.0.1",
|
|
44
48
|
"@types/node": "^26.6.4",
|
|
49
|
+
"eslint": "10.12.0",
|
|
50
|
+
"eslint-plugin-security": "4.2.0",
|
|
45
51
|
"fast-check": "^4.10.2",
|
|
46
52
|
"tsx": "^4.19.2",
|
|
47
53
|
"typescript": "^5.7.2",
|
|
54
|
+
"typescript-eslint": "8.71.1",
|
|
48
55
|
"vitest": "^5.0.0"
|
|
49
56
|
},
|
|
50
57
|
"repository": {
|
|
@@ -56,7 +63,6 @@
|
|
|
56
63
|
},
|
|
57
64
|
"homepage": "https://github.com/razmans/raz-encrypt#readme",
|
|
58
65
|
"publishConfig": {
|
|
59
|
-
"access": "public"
|
|
60
|
-
"provenance": true
|
|
66
|
+
"access": "public"
|
|
61
67
|
}
|
|
62
68
|
}
|