@atlasauth/pca-abe 0.3.0 → 0.4.1

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/abe.js CHANGED
@@ -4,13 +4,13 @@ exports.PcaEncryptionError = exports.ABE_ALG = void 0;
4
4
  exports.setup = setup;
5
5
  exports.keygenForAttributes = keygenForAttributes;
6
6
  exports.keygenForCapability = keygenForCapability;
7
+ exports.rerandomizeKey = rerandomizeKey;
7
8
  exports.encryptForPolicy = encryptForPolicy;
8
9
  exports.parseCiphertext = parseCiphertext;
9
10
  exports.decrypt = decrypt;
10
11
  exports.decryptText = decryptText;
11
12
  const pca_1 = require("@atlasauth/pca");
12
13
  const bls_1 = require("./bls");
13
- const ibe_1 = require("./ibe");
14
14
  const aead_1 = require("./aead");
15
15
  const sss_1 = require("./sss");
16
16
  const attributes_1 = require("./attributes");
@@ -18,39 +18,55 @@ const policy_1 = require("./policy");
18
18
  const wire_1 = require("./wire");
19
19
  const utils_1 = require("@noble/hashes/utils");
20
20
  /**
21
- * Proof-carrying encryption: Ciphertext-Policy attribute/policy-based encryption built from a
22
- * Boneh-Franklin IBE KEM on BLS12-381, composed over a monotone access structure by Shamir
23
- * secret-sharing (an LSSS), sealing the payload with AES-256-GCM.
21
+ * Proof-carrying encryption: Ciphertext-Policy Attribute-Based Encryption after Bethencourt, Sahai and
22
+ * Waters, "Ciphertext-Policy Attribute-Based Encryption" (IEEE S&P 2007, ePrint 2006/309; "BSW07"),
23
+ * Section 4, adapted to the asymmetric (type-3) pairing e: G1 x G2 -> GT of BLS12-381, with the payload
24
+ * sealed under AES-256-GCM. The access structure is the package's AND / OR / k-of-n tree, realised as a
25
+ * Shamir sharing down the tree exactly as BSW's access tree.
24
26
  *
25
- * CONSTRUCTION
26
- * setup() -> master key pair (s, P_pub = s*g2).
27
- * keygen(attrs) -> one BF decryption key d_A = s*H1(A) per attribute A the holder owns.
28
- * encrypt(policy, m) -> pick a random root secret S; share it down the policy's threshold tree with
29
- * Shamir (AND = n-of-n, OR = 1-of-n, threshold = k-of-n); at each leaf attribute
30
- * A, BF-encapsulate a fresh KEM key and XOR-mask that leaf's assigned share.
31
- * The content-encryption key is HKDF(S); the payload is AES-256-GCM sealed with
32
- * the whole KEM header as AAD.
33
- * decrypt(key, ct) -> at every leaf the key owns, decapsulate -> unmask that share; interpolate each
34
- * gate once >= t shares are recovered; recover S iff the key's attribute set
35
- * satisfies the policy; derive the CEK and open the AEAD. Else fail (null).
27
+ * CONSTRUCTION (g1, g2 the generators of G1, G2; H: {0,1}* -> G1 hash-to-curve, a random oracle)
28
+ * setup() alpha, beta <- Z_r*. MSK = (alpha, beta).
29
+ * MPK = ( h = beta*g2 in G2, f = beta^-1 * g1 in G1, Y = e(g1,g2)^alpha in GT ).
30
+ * keygen(S) r <- Z_r*; for each attribute j in S, r_j <- Z_r*.
31
+ * D = ((alpha + r)/beta) * g1 (G1)
32
+ * D_j = r*g1 + r_j*H(j) (G1), D'_j = r_j*g2 (G2) for j in S
33
+ * The per-USER randomiser r is shared by every component of one key and is what makes
34
+ * keys of different users incompatible (collusion resistance).
35
+ * encrypt(T, m) s <- Z_r*; C_0 = s*h (G2). Share s down the tree T (q_root(0) = s, Shamir per gate);
36
+ * for each leaf x with attribute j: C_x = q_x(0)*g2 (G2), C'_x = q_x(0)*H(j) (G1).
37
+ * The blinding value is K = Y^s = e(g1,g2)^(alpha*s); CEK = HKDF(K, salt).
38
+ * decrypt(SK, CT) DecryptNode at a leaf x (j in S):
39
+ * F_x = e(D_j, C_x) / e(C'_x, D'_j) = e(g1,g2)^(r*q_x(0)).
40
+ * At a gate, F_gate = prod_i F_i^{Delta_i(0)} over any t recovered children (Lagrange
41
+ * interpolation in the exponent) = e(g1,g2)^(r*q_gate(0)). At the root
42
+ * A = e(g1,g2)^(r*s), K = e(D, C_0) / A = e(g1,g2)^((alpha+r)*s - r*s) = Y^s.
36
43
  *
37
- * SECURITY PROPERTY (honest)
38
- * Confidentiality holds under the Bilinear Diffie-Hellman assumption on BLS12-381 in the random-oracle
39
- * model (standard BF-IBE), and the Shamir sharing is information-theoretic (fewer than `t` shares of a
40
- * gate reveal nothing about its secret). A holder whose attribute set does NOT satisfy the policy
41
- * cannot recover enough shares to reconstruct S and therefore cannot derive the CEK. Payload and header
42
- * integrity are guaranteed by AES-256-GCM.
44
+ * ADAPTATION TO TYPE-3 PAIRINGS (this is the package's adaptation, not a result of the BSW paper)
45
+ * BSW07 is stated in a symmetric bilinear group of composite-free prime order p with a single generator g.
46
+ * Here every element is assigned a fixed side so that each pairing in the scheme has one G1 and one G2
47
+ * argument: D, D_j, C'_x, f, H(.) in G1; h, D'_j, C_x, C_0 in G2. The one extra public element f = g^(1/beta)
48
+ * (present in BSW07's public key for Delegate) is used here for key re-randomisation and delegation
49
+ * (`rerandomizeKey`). The equations above are exactly BSW07's with g replaced by g1 or g2 according to the side.
43
50
  *
44
- * This is NOT a proof-of-knowledge / NIZK: it binds confidentiality to POSSESSION of capability-derived
45
- * attribute keys, not to a verified proof. Like any IBE-KEM-composed access structure (as opposed to a
46
- * single monolithic CP-ABE with per-key randomisation), it is collusion-resistant only within a single
47
- * issued key: two SEPARATELY issued keys under the same master, each holding part of the required
48
- * attributes, could in principle pool their attribute keys. Atlas issues exactly one key per capability
49
- * (`keygenForCapability`), and decryption is evaluated against that one key's attribute set — so the
50
- * enforced statement is precisely "this capability's authority satisfies the policy".
51
+ * SECURITY NOTION (honest)
52
+ * BSW07 proves the scheme secure against collusion and chosen-plaintext attack in the SELECTIVE model
53
+ * (the adversary commits to the challenge access structure before seeing the public key), in the GENERIC
54
+ * BILINEAR GROUP model with H a random oracle (the paper's Theorem 1 is for the symmetric setting). This
55
+ * package does NOT carry that proof over: the type-3 adaptation above has no proof of its own here, the
56
+ * generic-group argument is not a reduction to a standard assumption, and no standard-model security is
57
+ * claimed. No adaptive (full) security, no CCA security of the ABE layer (the AES-GCM tag over the whole
58
+ * header makes tampering detectable, which is integrity, not a CCA proof), no key-revocation, no
59
+ * attribute hiding (the policy is public in the ciphertext), and the MSK holder can decrypt everything.
60
+ * Not a NIZK: confidentiality is bound to POSSESSION of capability-derived keys, not to a verified proof.
61
+ * Research-grade, not independently audited.
62
+ *
63
+ * What the construction does give, in the paper's model: two users whose attribute sets individually do
64
+ * not satisfy a policy cannot combine their keys (or components of them) to decrypt it, because every
65
+ * leaf recovery yields e(g1,g2)^(r*q) with the randomiser r of the key it was computed from, and the root
66
+ * needs a single consistent r.
51
67
  */
52
- exports.ABE_ALG = 'bf-ibe-bls12381/lsss/aes-256-gcm';
53
- const CEK_INFO = 'atlas-pca-abe/cek/v1';
68
+ exports.ABE_ALG = 'bsw07-cpabe-bls12381-type3/lsss/aes-256-gcm';
69
+ const CEK_INFO = 'atlas-pca-abe/cek/v2';
54
70
  const SALT_LEN = 16;
55
71
  class PcaEncryptionError extends Error {
56
72
  constructor(message) {
@@ -62,28 +78,83 @@ exports.PcaEncryptionError = PcaEncryptionError;
62
78
  // ---- setup / keygen ---------------------------------------------------------------------------
63
79
  /** Generate a fresh master key pair. */
64
80
  function setup() {
65
- const { scalar, bytes } = (0, sss_1.randomSecret)();
81
+ const alpha = (0, bls_1.randomScalar)();
82
+ const beta = (0, bls_1.randomScalar)();
66
83
  return {
67
- msk: { v: 1, curve: 'bls12-381', s: (0, wire_1.b64u)(bytes) },
68
- mpk: { v: 1, curve: 'bls12-381', pPub: (0, wire_1.b64u)((0, ibe_1.masterPublic)(scalar)) },
84
+ msk: { v: 1, curve: 'bls12-381', alpha: (0, wire_1.b64u)((0, bls_1.scalarToBytes)(alpha)), beta: (0, wire_1.b64u)((0, bls_1.scalarToBytes)(beta)) },
85
+ mpk: {
86
+ v: 1,
87
+ curve: 'bls12-381',
88
+ h: (0, wire_1.b64u)((0, bls_1.g2ToBytes)((0, bls_1.g2Mul)(bls_1.G2_BASE, beta))),
89
+ f: (0, wire_1.b64u)((0, bls_1.g1ToBytes)((0, bls_1.g1Mul)(bls_1.G1_BASE, (0, bls_1.frInv)(beta)))),
90
+ egga: (0, wire_1.b64u)((0, bls_1.gtToBytes)((0, bls_1.gtPow)((0, bls_1.pairing)(bls_1.G1_BASE, bls_1.G2_BASE), alpha))),
91
+ },
69
92
  };
70
93
  }
71
- function mskScalar(msk) {
72
- const bytes = (0, wire_1.unb64u)(msk?.s);
73
- const s = bytes === null ? null : (0, bls_1.bytesToScalar)(bytes);
74
- if (s === null || s === 0n)
94
+ /** Exactly one encoding per scalar: 32 bytes, non-zero, and < r (so `x + r` cannot alias `x`). */
95
+ function canonicalScalar(enc) {
96
+ const bytes = (0, wire_1.unb64u)(enc);
97
+ const x = bytes === null ? null : (0, bls_1.bytesToScalar)(bytes);
98
+ if (bytes === null || x === null || x === 0n || BigInt('0x' + Buffer.from(bytes).toString('hex')) >= bls_1.R)
99
+ return null;
100
+ return x;
101
+ }
102
+ function mskScalars(msk) {
103
+ const alpha = canonicalScalar(msk?.alpha);
104
+ const beta = canonicalScalar(msk?.beta);
105
+ if (alpha === null || beta === null)
75
106
  throw new PcaEncryptionError('invalid master secret key');
76
- return s;
107
+ return { alpha, beta };
108
+ }
109
+ let eGen;
110
+ /** Small bounded memo of already-validated public keys (validation costs a GT exponentiation and pairings). */
111
+ const mpkMemo = new Map();
112
+ const MPK_MEMO_MAX = 16;
113
+ /** Parse and consistency-check a master public key: valid subgroup points, GT element, and e(f, h) = e(g1, g2). */
114
+ function parseMpk(mpk) {
115
+ const memoKey = (0, wire_1.isString)(mpk?.h) && (0, wire_1.isString)(mpk?.f) && (0, wire_1.isString)(mpk?.egga) ? `${mpk.h}|${mpk.f}|${mpk.egga}` : null;
116
+ const hit = memoKey === null ? undefined : mpkMemo.get(memoKey);
117
+ if (hit !== undefined)
118
+ return hit;
119
+ const hb = (0, wire_1.unb64u)(mpk?.h);
120
+ const fb = (0, wire_1.unb64u)(mpk?.f);
121
+ const yb = (0, wire_1.unb64u)(mpk?.egga);
122
+ const h = hb === null ? null : (0, bls_1.g2FromBytes)(hb);
123
+ const f = fb === null ? null : (0, bls_1.g1FromBytes)(fb);
124
+ const y = yb === null ? null : (0, bls_1.gtFromBytes)(yb);
125
+ if (h === null || f === null || y === null)
126
+ throw new PcaEncryptionError('invalid master public key');
127
+ eGen ??= (0, bls_1.pairing)(bls_1.G1_BASE, bls_1.G2_BASE);
128
+ if (!(0, bls_1.gtEql)((0, bls_1.pairing)(f, h), eGen))
129
+ throw new PcaEncryptionError('invalid master public key');
130
+ const parsed = { h, f, y };
131
+ if (memoKey !== null) {
132
+ if (mpkMemo.size >= MPK_MEMO_MAX)
133
+ mpkMemo.delete(mpkMemo.keys().next().value);
134
+ mpkMemo.set(memoKey, parsed);
135
+ }
136
+ return parsed;
77
137
  }
78
138
  /** Issue a decryption key for an explicit set of attribute tokens. */
79
139
  function keygenForAttributes(msk, attrs) {
80
- const s = mskScalar(msk);
81
- const out = {};
140
+ const { alpha, beta } = mskScalars(msk);
141
+ const r = (0, bls_1.randomScalar)(); // the per-user randomiser: a fresh one for EVERY issued key
142
+ const rg = (0, bls_1.g1Mul)(bls_1.G1_BASE, r);
143
+ const d = (0, bls_1.g1Mul)(bls_1.G1_BASE, (0, bls_1.frMul)((0, bls_1.frAdd)(alpha, r), (0, bls_1.frInv)(beta)));
144
+ const entries = new Map();
82
145
  for (const a of attrs) {
83
- if (typeof a === 'string' && a.length > 0)
84
- out[a] = (0, wire_1.b64u)((0, ibe_1.keygenAttr)(s, a));
146
+ // Ill-formed UTF-16 can never be named by a valid policy (see normalizePolicy), so no key is issued for it.
147
+ if (typeof a !== 'string' || a.length === 0 || (0, bls_1.isIllFormedUtf16)(a) || entries.has(a))
148
+ continue;
149
+ const rj = (0, bls_1.randomScalar)();
150
+ entries.set(a, {
151
+ dj: (0, wire_1.b64u)((0, bls_1.g1ToBytes)(rg.add((0, bls_1.g1Mul)((0, bls_1.hashAttrToG1)(a), rj)))),
152
+ dpj: (0, wire_1.b64u)((0, bls_1.g2ToBytes)((0, bls_1.g2Mul)(bls_1.G2_BASE, rj))),
153
+ });
85
154
  }
86
- return { v: 1, curve: 'bls12-381', attrs: out };
155
+ // fromEntries defines OWN data properties, so an attribute literally named "__proto__" is issued like any other
156
+ // (plain `out[a] = ...` would invoke the __proto__ setter and silently drop the key).
157
+ return { v: 1, curve: 'bls12-381', d: (0, wire_1.b64u)((0, bls_1.g1ToBytes)(d)), attrs: Object.fromEntries(entries) };
87
158
  }
88
159
  /**
89
160
  * Issue a decryption key BOUND to a PCA capability: its attributes are exactly those the (signed)
@@ -91,8 +162,8 @@ function keygenForAttributes(msk, attrs) {
91
162
  * extended with explicit extra tokens. The key can decrypt only ciphertexts whose policy is satisfied
92
163
  * by this capability's authority.
93
164
  */
94
- function keygenForCapability(msk, capability, extraAttributes = []) {
95
- const attrs = (0, attributes_1.capabilityAttributes)(capability);
165
+ function keygenForCapability(msk, capability, extraAttributes = [], opts = {}) {
166
+ const attrs = (0, attributes_1.capabilityAttributes)(capability, opts);
96
167
  for (const a of extraAttributes)
97
168
  if (typeof a === 'string' && a.length > 0)
98
169
  attrs.add(a);
@@ -101,16 +172,82 @@ function keygenForCapability(msk, capability, extraAttributes = []) {
101
172
  key.holder = capability.holder;
102
173
  return key;
103
174
  }
175
+ /** Parse an untrusted key; a malformed attribute component is treated as not held. Null if `D` or the container is malformed. */
176
+ function parseKey(key) {
177
+ if (!(0, wire_1.isObject)(key) || !(0, wire_1.isObject)(key.attrs))
178
+ return null;
179
+ const db = (0, wire_1.unb64u)(key.d);
180
+ const d = db === null ? null : (0, bls_1.g1FromBytes)(db);
181
+ if (d === null)
182
+ return null;
183
+ const raw = key.attrs;
184
+ const memo = new Map();
185
+ return {
186
+ d,
187
+ names: () => Object.keys(raw),
188
+ attr(name) {
189
+ const cached = memo.get(name);
190
+ if (cached !== undefined)
191
+ return cached;
192
+ let out = null;
193
+ const comp = Object.prototype.hasOwnProperty.call(raw, name) ? raw[name] : undefined;
194
+ if ((0, wire_1.isObject)(comp)) {
195
+ const djb = (0, wire_1.unb64u)(comp.dj);
196
+ const dpb = (0, wire_1.unb64u)(comp.dpj);
197
+ const dj = djb === null ? null : (0, bls_1.g1FromBytes)(djb);
198
+ const dpj = dpb === null ? null : (0, bls_1.g2FromBytes)(dpb);
199
+ if (dj !== null && dpj !== null)
200
+ out = { dj, dpj };
201
+ }
202
+ memo.set(name, out);
203
+ return out;
204
+ },
205
+ };
206
+ }
207
+ /**
208
+ * Re-randomise a key with fresh randomness (BSW07 Delegate): the result decrypts exactly what `key` decrypts
209
+ * (restricted to `subset` when given, which must be attributes the key holds) but shares no component with it
210
+ * and carries a new randomiser `r + r~`, so it is as incompatible with the original as with any other user's key.
211
+ * Needs only the public key. Throws {@link PcaEncryptionError} on a malformed key / mpk or a subset attribute not held.
212
+ */
213
+ function rerandomizeKey(mpk, key, subset) {
214
+ const { f } = parseMpk(mpk);
215
+ const pk = parseKey(key);
216
+ if (pk === null)
217
+ throw new PcaEncryptionError('invalid decryption key');
218
+ const want = subset === undefined ? pk.names() : [...new Set(subset)];
219
+ const rt = (0, bls_1.randomScalar)();
220
+ const rtg = (0, bls_1.g1Mul)(bls_1.G1_BASE, rt);
221
+ const entries = new Map();
222
+ for (const a of want) {
223
+ const comp = pk.attr(a);
224
+ if (comp === null)
225
+ throw new PcaEncryptionError('subset names an attribute the key does not hold');
226
+ const rtj = (0, bls_1.randomScalar)();
227
+ entries.set(a, {
228
+ dj: (0, wire_1.b64u)((0, bls_1.g1ToBytes)(comp.dj.add(rtg).add((0, bls_1.g1Mul)((0, bls_1.hashAttrToG1)(a), rtj)))),
229
+ dpj: (0, wire_1.b64u)((0, bls_1.g2ToBytes)(comp.dpj.add((0, bls_1.g2Mul)(bls_1.G2_BASE, rtj)))),
230
+ });
231
+ }
232
+ const out = {
233
+ v: 1,
234
+ curve: 'bls12-381',
235
+ d: (0, wire_1.b64u)((0, bls_1.g1ToBytes)(pk.d.add((0, bls_1.g1Mul)(f, rt)))),
236
+ attrs: Object.fromEntries(entries),
237
+ };
238
+ if (typeof key.holder === 'string')
239
+ out.holder = key.holder;
240
+ return out;
241
+ }
104
242
  // ---- encrypt ----------------------------------------------------------------------------------
105
- function distribute(mpkPub, node, nodeSecret, salt) {
243
+ function distribute(node, nodeSecret) {
106
244
  if (node.kind === 'leaf') {
107
- const enc = (0, ibe_1.encapsulate)(mpkPub, node.attr, salt);
108
- if (enc === null)
109
- throw new PcaEncryptionError('invalid master public key');
110
- const wrap = (0, wire_1.xorBytes)((0, bls_1.scalarToBytes)(nodeSecret), enc.key);
111
- if (wrap === null)
112
- throw new PcaEncryptionError('internal: wrap length mismatch');
113
- return { kind: 'leaf', attr: node.attr, U: (0, wire_1.b64u)(enc.U), wrap: (0, wire_1.b64u)(wrap) };
245
+ return {
246
+ kind: 'leaf',
247
+ attr: node.attr,
248
+ c: (0, wire_1.b64u)((0, bls_1.g2ToBytes)((0, bls_1.g2Mul)(bls_1.G2_BASE, nodeSecret))),
249
+ cp: (0, wire_1.b64u)((0, bls_1.g1ToBytes)((0, bls_1.g1Mul)((0, bls_1.hashAttrToG1)(node.attr), nodeSecret))),
250
+ };
114
251
  }
115
252
  const shares = (0, sss_1.splitSecret)(nodeSecret, node.t, node.of.length);
116
253
  const of = [];
@@ -119,12 +256,12 @@ function distribute(mpkPub, node, nodeSecret, salt) {
119
256
  const share = shares[idx];
120
257
  if (child === undefined || share === undefined)
121
258
  throw new PcaEncryptionError('internal: share/child mismatch');
122
- of.push({ i: Number(share.x), sub: distribute(mpkPub, child, share.y, salt) });
259
+ of.push({ i: Number(share.x), sub: distribute(child, share.y) });
123
260
  }
124
261
  return { kind: 'gate', t: node.t, of };
125
262
  }
126
263
  function aad(c) {
127
- return (0, pca_1.canonicalBytes)({ v: c.v, alg: c.alg, salt: c.salt, kem: c.kem });
264
+ return (0, pca_1.canonicalBytes)({ v: c.v, alg: c.alg, salt: c.salt, c0: c.c0, kem: c.kem });
128
265
  }
129
266
  /**
130
267
  * Encrypt `plaintext` so that it decrypts only for a holder whose attribute set satisfies `policy`.
@@ -134,41 +271,49 @@ function encryptForPolicy(mpk, policy, plaintext) {
134
271
  const norm = (0, policy_1.normalizePolicy)(policy);
135
272
  if (!norm.ok)
136
273
  throw new PcaEncryptionError(`invalid policy: ${norm.reason}`);
137
- const mpkPub = (0, wire_1.unb64u)(mpk?.pPub);
138
- if (mpkPub === null)
139
- throw new PcaEncryptionError('invalid master public key');
274
+ const { h, y } = parseMpk(mpk);
140
275
  const salt = new Uint8Array((0, utils_1.randomBytes)(SALT_LEN));
141
- const { scalar: rootSecret, bytes: rootBytes } = (0, sss_1.randomSecret)();
142
- const kem = distribute(mpkPub, norm.tree, rootSecret, salt);
143
- const header = { v: 1, alg: exports.ABE_ALG, salt: (0, wire_1.b64u)(salt), kem };
144
- const cek = (0, bls_1.kdf32)(rootBytes, salt, CEK_INFO);
276
+ const { scalar: s } = (0, sss_1.randomSecret)();
277
+ const kem = distribute(norm.tree, s);
278
+ const c0 = (0, wire_1.b64u)((0, bls_1.g2ToBytes)((0, bls_1.g2Mul)(h, s)));
279
+ const header = { v: 1, alg: exports.ABE_ALG, salt: (0, wire_1.b64u)(salt), c0, kem };
280
+ const cek = (0, bls_1.kdf32)((0, bls_1.gtToBytes)((0, bls_1.gtPow)(y, s)), salt, CEK_INFO);
145
281
  const pt = typeof plaintext === 'string' ? new TextEncoder().encode(plaintext) : plaintext;
146
- const sealed = (0, aead_1.seal)(cek, pt, aad(header));
282
+ let headerAad;
283
+ try {
284
+ headerAad = aad(header);
285
+ }
286
+ catch {
287
+ throw new PcaEncryptionError('policy cannot be authenticated (header outside the canonical JSON profile)');
288
+ }
289
+ const sealed = (0, aead_1.seal)(cek, pt, headerAad);
147
290
  return {
148
291
  ciphertext: { ...header, iv: (0, wire_1.b64u)(sealed.iv), ct: (0, wire_1.b64u)(sealed.ct), tag: (0, wire_1.b64u)(sealed.tag) },
149
292
  };
150
293
  }
151
- // ---- decrypt ----------------------------------------------------------------------------------
152
- function parseKemTree(x, depth) {
153
- if (depth > 64 || !(0, wire_1.isObject)(x))
294
+ function parseKemTree(x, gates, budget) {
295
+ if (++budget.nodes > policy_1.MAX_POLICY_NODES || !(0, wire_1.isObject)(x))
154
296
  return null;
155
297
  if (x.kind === 'leaf') {
156
- if (!(0, wire_1.isString)(x.attr) || !(0, wire_1.isString)(x.U) || !(0, wire_1.isString)(x.wrap))
298
+ if (!(0, wire_1.isString)(x.attr) || !(0, wire_1.isString)(x.c) || !(0, wire_1.isString)(x.cp))
157
299
  return null;
158
- if ((0, wire_1.unb64u)(x.U) === null || (0, wire_1.unb64u)(x.wrap) === null)
300
+ if ((0, wire_1.unb64u)(x.c) === null || (0, wire_1.unb64u)(x.cp) === null)
159
301
  return null;
160
- return { kind: 'leaf', attr: x.attr, U: x.U, wrap: x.wrap };
302
+ return { kind: 'leaf', attr: x.attr, c: x.c, cp: x.cp };
161
303
  }
162
304
  if (x.kind === 'gate') {
305
+ if (gates + 1 > policy_1.MAX_POLICY_DEPTH)
306
+ return null;
163
307
  if (!(0, wire_1.isPosInt)(x.t) || !Array.isArray(x.of) || x.of.length === 0)
164
308
  return null;
165
- if (x.t > x.of.length)
309
+ if (x.t > x.of.length || x.of.length >= policy_1.MAX_POLICY_NODES)
166
310
  return null;
167
311
  const of = [];
168
312
  for (const branch of x.of) {
169
- if (!(0, wire_1.isObject)(branch) || !(0, wire_1.isPosInt)(branch.i))
313
+ // Canonical form: branch k (0-based) carries evaluation point k+1, exactly as encryptForPolicy emits it.
314
+ if (!(0, wire_1.isObject)(branch) || !(0, wire_1.isPosInt)(branch.i) || branch.i !== of.length + 1)
170
315
  return null;
171
- const sub = parseKemTree(branch.sub, depth + 1);
316
+ const sub = parseKemTree(branch.sub, gates + 1, budget);
172
317
  if (sub === null)
173
318
  return null;
174
319
  of.push({ i: branch.i, sub });
@@ -181,78 +326,106 @@ function parseKemTree(x, depth) {
181
326
  function parseCiphertext(x) {
182
327
  if (!(0, wire_1.isObject)(x) || x.v !== 1 || x.alg !== exports.ABE_ALG)
183
328
  return null;
184
- if (!(0, wire_1.isString)(x.salt) || !(0, wire_1.isString)(x.iv) || !(0, wire_1.isString)(x.ct) || !(0, wire_1.isString)(x.tag))
329
+ if (!(0, wire_1.isString)(x.salt) || !(0, wire_1.isString)(x.c0) || !(0, wire_1.isString)(x.iv) || !(0, wire_1.isString)(x.ct) || !(0, wire_1.isString)(x.tag))
185
330
  return null;
186
- if ((0, wire_1.unb64u)(x.salt) === null || (0, wire_1.unb64u)(x.iv) === null || (0, wire_1.unb64u)(x.ct) === null || (0, wire_1.unb64u)(x.tag) === null)
331
+ if ((0, wire_1.unb64u)(x.salt) === null || (0, wire_1.unb64u)(x.c0) === null || (0, wire_1.unb64u)(x.iv) === null || (0, wire_1.unb64u)(x.ct) === null || (0, wire_1.unb64u)(x.tag) === null)
187
332
  return null;
188
- const kem = parseKemTree(x.kem, 0);
333
+ const kem = parseKemTree(x.kem, 0, { nodes: 0 });
189
334
  if (kem === null)
190
335
  return null;
191
- return { v: 1, alg: exports.ABE_ALG, salt: x.salt, kem, iv: x.iv, ct: x.ct, tag: x.tag };
336
+ return { v: 1, alg: exports.ABE_ALG, salt: x.salt, c0: x.c0, kem, iv: x.iv, ct: x.ct, tag: x.tag };
192
337
  }
193
- function recover(node, keys, salt) {
338
+ /** Choose, bottom-up, the first `t` satisfiable children of every gate; null when the key's attributes do not satisfy the subtree. */
339
+ function plan(node, key) {
194
340
  if (node.kind === 'leaf') {
195
- const dA = keys.get(node.attr);
196
- if (dA === undefined)
341
+ const comp = key.attr(node.attr);
342
+ if (comp === null)
197
343
  return null; // the key does not own this attribute: nothing to recover here.
198
- const uBytes = (0, wire_1.unb64u)(node.U);
199
- const wrapBytes = (0, wire_1.unb64u)(node.wrap);
200
- if (uBytes === null || wrapBytes === null)
344
+ const cb = (0, wire_1.unb64u)(node.c);
345
+ const cpb = (0, wire_1.unb64u)(node.cp);
346
+ const c = cb === null ? null : (0, bls_1.g2FromBytes)(cb);
347
+ const cp = cpb === null ? null : (0, bls_1.g1FromBytes)(cpb);
348
+ if (c === null || cp === null)
201
349
  return null;
202
- const kemKey = (0, ibe_1.decapsulate)(dA, node.attr, uBytes, salt);
203
- if (kemKey === null)
204
- return null;
205
- const shareBytes = (0, wire_1.xorBytes)(wrapBytes, kemKey);
206
- if (shareBytes === null)
207
- return null;
208
- return (0, bls_1.bytesToScalar)(shareBytes);
350
+ return { kind: 'leaf', dj: comp.dj, dpj: comp.dpj, c, cp };
209
351
  }
210
- const shares = [];
352
+ const of = [];
211
353
  for (const branch of node.of) {
212
- const y = recover(branch.sub, keys, salt);
213
- if (y !== null)
214
- shares.push({ x: BigInt(branch.i), y });
215
- if (shares.length >= node.t)
216
- break; // enough branches recovered; no need to decrypt more.
354
+ const sub = plan(branch.sub, key);
355
+ if (sub !== null)
356
+ of.push({ x: BigInt(branch.i), sub });
357
+ if (of.length >= node.t)
358
+ break; // enough branches recovered; no need to look at more.
217
359
  }
218
- if (shares.length < node.t)
219
- return null;
220
- return (0, sss_1.recoverSecret)(shares);
360
+ return of.length < node.t ? null : { kind: 'gate', of };
361
+ }
362
+ /**
363
+ * BSW07 DecryptNode, evaluated in one pass. Leaf recovery is F_x = e(D_j, C_x) / e(C'_x, D'_j) = e(g1,g2)^(r*q_x(0)),
364
+ * and a gate multiplies its chosen children's values raised to their Lagrange coefficients. Because
365
+ * (F)^w = e(w*D_j, C_x) / e(w*C'_x, D'_j), the product of the Lagrange coefficients along the path to the root can be
366
+ * folded into the group points, so the whole tree collapses into ONE multi-pairing:
367
+ * K = e(D, C_0) / A = e(D, C_0) * prod_x e(-w_x*D_j, C_x) * e(w_x*C'_x, D'_j) (A = e(g1,g2)^(r*s)).
368
+ * Pushes the leaf terms (G1/G2 pairs) onto `out`; false if an interpolation is degenerate.
369
+ */
370
+ function collect(p, w, out) {
371
+ if (p.kind === 'leaf') {
372
+ out.push({ g1: (0, bls_1.g1Mul)(p.dj, w).negate(), g2: p.c }, { g1: (0, bls_1.g1Mul)(p.cp, w), g2: p.dpj });
373
+ return true;
374
+ }
375
+ const lambda = (0, sss_1.lagrangeAtZero)(p.of.map((c) => c.x));
376
+ if (lambda === null)
377
+ return false;
378
+ for (let i = 0; i < p.of.length; i++) {
379
+ const child = p.of[i];
380
+ if (child === undefined || !collect(child.sub, (0, bls_1.frMul)(w, lambda[i] ?? 0n), out))
381
+ return false;
382
+ }
383
+ return true;
221
384
  }
222
385
  /**
223
386
  * Decrypt. Returns the plaintext iff the key's attribute set satisfies the ciphertext's policy AND the
224
- * AEAD authenticates; otherwise returns null (never throws). A key missing a required attribute cannot
225
- * recover the root secret and therefore cannot derive the content-encryption key.
387
+ * AEAD authenticates; otherwise returns null (never throws). Components of keys issued to different users
388
+ * carry different randomisers and cannot be combined.
226
389
  */
227
390
  function decrypt(key, ciphertext) {
228
391
  const ct = parseCiphertext(ciphertext);
229
392
  if (ct === null)
230
393
  return null;
231
- if (!(0, wire_1.isObject)(key) || !(0, wire_1.isObject)(key.attrs))
394
+ const pk = parseKey(key);
395
+ if (pk === null)
232
396
  return null;
233
397
  const salt = (0, wire_1.unb64u)(ct.salt);
234
398
  const iv = (0, wire_1.unb64u)(ct.iv);
235
399
  const body = (0, wire_1.unb64u)(ct.ct);
236
400
  const tag = (0, wire_1.unb64u)(ct.tag);
237
- if (salt === null || iv === null || body === null || tag === null)
401
+ const c0b = (0, wire_1.unb64u)(ct.c0);
402
+ const c0 = c0b === null ? null : (0, bls_1.g2FromBytes)(c0b);
403
+ if (salt === null || iv === null || body === null || tag === null || c0 === null)
238
404
  return null;
239
- // Decode the attribute decryption keys we hold (skip any malformed point: fail-closed per attribute).
240
- const keys = new Map();
241
- for (const [attr, enc] of Object.entries(key.attrs)) {
242
- const bytes = (0, wire_1.unb64u)(enc);
243
- if (bytes === null)
244
- continue;
245
- const pt = (0, bls_1.g1FromBytes)(bytes);
246
- if (pt !== null)
247
- keys.set(attr, pt);
248
- }
249
- const rootSecret = recover(ct.kem, keys, salt);
250
- if (rootSecret === null)
405
+ const selection = plan(ct.kem, pk);
406
+ if (selection === null)
251
407
  return null; // attribute set does not satisfy the policy.
252
- const cek = (0, bls_1.kdf32)((0, bls_1.scalarToBytes)(rootSecret), salt, CEK_INFO);
253
- // The AEAD is the final integrity gate: a wrong reconstructed secret (cross-master key / tamper) or a
408
+ const pairs = [{ g1: pk.d, g2: c0 }];
409
+ if (!collect(selection, 1n, pairs))
410
+ return null;
411
+ let k;
412
+ try {
413
+ k = (0, bls_1.pairingProduct)(pairs); // = e(g1,g2)^((alpha+r)*s - r*s) = Y^s
414
+ }
415
+ catch {
416
+ return null;
417
+ }
418
+ const cek = (0, bls_1.kdf32)((0, bls_1.gtToBytes)(k), salt, CEK_INFO);
419
+ // The AEAD is the final integrity gate: a wrong K (mixed-randomiser pool / cross-master key / tamper) or a
254
420
  // tampered payload/header yields a null here.
255
- return (0, aead_1.open)(cek, { iv, ct: body, tag }, aad(ct));
421
+ let headerAad;
422
+ try {
423
+ headerAad = aad(ct);
424
+ }
425
+ catch {
426
+ return null; // header outside the canonical profile: cannot be authentic
427
+ }
428
+ return (0, aead_1.open)(cek, { iv, ct: body, tag }, headerAad);
256
429
  }
257
430
  /** Like {@link decrypt} but returns the plaintext decoded as UTF-8 text, or null. */
258
431
  function decryptText(key, ciphertext) {
package/dist/abe.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"abe.js","sourceRoot":"","sources":["../src/abe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abe.js","sourceRoot":"","sources":["../src/abe.ts"],"names":[],"mappings":"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"}
package/dist/aead.js CHANGED
@@ -30,7 +30,7 @@ function open(key, sealed, aad) {
30
30
  if (key.length !== 32 || sealed.iv.length !== IV_LEN || sealed.tag.length !== TAG_LEN)
31
31
  return null;
32
32
  try {
33
- const decipher = (0, node_crypto_1.createDecipheriv)('aes-256-gcm', key, sealed.iv);
33
+ const decipher = (0, node_crypto_1.createDecipheriv)('aes-256-gcm', key, sealed.iv, { authTagLength: TAG_LEN });
34
34
  decipher.setAAD(aad);
35
35
  decipher.setAuthTag(sealed.tag);
36
36
  return new Uint8Array(Buffer.concat([decipher.update(sealed.ct), decipher.final()]));
package/dist/aead.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"aead.js","sourceRoot":"","sources":["../src/aead.ts"],"names":[],"mappings":";;AAmBA,oBAQC;AAMD,oBAUC;AA3CD,6CAA4E;AAE5E;;;;;GAKG;AAEH,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AAQnB,2FAA2F;AAC3F,SAAgB,IAAI,CAAC,GAAe,EAAE,SAAqB,EAAE,GAAe;IAC1E,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC/E,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,GAAe,EAAE,MAAc,EAAE,GAAe;IACnE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACnG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"aead.js","sourceRoot":"","sources":["../src/aead.ts"],"names":[],"mappings":";;AAmBA,oBAQC;AAMD,oBAUC;AA3CD,6CAA4E;AAE5E;;;;;GAKG;AAEH,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AAQnB,2FAA2F;AAC3F,SAAgB,IAAI,CAAC,GAAe,EAAE,SAAqB,EAAE,GAAe;IAC1E,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC/E,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,IAAA,yBAAW,EAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAAC,GAAe,EAAE,MAAc,EAAE,GAAe;IACnE,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACnG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7F,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}