@atlasauth/pca-abe 0.2.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 +19 -4
- package/dist/abe.d.ts +83 -42
- package/dist/abe.js +290 -117
- package/dist/abe.js.map +1 -1
- package/dist/aead.js +1 -1
- package/dist/aead.js.map +1 -1
- package/dist/attributes.d.ts +28 -7
- package/dist/attributes.js +48 -27
- package/dist/attributes.js.map +1 -1
- package/dist/bls.d.ts +35 -12
- package/dist/bls.js +81 -11
- package/dist/bls.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pca.d.ts +3 -2
- package/dist/pca.js.map +1 -1
- package/dist/policy.d.ts +7 -0
- package/dist/policy.js +21 -4
- package/dist/policy.js.map +1 -1
- package/dist/sss.d.ts +6 -0
- package/dist/sss.js +33 -19
- package/dist/sss.js.map +1 -1
- package/dist/wire.d.ts +0 -2
- package/dist/wire.js +0 -10
- package/dist/wire.js.map +1 -1
- package/package.json +3 -2
- package/dist/ibe.d.ts +0 -24
- package/dist/ibe.js +0 -71
- package/dist/ibe.js.map +0 -1
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
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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()
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
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 = '
|
|
53
|
-
const CEK_INFO = 'atlas-pca-abe/cek/
|
|
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
|
|
81
|
+
const alpha = (0, bls_1.randomScalar)();
|
|
82
|
+
const beta = (0, bls_1.randomScalar)();
|
|
66
83
|
return {
|
|
67
|
-
msk: { v: 1, curve: 'bls12-381',
|
|
68
|
-
mpk: {
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
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
|
|
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
|
|
81
|
-
const
|
|
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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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(
|
|
243
|
+
function distribute(node, nodeSecret) {
|
|
106
244
|
if (node.kind === 'leaf') {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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(
|
|
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
|
|
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:
|
|
142
|
-
const kem = distribute(
|
|
143
|
-
const
|
|
144
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
152
|
-
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
196
|
-
if (
|
|
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
|
|
199
|
-
const
|
|
200
|
-
|
|
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
|
-
|
|
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
|
|
352
|
+
const of = [];
|
|
211
353
|
for (const branch of node.of) {
|
|
212
|
-
const
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
if (
|
|
216
|
-
break; // enough branches recovered; no need to
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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).
|
|
225
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
240
|
-
|
|
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
|
|
253
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|