@atlasauth/pca-bbs 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 CHANGED
@@ -51,7 +51,19 @@ verifyPresentation(pres, { pk, presentationHeader: bytes('action:search?q=atlas'
51
51
 
52
52
  ## Status
53
53
 
54
- Cryptography is unaudited. The BBS implementation follows the CFRG draft and is checked against its test vectors, but the draft is not a final standard. BBS on BLS12-381 is not post-quantum.
54
+ Part of [Proof-Carrying Authority](https://github.com/Atlas-Authorization/pca). **Experimental and unaudited.** The CFRG draft is not a final standard, and BBS on BLS12-381 is not post-quantum.
55
+
56
+ What is validated (ciphersuite BLS12-381-SHA-256 only):
57
+
58
+ - **Official fixture set** of draft-irtf-cfrg-bbs-signatures, vendored in `test-vectors/` with repository commit and per-file SHA-256: key generation, `hash_to_scalar`, message-to-scalar mapping, generators, all 10 signature cases (valid and invalid) and all 15 proof cases (valid and invalid). Signing reproduces the published signatures byte-for-byte, and proof generation with the published randomness reproduces the published proofs byte-for-byte. The fixtures are byte-identical across draft revisions -06 to -12.
59
+ - **Independent implementation**: the Rust crate `zkryptium` 0.7.1 (draft -12, on `bls12_381_plus`). Keys and signatures it produces are reproduced exactly, its randomized proofs verify here, and proofs and signatures produced here (including no-disclosure and full-disclosure selections) verify there. Tampered proofs and signatures are rejected on both sides. The runner source is in `test-vectors/xcheck-zkryptium`.
60
+ - **Rejection reasons** are asserted: `verifyDetailed` and `proofVerifyDetailed` report why something failed (malformed signature, public key or proof, pairing mismatch, challenge mismatch, bad disclosed indexes).
61
+
62
+ What is not validated:
63
+
64
+ - The SHAKE-256 ciphersuite, pseudonyms and blind signatures are not implemented.
65
+ - The credential layer (`issueCapabilityCredential`, `presentCredential`) is PCA-specific and has no external standard to test against; it is covered by this package's own tests only.
66
+ - Secret-scalar point multiplications (signing key, `1/(SK+e)`, signed messages, the prover's blinding scalars) use the library's fixed-window multiply with a fake point (`Point.multiply`), and secret inversions use Fermat exponentiation; `multiplyUnsafe` remains only for public verifier scalars. A dudect-style test (`ct.test.ts`: Welch t on interleaved weight-1 versus weight-253 scalars, fail at `|t| >= 10` with a median shift over 5%) passes, and a positive control with the variable-time multiply is detected. This is **not** a constant-time guarantee: JavaScript BigInt arithmetic and the JIT/GC have data-dependent timing, and the library's window method indexes a precomputed table by secret digits (a cache-timing channel). Use a native or WebAssembly constant-time implementation, or an HSM, for long-lived issuer keys facing a co-resident attacker. No independent audit.
55
67
 
56
68
  Source and issues: https://github.com/Atlas-Authorization/pca
57
69
 
package/dist/bbs.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
- * BBS signatures over BLS12-381, faithful to draft-irtf-cfrg-bbs-signatures (the 2023–2024 CFRG
3
- * draft; this implementation follows draft-07's core protocol and octet encodings).
2
+ * BBS signatures over BLS12-381, faithful to draft-irtf-cfrg-bbs-signatures (core protocol and
3
+ * octet encodings; validated against the draft's official BLS12-381-SHA-256 fixtures, which are unchanged
4
+ * across drafts -06 to -12, and against the independent `zkryptium` crate).
4
5
  *
5
6
  * Ciphersuite: **BLS12-381-SHA-256** — `BBS_BLS12381G1_XMD:SHA-256_SSWU_RO_`.
6
7
  * - signatures/generators live in G1 (48-byte compressed points), public keys in G2 (96-byte
@@ -17,10 +18,18 @@
17
18
  * fresh randomness every time), so two presentations of the same credential cannot be correlated.
18
19
  *
19
20
  * Implementation notes:
20
- * - Scalar arithmetic uses the curve's own scalar field `Fr` (order `r`); point arithmetic uses
21
- * `multiplyUnsafe` (variable-time). This mirrors the draft's reference clarity and is appropriate
22
- * for the public blinding operations here; it is NOT a constant-time implementation and callers
23
- * holding long-lived secret keys in an adversarial co-tenant should keep that in mind.
21
+ * - Scalar arithmetic uses the curve's own scalar field `Fr` (order `r`). Every point multiplication by a
22
+ * SECRET scalar (the signing key, `1/(SK+e)`, the signed messages, the prover's blinding scalars and
23
+ * `e`) goes through `g1mulSecret` / `g2mulSecret`, i.e. the library's fixed-window multiply with a fake
24
+ * point (`Point.multiply`), and inversions of secrets use Fermat exponentiation (`invSecret`), not
25
+ * extended Euclid. `multiplyUnsafe` (variable-time) is used ONLY where the scalar is public: the
26
+ * verifier's challenge and response scalars and the signature's `e` during verification.
27
+ * - WHAT THIS DOES NOT GUARANTEE: this is JavaScript. BigInt arithmetic is not constant-time, the
28
+ * engine's JIT/GC add data-dependent timing, and the library's window method indexes a precomputed
29
+ * table by secret digits (a cache-timing channel). The change removes the scalar-Hamming-weight
30
+ * dependence of the high-level multiply (measured, see `ct.test.ts`); it is not a constant-time proof.
31
+ * A deployment holding long-lived issuer keys against a co-resident attacker needs a native/WASM
32
+ * constant-time implementation or an HSM.
24
33
  * - All cross-language octet encodings (point/scalar/integer serialization, challenge and domain
25
34
  * inputs) follow the draft so a conforming verifier in another language interoperates.
26
35
  */
@@ -29,6 +38,12 @@ import { bls12_381 } from '@noble/curves/bls12-381';
29
38
  export type G1Point = InstanceType<typeof bls12_381.G1.ProjectivePoint>;
30
39
  /** A point of G2 (public keys). */
31
40
  export type G2Point = InstanceType<typeof bls12_381.G2.ProjectivePoint>;
41
+ /**
42
+ * Implementation limit on the number of messages in one credential. The draft allows up to 2^64-1, but
43
+ * every verification costs one hash-to-curve per message, and a verifier derives the message count from
44
+ * the (attacker-supplied) proof length, so an unbounded count is a CPU/memory denial-of-service lever.
45
+ */
46
+ export declare const MAX_MESSAGES = 1024;
32
47
  /** Order of the BBS scalar field (the prime subgroup order `r`). */
33
48
  export declare const R: bigint;
34
49
  /** The ciphersuite identifier (without the api_id suffix). */
@@ -67,6 +82,17 @@ export declare function skFromBytes(bytes: Uint8Array): bigint;
67
82
  * disclosable). Returns `signature_to_octets(A, e)`.
68
83
  */
69
84
  export declare function sign(sk: bigint, pk: Uint8Array, header: Uint8Array, messages: readonly Uint8Array[]): Uint8Array;
85
+ /** Why a signature or proof was rejected (stable, machine-readable). */
86
+ export type RejectReason = 'malformed-signature' | 'malformed-public-key' | 'malformed-proof' | 'disclosed-length-mismatch' | 'invalid-disclosed-indexes' | 'pairing-mismatch' | 'challenge-mismatch';
87
+ /** Result of a verification that says WHY it failed. */
88
+ export type VerifyResult = {
89
+ readonly ok: true;
90
+ } | {
91
+ readonly ok: false;
92
+ readonly reason: RejectReason;
93
+ };
94
+ /** Verify(PK, signature, header, messages) with a rejection reason; fails closed on any malformed input. */
95
+ export declare function verifyDetailed(pk: Uint8Array, signature: Uint8Array, header: Uint8Array, messages: readonly Uint8Array[]): VerifyResult;
70
96
  /** Verify(PK, signature, header, messages): true iff the signature covers exactly these messages. */
71
97
  export declare function verify(pk: Uint8Array, signature: Uint8Array, header: Uint8Array, messages: readonly Uint8Array[]): boolean;
72
98
  /**
@@ -74,12 +100,14 @@ export declare function verify(pk: Uint8Array, signature: Uint8Array, header: Ui
74
100
  * proof-of-knowledge of the signature that selectively discloses the messages at
75
101
  * `disclosed_indexes`. `ph` is the presentation header (binds the proof to a context, e.g. a nonce
76
102
  * or the request it authorizes). The proof is randomized: each call produces different octets.
103
+ * `fixedRandomScalars` (5 + undisclosed count scalars) pins the randomness for test vectors only;
104
+ * never pass it in production, since reusing it across proofs breaks zero-knowledge and unlinkability.
77
105
  */
78
- export declare function proofGen(pk: Uint8Array, signature: Uint8Array, header: Uint8Array, ph: Uint8Array, messages: readonly Uint8Array[], disclosedIndexes: readonly number[]): Uint8Array;
106
+ export declare function proofGen(pk: Uint8Array, signature: Uint8Array, header: Uint8Array, ph: Uint8Array, messages: readonly Uint8Array[], disclosedIndexes: readonly number[], fixedRandomScalars?: readonly bigint[]): Uint8Array;
79
107
  /**
80
- * ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes): true iff `proof` is a
81
- * valid selective-disclosure proof under `PK` revealing exactly `disclosed_messages` at
82
- * `disclosed_indexes`, bound to `header` and `ph`. `disclosed_messages[k]` must correspond to
83
- * `disclosed_indexes[k]`.
108
+ * ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes) with a rejection reason.
109
+ * `disclosed_messages[k]` must correspond to `disclosed_indexes[k]`.
84
110
  */
111
+ export declare function proofVerifyDetailed(pk: Uint8Array, proof: Uint8Array, header: Uint8Array, ph: Uint8Array, disclosedMessages: readonly Uint8Array[], disclosedIndexes: readonly number[]): VerifyResult;
112
+ /** ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes): true iff the proof is valid. */
85
113
  export declare function proofVerify(pk: Uint8Array, proof: Uint8Array, header: Uint8Array, ph: Uint8Array, disclosedMessages: readonly Uint8Array[], disclosedIndexes: readonly number[]): boolean;
package/dist/bbs.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.API_ID = exports.CIPHERSUITE_ID = exports.R = void 0;
3
+ exports.API_ID = exports.CIPHERSUITE_ID = exports.R = exports.MAX_MESSAGES = void 0;
4
4
  exports.hashToScalar = hashToScalar;
5
5
  exports.mapMessageToScalarAsHash = mapMessageToScalarAsHash;
6
6
  exports.messagesToScalars = messagesToScalars;
@@ -11,12 +11,15 @@ exports.generateKeyPair = generateKeyPair;
11
11
  exports.skToBytes = skToBytes;
12
12
  exports.skFromBytes = skFromBytes;
13
13
  exports.sign = sign;
14
+ exports.verifyDetailed = verifyDetailed;
14
15
  exports.verify = verify;
15
16
  exports.proofGen = proofGen;
17
+ exports.proofVerifyDetailed = proofVerifyDetailed;
16
18
  exports.proofVerify = proofVerify;
17
19
  /**
18
- * BBS signatures over BLS12-381, faithful to draft-irtf-cfrg-bbs-signatures (the 2023–2024 CFRG
19
- * draft; this implementation follows draft-07's core protocol and octet encodings).
20
+ * BBS signatures over BLS12-381, faithful to draft-irtf-cfrg-bbs-signatures (core protocol and
21
+ * octet encodings; validated against the draft's official BLS12-381-SHA-256 fixtures, which are unchanged
22
+ * across drafts -06 to -12, and against the independent `zkryptium` crate).
20
23
  *
21
24
  * Ciphersuite: **BLS12-381-SHA-256** — `BBS_BLS12381G1_XMD:SHA-256_SSWU_RO_`.
22
25
  * - signatures/generators live in G1 (48-byte compressed points), public keys in G2 (96-byte
@@ -33,10 +36,18 @@ exports.proofVerify = proofVerify;
33
36
  * fresh randomness every time), so two presentations of the same credential cannot be correlated.
34
37
  *
35
38
  * Implementation notes:
36
- * - Scalar arithmetic uses the curve's own scalar field `Fr` (order `r`); point arithmetic uses
37
- * `multiplyUnsafe` (variable-time). This mirrors the draft's reference clarity and is appropriate
38
- * for the public blinding operations here; it is NOT a constant-time implementation and callers
39
- * holding long-lived secret keys in an adversarial co-tenant should keep that in mind.
39
+ * - Scalar arithmetic uses the curve's own scalar field `Fr` (order `r`). Every point multiplication by a
40
+ * SECRET scalar (the signing key, `1/(SK+e)`, the signed messages, the prover's blinding scalars and
41
+ * `e`) goes through `g1mulSecret` / `g2mulSecret`, i.e. the library's fixed-window multiply with a fake
42
+ * point (`Point.multiply`), and inversions of secrets use Fermat exponentiation (`invSecret`), not
43
+ * extended Euclid. `multiplyUnsafe` (variable-time) is used ONLY where the scalar is public: the
44
+ * verifier's challenge and response scalars and the signature's `e` during verification.
45
+ * - WHAT THIS DOES NOT GUARANTEE: this is JavaScript. BigInt arithmetic is not constant-time, the
46
+ * engine's JIT/GC add data-dependent timing, and the library's window method indexes a precomputed
47
+ * table by secret digits (a cache-timing channel). The change removes the scalar-Hamming-weight
48
+ * dependence of the high-level multiply (measured, see `ct.test.ts`); it is not a constant-time proof.
49
+ * A deployment holding long-lived issuer keys against a co-resident attacker needs a native/WASM
50
+ * constant-time implementation or an HSM.
40
51
  * - All cross-language octet encodings (point/scalar/integer serialization, challenge and domain
41
52
  * inputs) follow the draft so a conforming verifier in another language interoperates.
42
53
  */
@@ -50,6 +61,12 @@ const G1 = bls12_381_1.bls12_381.G1.ProjectivePoint;
50
61
  const G2 = bls12_381_1.bls12_381.G2.ProjectivePoint;
51
62
  const Fr = bls12_381_1.bls12_381.fields.Fr;
52
63
  const Fp12 = bls12_381_1.bls12_381.fields.Fp12;
64
+ /**
65
+ * Implementation limit on the number of messages in one credential. The draft allows up to 2^64-1, but
66
+ * every verification costs one hash-to-curve per message, and a verifier derives the message count from
67
+ * the (attacker-supplied) proof length, so an unbounded count is a CPU/memory denial-of-service lever.
68
+ */
69
+ exports.MAX_MESSAGES = 1024;
53
70
  /** Order of the BBS scalar field (the prime subgroup order `r`). */
54
71
  exports.R = Fr.ORDER;
55
72
  // ---- ciphersuite constants (BLS12-381-SHA-256) ------------------------------------------------
@@ -65,12 +82,32 @@ const MAP_DST = `${exports.API_ID}MAP_MSG_TO_SCALAR_AS_HASH_`;
65
82
  const SEED_DST = `${exports.API_ID}SIG_GENERATOR_SEED_`;
66
83
  const GEN_DST = `${exports.API_ID}SIG_GENERATOR_DST_`;
67
84
  const GEN_SEED = `${exports.API_ID}MESSAGE_GENERATOR_SEED`;
68
- const KEYGEN_DST = `${exports.CIPHERSUITE_ID}KEYGEN_DST_`;
85
+ /** KeyGen DST = api_id || "KEYGEN_DST_" (draft §3.4.1); the official key-pair fixture pins this exact string. */
86
+ const KEYGEN_DST = `${exports.API_ID}KEYGEN_DST_`;
69
87
  /**
70
88
  * P1: the fixed G1 generator of the BLS12-381-SHA-256 ciphersuite (draft §7.2.2), as published.
71
89
  * Signing commits the message vector against P1, Q_1 and the per-message generators H_i.
72
90
  */
73
91
  const P1_HEX = 'a8ce256102840821a3e94ea9025e4662b205762f9776b3a766c872b948f1fd225e7c59698588e70d11406d161b4e28c9';
92
+ /**
93
+ * Strict point decoding. The pinned `@noble/curves` does not reduce coordinates, so `x + p` (G1) / `c0 + p` (G2) decodes to the
94
+ * same point as the canonical encoding; accepting it would give every signature, proof and issuer key a second byte string.
95
+ * Decode, then require the exact compressed re-encoding. Throws on any other input.
96
+ */
97
+ function strictG1(bytes) {
98
+ const p = G1.fromHex(bytes);
99
+ const re = p.toRawBytes(true);
100
+ if (re.length !== bytes.length || re.some((b, i) => b !== bytes[i]))
101
+ throw new Error('bbs: non-canonical G1 encoding');
102
+ return p;
103
+ }
104
+ function strictG2(bytes) {
105
+ const p = G2.fromHex(bytes);
106
+ const re = p.toRawBytes(true);
107
+ if (re.length !== bytes.length || re.some((b, i) => b !== bytes[i]))
108
+ throw new Error('bbs: non-canonical G2 encoding');
109
+ return p;
110
+ }
74
111
  const P1 = G1.fromHex(P1_HEX);
75
112
  /** The base point of G2 (public keys are `SK · BP2`). */
76
113
  const BP2 = G2.BASE;
@@ -117,6 +154,8 @@ function messagesToScalars(messages) {
117
154
  function createGenerators(count) {
118
155
  if (!Number.isInteger(count) || count < 0)
119
156
  throw new RangeError('bbs: generator count must be a non-negative integer');
157
+ if (count > exports.MAX_MESSAGES + 1)
158
+ throw new RangeError(`bbs: at most ${exports.MAX_MESSAGES} messages are supported`);
120
159
  const gens = [];
121
160
  let v = expand(ascii(GEN_SEED), SEED_DST, EXPAND_LEN);
122
161
  for (let i = 1; i <= count; i++) {
@@ -147,14 +186,37 @@ function serialize(els) {
147
186
  return (0, utils_1.concatBytes)(...parts);
148
187
  }
149
188
  // ---- point arithmetic helpers -----------------------------------------------------------------
189
+ /** Multiply by a PUBLIC scalar (verifier-side challenge/response values). Variable-time: never pass a secret. */
150
190
  function g1mul(P, s) {
151
191
  const sc = Fr.create(s);
152
192
  return sc === 0n ? G1.ZERO : P.multiplyUnsafe(sc);
153
193
  }
194
+ /** Multiply by a PUBLIC scalar in G2. Variable-time: never pass a secret. */
154
195
  function g2mul(P, s) {
155
196
  const sc = Fr.create(s);
156
197
  return sc === 0n ? G2.ZERO : P.multiplyUnsafe(sc);
157
198
  }
199
+ /**
200
+ * Multiply by a SECRET scalar: the library's fixed-window multiply with a fake point (no scalar-dependent
201
+ * add/skip pattern). Only "is the scalar zero" is branched on (a zero secret is degenerate and refused
202
+ * elsewhere).
203
+ */
204
+ function g1mulSecret(P, s) {
205
+ const sc = Fr.create(s);
206
+ return sc === 0n ? G1.ZERO : P.multiply(sc);
207
+ }
208
+ function g2mulSecret(P, s) {
209
+ const sc = Fr.create(s);
210
+ return sc === 0n ? G2.ZERO : P.multiply(sc);
211
+ }
212
+ const FR_INV_EXP = exports.R - 2n;
213
+ /** Inverse of a SECRET scalar by Fermat exponentiation (operation sequence depends only on the public exponent). */
214
+ function invSecret(x) {
215
+ const v = Fr.create(x);
216
+ if (v === 0n)
217
+ throw new Error('bbs: inverse of zero');
218
+ return Fr.pow(v, FR_INV_EXP);
219
+ }
158
220
  // ---- key generation (draft §3.4) --------------------------------------------------------------
159
221
  /**
160
222
  * KeyGen: derive a secret scalar `SK` from key material and optional context info (draft §3.4.1).
@@ -173,11 +235,15 @@ function keyGen(keyMaterial, keyInfo = new Uint8Array(0)) {
173
235
  }
174
236
  /** SkToPk: the public key octets `point_to_octets_E2(SK · BP2)` (draft §3.4.2). */
175
237
  function skToPk(sk) {
176
- return g2mul(BP2, sk).toRawBytes(true);
238
+ return g2mulSecret(BP2, sk).toRawBytes(true);
177
239
  }
178
240
  /** Convenience: generate a fresh (SK scalar, PK octets) pair from the system CSPRNG. */
179
241
  function generateKeyPair() {
180
- const sk = keyGen((0, utils_2.randomBytes)(32));
242
+ const ikm = (0, utils_2.randomBytes)(32);
243
+ // A stuck-at-zero entropy source would otherwise derive one fixed, publicly computable "random" key.
244
+ if (ikm.every((b) => b === 0))
245
+ throw new Error('bbs: entropy source returned all zeros (RNG failure); refusing to generate a key');
246
+ const sk = keyGen(ikm);
181
247
  return { sk, pk: skToPk(sk) };
182
248
  }
183
249
  /** A 32-octet big-endian secret scalar (e.g. to serialize or parse a given SK). */
@@ -199,7 +265,7 @@ function octetsToSignature(sig) {
199
265
  if (sig.length !== OCTET_POINT_LENGTH + OCTET_SCALAR_LENGTH) {
200
266
  throw new RangeError('bbs: signature must be 80 octets');
201
267
  }
202
- const A = G1.fromHex(sig.subarray(0, OCTET_POINT_LENGTH));
268
+ const A = strictG1(sig.subarray(0, OCTET_POINT_LENGTH));
203
269
  if (A.equals(G1.ZERO))
204
270
  throw new Error('bbs: signature point A is the identity');
205
271
  const e = os2ip(sig.subarray(OCTET_POINT_LENGTH));
@@ -216,11 +282,14 @@ function calculateDomain(pk, Q1, H, header) {
216
282
  const domInput = (0, utils_1.concatBytes)(pk, domOcts, i2osp(BigInt(header.length), 8), header);
217
283
  return hashToScalar(domInput, H2S_DST);
218
284
  }
219
- /** B = P1 + Q_1·domain + Σ H_i·msg_i (the common commitment used by Sign/Verify/ProofGen). */
285
+ /**
286
+ * B = P1 + Q_1·domain + Σ H_i·msg_i (the common commitment used by Sign/Verify/ProofGen). The messages are the
287
+ * holder's (possibly private) attributes, so this uses the secret-scalar multiply on every path.
288
+ */
220
289
  function computeB(Q1, H, domain, msgScalars) {
221
- let B = P1.add(g1mul(Q1, domain));
290
+ let B = P1.add(g1mulSecret(Q1, domain));
222
291
  for (let i = 0; i < msgScalars.length; i++) {
223
- B = B.add(g1mul(at(H, i), at(msgScalars, i)));
292
+ B = B.add(g1mulSecret(at(H, i), at(msgScalars, i)));
224
293
  }
225
294
  return B;
226
295
  }
@@ -244,22 +313,29 @@ function sign(sk, pk, header, messages) {
244
313
  eEls.push({ t: 'scalar', v: domain });
245
314
  const e = hashToScalar(serialize(eEls), H2S_DST);
246
315
  const B = computeB(Q1, H, domain, msgScalars);
247
- const A = g1mul(B, Fr.inv(Fr.add(sk, e))); // A = B · 1/(SK + e)
316
+ const A = g1mulSecret(B, invSecret(Fr.add(sk, e))); // A = B · 1/(SK + e)
248
317
  return signatureToOctets(A, e);
249
318
  }
250
- /** Verify(PK, signature, header, messages): true iff the signature covers exactly these messages. */
251
- function verify(pk, signature, header, messages) {
319
+ /** Verify(PK, signature, header, messages) with a rejection reason; fails closed on any malformed input. */
320
+ function verifyDetailed(pk, signature, header, messages) {
252
321
  let parsed;
253
- let W;
254
322
  try {
255
323
  parsed = octetsToSignature(signature);
256
- W = G2.fromHex(pk);
257
324
  }
258
325
  catch {
259
- return false;
326
+ return { ok: false, reason: 'malformed-signature' };
327
+ }
328
+ let W;
329
+ try {
330
+ W = strictG2(pk);
331
+ }
332
+ catch {
333
+ return { ok: false, reason: 'malformed-public-key' };
260
334
  }
261
335
  if (W.equals(G2.ZERO))
262
- return false;
336
+ return { ok: false, reason: 'malformed-public-key' };
337
+ if (messages.length > exports.MAX_MESSAGES)
338
+ return { ok: false, reason: 'disclosed-length-mismatch' };
263
339
  const msgScalars = messagesToScalars(messages);
264
340
  const L = msgScalars.length;
265
341
  const gens = createGenerators(L + 1);
@@ -270,7 +346,11 @@ function verify(pk, signature, header, messages) {
270
346
  // Pairing check: e(A, W + BP2·e) == e(B, BP2) ⇔ e(A, (SK+e)·BP2) == e(B, BP2).
271
347
  const lhs = bls12_381_1.bls12_381.pairing(parsed.A, W.add(g2mul(BP2, parsed.e)));
272
348
  const rhs = bls12_381_1.bls12_381.pairing(B, BP2);
273
- return Fp12.eql(lhs, rhs);
349
+ return Fp12.eql(lhs, rhs) ? { ok: true } : { ok: false, reason: 'pairing-mismatch' };
350
+ }
351
+ /** Verify(PK, signature, header, messages): true iff the signature covers exactly these messages. */
352
+ function verify(pk, signature, header, messages) {
353
+ return verifyDetailed(pk, signature, header, messages).ok;
274
354
  }
275
355
  // ---- random scalars (draft §4.2.1) ------------------------------------------------------------
276
356
  function calculateRandomScalars(count) {
@@ -310,9 +390,9 @@ function octetsToProof(proof) {
310
390
  throw new RangeError('bbs: malformed proof length');
311
391
  }
312
392
  let o = 0;
313
- const Abar = G1.fromHex(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
314
- const Bbar = G1.fromHex(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
315
- const D = G1.fromHex(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
393
+ const Abar = strictG1(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
394
+ const Bbar = strictG1(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
395
+ const D = strictG1(proof.subarray(o, (o += OCTET_POINT_LENGTH)));
316
396
  const eHat = readScalar(proof, o);
317
397
  o += OCTET_SCALAR_LENGTH;
318
398
  const r1Hat = readScalar(proof, o);
@@ -355,8 +435,10 @@ function undisclosedAscending(disclosed, L) {
355
435
  * proof-of-knowledge of the signature that selectively discloses the messages at
356
436
  * `disclosed_indexes`. `ph` is the presentation header (binds the proof to a context, e.g. a nonce
357
437
  * or the request it authorizes). The proof is randomized: each call produces different octets.
438
+ * `fixedRandomScalars` (5 + undisclosed count scalars) pins the randomness for test vectors only;
439
+ * never pass it in production, since reusing it across proofs breaks zero-knowledge and unlinkability.
358
440
  */
359
- function proofGen(pk, signature, header, ph, messages, disclosedIndexes) {
441
+ function proofGen(pk, signature, header, ph, messages, disclosedIndexes, fixedRandomScalars) {
360
442
  const { A, e } = octetsToSignature(signature);
361
443
  const msgScalars = messagesToScalars(messages);
362
444
  const L = msgScalars.length;
@@ -370,23 +452,30 @@ function proofGen(pk, signature, header, ph, messages, disclosedIndexes) {
370
452
  const H = gens.slice(1);
371
453
  const domain = calculateDomain(pk, Q1, H, header);
372
454
  const B = computeB(Q1, H, domain, msgScalars);
373
- const rs = calculateRandomScalars(5 + U);
455
+ const rs = fixedRandomScalars === undefined ? calculateRandomScalars(5 + U) : [...fixedRandomScalars];
456
+ if (rs.length !== 5 + U)
457
+ throw new RangeError(`bbs: expected ${5 + U} random scalars, got ${rs.length}`);
458
+ if (at(rs, 0) === 0n || at(rs, 1) === 0n) {
459
+ // r1 = 0 or r2 = 0 collapses the blinded signature to the identity (and r2 = 0 is not invertible).
460
+ throw new RangeError('bbs: random blinding scalars r1, r2 must be non-zero (RNG failure?)');
461
+ }
374
462
  const r1 = at(rs, 0);
375
463
  const r2 = at(rs, 1);
376
464
  const eTilde = at(rs, 2);
377
465
  const r1Tilde = at(rs, 3);
378
466
  const r3Tilde = at(rs, 4);
379
467
  const mTilde = rs.slice(5);
380
- const D = g1mul(B, r2);
381
- const Abar = g1mul(A, Fr.mul(r1, r2));
382
- const Bbar = g1mul(D, r1).subtract(g1mul(Abar, e));
383
- const T1 = g1mul(Abar, eTilde).add(g1mul(D, r1Tilde));
384
- let T2 = g1mul(D, r3Tilde);
468
+ // Every scalar here is secret (blinding scalars, the signature's e, the undisclosed messages' randomisers).
469
+ const D = g1mulSecret(B, r2);
470
+ const Abar = g1mulSecret(A, Fr.mul(r1, r2));
471
+ const Bbar = g1mulSecret(D, r1).subtract(g1mulSecret(Abar, e));
472
+ const T1 = g1mulSecret(Abar, eTilde).add(g1mulSecret(D, r1Tilde));
473
+ let T2 = g1mulSecret(D, r3Tilde);
385
474
  for (let k = 0; k < U; k++)
386
- T2 = T2.add(g1mul(at(H, at(undisclosed, k)), at(mTilde, k)));
475
+ T2 = T2.add(g1mulSecret(at(H, at(undisclosed, k)), at(mTilde, k)));
387
476
  const disclosedMsgs = disclosed.map((i) => at(msgScalars, i));
388
477
  const c = calculateChallenge(Abar, Bbar, D, T1, T2, disclosed, disclosedMsgs, domain, ph);
389
- const r3 = Fr.inv(r2);
478
+ const r3 = invSecret(r2);
390
479
  const eHat = Fr.add(eTilde, Fr.mul(e, c));
391
480
  const r1Hat = Fr.sub(r1Tilde, Fr.mul(r1, c));
392
481
  const r3Hat = Fr.sub(r3Tilde, Fr.mul(r3, c));
@@ -397,28 +486,33 @@ function proofGen(pk, signature, header, ph, messages, disclosedIndexes) {
397
486
  }
398
487
  // ---- ProofVerify (draft §3.5.4, core §3.6.4) --------------------------------------------------
399
488
  /**
400
- * ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes): true iff `proof` is a
401
- * valid selective-disclosure proof under `PK` revealing exactly `disclosed_messages` at
402
- * `disclosed_indexes`, bound to `header` and `ph`. `disclosed_messages[k]` must correspond to
403
- * `disclosed_indexes[k]`.
489
+ * ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes) with a rejection reason.
490
+ * `disclosed_messages[k]` must correspond to `disclosed_indexes[k]`.
404
491
  */
405
- function proofVerify(pk, proof, header, ph, disclosedMessages, disclosedIndexes) {
492
+ function proofVerifyDetailed(pk, proof, header, ph, disclosedMessages, disclosedIndexes) {
406
493
  let p;
407
- let W;
408
494
  try {
409
495
  p = octetsToProof(proof);
410
- W = G2.fromHex(pk);
411
496
  }
412
497
  catch {
413
- return false;
498
+ return { ok: false, reason: 'malformed-proof' };
499
+ }
500
+ let W;
501
+ try {
502
+ W = strictG2(pk);
503
+ }
504
+ catch {
505
+ return { ok: false, reason: 'malformed-public-key' };
414
506
  }
415
507
  if (W.equals(G2.ZERO))
416
- return false;
508
+ return { ok: false, reason: 'malformed-public-key' };
417
509
  if (disclosedMessages.length !== disclosedIndexes.length)
418
- return false;
510
+ return { ok: false, reason: 'disclosed-length-mismatch' };
419
511
  const U = p.mHat.length;
420
512
  const R_count = disclosedIndexes.length;
421
513
  const L = R_count + U;
514
+ if (L > exports.MAX_MESSAGES)
515
+ return { ok: false, reason: 'malformed-proof' };
422
516
  let disclosed;
423
517
  try {
424
518
  validateIndexes(disclosedIndexes, L);
@@ -426,7 +520,7 @@ function proofVerify(pk, proof, header, ph, disclosedMessages, disclosedIndexes)
426
520
  disclosed = disclosedIndexes.map((idx, k) => ({ idx, msg: at(disclosedScalars, k) }));
427
521
  }
428
522
  catch {
429
- return false;
523
+ return { ok: false, reason: 'invalid-disclosed-indexes' };
430
524
  }
431
525
  disclosed.sort((a, b) => a.idx - b.idx);
432
526
  const disclosedSet = new Set(disclosed.map((d) => d.idx));
@@ -447,8 +541,14 @@ function proofVerify(pk, proof, header, ph, disclosedMessages, disclosedIndexes)
447
541
  T2 = T2.add(g1mul(at(H, at(undisclosed, k)), at(p.mHat, k)));
448
542
  const cv = calculateChallenge(p.Abar, p.Bbar, p.D, T1, T2, disclosed.map((d) => d.idx), disclosed.map((d) => d.msg), domain, ph);
449
543
  if (cv !== p.c)
450
- return false;
544
+ return { ok: false, reason: 'challenge-mismatch' };
451
545
  // Final pairing: e(Ā, W) == e(B̄, BP2).
452
- return Fp12.eql(bls12_381_1.bls12_381.pairing(p.Abar, W), bls12_381_1.bls12_381.pairing(p.Bbar, BP2));
546
+ return Fp12.eql(bls12_381_1.bls12_381.pairing(p.Abar, W), bls12_381_1.bls12_381.pairing(p.Bbar, BP2))
547
+ ? { ok: true }
548
+ : { ok: false, reason: 'pairing-mismatch' };
549
+ }
550
+ /** ProofVerify(PK, proof, header, ph, disclosed_messages, disclosed_indexes): true iff the proof is valid. */
551
+ function proofVerify(pk, proof, header, ph, disclosedMessages, disclosedIndexes) {
552
+ return proofVerifyDetailed(pk, proof, header, ph, disclosedMessages, disclosedIndexes).ok;
453
553
  }
454
554
  //# sourceMappingURL=bbs.js.map
package/dist/bbs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bbs.js","sourceRoot":"","sources":["../src/bbs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bbs.js","sourceRoot":"","sources":["../src/bbs.ts"],"names":[],"mappings":";;;AA2IA,oCAEC;AAGD,4DAEC;AAGD,8CAEC;AAMD,4CAWC;AA2ED,wBAOC;AAGD,wBAEC;AAGD,0CAMC;AAGD,8BAEC;AACD,kCAKC;AAqDD,oBAiBC;AAgBD,wCAgCC;AAGD,wBAEC;AAmHD,4BAyDC;AAQD,kDAuEC;AAGD,kCASC;AArpBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,uDAAoD;AACpD,wEAA0E;AAC1E,wDAA6F;AAC7F,iDAA8C;AAC9C,+CAAkD;AAElD,kGAAkG;AAElG,MAAM,EAAE,GAAG,qBAAS,CAAC,EAAE,CAAC,eAAe,CAAC;AACxC,MAAM,EAAE,GAAG,qBAAS,CAAC,EAAE,CAAC,eAAe,CAAC;AACxC,MAAM,EAAE,GAAG,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/B,MAAM,IAAI,GAAG,qBAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AAOnC;;;;GAIG;AACU,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,oEAAoE;AACvD,QAAA,CAAC,GAAW,EAAE,CAAC,KAAK,CAAC;AAElC,kGAAkG;AAElG,8DAA8D;AACjD,QAAA,cAAc,GAAG,qCAAqC,CAAC;AACpE,8CAA8C;AACjC,QAAA,MAAM,GAAG,GAAG,sBAAc,WAAW,CAAC;AAEnD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,kBAAkB,GAAG,EAAE,CAAC,CAAC,iBAAiB;AAChD,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,OAAO,GAAG,GAAG,cAAM,MAAM,CAAC;AAChC,MAAM,OAAO,GAAG,GAAG,cAAM,4BAA4B,CAAC;AACtD,MAAM,QAAQ,GAAG,GAAG,cAAM,qBAAqB,CAAC;AAChD,MAAM,OAAO,GAAG,GAAG,cAAM,oBAAoB,CAAC;AAC9C,MAAM,QAAQ,GAAG,GAAG,cAAM,wBAAwB,CAAC;AACnD,iHAAiH;AACjH,MAAM,UAAU,GAAG,GAAG,cAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,GAAG,kGAAkG,CAAC;AAClH;;;;GAIG;AACH,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvH,OAAO,CAAC,CAAC;AACX,CAAC;AACD,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,EAAE,GAAY,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvC,yDAAyD;AACzD,MAAM,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC;AAE7B,kGAAkG;AAElG,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;AAC/B,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,qFAAqF;AACrF,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW;IACnC,OAAO,IAAA,uBAAe,EAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,wEAAwE;AACxE,SAAS,KAAK,CAAC,CAAa;IAC1B,OAAO,IAAA,uBAAe,EAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,gGAAgG;AAChG,SAAS,EAAE,CAAI,GAAiB,EAAE,CAAS;IACzC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,SAAS;QAAE,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,sBAAsB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9F,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yDAAyD;AACzD,SAAS,MAAM,CAAC,GAAe,EAAE,GAAW,EAAE,GAAW;IACvD,OAAO,IAAA,kCAAkB,EAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,eAAM,CAAC,CAAC;AAC1D,CAAC;AAED,+FAA+F;AAC/F,SAAgB,YAAY,CAAC,GAAe,EAAE,GAAW;IACvD,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,qFAAqF;AACrF,SAAgB,wBAAwB,CAAC,OAAmB;IAC1D,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,qFAAqF;AACrF,SAAgB,iBAAiB,CAAC,QAA+B;IAC/D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;IACvH,IAAI,KAAK,GAAG,oBAAY,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,oBAAY,yBAAyB,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,CAAC,GAAG,MAAM,CAAC,IAAA,mBAAW,EAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,qBAAS,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,SAAS,SAAS,CAAC,GAAqB;IACtC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;YACb,KAAK,IAAI;gBACP,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,IAAI;gBACP,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,KAAK;gBACR,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAA,mBAAW,EAAC,GAAG,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,kGAAkG;AAElG,iHAAiH;AACjH,SAAS,KAAK,CAAC,CAAU,EAAE,CAAS;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,6EAA6E;AAC7E,SAAS,KAAK,CAAC,CAAU,EAAE,CAAS;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,CAAU,EAAE,CAAS;IACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,CAAS;IACxC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,GAAG,SAAC,GAAG,EAAE,CAAC;AAE1B,oHAAoH;AACpH,SAAS,SAAS,CAAC,CAAS;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED,kGAAkG;AAElG;;;GAGG;AACH,SAAgB,MAAM,CAAC,WAAuB,EAAE,UAAsB,IAAI,UAAU,CAAC,CAAC,CAAC;IACrF,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAC;IAClG,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IAC/F,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACjD,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAC9F,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,mFAAmF;AACnF,SAAgB,MAAM,CAAC,EAAU;IAC/B,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,wFAAwF;AACxF,SAAgB,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAA,mBAAW,EAAC,EAAE,CAAC,CAAC;IAC5B,qGAAqG;IACrG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACnI,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,mFAAmF;AACnF,SAAgB,SAAS,CAAC,EAAU;IAClC,OAAO,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACxC,CAAC;AACD,SAAgB,WAAW,CAAC,KAAiB;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,mBAAmB;QAAE,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC5F,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAC;QAAE,MAAM,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACvE,OAAO,EAAE,CAAC;AACZ,CAAC;AASD,SAAS,iBAAiB,CAAC,CAAU,EAAE,CAAS;IAC9C,OAAO,IAAA,mBAAW,EAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAe;IACxC,IAAI,GAAG,CAAC,MAAM,KAAK,kBAAkB,GAAG,mBAAmB,EAAE,CAAC;QAC5D,MAAM,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAC;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACpF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,kGAAkG;AAElG,SAAS,eAAe,CAAC,EAAc,EAAE,EAAW,EAAE,CAAqB,EAAE,MAAkB;IAC7F,MAAM,GAAG,GAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,cAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,EAAW,EAAE,CAAqB,EAAE,MAAc,EAAE,UAA6B;IACjG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,kGAAkG;AAElG;;;;GAIG;AACH,SAAgB,IAAI,CAAC,EAAU,EAAE,EAAc,EAAE,MAAkB,EAAE,QAA+B;IAClG,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAElD,gGAAgG;IAChG,MAAM,IAAI,GAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IACzE,OAAO,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;AAeD,4GAA4G;AAC5G,SAAgB,cAAc,CAC5B,EAAc,EACd,SAAqB,EACrB,MAAkB,EAClB,QAA+B;IAE/B,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,CAAU,CAAC;IACf,IAAI,CAAC;QACH,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,oBAAY;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAC9F,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9C,iFAAiF;IACjF,MAAM,GAAG,GAAG,qBAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,qBAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;AACvF,CAAC;AAED,qGAAqG;AACrG,SAAgB,MAAM,CAAC,EAAc,EAAE,SAAqB,EAAE,MAAkB,EAAE,QAA+B;IAC/G,OAAO,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,kGAAkG;AAElG,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,mBAAW,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kGAAkG;AAElG,SAAS,kBAAkB,CACzB,IAAa,EACb,IAAa,EACb,CAAU,EACV,EAAW,EACX,EAAW,EACX,gBAAmC,EACnC,aAAgC,EAChC,MAAc,EACd,EAAc;IAEd,MAAM,GAAG,GAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5I,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAeD,SAAS,aAAa,CAAC,CAAc;IACnC,MAAM,KAAK,GAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACrG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACzH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC5C,OAAO,IAAA,mBAAW,EAAC,GAAG,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB,EAAE,MAAc;IACnD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,SAAC;QAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,KAAK,GAAG,CAAC,GAAG,kBAAkB,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC,gCAAgC;IAChG,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,mBAAmB,KAAK,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,IAAI,mBAAmB,CAAC;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,IAAI,mBAAmB,CAAC;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,IAAI,mBAAmB,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC;IACvD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,IAAI,mBAAmB,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,kGAAkG;AAElG,SAAS,eAAe,CAAC,OAA0B,EAAE,CAAS;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACtH,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAA8B,EAAE,CAAS;IACrE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kGAAkG;AAElG;;;;;;;GAOG;AACH,SAAgB,QAAQ,CACtB,EAAc,EACd,SAAqB,EACrB,MAAkB,EAClB,EAAc,EACd,QAA+B,EAC/B,gBAAmC,EACnC,kBAAsC;IAEtC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5B,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;IAE7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAE9C,MAAM,EAAE,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;IACtG,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACzG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACzC,mGAAmG;QACnG,MAAM,IAAI,UAAU,CAAC,qEAAqE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,4GAA4G;IAC5G,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/F,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1F,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5G,OAAO,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,kGAAkG;AAElG;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,EAAc,EACd,KAAiB,EACjB,MAAkB,EAClB,EAAc,EACd,iBAAwC,EACxC,gBAAmC;IAEnC,IAAI,CAAc,CAAC;IACnB,IAAI,CAAC;QACH,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAClD,CAAC;IACD,IAAI,CAAU,CAAC;IACf,IAAI,CAAC;QACH,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC5E,IAAI,iBAAiB,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAEpH,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACxB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACxC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,GAAG,oBAAY;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAEtE,IAAI,SAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAC9D,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;IAC5D,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAElD,0BAA0B;IAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,iDAAiD;IACjD,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnE,+CAA+C;IAC/C,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,EAAE,GAAG,kBAAkB,CAC3B,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,CAAC,EACH,EAAE,EACF,EAAE,EACF,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAC3B,MAAM,EACN,EAAE,CACH,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAEnE,wCAAwC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,qBAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;QACd,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;AAChD,CAAC;AAED,8GAA8G;AAC9G,SAAgB,WAAW,CACzB,EAAc,EACd,KAAiB,EACjB,MAAkB,EAClB,EAAc,EACd,iBAAwC,EACxC,gBAAmC;IAEnC,OAAO,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;AAC5F,CAAC"}
@@ -13,6 +13,12 @@ const NUL = 0x00;
13
13
  const TEXT = new TextEncoder();
14
14
  /** Deterministic message octets for one attribute: utf8(name) || 0x00 || utf8(value). */
15
15
  function encodeAttribute(name, value) {
16
+ if (typeof name !== 'string' || typeof value !== 'string')
17
+ throw new TypeError('attribute name and value must be strings');
18
+ // A NUL inside the name would let {name:"a\0b", value:"c"} and {name:"a", value:"b\0c"} encode to the
19
+ // same signed octets (the NUL is the only separator).
20
+ if (name.includes('\0'))
21
+ throw new RangeError('attribute name must not contain NUL');
16
22
  const n = TEXT.encode(name);
17
23
  const v = TEXT.encode(value);
18
24
  const out = new Uint8Array(n.length + 1 + v.length);
@@ -65,8 +71,13 @@ function verifyCredential(cred) {
65
71
  catch {
66
72
  return false;
67
73
  }
68
- const messages = cred.attributes.map(encode);
69
- return (0, bbs_1.verify)(pk, signature, header, messages);
74
+ try {
75
+ const messages = cred.attributes.map(encode);
76
+ return (0, bbs_1.verify)(pk, signature, header, messages);
77
+ }
78
+ catch {
79
+ return false; // malformed credential structure: fail closed, never throw from a boolean verifier
80
+ }
70
81
  }
71
82
  /**
72
83
  * presentCredential: produce a selective-disclosure proof revealing only the named attributes.
@@ -132,6 +143,14 @@ function verifyPresentation(pres, opts) {
132
143
  if (opts?.presentationHeader !== undefined && opts.presentationHeader.length > 0 && (0, pca_1.b64u)(ph) !== pres.presentationHeader) {
133
144
  return false;
134
145
  }
146
+ try {
147
+ return verifyPresentationInner(pres, pk, header, proof, ph, opts);
148
+ }
149
+ catch {
150
+ return false; // malformed presentation structure: fail closed
151
+ }
152
+ }
153
+ function verifyPresentationInner(pres, pk, header, proof, ph, opts) {
135
154
  const disclosed = opts?.disclosed ?? pres.disclosed;
136
155
  // When the verifier asserts its own expected disclosure, it must match what the presentation shows.
137
156
  if (opts?.disclosed !== undefined && !sameDisclosure(opts.disclosed, pres.disclosed))
@@ -1 +1 @@
1
- {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../src/credential.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/pca-bbs",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "BBS signatures (CFRG draft) for PCA: issue a capability as a multi-message BBS credential, then present it with selective disclosure + unlinkable zero-knowledge proof-of-possession, so an agent reveals only the attributes a tool needs and uses can't be correlated.",
5
5
  "keywords": [
6
6
  "bbs signatures",
@@ -34,9 +34,10 @@
34
34
  "dependencies": {
35
35
  "@noble/curves": "^1.6.0",
36
36
  "@noble/hashes": "^1.5.0",
37
- "@atlasauth/pca": "0.2.0"
37
+ "@atlasauth/pca": "0.4.0"
38
38
  },
39
39
  "devDependencies": {
40
+ "fast-check": "^3.23.1",
40
41
  "typescript": "^5.6.3",
41
42
  "vitest": "^2.1.4"
42
43
  },