@atlasauth/pca-mpc 0.3.0 → 0.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 +81 -3
- package/dist/beaver.js +4 -0
- package/dist/beaver.js.map +1 -1
- package/dist/compose.d.ts +9 -2
- package/dist/compose.js +24 -1
- package/dist/compose.js.map +1 -1
- package/dist/ec.d.ts +6 -3
- package/dist/ec.js +27 -9
- package/dist/ec.js.map +1 -1
- package/dist/enc.d.ts +46 -0
- package/dist/enc.js +88 -0
- package/dist/enc.js.map +1 -0
- package/dist/endemic-ot.js +24 -1
- package/dist/endemic-ot.js.map +1 -1
- package/dist/hybrid-ot.js +3 -0
- package/dist/hybrid-ot.js.map +1 -1
- package/dist/kem-ot.js +2 -0
- package/dist/kem-ot.js.map +1 -1
- package/dist/mascot.d.ts +81 -30
- package/dist/mascot.js +232 -113
- package/dist/mascot.js.map +1 -1
- package/dist/net/certs.d.ts +14 -0
- package/dist/net/certs.js +30 -0
- package/dist/net/certs.js.map +1 -0
- package/dist/net/faults.d.ts +49 -0
- package/dist/net/faults.js +222 -0
- package/dist/net/faults.js.map +1 -0
- package/dist/net/forensics.d.ts +81 -0
- package/dist/net/forensics.js +181 -0
- package/dist/net/forensics.js.map +1 -0
- package/dist/net/gadget.d.ts +44 -0
- package/dist/net/gadget.js +102 -0
- package/dist/net/gadget.js.map +1 -0
- package/dist/net/index.d.ts +11 -0
- package/dist/net/index.js +28 -0
- package/dist/net/index.js.map +1 -0
- package/dist/net/launch-local.d.ts +53 -0
- package/dist/net/launch-local.js +190 -0
- package/dist/net/launch-local.js.map +1 -0
- package/dist/net/launch-support.d.ts +6 -0
- package/dist/net/launch-support.js +65 -0
- package/dist/net/launch-support.js.map +1 -0
- package/dist/net/mesh.d.ts +135 -0
- package/dist/net/mesh.js +491 -0
- package/dist/net/mesh.js.map +1 -0
- package/dist/net/offline-net.d.ts +58 -0
- package/dist/net/offline-net.js +485 -0
- package/dist/net/offline-net.js.map +1 -0
- package/dist/net/ot-net.d.ts +42 -0
- package/dist/net/ot-net.js +219 -0
- package/dist/net/ot-net.js.map +1 -0
- package/dist/net/pa.d.ts +65 -0
- package/dist/net/pa.js +118 -0
- package/dist/net/pa.js.map +1 -0
- package/dist/net/party-main.d.ts +48 -0
- package/dist/net/party-main.js +146 -0
- package/dist/net/party-main.js.map +1 -0
- package/dist/net/prep.d.ts +40 -0
- package/dist/net/prep.js +12 -0
- package/dist/net/prep.js.map +1 -0
- package/dist/net/protocol.d.ts +126 -0
- package/dist/net/protocol.js +655 -0
- package/dist/net/protocol.js.map +1 -0
- package/dist/net/wire.d.ts +89 -0
- package/dist/net/wire.js +242 -0
- package/dist/net/wire.js.map +1 -0
- package/dist/ot.d.ts +176 -17
- package/dist/ot.js +479 -252
- package/dist/ot.js.map +1 -1
- package/dist/otx.d.ts +76 -0
- package/dist/otx.js +238 -0
- package/dist/otx.js.map +1 -0
- package/dist/runner.d.ts +1 -1
- package/dist/runner.js +6 -1
- package/dist/runner.js.map +1 -1
- package/dist/sharing.d.ts +2 -0
- package/dist/sharing.js +7 -4
- package/dist/sharing.js.map +1 -1
- package/dist/spdz-runner.d.ts +20 -3
- package/dist/spdz-runner.js +21 -3
- package/dist/spdz-runner.js.map +1 -1
- package/dist/spdz.d.ts +96 -22
- package/dist/spdz.js +196 -47
- package/dist/spdz.js.map +1 -1
- package/package.json +15 -6
package/dist/mascot.js
CHANGED
|
@@ -32,6 +32,16 @@
|
|
|
32
32
|
* sender keeps `−Σρ_k`, an additive sharing of `x_i·y_j`. Because the OT hides both the choice and the
|
|
33
33
|
* unchosen message, neither party learns the other's share.
|
|
34
34
|
*
|
|
35
|
+
* ## Selective failure (RT-04) and the privacy-amplified choice bits
|
|
36
|
+
*
|
|
37
|
+
* With plain binary choice bits the sender can corrupt one message pair so the run aborts iff a chosen bit of
|
|
38
|
+
* the receiver's share is 1 - abort / no-abort then leaks a share bit, hence (through the public Beaver opening)
|
|
39
|
+
* an honest input bit. The receiver therefore does NOT choose with the bits of its share: it draws
|
|
40
|
+
* `61 + 3s` (= 253) uniform bits `b` and its share is `<g, b>` for a public gadget `g` (`enc.ts`, the MASCOT remedy;
|
|
41
|
+
* `s = statSec = 40`). A predicate that holds with probability at least 2^-s leaves `<g,b>` within 2^-s of uniform;
|
|
42
|
+
* a rarer predicate is observed with probability below 2^-s. The same encoding covers the MAC-key shares. The
|
|
43
|
+
* price is 253 OTs per multiplication instead of 61.
|
|
44
|
+
*
|
|
35
45
|
* ## Malicious security (docs §7.1)
|
|
36
46
|
*
|
|
37
47
|
* The OT is now **malicious-secure**: Chou–Orlandi base OT + IKNP extension **with the KOS correlation
|
|
@@ -56,15 +66,31 @@
|
|
|
56
66
|
* network/transport (including the interactive secure coin-flip for the public MAC-check challenge).
|
|
57
67
|
*/
|
|
58
68
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
-
exports.NoDealerOffline = void 0;
|
|
69
|
+
exports.NoDealerOffline = exports.OfflineCheatingAbort = void 0;
|
|
60
70
|
exports.makeNoDealerOffline = makeNoDealerOffline;
|
|
61
71
|
const field_1 = require("./field");
|
|
72
|
+
const enc_1 = require("./enc");
|
|
62
73
|
const csprng_1 = require("./csprng");
|
|
63
74
|
const sharing_1 = require("./sharing");
|
|
64
75
|
const spdz_1 = require("./spdz");
|
|
65
76
|
const ot_1 = require("./ot");
|
|
66
|
-
/**
|
|
67
|
-
|
|
77
|
+
/**
|
|
78
|
+
* A sacrifice / MAC-check abort in the OFFLINE phase together with the parties whose OT transcript is
|
|
79
|
+
* inconsistent. `blamed` lists a party when (i) as an OT sender it offered a pair that does not contain the
|
|
80
|
+
* value the receiver actually obtained, or (ii) the product share it used differs from the one its OT
|
|
81
|
+
* transcripts imply (a wrong operand). Empty when nothing in the disclosed transcript is inconsistent (e.g.
|
|
82
|
+
* the lie was on an unchosen branch). The transcript disclosed is that of the DISCARDED triple only (random
|
|
83
|
+
* triple shares and OT masks, never a MAC-key share, never an input), so naming does not weaken privacy.
|
|
84
|
+
*/
|
|
85
|
+
class OfflineCheatingAbort extends spdz_1.MacCheckAbort {
|
|
86
|
+
blamed;
|
|
87
|
+
constructor(message, blamed) {
|
|
88
|
+
super(blamed.length ? `${message}; offline OT transcript names party ${blamed.join(', ')}` : message);
|
|
89
|
+
this.name = 'OfflineCheatingAbort';
|
|
90
|
+
this.blamed = blamed;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.OfflineCheatingAbort = OfflineCheatingAbort;
|
|
68
94
|
/**
|
|
69
95
|
* The no-dealer offline phase for a fixed party count `n`. Holds the distributed MAC key (α_i only),
|
|
70
96
|
* and a reusable set of per-ordered-pair OT-extension channels so the κ base OTs are amortized across
|
|
@@ -75,8 +101,17 @@ const FIELD_BITS = 61;
|
|
|
75
101
|
*/
|
|
76
102
|
class NoDealerOffline {
|
|
77
103
|
n;
|
|
78
|
-
/** α_i: party i's locally-sampled share of
|
|
104
|
+
/** α_i: party i's locally-sampled share of MAC key 0. Σ α_i = α (never formed by any party). */
|
|
79
105
|
alphaShares;
|
|
106
|
+
/** Shares of every MAC key: `keyShares[l][i]` is party i's share of key l (`keyShares[0] === alphaShares`). */
|
|
107
|
+
keyShares;
|
|
108
|
+
/** The choice-bit encodings of the MAC-key shares (`keyEnc[l][i]` encodes `keyShares[l][i]`). */
|
|
109
|
+
keyEnc;
|
|
110
|
+
/** The public gadget vector of the OT choice-bit encoding (`enc.ts`). */
|
|
111
|
+
gadget;
|
|
112
|
+
/** The statistical parameter of the encoding. */
|
|
113
|
+
statSec;
|
|
114
|
+
sacrificePartners;
|
|
80
115
|
rng;
|
|
81
116
|
seed;
|
|
82
117
|
/** Whether randomness is a deterministic (test) seed; when false, all randomness is the CSPRNG. */
|
|
@@ -89,6 +124,9 @@ class NoDealerOffline {
|
|
|
89
124
|
deviation;
|
|
90
125
|
/** Count of triple-product OT multiplications performed (for targeting `deviation.productMul`). */
|
|
91
126
|
productMulCount = 0;
|
|
127
|
+
/** Transcript of the triple being generated (for attribution on abort); null when not recording. */
|
|
128
|
+
log = null;
|
|
129
|
+
claims = [];
|
|
92
130
|
constructor(n, seed, opts = {}) {
|
|
93
131
|
if (!Number.isInteger(n) || n < 1)
|
|
94
132
|
throw new Error('NoDealerOffline: n must be a positive integer');
|
|
@@ -101,7 +139,18 @@ class NoDealerOffline {
|
|
|
101
139
|
this.sacrificeOn = opts.sacrifice ?? true;
|
|
102
140
|
this.deviation = opts.deviation;
|
|
103
141
|
// DISTRIBUTED MAC-KEY GENERATION: each party samples its own α_i locally. α is never reconstructed.
|
|
104
|
-
|
|
142
|
+
const keys = opts.macKeys ?? spdz_1.MAC_KEYS;
|
|
143
|
+
if (!Number.isInteger(keys) || keys < 1 || keys > 16)
|
|
144
|
+
throw new Error('NoDealerOffline: macKeys must be an integer in [1, 16]');
|
|
145
|
+
this.statSec = opts.statSec ?? enc_1.STAT_SEC;
|
|
146
|
+
this.gadget = (0, enc_1.makeGadget)(this.statSec, () => this.rng.next(), opts.unsafeStatSec === true);
|
|
147
|
+
this.keyEnc = Array.from({ length: keys }, () => Array.from({ length: n }, () => (0, enc_1.sampleEnc)(this.gadget, this.rng)));
|
|
148
|
+
this.keyShares = this.keyEnc.map((row) => row.map((e) => e.value));
|
|
149
|
+
this.alphaShares = this.keyShares[0];
|
|
150
|
+
this.sacrificePartners = opts.sacrificePartners ?? spdz_1.SACRIFICE_PARTNERS;
|
|
151
|
+
if (!Number.isInteger(this.sacrificePartners) || this.sacrificePartners < 1 || this.sacrificePartners > 8) {
|
|
152
|
+
throw new Error('NoDealerOffline: sacrificePartners must be an integer in [1, 8]');
|
|
153
|
+
}
|
|
105
154
|
}
|
|
106
155
|
/**
|
|
107
156
|
* The SPDZ MAC context the online runner consumes. It carries ONLY `alphaShares` for the protocol;
|
|
@@ -109,10 +158,13 @@ class NoDealerOffline {
|
|
|
109
158
|
* protocol step or held by any party.
|
|
110
159
|
*/
|
|
111
160
|
get macContext() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
161
|
+
const keys = this.keyShares.map((shares) => {
|
|
162
|
+
let alpha = 0n;
|
|
163
|
+
for (const ai of shares)
|
|
164
|
+
alpha = (0, field_1.fadd)(alpha, ai);
|
|
165
|
+
return { alphaShares: shares.slice(), alpha };
|
|
166
|
+
});
|
|
167
|
+
return { n: this.n, ...keys[0], extraKeys: keys.slice(1) };
|
|
116
168
|
}
|
|
117
169
|
channel(i, j) {
|
|
118
170
|
const key = `${i}->${j}`;
|
|
@@ -128,130 +180,204 @@ class NoDealerOffline {
|
|
|
128
180
|
return ch;
|
|
129
181
|
}
|
|
130
182
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
183
|
+
* A fresh uniform receiver operand for `party` (uniform bits, and the share they encode). Every share a
|
|
184
|
+
* party multiplies with as OT receiver (triple shares, MAC-key shares) comes from here: the bits are the OT
|
|
185
|
+
* choice bits, so a selective-failure abort tells the sender only about bits of `b`, not about the share.
|
|
134
186
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
// Sender draws fresh masks ρ_k and offers (ρ_k, ρ_k + 2^k·y) for each bit k.
|
|
139
|
-
const choiceBits = new Array(FIELD_BITS);
|
|
140
|
-
const msg0 = new Array(FIELD_BITS);
|
|
141
|
-
const msg1 = new Array(FIELD_BITS);
|
|
142
|
-
let senderSum = 0n; // Σ ρ_k
|
|
143
|
-
let pow = 1n; // 2^k mod p (k ≤ 60 ⇒ no wrap)
|
|
144
|
-
for (let k = 0; k < FIELD_BITS; k++) {
|
|
145
|
-
const rho = this.rng.next();
|
|
146
|
-
senderSum = (0, field_1.fadd)(senderSum, rho);
|
|
147
|
-
msg0[k] = rho;
|
|
148
|
-
msg1[k] = (0, field_1.fadd)(rho, (0, field_1.fmul)(pow, y));
|
|
149
|
-
choiceBits[k] = Number((x >> BigInt(k)) & 1n);
|
|
150
|
-
pow = (pow * 2n) % field_1.PRIME;
|
|
151
|
-
}
|
|
152
|
-
const { received } = this.channel(i, j).extend(choiceBits, msg0, msg1);
|
|
153
|
-
let receiverSum = 0n; // Σ (received_k mod p)
|
|
154
|
-
for (let k = 0; k < FIELD_BITS; k++)
|
|
155
|
-
receiverSum = (0, field_1.fadd)(receiverSum, (0, field_1.mod)(received[k]));
|
|
156
|
-
// shareI + shareJ = Σ received − Σ ρ = (xi·yj + Σρ) − Σρ = xi·yj.
|
|
157
|
-
return [receiverSum, (0, field_1.fneg)(senderSum)];
|
|
187
|
+
sampleShare(party) {
|
|
188
|
+
void party;
|
|
189
|
+
return (0, enc_1.sampleEnc)(this.gadget, this.rng);
|
|
158
190
|
}
|
|
159
191
|
/**
|
|
160
|
-
* OT-based share multiplication
|
|
161
|
-
* sharing `z`
|
|
162
|
-
*
|
|
192
|
+
* BATCHED OT-based share multiplication. Each request `{x, y}` is a pair of additive sharings (length n) whose product
|
|
193
|
+
* sharing `z` (`Σ z = (Σ x)(Σ y) mod p`) is wanted. All requests are multiplied with ONE OT-extension round per ordered
|
|
194
|
+
* pair (the KOS padding rows and the per-round fixed costs are paid once, not per multiplication). Diagonal terms are
|
|
195
|
+
* local; each cross term `x_i·y_j` is a Gilboa multiplication in which party `i` is the OT receiver with choice bits
|
|
196
|
+
* `bits` and weights `gad` (its operand is `<gad, bits>`) and party `j` offers `(ρ_k, ρ_k + gad_k·y_j)`. No party learns
|
|
197
|
+
* Σx, Σy or Σz.
|
|
198
|
+
*
|
|
199
|
+
* Entries of `x` given as `EncShare` use their own choice bits (privacy-amplified, see `enc.ts`). A plain bigint `x_i`
|
|
200
|
+
* has no uniform encoding, so it is split as `x_i = e + d` with a fresh encoded `e` and `d = x_i − e` (uniform given what
|
|
201
|
+
* an encoded-bit leak reveals), and both halves are multiplied.
|
|
163
202
|
*/
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
203
|
+
mulBatch(reqs) {
|
|
204
|
+
const n = this.n;
|
|
205
|
+
for (const r of reqs)
|
|
206
|
+
if (r.x.length !== n || r.y.length !== n)
|
|
207
|
+
throw new Error('otShareMultiply: wrong length');
|
|
208
|
+
const pieces = reqs.map((r) => r.x.map((xi) => {
|
|
209
|
+
if (typeof xi !== 'bigint')
|
|
210
|
+
return { value: xi.value, parts: [{ bits: xi.bits, gad: this.gadget }] };
|
|
211
|
+
const v = (0, field_1.mod)(xi);
|
|
212
|
+
const e = (0, enc_1.sampleEnc)(this.gadget, this.rng);
|
|
213
|
+
const d = (0, enc_1.plainShare)((0, field_1.fsub)(v, e.value));
|
|
214
|
+
return {
|
|
215
|
+
value: v,
|
|
216
|
+
parts: [
|
|
217
|
+
{ bits: e.bits, gad: this.gadget },
|
|
218
|
+
{ bits: d.bits, gad: enc_1.PLAIN_GADGET },
|
|
219
|
+
],
|
|
220
|
+
};
|
|
221
|
+
}));
|
|
222
|
+
const z = reqs.map((r, q) => pieces[q].map((p, i) => (0, field_1.fmul)(p.value, r.y[i]))); // diagonal x_i·y_i (local)
|
|
223
|
+
for (let i = 0; i < n; i++) {
|
|
224
|
+
for (let j = 0; j < n; j++) {
|
|
170
225
|
if (i === j)
|
|
171
226
|
continue;
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
227
|
+
let rows = 0;
|
|
228
|
+
for (let q = 0; q < reqs.length; q++)
|
|
229
|
+
for (const part of pieces[q][i].parts)
|
|
230
|
+
rows += part.bits.length;
|
|
231
|
+
const bits = new Array(rows);
|
|
232
|
+
const msg0 = new Array(rows);
|
|
233
|
+
const msg1 = new Array(rows);
|
|
234
|
+
const segs = [];
|
|
235
|
+
let at = 0;
|
|
236
|
+
for (let q = 0; q < reqs.length; q++) {
|
|
237
|
+
const y = (0, field_1.mod)(reqs[q].y[j]);
|
|
238
|
+
for (const part of pieces[q][i].parts) {
|
|
239
|
+
const len = part.bits.length;
|
|
240
|
+
let senderSum = 0n; // Σ ρ_k
|
|
241
|
+
for (let k = 0; k < len; k++) {
|
|
242
|
+
const rho = this.rng.next();
|
|
243
|
+
senderSum = (0, field_1.fadd)(senderSum, rho);
|
|
244
|
+
bits[at + k] = part.bits[k];
|
|
245
|
+
msg0[at + k] = rho;
|
|
246
|
+
msg1[at + k] = (0, field_1.fadd)(rho, (0, field_1.fmul)(part.gad[k], y));
|
|
247
|
+
}
|
|
248
|
+
segs.push({ q, start: at, len, senderSum });
|
|
249
|
+
at += len;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const { received } = this.channel(i, j).extend(bits, msg0, msg1);
|
|
253
|
+
this.log?.push({ receiver: i, sender: j, msg0, msg1, received });
|
|
254
|
+
for (const sg of segs) {
|
|
255
|
+
let receiverSum = 0n; // Σ (received_k mod p)
|
|
256
|
+
for (let k = 0; k < sg.len; k++)
|
|
257
|
+
receiverSum = (0, field_1.fadd)(receiverSum, (0, field_1.mod)(received[sg.start + k]));
|
|
258
|
+
// shareI + shareJ = Σ received − Σ ρ = (<gad,bits>·y_j + Σρ) − Σρ = <gad,bits>·y_j.
|
|
259
|
+
z[sg.q][i] = (0, field_1.fadd)(z[sg.q][i], receiverSum);
|
|
260
|
+
z[sg.q][j] = (0, field_1.fadd)(z[sg.q][j], (0, field_1.fneg)(sg.senderSum));
|
|
261
|
+
}
|
|
175
262
|
}
|
|
176
263
|
}
|
|
177
264
|
return z;
|
|
178
265
|
}
|
|
179
|
-
/**
|
|
266
|
+
/** One OT multiplication (see `mulBatch`): `Σ z = (Σ x)(Σ y)`. */
|
|
267
|
+
otShareMultiply(x, y) {
|
|
268
|
+
return this.mulBatch([{ x, y }])[0];
|
|
269
|
+
}
|
|
270
|
+
/** Authenticate a value sharing: MAC shares γ^(l) with Σ γ^(l) = α^(l)·(Σ value) for every key l, via OT (no dealer). */
|
|
180
271
|
authenticate(valueShares) {
|
|
181
|
-
return this.
|
|
272
|
+
return this.toAuth(valueShares, this.mulBatch(this.keyEnc.map((alphas) => ({ x: alphas, y: valueShares }))));
|
|
182
273
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
const z = this.otShareMultiply(x, y);
|
|
274
|
+
toAuth(value, macs) {
|
|
275
|
+
return { value, mac: macs[0], extraMac: macs.slice(1) };
|
|
276
|
+
}
|
|
277
|
+
/** Test hook (deviation) + attribution record for a triple product sharing `implied`; returns the claimed sharing. */
|
|
278
|
+
claimProduct(implied) {
|
|
279
|
+
const z = implied.slice();
|
|
190
280
|
const idx = this.productMulCount++;
|
|
191
281
|
const dev = this.deviation;
|
|
192
282
|
if (dev && dev.productMul === idx)
|
|
193
283
|
z[0] = (0, field_1.fadd)(z[0], dev.delta);
|
|
284
|
+
this.claims.push({ claimed: z, implied });
|
|
194
285
|
return z;
|
|
195
286
|
}
|
|
196
|
-
/** A RAW authenticated triple (a, b, c=a·b) from OT, before the sacrifice. No dealer. */
|
|
197
|
-
rawTriple() {
|
|
198
|
-
const aShares = Array.from({ length: this.n }, () => this.rng.next());
|
|
199
|
-
const bShares = Array.from({ length: this.n }, () => this.rng.next());
|
|
200
|
-
const cShares = this.tripleProduct(aShares, bShares);
|
|
201
|
-
return {
|
|
202
|
-
a: { value: aShares, mac: this.authenticate(aShares) },
|
|
203
|
-
b: { value: bShares, mac: this.authenticate(bShares) },
|
|
204
|
-
c: { value: cShares, mac: this.authenticate(cShares) },
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
/** A RAW authenticated triple (â, b, ĉ=â·b) SHARING the given authenticated `b` — the sacrifice pair. */
|
|
208
|
-
rawTripleWithB(b) {
|
|
209
|
-
const aShares = Array.from({ length: this.n }, () => this.rng.next());
|
|
210
|
-
const cShares = this.tripleProduct(aShares, b.value);
|
|
211
|
-
return {
|
|
212
|
-
a: { value: aShares, mac: this.authenticate(aShares) },
|
|
213
|
-
b,
|
|
214
|
-
c: { value: cShares, mac: this.authenticate(cShares) },
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
287
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* both openings, and require `τ = 0`. If both triples are correct, `τ = e·(c−ab) − (ĉ−âb) = 0`; if the
|
|
222
|
-
* kept triple has `c = ab + δ`, then `τ = e·δ`, which is non-zero (e ≠ 0, δ ≠ 0) — ABORT. Lying in the
|
|
223
|
-
* `τ` opening to force a zero value is caught by the MAC-check (the forged MAC won't reconcile). The
|
|
224
|
-
* sacrificed triple is consumed by the check and discarded; the kept triple is certified `c = a·b`.
|
|
288
|
+
* One raw authenticated triple `(a, b, c = a·b)` together with `partners` sacrifice triples `(â_r, b, ĉ_r)` sharing `b`,
|
|
289
|
+
* from OT with NO dealer, in TWO batched OT layers: layer 1 = all products and the MACs of every value known before them,
|
|
290
|
+
* layer 2 = the MACs of the products. Each value's MAC is `α^(l)·value` for every key `l`.
|
|
225
291
|
*/
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
292
|
+
rawTripleWithPartners(partners) {
|
|
293
|
+
const n = this.n;
|
|
294
|
+
const K = this.keyEnc.length;
|
|
295
|
+
const aEnc = Array.from({ length: n }, (_, i) => this.sampleShare(i));
|
|
296
|
+
const bShares = Array.from({ length: n }, () => this.rng.next());
|
|
297
|
+
const ahEnc = Array.from({ length: partners }, () => Array.from({ length: n }, (_, i) => this.sampleShare(i)));
|
|
298
|
+
const aVal = aEnc.map((e) => e.value);
|
|
299
|
+
const ahVal = ahEnc.map((row) => row.map((e) => e.value));
|
|
300
|
+
const reqs = [{ x: aEnc, y: bShares }];
|
|
301
|
+
for (let r = 0; r < partners; r++)
|
|
302
|
+
reqs.push({ x: ahEnc[r], y: bShares });
|
|
303
|
+
const macStart = reqs.length;
|
|
304
|
+
for (let l = 0; l < K; l++) {
|
|
305
|
+
reqs.push({ x: this.keyEnc[l], y: aVal });
|
|
306
|
+
reqs.push({ x: this.keyEnc[l], y: bShares });
|
|
307
|
+
for (let r = 0; r < partners; r++)
|
|
308
|
+
reqs.push({ x: this.keyEnc[l], y: ahVal[r] });
|
|
309
|
+
}
|
|
310
|
+
const z1 = this.mulBatch(reqs);
|
|
311
|
+
const cShares = this.claimProduct(z1[0]);
|
|
312
|
+
const chShares = Array.from({ length: partners }, (_, r) => this.claimProduct(z1[1 + r]));
|
|
313
|
+
const per = 2 + partners;
|
|
314
|
+
const macOf = (off) => Array.from({ length: K }, (_, l) => z1[macStart + l * per + off]);
|
|
315
|
+
const reqs2 = [];
|
|
316
|
+
for (let l = 0; l < K; l++) {
|
|
317
|
+
reqs2.push({ x: this.keyEnc[l], y: cShares });
|
|
318
|
+
for (let r = 0; r < partners; r++)
|
|
319
|
+
reqs2.push({ x: this.keyEnc[l], y: chShares[r] });
|
|
239
320
|
}
|
|
321
|
+
const z2 = this.mulBatch(reqs2);
|
|
322
|
+
const per2 = 1 + partners;
|
|
323
|
+
const macOf2 = (off) => Array.from({ length: K }, (_, l) => z2[l * per2 + off]);
|
|
324
|
+
const b = this.toAuth(bShares, macOf(1));
|
|
325
|
+
const keep = { a: this.toAuth(aVal, macOf(0)), b, c: this.toAuth(cShares, macOf2(0)) };
|
|
326
|
+
const parts = Array.from({ length: partners }, (_, r) => ({
|
|
327
|
+
a: this.toAuth(ahVal[r], macOf(2 + r)),
|
|
328
|
+
b,
|
|
329
|
+
c: this.toAuth(chShares[r], macOf2(1 + r)),
|
|
330
|
+
}));
|
|
331
|
+
return { keep, partners: parts };
|
|
332
|
+
}
|
|
333
|
+
/** Name the parties whose transcript of the discarded triple is inconsistent (see `OfflineCheatingAbort`). */
|
|
334
|
+
attribute(abort) {
|
|
335
|
+
const blamed = new Set();
|
|
336
|
+
for (const r of this.log ?? []) {
|
|
337
|
+
for (let k = 0; k < r.received.length; k++) {
|
|
338
|
+
const got = (0, field_1.mod)(r.received[k]);
|
|
339
|
+
if (got !== r.msg0[k] && got !== r.msg1[k]) {
|
|
340
|
+
blamed.add(r.sender); // the receiver holds a value the sender never offered
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
for (const c of this.claims) {
|
|
346
|
+
c.claimed.forEach((v, i) => {
|
|
347
|
+
if (v !== c.implied[i])
|
|
348
|
+
blamed.add(i); // a product share that does not follow from its OT transcripts
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
return new OfflineCheatingAbort(abort.message, [...blamed].sort((p, q) => p - q));
|
|
240
352
|
}
|
|
241
353
|
/**
|
|
242
354
|
* Generate ONE authenticated Beaver triple with NO dealer, MALICIOUS-secure. Each party samples its
|
|
243
355
|
* own a_i, b_i; the product sharing c (Σc = a·b) comes from OT; every component is MAC'd via OT
|
|
244
356
|
* against the α shares. When the sacrifice is on (default), a SECOND triple sharing `b` is generated
|
|
245
357
|
* and sacrificed to certify `c = a·b` under the MACs, so a malformed triple ABORTS rather than being
|
|
246
|
-
* emitted. No party learns a, b, c, or α.
|
|
358
|
+
* emitted. No party learns a, b, c, or α. The OT choice bits are privacy-amplified (`enc.ts`), so whether
|
|
359
|
+
* a run aborts is statistically independent of any share an honest party holds (RT-04). An abort throws
|
|
360
|
+
* `OfflineCheatingAbort`, which names the party whose OT transcript is inconsistent where one is.
|
|
247
361
|
*/
|
|
248
362
|
genAuthTriple() {
|
|
249
363
|
if (!this.sacrificeOn)
|
|
250
|
-
return this.
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
364
|
+
return this.rawTripleWithPartners(0).keep;
|
|
365
|
+
this.log = [];
|
|
366
|
+
this.claims = [];
|
|
367
|
+
try {
|
|
368
|
+
const { keep, partners } = this.rawTripleWithPartners(this.sacrificePartners);
|
|
369
|
+
// The MASCOT sacrifice (spdz.ts `sacrificeVerify`): throws MacCheckAbort and emits no triple on a bad c.
|
|
370
|
+
return (0, spdz_1.sacrificeVerify)([{ keep, partners }], this.macContext, this.rng)[0];
|
|
371
|
+
}
|
|
372
|
+
catch (e) {
|
|
373
|
+
if (e instanceof spdz_1.MacCheckAbort)
|
|
374
|
+
throw this.attribute(e);
|
|
375
|
+
throw e;
|
|
376
|
+
}
|
|
377
|
+
finally {
|
|
378
|
+
this.log = null;
|
|
379
|
+
this.claims = [];
|
|
380
|
+
}
|
|
255
381
|
}
|
|
256
382
|
/** Generate `count` authenticated triples (channels/base-OTs amortized across all of them). */
|
|
257
383
|
genAuthTriples(count) {
|
|
@@ -270,7 +396,7 @@ class NoDealerOffline {
|
|
|
270
396
|
if (owner < 0 || owner >= this.n)
|
|
271
397
|
throw new Error('authInput: owner out of range');
|
|
272
398
|
const valueShares = (0, sharing_1.share)((0, field_1.mod)(value), this.n, this.rng);
|
|
273
|
-
return
|
|
399
|
+
return this.authenticate(valueShares);
|
|
274
400
|
}
|
|
275
401
|
/**
|
|
276
402
|
* The MASCOT **input-consistency check**: verify that a batch of authenticated inputs each satisfy
|
|
@@ -296,25 +422,18 @@ class NoDealerOffline {
|
|
|
296
422
|
const engine = new spdz_1.SpdzEngine(ctx, []);
|
|
297
423
|
// Fresh OT-authenticated random mask ⟦r⟧ (hides w so no input value is revealed).
|
|
298
424
|
const rShares = Array.from({ length: this.n }, () => this.rng.next());
|
|
299
|
-
let w =
|
|
425
|
+
let w = this.authenticate(rShares);
|
|
300
426
|
for (const inp of inputs) {
|
|
301
427
|
let e = this.rng.next(); // public random coefficient
|
|
302
428
|
if (e === 0n)
|
|
303
429
|
e = 1n; // weight every input (0 would skip one); bias is negligible (prob 1/p)
|
|
304
|
-
w =
|
|
430
|
+
w = (0, spdz_1.addAuth)(w, (0, spdz_1.scaleAuth)(inp, e));
|
|
305
431
|
}
|
|
306
432
|
engine.open(w, 'input-check:w');
|
|
307
433
|
engine.macCheck(this.rng); // throws MacCheckAbort if any input's MAC is inconsistent with its value
|
|
308
434
|
}
|
|
309
435
|
}
|
|
310
436
|
exports.NoDealerOffline = NoDealerOffline;
|
|
311
|
-
/** Local authenticated addition (kept here to avoid widening mascot's spdz import surface). */
|
|
312
|
-
function addAuthLocal(x, y) {
|
|
313
|
-
return {
|
|
314
|
-
value: x.value.map((xi, i) => (0, field_1.fadd)(xi, y.value[i])),
|
|
315
|
-
mac: x.mac.map((mi, i) => (0, field_1.fadd)(mi, y.mac[i])),
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
437
|
/** Convenience: a fresh no-dealer offline phase for `n` parties (malicious-secure by default). */
|
|
319
438
|
function makeNoDealerOffline(n, seed, opts) {
|
|
320
439
|
return new NoDealerOffline(n, seed, opts);
|
package/dist/mascot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mascot.js","sourceRoot":"","sources":["../src/mascot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;;;AAsTH,kDAMC;AA1TD,mCAAiE;AACjE,qCAA0D;AAC1D,uCAAoD;AACpD,iCAQgB;AAChB,6BAAsE;AAEtE,oGAAoG;AACpG,MAAM,UAAU,GAAG,EAAE,CAAC;AAyBtB;;;;;;;GAOG;AACH,MAAa,eAAe;IACjB,CAAC,CAAS;IACnB,kGAAkG;IACzF,WAAW,CAAW;IACd,GAAG,CAAW;IACd,IAAI,CAAS;IAC9B,mGAAmG;IAClF,aAAa,CAAU;IACxC,iGAAiG;IAChF,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzD,6FAA6F;IAC5E,WAAW,CAAU;IACtC,kFAAkF;IACjE,SAAS,CAAoB;IAC9C,mGAAmG;IAC3F,eAAe,GAAG,CAAC,CAAC;IAE5B,YAAY,CAAS,EAAE,IAAa,EAAE,OAAwB,EAAE;QAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACpG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,mGAAmG;QACnG,uGAAuG;QACvG,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,SAAS,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,cAAc,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,gBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,uBAAc,EAAE,CAAC;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,oGAAoG;QACpG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,IAAI,UAAU;QACZ,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW;YAAE,KAAK,GAAG,IAAA,YAAI,EAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;IACrE,CAAC;IAEO,OAAO,CAAC,CAAS,EAAE,CAAS;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,iGAAiG;YACjG,MAAM,KAAK,GAAa,IAAI,CAAC,aAAa;gBACxC,CAAC,CAAC,IAAA,aAAQ,EAAC,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;gBACtG,CAAC,CAAC,IAAA,uBAAc,GAAE,CAAC;YACrB,EAAE,GAAG,IAAI,cAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU;QACzD,MAAM,CAAC,GAAG,IAAA,WAAG,EAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,IAAA,WAAG,EAAC,EAAE,CAAC,CAAC;QAClB,6EAA6E;QAC7E,MAAM,UAAU,GAAa,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAa,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAa,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC,QAAQ;QAC5B,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,+BAA+B;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAA,YAAI,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACd,IAAI,CAAC,CAAC,CAAC,GAAG,IAAA,YAAI,EAAC,GAAG,EAAE,IAAA,YAAI,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,aAAK,CAAC;QAC3B,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,WAAW,GAAG,EAAE,CAAC,CAAC,uBAAuB;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;YAAE,WAAW,GAAG,IAAA,YAAI,EAAC,WAAW,EAAE,IAAA,WAAG,EAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QACxF,kEAAkE;QAClE,OAAO,CAAC,WAAW,EAAE,IAAA,YAAI,EAAC,SAAS,CAAC,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAc,EAAE,CAAc;QAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,YAAI,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,2BAA2B;QACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACtB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,qBAAqB;gBACvE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,YAAI,EAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,YAAI,EAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,qGAAqG;IAC7F,YAAY,CAAC,WAAwB;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,CAAc,EAAE,CAAc;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,YAAI,EAAC,CAAC,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yFAAyF;IACjF,SAAS;QACf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO;YACL,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YACtD,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YACtD,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;SACvD,CAAC;IACJ,CAAC;IAED,yGAAyG;IACjG,cAAc,CAAC,CAAS;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;YACtD,CAAC;YACD,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;SACvD,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACK,SAAS,CAAC,IAAgB,EAAE,GAAe;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,iBAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;YAAE,CAAC,GAAG,EAAE,CAAC,CAAC,oCAAoC;QAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAC/E,IAAI,GAAG,GAAG,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,GAAG,GAAG,IAAA,cAAO,EAAC,GAAG,EAAE,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,8EAA8E;QACzG,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,oBAAa,CACrB,uCAAuC,QAAQ,iHAAiH,CACjK,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+FAA+F;IAC/F,cAAc,CAAC,KAAa;QAC1B,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,KAAa,EAAE,KAAa;QACpC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnF,MAAM,WAAW,GAAG,IAAA,eAAK,EAAC,IAAA,WAAG,EAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;IACrE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,MAA6B;QACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,iBAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvC,kFAAkF;QAClF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,GAAW,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,4BAA4B;YACrD,IAAI,CAAC,KAAK,EAAE;gBAAE,CAAC,GAAG,EAAE,CAAC,CAAC,uEAAuE;YAC7F,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,IAAA,gBAAS,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yEAAyE;IACtG,CAAC;CACF;AA7OD,0CA6OC;AAED,+FAA+F;AAC/F,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACxC,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,YAAI,EAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QACpD,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAA,YAAI,EAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC;AAcD,kGAAkG;AAClG,SAAgB,mBAAmB,CACjC,CAAS,EACT,IAAa,EACb,IAAsB;IAEtB,OAAO,IAAI,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
1
|
+
{"version":3,"file":"mascot.js","sourceRoot":"","sources":["../src/mascot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-run identity material for the TLS mesh: one fresh P-256 key + self-signed certificate per node,
|
|
3
|
+
* generated with the vetted `openssl` CLI (no hand-rolled crypto, no X.509 code of our own). The keys
|
|
4
|
+
* live only on the node that generated them; only the PUBLIC certificates are exchanged and pinned.
|
|
5
|
+
*/
|
|
6
|
+
export interface NodeIdentity {
|
|
7
|
+
keyPath: string;
|
|
8
|
+
certPath: string;
|
|
9
|
+
}
|
|
10
|
+
/** Generate `<dir>/key.pem` + `<dir>/cert.pem` for `cn` (valid 2 days: per-run, throw-away). */
|
|
11
|
+
export declare function generateIdentity(dir: string, cn: string, openssl?: string): NodeIdentity;
|
|
12
|
+
/** SHA-256 fingerprint (colon-hex, as Node reports it) of a PEM certificate. */
|
|
13
|
+
export declare function fingerprintOf(certPem: string): string;
|
|
14
|
+
export declare const readPem: (p: string) => string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Per-run identity material for the TLS mesh: one fresh P-256 key + self-signed certificate per node,
|
|
4
|
+
* generated with the vetted `openssl` CLI (no hand-rolled crypto, no X.509 code of our own). The keys
|
|
5
|
+
* live only on the node that generated them; only the PUBLIC certificates are exchanged and pinned.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.readPem = void 0;
|
|
9
|
+
exports.generateIdentity = generateIdentity;
|
|
10
|
+
exports.fingerprintOf = fingerprintOf;
|
|
11
|
+
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
const node_crypto_1 = require("node:crypto");
|
|
13
|
+
const node_fs_1 = require("node:fs");
|
|
14
|
+
const node_path_1 = require("node:path");
|
|
15
|
+
/** Generate `<dir>/key.pem` + `<dir>/cert.pem` for `cn` (valid 2 days: per-run, throw-away). */
|
|
16
|
+
function generateIdentity(dir, cn, openssl = 'openssl') {
|
|
17
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true, mode: 0o700 });
|
|
18
|
+
const keyPath = (0, node_path_1.join)(dir, 'key.pem');
|
|
19
|
+
const certPath = (0, node_path_1.join)(dir, 'cert.pem');
|
|
20
|
+
(0, node_child_process_1.execFileSync)(openssl, ['ecparam', '-name', 'prime256v1', '-genkey', '-noout', '-out', keyPath], { stdio: 'pipe' });
|
|
21
|
+
(0, node_child_process_1.execFileSync)(openssl, ['req', '-new', '-x509', '-key', keyPath, '-subj', `/CN=${cn}`, '-days', '2', '-out', certPath, '-sha256'], { stdio: 'pipe' });
|
|
22
|
+
return { keyPath, certPath };
|
|
23
|
+
}
|
|
24
|
+
/** SHA-256 fingerprint (colon-hex, as Node reports it) of a PEM certificate. */
|
|
25
|
+
function fingerprintOf(certPem) {
|
|
26
|
+
return new node_crypto_1.X509Certificate(certPem).fingerprint256;
|
|
27
|
+
}
|
|
28
|
+
const readPem = (p) => (0, node_fs_1.readFileSync)(p, 'utf8');
|
|
29
|
+
exports.readPem = readPem;
|
|
30
|
+
//# sourceMappingURL=certs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"certs.js","sourceRoot":"","sources":["../../src/net/certs.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAaH,4CAWC;AAGD,sCAEC;AA3BD,2DAAkD;AAClD,6CAA8C;AAC9C,qCAAkD;AAClD,yCAAiC;AAOjC,gGAAgG;AAChG,SAAgB,gBAAgB,CAAC,GAAW,EAAE,EAAU,EAAE,OAAO,GAAG,SAAS;IAC3E,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACvC,IAAA,iCAAY,EAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACnH,IAAA,iCAAY,EACV,OAAO,EACP,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC1G,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,gFAAgF;AAChF,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,6BAAe,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC;AACrD,CAAC;AAEM,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAAzD,QAAA,OAAO,WAAkD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TEST-ONLY fault injection for the networked MPC.
|
|
3
|
+
*
|
|
4
|
+
* Two layers, deliberately separate:
|
|
5
|
+
* - `tamperFor(spec)`: a MALICIOUS SENDER rewriting its own outgoing frames at the application layer
|
|
6
|
+
* (duplicate, reorder, skipped sequence, garbage, truncation, wrong round/session, oversize length,
|
|
7
|
+
* drop, silence). The bytes still travel inside valid TLS, so the receiver's framing checks decide.
|
|
8
|
+
* - `FaultProxy`: a NETWORK adversary on the wire (TCP middlebox): drop / delay / truncate / bit-flip /
|
|
9
|
+
* duplicate / reorder at the byte level. TLS 1.3 record authentication rejects tampering, so the
|
|
10
|
+
* expected outcome is an attributable-to-the-link `disconnect`, never a silently corrupted value.
|
|
11
|
+
*/
|
|
12
|
+
import type { TamperEvent } from './mesh';
|
|
13
|
+
export type FrameFaultKind = 'duplicate' | 'reorder' | 'skip-seq' | 'garbage' | 'truncate' | 'bitflip' | 'wrong-round' | 'wrong-session' | 'oversize' | 'drop' | 'silent-from' | 'extra-field' | 'false-accuse';
|
|
14
|
+
export interface FrameFault {
|
|
15
|
+
kind: FrameFaultKind;
|
|
16
|
+
/** Protocol round to attack (e.g. 'mul0'). */
|
|
17
|
+
round: string;
|
|
18
|
+
/** Restrict to one recipient; default: all recipients. */
|
|
19
|
+
to?: number;
|
|
20
|
+
/** For `false-accuse`: the (honest) party the malicious sender names in its forged abort frame. */
|
|
21
|
+
accuse?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function tamperFor(spec: FrameFault): (ev: TamperEvent) => Buffer[];
|
|
24
|
+
export type WireFaultKind = 'none' | 'drop' | 'delay' | 'truncate' | 'bitflip' | 'duplicate' | 'reorder';
|
|
25
|
+
export interface WireFault {
|
|
26
|
+
kind: WireFaultKind;
|
|
27
|
+
/** Which direction through the proxy: client->server ('c2s') or server->client ('s2c'). */
|
|
28
|
+
dir: 'c2s' | 's2c';
|
|
29
|
+
/** Fault starts after this many bytes have passed in that direction (skips the TLS handshake). */
|
|
30
|
+
afterBytes: number;
|
|
31
|
+
/** delay milliseconds (kind=delay). */
|
|
32
|
+
ms?: number;
|
|
33
|
+
}
|
|
34
|
+
/** A transparent TCP proxy that misbehaves once, after `afterBytes` bytes, in one direction. */
|
|
35
|
+
export declare class FaultProxy {
|
|
36
|
+
readonly listenPort: number;
|
|
37
|
+
private readonly target;
|
|
38
|
+
private readonly fault;
|
|
39
|
+
private server;
|
|
40
|
+
readonly log: string[];
|
|
41
|
+
constructor(listenPort: number, target: {
|
|
42
|
+
host: string;
|
|
43
|
+
port: number;
|
|
44
|
+
}, fault: WireFault);
|
|
45
|
+
listen(): Promise<void>;
|
|
46
|
+
close(): void;
|
|
47
|
+
private onClient;
|
|
48
|
+
private pipe;
|
|
49
|
+
}
|