@atlasauth/pca-mpc 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/kem-ot.js CHANGED
@@ -44,30 +44,64 @@
44
44
  * rests on Module-LWE (ML-KEM-768, NIST security level ~3) and a hash in the ROM — no classical
45
45
  * discrete-log anywhere, which is the entire point of P3.
46
46
  *
47
- * ─── LIFTING TOWARD MALICIOUS (how this plugs into the stack) ──────────────────────────────────────
48
- * These base OTs feed the existing KOS OT-extension (`ot.ts`). KOS runs the base OTs with ROLES
49
- * INVERTED (the extension *sender* is the base *receiver*, holding the secret selector s) and then adds
50
- * the KOS correlation check over sacrifice rows, which catches an extension receiver that deviates. The
51
- * malicious surface a semi-honest base OT leaves open — a base receiver keeping both secrets — maps to
52
- * the extension *sender* learning the extension *receiver*'s seed pairs; KOS's consistency machinery and
53
- * the correlation-robust hash are what constrain that, exactly as documented for the IKNP/KOS layer.
54
- * HONEST CAVEAT: a semi-honest base OT does not give a fully malicious base OT on its own; a
55
- * deployment wanting malicious base security would add a base-OT consistency/commitment round (as the
56
- * EC `baseOT` wrapper does with its per-message RO commitment). The KOS layer above raises the overall
57
- * extension to malicious-with-abort against a cheating *extension receiver*, which is the attack IKNP is
58
- * vulnerable to; see `ot.ts` for that argument.
47
+ * ─── MALICIOUS-RECEIVER HARDENING (`kemBaseOtMal`, below) ──────────────────────────────────────────
48
+ * The semi-honest base OT above leaves two malicious-receiver surfaces. The committed variant
49
+ * `kemBaseOtMal` closes the one that CAN be closed from an opaque KEM, and documents — precisely,
50
+ * rather than faking a defence — the one that cannot:
51
+ *
52
+ * CLOSED (by an RO-commitment + session binding, mirroring the EC `baseOT`'s commit round):
53
+ * • ADAPTIVE / MALLEABLE / REPLAYED key material. The receiver first sends only a RO-commitment
54
+ * `com = H(rn ‖ pk_0 ‖ pk_1)` to its ordered public keys (and a receiver nonce `rn`); the sender
55
+ * replies with a fresh nonce `sn`; the parties set `sid = H(rn ‖ sn)`; only THEN does the receiver
56
+ * open `(pk_0, pk_1)` and the sender encapsulate, binding every pad to `(sid, com)`. The sender
57
+ * recomputes `com` from the opened keys and ABORTS on any mismatch. So the receiver must fix its
58
+ * keys BEFORE it learns `sn` (no adaptive/precomputed/related-key choice, no cross-session replay),
59
+ * and cannot open keys other than the ones it committed to — exactly the non-malleability the EC
60
+ * base OT gets from `R` being a single committed group element.
61
+ *
62
+ * NOT CLOSABLE from an OPAQUE ML-KEM, and WHY (an impossibility, not a shortcut):
63
+ * • A receiver that simply runs keygen TWICE and keeps BOTH secret keys learns both messages. To
64
+ * stop it the protocol would have to force one slot to a public key whose secret NOBODY knows
65
+ * (the Masny–Rindal "endemic OT" idea: `pk_{1−c}` derived in the public-key space from a random
66
+ * oracle / a common reference). That needs either (i) sampling / adding in ML-KEM's structured
67
+ * public-key space — reaching into the Module-LWE internals this module forbids (no hand-rolled
68
+ * lattice crypto), or (ii) a trusted setup / CRS. Crucially, the SAME decisional-Module-LWE
69
+ * indistinguishability that makes choice privacy hold (a real `pk` ≈ a uniform one) is what makes
70
+ * a cheating "both-keys-real" receiver UNDETECTABLE to the sender: it cannot tell a secretless
71
+ * slot from a real one. So this residue is intrinsic to the opaque primitive.
72
+ *
73
+ * ─── LIFTING THE RESIDUE (how this plugs into the stack) ───────────────────────────────────────────
74
+ * The residue is closed exactly where the EC stack closes its analogue: the KOS OT-extension (`ot.ts`).
75
+ * KOS runs the base OTs with ROLES INVERTED (the extension *sender* is the base *receiver*, holding the
76
+ * secret selector s) and adds the correlation check over sacrifice rows. A base receiver keeping both
77
+ * secrets maps to the extension *sender* learning the extension *receiver*'s seed pairs; the KOS
78
+ * consistency machinery + correlation-robust hash constrain that, raising the overall extension to
79
+ * malicious-with-abort against a cheating extension receiver — the attack IKNP is vulnerable to. So
80
+ * `kemBaseOtMal` is the right base layer: it hardens everything the opaque KEM allows (commitment /
81
+ * binding), and defers only the intrinsic residue to the layer that already handles it.
59
82
  *
60
83
  * No hand-rolled lattice crypto: all PQ operations go through `ml_kem768` (keygen/encapsulate/
61
84
  * decapsulate) as a black box. Randomness follows the module policy — a CSPRNG (`secureOtRandom`) by
62
85
  * default, a seeded deterministic stream ONLY when a test passes one.
63
86
  */
64
87
  Object.defineProperty(exports, "__esModule", { value: true });
88
+ exports.KEM_OT_SECRET_BYTES = exports.KemBaseOtAbort = void 0;
65
89
  exports.kemOtPad = kemOtPad;
66
90
  exports.kemBaseOtReceive = kemBaseOtReceive;
67
91
  exports.kemBaseOtSend = kemBaseOtSend;
68
92
  exports.kemBaseOtOpen = kemBaseOtOpen;
69
93
  exports.kemBaseOT = kemBaseOT;
70
94
  exports.withKemBaseOt = withKemBaseOt;
95
+ exports.kemBaseOtMalCommit = kemBaseOtMalCommit;
96
+ exports.kemBaseOtMalSenderNonce = kemBaseOtMalSenderNonce;
97
+ exports.kemBaseOtMalOpen = kemBaseOtMalOpen;
98
+ exports.kemBaseOtMalSend = kemBaseOtMalSend;
99
+ exports.kemBaseOtMalRecover = kemBaseOtMalRecover;
100
+ exports.kemBaseOtMal = kemBaseOtMal;
101
+ exports.withKemBaseOtMal = withKemBaseOtMal;
102
+ exports.kemBaseOtMalRandomSend = kemBaseOtMalRandomSend;
103
+ exports.kemBaseOtMalRandomRecover = kemBaseOtMalRandomRecover;
104
+ exports.kemBaseOtMalRandom = kemBaseOtMalRandom;
71
105
  const node_crypto_1 = require("node:crypto");
72
106
  const ml_kem_js_1 = require("@noble/post-quantum/ml-kem.js");
73
107
  const csprng_1 = require("./csprng");
@@ -221,4 +255,305 @@ function kemBaseOT(messages, choices, rng = (0, csprng_1.secureOtRandom)()) {
221
255
  function withKemBaseOt() {
222
256
  return { baseOtFn: kemBaseOT };
223
257
  }
258
+ // ===================================================================================================
259
+ // MALICIOUS-RECEIVER HARDENING: the committed, session-bound KEM base OT (`kemBaseOtMal`).
260
+ //
261
+ // See the module header for the exact security model. In one line: an RO-commitment to the ordered
262
+ // public keys + a two-nonce session id bind the receiver's key material (commit-BEFORE the sender's
263
+ // nonce, open AFTER), and the sender aborts if the opened keys do not match the commitment — closing
264
+ // the adaptive / malleable / replay surfaces. The intrinsic "keep both secrets" residue is deferred to
265
+ // the KOS extension, as the header and tests document.
266
+ // ===================================================================================================
267
+ const TAG_KEMOT_COMMIT = new TextEncoder().encode('atlas-pca-mpc/kem-ot-commit');
268
+ const TAG_KEMOT_SID = new TextEncoder().encode('atlas-pca-mpc/kem-ot-sid');
269
+ const TAG_KEMOT_MALPAD = new TextEncoder().encode('atlas-pca-mpc/kem-ot-mal-pad');
270
+ /** Bytes of a protocol nonce (receiver `rn`, sender `sn`). */
271
+ const NONCE_BYTES = 32;
272
+ /** Raised when the committed KEM base OT aborts: a cheating receiver (opened keys ≠ commitment) is caught. */
273
+ class KemBaseOtAbort extends Error {
274
+ constructor(message) {
275
+ super(message);
276
+ this.name = 'KemBaseOtAbort';
277
+ }
278
+ }
279
+ exports.KemBaseOtAbort = KemBaseOtAbort;
280
+ /** The RO-commitment to one transfer's ordered public keys, bound to the receiver nonce `rn`. */
281
+ function kemMalCommit(rn, index, pk0, pk1) {
282
+ return sha256(TAG_KEMOT_COMMIT, rn, u32(index), pk0, pk1);
283
+ }
284
+ /** The session id `sid = H(TAG ‖ rn ‖ sn)` — both parties' nonces, so neither alone fixes it. */
285
+ function kemMalSid(rn, sn) {
286
+ return sha256(TAG_KEMOT_SID, rn, sn);
287
+ }
288
+ /**
289
+ * The malicious-variant RO pad: `H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ ss)` expanded to `len` bytes. Binding
290
+ * the pad to `(sid, com)` ties the sender's encryption to the exact committed keys and this session, so
291
+ * a receiver that opens different keys (or replays another session) cannot unmask the message.
292
+ */
293
+ function kemOtMalPad(sid, com, index, slot, sharedSecret, len) {
294
+ const out = new Uint8Array(len);
295
+ let produced = 0;
296
+ let ctr = 0;
297
+ while (produced < len) {
298
+ const block = sha256(TAG_KEMOT_MALPAD, sid, com, u32(index), Uint8Array.of(slot & 1), u32(ctr), sharedSecret);
299
+ for (let k = 0; k < block.length && produced < len; k++)
300
+ out[produced++] = block[k];
301
+ ctr++;
302
+ }
303
+ return out;
304
+ }
305
+ /**
306
+ * RECEIVER round 1: generate the keypairs (keeping only the chosen secret), draw a nonce `rn`, and send
307
+ * only the COMMITMENTS to the ordered public keys. Returns the round-1 wire message plus the retained
308
+ * state (which holds the not-yet-revealed public keys for the round-3 opening).
309
+ */
310
+ function kemBaseOtMalCommit(choices, rng = (0, csprng_1.secureOtRandom)()) {
311
+ const rn = rng.bytes(NONCE_BYTES);
312
+ const publicKeys = [];
313
+ const secretKeys = [];
314
+ const retainedChoices = [];
315
+ const commitments = [];
316
+ for (let i = 0; i < choices.length; i++) {
317
+ const c = choices[i] & 1;
318
+ const chosen = ml_kem_js_1.ml_kem768.keygen(rng.bytes(KEYGEN_SEED_BYTES));
319
+ const other = ml_kem_js_1.ml_kem768.keygen(rng.bytes(KEYGEN_SEED_BYTES));
320
+ const pk0 = c === 0 ? chosen.publicKey : other.publicKey;
321
+ const pk1 = c === 0 ? other.publicKey : chosen.publicKey;
322
+ publicKeys.push([pk0, pk1]);
323
+ secretKeys.push(chosen.secretKey);
324
+ retainedChoices.push(c);
325
+ commitments.push(kemMalCommit(rn, i, pk0, pk1));
326
+ }
327
+ return {
328
+ message: { rn, commitments },
329
+ state: { choices: retainedChoices, secretKeys, publicKeys, rn },
330
+ };
331
+ }
332
+ /** SENDER round 2: draw the sender nonce `sn` completing the session id. */
333
+ function kemBaseOtMalSenderNonce(rng = (0, csprng_1.secureOtRandom)()) {
334
+ return { sn: rng.bytes(NONCE_BYTES) };
335
+ }
336
+ /** RECEIVER round 3: open the committed public keys (the sender will re-check them against `com`). */
337
+ function kemBaseOtMalOpen(state) {
338
+ return { publicKeys: state.publicKeys.map(([a, b]) => [a, b]) };
339
+ }
340
+ /**
341
+ * SENDER round 4: VERIFY the opened keys against the round-1 commitments (ABORT on mismatch), then
342
+ * encapsulate under each and one-time-pad each message with a `(sid, com)`-bound pad.
343
+ */
344
+ function kemBaseOtMalSend(messages, commit, senderNonce, opening, rng = (0, csprng_1.secureOtRandom)()) {
345
+ const { rn, commitments } = commit;
346
+ const { publicKeys } = opening;
347
+ if (messages.length !== publicKeys.length || commitments.length !== publicKeys.length) {
348
+ throw new Error('kemBaseOtMalSend: messages/commitments/publicKeys length mismatch');
349
+ }
350
+ const sid = kemMalSid(rn, senderNonce.sn);
351
+ const ciphertexts = [];
352
+ const encrypted = [];
353
+ for (let i = 0; i < messages.length; i++) {
354
+ const [m0, m1] = messages[i];
355
+ if (m0.length !== m1.length) {
356
+ throw new Error(`kemBaseOtMalSend (index ${i}): the two messages must be equal length`);
357
+ }
358
+ const [pk0, pk1] = publicKeys[i];
359
+ // The binding check: the opened keys MUST reproduce the round-1 commitment, else a cheating
360
+ // receiver swapped/adapted its keys after learning the sender nonce → ABORT.
361
+ const com = kemMalCommit(rn, i, pk0, pk1);
362
+ if (!constTimeEqual(com, commitments[i])) {
363
+ throw new KemBaseOtAbort(`kem base OT (index ${i}): opened public keys do not match the receiver's commitment; aborting`);
364
+ }
365
+ const e0 = ml_kem_js_1.ml_kem768.encapsulate(pk0, rng.bytes(ENCAPS_MSG_BYTES));
366
+ const e1 = ml_kem_js_1.ml_kem768.encapsulate(pk1, rng.bytes(ENCAPS_MSG_BYTES));
367
+ ciphertexts.push([e0.cipherText, e1.cipherText]);
368
+ encrypted.push([
369
+ xorBytes(m0, kemOtMalPad(sid, com, i, 0, e0.sharedSecret, m0.length)),
370
+ xorBytes(m1, kemOtMalPad(sid, com, i, 1, e1.sharedSecret, m1.length)),
371
+ ]);
372
+ }
373
+ return { ciphertexts, encrypted };
374
+ }
375
+ /**
376
+ * RECEIVER round 5: decapsulate ONLY the chosen ciphertext and unmask with the `(sid, com)`-bound pad.
377
+ */
378
+ function kemBaseOtMalRecover(state, senderNonce, senderMessage, tamper) {
379
+ const { choices, secretKeys, publicKeys, rn } = state;
380
+ const { ciphertexts, encrypted } = senderMessage;
381
+ if (ciphertexts.length !== choices.length || encrypted.length !== choices.length) {
382
+ throw new Error('kemBaseOtMalRecover: transcript/state length mismatch');
383
+ }
384
+ let sid = kemMalSid(rn, senderNonce.sn);
385
+ if (tamper?.tamperReceiverSid)
386
+ sid = tamper.tamperReceiverSid(sid);
387
+ const received = [];
388
+ for (let i = 0; i < choices.length; i++) {
389
+ const c = choices[i] & 1;
390
+ const [pk0, pk1] = publicKeys[i];
391
+ const com = kemMalCommit(rn, i, pk0, pk1);
392
+ const ss = ml_kem_js_1.ml_kem768.decapsulate(ciphertexts[i][c], secretKeys[i]);
393
+ const e = encrypted[i][c];
394
+ received.push(xorBytes(e, kemOtMalPad(sid, com, i, c, ss, e.length)));
395
+ }
396
+ return received;
397
+ }
398
+ /** Constant-time byte-equality (both the commitment check and length check in one place). */
399
+ function constTimeEqual(a, b) {
400
+ if (a.length !== b.length)
401
+ return false;
402
+ let diff = 0;
403
+ for (let i = 0; i < a.length; i++)
404
+ diff |= a[i] ^ b[i];
405
+ return diff === 0;
406
+ }
407
+ /**
408
+ * In-process combined simulator for the MALICIOUS-HARDENED committed KEM base OT, matching the shape of
409
+ * `kemBaseOT` so it is a drop-in for `OtChannel`'s `baseOtFn` (`withKemBaseOtMal`). Runs all five
410
+ * rounds; a cheating receiver (opened keys ≠ commitment) makes the sender throw `KemBaseOtAbort`. The
411
+ * `tamper` hook injects malicious-receiver behaviour for tests.
412
+ */
413
+ function kemBaseOtMal(messages, choices, rng = (0, csprng_1.secureOtRandom)(), tamper) {
414
+ if (messages.length !== choices.length) {
415
+ throw new Error('kemBaseOtMal: messages/choices length mismatch');
416
+ }
417
+ const { message: commit, state } = kemBaseOtMalCommit(choices, rng);
418
+ const senderNonce = kemBaseOtMalSenderNonce(rng);
419
+ const opening = kemBaseOtMalOpen(state);
420
+ // A malicious receiver may open keys OTHER than those it committed to (test-injected).
421
+ if (tamper?.tamperOpenedKeys)
422
+ tamper.tamperOpenedKeys(opening.publicKeys);
423
+ const senderMessage = kemBaseOtMalSend(messages, commit, senderNonce, opening, rng);
424
+ const received = kemBaseOtMalRecover(state, senderNonce, senderMessage, tamper);
425
+ return {
426
+ received,
427
+ transcript: {
428
+ rn: commit.rn,
429
+ commitments: commit.commitments,
430
+ sn: senderNonce.sn,
431
+ publicKeys: opening.publicKeys,
432
+ ciphertexts: senderMessage.ciphertexts,
433
+ encrypted: senderMessage.encrypted,
434
+ },
435
+ };
436
+ }
437
+ /**
438
+ * Wire the MALICIOUS-HARDENED committed ML-KEM base OT into the KOS OT-extension — the recommended
439
+ * post-quantum base. Like `withKemBaseOt`, but the κ setup base OTs run the committed/session-bound
440
+ * protocol (and abort on a cheating receiver). Everything above the base OT is unchanged.
441
+ *
442
+ * const ch = new OtChannel(secureOtRandom(), withKemBaseOtMal());
443
+ */
444
+ function withKemBaseOtMal() {
445
+ return { baseOtFn: (m, c, r) => kemBaseOtMal(m, c, r) };
446
+ }
447
+ // ===================================================================================================
448
+ // COMMITTED KEM *RANDOM* OT (`kemBaseOtMalRandom`) — the random-OT face of the hardened protocol.
449
+ //
450
+ // The chosen-message `kemBaseOtMal` above one-time-pads the sender's messages internally and never
451
+ // surfaces the raw KEM shared secrets. A hybrid OT COMBINER (`hybrid-ot.ts`) needs those per-slot
452
+ // shared secrets so it can fold them with a second base OT's secrets. This variant runs the EXACT SAME
453
+ // five-round committed/session-bound protocol — same `rn`/`sn`/`sid`, same RO-commitment to the ordered
454
+ // public keys, same ABORT on an opened-key / commitment mismatch — but instead of padding messages it
455
+ // returns, per transfer, a session-bound shared secret PER SLOT:
456
+ //
457
+ // ss_slot = H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ Decaps/Encaps shared secret).
458
+ //
459
+ // The SENDER derives BOTH (`senderSecrets[i] = [ss_0, ss_1]`); the honest RECEIVER derives only the
460
+ // chosen one (`recvSecrets[i] = ss_{choices[i]}`), because it kept only `sk_{choices[i]}`. Binding each
461
+ // secret to `(sid, com)` makes it non-transferable across sessions / across different opened keys —
462
+ // identical to how `kemOtMalPad` binds the chosen-message pad. The intrinsic "keep both secrets"
463
+ // residue is UNCHANGED from the chosen-message variant (an opaque IND-CCA KEM cannot stop it; see the
464
+ // module header) — closing it is exactly the job the hybrid combiner delegates to the EC base OT.
465
+ // ===================================================================================================
466
+ const TAG_KEMOT_MALSECRET = new TextEncoder().encode('atlas-pca-mpc/kem-ot-mal-secret');
467
+ /** Byte length of a derived committed-KEM random-OT shared secret. */
468
+ exports.KEM_OT_SECRET_BYTES = 32;
469
+ /**
470
+ * The session-bound per-slot shared secret `H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ ss)` (32 bytes). Binding to
471
+ * `(sid, com)` ties it to the committed keys and this exact session — the random-OT analogue of
472
+ * `kemOtMalPad`.
473
+ */
474
+ function kemOtMalSecret(sid, com, index, slot, sharedSecret) {
475
+ return sha256(TAG_KEMOT_MALSECRET, sid, com, u32(index), Uint8Array.of(slot & 1), sharedSecret).slice(0, exports.KEM_OT_SECRET_BYTES);
476
+ }
477
+ /**
478
+ * SENDER round 4 (RANDOM variant): VERIFY the opened keys against the round-1 commitments (ABORT on
479
+ * mismatch), encapsulate under each, and derive BOTH per-slot session-bound shared secrets. No messages
480
+ * are padded — the two secrets per transfer ARE the random output.
481
+ */
482
+ function kemBaseOtMalRandomSend(commit, senderNonce, opening, rng = (0, csprng_1.secureOtRandom)()) {
483
+ const { rn, commitments } = commit;
484
+ const { publicKeys } = opening;
485
+ if (commitments.length !== publicKeys.length) {
486
+ throw new Error('kemBaseOtMalRandomSend: commitments/publicKeys length mismatch');
487
+ }
488
+ const sid = kemMalSid(rn, senderNonce.sn);
489
+ const ciphertexts = [];
490
+ const senderSecrets = [];
491
+ for (let i = 0; i < publicKeys.length; i++) {
492
+ const [pk0, pk1] = publicKeys[i];
493
+ // Same binding check as the chosen-message variant: opened keys MUST reproduce the commitment.
494
+ const com = kemMalCommit(rn, i, pk0, pk1);
495
+ if (!constTimeEqual(com, commitments[i])) {
496
+ throw new KemBaseOtAbort(`kem base OT (index ${i}): opened public keys do not match the receiver's commitment; aborting`);
497
+ }
498
+ const e0 = ml_kem_js_1.ml_kem768.encapsulate(pk0, rng.bytes(ENCAPS_MSG_BYTES));
499
+ const e1 = ml_kem_js_1.ml_kem768.encapsulate(pk1, rng.bytes(ENCAPS_MSG_BYTES));
500
+ ciphertexts.push([e0.cipherText, e1.cipherText]);
501
+ senderSecrets.push([
502
+ kemOtMalSecret(sid, com, i, 0, e0.sharedSecret),
503
+ kemOtMalSecret(sid, com, i, 1, e1.sharedSecret),
504
+ ]);
505
+ }
506
+ return { ciphertexts, senderSecrets };
507
+ }
508
+ /**
509
+ * RECEIVER round 5 (RANDOM variant): decapsulate ONLY the chosen ciphertext and derive the chosen
510
+ * session-bound shared secret. The receiver never touches the non-chosen slot (it kept no secret for it).
511
+ */
512
+ function kemBaseOtMalRandomRecover(state, senderNonce, senderMessage, tamper) {
513
+ const { choices, secretKeys, publicKeys, rn } = state;
514
+ const { ciphertexts } = senderMessage;
515
+ if (ciphertexts.length !== choices.length) {
516
+ throw new Error('kemBaseOtMalRandomRecover: transcript/state length mismatch');
517
+ }
518
+ let sid = kemMalSid(rn, senderNonce.sn);
519
+ if (tamper?.tamperReceiverSid)
520
+ sid = tamper.tamperReceiverSid(sid);
521
+ const recvSecrets = [];
522
+ for (let i = 0; i < choices.length; i++) {
523
+ const c = choices[i] & 1;
524
+ const [pk0, pk1] = publicKeys[i];
525
+ const com = kemMalCommit(rn, i, pk0, pk1);
526
+ const ss = ml_kem_js_1.ml_kem768.decapsulate(ciphertexts[i][c], secretKeys[i]);
527
+ recvSecrets.push(kemOtMalSecret(sid, com, i, c, ss));
528
+ }
529
+ return recvSecrets;
530
+ }
531
+ /**
532
+ * In-process combined simulator for the committed KEM RANDOM OT. Runs the same five rounds as
533
+ * `kemBaseOtMal` (commit → sender nonce → open → verify+encapsulate → recover) but outputs per-slot
534
+ * shared secrets instead of padded messages. A cheating receiver (opened keys ≠ commitment) makes the
535
+ * sender throw `KemBaseOtAbort`. The `tamper` hook injects malicious-receiver behaviour for tests.
536
+ */
537
+ function kemBaseOtMalRandom(choices, rng = (0, csprng_1.secureOtRandom)(), tamper) {
538
+ const { message: commit, state } = kemBaseOtMalCommit(choices, rng);
539
+ const senderNonce = kemBaseOtMalSenderNonce(rng);
540
+ const opening = kemBaseOtMalOpen(state);
541
+ // A malicious receiver may open keys OTHER than those it committed to (test-injected).
542
+ if (tamper?.tamperOpenedKeys)
543
+ tamper.tamperOpenedKeys(opening.publicKeys);
544
+ const senderMessage = kemBaseOtMalRandomSend(commit, senderNonce, opening, rng);
545
+ const recvSecrets = kemBaseOtMalRandomRecover(state, senderNonce, senderMessage, tamper);
546
+ return {
547
+ senderSecrets: senderMessage.senderSecrets,
548
+ recvSecrets,
549
+ sid: kemMalSid(commit.rn, senderNonce.sn),
550
+ transcript: {
551
+ rn: commit.rn,
552
+ commitments: commit.commitments,
553
+ sn: senderNonce.sn,
554
+ publicKeys: opening.publicKeys,
555
+ ciphertexts: senderMessage.ciphertexts,
556
+ },
557
+ };
558
+ }
224
559
  //# sourceMappingURL=kem-ot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kem-ot.js","sourceRoot":"","sources":["../src/kem-ot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kem-ot.js","sourceRoot":"","sources":["../src/kem-ot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,28 @@
1
1
  {
2
2
  "name": "@atlasauth/pca-mpc",
3
- "version": "0.1.0",
4
- "description": "PCA evolution B5 reference prototype: a multi-stakeholder Policy VM composed under secure multi-party computation (semi-honest additive secret sharing over a prime field), so user+org+regulator jointly decide allow/threshold without any party revealing its own policy.",
3
+ "version": "0.3.0",
4
+ "description": "Multi-stakeholder policy VM composed under secure multi-party computation (semi-honest additive secret sharing over a prime field) with a post-quantum base-OT. Experimental reference prototype.",
5
+ "keywords": [
6
+ "secure multi-party computation",
7
+ "mpc",
8
+ "oblivious transfer",
9
+ "policy vm",
10
+ "prototype",
11
+ "agent authorization",
12
+ "proof-carrying authority",
13
+ "pca",
14
+ "ai agents"
15
+ ],
16
+ "license": "MIT",
17
+ "homepage": "https://github.com/Atlas-Authorization/pca#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/Atlas-Authorization/pca/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/Atlas-Authorization/pca.git",
24
+ "directory": "packages/pca-mpc"
25
+ },
5
26
  "main": "./dist/index.js",
6
27
  "types": "./dist/index.d.ts",
7
28
  "exports": {
@@ -13,7 +34,9 @@
13
34
  },
14
35
  "dependencies": {
15
36
  "@noble/post-quantum": "^0.4.1",
16
- "@atlasauth/pca": "0.1.0"
37
+ "@atlasauth/pca": "0.3.0",
38
+ "@atlasauth/pca-mpc-wasm": "0.3.0",
39
+ "@atlasauth/pca-mpc-lwe-ot-wasm": "0.3.0"
17
40
  },
18
41
  "devDependencies": {
19
42
  "typescript": "^5.6.3",
@@ -21,8 +44,12 @@
21
44
  },
22
45
  "files": [
23
46
  "dist",
24
- "README.md"
47
+ "README.md",
48
+ "LICENSE"
25
49
  ],
50
+ "engines": {
51
+ "node": ">=20"
52
+ },
26
53
  "publishConfig": {
27
54
  "access": "public"
28
55
  },