@blamejs/core 0.18.43 → 0.18.44

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.
@@ -1,4 +1,4 @@
1
- // @blamejs/pki v0.5.17 — vendored (Apache-2.0). Zero-dep pure CJS.
1
+ // @blamejs/pki v0.5.23 — vendored (Apache-2.0). Zero-dep pure CJS.
2
2
  // https://github.com/blamejs/pki Exports: x509, crl, pkcs12, key, webcrypto, schema, csr, cms, ...
3
3
  // Backs lib/mtls-engine-default.js (PQC-capable CA + PKCS#12 engine).
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -141,7 +141,7 @@ var require_package = __commonJS({
141
141
  "node_modules/@blamejs/pki/package.json"(exports2, module2) {
142
142
  module2.exports = {
143
143
  name: "@blamejs/pki",
144
- version: "0.5.17",
144
+ version: "0.5.23",
145
145
  description: "Pure-JavaScript PKI toolkit that owns its stack \u2014 X.509, ASN.1/DER, CMS, PQC-first.",
146
146
  license: "Apache-2.0",
147
147
  author: "blamejs contributors",
@@ -713,6 +713,7 @@ var require_guard_intrinsic = __commonJS({
713
713
  var _bufferIsBuffer = Buffer.isBuffer;
714
714
  var _bufferByteLength = Buffer.byteLength;
715
715
  var _bufferCompare = Buffer.compare;
716
+ var _bufferEquals = uncurry(Buffer.prototype.equals);
716
717
  var _isView = ArrayBuffer.isView;
717
718
  var _isInteger = Number.isInteger;
718
719
  var _isSafeInteger = Number.isSafeInteger;
@@ -732,6 +733,8 @@ var require_guard_intrinsic = __commonJS({
732
733
  var _mathFloor = Math.floor;
733
734
  var _mathCeil = Math.ceil;
734
735
  var _mathMin = Math.min;
736
+ var _mathMax = Math.max;
737
+ var _parseInt = parseInt;
735
738
  var _promiseResolve = Promise.resolve;
736
739
  var _promiseReject = Promise.reject;
737
740
  var _arrForEach = uncurry(Array.prototype.forEach);
@@ -744,6 +747,14 @@ var require_guard_intrinsic = __commonJS({
744
747
  var _arrConcat = uncurry(Array.prototype.concat);
745
748
  var _arrSlice = uncurry(Array.prototype.slice);
746
749
  var _arrJoin = uncurry(Array.prototype.join);
750
+ var _arrPush = uncurry(Array.prototype.push);
751
+ var _strToUpperCase = uncurry(String.prototype.toUpperCase);
752
+ var _strToLowerCase = uncurry(String.prototype.toLowerCase);
753
+ var _strIndexOf = uncurry(String.prototype.indexOf);
754
+ var _taSubarray = uncurry(Uint8Array.prototype.subarray);
755
+ var _abSlice = uncurry(ArrayBuffer.prototype.slice);
756
+ var _numToString = uncurry(Number.prototype.toString);
757
+ var _bigIntToString = uncurry(BigInt.prototype.toString);
747
758
  var _setAdd = uncurry(Set.prototype.add);
748
759
  var _setHas = uncurry(Set.prototype.has);
749
760
  var _mapGet = uncurry(Map.prototype.get);
@@ -812,6 +823,7 @@ var require_guard_intrinsic = __commonJS({
812
823
  isBuffer: _bufferIsBuffer,
813
824
  byteLength: _bufferByteLength,
814
825
  compare: _bufferCompare,
826
+ bufferEquals: _bufferEquals,
815
827
  isView: _isView,
816
828
  isInteger: _isInteger,
817
829
  isSafeInteger: _isSafeInteger,
@@ -831,6 +843,16 @@ var require_guard_intrinsic = __commonJS({
831
843
  floor: _mathFloor,
832
844
  ceil: _mathCeil,
833
845
  min: _mathMin,
846
+ max: _mathMax,
847
+ parseInt: _parseInt,
848
+ push: _arrPush,
849
+ toUpperCase: _strToUpperCase,
850
+ toLowerCase: _strToLowerCase,
851
+ stringIndexOf: _strIndexOf,
852
+ subarray: _taSubarray,
853
+ arrayBufferSlice: _abSlice,
854
+ numberToString: _numToString,
855
+ bigIntToString: _bigIntToString,
834
856
  promiseResolve: _promiseResolve,
835
857
  promiseReject: _promiseReject,
836
858
  forEach: _arrForEach,
@@ -2198,13 +2220,52 @@ var require_webcrypto = __commonJS({
2198
2220
  var constants = require_constants();
2199
2221
  var asn1 = require_asn1_der();
2200
2222
  var oid = require_oid();
2223
+ var intrinsic = require_guard_intrinsic();
2224
+ var _isArray = intrinsic.isArray;
2225
+ var _hasOwn = intrinsic.hasOwn;
2226
+ var _stringify = intrinsic.stringify;
2227
+ var _bufferFrom = intrinsic.bufferFrom;
2228
+ var _bufToString = intrinsic.uncurry(Buffer.prototype.toString);
2229
+ var _bufferConcat = intrinsic.bufferConcat;
2230
+ var _bufferAlloc = intrinsic.bufferAlloc;
2231
+ var _isBuffer = intrinsic.isBuffer;
2232
+ var _keys = intrinsic.keys;
2233
+ var _map = intrinsic.map;
2234
+ var _forEach = intrinsic.forEach;
2235
+ var _indexOf = intrinsic.indexOf;
2236
+ var _isInteger = intrinsic.isInteger;
2237
+ var _join = intrinsic.join;
2238
+ var _filter = intrinsic.filter;
2239
+ var _arraySlice = intrinsic.arraySlice;
2240
+ var _defineProperty = intrinsic.defineProperty;
2241
+ var _max = intrinsic.max;
2242
+ var _parseInt = intrinsic.parseInt;
2243
+ var _isFinite = intrinsic.isFinite;
2244
+ var _String = intrinsic.String;
2245
+ var _Number = intrinsic.Number;
2246
+ var _BigInt = intrinsic.BigInt;
2247
+ var _Uint8Array = intrinsic.Uint8Array;
2248
+ var _assign = intrinsic.assign;
2249
+ var _create = intrinsic.create;
2250
+ var _isView = intrinsic.isView;
2251
+ var _toUpperCase = intrinsic.toUpperCase;
2252
+ var _toLowerCase = intrinsic.toLowerCase;
2253
+ var _stringIndexOf = intrinsic.stringIndexOf;
2254
+ var _subarray = intrinsic.subarray;
2255
+ var _arrayBufferSlice = intrinsic.arrayBufferSlice;
2256
+ var _numberToString = intrinsic.numberToString;
2257
+ var _bigIntToString = intrinsic.bigIntToString;
2258
+ var _push = intrinsic.push;
2259
+ var _concat = intrinsic.concat;
2260
+ var _resolve = intrinsic.uncurry(intrinsic.promiseResolve);
2261
+ var _types = intrinsic.types;
2201
2262
  var WebCryptoError = frameworkError.defineClass("WebCryptoError", { withCause: true });
2202
2263
  var MAX_RANDOM_BYTES = 65536;
2203
2264
  function _toBuf(data, who) {
2204
2265
  return guard.bytes.source(data, WebCryptoError, "webcrypto/data", who || "input");
2205
2266
  }
2206
2267
  function _toArrayBuffer(buf) {
2207
- return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
2268
+ return _arrayBufferSlice(buf.buffer, buf.byteOffset, buf.byteOffset + buf.byteLength);
2208
2269
  }
2209
2270
  function _wcErr(code, msg) {
2210
2271
  return new WebCryptoError(code, msg);
@@ -2213,7 +2274,7 @@ var require_webcrypto = __commonJS({
2213
2274
  return guard.encoding.base64url(s, null, _wcErr, "webcrypto/data", who || "base64url value");
2214
2275
  }
2215
2276
  function _bufToB64url(buf) {
2216
- return Buffer.from(buf).toString("base64url");
2277
+ return _bufToString(_bufferFrom(buf), "base64url");
2217
2278
  }
2218
2279
  function _normalizeAlg(algorithm, who) {
2219
2280
  var alg = typeof algorithm === "string" ? { name: algorithm } : algorithm;
@@ -2222,9 +2283,9 @@ var require_webcrypto = __commonJS({
2222
2283
  }
2223
2284
  var out = {};
2224
2285
  for (var k in alg) {
2225
- if (Object.prototype.hasOwnProperty.call(alg, k)) out[k] = alg[k];
2286
+ if (_hasOwn(alg, k)) out[k] = alg[k];
2226
2287
  }
2227
- out.name = alg.name.toUpperCase();
2288
+ out.name = _toUpperCase(alg.name);
2228
2289
  return out;
2229
2290
  }
2230
2291
  var _STD_ALG_NAME = { "RSASSA-PKCS1-V1_5": "RSASSA-PKCS1-v1_5", "ED25519": "Ed25519", "ED448": "Ed448" };
@@ -2247,8 +2308,8 @@ var require_webcrypto = __commonJS({
2247
2308
  };
2248
2309
  function _hashNode(h, who) {
2249
2310
  var name = typeof h === "string" ? h : h && h.name;
2250
- var node = HASH_NODE[String(name).toUpperCase()];
2251
- if (!node) throw new WebCryptoError("webcrypto/not-supported", (who || "operation") + ": unsupported hash " + JSON.stringify(name));
2311
+ var node = HASH_NODE[_toUpperCase(_String(name))];
2312
+ if (!node) throw new WebCryptoError("webcrypto/not-supported", (who || "operation") + ": unsupported hash " + _stringify(name));
2252
2313
  return node;
2253
2314
  }
2254
2315
  var HMAC_BLOCK_BITS = {
@@ -2262,10 +2323,10 @@ var require_webcrypto = __commonJS({
2262
2323
  };
2263
2324
  function _hmacLengthBits(alg, who) {
2264
2325
  var name = typeof alg.hash === "string" ? alg.hash : alg.hash && alg.hash.name;
2265
- var blockBits = HMAC_BLOCK_BITS[String(name).toUpperCase()];
2266
- if (!blockBits) throw new WebCryptoError("webcrypto/not-supported", who + ": unsupported hash " + JSON.stringify(name));
2326
+ var blockBits = HMAC_BLOCK_BITS[_toUpperCase(_String(name))];
2327
+ if (!blockBits) throw new WebCryptoError("webcrypto/not-supported", who + ": unsupported hash " + _stringify(name));
2267
2328
  if (alg.length == null) return blockBits;
2268
- if (typeof alg.length !== "number" || !isFinite(alg.length) || alg.length <= 0 || alg.length % 8 !== 0) {
2329
+ if (typeof alg.length !== "number" || !_isFinite(alg.length) || alg.length <= 0 || alg.length % 8 !== 0) {
2269
2330
  throw new WebCryptoError("webcrypto/syntax", who + ": HMAC length must be a positive multiple of 8 bits");
2270
2331
  }
2271
2332
  return alg.length;
@@ -2289,10 +2350,10 @@ var require_webcrypto = __commonJS({
2289
2350
  "shake-256s",
2290
2351
  "shake-256f"
2291
2352
  ].forEach(function(s) {
2292
- SLH_DSA_NODE["SLH-DSA-" + s.toUpperCase()] = "slh-dsa-" + s;
2353
+ SLH_DSA_NODE["SLH-DSA-" + _toUpperCase(s)] = "slh-dsa-" + s;
2293
2354
  });
2294
2355
  var SIGN_VERIFY_NAMES = {};
2295
- ["RSASSA-PKCS1-V1_5", "RSA-PSS", "ECDSA", "ED25519", "ED448", "HMAC"].concat(Object.keys(ML_DSA_NODE), Object.keys(SLH_DSA_NODE)).forEach(function(n) {
2356
+ ["RSASSA-PKCS1-V1_5", "RSA-PSS", "ECDSA", "ED25519", "ED448", "HMAC"].concat(_keys(ML_DSA_NODE), _keys(SLH_DSA_NODE)).forEach(function(n) {
2296
2357
  SIGN_VERIFY_NAMES[n] = true;
2297
2358
  });
2298
2359
  var ENCRYPT_DECRYPT_NAMES = { "RSA-OAEP": true, "AES-GCM": true, "AES-CBC": true, "AES-CTR": true };
@@ -2302,8 +2363,11 @@ var require_webcrypto = __commonJS({
2302
2363
  this.type = type;
2303
2364
  this.extractable = !!extractable;
2304
2365
  this.algorithm = algorithm;
2305
- this.usages = usages ? usages.slice() : [];
2306
- Object.defineProperty(this, "_handle", { value: handle, enumerable: false });
2366
+ if (usages != null && !_isArray(usages)) {
2367
+ throw new WebCryptoError("webcrypto/syntax", "usages must be an array of key-usage strings");
2368
+ }
2369
+ this.usages = usages ? _arraySlice(usages) : [];
2370
+ _defineProperty(this, "_handle", { value: handle, enumerable: false });
2307
2371
  }
2308
2372
  function _requireOwnKey(key, who) {
2309
2373
  if (key instanceof CryptoKey) return;
@@ -2314,27 +2378,30 @@ var require_webcrypto = __commonJS({
2314
2378
  }
2315
2379
  function _requireUsage(key, usage) {
2316
2380
  _requireOwnKey(key, usage);
2317
- if (key.usages.indexOf(usage) === -1) {
2318
- throw new WebCryptoError("webcrypto/invalid-access", "key is not permitted for '" + usage + "' (usages: " + key.usages.join(",") + ")");
2381
+ if (_indexOf(key.usages, usage) === -1) {
2382
+ throw new WebCryptoError("webcrypto/invalid-access", "key is not permitted for '" + usage + "' (usages: " + _join(key.usages, ",") + ")");
2319
2383
  }
2320
2384
  }
2321
2385
  function _requireAlgMatch(alg, key, who) {
2322
2386
  var keyName = key && key.algorithm && key.algorithm.name;
2323
- if (String(keyName).toUpperCase() !== alg.name) {
2324
- throw new WebCryptoError("webcrypto/invalid-access", who + ": algorithm " + JSON.stringify(alg.name) + " does not match the key's algorithm " + JSON.stringify(keyName));
2387
+ if (_toUpperCase(_String(keyName)) !== alg.name) {
2388
+ throw new WebCryptoError("webcrypto/invalid-access", who + ": algorithm " + _stringify(alg.name) + " does not match the key's algorithm " + _stringify(keyName));
2325
2389
  }
2326
2390
  }
2327
2391
  function SubtleCrypto() {
2328
2392
  }
2329
2393
  SubtleCrypto.prototype.digest = async function digest(algorithm, data) {
2330
2394
  var name = _normalizeAlg(algorithm, "digest").name;
2331
- var xof = XOF_NODE[String(name).toUpperCase()];
2395
+ var xof = XOF_NODE[_toUpperCase(_String(name))];
2332
2396
  var h = xof ? nodeCrypto.createHash(xof.node, { outputLength: xof.length }) : nodeCrypto.createHash(_hashNode(name, "digest"));
2333
2397
  h.update(_toBuf(data, "digest"));
2334
2398
  return _toArrayBuffer(h.digest());
2335
2399
  };
2336
2400
  SubtleCrypto.prototype.generateKey = async function generateKey(algorithm, extractable, keyUsages) {
2337
2401
  var alg = _normalizeAlg(algorithm, "generateKey");
2402
+ if (keyUsages != null && !_isArray(keyUsages)) {
2403
+ throw new WebCryptoError("webcrypto/syntax", "generateKey: keyUsages must be an array of key-usage strings");
2404
+ }
2338
2405
  var usages = keyUsages || [];
2339
2406
  var name = alg.name;
2340
2407
  if (name === "AES-GCM" || name === "AES-CBC" || name === "AES-CTR" || name === "AES-KW") {
@@ -2350,10 +2417,10 @@ var require_webcrypto = __commonJS({
2350
2417
  }
2351
2418
  var pair = _generateKeyPair(alg);
2352
2419
  var pubAlg = pair.algorithm;
2353
- var privUsages = usages.filter(function(u) {
2420
+ var privUsages = _filter(usages, function(u) {
2354
2421
  return u === "sign" || u === "deriveKey" || u === "deriveBits" || u === "decrypt" || u === "unwrapKey" || u === "decapsulateKey" || u === "decapsulateBits";
2355
2422
  });
2356
- var pubUsages = usages.filter(function(u) {
2423
+ var pubUsages = _filter(usages, function(u) {
2357
2424
  return u === "verify" || u === "encrypt" || u === "wrapKey" || u === "encapsulateKey" || u === "encapsulateBits";
2358
2425
  });
2359
2426
  return {
@@ -2372,11 +2439,11 @@ var require_webcrypto = __commonJS({
2372
2439
  algorithm = { name: _stdName(name), modulusLength: alg.modulusLength || 2048, publicExponent: alg.publicExponent, hash: rsaHash };
2373
2440
  } else if (name === "ECDSA" || name === "ECDH") {
2374
2441
  var curve = alg.namedCurve;
2375
- if (!CURVE_NODE[curve]) throw new WebCryptoError("webcrypto/not-supported", name + ": unsupported curve " + JSON.stringify(curve));
2442
+ if (!CURVE_NODE[curve]) throw new WebCryptoError("webcrypto/not-supported", name + ": unsupported curve " + _stringify(curve));
2376
2443
  kp = nodeCrypto.generateKeyPairSync("ec", { namedCurve: CURVE_NODE[curve] });
2377
2444
  algorithm = { name, namedCurve: curve };
2378
2445
  } else if (name === "ED25519" || name === "ED448" || name === "X25519" || name === "X448") {
2379
- kp = nodeCrypto.generateKeyPairSync(name.toLowerCase());
2446
+ kp = nodeCrypto.generateKeyPairSync(_toLowerCase(name));
2380
2447
  algorithm = { name: _stdName(name) };
2381
2448
  } else if (ML_DSA_NODE[name]) {
2382
2449
  kp = nodeCrypto.generateKeyPairSync(ML_DSA_NODE[name]);
@@ -2388,7 +2455,7 @@ var require_webcrypto = __commonJS({
2388
2455
  kp = nodeCrypto.generateKeyPairSync(SLH_DSA_NODE[name]);
2389
2456
  algorithm = { name };
2390
2457
  } else {
2391
- throw new WebCryptoError("webcrypto/not-supported", "generateKey: unsupported algorithm " + JSON.stringify(name));
2458
+ throw new WebCryptoError("webcrypto/not-supported", "generateKey: unsupported algorithm " + _stringify(name));
2392
2459
  }
2393
2460
  return { publicKey: kp.publicKey, privateKey: kp.privateKey, algorithm };
2394
2461
  }
@@ -2409,18 +2476,18 @@ var require_webcrypto = __commonJS({
2409
2476
  if (b.length === 0) {
2410
2477
  throw new WebCryptoError("webcrypto/syntax", "publicExponent must be a non-empty BigInteger octet string");
2411
2478
  }
2412
- var v = BigInt("0x" + b.toString("hex"));
2479
+ var v = _BigInt("0x" + _bufToString(b, "hex"));
2413
2480
  if (v > 0xffffffffn) {
2414
- throw new WebCryptoError("webcrypto/syntax", "publicExponent " + v.toString() + " exceeds the 2^32-1 bound");
2481
+ throw new WebCryptoError("webcrypto/syntax", "publicExponent " + _bigIntToString(v) + " exceeds the 2^32-1 bound");
2415
2482
  }
2416
- return Number(v);
2483
+ return _Number(v);
2417
2484
  }
2418
2485
  SubtleCrypto.prototype.sign = async function sign(algorithm, key, data) {
2419
2486
  var alg = _normalizeAlg(algorithm, "sign");
2420
2487
  _requireUsage(key, "sign");
2421
2488
  var buf = _toBuf(data, "sign");
2422
2489
  var name = alg.name;
2423
- if (!SIGN_VERIFY_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "sign: unsupported algorithm " + JSON.stringify(name));
2490
+ if (!SIGN_VERIFY_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "sign: unsupported algorithm " + _stringify(name));
2424
2491
  _requireAlgMatch(alg, key, "sign");
2425
2492
  if (name === "RSASSA-PKCS1-V1_5") {
2426
2493
  return _toArrayBuffer(nodeCrypto.sign(_hashNode(key.algorithm.hash, "sign"), buf, key._handle));
@@ -2446,7 +2513,7 @@ var require_webcrypto = __commonJS({
2446
2513
  hm.update(buf);
2447
2514
  return _toArrayBuffer(hm.digest());
2448
2515
  }
2449
- throw new WebCryptoError("webcrypto/not-supported", "sign: unsupported algorithm " + JSON.stringify(name));
2516
+ throw new WebCryptoError("webcrypto/not-supported", "sign: unsupported algorithm " + _stringify(name));
2450
2517
  };
2451
2518
  SubtleCrypto.prototype.verify = async function verify(algorithm, key, signature, data) {
2452
2519
  var alg = _normalizeAlg(algorithm, "verify");
@@ -2454,7 +2521,7 @@ var require_webcrypto = __commonJS({
2454
2521
  var sig = _toBuf(signature, "verify");
2455
2522
  var buf = _toBuf(data, "verify");
2456
2523
  var name = alg.name;
2457
- if (!SIGN_VERIFY_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "verify: unsupported algorithm " + JSON.stringify(name));
2524
+ if (!SIGN_VERIFY_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "verify: unsupported algorithm " + _stringify(name));
2458
2525
  _requireAlgMatch(alg, key, "verify");
2459
2526
  if (name === "RSASSA-PKCS1-V1_5") {
2460
2527
  return nodeCrypto.verify(_hashNode(key.algorithm.hash, "verify"), buf, key._handle, sig);
@@ -2481,7 +2548,7 @@ var require_webcrypto = __commonJS({
2481
2548
  var digest = hm.digest();
2482
2549
  return guard.crypto.constantTimeEqual(digest, sig);
2483
2550
  }
2484
- throw new WebCryptoError("webcrypto/not-supported", "verify: unsupported algorithm " + JSON.stringify(name));
2551
+ throw new WebCryptoError("webcrypto/not-supported", "verify: unsupported algorithm " + _stringify(name));
2485
2552
  };
2486
2553
  function _runCipher(fn, who) {
2487
2554
  try {
@@ -2495,7 +2562,7 @@ var require_webcrypto = __commonJS({
2495
2562
  _requireUsage(key, "encrypt");
2496
2563
  var buf = _toBuf(data, "encrypt");
2497
2564
  var name = alg.name;
2498
- if (!ENCRYPT_DECRYPT_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "encrypt: unsupported algorithm " + JSON.stringify(name));
2565
+ if (!ENCRYPT_DECRYPT_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "encrypt: unsupported algorithm " + _stringify(name));
2499
2566
  _requireAlgMatch(alg, key, "encrypt");
2500
2567
  if (name === "RSA-OAEP") {
2501
2568
  return _toArrayBuffer(nodeCrypto.publicEncrypt({
@@ -2513,7 +2580,7 @@ var require_webcrypto = __commonJS({
2513
2580
  var cipher = nodeCrypto.createCipheriv("aes-" + key.algorithm.length + "-gcm", kb, iv, { authTagLength: (alg.tagLength || 128) / 8 });
2514
2581
  if (aad) cipher.setAAD(aad);
2515
2582
  var ct = guard.secret.cipherFinish(cipher, buf, WebCryptoError, "webcrypto/operation", "an AES-GCM encrypt intermediate");
2516
- return Buffer.concat([ct, cipher.getAuthTag()]);
2583
+ return _bufferConcat([ct, cipher.getAuthTag()]);
2517
2584
  });
2518
2585
  }, "encrypt"));
2519
2586
  }
@@ -2536,14 +2603,14 @@ var require_webcrypto = __commonJS({
2536
2603
  });
2537
2604
  }, "encrypt"));
2538
2605
  }
2539
- throw new WebCryptoError("webcrypto/not-supported", "encrypt: unsupported algorithm " + JSON.stringify(name));
2606
+ throw new WebCryptoError("webcrypto/not-supported", "encrypt: unsupported algorithm " + _stringify(name));
2540
2607
  };
2541
2608
  SubtleCrypto.prototype.decrypt = async function decrypt(algorithm, key, data) {
2542
2609
  var alg = _normalizeAlg(algorithm, "decrypt");
2543
2610
  _requireUsage(key, "decrypt");
2544
2611
  var buf = _toBuf(data, "decrypt");
2545
2612
  var name = alg.name;
2546
- if (!ENCRYPT_DECRYPT_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "decrypt: unsupported algorithm " + JSON.stringify(name));
2613
+ if (!ENCRYPT_DECRYPT_NAMES[name]) throw new WebCryptoError("webcrypto/not-supported", "decrypt: unsupported algorithm " + _stringify(name));
2547
2614
  _requireAlgMatch(alg, key, "decrypt");
2548
2615
  if (name === "RSA-OAEP") {
2549
2616
  var oaepOut = nodeCrypto.privateDecrypt({
@@ -2562,8 +2629,8 @@ var require_webcrypto = __commonJS({
2562
2629
  var tagLen = (alg.tagLength || 128) / 8;
2563
2630
  var iv = _toBuf(alg.iv, "AES-GCM iv");
2564
2631
  if (buf.length < tagLen) throw new WebCryptoError("webcrypto/operation", "decrypt: AES-GCM ciphertext is shorter than its authentication tag");
2565
- var ct = buf.subarray(0, buf.length - tagLen);
2566
- var tag = buf.subarray(buf.length - tagLen);
2632
+ var ct = _subarray(buf, 0, buf.length - tagLen);
2633
+ var tag = _subarray(buf, buf.length - tagLen);
2567
2634
  var gcmAad = alg.additionalData ? _toBuf(alg.additionalData, "AES-GCM aad") : null;
2568
2635
  return _toArrayBuffer(_runCipher(function() {
2569
2636
  return _withSecretBytes(key, function(kb) {
@@ -2593,7 +2660,7 @@ var require_webcrypto = __commonJS({
2593
2660
  });
2594
2661
  }, "decrypt"));
2595
2662
  }
2596
- throw new WebCryptoError("webcrypto/not-supported", "decrypt: unsupported algorithm " + JSON.stringify(name));
2663
+ throw new WebCryptoError("webcrypto/not-supported", "decrypt: unsupported algorithm " + _stringify(name));
2597
2664
  };
2598
2665
  function _withSecretBytes(key, fn) {
2599
2666
  var kb = key._handle.export();
@@ -2624,11 +2691,11 @@ var require_webcrypto = __commonJS({
2624
2691
  }
2625
2692
  }
2626
2693
  function _requireDeriveLength(length, who) {
2627
- if (typeof length !== "number" || !isFinite(length) || length <= 0 || length % 8 !== 0) {
2694
+ if (typeof length !== "number" || !_isFinite(length) || length <= 0 || length % 8 !== 0) {
2628
2695
  throw new WebCryptoError("webcrypto/operation", who + ": length must be a positive multiple of 8 bits");
2629
2696
  }
2630
2697
  }
2631
- var _PBKDF2_MAX_CONCURRENT = Math.max(1, (parseInt(process.env.UV_THREADPOOL_SIZE, 10) || 4) - 2);
2698
+ var _PBKDF2_MAX_CONCURRENT = _max(1, (_parseInt(process.env.UV_THREADPOOL_SIZE, 10) || 4) - 2);
2632
2699
  var _pbkdf2InFlight = 0;
2633
2700
  var _pbkdf2Waiters = [];
2634
2701
  function _pbkdf2Async(pw, salt, iterations, keylen, digest) {
@@ -2664,7 +2731,7 @@ var require_webcrypto = __commonJS({
2664
2731
  if (length / 8 > secret.length) {
2665
2732
  throw new WebCryptoError("webcrypto/operation", name + ": requested " + length + " bits but the shared secret has " + secret.length * 8);
2666
2733
  }
2667
- return _toArrayBuffer(secret.subarray(0, length / 8));
2734
+ return _toArrayBuffer(_subarray(secret, 0, length / 8));
2668
2735
  } finally {
2669
2736
  guard.secret.zeroize(secret, WebCryptoError, "webcrypto/operation", "the raw key-agreement shared secret");
2670
2737
  }
@@ -2672,8 +2739,8 @@ var require_webcrypto = __commonJS({
2672
2739
  if (name === "HKDF") {
2673
2740
  _requireDeriveLength(length, "HKDF");
2674
2741
  return _withSecretBytes(key, function(ikm) {
2675
- var derived = nodeCrypto.hkdfSync(_hashNode(alg.hash, "HKDF"), ikm, _toBuf(alg.salt, "HKDF salt"), _toBuf(alg.info || Buffer.alloc(0), "HKDF info"), length / 8);
2676
- return derived instanceof ArrayBuffer ? derived : _toArrayBuffer(Buffer.from(derived));
2742
+ var derived = nodeCrypto.hkdfSync(_hashNode(alg.hash, "HKDF"), ikm, _toBuf(alg.salt, "HKDF salt"), _toBuf(alg.info || _bufferAlloc(0), "HKDF info"), length / 8);
2743
+ return derived instanceof ArrayBuffer ? derived : _toArrayBuffer(_bufferFrom(derived));
2677
2744
  });
2678
2745
  }
2679
2746
  if (name === "PBKDF2") {
@@ -2691,7 +2758,7 @@ var require_webcrypto = __commonJS({
2691
2758
  if (name === "X963KDF") {
2692
2759
  _requireDeriveLength(length, "X963KDF");
2693
2760
  return _withSecretBytes(key, function(z) {
2694
- var derived = _x963Kdf(_hashNode(alg.hash, "X963KDF"), z, _toBuf(alg.info || Buffer.alloc(0), "X963KDF SharedInfo"), length / 8);
2761
+ var derived = _x963Kdf(_hashNode(alg.hash, "X963KDF"), z, _toBuf(alg.info || _bufferAlloc(0), "X963KDF SharedInfo"), length / 8);
2695
2762
  try {
2696
2763
  return _toArrayBuffer(derived);
2697
2764
  } finally {
@@ -2699,21 +2766,21 @@ var require_webcrypto = __commonJS({
2699
2766
  }
2700
2767
  });
2701
2768
  }
2702
- throw new WebCryptoError("webcrypto/not-supported", "deriveBits: unsupported algorithm " + JSON.stringify(name));
2769
+ throw new WebCryptoError("webcrypto/not-supported", "deriveBits: unsupported algorithm " + _stringify(name));
2703
2770
  }
2704
2771
  function _x963Kdf(hashNode, z, sharedInfo, lenBytes) {
2705
2772
  var blocks = [], counter = 1, got = 0;
2706
2773
  while (got < lenBytes) {
2707
2774
  if (counter > 4294967295) throw new WebCryptoError("webcrypto/operation", "X963KDF: requested output exceeds the counter range");
2708
- var ctr = Buffer.alloc(4);
2775
+ var ctr = _bufferAlloc(4);
2709
2776
  ctr.writeUInt32BE(counter, 0);
2710
2777
  var h = nodeCrypto.createHash(hashNode).update(z).update(ctr).update(sharedInfo).digest();
2711
- blocks.push(h);
2778
+ _push(blocks, h);
2712
2779
  got += h.length;
2713
2780
  counter += 1;
2714
2781
  }
2715
- var joined = Buffer.concat(blocks);
2716
- var exact = Buffer.alloc(lenBytes);
2782
+ var joined = _bufferConcat(blocks);
2783
+ var exact = _bufferAlloc(lenBytes);
2717
2784
  joined.copy(exact, 0, 0, lenBytes);
2718
2785
  guard.secret.zeroize(joined, WebCryptoError, "webcrypto/operation", "the KDF accumulator");
2719
2786
  for (var bi = 0; bi < blocks.length; bi++) guard.secret.zeroize(blocks[bi], WebCryptoError, "webcrypto/operation", "a KDF block");
@@ -2722,18 +2789,18 @@ var require_webcrypto = __commonJS({
2722
2789
  SubtleCrypto.prototype.deriveBits = async function deriveBits(algorithm, key, length) {
2723
2790
  var alg = _normalizeAlg(algorithm, "deriveBits");
2724
2791
  _requireUsage(key, "deriveBits");
2725
- if (!DERIVE_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "deriveBits: unsupported algorithm " + JSON.stringify(alg.name));
2792
+ if (!DERIVE_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "deriveBits: unsupported algorithm " + _stringify(alg.name));
2726
2793
  _requireAlgMatch(alg, key, "deriveBits");
2727
2794
  return _deriveBitsRaw(alg, key, length);
2728
2795
  };
2729
2796
  SubtleCrypto.prototype.deriveKey = async function deriveKey(algorithm, baseKey, derivedKeyType, extractable, keyUsages) {
2730
2797
  _requireUsage(baseKey, "deriveKey");
2731
2798
  var alg = _normalizeAlg(algorithm, "deriveKey");
2732
- if (!DERIVE_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "deriveKey: unsupported algorithm " + JSON.stringify(alg.name));
2799
+ if (!DERIVE_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "deriveKey: unsupported algorithm " + _stringify(alg.name));
2733
2800
  _requireAlgMatch(alg, baseKey, "deriveKey");
2734
2801
  var dk = _normalizeAlg(derivedKeyType, "deriveKey");
2735
2802
  var bits;
2736
- if (dk.name.indexOf("AES") === 0) {
2803
+ if (_stringIndexOf(dk.name, "AES") === 0) {
2737
2804
  if (dk.length !== 128 && dk.length !== 192 && dk.length !== 256) {
2738
2805
  throw new WebCryptoError("webcrypto/syntax", "deriveKey: " + dk.name + " length must be 128/192/256");
2739
2806
  }
@@ -2747,15 +2814,15 @@ var require_webcrypto = __commonJS({
2747
2814
  try {
2748
2815
  return await this.importKey("raw", raw, dk, extractable, keyUsages);
2749
2816
  } finally {
2750
- guard.secret.zeroize(new Uint8Array(raw), WebCryptoError, "webcrypto/operation", "the derived key material");
2817
+ guard.secret.zeroize(new _Uint8Array(raw), WebCryptoError, "webcrypto/operation", "the derived key material");
2751
2818
  }
2752
2819
  };
2753
2820
  SubtleCrypto.prototype.encapsulateBits = async function encapsulateBits(algorithm, encapsulationKey) {
2754
2821
  var alg = _normalizeAlg(algorithm, "encapsulateBits");
2755
2822
  _requireUsage(encapsulationKey, "encapsulateBits");
2756
- if (!ML_KEM_NODE[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "encapsulateBits: unsupported algorithm " + JSON.stringify(alg.name));
2823
+ if (!ML_KEM_NODE[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "encapsulateBits: unsupported algorithm " + _stringify(alg.name));
2757
2824
  _requireAlgMatch(alg, encapsulationKey, "encapsulateBits");
2758
- if (encapsulationKey.type !== "public") throw new WebCryptoError("webcrypto/invalid-access", "encapsulateBits requires a public (encapsulation) key, got " + JSON.stringify(encapsulationKey.type));
2825
+ if (encapsulationKey.type !== "public") throw new WebCryptoError("webcrypto/invalid-access", "encapsulateBits requires a public (encapsulation) key, got " + _stringify(encapsulationKey.type));
2759
2826
  var r;
2760
2827
  try {
2761
2828
  r = nodeCrypto.encapsulate(encapsulationKey._handle);
@@ -2771,9 +2838,9 @@ var require_webcrypto = __commonJS({
2771
2838
  SubtleCrypto.prototype.decapsulateBits = async function decapsulateBits(algorithm, decapsulationKey, ciphertext) {
2772
2839
  var alg = _normalizeAlg(algorithm, "decapsulateBits");
2773
2840
  _requireUsage(decapsulationKey, "decapsulateBits");
2774
- if (!ML_KEM_NODE[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "decapsulateBits: unsupported algorithm " + JSON.stringify(alg.name));
2841
+ if (!ML_KEM_NODE[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "decapsulateBits: unsupported algorithm " + _stringify(alg.name));
2775
2842
  _requireAlgMatch(alg, decapsulationKey, "decapsulateBits");
2776
- if (decapsulationKey.type !== "private") throw new WebCryptoError("webcrypto/invalid-access", "decapsulateBits requires a private (decapsulation) key, got " + JSON.stringify(decapsulationKey.type));
2843
+ if (decapsulationKey.type !== "private") throw new WebCryptoError("webcrypto/invalid-access", "decapsulateBits requires a private (decapsulation) key, got " + _stringify(decapsulationKey.type));
2777
2844
  var ct = _toBuf(ciphertext, "decapsulateBits ciphertext");
2778
2845
  var kemRow = oid.kemParams("id-" + ML_KEM_NODE[alg.name]);
2779
2846
  if (kemRow && ct.length !== kemRow.ct) {
@@ -2796,19 +2863,19 @@ var require_webcrypto = __commonJS({
2796
2863
  };
2797
2864
  SubtleCrypto.prototype.wrapKey = async function wrapKey(format, key, wrappingKey, wrapAlgorithm) {
2798
2865
  var exported = await this.exportKey(format, key);
2799
- var bytes = format === "jwk" ? Buffer.from(JSON.stringify(exported)) : Buffer.from(exported);
2866
+ var bytes = format === "jwk" ? _bufferFrom(_stringify(exported)) : _bufferFrom(exported);
2800
2867
  try {
2801
2868
  var alg = _normalizeAlg(wrapAlgorithm, "wrapKey");
2802
2869
  _requireUsage(wrappingKey, "wrapKey");
2803
- if (alg.name !== "AES-KW" && !ENCRYPT_DECRYPT_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "wrapKey: unsupported algorithm " + JSON.stringify(alg.name));
2870
+ if (alg.name !== "AES-KW" && !ENCRYPT_DECRYPT_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "wrapKey: unsupported algorithm " + _stringify(alg.name));
2804
2871
  _requireAlgMatch(alg, wrappingKey, "wrapKey");
2805
2872
  if (alg.name === "AES-KW") {
2806
2873
  if (bytes.length < 16 || bytes.length % 8 !== 0) {
2807
- throw new WebCryptoError("webcrypto/operation", "wrapKey: AES-KW requires the serialized key be a multiple of 8 bytes (>= 16); got " + bytes.length + " -- format " + JSON.stringify(format) + " is not AES-KW-wrappable");
2874
+ throw new WebCryptoError("webcrypto/operation", "wrapKey: AES-KW requires the serialized key be a multiple of 8 bytes (>= 16); got " + bytes.length + " -- format " + _stringify(format) + " is not AES-KW-wrappable");
2808
2875
  }
2809
2876
  try {
2810
2877
  return _withSecretBytes(wrappingKey, function(wkBytes) {
2811
- var c = nodeCrypto.createCipheriv("aes" + wrappingKey.algorithm.length + "-wrap", wkBytes, Buffer.from("A6A6A6A6A6A6A6A6", "hex"));
2878
+ var c = nodeCrypto.createCipheriv("aes" + wrappingKey.algorithm.length + "-wrap", wkBytes, _bufferFrom("A6A6A6A6A6A6A6A6", "hex"));
2812
2879
  return _toArrayBuffer(guard.secret.cipherFinish(c, bytes, WebCryptoError, "webcrypto/operation", "an AES-KW wrap intermediate"));
2813
2880
  });
2814
2881
  } catch (e) {
@@ -2824,7 +2891,7 @@ var require_webcrypto = __commonJS({
2824
2891
  SubtleCrypto.prototype.unwrapKey = async function unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages) {
2825
2892
  var alg = _normalizeAlg(unwrapAlgorithm, "unwrapKey");
2826
2893
  _requireUsage(unwrappingKey, "unwrapKey");
2827
- if (alg.name !== "AES-KW" && !ENCRYPT_DECRYPT_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "unwrapKey: unsupported algorithm " + JSON.stringify(alg.name));
2894
+ if (alg.name !== "AES-KW" && !ENCRYPT_DECRYPT_NAMES[alg.name]) throw new WebCryptoError("webcrypto/not-supported", "unwrapKey: unsupported algorithm " + _stringify(alg.name));
2828
2895
  _requireAlgMatch(alg, unwrappingKey, "unwrapKey");
2829
2896
  var bytes;
2830
2897
  if (alg.name === "AES-KW") {
@@ -2834,7 +2901,7 @@ var require_webcrypto = __commonJS({
2834
2901
  }
2835
2902
  try {
2836
2903
  bytes = _withSecretBytes(unwrappingKey, function(kwBytes) {
2837
- var d = nodeCrypto.createDecipheriv("aes" + unwrappingKey.algorithm.length + "-wrap", kwBytes, Buffer.from("A6A6A6A6A6A6A6A6", "hex"));
2904
+ var d = nodeCrypto.createDecipheriv("aes" + unwrappingKey.algorithm.length + "-wrap", kwBytes, _bufferFrom("A6A6A6A6A6A6A6A6", "hex"));
2838
2905
  return guard.secret.cipherFinish(d, wrapped, WebCryptoError, "webcrypto/operation", "the unwrapped key material");
2839
2906
  });
2840
2907
  } catch (e) {
@@ -2842,7 +2909,7 @@ var require_webcrypto = __commonJS({
2842
2909
  }
2843
2910
  } else {
2844
2911
  var unwrapKeyClone = _cloneWithUsage(unwrappingKey, "decrypt");
2845
- bytes = Buffer.from(await this.decrypt(unwrapAlgorithm, unwrapKeyClone, wrappedKey));
2912
+ bytes = _bufferFrom(await this.decrypt(unwrapAlgorithm, unwrapKeyClone, wrappedKey));
2846
2913
  }
2847
2914
  var keyData;
2848
2915
  if (format === "jwk") {
@@ -2866,7 +2933,7 @@ var require_webcrypto = __commonJS({
2866
2933
  }
2867
2934
  };
2868
2935
  function _cloneWithUsage(key, usage) {
2869
- var k = new CryptoKey(key.type, key.extractable, key.algorithm, key.usages.concat([usage]), key._handle);
2936
+ var k = new CryptoKey(key.type, key.extractable, key.algorithm, _concat(key.usages, [usage]), key._handle);
2870
2937
  return k;
2871
2938
  }
2872
2939
  function _assertAesImportLen(name, byteLen) {
@@ -2915,7 +2982,7 @@ var require_webcrypto = __commonJS({
2915
2982
  throw new WebCryptoError("webcrypto/data", "an ML-KEM private key must be the seed, expandedKey, or both CHOICE (RFC 9935 sec. 6)");
2916
2983
  }
2917
2984
  var PKCS8_INNER_VALIDATORS = {};
2918
- Object.keys(ML_KEM_INNER).forEach(function(o) {
2985
+ _forEach(_keys(ML_KEM_INNER), function(o) {
2919
2986
  PKCS8_INNER_VALIDATORS[o] = function(inner) {
2920
2987
  _validateMlKemInner(inner, ML_KEM_INNER[o]);
2921
2988
  };
@@ -2968,7 +3035,7 @@ var require_webcrypto = __commonJS({
2968
3035
  }
2969
3036
  if (format === "jwk") {
2970
3037
  var jwk = keyData;
2971
- if (jwk === null || typeof jwk !== "object" || Array.isArray(jwk)) {
3038
+ if (jwk === null || typeof jwk !== "object" || _isArray(jwk)) {
2972
3039
  throw new WebCryptoError("webcrypto/data", "importKey jwk: keyData must be a JsonWebKey object");
2973
3040
  }
2974
3041
  if (jwk.kty === "oct") {
@@ -2978,13 +3045,13 @@ var require_webcrypto = __commonJS({
2978
3045
  var a2 = name === "HMAC" ? { name, hash: _hashObj(alg.hash, "importKey jwk HMAC"), length: kbuf.length * 8 } : { name, length: kbuf.length * 8 };
2979
3046
  return new CryptoKey("secret", extractable, a2, usages, s2);
2980
3047
  }
2981
- var isPrivate = Object.prototype.hasOwnProperty.call(jwk, "d") || jwk.kty === "AKP" && Object.prototype.hasOwnProperty.call(jwk, "priv");
3048
+ var isPrivate = _hasOwn(jwk, "d") || jwk.kty === "AKP" && _hasOwn(jwk, "priv");
2982
3049
  var ko = _nodeKey(function() {
2983
3050
  return isPrivate ? nodeCrypto.createPrivateKey({ key: jwk, format: "jwk" }) : nodeCrypto.createPublicKey({ key: jwk, format: "jwk" });
2984
3051
  }, "importKey jwk");
2985
3052
  return new CryptoKey(isPrivate ? "private" : "public", isPrivate ? extractable : true, _algFromImport(name, alg, ko), usages, ko);
2986
3053
  }
2987
- throw new WebCryptoError("webcrypto/not-supported", "importKey: unsupported format " + JSON.stringify(format));
3054
+ throw new WebCryptoError("webcrypto/not-supported", "importKey: unsupported format " + _stringify(format));
2988
3055
  };
2989
3056
  function _importRawPublic(name, alg, raw, extractable, usages) {
2990
3057
  if (name === "ED25519" || name === "ED448" || name === "X25519" || name === "X448") {
@@ -2995,11 +3062,11 @@ var require_webcrypto = __commonJS({
2995
3062
  if (name === "ECDSA" || name === "ECDH") {
2996
3063
  var fb = CURVE_FIELD_BYTES[alg.namedCurve];
2997
3064
  if (!fb || raw[0] !== 4 || raw.length !== 1 + 2 * fb) throw new WebCryptoError("webcrypto/data", "importKey raw EC: expected an uncompressed point for " + alg.namedCurve);
2998
- var ecjwk = { kty: "EC", crv: alg.namedCurve, x: _bufToB64url(raw.subarray(1, 1 + fb)), y: _bufToB64url(raw.subarray(1 + fb)) };
3065
+ var ecjwk = { kty: "EC", crv: alg.namedCurve, x: _bufToB64url(_subarray(raw, 1, 1 + fb)), y: _bufToB64url(_subarray(raw, 1 + fb)) };
2999
3066
  var eck = nodeCrypto.createPublicKey({ key: ecjwk, format: "jwk" });
3000
3067
  return new CryptoKey("public", true, { name, namedCurve: alg.namedCurve }, usages, eck);
3001
3068
  }
3002
- throw new WebCryptoError("webcrypto/not-supported", "importKey raw: unsupported public-key algorithm " + JSON.stringify(name));
3069
+ throw new WebCryptoError("webcrypto/not-supported", "importKey raw: unsupported public-key algorithm " + _stringify(name));
3003
3070
  }
3004
3071
  var IMPORT_KEY_TYPE = {
3005
3072
  "RSASSA-PKCS1-V1_5": { rsa: 1 },
@@ -3013,7 +3080,7 @@ var require_webcrypto = __commonJS({
3013
3080
  "X448": { x448: 1 }
3014
3081
  };
3015
3082
  [ML_DSA_NODE, ML_KEM_NODE, SLH_DSA_NODE].forEach(function(m) {
3016
- Object.keys(m).forEach(function(webName) {
3083
+ _forEach(_keys(m), function(webName) {
3017
3084
  var t = {};
3018
3085
  t[m[webName]] = 1;
3019
3086
  IMPORT_KEY_TYPE[webName] = t;
@@ -3030,7 +3097,7 @@ var require_webcrypto = __commonJS({
3030
3097
  throw new WebCryptoError("webcrypto/not-supported", name + ": imported key uses an unsupported EC curve");
3031
3098
  }
3032
3099
  if (alg.namedCurve && alg.namedCurve !== actualCurve) {
3033
- throw new WebCryptoError("webcrypto/data", name + ": importKey namedCurve " + JSON.stringify(alg.namedCurve) + " does not match the imported key's curve " + JSON.stringify(actualCurve));
3100
+ throw new WebCryptoError("webcrypto/data", name + ": importKey namedCurve " + _stringify(alg.namedCurve) + " does not match the imported key's curve " + _stringify(actualCurve));
3034
3101
  }
3035
3102
  return { name, namedCurve: actualCurve };
3036
3103
  }
@@ -3069,19 +3136,19 @@ var require_webcrypto = __commonJS({
3069
3136
  }
3070
3137
  return _toArrayBuffer(_rawPublic(key));
3071
3138
  }
3072
- throw new WebCryptoError("webcrypto/not-supported", "exportKey: unsupported format " + JSON.stringify(format));
3139
+ throw new WebCryptoError("webcrypto/not-supported", "exportKey: unsupported format " + _stringify(format));
3073
3140
  };
3074
3141
  function _rawPublic(key) {
3075
3142
  var jwk = key._handle.export({ format: "jwk" });
3076
3143
  if (jwk.kty === "OKP") return _b64urlToBuf(jwk.x);
3077
- if (jwk.kty === "EC") return Buffer.concat([Buffer.from([4]), _b64urlToBuf(jwk.x), _b64urlToBuf(jwk.y)]);
3144
+ if (jwk.kty === "EC") return _bufferConcat([_bufferFrom([4]), _b64urlToBuf(jwk.x), _b64urlToBuf(jwk.y)]);
3078
3145
  throw new WebCryptoError("webcrypto/not-supported", "exportKey raw: unsupported key type " + jwk.kty);
3079
3146
  }
3080
3147
  function Crypto() {
3081
3148
  this.subtle = new SubtleCrypto();
3082
3149
  }
3083
3150
  Crypto.prototype.getRandomValues = function getRandomValues(typedArray) {
3084
- if (!ArrayBuffer.isView(typedArray) || typedArray instanceof Float32Array || typedArray instanceof Float64Array || typedArray instanceof DataView) {
3151
+ if (!_isView(typedArray) || _types.isFloat32Array(typedArray) || _types.isFloat64Array(typedArray) || _types.isDataView(typedArray)) {
3085
3152
  throw new WebCryptoError("webcrypto/data", "getRandomValues: expected an integer TypedArray");
3086
3153
  }
3087
3154
  var out = guard.bytes.outputView(typedArray, WebCryptoError, "webcrypto/data", "getRandomValues");
@@ -3104,18 +3171,18 @@ var require_webcrypto = __commonJS({
3104
3171
  }
3105
3172
  }
3106
3173
  var _crypto = new Crypto();
3107
- var _EXPORT_FORMAT = Object.assign(/* @__PURE__ */ Object.create(null), { "private": "pkcs8", "public": "spki", "secret": "raw" });
3174
+ var _EXPORT_FORMAT = _assign(_create(null), { "private": "pkcs8", "public": "spki", "secret": "raw" });
3108
3175
  function isCryptoKeyLike(x) {
3109
- return !!x && typeof x === "object" && typeof x.type === "string" && typeof x.extractable === "boolean" && !!x.algorithm && typeof x.algorithm === "object" && typeof x.algorithm.name === "string" && Array.isArray(x.usages);
3176
+ return !!x && typeof x === "object" && typeof x.type === "string" && typeof x.extractable === "boolean" && !!x.algorithm && typeof x.algorithm === "object" && typeof x.algorithm.name === "string" && _isArray(x.usages);
3110
3177
  }
3111
3178
  function exportAnyKey(key, E, code) {
3112
3179
  var format = _EXPORT_FORMAT[key && key.type];
3113
3180
  if (!format) throw E(code, "a CryptoKey with a private, public, or secret type is required");
3114
3181
  if (key instanceof CryptoKey) {
3115
- return Promise.resolve().then(function() {
3182
+ return _resolve(Promise).then(function() {
3116
3183
  return _crypto.subtle.exportKey(format, key);
3117
3184
  }).then(function(b) {
3118
- return Buffer.from(b);
3185
+ return _bufferFrom(b);
3119
3186
  });
3120
3187
  }
3121
3188
  if (!key.extractable) {
@@ -3123,31 +3190,31 @@ var require_webcrypto = __commonJS({
3123
3190
  }
3124
3191
  var handle = key._handle;
3125
3192
  if (handle instanceof nodeCrypto.KeyObject && handle.type === key.type) {
3126
- return Promise.resolve().then(function() {
3193
+ return _resolve(Promise).then(function() {
3127
3194
  return format === "raw" ? handle.export() : handle.export({ format: "der", type: format });
3128
3195
  }).then(function(b) {
3129
- return Buffer.from(b);
3196
+ return _bufferFrom(b);
3130
3197
  }, function(e) {
3131
3198
  throw E(code, "the CryptoKey comes from a different copy of this WebCrypto engine and its key material could not be read; import it through pki.webcrypto.subtle, or pass the key as DER", e);
3132
3199
  });
3133
3200
  }
3134
- return Promise.resolve().then(function() {
3201
+ return _resolve(Promise).then(function() {
3135
3202
  return nodeCrypto.webcrypto.subtle.exportKey(format, key);
3136
3203
  }).then(function(b) {
3137
- return Buffer.from(b);
3204
+ return _bufferFrom(b);
3138
3205
  }, function(e) {
3139
3206
  throw E(code, "the CryptoKey comes from a different WebCrypto implementation and could not be exported for re-import; import it through pki.webcrypto.subtle, or pass the key as DER", e);
3140
3207
  });
3141
3208
  }
3142
3209
  function adoptKey(key, importParams, usages, E, code) {
3143
- if (key instanceof CryptoKey) return Promise.resolve(key);
3144
- if (!Array.isArray(key.usages)) throw E(code, "a CryptoKey carrying its permitted usages is required");
3210
+ if (key instanceof CryptoKey) return _resolve(Promise, key);
3211
+ if (!_isArray(key.usages)) throw E(code, "a CryptoKey carrying its permitted usages is required");
3145
3212
  for (var i = 0; i < usages.length; i++) {
3146
- if (key.usages.indexOf(usages[i]) === -1) {
3147
- throw E(code, "the CryptoKey is not permitted for '" + usages[i] + "' (usages: " + key.usages.join(",") + ")");
3213
+ if (_indexOf(key.usages, usages[i]) === -1) {
3214
+ throw E(code, "the CryptoKey is not permitted for '" + usages[i] + "' (usages: " + _join(key.usages, ",") + ")");
3148
3215
  }
3149
3216
  }
3150
- return Promise.resolve().then(function() {
3217
+ return _resolve(Promise).then(function() {
3151
3218
  return exportAnyKey(key, E, code);
3152
3219
  }).then(function(der) {
3153
3220
  return _crypto.subtle.importKey(_EXPORT_FORMAT[key.type], der, importParams || key.algorithm, false, usages);
@@ -4012,6 +4079,39 @@ var require_guard_crypto = __commonJS({
4012
4079
  }
4013
4080
  });
4014
4081
 
4082
+ // node_modules/@blamejs/pki/lib/guard-list.js
4083
+ var require_guard_list = __commonJS({
4084
+ "node_modules/@blamejs/pki/lib/guard-list.js"(exports2, module2) {
4085
+ "use strict";
4086
+ function contains(list, value) {
4087
+ if (!list) return false;
4088
+ for (var i = 0, n = list.length; i < n; i++) if (list[i] === value) return true;
4089
+ return false;
4090
+ }
4091
+ function containsAll(list, values) {
4092
+ if (!values) return true;
4093
+ for (var i = 0, n = values.length; i < n; i++) if (!contains(list, values[i])) return false;
4094
+ return true;
4095
+ }
4096
+ function anyMatches(list, predicate) {
4097
+ if (!list) return false;
4098
+ for (var i = 0, n = list.length; i < n; i++) if (predicate(list[i], i)) return true;
4099
+ return false;
4100
+ }
4101
+ function allMatch(list, predicate) {
4102
+ if (!list) return true;
4103
+ for (var i = 0, n = list.length; i < n; i++) if (!predicate(list[i], i)) return false;
4104
+ return true;
4105
+ }
4106
+ module2.exports = {
4107
+ contains,
4108
+ containsAll,
4109
+ anyMatches,
4110
+ allMatch
4111
+ };
4112
+ }
4113
+ });
4114
+
4015
4115
  // node_modules/@blamejs/pki/lib/guard-range.js
4016
4116
  var require_guard_range = __commonJS({
4017
4117
  "node_modules/@blamejs/pki/lib/guard-range.js"(exports2, module2) {
@@ -4724,6 +4824,7 @@ var require_guard_all = __commonJS({
4724
4824
  var text = require_guard_text();
4725
4825
  var limits = require_guard_limits();
4726
4826
  var crypto = require_guard_crypto();
4827
+ var list = require_guard_list();
4727
4828
  var range = require_guard_range();
4728
4829
  var time = require_guard_time();
4729
4830
  var name = require_guard_name();
@@ -4736,12 +4837,12 @@ var require_guard_all = __commonJS({
4736
4837
  var secret = require_guard_secret();
4737
4838
  var parsed = require_guard_parsed();
4738
4839
  var async_ = require_guard_async();
4739
- var intrinsic = require_guard_intrinsic();
4740
4840
  module2.exports = {
4741
4841
  bytes,
4742
4842
  text,
4743
4843
  limits,
4744
4844
  crypto,
4845
+ list,
4745
4846
  range,
4746
4847
  time,
4747
4848
  name,
@@ -4753,8 +4854,7 @@ var require_guard_all = __commonJS({
4753
4854
  compress,
4754
4855
  secret,
4755
4856
  parsed,
4756
- async: async_,
4757
- intrinsic
4857
+ async: async_
4758
4858
  };
4759
4859
  }
4760
4860
  });
@@ -4766,6 +4866,8 @@ var require_asn1_der = __commonJS({
4766
4866
  var constants = require_constants();
4767
4867
  var frameworkError = require_framework_error();
4768
4868
  var guard = require_guard_all();
4869
+ var intrinsic = require_guard_intrinsic();
4870
+ var _isArray = intrinsic.isArray;
4769
4871
  var Asn1Error = frameworkError.Asn1Error;
4770
4872
  var OidError = frameworkError.OidError;
4771
4873
  function _asn1Error(c, m) {
@@ -5400,7 +5502,7 @@ var require_asn1_der = __commonJS({
5400
5502
  // encoder composes, so the minimal-encoding rule lives once (the CHECK side is
5401
5503
  // schema.assertMinimalNamedBits). No bits asserted -> the empty BIT STRING.
5402
5504
  namedBitString: function(positions) {
5403
- if (!Array.isArray(positions)) throw new Asn1Error("asn1/bad-bit-string", "namedBitString requires an array of bit positions");
5505
+ if (!_isArray(positions)) throw new Asn1Error("asn1/bad-bit-string", "namedBitString requires an array of bit positions");
5404
5506
  var hi = -1, i, p;
5405
5507
  for (i = 0; i < positions.length; i++) {
5406
5508
  p = positions[i];
@@ -5498,7 +5600,7 @@ var require_asn1_der = __commonJS({
5498
5600
  return content;
5499
5601
  }
5500
5602
  function _asBufferArray(arr, who) {
5501
- if (!Array.isArray(arr)) throw new Asn1Error("asn1/bad-children", who + ": expected an array of TLV buffers");
5603
+ if (!_isArray(arr)) throw new Asn1Error("asn1/bad-children", who + ": expected an array of TLV buffers");
5502
5604
  return arr.map(function(b) {
5503
5605
  return _asBuffer(b, who);
5504
5606
  });
@@ -7074,6 +7176,8 @@ var require_validator_attcert = __commonJS({
7074
7176
  "use strict";
7075
7177
  var oid = require_oid();
7076
7178
  var asn1 = require_asn1_der();
7179
+ var guard = require_guard_all();
7180
+ var _asserts = guard.list.contains;
7077
7181
  function requireV3(cert, E, code) {
7078
7182
  if (cert.version !== 3) throw new E(code, "an attestation certificate must be X.509 version 3");
7079
7183
  }
@@ -7103,7 +7207,7 @@ var require_validator_attcert = __commonJS({
7103
7207
  assertNotCa(cert, exts, E, code);
7104
7208
  if ((cert.subject.rdns || []).length !== 0) throw new E(code, "the tpm AIK certificate subject MUST be empty (WebAuthn 8.3.1)");
7105
7209
  var eku = exts.decode(cert, "extKeyUsage");
7106
- if (!eku || !Array.isArray(eku.value) || eku.value.indexOf(oid.byName("tcgKpAikCertificate")) === -1) {
7210
+ if (!eku || !Array.isArray(eku.value) || !_asserts(eku.value, oid.byName("tcgKpAikCertificate"))) {
7107
7211
  throw new E(code, "the tpm AIK certificate lacks the tcg-kp-AIKCertificate extended key purpose (WebAuthn 8.3.1)");
7108
7212
  }
7109
7213
  var san = exts.decode(cert, "subjectAltName");
@@ -7991,6 +8095,8 @@ var require_ct = __commonJS({
7991
8095
  var constants = require_constants();
7992
8096
  var frameworkError = require_framework_error();
7993
8097
  var guard = require_guard_all();
8098
+ var intrinsic = require_guard_intrinsic();
8099
+ var _hasOwn = intrinsic.hasOwn;
7994
8100
  var ByteReader = require_byte_reader();
7995
8101
  var ByteWriter = require_byte_writer();
7996
8102
  var oid = require_oid();
@@ -8345,7 +8451,7 @@ var require_ct = __commonJS({
8345
8451
  function _parseLogState(state) {
8346
8452
  if (state == null || typeof state !== "object") throw _ctErr("ct/bad-state", "a CT log entry is missing its state");
8347
8453
  var keys = Object.keys(state);
8348
- if (keys.length !== 1 || !Object.prototype.hasOwnProperty.call(LOG_STATE_TRUST, keys[0])) {
8454
+ if (keys.length !== 1 || !_hasOwn(LOG_STATE_TRUST, keys[0])) {
8349
8455
  throw _ctErr("ct/bad-state", "a CT log state must carry exactly one recognized member (pending/qualified/usable/readonly/retired/rejected)");
8350
8456
  }
8351
8457
  var name = keys[0], member = state[name];
@@ -8603,6 +8709,8 @@ var require_schema_pkix = __commonJS({
8603
8709
  var constants = require_constants();
8604
8710
  var schema = require_schema_engine();
8605
8711
  var guard = require_guard_all();
8712
+ var intrinsic = require_guard_intrinsic();
8713
+ var _hasOwn = intrinsic.hasOwn;
8606
8714
  var ct = require_ct();
8607
8715
  var PEM_RE = /-----BEGIN ([A-Z0-9 ]+)-----([\s\S]*?)-----END \1-----/;
8608
8716
  function pemDecode(text, label, PemError) {
@@ -8690,7 +8798,7 @@ var require_schema_pkix = __commonJS({
8690
8798
  function versionReader(ns, accept) {
8691
8799
  return schema.decode(function(n) {
8692
8800
  var key = asn1.read.integer(n).toString();
8693
- if (Object.prototype.hasOwnProperty.call(accept, key)) return accept[key];
8801
+ if (_hasOwn(accept, key)) return accept[key];
8694
8802
  throw ns.E(ns.prefix + "/bad-version", "unsupported version " + key);
8695
8803
  });
8696
8804
  }
@@ -11793,6 +11901,8 @@ var require_schema_crl = __commonJS({
11793
11901
  var pkix = require_schema_pkix();
11794
11902
  var oid = require_oid();
11795
11903
  var frameworkError = require_framework_error();
11904
+ var intrinsic = require_guard_intrinsic();
11905
+ var _hasOwn = intrinsic.hasOwn;
11796
11906
  var CrlError = frameworkError.CrlError;
11797
11907
  var PemError = frameworkError.PemError;
11798
11908
  var TAGS = asn1.TAGS;
@@ -11814,7 +11924,7 @@ var require_schema_crl = __commonJS({
11814
11924
  if (value < 0n) throw new Error("cRLNumber must be non-negative (INTEGER 0..MAX)");
11815
11925
  } else if (ext.oid === OID_REASON_CODE) {
11816
11926
  var reason = asn1.read.enumerated(asn1.decode(ext.value));
11817
- if (!Object.prototype.hasOwnProperty.call(CRL_REASONS, reason.toString())) throw new Error("undefined CRLReason " + reason.toString());
11927
+ if (!_hasOwn(CRL_REASONS, reason.toString())) throw new Error("undefined CRLReason " + reason.toString());
11818
11928
  value = Number(reason);
11819
11929
  } else if (ext.oid === OID_INVALIDITY_DATE) {
11820
11930
  var n = asn1.decode(ext.value);
@@ -13678,6 +13788,8 @@ var require_schema_ocsp = __commonJS({
13678
13788
  var oid = require_oid();
13679
13789
  var constants = require_constants();
13680
13790
  var frameworkError = require_framework_error();
13791
+ var intrinsic = require_guard_intrinsic();
13792
+ var _hasOwn = intrinsic.hasOwn;
13681
13793
  var OcspError = frameworkError.OcspError;
13682
13794
  var PemError = frameworkError.PemError;
13683
13795
  var NS = pkix.makeNS("ocsp", OcspError, oid);
@@ -13693,13 +13805,13 @@ var require_schema_ocsp = __commonJS({
13693
13805
  var OCSP_RESPONSE_STATUS = schema.decode(function(n, ctx) {
13694
13806
  var v = asn1.read.enumerated(n);
13695
13807
  var key = v.toString();
13696
- if (!Object.prototype.hasOwnProperty.call(STATUS_NAMES, key)) throw ctx.E("ocsp/bad-response-status", "undefined OCSPResponseStatus " + key + " (RFC 6960 sec. 4.2.1)");
13808
+ if (!_hasOwn(STATUS_NAMES, key)) throw ctx.E("ocsp/bad-response-status", "undefined OCSPResponseStatus " + key + " (RFC 6960 sec. 4.2.1)");
13697
13809
  return { code: Number(v), name: STATUS_NAMES[key] };
13698
13810
  });
13699
13811
  var CRL_REASON = schema.decode(function(n, ctx) {
13700
13812
  var v = asn1.read.enumerated(n);
13701
13813
  var key = v.toString();
13702
- if (!Object.prototype.hasOwnProperty.call(CRL_REASONS, key)) throw ctx.E("ocsp/bad-revocation-reason", "undefined CRLReason " + key + " (RFC 5280 sec. 5.3.1)");
13814
+ if (!_hasOwn(CRL_REASONS, key)) throw ctx.E("ocsp/bad-revocation-reason", "undefined CRLReason " + key + " (RFC 5280 sec. 5.3.1)");
13703
13815
  return CRL_REASONS[key];
13704
13816
  });
13705
13817
  function certificateBytes() {
@@ -15803,6 +15915,8 @@ var require_schema_attrcert = __commonJS({
15803
15915
  var pkix = require_schema_pkix();
15804
15916
  var oid = require_oid();
15805
15917
  var guard = require_guard_all();
15918
+ var intrinsic = require_guard_intrinsic();
15919
+ var _hasOwn = intrinsic.hasOwn;
15806
15920
  var frameworkError = require_framework_error();
15807
15921
  var AttrCertError = frameworkError.AttrCertError;
15808
15922
  var PemError = frameworkError.PemError;
@@ -15816,7 +15930,7 @@ var require_schema_attrcert = __commonJS({
15816
15930
  var DIGESTED_OBJECT_TYPE = schema.decode(function(n, ctx) {
15817
15931
  var v = asn1.read.enumerated(n);
15818
15932
  var k = v.toString();
15819
- if (!Object.prototype.hasOwnProperty.call(ODT_NAMES, k)) {
15933
+ if (!_hasOwn(ODT_NAMES, k)) {
15820
15934
  throw ctx.E("attrcert/bad-digested-object-type", "digestedObjectType " + k + " is not a defined value (RFC 5755 sec. 4.1)");
15821
15935
  }
15822
15936
  if (k === "2") {
@@ -17578,6 +17692,7 @@ var require_ocsp_verify = __commonJS({
17578
17692
  "use strict";
17579
17693
  var asn1 = require_asn1_der();
17580
17694
  var guard = require_guard_all();
17695
+ var intrinsic = require_guard_intrinsic();
17581
17696
  var oid = require_oid();
17582
17697
  var x509 = require_schema_x509();
17583
17698
  var compositeSig = require_composite_sig();
@@ -17589,12 +17704,15 @@ var require_ocsp_verify = __commonJS({
17589
17704
  OCSP_CERTID_HASHES[oid.byName("sha384")] = "SHA-384";
17590
17705
  OCSP_CERTID_HASHES[oid.byName("sha512")] = "SHA-512";
17591
17706
  var OID_OCSP_SIGNING = oid.byName("ocspSigning");
17707
+ var _asserts = guard.list.contains;
17708
+ var _bufferFrom = intrinsic.bufferFrom;
17709
+ var _bytesEqual = intrinsic.bufferEquals;
17592
17710
  var OID_OCSP_NOCHECK = oid.byName("ocspNoCheck");
17593
17711
  var OID_EKU = oid.byName("extKeyUsage");
17594
17712
  var OID_KEY_USAGE = oid.byName("keyUsage");
17595
17713
  function ocspDigest(alg, buf) {
17596
17714
  return subtle.digest(alg, buf).then(function(h) {
17597
- return Buffer.from(h);
17715
+ return _bufferFrom(h);
17598
17716
  });
17599
17717
  }
17600
17718
  function ocspKeyValue(spkiDer) {
@@ -17633,12 +17751,12 @@ var require_ocsp_verify = __commonJS({
17633
17751
  }
17634
17752
  async function ocspCertIdMatches(certID, cert, issuerNameCandidates, issuerKeyBits) {
17635
17753
  if (certID.serialNumberHex !== cert.serialNumberHex) return false;
17636
- var hashName = OCSP_CERTID_HASHES[certID.hashAlgorithm.oid];
17754
+ var hashName = intrinsic.hasOwn(OCSP_CERTID_HASHES, certID.hashAlgorithm.oid) ? OCSP_CERTID_HASHES[certID.hashAlgorithm.oid] : null;
17637
17755
  if (!hashName) return false;
17638
17756
  var keyHash = await ocspDigest(hashName, issuerKeyBits);
17639
- if (!certID.issuerKeyHash.equals(keyHash)) return false;
17757
+ if (!_bytesEqual(certID.issuerKeyHash, keyHash)) return false;
17640
17758
  for (var i = 0; i < issuerNameCandidates.length; i++) {
17641
- if (certID.issuerNameHash.equals(await ocspDigest(hashName, issuerNameCandidates[i]))) return true;
17759
+ if (_bytesEqual(certID.issuerNameHash, await ocspDigest(hashName, issuerNameCandidates[i]))) return true;
17642
17760
  }
17643
17761
  return false;
17644
17762
  }
@@ -17647,7 +17765,7 @@ var require_ocsp_verify = __commonJS({
17647
17765
  var matchesIssuer = false;
17648
17766
  try {
17649
17767
  if (rid.byName) matchesIssuer = dnEqual(rid.byName.rdns, cert.issuer.rdns);
17650
- else if (rid.byKey) matchesIssuer = rid.byKey.equals(await ocspDigest("SHA-1", issuerKeyBits));
17768
+ else if (rid.byKey) matchesIssuer = _bytesEqual(rid.byKey, await ocspDigest("SHA-1", issuerKeyBits));
17651
17769
  } catch (_e) {
17652
17770
  matchesIssuer = false;
17653
17771
  }
@@ -17662,7 +17780,7 @@ var require_ocsp_verify = __commonJS({
17662
17780
  var identifies = false;
17663
17781
  try {
17664
17782
  if (rid.byName) identifies = dnEqual(rid.byName.rdns, rc.subject.rdns);
17665
- else if (rid.byKey) identifies = rid.byKey.equals(await ocspDigest("SHA-1", ocspKeyValue(rc.subjectPublicKeyInfo.bytes)));
17783
+ else if (rid.byKey) identifies = _bytesEqual(rid.byKey, await ocspDigest("SHA-1", ocspKeyValue(rc.subjectPublicKeyInfo.bytes)));
17666
17784
  } catch (_e) {
17667
17785
  identifies = false;
17668
17786
  }
@@ -17683,7 +17801,7 @@ var require_ocsp_verify = __commonJS({
17683
17801
  } catch (_e) {
17684
17802
  continue;
17685
17803
  }
17686
- if (!eku || eku.value.indexOf(OID_OCSP_SIGNING) === -1) continue;
17804
+ if (!eku || !_asserts(eku.value, OID_OCSP_SIGNING)) continue;
17687
17805
  var ku;
17688
17806
  try {
17689
17807
  ku = decodeExt(rc, OID_KEY_USAGE);
@@ -17847,11 +17965,20 @@ var require_sign_scheme = __commonJS({
17847
17965
  var subtle = webcrypto.webcrypto.subtle;
17848
17966
  var validator = require_validator_all();
17849
17967
  var guard = require_guard_all();
17968
+ var intrinsic = require_guard_intrinsic();
17850
17969
  var compositeSig = require_composite_sig();
17851
17970
  var b = asn1.build;
17852
17971
  function O(name) {
17853
17972
  return oid.byName(name);
17854
17973
  }
17974
+ var _BigInt = intrinsic.BigInt;
17975
+ var _String = intrinsic.String;
17976
+ var _filter = intrinsic.filter;
17977
+ var _stringify = intrinsic.stringify;
17978
+ var _toUpperCase = intrinsic.toUpperCase;
17979
+ var _isBuffer = intrinsic.isBuffer;
17980
+ var _bufferFrom = intrinsic.bufferFrom;
17981
+ var _isU8 = intrinsic.types.isUint8Array;
17855
17982
  var HASH = { sha256: "SHA-256", sha384: "SHA-384", sha512: "SHA-512" };
17856
17983
  var NODE_DIGEST = { sha256: "sha256", sha384: "sha384", sha512: "sha512", shake128: "shake128", shake256: "shake256" };
17857
17984
  var PSS_SALT = { "SHA-256": 32, "SHA-384": 48, "SHA-512": 64 };
@@ -17874,6 +18001,11 @@ var require_sign_scheme = __commonJS({
17874
18001
  "ML-DSA-65": { sha384: 1, sha512: 1, shake256: 1 },
17875
18002
  "ML-DSA-87": { sha512: 1, shake256: 1 }
17876
18003
  };
18004
+ function mldsaDigestSuitable(mlName, md) {
18005
+ if (!intrinsic.hasOwn(MLDSA_SUITABLE_DIGEST, mlName)) return false;
18006
+ var row = MLDSA_SUITABLE_DIGEST[mlName];
18007
+ return !!row && intrinsic.hasOwn(row, md) && !!row[md];
18008
+ }
17877
18009
  var SLHDSA_BY_OID = {};
17878
18010
  [
17879
18011
  ["sha2-128s", "sha256"],
@@ -17897,7 +18029,7 @@ var require_sign_scheme = __commonJS({
17897
18029
  function _pssAlgId(digestName) {
17898
18030
  var hashAlg = b.sequence([b.oid(O(digestName)), b.nullValue()]);
17899
18031
  var mgf = b.sequence([b.oid(O("mgf1")), hashAlg]);
17900
- var params = b.sequence([b.explicit(0, hashAlg), b.explicit(1, mgf), b.explicit(2, b.integer(BigInt(PSS_SALT[HASH[digestName]])))]);
18032
+ var params = b.sequence([b.explicit(0, hashAlg), b.explicit(1, mgf), b.explicit(2, b.integer(_BigInt(PSS_SALT[HASH[digestName]])))]);
17901
18033
  return b.sequence([b.oid(O("rsassaPss")), params]);
17902
18034
  }
17903
18035
  function _pssHashFromSpki(cert, E) {
@@ -17912,7 +18044,7 @@ var require_sign_scheme = __commonJS({
17912
18044
  if (node.tagClass !== "universal" || node.tagNumber !== asn1.TAGS.SEQUENCE || !node.children) {
17913
18045
  throw E("unsupported-algorithm", "the id-RSASSA-PSS key parameters are not an RSASSA-PSS-params SEQUENCE (RFC 4055 sec. 3.1)");
17914
18046
  }
17915
- var hashField = node.children.filter(function(c) {
18047
+ var hashField = _filter(node.children, function(c) {
17916
18048
  return c.tagClass === "context" && c.tagNumber === 0;
17917
18049
  })[0];
17918
18050
  if (!hashField) return "sha1";
@@ -17941,15 +18073,15 @@ var require_sign_scheme = __commonJS({
17941
18073
  var comp = compositeSig.COMPOSITE_ALGS[keyOid];
17942
18074
  if (comp) {
17943
18075
  if (comp.trad.unsupported) throw E("unsupported-algorithm", "composite " + comp.name + ": " + comp.trad.unsupported);
17944
- if (so.digestAlgorithm && so.digestAlgorithm !== comp.phCms) throw E("bad-input", "composite " + comp.name + " fixes the digestAlgorithm to " + comp.phCms + " (draft-ietf-lamps-cms-composite-sigs sec. 3.4); " + JSON.stringify(so.digestAlgorithm) + " conflicts");
18076
+ if (so.digestAlgorithm && so.digestAlgorithm !== comp.phCms) throw E("bad-input", "composite " + comp.name + " fixes the digestAlgorithm to " + comp.phCms + " (draft-ietf-lamps-cms-composite-sigs sec. 3.4); " + _stringify(so.digestAlgorithm) + " conflicts");
17945
18077
  return { composite: comp, digest: comp.phCms, digestAlgId: _algId(comp.phCms, "absent"), sigAlgId: _algId(comp.name, "absent") };
17946
18078
  }
17947
18079
  if (keyOid === O("rsaEncryption") || keyOid === O("rsassaPss")) {
17948
18080
  var isPssKey = keyOid === O("rsassaPss");
17949
18081
  var pinned = isPssKey ? _pssHashFromSpki(cert, E) : null;
17950
- if (pinned && so.digestAlgorithm && so.digestAlgorithm !== pinned) throw E("bad-input", "the signer key restricts the RSASSA-PSS digest to " + pinned + ", but digestAlgorithm " + JSON.stringify(so.digestAlgorithm) + " was requested");
18082
+ if (pinned && so.digestAlgorithm && so.digestAlgorithm !== pinned) throw E("bad-input", "the signer key restricts the RSASSA-PSS digest to " + pinned + ", but digestAlgorithm " + _stringify(so.digestAlgorithm) + " was requested");
17951
18083
  var d = so.digestAlgorithm || pinned || "sha256";
17952
- if (!HASH[d]) throw E("unsupported-algorithm", "unsupported RSA digest algorithm " + JSON.stringify(d));
18084
+ if (!HASH[d]) throw E("unsupported-algorithm", "unsupported RSA digest algorithm " + _stringify(d));
17953
18085
  if (so.pss || isPssKey) return { digest: d, digestAlgId: _algId(d, "absent"), sigAlgId: _pssAlgId(d), imp: { name: "RSA-PSS", hash: HASH[d] }, sign: { name: "RSA-PSS", saltLength: PSS_SALT[HASH[d]] }, ecdsaDer: false };
17954
18086
  var rsaSigAlgId = so.combinedRsaSig ? _algId(RSA_PKCS1_SIG[d], "null") : _algId("rsaEncryption", "null");
17955
18087
  return { digest: d, digestAlgId: _algId(d, "absent"), sigAlgId: rsaSigAlgId, imp: { name: "RSASSA-PKCS1-v1_5", hash: HASH[d] }, sign: { name: "RSASSA-PKCS1-v1_5" }, ecdsaDer: false };
@@ -17964,13 +18096,13 @@ var require_sign_scheme = __commonJS({
17964
18096
  var ec = EC_BY_CURVE_OID[curveOid];
17965
18097
  if (!ec) throw E("unsupported-algorithm", "the signer key is on an unsupported EC curve");
17966
18098
  var de = so.digestAlgorithm || "sha256";
17967
- if (!HASH[de]) throw E("unsupported-algorithm", "unsupported ECDSA digest algorithm " + JSON.stringify(de));
18099
+ if (!HASH[de]) throw E("unsupported-algorithm", "unsupported ECDSA digest algorithm " + _stringify(de));
17968
18100
  return { digest: de, digestAlgId: _algId(de, "absent"), sigAlgId: _algId(ECDSA_ALG[de], "absent"), imp: { name: "ECDSA", namedCurve: ec.curve }, sign: { name: "ECDSA", hash: HASH[de] }, ecdsaDer: true, coordLen: ec.coordLen };
17969
18101
  }
17970
18102
  if (keyOid === O("Ed25519") || keyOid === O("Ed448")) {
17971
18103
  var name = keyOid === O("Ed25519") ? "Ed25519" : "Ed448";
17972
18104
  var dd = so.digestAlgorithm || (name === "Ed25519" ? "sha512" : "shake256");
17973
- if (!NODE_DIGEST[dd]) throw E("unsupported-algorithm", "unsupported " + name + " digest algorithm " + JSON.stringify(dd));
18105
+ if (!NODE_DIGEST[dd]) throw E("unsupported-algorithm", "unsupported " + name + " digest algorithm " + _stringify(dd));
17974
18106
  return { digest: dd, digestAlgId: _algId(dd, "absent"), sigAlgId: _algId(name, "absent"), imp: { name }, sign: { name }, ecdsaDer: false };
17975
18107
  }
17976
18108
  if (MLDSA_BY_OID[keyOid]) {
@@ -17980,27 +18112,27 @@ var require_sign_scheme = __commonJS({
17980
18112
  md = "sha512";
17981
18113
  } else {
17982
18114
  md = so.digestAlgorithm || "sha512";
17983
- if (!NODE_DIGEST[md]) throw E("unsupported-algorithm", "unsupported ML-DSA message digest " + JSON.stringify(md));
17984
- if (!MLDSA_SUITABLE_DIGEST[mlName][md]) throw E("unsupported-algorithm", "the " + md + " message digest is below the security strength of " + mlName + " (RFC 9882 sec. 3.3)");
18115
+ if (!NODE_DIGEST[md]) throw E("unsupported-algorithm", "unsupported ML-DSA message digest " + _stringify(md));
18116
+ if (!mldsaDigestSuitable(mlName, md)) throw E("unsupported-algorithm", "the " + md + " message digest is below the security strength of " + mlName + " (RFC 9882 sec. 3.3)");
17985
18117
  }
17986
18118
  return { digest: md, digestAlgId: _algId(md, "absent"), sigAlgId: _algId(oid.name(keyOid), "absent"), imp: { name: mlName }, sign: { name: mlName }, ecdsaDer: false };
17987
18119
  }
17988
18120
  if (SLHDSA_BY_OID[keyOid]) {
17989
18121
  var slh = SLHDSA_BY_OID[keyOid];
17990
- if (so.digestAlgorithm && so.digestAlgorithm !== slh.digest) throw E("bad-input", "SLH-DSA " + slh.wc + " requires the " + slh.digest + " message digest (RFC 9814 sec. 4); digestAlgorithm " + JSON.stringify(so.digestAlgorithm) + " conflicts");
18122
+ if (so.digestAlgorithm && so.digestAlgorithm !== slh.digest) throw E("bad-input", "SLH-DSA " + slh.wc + " requires the " + slh.digest + " message digest (RFC 9814 sec. 4); digestAlgorithm " + _stringify(so.digestAlgorithm) + " conflicts");
17991
18123
  return { digest: slh.digest, digestAlgId: _algId(slh.digest, "absent"), sigAlgId: _algId(oid.name(keyOid), "absent"), imp: { name: slh.wc }, sign: { name: slh.wc }, ecdsaDer: false };
17992
18124
  }
17993
18125
  throw E("unsupported-algorithm", "unsupported signer key algorithm " + keyOid);
17994
18126
  }
17995
18127
  function _assertKeyMatchesScheme(key, imp, E) {
17996
18128
  var ka = key.algorithm || {};
17997
- if (String(ka.name).toUpperCase() !== String(imp.name).toUpperCase()) throw E("bad-input", "the signer CryptoKey algorithm (" + ka.name + ") does not match the certificate's key algorithm (" + imp.name + ")");
18129
+ if (_toUpperCase(_String(ka.name)) !== _toUpperCase(_String(imp.name))) throw E("bad-input", "the signer CryptoKey algorithm (" + ka.name + ") does not match the certificate's key algorithm (" + imp.name + ")");
17998
18130
  if (imp.hash && (!ka.hash || ka.hash.name !== imp.hash)) throw E("bad-input", "the signer CryptoKey hash (" + (ka.hash && ka.hash.name) + ") does not match the signing digest (" + imp.hash + ")");
17999
18131
  if (imp.namedCurve && ka.namedCurve !== imp.namedCurve) throw E("bad-input", "the signer CryptoKey curve (" + ka.namedCurve + ") does not match the certificate curve (" + imp.namedCurve + ")");
18000
18132
  }
18001
18133
  function _normPkcs8(k, label, E) {
18002
- if (Buffer.isBuffer(k)) return guard.bytes.view(k, E, "bad-input", label);
18003
- if (k instanceof Uint8Array) return guard.bytes.snapshot(k, E, "bad-input", label);
18134
+ if (_isBuffer(k)) return guard.bytes.view(k, E, "bad-input", label);
18135
+ if (_isU8(k)) return guard.bytes.snapshot(k, E, "bad-input", label);
18004
18136
  if (typeof k === "string") {
18005
18137
  try {
18006
18138
  return pkcs8.pemDecode(k);
@@ -18011,19 +18143,19 @@ var require_sign_scheme = __commonJS({
18011
18143
  throw E("bad-input", label + " must be a PKCS#8 DER Buffer, Uint8Array, or PEM string");
18012
18144
  }
18013
18145
  function _normCompositeKeys(key, comp, E) {
18014
- if (!key || typeof key !== "object" || Buffer.isBuffer(key) || key instanceof Uint8Array || key.mldsa == null || key.trad == null) {
18146
+ if (!key || typeof key !== "object" || _isBuffer(key) || _isU8(key) || key.mldsa == null || key.trad == null) {
18015
18147
  throw E("bad-input", "a composite " + comp.name + " signer key must be { mldsa: <PKCS#8>, trad: <PKCS#8> }");
18016
18148
  }
18017
18149
  return { mldsa: _normPkcs8(key.mldsa, "the composite ML-DSA component key", E), trad: _normPkcs8(key.trad, "the composite traditional component key", E) };
18018
18150
  }
18019
18151
  function _importKey(key, imp, E) {
18020
- if (key && typeof key === "object" && !Buffer.isBuffer(key) && !(key instanceof Uint8Array) && key.type === "private") {
18152
+ if (key && typeof key === "object" && !_isBuffer(key) && !_isU8(key) && key.type === "private") {
18021
18153
  _assertKeyMatchesScheme(key, imp, E);
18022
18154
  return webcrypto.adoptKey(key, imp, ["sign"], E, "bad-input");
18023
18155
  }
18024
18156
  var der, owned = false;
18025
- if (Buffer.isBuffer(key)) der = guard.bytes.view(key, E, "bad-input", "the signer private key");
18026
- else if (key instanceof Uint8Array) {
18157
+ if (_isBuffer(key)) der = guard.bytes.view(key, E, "bad-input", "the signer private key");
18158
+ else if (_isU8(key)) {
18027
18159
  der = guard.bytes.snapshot(key, E, "bad-input", "the signer private key");
18028
18160
  owned = true;
18029
18161
  } else if (typeof key === "string") {
@@ -18047,12 +18179,12 @@ var require_sign_scheme = __commonJS({
18047
18179
  function signOverTbs(scheme, key, signedBytes, E) {
18048
18180
  if (scheme.composite) {
18049
18181
  return compositeSig.compositeSign(scheme.composite, _normCompositeKeys(key, scheme.composite, E), signedBytes).then(function(sig) {
18050
- return Buffer.from(sig);
18182
+ return _bufferFrom(sig);
18051
18183
  });
18052
18184
  }
18053
18185
  return _importKey(key, scheme.imp, E).then(function(priv) {
18054
18186
  return subtle.sign(scheme.sign, priv, signedBytes).then(function(sigRaw) {
18055
- var sig = Buffer.from(sigRaw);
18187
+ var sig = _bufferFrom(sigRaw);
18056
18188
  if (scheme.ecdsaDer) sig = validator.sig.rawToEcdsaDer(sig, scheme.coordLen);
18057
18189
  return sig;
18058
18190
  });
@@ -18063,6 +18195,7 @@ var require_sign_scheme = __commonJS({
18063
18195
  pssSpkiPinnedHash,
18064
18196
  signOverTbs,
18065
18197
  MLDSA_SUITABLE_DIGEST,
18198
+ mldsaDigestSuitable,
18066
18199
  SLHDSA_BY_OID
18067
18200
  };
18068
18201
  }
@@ -18124,6 +18257,8 @@ var require_pki_build = __commonJS({
18124
18257
  var schema = require_schema_engine();
18125
18258
  var compositeSig = require_composite_sig();
18126
18259
  var guard = require_guard_all();
18260
+ var intrinsic = require_guard_intrinsic();
18261
+ var _isArray = intrinsic.isArray;
18127
18262
  var oid = require_oid();
18128
18263
  var ipUtils = require_ip_utils();
18129
18264
  var nodeCrypto = require("crypto");
@@ -18193,7 +18328,7 @@ var require_pki_build = __commonJS({
18193
18328
  return spec;
18194
18329
  }
18195
18330
  if (typeof spec === "string") spec = [{ commonName: spec }];
18196
- if (!Array.isArray(spec)) throw E("bad-name", "a name must be a string, an array of RDNs, or raw Name DER");
18331
+ if (!_isArray(spec)) throw E("bad-name", "a name must be a string, an array of RDNs, or raw Name DER");
18197
18332
  return b.sequence(spec.map(encodeRdn));
18198
18333
  }
18199
18334
  function assertValidNameDer(der) {
@@ -18264,7 +18399,7 @@ var require_pki_build = __commonJS({
18264
18399
  }
18265
18400
  }
18266
18401
  function extKeyUsage(names) {
18267
- if (!Array.isArray(names) || !names.length) throw E("bad-input", "keyUsage must assert at least one bit (RFC 5280 sec. 4.2.1.3)");
18402
+ if (!_isArray(names) || !names.length) throw E("bad-input", "keyUsage must assert at least one bit (RFC 5280 sec. 4.2.1.3)");
18268
18403
  var positions = names.map(function(n) {
18269
18404
  var pos = KU_BIT[n];
18270
18405
  if (pos == null) throw E("bad-input", "unknown keyUsage bit " + JSON.stringify(n));
@@ -18286,7 +18421,7 @@ var require_pki_build = __commonJS({
18286
18421
  throw E("bad-input", "unknown " + label + " " + JSON.stringify(n) + " (expected a registered name or a dotted-decimal OID)");
18287
18422
  }
18288
18423
  function extExtKeyUsage(names) {
18289
- if (!Array.isArray(names) || !names.length) throw E("bad-input", "extendedKeyUsage must list at least one KeyPurposeId");
18424
+ if (!_isArray(names) || !names.length) throw E("bad-input", "extendedKeyUsage must list at least one KeyPurposeId");
18290
18425
  return b.sequence(names.map(function(n) {
18291
18426
  return b.oid(_resolveOid(n, "extendedKeyUsage purpose"));
18292
18427
  }));
@@ -18314,7 +18449,7 @@ var require_pki_build = __commonJS({
18314
18449
  return b.sequence([b.contextPrimitive(0, keyid)]);
18315
18450
  }
18316
18451
  function encodeGeneralNames(entries, implicitTag) {
18317
- if (!Array.isArray(entries) || !entries.length) throw E("bad-input", "a GeneralNames must carry at least one GeneralName");
18452
+ if (!_isArray(entries) || !entries.length) throw E("bad-input", "a GeneralNames must carry at least one GeneralName");
18318
18453
  var members = entries.map(encodeGeneralName);
18319
18454
  if (implicitTag == null) return b.sequence(members);
18320
18455
  return b.contextConstructed(implicitTag, Buffer.concat(members));
@@ -18323,7 +18458,7 @@ var require_pki_build = __commonJS({
18323
18458
  return encodeGeneralNames(entries);
18324
18459
  }
18325
18460
  function extCertPolicies(names) {
18326
- if (!Array.isArray(names) || !names.length) throw E("bad-input", "certificatePolicies must list at least one policy OID");
18461
+ if (!_isArray(names) || !names.length) throw E("bad-input", "certificatePolicies must list at least one policy OID");
18327
18462
  var seen = {};
18328
18463
  return b.sequence(names.map(function(n) {
18329
18464
  var pOid = _resolveOid(n, "certificate policy");
@@ -18404,7 +18539,7 @@ var require_pki_build = __commonJS({
18404
18539
  };
18405
18540
  function requestedExtensions(extSpec, spki) {
18406
18541
  var EXT_DECODERS = ctx.EXT_DECODERS;
18407
- if (Array.isArray(extSpec)) {
18542
+ if (_isArray(extSpec)) {
18408
18543
  if (!extSpec.length) throw E("bad-input", "the requested extensions list must carry at least one extension");
18409
18544
  var seen = {};
18410
18545
  return b.sequence(extSpec.map(function(e, i) {
@@ -19161,6 +19296,8 @@ var require_cmp_build = __commonJS({
19161
19296
  var CRMF_BODY = { ir: 1, cr: 1, kur: 1 };
19162
19297
  var CERT_REP_ARM = { ip: 1, cp: 1, kup: 1, ccp: 1 };
19163
19298
  var KNOWN_OPTS_KEYS = { key: 1, cert: 1, mac: 1, extraCerts: 1, pem: 1, pss: 1, digestAlgorithm: 1 };
19299
+ var KNOWN_OPTS_SIG_KEYS = { key: 1, cert: 1, extraCerts: 1, pem: 1, pss: 1, digestAlgorithm: 1 };
19300
+ var KNOWN_OPTS_MAC_KEYS = { mac: 1, extraCerts: 1, pem: 1 };
19164
19301
  var KNOWN_MESSAGE_KEYS = { header: 1, body: 1 };
19165
19302
  var KNOWN_MAC_KEYS = { secret: 1, salt: 1, iterationCount: 1, prf: 1, keyLength: 1, algorithm: 1 };
19166
19303
  var PBMAC1_DEFAULT_ITER = 1e5;
@@ -19615,7 +19752,16 @@ var require_cmp_build = __commonJS({
19615
19752
  guard.identifier.assertKnownKeys(message, KNOWN_MESSAGE_KEYS, _err, "cmp/bad-input", function(k) {
19616
19753
  return "unknown message field " + JSON.stringify(k) + " (a message carries only header + body)";
19617
19754
  });
19618
- guard.identifier.assertKnownKeys(opts, KNOWN_OPTS_KEYS, _err, "cmp/bad-input", "unknown opts field ");
19755
+ var sigForm = opts.key != null || opts.cert != null, macForm = opts.mac != null;
19756
+ guard.identifier.assertKnownKeys(
19757
+ opts,
19758
+ sigForm === macForm ? KNOWN_OPTS_KEYS : sigForm ? KNOWN_OPTS_SIG_KEYS : KNOWN_OPTS_MAC_KEYS,
19759
+ _err,
19760
+ "cmp/bad-input",
19761
+ function(k) {
19762
+ return "unknown opts field " + JSON.stringify(k) + (macForm && (k === "pss" || k === "digestAlgorithm") ? " for MAC protection; the signature parameters are read only by the { key, cert } form" : "");
19763
+ }
19764
+ );
19619
19765
  if (message.header == null) throw _err("cmp/bad-input", "message.header is required");
19620
19766
  if (message.body == null) throw _err("cmp/bad-input", "message.body is required");
19621
19767
  var prot = _resolveProtection(opts);
@@ -20428,6 +20574,7 @@ var require_cms_sign = __commonJS({
20428
20574
  var webcrypto = require_webcrypto();
20429
20575
  var signScheme = require_sign_scheme();
20430
20576
  var guard = require_guard_all();
20577
+ var intrinsic = require_guard_intrinsic();
20431
20578
  var pkiBuild = require_pki_build();
20432
20579
  var cms = require_schema_cms();
20433
20580
  var subtle = webcrypto.webcrypto.subtle;
@@ -20453,6 +20600,8 @@ var require_cms_sign = __commonJS({
20453
20600
  certificates: 1,
20454
20601
  pem: 1
20455
20602
  };
20603
+ var KNOWN_SIGNER_CERT_KEYS = { cert: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 };
20604
+ var KNOWN_SIGNER_KEY_ONLY_KEYS = { spki: 1, keyIdentifier: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 };
20456
20605
  var KNOWN_COUNTERSIGN_OPTS = {
20457
20606
  signerIndex: 1,
20458
20607
  countersignatureOf: 1,
@@ -20507,7 +20656,7 @@ var require_cms_sign = __commonJS({
20507
20656
  function _buildSignedAttrs(pairs) {
20508
20657
  var seenTypes = {};
20509
20658
  var attrs = pairs.map(function(p) {
20510
- if (guard.intrinsic.hasOwn(seenTypes, p.type)) throw _err("cms/bad-input", "signedAttrs must not repeat an attribute type (RFC 5652 sec. 5.3): " + p.type);
20659
+ if (intrinsic.hasOwn(seenTypes, p.type)) throw _err("cms/bad-input", "signedAttrs must not repeat an attribute type (RFC 5652 sec. 5.3): " + p.type);
20511
20660
  seenTypes[p.type] = 1;
20512
20661
  return b.sequence([b.oid(p.type), b.set(p.values)]);
20513
20662
  });
@@ -20536,8 +20685,8 @@ var require_cms_sign = __commonJS({
20536
20685
  var pairs = _resolveAttrPairs(list, "an unsigned attribute value");
20537
20686
  var seen = {};
20538
20687
  pairs.forEach(function(p) {
20539
- if (guard.intrinsic.hasOwn(UNSIGNED_FORBIDDEN, p.type)) throw _err("cms/bad-input", "the " + UNSIGNED_FORBIDDEN[p.type] + " attribute must not appear as an unsigned attribute (RFC 5652 sec. 11)");
20540
- if (guard.intrinsic.hasOwn(seen, p.type)) throw _err("cms/bad-input", "unsignedAttrs must not repeat an attribute type (RFC 5652 sec. 5.3): " + p.type);
20688
+ if (intrinsic.hasOwn(UNSIGNED_FORBIDDEN, p.type)) throw _err("cms/bad-input", "the " + UNSIGNED_FORBIDDEN[p.type] + " attribute must not appear as an unsigned attribute (RFC 5652 sec. 11)");
20689
+ if (intrinsic.hasOwn(seen, p.type)) throw _err("cms/bad-input", "unsignedAttrs must not repeat an attribute type (RFC 5652 sec. 5.3): " + p.type);
20541
20690
  seen[p.type] = 1;
20542
20691
  });
20543
20692
  var setOf = b.set(pairs.map(function(p) {
@@ -20924,7 +21073,14 @@ var require_cms_sign = __commonJS({
20924
21073
  return opts.pem ? pkix.pemEncode(newCi, "CMS", frameworkError.PemError) : newCi;
20925
21074
  });
20926
21075
  }
20927
- module2.exports = { sign, countersign };
21076
+ module2.exports = {
21077
+ sign,
21078
+ countersign,
21079
+ // @internal -- the signer-descriptor field tables, for a verb that AUTHORS signer descriptors
21080
+ // from its own caller's options and gates them at its own door.
21081
+ KNOWN_SIGNER_CERT_KEYS,
21082
+ KNOWN_SIGNER_KEY_ONLY_KEYS
21083
+ };
20928
21084
  }
20929
21085
  });
20930
21086
 
@@ -20940,6 +21096,7 @@ var require_cms_encrypt = __commonJS({
20940
21096
  var webcrypto = require_webcrypto();
20941
21097
  var frameworkError = require_framework_error();
20942
21098
  var guard = require_guard_all();
21099
+ var intrinsic = require_guard_intrinsic();
20943
21100
  var pbes2 = require_pbes2();
20944
21101
  var b = asn1.build;
20945
21102
  var subtle = webcrypto.webcrypto.subtle;
@@ -21213,22 +21370,64 @@ var require_cms_encrypt = __commonJS({
21213
21370
  if (!PRF_HASH[prf]) throw _err("cms/bad-input", "unsupported pwri prf " + JSON.stringify(prf));
21214
21371
  return PRF_HASH[prf];
21215
21372
  }
21216
- async function _buildRecipient(cek, desc, opts) {
21373
+ var _PWRI_KEYS = { password: 1, iterations: 1, prf: 1, salt: 1 };
21374
+ var _KEKRI_KEYS = { kek: 1, kekId: 1 };
21375
+ var _KTRI_RECIPIENT_KEYS = { cert: 1, oaepHash: 1, keyIdentifier: 1 };
21376
+ var _AGREE_RECIPIENT_KEYS = { cert: 1, keyIdentifier: 1, ukm: 1 };
21377
+ var _RECIPIENT_DEFAULTS = ["oaepHash", "keyIdentifier", "ukm"];
21378
+ function _assertRecipientKeys(desc, known, arm) {
21379
+ guard.identifier.assertKnownKeys(desc, known, _err, "cms/bad-input", function(k) {
21380
+ return "unknown field " + JSON.stringify(k) + " on a " + arm + " recipient; that field is not read for this recipient type";
21381
+ });
21382
+ }
21383
+ function _assertDefaultsConsumed(opts, consumed) {
21384
+ for (var i = 0; i < _RECIPIENT_DEFAULTS.length; i++) {
21385
+ var name = _RECIPIENT_DEFAULTS[i];
21386
+ if (opts[name] != null && !consumed[name]) {
21387
+ throw _err("cms/bad-input", "opts." + name + " is a per-recipient default and no recipient of this message reads it" + (name === "oaepHash" ? " (only an RSA certificate recipient does)" : name === "ukm" ? " (only a key-agreement or KEM certificate recipient does)" : " (only a certificate recipient does)"));
21388
+ }
21389
+ }
21390
+ }
21391
+ async function _buildRecipient(cek, desc, opts, consumed) {
21217
21392
  if (desc == null || typeof desc !== "object") throw _err("cms/bad-input", "each recipient must be a descriptor object");
21218
- if (desc.password != null) return _buildPwri(cek, desc);
21219
- if (desc.kek != null) return _buildKekri(cek, desc);
21393
+ if (desc.password != null) {
21394
+ _assertRecipientKeys(desc, _PWRI_KEYS, "password");
21395
+ return _buildPwri(cek, desc);
21396
+ }
21397
+ if (desc.kek != null) {
21398
+ _assertRecipientKeys(desc, _KEKRI_KEYS, "KEK");
21399
+ return _buildKekri(cek, desc);
21400
+ }
21220
21401
  if (desc.cert != null) {
21221
21402
  var cert = x509.parse(_normCertDer(desc.cert, "a recipient certificate"));
21222
21403
  var keyOid = cert.subjectPublicKeyInfo.algorithm.oid;
21223
- if (keyOid === O("rsaEncryption") || keyOid === O("rsassaPss")) return _buildKtri(cek, cert, mergeOpts(opts, desc));
21224
- if (keyOid === O("ecPublicKey") || MONT_KA[keyOid]) return _buildKari(cek, cert, mergeOpts(opts, desc));
21225
- if (KEM_WC[keyOid]) return _buildKemri(cek, cert, mergeOpts(opts, desc));
21404
+ if (keyOid === O("rsaEncryption") || keyOid === O("rsassaPss")) {
21405
+ _assertRecipientKeys(desc, _KTRI_RECIPIENT_KEYS, "RSA certificate");
21406
+ return _buildKtri(cek, cert, mergeOpts(opts, desc, _KTRI_RECIPIENT_KEYS, consumed));
21407
+ }
21408
+ if (keyOid === O("ecPublicKey") || MONT_KA[keyOid]) {
21409
+ _assertRecipientKeys(desc, _AGREE_RECIPIENT_KEYS, "key-agreement certificate");
21410
+ return _buildKari(cek, cert, mergeOpts(opts, desc, _AGREE_RECIPIENT_KEYS, consumed));
21411
+ }
21412
+ if (KEM_WC[keyOid]) {
21413
+ _assertRecipientKeys(desc, _AGREE_RECIPIENT_KEYS, "KEM certificate");
21414
+ return _buildKemri(cek, cert, mergeOpts(opts, desc, _AGREE_RECIPIENT_KEYS, consumed));
21415
+ }
21226
21416
  throw _err("cms/unsupported-algorithm", "unsupported recipient certificate key algorithm " + keyOid);
21227
21417
  }
21228
21418
  throw _err("cms/bad-input", "a recipient needs { cert }, { password }, or { kek, kekId }");
21229
21419
  }
21230
- function mergeOpts(opts, desc) {
21231
- return { oaepHash: desc.oaepHash || opts.oaepHash, keyIdentifier: desc.keyIdentifier || opts.keyIdentifier, ukm: desc.ukm != null ? desc.ukm : opts.ukm };
21420
+ function _pickDefault(desc, opts, name, known, consumed, nullish) {
21421
+ var supplied = desc[name], fromDesc = nullish ? supplied != null : !!supplied;
21422
+ if (!fromDesc && known[name] && consumed && opts[name] != null) consumed[name] = 1;
21423
+ return fromDesc ? supplied : opts[name];
21424
+ }
21425
+ function mergeOpts(opts, desc, known, consumed) {
21426
+ return {
21427
+ oaepHash: _pickDefault(desc, opts, "oaepHash", known, consumed, false),
21428
+ keyIdentifier: _pickDefault(desc, opts, "keyIdentifier", known, consumed, false),
21429
+ ukm: _pickDefault(desc, opts, "ukm", known, consumed, true)
21430
+ };
21232
21431
  }
21233
21432
  function _taggedRecipient(r) {
21234
21433
  if (r.tag == null) return r.node;
@@ -21244,19 +21443,67 @@ var require_cms_encrypt = __commonJS({
21244
21443
  });
21245
21444
  return forcesTwo ? 2 : 0;
21246
21445
  }
21446
+ var _ENCRYPT_OPTS_AEAD = {
21447
+ contentEncryptionAlgorithm: 1,
21448
+ contentType: 1,
21449
+ authAttrs: 1,
21450
+ oaepHash: 1,
21451
+ keyIdentifier: 1,
21452
+ ukm: 1,
21453
+ pem: 1
21454
+ };
21455
+ var _ENCRYPT_OPTS_CBC = {
21456
+ contentEncryptionAlgorithm: 1,
21457
+ contentType: 1,
21458
+ oaepHash: 1,
21459
+ keyIdentifier: 1,
21460
+ ukm: 1,
21461
+ pem: 1
21462
+ };
21463
+ var _AUTHENTICATE_OPTS_ATTRS = {
21464
+ macAlgorithm: 1,
21465
+ digestAlgorithm: 1,
21466
+ authenticatedAttributes: 1,
21467
+ authAttrs: 1,
21468
+ contentType: 1,
21469
+ keyIdentifier: 1,
21470
+ oaepHash: 1,
21471
+ ukm: 1,
21472
+ pem: 1
21473
+ };
21474
+ var _AUTHENTICATE_OPTS_BARE = {
21475
+ macAlgorithm: 1,
21476
+ authenticatedAttributes: 1,
21477
+ contentType: 1,
21478
+ keyIdentifier: 1,
21479
+ oaepHash: 1,
21480
+ ukm: 1,
21481
+ pem: 1
21482
+ };
21247
21483
  async function encrypt(content, recipients, opts) {
21248
21484
  opts = opts || {};
21249
- var contentBytes = guard.bytes.view(content, CmsError, "cms/bad-input", "content");
21250
21485
  var algName = opts.contentEncryptionAlgorithm || "aes-256-gcm";
21251
21486
  var ca = CONTENT_ALGS[algName];
21252
21487
  if (!ca) throw _err("cms/bad-input", "unsupported contentEncryptionAlgorithm " + JSON.stringify(algName));
21488
+ guard.identifier.assertKnownKeys(
21489
+ opts,
21490
+ ca.aead ? _ENCRYPT_OPTS_AEAD : _ENCRYPT_OPTS_CBC,
21491
+ _err,
21492
+ "cms/bad-input",
21493
+ function(k) {
21494
+ return "pki.cms.encrypt has an unknown option " + JSON.stringify(k) + (!ca.aead && k === "authAttrs" ? " for a CBC content algorithm; authenticated attributes are carried only by an AuthEnvelopedData, which an AEAD algorithm produces" : "");
21495
+ }
21496
+ );
21497
+ var contentBytes = guard.bytes.view(content, CmsError, "cms/bad-input", "content");
21253
21498
  var contentType = opts.contentType || "data";
21254
21499
  var cek = nodeCrypto.randomBytes(ca.keyBits / 8);
21255
21500
  try {
21256
21501
  if (!Array.isArray(recipients)) return _encryptedData(contentBytes, recipients, ca, contentType, opts, cek);
21257
21502
  if (!recipients.length) throw _err("cms/bad-input", "at least one recipient is required (RFC 5652 sec. 6.1)");
21258
21503
  var recips = [];
21259
- for (var i = 0; i < recipients.length; i++) recips.push(await _buildRecipient(cek, recipients[i], opts));
21504
+ var consumed = {};
21505
+ for (var i = 0; i < recipients.length; i++) recips.push(await _buildRecipient(cek, recipients[i], opts, consumed));
21506
+ _assertDefaultsConsumed(opts, consumed);
21260
21507
  var riNodes = recips.map(_taggedRecipient);
21261
21508
  if (ca.aead) return _emit(_authEnvelopedData(contentBytes, cek, ca, contentType, opts, riNodes, recips), "authEnvelopedData", opts);
21262
21509
  return _emit(_envelopedData(contentBytes, cek, ca, contentType, riNodes, recips), "envelopedData", opts);
@@ -21292,7 +21539,7 @@ var require_cms_encrypt = __commonJS({
21292
21539
  } catch (e) {
21293
21540
  throw _err("cms/bad-input", "an authenticated attribute type is not an OBJECT IDENTIFIER", e);
21294
21541
  }
21295
- if (guard.intrinsic.hasOwn(seenTypes, t)) throw _err("cms/bad-input", "authenticated attributes must not repeat an attribute type (RFC 5652): " + t);
21542
+ if (intrinsic.hasOwn(seenTypes, t)) throw _err("cms/bad-input", "authenticated attributes must not repeat an attribute type (RFC 5652): " + t);
21296
21543
  seenTypes[t] = 1;
21297
21544
  if (forbidden && t === forbidden.oid) throw _err("cms/bad-input", forbidden.why);
21298
21545
  });
@@ -21321,8 +21568,18 @@ var require_cms_encrypt = __commonJS({
21321
21568
  void recips;
21322
21569
  return b.sequence(kids);
21323
21570
  }
21571
+ var _ENCRYPTED_DATA_CEK_KEYS = { cek: 1 };
21572
+ var _ENCRYPTED_DATA_PW_KEYS = { password: 1, iterations: 1, salt: 1, prf: 1 };
21324
21573
  function _encryptedData(contentBytes, desc, ca, contentType, opts, cek) {
21325
21574
  if (ca.aead) throw _err("cms/bad-input", "EncryptedData supports only CBC content encryption");
21575
+ _assertDefaultsConsumed(opts, {});
21576
+ if (desc != null && typeof desc === "object") {
21577
+ var edKeys = desc.cek != null ? _ENCRYPTED_DATA_CEK_KEYS : _ENCRYPTED_DATA_PW_KEYS;
21578
+ var edArm = desc.cek != null ? "cek" : "password";
21579
+ guard.identifier.assertKnownKeys(desc, edKeys, _err, "cms/bad-input", function(k) {
21580
+ return "unknown field " + JSON.stringify(k) + " on a " + edArm + " EncryptedData descriptor; that field is not read for this arm";
21581
+ });
21582
+ }
21326
21583
  var iv = nodeCrypto.randomBytes(16);
21327
21584
  var contentAlgNode, encKey;
21328
21585
  if (desc && desc.cek != null) {
@@ -21352,7 +21609,7 @@ var require_cms_encrypt = __commonJS({
21352
21609
  var contentAlg = pbes2.pbes2AlgId(salt, iterations, prf, ca.oid, iv);
21353
21610
  var eci = b.sequence([b.oid(O(contentType)), contentAlg, b.contextPrimitive(0, enc)]);
21354
21611
  var inner = b.sequence([b.integer(0n), eci]);
21355
- return _emit(inner, "encryptedData", { pem: opts && opts.pem != null ? opts.pem : desc.pem });
21612
+ return _emit(inner, "encryptedData", opts);
21356
21613
  } finally {
21357
21614
  guard.secret.zeroize(key, CmsError, "cms/bad-input", "the password-derived content-encryption key");
21358
21615
  }
@@ -21377,22 +21634,33 @@ var require_cms_encrypt = __commonJS({
21377
21634
  var SUPPORTED_DIGEST = { sha256: 1, sha384: 1, sha512: 1 };
21378
21635
  async function authenticate(content, recipients, opts) {
21379
21636
  opts = opts || {};
21637
+ var withAttrs = opts.authenticatedAttributes !== false;
21638
+ guard.identifier.assertKnownKeys(
21639
+ opts,
21640
+ withAttrs ? _AUTHENTICATE_OPTS_ATTRS : _AUTHENTICATE_OPTS_BARE,
21641
+ _err,
21642
+ "cms/bad-input",
21643
+ function(k) {
21644
+ return "pki.cms.authenticate has an unknown option " + JSON.stringify(k) + (!withAttrs && (k === "digestAlgorithm" || k === "authAttrs") ? " with authenticatedAttributes: false; the MAC then covers the content octets directly and no attribute set is built" : "");
21645
+ }
21646
+ );
21380
21647
  var contentBytes = guard.bytes.view(content, CmsError, "cms/bad-input", "content");
21381
21648
  var macName = opts.macAlgorithm || "hmac-sha256";
21382
21649
  var mac = MAC_ALGS[macName];
21383
21650
  if (!mac) throw _err("cms/bad-input", "unsupported macAlgorithm " + JSON.stringify(macName) + " (hmac-sha256/384/512)");
21384
21651
  if (!Array.isArray(recipients) || !recipients.length) throw _err("cms/bad-input", "at least one recipient is required (RFC 5652 sec. 9.1)");
21385
21652
  var contentType = opts.contentType || "data";
21386
- var withAttrs = opts.authenticatedAttributes !== false;
21387
21653
  if (contentType !== "data" && !withAttrs) throw _err("cms/bad-input", "AuthenticatedData with a non-data contentType requires authenticated attributes (RFC 5652 sec. 9.1)");
21388
21654
  var macKey = nodeCrypto.randomBytes(MAC_KEY_OCTETS);
21389
21655
  try {
21390
21656
  var recips = [];
21391
- for (var i = 0; i < recipients.length; i++) recips.push(await _buildRecipient(macKey, recipients[i], opts));
21657
+ var consumedAuth = {};
21658
+ for (var i = 0; i < recipients.length; i++) recips.push(await _buildRecipient(macKey, recipients[i], opts, consumedAuth));
21659
+ _assertDefaultsConsumed(opts, consumedAuth);
21392
21660
  var riNodes = recips.map(_taggedRecipient);
21393
- var digestName = opts.digestAlgorithm || mac.node;
21394
21661
  var digestAlgTagged = null, authAttrsDer = null, preimage;
21395
21662
  if (withAttrs) {
21663
+ var digestName = opts.digestAlgorithm || mac.node;
21396
21664
  if (!SUPPORTED_DIGEST[digestName]) throw _err("cms/bad-input", "unsupported digestAlgorithm " + JSON.stringify(digestName) + " (sha256/384/512)");
21397
21665
  var mdDigest = nodeCrypto.createHash(digestName).update(contentBytes).digest();
21398
21666
  var pairs = [
@@ -21444,6 +21712,7 @@ var require_cms_decrypt = __commonJS({
21444
21712
  var webcrypto = require_webcrypto();
21445
21713
  var frameworkError = require_framework_error();
21446
21714
  var guard = require_guard_all();
21715
+ var intrinsic = require_guard_intrinsic();
21447
21716
  var pbes2 = require_pbes2();
21448
21717
  var b = asn1.build;
21449
21718
  var subtle = webcrypto.webcrypto.subtle;
@@ -21746,8 +22015,8 @@ var require_cms_decrypt = __commonJS({
21746
22015
  }
21747
22016
  function _assertContentCipherMode(eci, ct) {
21748
22017
  var oidStr = eci.contentEncryptionAlgorithm.oid;
21749
- var isAead = guard.intrinsic.hasOwn(AEAD_ALGS, oidStr);
21750
- if (!isAead && !guard.intrinsic.hasOwn(CONTENT_MODE, oidStr)) return;
22018
+ var isAead = intrinsic.hasOwn(AEAD_ALGS, oidStr);
22019
+ if (!isAead && !intrinsic.hasOwn(CONTENT_MODE, oidStr)) return;
21751
22020
  if (ct === "authEnvelopedData") {
21752
22021
  if (isAead) return;
21753
22022
  throw _err("cms/unsupported-algorithm", "contentEncryptionAlgorithm " + oidStr + " is not an authenticated encryption algorithm, which authEnvelopedData requires (RFC 5083 sec. 2)");
@@ -21757,9 +22026,9 @@ var require_cms_decrypt = __commonJS({
21757
22026
  }
21758
22027
  async function _openContent(parsed, eci, cek, ct) {
21759
22028
  var alg = eci.contentEncryptionAlgorithm;
21760
- var keyBits = guard.intrinsic.hasOwn(CONTENT_KEYBITS, alg.oid) ? CONTENT_KEYBITS[alg.oid] : 0;
22029
+ var keyBits = intrinsic.hasOwn(CONTENT_KEYBITS, alg.oid) ? CONTENT_KEYBITS[alg.oid] : 0;
21761
22030
  if (!keyBits) {
21762
- if (guard.intrinsic.hasOwn(AEAD_ALGS, alg.oid) && AEAD_ALGS[alg.oid] === "ccm") {
22031
+ if (intrinsic.hasOwn(AEAD_ALGS, alg.oid) && AEAD_ALGS[alg.oid] === "ccm") {
21763
22032
  throw _err("cms/unsupported-algorithm", "contentEncryptionAlgorithm " + alg.oid + " is AES-CCM. RFC 5084 sec. 3.1 permits it for this content type; this toolkit implements AES-GCM only for content encryption");
21764
22033
  }
21765
22034
  throw _err("cms/unsupported-algorithm", "unsupported contentEncryptionAlgorithm " + alg.oid);
@@ -22192,11 +22461,12 @@ var require_cms_verify = __commonJS({
22192
22461
  var cmsDecrypt = require_cms_decrypt();
22193
22462
  var cmsCompress = require_cms_compress();
22194
22463
  var signScheme = require_sign_scheme();
22195
- var MLDSA_SUITABLE_DIGEST = signScheme.MLDSA_SUITABLE_DIGEST;
22464
+ var _mldsaDigestSuitable = signScheme.mldsaDigestSuitable;
22196
22465
  var SLHDSA_BY_OID = signScheme.SLHDSA_BY_OID;
22197
22466
  var validator = require_validator_all();
22198
22467
  var compositeSig = require_composite_sig();
22199
22468
  var guard = require_guard_all();
22469
+ var intrinsic = require_guard_intrinsic();
22200
22470
  var frameworkError = require_framework_error();
22201
22471
  var pkix = require_schema_pkix();
22202
22472
  var CmsError = frameworkError.CmsError;
@@ -22216,7 +22486,7 @@ var require_cms_verify = __commonJS({
22216
22486
  };
22217
22487
  var SIG_HASH = { sha1: "SHA-1", sha256: "SHA-256", sha384: "SHA-384", sha512: "SHA-512" };
22218
22488
  function _supportedDigest(name) {
22219
- return !!DIGEST_HASH[name];
22489
+ return intrinsic.hasOwn(DIGEST_HASH, name) && !!DIGEST_HASH[name];
22220
22490
  }
22221
22491
  function _computeDigest(name, content) {
22222
22492
  return subtle.digest(DIGEST_HASH[name], content).then(function(d) {
@@ -22454,7 +22724,7 @@ var require_cms_verify = __commonJS({
22454
22724
  if ((scheme.kind === "mldsa" || scheme.kind === "slhdsa") && si.signedAttrsBytes && (si.digestAlgorithm.name === "shake128" || si.digestAlgorithm.name === "shake256") && dp !== null && dp !== void 0) return Promise.resolve({ ok: false, code: "cms/unsupported-algorithm", sid: si.sid, message: "a SHAKE digestAlgorithm carries no parameters (RFC 8702 sec. 3.1)" });
22455
22725
  var sigHash = pss ? pss.hash : scheme.hash || digestHash;
22456
22726
  if (scheme.kind !== "eddsa" && scheme.kind !== "mldsa" && scheme.kind !== "slhdsa" && !sigHash || si.signedAttrsBytes && !_supportedDigest(si.digestAlgorithm.name)) return Promise.resolve({ ok: false, code: "cms/unsupported-algorithm", sid: si.sid, message: "unsupported digest algorithm " + JSON.stringify(si.digestAlgorithm.name) });
22457
- if (scheme.kind === "mldsa" && si.signedAttrsBytes && !MLDSA_SUITABLE_DIGEST[scheme.name][si.digestAlgorithm.name]) return Promise.resolve({ ok: false, code: "cms/unsupported-algorithm", sid: si.sid, message: "the " + si.digestAlgorithm.name + " message digest is below the security strength of " + scheme.name + " (RFC 9882 sec. 3.3)" });
22727
+ if (scheme.kind === "mldsa" && si.signedAttrsBytes && !_mldsaDigestSuitable(scheme.name, si.digestAlgorithm.name)) return Promise.resolve({ ok: false, code: "cms/unsupported-algorithm", sid: si.sid, message: "the " + si.digestAlgorithm.name + " message digest is below the security strength of " + scheme.name + " (RFC 9882 sec. 3.3)" });
22458
22728
  if (scheme.kind === "slhdsa" && si.signedAttrsBytes && si.digestAlgorithm.name !== scheme.digest) return Promise.resolve({ ok: false, code: "cms/unsupported-algorithm", sid: si.sid, message: "SLH-DSA " + scheme.name + " requires the " + scheme.digest + " message digest (RFC 9814 sec. 4)" });
22459
22729
  var signers = _findSignerCerts(si.sid, parsedCerts);
22460
22730
  if (!signers.length) return Promise.resolve({ ok: false, code: "cms/signer-cert-not-found", sid: si.sid, message: "no certificate matches this SignerInfo's signer identifier" });
@@ -22666,7 +22936,9 @@ var require_cms_verify = __commonJS({
22666
22936
  });
22667
22937
  })).then(function(signers) {
22668
22938
  var res = {
22669
- valid: signers.length > 0 && signers.every(function(s) {
22939
+ // Signature soundness is decided by comparison for the same reason the trust verdict below
22940
+ // is: `every` replaced after load reports the whole set sound without reading one signer.
22941
+ valid: signers.length > 0 && guard.list.allMatch(signers, function(s) {
22670
22942
  return s.ok === true;
22671
22943
  }),
22672
22944
  eContentType: parsed.encapContentInfo.eContentType,
@@ -22696,7 +22968,7 @@ var require_cms_verify = __commonJS({
22696
22968
  });
22697
22969
  var out = {}, k;
22698
22970
  for (k in v) {
22699
- if (!Object.prototype.hasOwnProperty.call(v, k)) continue;
22971
+ if (!intrinsic.hasOwn(v, k)) continue;
22700
22972
  out[k] = _cloneAnchorValue(v[k], depth + 1);
22701
22973
  }
22702
22974
  return out;
@@ -22736,6 +23008,11 @@ var require_cms_verify = __commonJS({
22736
23008
  }
22737
23009
  return true;
22738
23010
  }
23011
+ function _allTrusted(signers) {
23012
+ return guard.list.allMatch(signers, function(s) {
23013
+ return s.trusted === true;
23014
+ });
23015
+ }
22739
23016
  function _applyTrust(res, parsedCerts, cfg) {
22740
23017
  res.trusted = false;
22741
23018
  res.signers.forEach(function(s) {
@@ -22780,9 +23057,7 @@ var require_cms_verify = __commonJS({
22780
23057
  });
22781
23058
  });
22782
23059
  }, Promise.resolve()).then(function() {
22783
- res.trusted = res.valid && res.signers.length > 0 && res.signers.every(function(s) {
22784
- return s.trusted === true;
22785
- });
23060
+ res.trusted = res.valid && res.signers.length > 0 && _allTrusted(res.signers);
22786
23061
  });
22787
23062
  }
22788
23063
  function _addCert(out, der) {
@@ -23688,6 +23963,7 @@ var require_path_validate = __commonJS({
23688
23963
  var cmsVerify = require_cms_verify();
23689
23964
  var cmpSession = require_cmp_session();
23690
23965
  var guard = require_guard_all();
23966
+ var intrinsic = require_guard_intrinsic();
23691
23967
  var constants = require_constants();
23692
23968
  var validator = require_validator_all();
23693
23969
  var cms = require_schema_cms();
@@ -23702,6 +23978,13 @@ var require_path_validate = __commonJS({
23702
23978
  function pathCode(e, fallback) {
23703
23979
  return e && typeof e.code === "string" && e.code.indexOf("path/") === 0 ? e.code : fallback;
23704
23980
  }
23981
+ var contains = guard.list.contains;
23982
+ var containsAll = guard.list.containsAll;
23983
+ function mapsAnyPolicy(mappings) {
23984
+ return guard.list.anyMatches(mappings, function(m) {
23985
+ return !!m && (m.issuerDomainPolicy === OID.anyPolicy || m.subjectDomainPolicy === OID.anyPolicy);
23986
+ });
23987
+ }
23705
23988
  var NS = pkix.makeNS("path", PathError, oid);
23706
23989
  var EXT_DECODERS = pkix.certExtensionDecoders(NS).byOid;
23707
23990
  var subtle = webcrypto.webcrypto.subtle;
@@ -24171,7 +24454,7 @@ var require_path_validate = __commonJS({
24171
24454
  return (Buffer.isBuffer(base) || base instanceof Uint8Array) && (base.length === 8 || base.length === 32);
24172
24455
  // iPAddress: address + mask
24173
24456
  case 4:
24174
- return base !== null && typeof base === "object" && !!base.rdns && Array.isArray(base.rdns);
24457
+ return base !== null && typeof base === "object" && !!base.rdns && intrinsic.isArray(base.rdns);
24175
24458
  // directoryName
24176
24459
  default:
24177
24460
  return base !== void 0;
@@ -24179,7 +24462,7 @@ var require_path_validate = __commonJS({
24179
24462
  }
24180
24463
  function checkedSubtreeSeeds(list, optName) {
24181
24464
  if (list === void 0 || list === null) return [];
24182
- if (!Array.isArray(list)) throw E("path/bad-input", "validate: opts." + optName + " must be an array of { tag, base } subtree entries");
24465
+ if (!intrinsic.isArray(list)) throw E("path/bad-input", "validate: opts." + optName + " must be an array of { tag, base } subtree entries");
24183
24466
  return list.map(function(st) {
24184
24467
  if (!st || typeof st !== "object" || !Number.isInteger(st.tag) || st.tag < 0 || st.tag > 8 || !isSubtreeBaseValid(st.tag, st.base)) {
24185
24468
  throw E("path/bad-input", "validate: opts." + optName + " entries must be { tag: <GeneralName tag number 0..8>, base: <that form's constraint value> }");
@@ -24238,7 +24521,7 @@ var require_path_validate = __commonJS({
24238
24521
  }
24239
24522
  var matched = false;
24240
24523
  leavesAt(state.validPolicyTree, depth).forEach(function(node) {
24241
- if (node.expectedPolicySet.indexOf(p.policyIdentifier) !== -1) {
24524
+ if (contains(node.expectedPolicySet, p.policyIdentifier)) {
24242
24525
  addChild(state, node, p.policyIdentifier, p.qualifiersBytes, [p.policyIdentifier], checks);
24243
24526
  matched = true;
24244
24527
  }
@@ -24252,7 +24535,7 @@ var require_path_validate = __commonJS({
24252
24535
  if (anyPolicyPresent && anyPolicyActive) {
24253
24536
  leavesAt(state.validPolicyTree, depth).forEach(function(node) {
24254
24537
  node.expectedPolicySet.forEach(function(ep) {
24255
- var already = node.children.some(function(ch) {
24538
+ var already = guard.list.anyMatches(node.children, function(ch) {
24256
24539
  return ch.validPolicy === ep;
24257
24540
  });
24258
24541
  if (!already) addChild(state, node, ep, anyPolicyQualifiers, [ep], checks);
@@ -24314,9 +24597,7 @@ var require_path_validate = __commonJS({
24314
24597
  }
24315
24598
  if (!eku) return false;
24316
24599
  var purposes = eku.value;
24317
- var ok = purposes.indexOf(OID.anyExtendedKeyUsage) !== -1 || requiredEku.every(function(p) {
24318
- return purposes.indexOf(p) !== -1;
24319
- });
24600
+ var ok = contains(purposes, OID.anyExtendedKeyUsage) || containsAll(purposes, requiredEku);
24320
24601
  checks.push({ name: "extendedKeyUsage", ok, code: ok ? void 0 : "path/eku-not-permitted" });
24321
24602
  return !ok;
24322
24603
  }
@@ -24333,9 +24614,7 @@ var require_path_validate = __commonJS({
24333
24614
  return { fatal: true, error: e };
24334
24615
  }
24335
24616
  if (pm) {
24336
- var badAny = pm.value.some(function(m) {
24337
- return m.issuerDomainPolicy === OID.anyPolicy || m.subjectDomainPolicy === OID.anyPolicy;
24338
- });
24617
+ var badAny = mapsAnyPolicy(pm.value);
24339
24618
  if (badAny) {
24340
24619
  checks.push({ name: "policyMappings", ok: false, code: "path/bad-policy" });
24341
24620
  return { fatal: true, error: E("path/bad-policy", "policyMappings must not map to or from anyPolicy (RFC 5280 6.1.4(a))") };
@@ -24464,8 +24743,8 @@ var require_path_validate = __commonJS({
24464
24743
  for (var i = 0; i < cert.extensions.length; i++) {
24465
24744
  var ext = cert.extensions[i];
24466
24745
  if (!ext.critical) continue;
24467
- if (!PROCESSED_EXTENSIONS[ext.oid]) return ext.oid;
24468
- if (isTarget && TARGET_UNPROCESSED_IF_CRITICAL[ext.oid]) return ext.oid;
24746
+ if (!intrinsic.hasOwn(PROCESSED_EXTENSIONS, ext.oid)) return ext.oid;
24747
+ if (isTarget && intrinsic.hasOwn(TARGET_UNPROCESSED_IF_CRITICAL, ext.oid)) return ext.oid;
24469
24748
  }
24470
24749
  return null;
24471
24750
  }
@@ -24511,7 +24790,7 @@ var require_path_validate = __commonJS({
24511
24790
  "path/bad-input",
24512
24791
  "pki.path.validate has an unknown option. The anchor here is `trustAnchor`, singular; pki.path.build takes `trustAnchors`. The unknown option was: "
24513
24792
  );
24514
- if (!Array.isArray(path)) throw E("path/bad-input", "validate: path must be an array of certificates");
24793
+ if (!intrinsic.isArray(path)) throw E("path/bad-input", "validate: path must be an array of certificates");
24515
24794
  var maxCerts = guard.limits.cap(opts.maxPathCerts, "validate: opts.maxPathCerts", constants.LIMITS.PATH_MAX_CERTS, { E, code: "path/bad-input", min: 1 });
24516
24795
  if (path.length > maxCerts) throw E("path/bad-input", "validate: the certification path has " + path.length + " certificates, exceeding the maxPathCerts limit (" + maxCerts + ")");
24517
24796
  var certs = path.map(function(c, ci) {
@@ -24523,7 +24802,7 @@ var require_path_validate = __commonJS({
24523
24802
  guard.time.assertValid(opts.time, E, "path/bad-input", "validate: opts.time (the always-on validity-window check date)");
24524
24803
  guard.limits.cap(opts.maxPolicyNodes, "validate: opts.maxPolicyNodes", void 0, { E, code: "path/bad-input", min: 1 });
24525
24804
  if (opts.userInitialPolicySet !== void 0) {
24526
- var uipsOk = Array.isArray(opts.userInitialPolicySet) && opts.userInitialPolicySet.length > 0 && opts.userInitialPolicySet.every(function(p) {
24805
+ var uipsOk = intrinsic.isArray(opts.userInitialPolicySet) && opts.userInitialPolicySet.length > 0 && guard.list.allMatch(opts.userInitialPolicySet, function(p) {
24527
24806
  return typeof p === "string" && p.length > 0;
24528
24807
  });
24529
24808
  if (!uipsOk) throw E("path/bad-input", "validate: opts.userInitialPolicySet must be a non-empty array of policy OID strings");
@@ -24682,9 +24961,7 @@ var require_path_validate = __commonJS({
24682
24961
  checks.push({ name: "policyMappings", ok: false, code: "path/bad-policy" });
24683
24962
  failed = true;
24684
24963
  }
24685
- if (lpm && lpm.value.some(function(m) {
24686
- return m.issuerDomainPolicy === OID.anyPolicy || m.subjectDomainPolicy === OID.anyPolicy;
24687
- })) {
24964
+ if (lpm && mapsAnyPolicy(lpm.value)) {
24688
24965
  checks.push({ name: "policyMappings", ok: false, code: "path/bad-policy" });
24689
24966
  failed = true;
24690
24967
  }
@@ -24718,7 +24995,7 @@ var require_path_validate = __commonJS({
24718
24995
  }
24719
24996
  if (checkPurpose && ta.purposes) {
24720
24997
  anchorPurposeApplied = true;
24721
- if (ta.purposes[checkPurpose] !== true) {
24998
+ if (!intrinsic.hasOwn(ta.purposes, checkPurpose) || ta.purposes[checkPurpose] !== true) {
24722
24999
  checks.push({ name: "purposeTrust", ok: false, code: "path/purpose-not-trusted" });
24723
25000
  failed = true;
24724
25001
  }
@@ -24741,7 +25018,7 @@ var require_path_validate = __commonJS({
24741
25018
  var policyOk = state.explicitPolicy > 0 || ucps.length > 0;
24742
25019
  if (!policyOk) {
24743
25020
  var last = state.results[state.results.length - 1];
24744
- if (!last.checks.some(function(c) {
25021
+ if (!guard.list.anyMatches(last.checks, function(c) {
24745
25022
  return c.code === "path/policy-required";
24746
25023
  })) {
24747
25024
  last.checks.push({ name: "policy", ok: false, code: "path/policy-required" });
@@ -24776,7 +25053,7 @@ var require_path_validate = __commonJS({
24776
25053
  function userConstrainedPolicies(state, n) {
24777
25054
  if (!state.validPolicyTree) return [];
24778
25055
  var uips = state.userInitialPolicySet;
24779
- var anyUser = uips.indexOf(OID.anyPolicy) !== -1;
25056
+ var anyUser = contains(uips, OID.anyPolicy);
24780
25057
  var leaves = leavesAt(state.validPolicyTree, n);
24781
25058
  var explicit = {}, hasAnyLeaf = false;
24782
25059
  leaves.forEach(function(node) {
@@ -24785,7 +25062,7 @@ var require_path_validate = __commonJS({
24785
25062
  });
24786
25063
  var set = {};
24787
25064
  Object.keys(explicit).forEach(function(p) {
24788
- if (anyUser || uips.indexOf(p) !== -1) set[p] = true;
25065
+ if (anyUser || contains(uips, p)) set[p] = true;
24789
25066
  });
24790
25067
  if (hasAnyLeaf) {
24791
25068
  if (anyUser) set[OID.anyPolicy] = true;
@@ -25137,7 +25414,7 @@ var require_path_validate = __commonJS({
25137
25414
  }
25138
25415
  for (var dj = 0; dj < classified.deltas.length; dj++) {
25139
25416
  var dRec = classified.deltas[dj];
25140
- if (consumedDeltas.indexOf(dRec) !== -1) continue;
25417
+ if (contains(consumedDeltas, dRec)) continue;
25141
25418
  if (dRec.accounted) continue;
25142
25419
  if (!await gateCrl(dRec)) continue;
25143
25420
  sawUnmergedDelta = true;
@@ -25229,7 +25506,7 @@ var require_path_validate = __commonJS({
25229
25506
  var historical = ctx.historicalMode === true;
25230
25507
  var issuerNameCandidates = [cert.issuer.bytes];
25231
25508
  function addNameCandidate(nm) {
25232
- if (nm && nm.bytes && !issuerNameCandidates.some(function(e) {
25509
+ if (nm && nm.bytes && !guard.list.anyMatches(issuerNameCandidates, function(e) {
25233
25510
  return e.equals(nm.bytes);
25234
25511
  })) issuerNameCandidates.push(nm.bytes);
25235
25512
  }
@@ -25311,7 +25588,7 @@ var require_path_validate = __commonJS({
25311
25588
  var issuerCtx = { workingPublicKey: issuerCert.subjectPublicKeyInfo.bytes, workingIssuerName: issuerCert.subject, issuerCert };
25312
25589
  var issuerNameCandidates = [cert.issuer.bytes];
25313
25590
  function add(nm) {
25314
- if (nm && nm.bytes && !issuerNameCandidates.some(function(e) {
25591
+ if (nm && nm.bytes && !guard.list.anyMatches(issuerNameCandidates, function(e) {
25315
25592
  return e.equals(nm.bytes);
25316
25593
  })) issuerNameCandidates.push(nm.bytes);
25317
25594
  }
@@ -25355,20 +25632,20 @@ var require_path_validate = __commonJS({
25355
25632
  }
25356
25633
  function _hasPurposeScopedMetadata(ta) {
25357
25634
  if (!ta || typeof ta !== "object") return false;
25358
- return ["distrustAfter", "purposes"].some(function(k) {
25635
+ return guard.list.anyMatches(["distrustAfter", "purposes"], function(k) {
25359
25636
  var m = ta[k];
25360
25637
  return !!m && typeof m === "object" && Object.keys(m).length > 0;
25361
25638
  });
25362
25639
  }
25363
25640
  function assertAnchorConstraints(ta, checkPurpose) {
25364
- var d = checkPurpose && ta && ta.distrustAfter ? ta.distrustAfter[checkPurpose] : null;
25641
+ var d = checkPurpose && ta && ta.distrustAfter && intrinsic.hasOwn(ta.distrustAfter, checkPurpose) ? ta.distrustAfter[checkPurpose] : null;
25365
25642
  if (d == null) return null;
25366
25643
  return guard.time.assertValid(d, E, "path/bad-input", "trustAnchor.distrustAfter." + checkPurpose);
25367
25644
  }
25368
25645
  function resolvePurposeOpts(opts) {
25369
25646
  var requiredEku = null;
25370
25647
  if (opts.requiredEku !== void 0) {
25371
- if (!Array.isArray(opts.requiredEku) || opts.requiredEku.length === 0) {
25648
+ if (!intrinsic.isArray(opts.requiredEku) || opts.requiredEku.length === 0) {
25372
25649
  throw E("path/bad-input", "validate: opts.requiredEku must be a non-empty array of key-purpose OID names or dotted OID strings");
25373
25650
  }
25374
25651
  requiredEku = opts.requiredEku.map(function(p) {
@@ -25396,7 +25673,7 @@ var require_path_validate = __commonJS({
25396
25673
  }
25397
25674
  function toAnchor(entry) {
25398
25675
  if (entry && typeof entry === "object" && !Buffer.isBuffer(entry) && entry.name && entry.publicKey && entry.algorithm) {
25399
- if (!Array.isArray(entry.name.rdns) || !Buffer.isBuffer(entry.publicKey) || typeof entry.algorithm !== "string") {
25676
+ if (!intrinsic.isArray(entry.name.rdns) || !Buffer.isBuffer(entry.publicKey) || typeof entry.algorithm !== "string") {
25400
25677
  throw E("path/bad-input", "build: a trustAnchor tuple must be { name: { rdns: [...] }, publicKey: Buffer, algorithm: OID string }");
25401
25678
  }
25402
25679
  return entry;
@@ -25450,9 +25727,9 @@ var require_path_validate = __commonJS({
25450
25727
  counter.tick();
25451
25728
  n += 1;
25452
25729
  var cand = scored[ci].cand, candKey = identityKey(cand);
25453
- if (frame.keys.has(candKey)) continue;
25730
+ if (intrinsic.setHas(frame.keys, candKey)) continue;
25454
25731
  var childKeys = new Set(frame.keys);
25455
- childKeys.add(candKey);
25732
+ intrinsic.setAdd(childKeys, candKey);
25456
25733
  stack.push({ chain: [cand].concat(frame.chain), hop: frame.hop + 1, keys: childKeys });
25457
25734
  }
25458
25735
  return n;
@@ -25509,16 +25786,16 @@ var require_path_validate = __commonJS({
25509
25786
  if (_isBlockedAiaHost(u.hostname)) continue;
25510
25787
  if (net.isIP(u.hostname.replace(/^\[(.*)\]$/, "$1")) === 0 && !aia.transportGuardsAddresses) continue;
25511
25788
  u.hash = "";
25512
- if (aia.fetchedUrls.has(u.href) || seenThisCert.has(u.href)) continue;
25789
+ if (intrinsic.setHas(aia.fetchedUrls, u.href) || intrinsic.setHas(seenThisCert, u.href)) continue;
25513
25790
  if (seenThisCert.size >= aia.maxPerCert) break;
25514
- seenThisCert.add(u.href);
25791
+ intrinsic.setAdd(seenThisCert, u.href);
25515
25792
  uris.push(u.href);
25516
25793
  }
25517
25794
  var out = [];
25518
25795
  for (var k = 0; k < uris.length; k++) {
25519
- if (aia.fetchedUrls.has(uris[k])) continue;
25796
+ if (intrinsic.setHas(aia.fetchedUrls, uris[k])) continue;
25520
25797
  if (aia.fetches >= aia.maxFetches) break;
25521
- aia.fetchedUrls.add(uris[k]);
25798
+ intrinsic.setAdd(aia.fetchedUrls, uris[k]);
25522
25799
  aia.fetches += 1;
25523
25800
  var certs;
25524
25801
  try {
@@ -25579,7 +25856,7 @@ var require_path_validate = __commonJS({
25579
25856
  }
25580
25857
  var poolInput = opts.candidates !== void 0 ? opts.candidates : opts.intermediates;
25581
25858
  if (poolInput === void 0) poolInput = [];
25582
- if (!Array.isArray(poolInput)) throw E("path/bad-input", "build: opts.candidates must be an array of certificates");
25859
+ if (!intrinsic.isArray(poolInput)) throw E("path/bad-input", "build: opts.candidates must be an array of certificates");
25583
25860
  var poolCeiling = constants.LIMITS.PATH_BUILD_MAX_CANDIDATES;
25584
25861
  if (poolInput.length > poolCeiling) throw E("path/bad-input", "build: the candidate pool has " + poolInput.length + " certificates, exceeding the " + poolCeiling + " ceiling");
25585
25862
  var pool;
@@ -25589,8 +25866,8 @@ var require_path_validate = __commonJS({
25589
25866
  throw E("path/bad-input", "build: a candidate certificate did not parse", e);
25590
25867
  }
25591
25868
  var poolDerKeys = /* @__PURE__ */ new Set();
25592
- for (var pdk = 0; pdk < pool.length; pdk++) poolDerKeys.add(certDerKey(pool[pdk]));
25593
- if (!Array.isArray(opts.trustAnchors) || opts.trustAnchors.length === 0) throw E("path/bad-input", "build: opts.trustAnchors must be a non-empty array of anchor tuples or root certificates");
25869
+ for (var pdk = 0; pdk < pool.length; pdk++) intrinsic.setAdd(poolDerKeys, certDerKey(pool[pdk]));
25870
+ if (!intrinsic.isArray(opts.trustAnchors) || opts.trustAnchors.length === 0) throw E("path/bad-input", "build: opts.trustAnchors must be a non-empty array of anchor tuples or root certificates");
25594
25871
  var anchors = opts.trustAnchors.map(toAnchor);
25595
25872
  guard.time.assertValid(opts.time, E, "path/bad-input", "build: opts.time (the validity-window check date, forwarded to validate)");
25596
25873
  var effectiveMaxCerts = guard.limits.cap(opts.maxPathCerts, "build: opts.maxPathCerts", constants.LIMITS.PATH_MAX_CERTS, { E, code: "path/bad-input", min: 1 });
@@ -25647,7 +25924,7 @@ var require_path_validate = __commonJS({
25647
25924
  };
25648
25925
  var forwarded = /* @__PURE__ */ Object.create(null);
25649
25926
  Object.keys(_VALIDATE_OPTS).forEach(function(k) {
25650
- if (Object.prototype.hasOwnProperty.call(BUILD_ONLY_OPT, k)) return;
25927
+ if (intrinsic.hasOwn(BUILD_ONLY_OPT, k)) return;
25651
25928
  if (k in opts) forwarded[k] = opts[k];
25652
25929
  });
25653
25930
  function validateOpts(anchor) {
@@ -25686,8 +25963,8 @@ var require_path_validate = __commonJS({
25686
25963
  var fetched = await _fetchAiaIssuers(fbCur, aiaCtx);
25687
25964
  for (var fj = 0; fj < fetched.length; fj++) {
25688
25965
  var fdk = certDerKey(fetched[fj]);
25689
- if (poolDerKeys.has(fdk)) continue;
25690
- poolDerKeys.add(fdk);
25966
+ if (intrinsic.setHas(poolDerKeys, fdk)) continue;
25967
+ intrinsic.setAdd(poolDerKeys, fdk);
25691
25968
  if (pool.length < poolCeiling) pool.push(fetched[fj]);
25692
25969
  }
25693
25970
  }
@@ -25768,6 +26045,8 @@ var require_tls_cert_compress = __commonJS({
25768
26045
  "use strict";
25769
26046
  var C = require_constants();
25770
26047
  var guard = require_guard_all();
26048
+ var intrinsic = require_guard_intrinsic();
26049
+ var _hasOwn = intrinsic.hasOwn;
25771
26050
  var frameworkError = require_framework_error();
25772
26051
  var validator = require_validator_all();
25773
26052
  var ByteWriter = require_byte_writer();
@@ -25798,7 +26077,7 @@ var require_tls_cert_compress = __commonJS({
25798
26077
  }
25799
26078
  };
25800
26079
  var SUPPORTED = guard.compress.algorithms().filter(function(n) {
25801
- return Object.prototype.hasOwnProperty.call(ALG_BY_NAME, n) && typeof COMPRESS[n] === "function";
26080
+ return _hasOwn(ALG_BY_NAME, n) && typeof COMPRESS[n] === "function";
25802
26081
  });
25803
26082
  var MIN_CERT_MSG_BYTES = validator.tls.MIN_CERT_MSG_BYTES;
25804
26083
  var MAX_VECTOR_24 = validator.tls.MAX_VECTOR_24;
@@ -26765,6 +27044,8 @@ var require_cmc_build = __commonJS({
26765
27044
  var oid = require_oid();
26766
27045
  var cmsSign = require_cms_sign();
26767
27046
  var guard = require_guard_all();
27047
+ var intrinsic = require_guard_intrinsic();
27048
+ var _hasOwn = intrinsic.hasOwn;
26768
27049
  var frameworkError = require_framework_error();
26769
27050
  var CmcError = frameworkError.CmcError;
26770
27051
  var b = asn1.build;
@@ -27254,7 +27535,7 @@ var require_cmc_build = __commonJS({
27254
27535
  if (!s || typeof s !== "object") return s;
27255
27536
  var out = {}, k;
27256
27537
  for (k in s) {
27257
- if (!Object.prototype.hasOwnProperty.call(s, k)) continue;
27538
+ if (!_hasOwn(s, k)) continue;
27258
27539
  out[k] = copyValue(s[k], k === "key");
27259
27540
  }
27260
27541
  return out;
@@ -27264,7 +27545,7 @@ var require_cmc_build = __commonJS({
27264
27545
  if (!v || typeof v !== "object" || typeof v.type === "string") return v;
27265
27546
  var c = {}, ck;
27266
27547
  for (ck in v) {
27267
- if (!Object.prototype.hasOwnProperty.call(v, ck)) continue;
27548
+ if (!_hasOwn(v, ck)) continue;
27268
27549
  var cv = v[ck];
27269
27550
  c[ck] = Buffer.isBuffer(cv) || cv instanceof Uint8Array ? _own(Buffer.from(cv), isSecret) : cv;
27270
27551
  }
@@ -27378,6 +27659,8 @@ var require_cmc_verify = __commonJS({
27378
27659
  var cmsVerify = require_cms_verify();
27379
27660
  var cmsDecrypt = require_cms_decrypt();
27380
27661
  var guard = require_guard_all();
27662
+ var intrinsic = require_guard_intrinsic();
27663
+ var _hasOwn = intrinsic.hasOwn;
27381
27664
  var frameworkError = require_framework_error();
27382
27665
  var CmcError = frameworkError.CmcError;
27383
27666
  function E(code, message, cause) {
@@ -27574,7 +27857,7 @@ var require_cmc_verify = __commonJS({
27574
27857
  function _snapshotSent(sent) {
27575
27858
  var out = {}, k;
27576
27859
  for (k in sent) {
27577
- if (Object.prototype.hasOwnProperty.call(sent, k)) out[k] = sent[k];
27860
+ if (_hasOwn(sent, k)) out[k] = sent[k];
27578
27861
  }
27579
27862
  if (out.transactionId != null) {
27580
27863
  out.transactionIdValue = guard.range.authoredInteger(out.transactionId, E, "cmc/bad-input", "sent.transactionId");
@@ -27590,7 +27873,7 @@ var require_cmc_verify = __commonJS({
27590
27873
  if (out.recipient && typeof out.recipient === "object") {
27591
27874
  var r = {}, rk;
27592
27875
  for (rk in out.recipient) {
27593
- if (!Object.prototype.hasOwnProperty.call(out.recipient, rk)) continue;
27876
+ if (!_hasOwn(out.recipient, rk)) continue;
27594
27877
  r[rk] = _copyAnyBytes(out.recipient[rk]);
27595
27878
  }
27596
27879
  out.recipient = r;
@@ -27755,6 +28038,7 @@ var require_tsp_sign = __commonJS({
27755
28038
  var smime = require_schema_smime();
27756
28039
  var schemaTsp = require_schema_tsp();
27757
28040
  var guard = require_guard_all();
28041
+ var intrinsic = require_guard_intrinsic();
27758
28042
  var frameworkError = require_framework_error();
27759
28043
  var pkix = require_schema_pkix();
27760
28044
  var pkiBuild = require_pki_build();
@@ -27817,9 +28101,36 @@ var require_tsp_sign = __commonJS({
27817
28101
  [opts, "pki.tsp.sign options"]
27818
28102
  ], _sign);
27819
28103
  }
28104
+ var _TSA_KEYS = { cert: 1, key: 1 };
28105
+ var _IMPRINT_KEYS = { hashAlgorithm: 1, hashedMessage: 1 };
28106
+ var _SIGN_OPTS = {
28107
+ policy: 1,
28108
+ serialNumber: 1,
28109
+ genTime: 1,
28110
+ nonce: 1,
28111
+ accuracy: 1,
28112
+ ordering: 1,
28113
+ sid: 1,
28114
+ digestAlgorithm: 1,
28115
+ certHashAlgorithm: 1,
28116
+ additionalSignedAttributes: 1,
28117
+ pss: 1,
28118
+ pem: 1
28119
+ };
27820
28120
  function _sign(messageImprint, tsa, opts) {
27821
28121
  opts = opts || {};
28122
+ if (messageImprint && typeof messageImprint === "object" && !Buffer.isBuffer(messageImprint)) {
28123
+ guard.identifier.assertKnownKeys(messageImprint, _IMPRINT_KEYS, _err, "tsp/bad-input", function(k) {
28124
+ return "unknown messageImprint field " + JSON.stringify(k) + " (the imprint is { hashAlgorithm, hashedMessage })";
28125
+ });
28126
+ }
28127
+ guard.identifier.assertKnownKeys(opts, _SIGN_OPTS, _err, "tsp/bad-input", "pki.tsp.sign has an unknown option ");
27822
28128
  if (typeof opts !== "object" || Buffer.isBuffer(opts)) throw _err("tsp/bad-input", "pki.tsp.sign options must be an object");
28129
+ if (tsa && typeof tsa === "object" && !Buffer.isBuffer(tsa)) {
28130
+ guard.identifier.assertKnownKeys(tsa, _TSA_KEYS, _err, "tsp/bad-input", function(k) {
28131
+ return "unknown TSA field " + JSON.stringify(k) + " (the TSA is { cert, key }; a signing option belongs in the third argument)";
28132
+ });
28133
+ }
27823
28134
  var mi = messageImprint || {};
27824
28135
  if (!mi.hashAlgorithm || !NODE_DIGEST[mi.hashAlgorithm]) throw _err("tsp/unsupported-algorithm", "messageImprint.hashAlgorithm must be a supported hash name");
27825
28136
  if (!Buffer.isBuffer(mi.hashedMessage) && !(mi.hashedMessage instanceof Uint8Array)) throw _err("tsp/bad-input", "messageImprint.hashedMessage must be a Buffer");
@@ -27848,7 +28159,11 @@ var require_tsp_sign = __commonJS({
27848
28159
  pem: opts.pem
27849
28160
  });
27850
28161
  }
28162
+ var _ACCURACY_KEYS = { seconds: 1, millis: 1, micros: 1 };
27851
28163
  function _accuracy(a) {
28164
+ guard.identifier.assertKnownKeys(a, _ACCURACY_KEYS, _err, "tsp/bad-input", function(k) {
28165
+ return "unknown accuracy field " + JSON.stringify(k) + "; Accuracy is { seconds?, millis?, micros? }";
28166
+ });
27852
28167
  var f = [];
27853
28168
  if (a.seconds != null) {
27854
28169
  var s = Number(a.seconds);
@@ -27888,10 +28203,17 @@ var require_tsp_sign = __commonJS({
27888
28203
  if (!Buffer.isBuffer(mi.hashedMessage) && !(mi.hashedMessage instanceof Uint8Array)) throw _err("tsp/bad-input", "messageImprint.hashedMessage must be a Buffer");
27889
28204
  if (mi.hashedMessage.length !== HASH_LEN[mi.hashAlgorithm]) throw _err("tsp/bad-input", "messageImprint.hashedMessage length (" + mi.hashedMessage.length + ") does not match the " + mi.hashAlgorithm + " digest length (" + HASH_LEN[mi.hashAlgorithm] + ")");
27890
28205
  }
28206
+ var _REQUEST_OPTS = { reqPolicy: 1, nonce: 1, certReq: 1, extensions: 1, pem: 1 };
27891
28207
  function request(messageImprint, opts) {
27892
28208
  opts = opts || {};
27893
28209
  if (typeof opts !== "object" || Buffer.isBuffer(opts)) throw _err("tsp/bad-input", "pki.tsp.request options must be an object");
28210
+ guard.identifier.assertKnownKeys(opts, _REQUEST_OPTS, _err, "tsp/bad-input", "pki.tsp.request has an unknown option ");
27894
28211
  var mi = messageImprint || {};
28212
+ if (mi && typeof mi === "object" && !Buffer.isBuffer(mi)) {
28213
+ guard.identifier.assertKnownKeys(mi, _IMPRINT_KEYS, _err, "tsp/bad-input", function(k) {
28214
+ return "unknown messageImprint field " + JSON.stringify(k) + " (the imprint is { hashAlgorithm, hashedMessage }; a request option belongs in the second argument)";
28215
+ });
28216
+ }
27895
28217
  _assertImprint(mi);
27896
28218
  var imprint = b.sequence([_hashAlgId(mi.hashAlgorithm), b.octetString(Buffer.from(mi.hashedMessage))]);
27897
28219
  var fields = [b.integer(1n), imprint];
@@ -27900,7 +28222,7 @@ var require_tsp_sign = __commonJS({
27900
28222
  if (opts.certReq != null && typeof opts.certReq !== "boolean") throw _err("tsp/bad-input", "certReq must be a boolean");
27901
28223
  if (opts.certReq === true) fields.push(b.boolean(true));
27902
28224
  if (opts.extensions != null) {
27903
- if (!Array.isArray(opts.extensions) || !opts.extensions.every(function(e) {
28225
+ if (!Array.isArray(opts.extensions) || !guard.list.allMatch(opts.extensions, function(e) {
27904
28226
  return Buffer.isBuffer(e) || e instanceof Uint8Array;
27905
28227
  })) throw _err("tsp/bad-input", "extensions must be an array of encoded Extension DER buffers");
27906
28228
  var seenExt = {};
@@ -27920,9 +28242,11 @@ var require_tsp_sign = __commonJS({
27920
28242
  function parseRequest(input) {
27921
28243
  return schemaTsp.parseRequest(input);
27922
28244
  }
28245
+ var _RESPONSE_OPTS = { status: 1, statusString: 1, failInfo: 1, pem: 1 };
27923
28246
  function response(token, opts) {
27924
28247
  opts = opts || {};
27925
28248
  if (typeof opts !== "object" || Buffer.isBuffer(opts)) throw _err("tsp/bad-input", "pki.tsp.response options must be an object");
28249
+ guard.identifier.assertKnownKeys(opts, _RESPONSE_OPTS, _err, "tsp/bad-input", "pki.tsp.response has an unknown option ");
27926
28250
  var status = opts.status == null ? 0 : Number(opts.status);
27927
28251
  if (!Number.isInteger(status) || status < 0 || status > 5) throw _err("tsp/bad-input", "PKIStatus must be an integer in 0..5 (RFC 3161 sec. 2.4.2)");
27928
28252
  var granted = status === 0 || status === 1;
@@ -27953,7 +28277,7 @@ var require_tsp_sign = __commonJS({
27953
28277
  var _BIND_DIGEST = { sha256: "sha256", sha384: "sha384", sha512: "sha512" };
27954
28278
  function _imprintMatches(mi, data) {
27955
28279
  var name = mi.hashAlgorithm && mi.hashAlgorithm.name;
27956
- var nodeAlg = name && _VERIFY_DIGEST[name];
28280
+ var nodeAlg = name && intrinsic.hasOwn(_VERIFY_DIGEST, name) ? _VERIFY_DIGEST[name] : null;
27957
28281
  if (!nodeAlg) return "tsp/unsupported-algorithm";
27958
28282
  var wantLen = _VERIFY_DIGEST_LEN[name];
27959
28283
  if (mi.hashedMessage.length !== wantLen) return "tsp/imprint-mismatch";
@@ -28102,6 +28426,11 @@ var require_tsp_sign = __commonJS({
28102
28426
  });
28103
28427
  }
28104
28428
  var _VERIFY_OPTS = { certs: 1, trustAnchor: 1, nonce: 1, reqPolicy: 1, revocationChecker: 1 };
28429
+ function _anyCritical(extensions) {
28430
+ return guard.list.anyMatches(extensions, function(e) {
28431
+ return !!e && !!e.critical;
28432
+ });
28433
+ }
28105
28434
  async function verify(token, data, opts) {
28106
28435
  opts = opts || {};
28107
28436
  if (typeof opts !== "object" || Buffer.isBuffer(opts)) throw _err("tsp/bad-input", "pki.tsp.verify options must be an object");
@@ -28112,7 +28441,7 @@ var require_tsp_sign = __commonJS({
28112
28441
  "tsp/bad-input",
28113
28442
  "pki.tsp.verify has an unknown option (note the anchor option here is `trustAnchor`, singular, an anchor tuple -- not the `trustAnchors` certificate list pki.cms.verify takes) "
28114
28443
  );
28115
- if (opts.certs != null && (!Array.isArray(opts.certs) || !opts.certs.every(function(c) {
28444
+ if (opts.certs != null && (!Array.isArray(opts.certs) || !guard.list.allMatch(opts.certs, function(c) {
28116
28445
  return Buffer.isBuffer(c) || c instanceof Uint8Array;
28117
28446
  }))) {
28118
28447
  throw _err("tsp/bad-input", "pki.tsp.verify opts.certs must be an array of DER certificate Buffers");
@@ -28140,9 +28469,7 @@ var require_tsp_sign = __commonJS({
28140
28469
  var wantPolicy = /^\d+(\.\d+)+$/.test(opts.reqPolicy) ? opts.reqPolicy : O(opts.reqPolicy);
28141
28470
  if (tst.policy !== wantPolicy) return fail("tsp/policy-mismatch");
28142
28471
  }
28143
- if (tst.extensions && tst.extensions.some(function(e) {
28144
- return e.critical;
28145
- })) {
28472
+ if (tst.extensions && _anyCritical(tst.extensions)) {
28146
28473
  return fail("tsp/unknown-critical-extension");
28147
28474
  }
28148
28475
  var bind = _checkCertBinding(parsed.signerInfo, tsaCertDer);
@@ -28611,6 +28938,8 @@ var require_x509_sign = __commonJS({
28611
28938
  var x509 = require_schema_x509();
28612
28939
  var signScheme = require_sign_scheme();
28613
28940
  var guard = require_guard_all();
28941
+ var intrinsic = require_guard_intrinsic();
28942
+ var _isArray = intrinsic.isArray;
28614
28943
  var frameworkError = require_framework_error();
28615
28944
  var schema = require_schema_engine();
28616
28945
  var pkix = require_schema_pkix();
@@ -28631,6 +28960,17 @@ var require_x509_sign = __commonJS({
28631
28960
  return oid.byName(n);
28632
28961
  }
28633
28962
  var OID_SKI = O("subjectKeyIdentifier");
28963
+ var KNOWN_SPEC_KEYS = {
28964
+ subject: 1,
28965
+ subjectPublicKey: 1,
28966
+ notBefore: 1,
28967
+ notAfter: 1,
28968
+ serialNumber: 1,
28969
+ extensions: 1
28970
+ };
28971
+ var KNOWN_ISSUER_CERT_KEYS = { key: 1, cert: 1 };
28972
+ var KNOWN_ISSUER_EXPLICIT_KEYS = { key: 1, name: 1, publicKey: 1 };
28973
+ var KNOWN_SIGN_OPTS = { digestAlgorithm: 1, pem: 1, pss: 1 };
28634
28974
  var KNOWN_EXT_KEYS = {
28635
28975
  subjectKeyIdentifier: 1,
28636
28976
  authorityKeyIdentifier: 1,
@@ -28688,7 +29028,7 @@ var require_x509_sign = __commonJS({
28688
29028
  }
28689
29029
  function _buildExtensions(extSpec, ctx) {
28690
29030
  if (extSpec == null) return [];
28691
- if (Array.isArray(extSpec)) {
29031
+ if (_isArray(extSpec)) {
28692
29032
  var seenExt = {}, arrCa = false, arrKeyCertSign = false, arrPathLen = false;
28693
29033
  var oidBc = O("basicConstraints"), oidKu = O("keyUsage");
28694
29034
  var arr = extSpec.map(function(e, i) {
@@ -28729,7 +29069,7 @@ var require_x509_sign = __commonJS({
28729
29069
  if (bc != null) _validateBcSpec(bc);
28730
29070
  var caTrue = !!(bc && bc.cA === true);
28731
29071
  var ku = extSpec.keyUsage;
28732
- var assertsKeyCertSign = Array.isArray(ku) && ku.indexOf("keyCertSign") >= 0;
29072
+ var assertsKeyCertSign = _isArray(ku) && ku.indexOf("keyCertSign") >= 0;
28733
29073
  if (assertsKeyCertSign && !caTrue) throw _err("x509/bad-input", "keyUsage keyCertSign requires basicConstraints cA=TRUE (RFC 5280 sec. 4.2.1.3)");
28734
29074
  if (bc && bc.pathLen != null) {
28735
29075
  if (!caTrue) throw _err("x509/bad-input", "basicConstraints pathLenConstraint requires cA=TRUE (RFC 5280 sec. 4.2.1.9)");
@@ -28784,7 +29124,7 @@ var require_x509_sign = __commonJS({
28784
29124
  }
28785
29125
  function _issuedCaInfo(extSpec) {
28786
29126
  if (extSpec == null) return { cA: false, pathLen: null };
28787
- if (!Array.isArray(extSpec)) {
29127
+ if (!_isArray(extSpec)) {
28788
29128
  var bc = extSpec.basicConstraints;
28789
29129
  return { cA: !!(bc && bc.cA === true), pathLen: bc && bc.pathLen != null ? Number(bc.pathLen) : null };
28790
29130
  }
@@ -28798,7 +29138,7 @@ var require_x509_sign = __commonJS({
28798
29138
  }
28799
29139
  function _hasCriticalSan(extSpec) {
28800
29140
  if (extSpec == null) return false;
28801
- if (!Array.isArray(extSpec)) return !!extSpec.subjectAltName;
29141
+ if (!_isArray(extSpec)) return !!extSpec.subjectAltName;
28802
29142
  var sanOid = O("subjectAltName");
28803
29143
  for (var i = 0; i < extSpec.length; i++) {
28804
29144
  var n = asn1.decode(_reqDer(extSpec[i], "extension"));
@@ -28817,6 +29157,20 @@ var require_x509_sign = __commonJS({
28817
29157
  opts = opts || {};
28818
29158
  if (!spec || typeof spec !== "object" || Buffer.isBuffer(spec)) throw _err("x509/bad-input", "the certificate spec must be an object");
28819
29159
  issuer = issuer || {};
29160
+ guard.identifier.assertKnownKeys(spec, KNOWN_SPEC_KEYS, _err, "x509/bad-input", function(k) {
29161
+ return "unknown certificate spec field " + JSON.stringify(k) + (k === "issuer" ? "; the issuer is the SECOND argument to pki.x509.sign, not a spec field" : "") + (k === "extension" ? "; the extensions spec field is `extensions`" : "");
29162
+ });
29163
+ var byCert = issuer.cert != null;
29164
+ guard.identifier.assertKnownKeys(
29165
+ issuer,
29166
+ byCert ? KNOWN_ISSUER_CERT_KEYS : KNOWN_ISSUER_EXPLICIT_KEYS,
29167
+ _err,
29168
+ "x509/bad-input",
29169
+ function(k) {
29170
+ return "unknown issuer field " + JSON.stringify(k) + " for the " + (byCert ? "certificate form; issuer.cert supplies the name and the public key, so they are not read here" : "explicit form; the issuer takes { key, name, publicKey }, or { key, cert } to take both from a certificate");
29171
+ }
29172
+ );
29173
+ guard.identifier.assertKnownKeys(opts, KNOWN_SIGN_OPTS, _err, "x509/bad-input", "pki.x509.sign has an unknown option ");
28820
29174
  if (issuer.key == null) throw _err("x509/bad-input", "a signing key (issuer.key, a PKCS#8 private key) is required");
28821
29175
  var spki = _reqDer(spec.subjectPublicKey, "spec.subjectPublicKey (the SPKI DER of the certified key)");
28822
29176
  _assertValidSpki(spki, "spec.subjectPublicKey");
@@ -28844,12 +29198,13 @@ var require_x509_sign = __commonJS({
28844
29198
  guard.time.assertValid(spec.notAfter, _err, "x509/bad-input", "notAfter");
28845
29199
  if (guard.time.instantOf(spec.notBefore) > guard.time.instantOf(spec.notAfter)) throw _err("x509/bad-input", "notBefore must not be after notAfter (RFC 5280 sec. 4.1.2.5)");
28846
29200
  var validityDer = b.sequence([_timeDer(spec.notBefore, "notBefore"), _timeDer(spec.notAfter, "notAfter")]);
28847
- var exts = _buildExtensions(spec.extensions, { spki, issuerSpki, issuerCert, subjectEmpty });
28848
- if (subjectEmpty && !_hasCriticalSan(spec.extensions)) {
29201
+ var extSpec = spec.extensions;
29202
+ var exts = _buildExtensions(extSpec, { spki, issuerSpki, issuerCert, subjectEmpty });
29203
+ if (subjectEmpty && !_hasCriticalSan(extSpec)) {
28849
29204
  throw _err("x509/bad-input", "an empty subject requires a critical subjectAltName (RFC 5280 sec. 4.1.2.6)");
28850
29205
  }
28851
29206
  if (issuerPathLen != null) {
28852
- var issued = _issuedCaInfo(spec.extensions);
29207
+ var issued = _issuedCaInfo(extSpec);
28853
29208
  var selfIssued = guard.name.dnEqual(
28854
29209
  schema.walk(NAME_SCHEMA, asn1.decode(subjectDer), NS).result.rdns,
28855
29210
  schema.walk(NAME_SCHEMA, asn1.decode(issuerDer), NS).result.rdns,
@@ -29030,6 +29385,8 @@ var require_attrcert_sign = __commonJS({
29030
29385
  var x509 = require_schema_x509();
29031
29386
  var signScheme = require_sign_scheme();
29032
29387
  var guard = require_guard_all();
29388
+ var intrinsic = require_guard_intrinsic();
29389
+ var _hasOwn = intrinsic.hasOwn;
29033
29390
  var pkix = require_schema_pkix();
29034
29391
  var schema = require_schema_engine();
29035
29392
  require_path_validate();
@@ -29361,10 +29718,10 @@ var require_attrcert_sign = __commonJS({
29361
29718
  return b.sequence(attrs);
29362
29719
  }
29363
29720
  function _assertRevocationSchemesExclusive(seen) {
29364
- if (!Object.prototype.hasOwnProperty.call(seen, O("noRevAvail"))) return;
29721
+ if (!_hasOwn(seen, O("noRevAvail"))) return;
29365
29722
  var names = Object.keys(REVOCATION_POINTERS);
29366
29723
  for (var i = 0; i < names.length; i++) {
29367
- if (Object.prototype.hasOwnProperty.call(seen, names[i])) {
29724
+ if (_hasOwn(seen, names[i])) {
29368
29725
  throw _err("attrcert/bad-input", "an attribute certificate must not carry both noRevAvail and a " + REVOCATION_POINTERS[names[i]] + " revocation pointer (RFC 5755 sec. 6)");
29369
29726
  }
29370
29727
  }
@@ -29619,7 +29976,7 @@ var require_attrcert_sign = __commonJS({
29619
29976
  for (var i = 0; i < ac.extensions.length; i++) {
29620
29977
  var e = ac.extensions[i];
29621
29978
  if (e.critical !== true) continue;
29622
- if (!Object.prototype.hasOwnProperty.call(SUPPORTED_CRITICAL, e.oid)) return e.oid;
29979
+ if (!_hasOwn(SUPPORTED_CRITICAL, e.oid)) return e.oid;
29623
29980
  if (e.decoded === null || e.decoded === void 0 || e.decoded.opaque === true) return e.oid;
29624
29981
  }
29625
29982
  return null;
@@ -29645,7 +30002,7 @@ var require_attrcert_sign = __commonJS({
29645
30002
  }
29646
30003
  var revocationStatus = null;
29647
30004
  if (o.revocationStatus !== void 0) {
29648
- if (typeof o.revocationStatus !== "string" || !Object.prototype.hasOwnProperty.call(REVOCATION_STATUS, o.revocationStatus)) {
30005
+ if (typeof o.revocationStatus !== "string" || !_hasOwn(REVOCATION_STATUS, o.revocationStatus)) {
29649
30006
  throw _err("attrcert/bad-input", 'pki.attrcert.verify opts.revocationStatus must be "notRevoked" or "revoked"');
29650
30007
  }
29651
30008
  revocationStatus = o.revocationStatus;
@@ -29665,7 +30022,7 @@ var require_attrcert_sign = __commonJS({
29665
30022
  var e = ac.extensions[i];
29666
30023
  if (e.name === "noRevAvail") out.noRevAvail = true;
29667
30024
  var p = REVOCATION_POINTERS[e.oid];
29668
- if (p !== void 0 && Object.prototype.hasOwnProperty.call(REVOCATION_POINTERS, e.oid)) out.pointer = p;
30025
+ if (p !== void 0 && _hasOwn(REVOCATION_POINTERS, e.oid)) out.pointer = p;
29669
30026
  }
29670
30027
  return out;
29671
30028
  }
@@ -29757,6 +30114,8 @@ var require_crl_sign = __commonJS({
29757
30114
  var x509Schema = require_schema_x509();
29758
30115
  var signScheme = require_sign_scheme();
29759
30116
  var guard = require_guard_all();
30117
+ var intrinsic = require_guard_intrinsic();
30118
+ var _hasOwn = intrinsic.hasOwn;
29760
30119
  var frameworkError = require_framework_error();
29761
30120
  var pkix = require_schema_pkix();
29762
30121
  var schema = require_schema_engine();
@@ -29801,7 +30160,33 @@ var require_crl_sign = __commonJS({
29801
30160
  REASON_BY_NAME[CRL_REASON[v]] = Number(v);
29802
30161
  });
29803
30162
  var KNOWN_CRL_EXT_KEYS = { authorityKeyIdentifier: 1, issuingDistributionPoint: 1, deltaCRLIndicator: 1, freshestCRL: 1, authorityInfoAccess: 1 };
30163
+ var KNOWN_SPEC_KEYS = {
30164
+ issuer: 1,
30165
+ thisUpdate: 1,
30166
+ nextUpdate: 1,
30167
+ revoked: 1,
30168
+ crlNumber: 1,
30169
+ extensions: 1
30170
+ };
30171
+ var KNOWN_SPEC_KEYS_ISSUER_NAMED = {
30172
+ thisUpdate: 1,
30173
+ nextUpdate: 1,
30174
+ revoked: 1,
30175
+ crlNumber: 1,
30176
+ extensions: 1
30177
+ };
30178
+ var KNOWN_ISSUER_CERT_KEYS = { key: 1, cert: 1 };
30179
+ var KNOWN_ISSUER_EXPLICIT_KEYS = { key: 1, name: 1, publicKey: 1 };
30180
+ var KNOWN_SIGN_OPTS = { digestAlgorithm: 1, pem: 1, pss: 1 };
29804
30181
  var KNOWN_IDP_KEYS = { fullName: 1, onlyContainsUserCerts: 1, onlyContainsCACerts: 1, onlyContainsAttributeCerts: 1, indirectCRL: 1 };
30182
+ var KNOWN_REVOKED_KEYS = {
30183
+ serialNumber: 1,
30184
+ revocationDate: 1,
30185
+ reason: 1,
30186
+ invalidityDate: 1,
30187
+ certificateIssuer: 1,
30188
+ extensions: 1
30189
+ };
29805
30190
  var REQUIRED_CRITICALITY = {};
29806
30191
  [
29807
30192
  ["cRLNumber", false],
@@ -29857,10 +30242,10 @@ var require_crl_sign = __commonJS({
29857
30242
  var codeNum;
29858
30243
  if (typeof reason === "number") codeNum = reason;
29859
30244
  else if (typeof reason === "string") {
29860
- if (!Object.prototype.hasOwnProperty.call(REASON_BY_NAME, reason)) throw _err("crl/bad-reason-code", "unknown CRLReason " + JSON.stringify(reason));
30245
+ if (!_hasOwn(REASON_BY_NAME, reason)) throw _err("crl/bad-reason-code", "unknown CRLReason " + JSON.stringify(reason));
29861
30246
  codeNum = REASON_BY_NAME[reason];
29862
30247
  } else throw _err("crl/bad-reason-code", "reason must be a CRLReason name or number");
29863
- if (!Object.prototype.hasOwnProperty.call(CRL_REASON, String(codeNum))) throw _err("crl/bad-reason-code", "undefined or reserved CRLReason " + codeNum + " (RFC 5280 sec. 5.3.1)");
30248
+ if (!_hasOwn(CRL_REASON, String(codeNum))) throw _err("crl/bad-reason-code", "undefined or reserved CRLReason " + codeNum + " (RFC 5280 sec. 5.3.1)");
29864
30249
  if (codeNum === 8 && !isDelta) throw _err("crl/bad-reason-code", "removeFromCRL(8) may appear only in a delta CRL (RFC 5280 sec. 5.3.1)");
29865
30250
  return codeNum;
29866
30251
  }
@@ -29964,7 +30349,7 @@ var require_crl_sign = __commonJS({
29964
30349
  var extnId = asn1.read.oid(node.children[0]);
29965
30350
  if (seen[extnId]) throw _err("crl/bad-input", "duplicate extension " + extnId + " (RFC 5280 sec. 5.2)");
29966
30351
  seen[extnId] = true;
29967
- if (Object.prototype.hasOwnProperty.call(REQUIRED_CRITICALITY, extnId)) {
30352
+ if (_hasOwn(REQUIRED_CRITICALITY, extnId)) {
29968
30353
  if (node.children.length === 3 !== REQUIRED_CRITICALITY[extnId]) {
29969
30354
  throw _err("crl/bad-input", "pre-encoded " + (oid.name(extnId) || extnId) + " extension has the wrong criticality (RFC 5280 sec. 5.2 requires it " + (REQUIRED_CRITICALITY[extnId] ? "critical" : "non-critical") + ")");
29970
30355
  }
@@ -30012,6 +30397,9 @@ var require_crl_sign = __commonJS({
30012
30397
  var anyExt = false, seenSerials = {};
30013
30398
  var entries = entryList.map(function(e, idx) {
30014
30399
  if (!e || typeof e !== "object" || Buffer.isBuffer(e)) throw _err("crl/bad-input", "each revoked entry must be an object");
30400
+ guard.identifier.assertKnownKeys(e, KNOWN_REVOKED_KEYS, _err, "crl/bad-input", function(k) {
30401
+ return "unknown field " + JSON.stringify(k) + " in revoked entry [" + idx + "]; an entry is { serialNumber, revocationDate, reason?, invalidityDate?, extensions? }";
30402
+ });
30015
30403
  if (e.serialNumber == null) throw _err("crl/bad-input", "revoked entry [" + idx + "] requires a serialNumber");
30016
30404
  var serialTlv = _serialInteger(e.serialNumber);
30017
30405
  var serialKey = asn1.decode(serialTlv).content.toString("hex");
@@ -30044,13 +30432,13 @@ var require_crl_sign = __commonJS({
30044
30432
  if (seen[extnId]) throw _err("crl/bad-input", "duplicate entry extension " + extnId + " in revoked entry [" + idx + "]");
30045
30433
  seen[extnId] = true;
30046
30434
  if (extnId === O("certificateIssuer")) throw _err("crl/bad-input", _CERT_ISSUER_DEFERRED);
30047
- if (Object.prototype.hasOwnProperty.call(REQUIRED_ENTRY_CRITICALITY, extnId)) {
30435
+ if (_hasOwn(REQUIRED_ENTRY_CRITICALITY, extnId)) {
30048
30436
  if (xnode.children.length === 3 !== REQUIRED_ENTRY_CRITICALITY[extnId]) throw _err("crl/bad-input", "pre-encoded entry extension " + (oid.name(extnId) || extnId) + " has the wrong criticality (RFC 5280 sec. 5.3 requires it " + (REQUIRED_ENTRY_CRITICALITY[extnId] ? "critical" : "non-critical") + ")");
30049
30437
  var einner = _extInner(xnode, oid.name(extnId) || extnId);
30050
30438
  if (extnId === O("reasonCode")) {
30051
30439
  if (einner.tagClass !== "universal" || einner.tagNumber !== TAGS.ENUMERATED) throw _err("crl/bad-reason-code", "pre-encoded reasonCode value must be an ENUMERATED (RFC 5280 sec. 5.3.1)");
30052
30440
  var rc = asn1.read.enumerated(einner);
30053
- if (!Object.prototype.hasOwnProperty.call(CRL_REASON, rc.toString())) throw _err("crl/bad-reason-code", "pre-encoded reasonCode " + rc + " is undefined or reserved (RFC 5280 sec. 5.3.1)");
30441
+ if (!_hasOwn(CRL_REASON, rc.toString())) throw _err("crl/bad-reason-code", "pre-encoded reasonCode " + rc + " is undefined or reserved (RFC 5280 sec. 5.3.1)");
30054
30442
  if (rc === 8n && !isDelta) throw _err("crl/bad-reason-code", "removeFromCRL(8) may appear only in a delta CRL (RFC 5280 sec. 5.3.1)");
30055
30443
  } else if (extnId === O("invalidityDate")) {
30056
30444
  if (einner.tagClass !== "universal" || einner.tagNumber !== TAGS.GENERALIZED_TIME) throw _err("crl/bad-input", "pre-encoded invalidityDate value must be a GeneralizedTime (RFC 5280 sec. 5.3.2)");
@@ -30093,9 +30481,29 @@ var require_crl_sign = __commonJS({
30093
30481
  opts = opts || {};
30094
30482
  if (!spec || typeof spec !== "object" || Buffer.isBuffer(spec)) throw _err("crl/bad-input", "the CRL spec must be an object");
30095
30483
  issuer = issuer || {};
30484
+ var byCert = issuer.cert != null, byName = issuer.name != null;
30485
+ guard.identifier.assertKnownKeys(
30486
+ spec,
30487
+ byCert || byName ? KNOWN_SPEC_KEYS_ISSUER_NAMED : KNOWN_SPEC_KEYS,
30488
+ _err,
30489
+ "crl/bad-input",
30490
+ function(k) {
30491
+ return "unknown CRL spec field " + JSON.stringify(k) + (k === "revokedCertificates" ? "; the producer reads `revoked` (the parser reports the same list as `revokedCertificates`)" : k === "issuer" ? "; the issuer argument already names one, through " + (byCert ? "issuer.cert" : "issuer.name") + ", and that is the name the CRL is signed under" : "");
30492
+ }
30493
+ );
30494
+ guard.identifier.assertKnownKeys(
30495
+ issuer,
30496
+ byCert ? KNOWN_ISSUER_CERT_KEYS : KNOWN_ISSUER_EXPLICIT_KEYS,
30497
+ _err,
30498
+ "crl/bad-input",
30499
+ function(k) {
30500
+ return "unknown issuer field " + JSON.stringify(k) + " for the " + (byCert ? "certificate form; issuer.cert supplies the name and the public key, so they are not read here" : "explicit form; the issuer takes { key, name, publicKey }, or { key, cert } to take both from a certificate");
30501
+ }
30502
+ );
30503
+ guard.identifier.assertKnownKeys(opts, KNOWN_SIGN_OPTS, _err, "crl/bad-input", "pki.crl.sign has an unknown option ");
30096
30504
  if (issuer.key == null) throw _err("crl/bad-input", "a signing key (issuer.key, a PKCS#8 private key) is required");
30097
30505
  var issuerDer, issuerSpki, issuerCert = null;
30098
- if (issuer.cert != null) {
30506
+ if (byCert) {
30099
30507
  issuerCert = _parseIssuerCert(issuer.cert);
30100
30508
  _assertIssuerCanSignCrl(issuerCert);
30101
30509
  issuerDer = pkiBuild.tbsNameField(issuerCert, "subject");
@@ -30103,7 +30511,7 @@ var require_crl_sign = __commonJS({
30103
30511
  } else {
30104
30512
  issuerSpki = _reqDer(issuer.publicKey, "issuer.publicKey (the issuer SPKI DER)");
30105
30513
  _assertValidSpki(issuerSpki, "issuer.publicKey");
30106
- var dnSource = issuer.name != null ? issuer.name : spec.issuer;
30514
+ var dnSource = byName ? issuer.name : spec.issuer;
30107
30515
  if (dnSource == null) throw _err("crl/bad-issuer", "an issuer distinguished name is required (issuer.name or spec.issuer) when no issuer.cert is given");
30108
30516
  issuerDer = _encodeName(dnSource);
30109
30517
  }
@@ -30458,6 +30866,7 @@ var require_key = __commonJS({
30458
30866
  }
30459
30867
  var algorithm = opts.algorithm != null ? opts.algorithm : _inferAlgorithm(detected);
30460
30868
  var isPublic = detected.format === "spki";
30869
+ if (opts.usages != null && !Array.isArray(opts.usages)) throw _err("key/bad-input", "opts.usages must be an array of key-usage strings");
30461
30870
  var usages = opts.usages || _importUsages(_algName(algorithm), isPublic);
30462
30871
  var extractable = opts.extractable != null ? opts.extractable : false;
30463
30872
  try {
@@ -30478,6 +30887,7 @@ var require_key = __commonJS({
30478
30887
  "pki.key.generate has an unknown option (the WebCrypto spelling is `extractable`): "
30479
30888
  );
30480
30889
  var extractable = opts.extractable != null ? opts.extractable : true;
30890
+ if (opts.usages != null && !Array.isArray(opts.usages)) throw _err("key/bad-input", "opts.usages must be an array of key-usage strings");
30481
30891
  var usages = opts.usages || _generateUsages(_algName(algorithm));
30482
30892
  var pair;
30483
30893
  try {
@@ -30940,10 +31350,12 @@ var require_pkcs12_build = __commonJS({
30940
31350
  var schemaCrl = require_schema_crl();
30941
31351
  var key = require_key();
30942
31352
  var cms = require_cms_verify();
31353
+ var cmsSign = require_cms_sign();
30943
31354
  var cmsDecrypt = require_cms_decrypt();
30944
31355
  var schemaPkcs12 = require_schema_pkcs12();
30945
31356
  var pkix = require_schema_pkix();
30946
31357
  var guard = require_guard_all();
31358
+ var intrinsic = require_guard_intrinsic();
30947
31359
  var frameworkError = require_framework_error();
30948
31360
  var C = require_constants();
30949
31361
  var b = asn1.build;
@@ -30978,6 +31390,36 @@ var require_pkcs12_build = __commonJS({
30978
31390
  var DIGEST_NAME = { sha1: "sha1", sha256: "sha256", sha384: "sha384", sha512: "sha512" };
30979
31391
  var _MISSING_PASSWORD = 'a password must be a string, Buffer, or Uint8Array -- an omitted password is not the empty password; pass "" to use the empty one deliberately';
30980
31392
  var _INTEGRITY_OPTS = { mode: 1, signer: 1, signers: 1, certificates: 1, sid: 1, signingTime: 1 };
31393
+ var _BUILD_SPEC_FULL_KEYS = { safeContents: 1 };
31394
+ var _BUILD_SPEC_SHORTHAND_KEYS = { key: 1, cert: 1, ca: 1, friendlyName: 1, localKeyId: 1 };
31395
+ var _BUILD_OPTS_FULL = { integrity: 1, mac: 1, password: 1, pem: 1 };
31396
+ var _BUILD_OPTS_SHORTHAND = { integrity: 1, mac: 1, password: 1, pem: 1, recipientCerts: 1 };
31397
+ var _SAFE_RECIPIENTS_KEYS = { bags: 1, recipients: 1, contentEncryptionAlgorithm: 1 };
31398
+ var _SAFE_PASSWORD_KEYS = { bags: 1, encrypt: 1 };
31399
+ var _SAFE_PLAINTEXT_KEYS = { bags: 1 };
31400
+ var _BAG_KEYS_BY_TYPE = {
31401
+ key: { type: 1, friendlyName: 1, localKeyId: 1, key: 1 },
31402
+ shroudedKey: { type: 1, friendlyName: 1, localKeyId: 1, key: 1, encrypt: 1 },
31403
+ cert: { type: 1, friendlyName: 1, localKeyId: 1, cert: 1 },
31404
+ crl: { type: 1, friendlyName: 1, localKeyId: 1, crl: 1 },
31405
+ secret: { type: 1, friendlyName: 1, localKeyId: 1, secretTypeId: 1, secretValue: 1 },
31406
+ safeContents: { type: 1, friendlyName: 1, localKeyId: 1, nested: 1 }
31407
+ };
31408
+ var _ENCRYPT_KEYS = { password: 1, cipher: 1, salt: 1, iterations: 1, prf: 1 };
31409
+ var _MAC_KEYS = { algorithm: 1, hash: 1, salt: 1, iterations: 1, keyLength: 1, password: 1 };
31410
+ var _MAC_KEYS_HMAC = { algorithm: 1, hash: 1, salt: 1, iterations: 1, password: 1 };
31411
+ var _MAC_KEYS_PBMAC1 = { algorithm: 1, hash: 1, salt: 1, iterations: 1, keyLength: 1, password: 1 };
31412
+ var _OPEN_OPTS = {
31413
+ allowUnauthenticated: 1,
31414
+ importAlgorithm: 1,
31415
+ keys: 1,
31416
+ maxIterations: 1,
31417
+ signerCerts: 1,
31418
+ recipientKey: 1,
31419
+ recipientCert: 1,
31420
+ recipientIndex: 1
31421
+ };
31422
+ var _VERIFY_MAC_OPTS = { maxIterations: 1 };
30981
31423
  function _p12PasswordOwned(pw) {
30982
31424
  if (Buffer.isBuffer(pw)) return { bytes: guard.bytes.view(pw, Pkcs12Error, "pkcs12/bad-input", "the password"), owned: false };
30983
31425
  return { bytes: _p12Encode(pw), owned: true };
@@ -31085,6 +31527,11 @@ var require_pkcs12_build = __commonJS({
31085
31527
  }
31086
31528
  function _buildBag(bag, opts, depth) {
31087
31529
  if (!bag || typeof bag !== "object") throw _err("pkcs12/bad-input", "each bag must be an object with a type");
31530
+ if (intrinsic.hasOwn(_BAG_KEYS_BY_TYPE, bag.type)) {
31531
+ guard.identifier.assertKnownKeys(bag, _BAG_KEYS_BY_TYPE[bag.type], _err, "pkcs12/bad-input", function(k) {
31532
+ return "unknown field " + JSON.stringify(k) + " on a " + JSON.stringify(bag.type) + " bag; that field is not read for this bag type";
31533
+ });
31534
+ }
31088
31535
  switch (bag.type) {
31089
31536
  case "key": {
31090
31537
  var keyDer = _coerceDer(bag.key, "keyBag key");
@@ -31103,10 +31550,11 @@ var require_pkcs12_build = __commonJS({
31103
31550
  throw _err("pkcs12/bad-input", "shroudedKey key is not a well-formed PKCS#8 PrivateKeyInfo", e2);
31104
31551
  }
31105
31552
  var enc = bag.encrypt || {};
31553
+ var bagPbe = _pbeOpts(enc);
31106
31554
  var pw = _pbePasswordOwned(enc.password != null ? enc.password : opts.password);
31107
31555
  var r;
31108
31556
  try {
31109
- r = pbes2.pbes2Encrypt(pw.bytes, kDer, _pbeOpts(enc), _err, "pkcs12");
31557
+ r = pbes2.pbes2Encrypt(pw.bytes, kDer, bagPbe, _err, "pkcs12");
31110
31558
  } finally {
31111
31559
  _wipePw(pw);
31112
31560
  }
@@ -31170,6 +31618,9 @@ var require_pkcs12_build = __commonJS({
31170
31618
  return der;
31171
31619
  }
31172
31620
  function _pbeOpts(enc) {
31621
+ guard.identifier.assertKnownKeys(enc, _ENCRYPT_KEYS, _err, "pkcs12/bad-input", function(k) {
31622
+ return "unknown encrypt field " + JSON.stringify(k) + "; the PBE descriptor is { password?, cipher?, salt?, iterations?, prf? }";
31623
+ });
31173
31624
  var cipher = CIPHER_NAME[enc.cipher || "aes-256-cbc"];
31174
31625
  if (!cipher) throw _err("pkcs12/bad-input", "unsupported PBES2 cipher " + JSON.stringify(enc.cipher) + " (aes-128-cbc / aes-192-cbc / aes-256-cbc)");
31175
31626
  return {
@@ -31191,6 +31642,15 @@ var require_pkcs12_build = __commonJS({
31191
31642
  var hasRecipients = sc.recipients !== void 0;
31192
31643
  var hasEncrypt = sc.encrypt !== void 0;
31193
31644
  if (hasEncrypt && hasRecipients) throw _err("pkcs12/bad-input", "a safeContents cannot combine encrypt (password) and recipients (public-key) -- one ContentInfo is one privacy type (RFC 7292 sec. 4.1)");
31645
+ guard.identifier.assertKnownKeys(
31646
+ sc,
31647
+ hasRecipients ? _SAFE_RECIPIENTS_KEYS : hasEncrypt ? _SAFE_PASSWORD_KEYS : _SAFE_PLAINTEXT_KEYS,
31648
+ _err,
31649
+ "pkcs12/bad-input",
31650
+ function(k) {
31651
+ return "unknown safeContents field " + JSON.stringify(k) + " for a " + (hasRecipients ? "public-key safe; it takes { bags, recipients, contentEncryptionAlgorithm? }" : hasEncrypt ? "password safe; it takes { bags, encrypt } and its cipher comes from encrypt.cipher" : "plaintext safe; it takes { bags }, and a privacy directive must be encrypt or recipients");
31652
+ }
31653
+ );
31194
31654
  var safeContentsDer = _buildSafeContents(sc.bags || [], opts, 0);
31195
31655
  if (hasRecipients) {
31196
31656
  if (!Array.isArray(sc.recipients) || !sc.recipients.length) throw _err("pkcs12/bad-input", "safeContents.recipients must be a non-empty array of recipient descriptors (RFC 5652 sec. 6.1)");
@@ -31206,10 +31666,11 @@ var require_pkcs12_build = __commonJS({
31206
31666
  return b.sequence([b.oid(O("data")), b.explicit(0, b.octetString(safeContentsDer))]);
31207
31667
  }
31208
31668
  if (!sc.encrypt || typeof sc.encrypt !== "object") throw _err("pkcs12/bad-input", "safeContents.encrypt must be an object { password? } (RFC 7292 sec. 5.1) -- omit it entirely for a plaintext safe");
31669
+ var safePbe = _pbeOpts(sc.encrypt);
31209
31670
  var pw = _pbePasswordOwned(sc.encrypt.password != null ? sc.encrypt.password : opts.password);
31210
31671
  var r;
31211
31672
  try {
31212
- r = pbes2.pbes2Encrypt(pw.bytes, safeContentsDer, _pbeOpts(sc.encrypt), _err, "pkcs12");
31673
+ r = pbes2.pbes2Encrypt(pw.bytes, safeContentsDer, safePbe, _err, "pkcs12");
31213
31674
  } finally {
31214
31675
  _wipePw(pw);
31215
31676
  }
@@ -31258,11 +31719,18 @@ var require_pkcs12_build = __commonJS({
31258
31719
  }
31259
31720
  throw _err("pkcs12/bad-input", "opts.mac.algorithm must be 'hmac' or 'pbmac1', got " + JSON.stringify(algorithm));
31260
31721
  }
31261
- function _normalizeSpec(spec, opts) {
31262
- if (spec && Array.isArray(spec.safeContents)) return spec.safeContents;
31722
+ function _specForm(spec) {
31723
+ var isObject = !!spec && typeof spec === "object" && !Buffer.isBuffer(spec);
31724
+ var safeContents = isObject ? spec.safeContents : null;
31725
+ var full = intrinsic.isArray(safeContents);
31726
+ return { isObject, full, safeContents: full ? safeContents : null };
31727
+ }
31728
+ function _normalizeSpec(spec, opts, form) {
31729
+ if (form.full) return form.safeContents;
31263
31730
  if (spec && (spec.key != null || spec.cert != null)) {
31264
- var enveloped = opts.recipientCerts != null;
31265
- if (enveloped && (!Array.isArray(opts.recipientCerts) || !opts.recipientCerts.length)) throw _err("pkcs12/bad-input", "opts.recipientCerts must be a non-empty array of recipient certificates");
31731
+ var recipientCerts = opts.recipientCerts;
31732
+ var enveloped = recipientCerts != null;
31733
+ if (enveloped && (!intrinsic.isArray(recipientCerts) || !recipientCerts.length)) throw _err("pkcs12/bad-input", "opts.recipientCerts must be a non-empty array of recipient certificates");
31266
31734
  var certBags = [];
31267
31735
  if (spec.cert != null) certBags.push({ type: "cert", cert: spec.cert, friendlyName: spec.friendlyName, localKeyId: spec.localKeyId });
31268
31736
  if (spec.ca != null && !Array.isArray(spec.ca)) throw _err("pkcs12/bad-input", "spec.ca must be an array of certificates");
@@ -31273,7 +31741,7 @@ var require_pkcs12_build = __commonJS({
31273
31741
  if (enveloped) {
31274
31742
  var bags = certBags.slice();
31275
31743
  if (spec.key != null) bags.push({ type: "key", key: spec.key, friendlyName: spec.friendlyName, localKeyId: spec.localKeyId });
31276
- sc.push({ recipients: opts.recipientCerts.map(function(c) {
31744
+ sc.push({ recipients: recipientCerts.map(function(c) {
31277
31745
  return { cert: c };
31278
31746
  }), bags });
31279
31747
  return sc;
@@ -31292,6 +31760,27 @@ var require_pkcs12_build = __commonJS({
31292
31760
  }
31293
31761
  async function _build(spec, opts) {
31294
31762
  opts = opts || {};
31763
+ var form = _specForm(spec);
31764
+ if (form.isObject) {
31765
+ guard.identifier.assertKnownKeys(
31766
+ spec,
31767
+ form.full ? _BUILD_SPEC_FULL_KEYS : _BUILD_SPEC_SHORTHAND_KEYS,
31768
+ _err,
31769
+ "pkcs12/bad-input",
31770
+ function(k) {
31771
+ return "unknown PKCS#12 spec field " + JSON.stringify(k) + " for the " + (form.full ? "safeContents form; the shorthand fields belong to { key, cert, ca } and are not read here" : "shorthand form; pass safeContents instead to build the safes yourself");
31772
+ }
31773
+ );
31774
+ }
31775
+ guard.identifier.assertKnownKeys(
31776
+ opts,
31777
+ form.full ? _BUILD_OPTS_FULL : _BUILD_OPTS_SHORTHAND,
31778
+ _err,
31779
+ "pkcs12/bad-input",
31780
+ function(k) {
31781
+ return "pki.pkcs12.build has an unknown option " + JSON.stringify(k) + (form.full && k === "recipientCerts" ? " for the safeContents form; the full form carries privacy per entry, as safeContents[i].recipients" : "");
31782
+ }
31783
+ );
31295
31784
  if (opts.integrity != null) {
31296
31785
  if (typeof opts.integrity !== "object" || Array.isArray(opts.integrity)) throw _err("pkcs12/bad-input", "opts.integrity must be an object { mode, signer|signers, ... }");
31297
31786
  guard.identifier.assertKnownKeys(opts.integrity, _INTEGRITY_OPTS, _err, "pkcs12/bad-input", "opts.integrity has an unknown option ");
@@ -31301,7 +31790,7 @@ var require_pkcs12_build = __commonJS({
31301
31790
  }
31302
31791
  var pubKey = opts.integrity != null;
31303
31792
  if (pubKey && opts.mac != null && opts.mac !== false) throw _err("pkcs12/bad-integrity-mode", "public-key integrity has no MacData -- do not combine opts.mac with opts.integrity.mode 'public-key' (RFC 7292 sec. 4)");
31304
- var safeContentsSpecs = _normalizeSpec(spec, opts);
31793
+ var safeContentsSpecs = _normalizeSpec(spec, opts, form);
31305
31794
  if (!Array.isArray(safeContentsSpecs) || !safeContentsSpecs.length) throw _err("pkcs12/bad-input", "the store has no safe contents");
31306
31795
  var elements = [];
31307
31796
  for (var i = 0; i < safeContentsSpecs.length; i++) elements.push(await _buildAuthSafeElement(safeContentsSpecs[i], opts));
@@ -31309,13 +31798,35 @@ var require_pkcs12_build = __commonJS({
31309
31798
  var pfx;
31310
31799
  if (pubKey) {
31311
31800
  var ig = opts.integrity;
31801
+ if (ig.signers != null && ig.signer != null) throw _err("pkcs12/bad-input", "supply exactly one of opts.integrity.signer or opts.integrity.signers, not both");
31312
31802
  var signers = ig.signers != null ? ig.signers : ig.signer != null ? [ig.signer] : null;
31313
31803
  if (!Array.isArray(signers) || !signers.length) throw _err("pkcs12/bad-input", "public-key integrity requires opts.integrity.signer or opts.integrity.signers (a cms.sign signer descriptor)");
31804
+ for (var sx = 0; sx < signers.length; sx++) {
31805
+ var sd = signers[sx];
31806
+ if (sd == null || typeof sd !== "object" || Buffer.isBuffer(sd)) throw _err("pkcs12/bad-input", "each opts.integrity signer must be a descriptor object");
31807
+ var keyOnly = sd.cert == null && sd.spki != null;
31808
+ guard.identifier.assertKnownKeys(
31809
+ sd,
31810
+ keyOnly ? cmsSign.KNOWN_SIGNER_KEY_ONLY_KEYS : cmsSign.KNOWN_SIGNER_CERT_KEYS,
31811
+ _err,
31812
+ "pkcs12/bad-input",
31813
+ function(k) {
31814
+ return "unknown opts.integrity signer field " + JSON.stringify(k) + " for the " + (keyOnly ? "key-only form; it takes { key, spki, keyIdentifier } plus the signature parameters" : "certificate form; it takes { key, cert } plus the signature parameters");
31815
+ }
31816
+ );
31817
+ }
31314
31818
  var authSafeCi = await cms.sign(authSafeDer, signers, { eContentType: "data", detached: false, certificates: ig.certificates !== false, sid: ig.sid, signingTime: ig.signingTime });
31315
31819
  pfx = b.sequence([b.integer(3n), b.raw(authSafeCi)]);
31316
31820
  } else {
31317
31821
  var pfxChildren = [b.integer(3n), b.sequence([b.oid(O("data")), b.explicit(0, b.octetString(authSafeDer))])];
31318
- if (opts.mac != null && opts.mac !== false && typeof opts.mac !== "object") throw _err("pkcs12/bad-input", "opts.mac must be false or a { algorithm, hash, salt, iterations, keyLength } object");
31822
+ if (opts.mac != null && opts.mac !== false && (typeof opts.mac !== "object" || intrinsic.isArray(opts.mac))) throw _err("pkcs12/bad-input", "opts.mac must be false or a { algorithm, hash, salt, iterations, keyLength } object");
31823
+ if (opts.mac != null && opts.mac !== false) {
31824
+ var macAlg = opts.mac.algorithm == null ? "hmac" : opts.mac.algorithm;
31825
+ var macKeys = macAlg === "hmac" ? _MAC_KEYS_HMAC : macAlg === "pbmac1" ? _MAC_KEYS_PBMAC1 : _MAC_KEYS;
31826
+ guard.identifier.assertKnownKeys(opts.mac, macKeys, _err, "pkcs12/bad-input", function(k) {
31827
+ return "opts.mac has an unknown option " + JSON.stringify(k) + (macAlg === "hmac" && k === "keyLength" ? " for the classic HMAC algorithm; its key is derived at the hash's own output length, and only pbmac1 takes a keyLength" : "");
31828
+ });
31829
+ }
31319
31830
  if (opts.mac !== false) pfxChildren.push(await _buildMacData(opts.mac || {}, opts.password, authSafeDer));
31320
31831
  pfx = b.sequence(pfxChildren);
31321
31832
  }
@@ -31327,6 +31838,9 @@ var require_pkcs12_build = __commonJS({
31327
31838
  return opts.pem ? schemaPkcs12.pemEncode(pfx, "PKCS12") : pfx;
31328
31839
  }
31329
31840
  async function verifyMac(pfx, password, opts) {
31841
+ if (opts != null && typeof opts === "object" && !Buffer.isBuffer(opts)) {
31842
+ guard.identifier.assertKnownKeys(opts, _VERIFY_MAC_OPTS, _err, "pkcs12/bad-input", "pki.pkcs12.verifyMac has an unknown option ");
31843
+ }
31330
31844
  return _verifyMacOfStore(_storeFromBytes(pfx), password, opts);
31331
31845
  }
31332
31846
  async function _verifyMacOfStore(m, password, opts) {
@@ -31375,6 +31889,7 @@ var require_pkcs12_build = __commonJS({
31375
31889
  }
31376
31890
  async function open(pfx, password, opts) {
31377
31891
  opts = opts || {};
31892
+ guard.identifier.assertKnownKeys(opts, _OPEN_OPTS, _err, "pkcs12/bad-input", "pki.pkcs12.open has an unknown option ");
31378
31893
  if (opts.maxIterations != null && (typeof opts.maxIterations !== "number" || !isFinite(opts.maxIterations) || opts.maxIterations < 1 || Math.floor(opts.maxIterations) !== opts.maxIterations)) {
31379
31894
  throw _err("pkcs12/bad-input", "maxIterations must be a positive integer");
31380
31895
  }
@@ -31939,6 +32454,8 @@ var require_hpke = __commonJS({
31939
32454
  var nodeCrypto = require("crypto");
31940
32455
  var frameworkError = require_framework_error();
31941
32456
  var guard = require_guard_all();
32457
+ var intrinsic = require_guard_intrinsic();
32458
+ var _hasOwn = intrinsic.hasOwn;
31942
32459
  var HpkeError = frameworkError.HpkeError;
31943
32460
  function _err(code, message, cause) {
31944
32461
  return new HpkeError(code, message, cause);
@@ -32296,7 +32813,7 @@ var require_hpke = __commonJS({
32296
32813
  function _mode(opts, keys, who) {
32297
32814
  guard.identifier.assertKnownKeys(opts, keys, _err, "hpke/bad-input", function(k) {
32298
32815
  var other = keys === _SETUP_S_KEYS ? _SETUP_R_KEYS : _SETUP_S_KEYS;
32299
- return "unknown HPKE " + who + " option " + JSON.stringify(k) + (Object.prototype.hasOwnProperty.call(other, k) ? " -- that option belongs to the other end of the exchange, where it would authenticate or seed; here it would do nothing" : "") + " -- accepted: " + Object.keys(keys).sort().join(", ");
32816
+ return "unknown HPKE " + who + " option " + JSON.stringify(k) + (_hasOwn(other, k) ? " -- that option belongs to the other end of the exchange, where it would authenticate or seed; here it would do nothing" : "") + " -- accepted: " + Object.keys(keys).sort().join(", ");
32300
32817
  });
32301
32818
  var mode = opts.mode == null ? MODE_BASE : opts.mode;
32302
32819
  if (mode !== MODE_BASE && mode !== MODE_PSK && mode !== MODE_AUTH && mode !== MODE_AUTH_PSK) {
@@ -32868,14 +33385,16 @@ var require_http_digest = __commonJS({
32868
33385
  "use strict";
32869
33386
  var crypto = require("crypto");
32870
33387
  var constants = require_constants();
32871
- var ALGS = {
33388
+ var intrinsic = require_guard_intrinsic();
33389
+ var _hasOwn = intrinsic.hasOwn;
33390
+ var ALGS = intrinsic.assign(intrinsic.create(null), {
32872
33391
  "SHA-512-256": { hash: "sha512-256", rank: 3, sess: false },
32873
33392
  "SHA-512-256-SESS": { hash: "sha512-256", rank: 3, sess: true },
32874
33393
  "SHA-256": { hash: "sha256", rank: 2, sess: false },
32875
33394
  "SHA-256-SESS": { hash: "sha256", rank: 2, sess: true },
32876
33395
  "MD5": { hash: "md5", rank: 1, sess: false },
32877
33396
  "MD5-SESS": { hash: "md5", rank: 1, sess: true }
32878
- };
33397
+ });
32879
33398
  var DEFAULT_CODES = {
32880
33399
  unsupportedAlgorithm: "digest/unsupported-algorithm",
32881
33400
  weakAlgorithm: "digest/weak-algorithm",
@@ -32999,7 +33518,7 @@ var require_http_digest = __commonJS({
32999
33518
  var rawVal = seg.slice(eq + 1).replace(/^\s+|\s+$/g, "");
33000
33519
  var quoted = rawVal.charAt(0) === '"';
33001
33520
  if (quoted && !_closedQuote(rawVal)) throw E(code, "an unterminated or trailing-garbage Digest quoted-string (RFC 7230 sec. 3.2.6)");
33002
- if (Object.prototype.hasOwnProperty.call(map, key)) throw E(code, "repeated Digest auth-param " + JSON.stringify(key));
33521
+ if (_hasOwn(map, key)) throw E(code, "repeated Digest auth-param " + JSON.stringify(key));
33003
33522
  var value = quoted ? _unq(rawVal) : rawVal;
33004
33523
  if (_hasCtl(value)) throw E(code, "a Digest auth-param value contains a control character (RFC 7230 sec. 3.2.6)");
33005
33524
  map[key] = { value, quoted };
@@ -33208,6 +33727,8 @@ var require_est = __commonJS({
33208
33727
  var crmfFmt = require_schema_crmf();
33209
33728
  var frameworkError = require_framework_error();
33210
33729
  var guard = require_guard_all();
33730
+ var intrinsic = require_guard_intrinsic();
33731
+ var _hasOwn = intrinsic.hasOwn;
33211
33732
  var httpTransport = require_http_transport();
33212
33733
  var httpDigest = require_http_digest();
33213
33734
  var retryAfter = require_http_retry_after();
@@ -34111,19 +34632,19 @@ var require_est = __commonJS({
34111
34632
  if (!r || typeof r !== "object") return r;
34112
34633
  var out = {}, k;
34113
34634
  for (k in r) {
34114
- if (Object.prototype.hasOwnProperty.call(r, k)) out[k] = _copyBytes(r[k]);
34635
+ if (_hasOwn(r, k)) out[k] = _copyBytes(r[k]);
34115
34636
  }
34116
34637
  return out;
34117
34638
  }
34118
34639
  function _shallowCopy(o) {
34119
34640
  var out = {}, k;
34120
34641
  for (k in o) {
34121
- if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = o[k];
34642
+ if (_hasOwn(o, k)) out[k] = o[k];
34122
34643
  }
34123
34644
  if (out.auth && typeof out.auth === "object") {
34124
34645
  var a = {}, ak;
34125
34646
  for (ak in out.auth) {
34126
- if (Object.prototype.hasOwnProperty.call(out.auth, ak)) a[ak] = out.auth[ak];
34647
+ if (_hasOwn(out.auth, ak)) a[ak] = out.auth[ak];
34127
34648
  }
34128
34649
  out.auth = a;
34129
34650
  }
@@ -34433,15 +34954,27 @@ var require_jose = __commonJS({
34433
34954
  var frameworkError = require_framework_error();
34434
34955
  var guard = require_guard_all();
34435
34956
  var edwardsPoint = require_edwards_point();
34957
+ var intrinsic = require_guard_intrinsic();
34958
+ var _isArray = intrinsic.isArray;
34959
+ var _hasOwn = intrinsic.hasOwn;
34960
+ var _keys = intrinsic.keys;
34961
+ var _isBuffer = intrinsic.isBuffer;
34962
+ var _bufferFrom = intrinsic.bufferFrom;
34963
+ var _stringify = intrinsic.stringify;
34964
+ var _ObjectProto = intrinsic.ObjectProto;
34965
+ var _push = intrinsic.uncurry(Array.prototype.push);
34966
+ var _join = intrinsic.join;
34967
+ var _map = intrinsic.map;
34968
+ var _bufToString = intrinsic.uncurry(Buffer.prototype.toString);
34436
34969
  var JoseError = frameworkError.JoseError;
34437
34970
  function E(code, message, cause) {
34438
34971
  return new JoseError(code, message, cause);
34439
34972
  }
34440
34973
  var LIMITS = constants.LIMITS;
34441
34974
  function b64uEncode(bytes) {
34442
- if (!Buffer.isBuffer(bytes)) throw E("jose/bad-input", "base64url.encode requires a Buffer");
34975
+ if (!_isBuffer(bytes)) throw E("jose/bad-input", "base64url.encode requires a Buffer");
34443
34976
  bytes = guard.bytes.view(bytes, JoseError, "jose/bad-input", "base64url.encode input");
34444
- return bytes.toString("base64url");
34977
+ return _bufToString(bytes, "base64url");
34445
34978
  }
34446
34979
  function b64uDecode(text) {
34447
34980
  return guard.encoding.base64url(text, null, E, "jose/bad-base64url", "base64url value");
@@ -34486,16 +35019,16 @@ var require_jose = __commonJS({
34486
35019
  };
34487
35020
  function _checkHeader(header, profileName) {
34488
35021
  var profile = PROFILES[profileName];
34489
- if (!profile) throw E("jose/bad-input", "unknown JWS profile " + JSON.stringify(profileName));
34490
- if (!header || typeof header !== "object" || Array.isArray(header)) throw E("jose/bad-header", "the protected header must be a JSON object");
35022
+ if (!profile) throw E("jose/bad-input", "unknown JWS profile " + _stringify(profileName));
35023
+ if (!header || typeof header !== "object" || _isArray(header)) throw E("jose/bad-header", "the protected header must be a JSON object");
34491
35024
  var own = function(k) {
34492
- return Object.prototype.hasOwnProperty.call(header, k);
35025
+ return _hasOwn(header, k);
34493
35026
  };
34494
35027
  if (own("b64")) throw E("jose/bad-jws", "the RFC 7797 b64 header parameter is forbidden");
34495
35028
  var alg = header.alg;
34496
35029
  if (!own("alg") || typeof alg !== "string") throw E("jose/bad-header", "the protected header must carry a string alg");
34497
35030
  var algRow = profile.algs[alg];
34498
- if (!algRow) throw E("jose/bad-alg", "unsupported or forbidden algorithm " + JSON.stringify(alg) + " for this JWS profile");
35031
+ if (!algRow) throw E("jose/bad-alg", "unsupported or forbidden algorithm " + _stringify(alg) + " for this JWS profile");
34499
35032
  if (profile.requireUrl && (!own("url") || typeof header.url !== "string" || header.url.length === 0)) throw E("jose/bad-header", "the protected header must carry a non-empty string url");
34500
35033
  var hasNonce = own("nonce");
34501
35034
  if (profile.nonce === "required") {
@@ -34518,18 +35051,18 @@ var require_jose = __commonJS({
34518
35051
  } else if (profile.keyId === "jwk") {
34519
35052
  if (!hasJwk || hasKid) throw E("jose/bad-header", "this JWS must carry an embedded jwk, not kid");
34520
35053
  }
34521
- if (hasJwk && (!header.jwk || typeof header.jwk !== "object" || Array.isArray(header.jwk))) throw E("jose/bad-header", "jwk must be a JSON object");
34522
- if (Object.prototype.hasOwnProperty.call(header, "crit")) {
35054
+ if (hasJwk && (!header.jwk || typeof header.jwk !== "object" || _isArray(header.jwk))) throw E("jose/bad-header", "jwk must be a JSON object");
35055
+ if (_hasOwn(header, "crit")) {
34523
35056
  var crit = header.crit;
34524
- if (!Array.isArray(crit) || crit.length === 0) throw E("jose/bad-crit", "crit must be a non-empty array");
35057
+ if (!_isArray(crit) || crit.length === 0) throw E("jose/bad-crit", "crit must be a non-empty array");
34525
35058
  var seen = {};
34526
35059
  for (var c = 0; c < crit.length; c++) {
34527
35060
  var name = crit[c];
34528
35061
  if (typeof name !== "string") throw E("jose/bad-crit", "crit entries must be strings");
34529
- if (Object.prototype.hasOwnProperty.call(seen, name)) throw E("jose/bad-crit", "duplicate crit entry " + JSON.stringify(name));
35062
+ if (_hasOwn(seen, name)) throw E("jose/bad-crit", "duplicate crit entry " + _stringify(name));
34530
35063
  seen[name] = 1;
34531
- if (UNDERSTOOD_HEADER[name]) throw E("jose/bad-crit", "crit must not name a standard header parameter " + JSON.stringify(name));
34532
- throw E("jose/bad-crit", "unprocessed critical header parameter " + JSON.stringify(name));
35064
+ if (UNDERSTOOD_HEADER[name]) throw E("jose/bad-crit", "crit must not name a standard header parameter " + _stringify(name));
35065
+ throw E("jose/bad-crit", "unprocessed critical header parameter " + _stringify(name));
34533
35066
  }
34534
35067
  }
34535
35068
  return { alg, algRow, header };
@@ -34552,13 +35085,13 @@ var require_jose = __commonJS({
34552
35085
  }
34553
35086
  function _assertKeyType(algRow, jwk) {
34554
35087
  if (!jwk || typeof jwk !== "object" || typeof jwk.kty !== "string") throw E("jose/bad-key", "a JWK object with a kty is required");
34555
- if (jwk.kty !== algRow.kty) throw E("jose/bad-alg", "the key type " + JSON.stringify(jwk.kty) + " does not match the algorithm");
35088
+ if (jwk.kty !== algRow.kty) throw E("jose/bad-alg", "the key type " + _stringify(jwk.kty) + " does not match the algorithm");
34556
35089
  if (algRow.kty === "EC" && jwk.crv !== algRow.crv) throw E("jose/bad-alg", "the EC curve does not match the algorithm");
34557
- if (algRow.kty === "OKP" && jwk.crv !== "Ed25519" && jwk.crv !== "Ed448") throw E("jose/bad-alg", "unsupported OKP curve " + JSON.stringify(jwk.crv));
35090
+ if (algRow.kty === "OKP" && jwk.crv !== "Ed25519" && jwk.crv !== "Ed448") throw E("jose/bad-alg", "unsupported OKP curve " + _stringify(jwk.crv));
34558
35091
  if (algRow.kty === "OKP" && typeof jwk.x === "string" && !edwardsPoint.validate(b64uDecode(jwk.x), jwk.crv === "Ed25519" ? 6 : 7)) {
34559
35092
  throw E("jose/bad-key", "the OKP public key is not a valid, full-order Edwards point");
34560
35093
  }
34561
- if (algRow.kty === "AKP" && jwk.alg !== algRow.subtle) throw E("jose/bad-alg", "the AKP parameter set " + JSON.stringify(jwk.alg) + " does not match the algorithm " + algRow.subtle);
35094
+ if (algRow.kty === "AKP" && jwk.alg !== algRow.subtle) throw E("jose/bad-alg", "the AKP parameter set " + _stringify(jwk.alg) + " does not match the algorithm " + algRow.subtle);
34562
35095
  }
34563
35096
  function _expectedSigBytes(algRow, jwk, key) {
34564
35097
  if (algRow.sigBytes != null) return algRow.sigBytes;
@@ -34572,10 +35105,10 @@ var require_jose = __commonJS({
34572
35105
  }
34573
35106
  var PRIVATE_JWK_MEMBERS = ["d", "p", "q", "dp", "dq", "qi", "k", "priv"];
34574
35107
  function assertPublicJwk(jwk) {
34575
- if (!jwk || typeof jwk !== "object" || Array.isArray(jwk)) throw E("jose/bad-key", "a JWK object is required");
35108
+ if (!jwk || typeof jwk !== "object" || _isArray(jwk)) throw E("jose/bad-key", "a JWK object is required");
34576
35109
  for (var i = 0; i < PRIVATE_JWK_MEMBERS.length; i++) {
34577
- if (Object.prototype.hasOwnProperty.call(jwk, PRIVATE_JWK_MEMBERS[i])) {
34578
- throw E("jose/private-key-material", "a published JWK must be public-only; it carries the private member " + JSON.stringify(PRIVATE_JWK_MEMBERS[i]));
35110
+ if (_hasOwn(jwk, PRIVATE_JWK_MEMBERS[i])) {
35111
+ throw E("jose/private-key-material", "a published JWK must be public-only; it carries the private member " + _stringify(PRIVATE_JWK_MEMBERS[i]));
34579
35112
  }
34580
35113
  }
34581
35114
  return jwk;
@@ -34584,15 +35117,15 @@ var require_jose = __commonJS({
34584
35117
  async function verify(jws, opts) {
34585
35118
  opts = opts || {};
34586
35119
  guard.identifier.assertKnownKeys(opts, _VERIFY_KEYS, E, "jose/bad-input", "unknown pki.jose.verify option ");
34587
- if (!jws || typeof jws !== "object" || Array.isArray(jws)) throw E("jose/bad-jws", "a flattened JWS object is required");
34588
- if (Object.prototype.hasOwnProperty.call(jws, "signatures")) throw E("jose/bad-jws", "the multi-signature signatures member is forbidden");
34589
- if (Object.prototype.hasOwnProperty.call(jws, "header")) throw E("jose/bad-jws", "the unprotected header member is forbidden");
35120
+ if (!jws || typeof jws !== "object" || _isArray(jws)) throw E("jose/bad-jws", "a flattened JWS object is required");
35121
+ if (_hasOwn(jws, "signatures")) throw E("jose/bad-jws", "the multi-signature signatures member is forbidden");
35122
+ if (_hasOwn(jws, "header")) throw E("jose/bad-jws", "the unprotected header member is forbidden");
34590
35123
  if (typeof jws.protected !== "string" || typeof jws.signature !== "string") throw E("jose/bad-jws", "protected and signature must be base64url strings");
34591
35124
  if (typeof jws.payload !== "string") throw E("jose/bad-jws", "payload must be a base64url string (never detached)");
34592
35125
  var header = parseJson(b64uDecode(jws.protected));
34593
35126
  var profileName = opts.profile || "acme-outer";
34594
35127
  var checked = _checkHeader(header, profileName);
34595
- if (opts.key !== void 0 && (typeof opts.key !== "object" || opts.key === null || Array.isArray(opts.key))) {
35128
+ if (opts.key !== void 0 && (typeof opts.key !== "object" || opts.key === null || _isArray(opts.key))) {
34596
35129
  throw E("jose/bad-key", "opts.key was supplied but is not a JWK object, so the key this message must be signed under cannot be established");
34597
35130
  }
34598
35131
  var jwk = header.jwk || opts.key;
@@ -34621,7 +35154,7 @@ var require_jose = __commonJS({
34621
35154
  var sig = b64uDecode(jws.signature);
34622
35155
  var want = _expectedSigBytes(checked.algRow, jwk);
34623
35156
  if (want != null && sig.length !== want) throw E("jose/bad-signature", "the signature length " + sig.length + " is not the " + want + " bytes " + checked.alg + " requires");
34624
- var signingInput = Buffer.from(jws.protected + "." + jws.payload, "ascii");
35157
+ var signingInput = _bufferFrom(jws.protected + "." + jws.payload, "ascii");
34625
35158
  var key;
34626
35159
  try {
34627
35160
  key = await webcrypto.subtle.importKey("jwk", jwk, _importParams(checked.algRow, jwk), false, ["verify"]);
@@ -34633,12 +35166,26 @@ var require_jose = __commonJS({
34633
35166
  return { header, payload: b64uDecode(jws.payload), keySource };
34634
35167
  }
34635
35168
  var _SIGN_KEYS = { protected: 1, payload: 1, key: 1, jwk: 1, profile: 1 };
35169
+ var _SIGN_KEYS_EMBEDDED_JWK = { protected: 1, payload: 1, key: 1, profile: 1 };
34636
35170
  async function sign(opts) {
34637
35171
  opts = opts || {};
34638
35172
  guard.identifier.assertKnownKeys(opts, _SIGN_KEYS, E, "jose/bad-input", "unknown pki.jose.sign option ");
34639
- var header = opts.protected;
35173
+ var headerJson;
35174
+ try {
35175
+ headerJson = _stringify(opts.protected);
35176
+ } catch (e) {
35177
+ throw E("jose/bad-header", "the protected header must be JSON-serializable", e);
35178
+ }
35179
+ var headerBytes = headerJson === void 0 ? null : _bufferFrom(headerJson, "utf8");
35180
+ var header = headerBytes === null ? opts.protected : parseJson(headerBytes);
35181
+ var embedsJwk = !!(header && typeof header === "object" && header.jwk);
35182
+ if (embedsJwk) {
35183
+ guard.identifier.assertKnownKeys(opts, _SIGN_KEYS_EMBEDDED_JWK, E, "jose/bad-input", function(k) {
35184
+ return "unknown pki.jose.sign option " + _stringify(k) + (k === "jwk" ? "; the protected header already embeds the public JWK" : "");
35185
+ });
35186
+ }
34640
35187
  var payload = opts.payload;
34641
- if (!Buffer.isBuffer(payload)) throw E("jose/bad-input", "payload must be a Buffer (empty Buffer for POST-as-GET)");
35188
+ if (!_isBuffer(payload)) throw E("jose/bad-input", "payload must be a Buffer (empty Buffer for POST-as-GET)");
34642
35189
  payload = guard.bytes.view(payload, JoseError, "jose/bad-input", "payload");
34643
35190
  if (!wcEngine.isCryptoKeyLike(opts.key)) throw E("jose/bad-input", "a private or secret CryptoKey (opts.key) is required");
34644
35191
  var checked = _checkHeader(header, opts.profile || "acme-outer");
@@ -34649,12 +35196,12 @@ var require_jose = __commonJS({
34649
35196
  _assertKeyType(checked.algRow, header.jwk);
34650
35197
  assertPublicJwk(header.jwk);
34651
35198
  }
34652
- var protectedB64 = b64uEncode(Buffer.from(JSON.stringify(header), "utf8"));
35199
+ var protectedB64 = b64uEncode(headerBytes);
34653
35200
  var payloadB64 = payload.length === 0 ? "" : b64uEncode(payload);
34654
- var signingInput = Buffer.from(protectedB64 + "." + payloadB64, "ascii");
35201
+ var signingInput = _bufferFrom(protectedB64 + "." + payloadB64, "ascii");
34655
35202
  var jwk = header.jwk || opts.jwk || {};
34656
35203
  var signKey = await wcEngine.adoptKey(opts.key, null, ["sign"], E, "jose/bad-input");
34657
- var sigBuf = Buffer.from(await webcrypto.subtle.sign(_cryptoAlg(checked.algRow, jwk, signKey), signKey, signingInput));
35204
+ var sigBuf = _bufferFrom(await webcrypto.subtle.sign(_cryptoAlg(checked.algRow, jwk, signKey), signKey, signingInput));
34658
35205
  var want = _expectedSigBytes(checked.algRow, jwk, opts.key);
34659
35206
  if (want != null && sigBuf.length !== want) throw E("jose/bad-key", "the signing key produced a " + sigBuf.length + "-byte signature but " + checked.alg + " requires " + want + " (the key does not match the algorithm)");
34660
35207
  if (header.jwk) {
@@ -34681,19 +35228,19 @@ var require_jose = __commonJS({
34681
35228
  async function thumbprint(jwk) {
34682
35229
  if (!jwk || typeof jwk !== "object" || typeof jwk.kty !== "string") throw E("jose/bad-key", "a JWK object with a kty is required");
34683
35230
  var members = THUMBPRINT_MEMBERS[jwk.kty];
34684
- if (!members) throw E("jose/bad-key", "unsupported JWK key type " + JSON.stringify(jwk.kty));
35231
+ if (!members) throw E("jose/bad-key", "unsupported JWK key type " + _stringify(jwk.kty));
34685
35232
  var parts = [];
34686
35233
  for (var i = 0; i < members.length; i++) {
34687
35234
  var m = members[i];
34688
- if (typeof jwk[m] !== "string") throw E("jose/bad-key", "the JWK is missing the required member " + JSON.stringify(m));
34689
- parts.push(JSON.stringify(m) + ":" + JSON.stringify(jwk[m]));
35235
+ if (typeof jwk[m] !== "string") throw E("jose/bad-key", "the JWK is missing the required member " + _stringify(m));
35236
+ _push(parts, _stringify(m) + ":" + _stringify(jwk[m]));
34690
35237
  }
34691
- var canonical = "{" + parts.join(",") + "}";
34692
- var digest = Buffer.from(await webcrypto.subtle.digest("SHA-256", Buffer.from(canonical, "utf8")));
35238
+ var canonical = "{" + _join(parts, ",") + "}";
35239
+ var digest = _bufferFrom(await webcrypto.subtle.digest("SHA-256", _bufferFrom(canonical, "utf8")));
34693
35240
  return b64uEncode(digest);
34694
35241
  }
34695
35242
  function sigAlgs() {
34696
- return Object.keys(SIG_ALGS).map(function(alg) {
35243
+ return _map(_keys(SIG_ALGS), function(alg) {
34697
35244
  var row = SIG_ALGS[alg];
34698
35245
  var out = { alg, kty: row.kty };
34699
35246
  if (row.crv) out.crv = row.crv;
@@ -34732,6 +35279,8 @@ var require_acme = __commonJS({
34732
35279
  var httpTransport = require_http_transport();
34733
35280
  var retryAfter = require_http_retry_after();
34734
35281
  var guard = require_guard_all();
35282
+ var intrinsic = require_guard_intrinsic();
35283
+ var _hasOwn = intrinsic.hasOwn;
34735
35284
  var pkgVersion = require_package().version;
34736
35285
  var AcmeError = frameworkError.AcmeError;
34737
35286
  function E(code, message, cause) {
@@ -34888,7 +35437,7 @@ var require_acme = __commonJS({
34888
35437
  var spec = SPECS[kind];
34889
35438
  for (var f = 0; f < spec.length; f++) {
34890
35439
  var field = spec[f];
34891
- var present = Object.prototype.hasOwnProperty.call(obj, field.name);
35440
+ var present = _hasOwn(obj, field.name);
34892
35441
  var required = field.required || field.requiredWhen && field.requiredWhen(obj);
34893
35442
  if (!present) {
34894
35443
  if (required) throw E("acme/missing-field", "an ACME " + kind + " is missing the required field " + JSON.stringify(field.name));
@@ -34998,14 +35547,14 @@ var require_acme = __commonJS({
34998
35547
  var ERROR_NAMESPACE = "urn:ietf:params:acme:error:";
34999
35548
  function validateProblem(obj) {
35000
35549
  if (!_isObject(obj)) throw E("acme/bad-problem", "a problem document must be a JSON object");
35001
- if (Object.prototype.hasOwnProperty.call(obj, "identifier")) throw E("acme/bad-problem", "a top-level problem document must not carry an identifier (RFC 8555 sec. 6.7.1)");
35550
+ if (_hasOwn(obj, "identifier")) throw E("acme/bad-problem", "a top-level problem document must not carry an identifier (RFC 8555 sec. 6.7.1)");
35002
35551
  if (!_isString(obj.type) || obj.type.indexOf(ERROR_NAMESPACE) !== 0) throw E("acme/bad-problem", "an ACME problem type must be in the " + ERROR_NAMESPACE + " namespace (RFC 8555 sec. 6.7)");
35003
- if (Object.prototype.hasOwnProperty.call(obj, "subproblems")) {
35552
+ if (_hasOwn(obj, "subproblems")) {
35004
35553
  if (!Array.isArray(obj.subproblems)) throw E("acme/bad-problem", "subproblems must be an array");
35005
35554
  for (var i = 0; i < obj.subproblems.length; i++) {
35006
35555
  var sub = obj.subproblems[i];
35007
35556
  if (!_isObject(sub) || !_isString(sub.type) || sub.type.indexOf(ERROR_NAMESPACE) !== 0) throw E("acme/bad-problem", "each subproblem must be an ACME problem document in the error namespace");
35008
- if (Object.prototype.hasOwnProperty.call(sub, "identifier")) _validateOrderIdentifier(sub.identifier);
35557
+ if (_hasOwn(sub, "identifier")) _validateOrderIdentifier(sub.identifier);
35009
35558
  }
35010
35559
  }
35011
35560
  return obj;
@@ -35019,7 +35568,7 @@ var require_acme = __commonJS({
35019
35568
  function identify(obj) {
35020
35569
  if (!_isObject(obj)) return "unknown";
35021
35570
  var has = function(k) {
35022
- return Object.prototype.hasOwnProperty.call(obj, k);
35571
+ return _hasOwn(obj, k);
35023
35572
  };
35024
35573
  if (has("protected") && has("signature") && _isString(obj.protected) && _isString(obj.signature)) return "jws";
35025
35574
  if (_isString(obj.type) && obj.type.indexOf(ERROR_NAMESPACE) === 0) return "problem";
@@ -35115,8 +35664,8 @@ var require_acme = __commonJS({
35115
35664
  }
35116
35665
  function _outerHeader(o) {
35117
35666
  var h = { alg: o.alg, nonce: o.nonce, url: o.url };
35118
- if (Object.prototype.hasOwnProperty.call(o, "kid")) h.kid = o.kid;
35119
- if (Object.prototype.hasOwnProperty.call(o, "jwk")) h.jwk = o.jwk;
35667
+ if (_hasOwn(o, "kid")) h.kid = o.kid;
35668
+ if (_hasOwn(o, "jwk")) h.jwk = o.jwk;
35120
35669
  return h;
35121
35670
  }
35122
35671
  function _payloadBuf(obj) {
@@ -35127,7 +35676,7 @@ var require_acme = __commonJS({
35127
35676
  function _signOuter(o, payloadObj) {
35128
35677
  if (!_isObject(o)) throw E("acme/bad-input", "a request options object is required");
35129
35678
  if (!o.key) throw E("acme/bad-input", "a signing key (opts.key) is required");
35130
- return jose.sign({ protected: _outerHeader(o), payload: _payloadBuf(payloadObj), key: o.key, jwk: o.jwk, profile: "acme-outer" });
35679
+ return jose.sign({ protected: _outerHeader(o), payload: _payloadBuf(payloadObj), key: o.key, profile: "acme-outer" });
35131
35680
  }
35132
35681
  function postAsGet(o) {
35133
35682
  return _promised(function() {
@@ -35167,7 +35716,7 @@ var require_acme = __commonJS({
35167
35716
  if (!_isObject(o.externalAccountBinding)) throw E("acme/bad-input", "externalAccountBinding must be an EAB inner JWS object");
35168
35717
  payload.externalAccountBinding = o.externalAccountBinding;
35169
35718
  }
35170
- return jose.sign({ protected: { alg: o.alg, nonce: o.nonce, url: o.url, jwk: o.jwk }, payload: _payloadBuf(payload), key: o.key, jwk: o.jwk, profile: "acme-outer" });
35719
+ return jose.sign({ protected: { alg: o.alg, nonce: o.nonce, url: o.url, jwk: o.jwk }, payload: _payloadBuf(payload), key: o.key, profile: "acme-outer" });
35171
35720
  });
35172
35721
  }
35173
35722
  var _HMAC_HASH = { HS256: "SHA-256", HS384: "SHA-384", HS512: "SHA-512" };
@@ -35343,8 +35892,8 @@ var require_acme = __commonJS({
35343
35892
  return _promised(function() {
35344
35893
  if (!_isObject(o) || !Buffer.isBuffer(o.certificate)) throw E("acme/bad-input", "revokeCert requires a DER certificate Buffer (opts.certificate)");
35345
35894
  x509.parse(o.certificate);
35346
- var hasKid = Object.prototype.hasOwnProperty.call(o, "kid");
35347
- var hasJwk = Object.prototype.hasOwnProperty.call(o, "jwk");
35895
+ var hasKid = _hasOwn(o, "kid");
35896
+ var hasJwk = _hasOwn(o, "jwk");
35348
35897
  if (hasKid === hasJwk) throw E("acme/bad-input", "revokeCert must be signed with EXACTLY ONE of the account kid or the certificate jwk (RFC 8555 sec. 7.6)");
35349
35898
  var payload = { certificate: jose.base64url.encode(o.certificate) };
35350
35899
  if (o.reason !== void 0) {
@@ -35356,7 +35905,7 @@ var require_acme = __commonJS({
35356
35905
  var header = { alg: o.alg, nonce: o.nonce, url: o.url };
35357
35906
  if (hasKid) header.kid = o.kid;
35358
35907
  else header.jwk = o.jwk;
35359
- return jose.sign({ protected: header, payload: _payloadBuf(payload), key: o.key, jwk: o.jwk, profile: "acme-outer" });
35908
+ return jose.sign({ protected: header, payload: _payloadBuf(payload), key: o.key, profile: "acme-outer" });
35360
35909
  });
35361
35910
  }
35362
35911
  async function keyChange(o) {
@@ -35370,7 +35919,6 @@ var require_acme = __commonJS({
35370
35919
  protected: { alg: o.newAlg, url: o.url, jwk: o.newJwk },
35371
35920
  payload: _payloadBuf({ account: o.account, oldKey: o.oldKey }),
35372
35921
  key: o.newKey,
35373
- jwk: o.newJwk,
35374
35922
  profile: "keychange-inner"
35375
35923
  });
35376
35924
  return jose.sign({ protected: { alg: o.alg, nonce: o.nonce, url: o.url, kid: o.kid }, payload: _payloadBuf(inner), key: o.key, profile: "acme-outer" });
@@ -35676,7 +36224,7 @@ var require_acme = __commonJS({
35676
36224
  function _parseLinkAlternates(headers, base) {
35677
36225
  var raw = null;
35678
36226
  for (var k in headers) {
35679
- if (Object.prototype.hasOwnProperty.call(headers, k) && k.toLowerCase() === "link") {
36227
+ if (_hasOwn(headers, k) && k.toLowerCase() === "link") {
35680
36228
  raw = headers[k];
35681
36229
  break;
35682
36230
  }
@@ -36288,6 +36836,8 @@ var require_trust = __commonJS({
36288
36836
  var errors = require_framework_error();
36289
36837
  var asn1 = require_asn1_der();
36290
36838
  var guard = require_guard_all();
36839
+ var intrinsic = require_guard_intrinsic();
36840
+ var _hasOwn = intrinsic.hasOwn;
36291
36841
  var x509 = require_schema_x509();
36292
36842
  var TrustError = errors.TrustError;
36293
36843
  var LIMITS = constants.LIMITS;
@@ -36737,7 +37287,7 @@ var require_trust = __commonJS({
36737
37287
  var t = tok.trim();
36738
37288
  if (t === "") return;
36739
37289
  var l = t.toLowerCase();
36740
- if (!Object.prototype.hasOwnProperty.call(_TRUST_BIT_TOKENS, l)) {
37290
+ if (!_hasOwn(_TRUST_BIT_TOKENS, l)) {
36741
37291
  throw E("trust/bad-csv", "unrecognized Trust Bits token " + JSON.stringify(t));
36742
37292
  }
36743
37293
  var p = _TRUST_BIT_TOKENS[l];
@@ -38417,6 +38967,8 @@ var require_webauthn_mds = __commonJS({
38417
38967
  var frameworkError = require_framework_error();
38418
38968
  var x509 = require_schema_x509();
38419
38969
  var guard = require_guard_all();
38970
+ var intrinsic = require_guard_intrinsic();
38971
+ var _hasOwn = intrinsic.hasOwn;
38420
38972
  var jose = require_jose();
38421
38973
  var rfc3339 = require_rfc3339();
38422
38974
  var constants = require_constants();
@@ -38634,7 +39186,7 @@ var require_webauthn_mds = __commonJS({
38634
39186
  if (header.x5u !== void 0) {
38635
39187
  throw _err("webauthn/bad-metadata-blob", "the metadata BLOB header carries x5u, which names a chain to fetch; supply a BLOB with an inline x5c instead");
38636
39188
  }
38637
- if (Object.prototype.hasOwnProperty.call(header, "crit")) {
39189
+ if (_hasOwn(header, "crit")) {
38638
39190
  var crit = header.crit;
38639
39191
  if (!Array.isArray(crit) || crit.length === 0) {
38640
39192
  throw _err("webauthn/bad-metadata-blob", "the metadata BLOB header crit must be a non-empty array (RFC 7515 sec. 4.1.11)");
@@ -39072,6 +39624,8 @@ var require_webauthn = __commonJS({
39072
39624
  var validator = require_validator_all();
39073
39625
  var edwardsPoint = require_edwards_point();
39074
39626
  var guard = require_guard_all();
39627
+ var intrinsic = require_guard_intrinsic();
39628
+ var _hasOwn = intrinsic.hasOwn;
39075
39629
  var jose = require_jose();
39076
39630
  var mds = require_webauthn_mds();
39077
39631
  var nodeCrypto = require("crypto");
@@ -40284,7 +40838,7 @@ var require_webauthn = __commonJS({
40284
40838
  guard.identifier.assertKnownKeys(input, _ASSERT_OPTS, _err, "webauthn/bad-input", "verifyAssertion input has an unknown key ");
40285
40839
  var out = {}, k;
40286
40840
  for (k in input) {
40287
- if (Object.prototype.hasOwnProperty.call(input, k)) out[k] = input[k];
40841
+ if (_hasOwn(input, k)) out[k] = input[k];
40288
40842
  }
40289
40843
  ["authenticatorData", "clientDataJSON", "clientDataHash", "signature", "expectedChallenge"].forEach(function(f) {
40290
40844
  if (_isBufferSource(out[f])) out[f] = guard.bytes.snapshotSource(out[f], WebauthnError, "webauthn/bad-input", f);
@@ -40299,7 +40853,7 @@ var require_webauthn = __commonJS({
40299
40853
  } else if (_isPlainObject(out.credentialPublicKey)) {
40300
40854
  var key = {}, kk;
40301
40855
  for (kk in out.credentialPublicKey) {
40302
- if (!Object.prototype.hasOwnProperty.call(out.credentialPublicKey, kk)) continue;
40856
+ if (!_hasOwn(out.credentialPublicKey, kk)) continue;
40303
40857
  var v;
40304
40858
  try {
40305
40859
  v = out.credentialPublicKey[kk];