@blamejs/pki 0.6.40 → 0.6.41

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.
Files changed (74) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/lib/acme.js +24 -13
  3. package/lib/asn1-der.js +5 -5
  4. package/lib/attrcert-sign.js +14 -14
  5. package/lib/cbor-det.js +2 -2
  6. package/lib/cmc-build.js +16 -16
  7. package/lib/cmc-verify.js +5 -5
  8. package/lib/cmp-build.js +29 -19
  9. package/lib/cmp-session.js +21 -16
  10. package/lib/cmp-verify.js +4 -4
  11. package/lib/cms-decrypt.js +8 -8
  12. package/lib/cms-encrypt.js +22 -22
  13. package/lib/cms-sign.js +17 -17
  14. package/lib/cms-verify.js +6 -6
  15. package/lib/composite-kem.js +1 -1
  16. package/lib/composite-sig.js +4 -4
  17. package/lib/constants.js +13 -9
  18. package/lib/crl-sign.js +17 -17
  19. package/lib/crmf-sign.js +11 -11
  20. package/lib/csr-sign.js +2 -2
  21. package/lib/ct.js +19 -11
  22. package/lib/edwards-point.js +2 -2
  23. package/lib/est.js +74 -43
  24. package/lib/guard-async.js +17 -1
  25. package/lib/guard-bytes.js +2 -2
  26. package/lib/guard-compress.js +5 -5
  27. package/lib/guard-identifier.js +45 -1
  28. package/lib/guard-name.js +1 -1
  29. package/lib/guard-time.js +3 -1
  30. package/lib/hpke.js +10 -10
  31. package/lib/http-digest.js +2 -2
  32. package/lib/http-transport.js +3 -3
  33. package/lib/inspect.js +9 -9
  34. package/lib/jose.js +14 -14
  35. package/lib/key.js +7 -7
  36. package/lib/lint.js +6 -4
  37. package/lib/merkle.js +2 -2
  38. package/lib/mime.js +2 -2
  39. package/lib/ocsp-verify.js +1 -1
  40. package/lib/ocsp.js +5 -5
  41. package/lib/oid.js +3 -3
  42. package/lib/path-validate.js +32 -22
  43. package/lib/pbes2.js +2 -2
  44. package/lib/pkcs12-build.js +15 -15
  45. package/lib/pki-build.js +2 -2
  46. package/lib/scep.js +47 -16
  47. package/lib/schema-all.js +1 -1
  48. package/lib/schema-attrcert.js +4 -3
  49. package/lib/schema-c509.js +23 -23
  50. package/lib/schema-cmc.js +6 -6
  51. package/lib/schema-cmp.js +3 -3
  52. package/lib/schema-cms.js +15 -8
  53. package/lib/schema-crmf.js +1 -1
  54. package/lib/schema-csr.js +1 -1
  55. package/lib/schema-engine.js +2 -1
  56. package/lib/schema-pkcs12.js +1 -1
  57. package/lib/schema-pkix.js +3 -0
  58. package/lib/schema-tsp.js +2 -2
  59. package/lib/shbs.js +2 -2
  60. package/lib/sign-scheme.js +9 -9
  61. package/lib/sigstore.js +9 -8
  62. package/lib/smime.js +12 -12
  63. package/lib/tls-cert-compress.js +6 -6
  64. package/lib/trust.js +9 -9
  65. package/lib/tsp-sign.js +11 -11
  66. package/lib/validator-attcert.js +2 -2
  67. package/lib/validator-cose.js +5 -5
  68. package/lib/validator-sig.js +3 -3
  69. package/lib/validator-tpm.js +5 -4
  70. package/lib/webauthn.js +12 -12
  71. package/lib/webcrypto.js +22 -14
  72. package/lib/x509-sign.js +8 -8
  73. package/package.json +1 -1
  74. package/sbom.cdx.json +6 -6
@@ -6,7 +6,7 @@ var async = require("./guard-async");
6
6
  var identifier = require("./guard-identifier");
7
7
  var time = require("./guard-time");
8
8
  var intrinsic = require("./guard-intrinsic");
9
- var util = { types: intrinsic.types };
9
+ var util = intrinsic.assign(intrinsic.create(null), { types: intrinsic.types });
10
10
  var _isArray = intrinsic.isArray;
11
11
  var _bufferFrom = intrinsic.bufferFrom;
12
12
  var _isView = intrinsic.isView;
@@ -65,7 +65,7 @@ function asyncStreamOf(x) {
65
65
  if (isByteSource(x) || x == null || (typeof x !== "object" && typeof x !== "function")) return null;
66
66
  var acquire = x[_asyncIterator];
67
67
  if (typeof acquire !== "function") return null;
68
- var stream = {};
68
+ var stream = intrinsic.create(null);
69
69
  stream[_asyncIterator] = function () { return _apply(acquire, x, _NO_ARGS); };
70
70
  return stream;
71
71
  }
@@ -15,17 +15,17 @@ var _sizeOf = _intrinsic.sizeOf;
15
15
  var _subarray = _intrinsic.uncurry(Uint8Array.prototype.subarray);
16
16
  var _hasOwn = _intrinsic.hasOwn;
17
17
 
18
- var DECOMPRESS = {
18
+ var DECOMPRESS = _intrinsic.assign(_intrinsic.create(null), {
19
19
  zlib: zlib.inflateSync,
20
20
  brotli: zlib.brotliDecompressSync,
21
21
  zstd: zlib.zstdDecompressSync,
22
- };
22
+ });
23
23
 
24
- var _PROBE_COMPRESS = {
24
+ var _PROBE_COMPRESS = _intrinsic.assign(_intrinsic.create(null), {
25
25
  zlib: zlib.deflateSync,
26
26
  brotli: zlib.brotliCompressSync,
27
27
  zstd: zlib.zstdCompressSync,
28
- };
28
+ });
29
29
 
30
30
  function _reportsTruncation(name) {
31
31
  var compress = _PROBE_COMPRESS[name];
@@ -47,7 +47,7 @@ function _reportsTruncation(name) {
47
47
  return !cutAccepted;
48
48
  }
49
49
 
50
- var SAFE = {};
50
+ var SAFE = _intrinsic.create(null);
51
51
  _intrinsic.forEach(_objectKeys(DECOMPRESS), function (n) { if (_reportsTruncation(n)) SAFE[n] = true; });
52
52
 
53
53
  // @enforced-by guard-shape-reinlined
@@ -2,7 +2,7 @@
2
2
  // Copyright (c) blamejs contributors
3
3
  "use strict";
4
4
  var intrinsic = require("./guard-intrinsic");
5
- var util = { types: intrinsic.types };
5
+ var util = intrinsic.assign(intrinsic.create(null), { types: intrinsic.types });
6
6
  // @internal
7
7
 
8
8
  var _isArray = intrinsic.isArray;
@@ -32,6 +32,7 @@ var _Set = intrinsic.Set;
32
32
  var _Map = intrinsic.Map;
33
33
  var _charCodeAt = intrinsic.uncurry(String.prototype.charCodeAt);
34
34
  var _strSplit = intrinsic.uncurry(String.prototype.split);
35
+ var _fnToString = intrinsic.uncurry(Function.prototype.toString);
35
36
  var _hasOwn = intrinsic.hasOwn;
36
37
  var _String = intrinsic.String;
37
38
  var _Number = intrinsic.Number;
@@ -390,7 +391,50 @@ function _settle(opts, E, code, label) {
390
391
  return opts;
391
392
  }
392
393
 
394
+ /** @internal An injectable callback option, refused unless it is callable. A value that is present
395
+ * but not a function reaches the call site otherwise, where the operator gets a bare TypeError
396
+ * naming no option; and one read as absent sends the caller to whatever default the boundary
397
+ * installs, which for a transport is a real network client the caller was trying to replace. Take a
398
+ * value only when it is known to be present; `assertCallableOption` decides presence.
399
+ *
400
+ * Callable is all this asks. A class constructor answers "function" to typeof and still throws when
401
+ * called, but no test here separates one from an ordinary function: freezing a function leaves its
402
+ * prototype non-writable exactly as a class's is, and reading the source text mistakes a method
403
+ * named `class` for the keyword. The boundary that calls the value reports that throw as its own
404
+ * typed error (`guard.async.invoked`), which covers a class however it is disguised, binding it
405
+ * included, and rejects nothing a caller can legitimately pass. */
406
+ // @enforced-by behavioral -- the shape is a typeof test against a string literal, and the pattern
407
+ // @enforced-by behavioral -- scanner blanks every literal, so "function" cannot be told from
408
+ // @enforced-by behavioral -- "string" or "object"; a lexical rule would flag every type check in
409
+ // @enforced-by behavioral -- lib. The per-verb vectors across est, scep, acme, cmp and ct are the
410
+ // @enforced-by behavioral -- guard: each drives the shipped verb and asserts the typed refusal.
411
+ function assertCallable(value, E, code, label, shape) {
412
+ var wanted = label + " must be a function" + (shape ? " " + shape : "");
413
+ if (value === undefined) {
414
+ throw E(code, wanted + ", got undefined");
415
+ }
416
+ if (typeof value !== "function") {
417
+ throw E(code, wanted + ", got " + (value === null ? "null" : typeof value));
418
+ }
419
+ return value;
420
+ }
421
+
422
+ /** @internal The option form: an option counts as supplied when a name lookup finds the key, so a
423
+ * merge that produced `{ transport: undefined }` is a value the caller set rather than an option it
424
+ * left out. Presence is asked the way the boundary asks for the value, which is a plain lookup, so
425
+ * an inherited option from a defaults bag is checked rather than skipped; testing own keys alone
426
+ * would let an inherited null pass here and then be read as absent, selecting the default client.
427
+ * Only a key no lookup finds falls through to that default. */
428
+ // @enforced-by behavioral -- the per-verb vectors across est, scep, acme, cmp, ct and path drive the
429
+ // @enforced-by behavioral -- shipped verb and assert the typed refusal for each unusable value
430
+ function assertCallableOption(opts, key, E, code, label, shape) {
431
+ if (opts == null || !(key in _Object(opts))) return undefined;
432
+ return assertCallable(opts[key], E, code, label, shape);
433
+ }
434
+
393
435
  module.exports = intrinsic.freeze({
436
+ assertCallable: assertCallable,
437
+ assertCallableOption: assertCallableOption,
394
438
  assertCanonicalOid: assertCanonicalOid,
395
439
  assertKnownKeys: assertKnownKeys,
396
440
  assertPlainRecord: assertPlainRecord,
package/lib/guard-name.js CHANGED
@@ -152,7 +152,7 @@ function escapeControlBytes(str) {
152
152
  return out;
153
153
  }
154
154
 
155
- var DN_SPECIAL = { 0x2c: 1, 0x2b: 1, 0x22: 1, 0x5c: 1, 0x3c: 1, 0x3e: 1, 0x3b: 1 };
155
+ var DN_SPECIAL = intrinsic.assign(intrinsic.create(null), { 0x2c: 1, 0x2b: 1, 0x22: 1, 0x5c: 1, 0x3c: 1, 0x3e: 1, 0x3b: 1 });
156
156
  // @enforced-by behavioral -- the escaping has no rename-proof code shape distinct
157
157
  function escapeDnValue(v) {
158
158
  var s = _String(v), out = "";
package/lib/guard-time.js CHANGED
@@ -3,7 +3,9 @@
3
3
  "use strict";
4
4
  // @internal
5
5
 
6
- var util = { types: require("./guard-intrinsic").types };
6
+ var _create = require("./guard-intrinsic").create;
7
+ var _assign = require("./guard-intrinsic").assign;
8
+ var util = _assign(_create(null), { types: require("./guard-intrinsic").types });
7
9
  var _freeze = require("./guard-intrinsic").freeze;
8
10
  var _isNaN = Number.isNaN;
9
11
  var _Date = Date;
package/lib/hpke.js CHANGED
@@ -102,8 +102,8 @@ function _labeledExpand(kdf, suiteId, prk, label, info, len) {
102
102
  }
103
103
 
104
104
 
105
- var OKP_SPKI = { X25519: "302a300506032b656e032100", X448: "3042300506032b656f033900" };
106
- var OKP_PKCS8 = { X25519: "302e020100300506032b656e04220420", X448: "3046020100300506032b656f043a0438" };
105
+ var OKP_SPKI = intrinsic.assign(intrinsic.create(null), { X25519: "302a300506032b656e032100", X448: "3042300506032b656f033900" });
106
+ var OKP_PKCS8 = intrinsic.assign(intrinsic.create(null), { X25519: "302e020100300506032b656e04220420", X448: "3046020100300506032b656f043a0438" });
107
107
 
108
108
  function _importPublic(kem, raw) {
109
109
  if (!Buffer.isBuffer(raw) || raw.length !== kem.Npub) {
@@ -318,9 +318,9 @@ function _recipPrivate(suite, sk) {
318
318
  }
319
319
  }
320
320
 
321
- var _COMMON_KEYS = { mode: 1, info: 1, psk: 1, pskId: 1 };
321
+ var _COMMON_KEYS = intrinsic.assign(intrinsic.create(null), { mode: 1, info: 1, psk: 1, pskId: 1 });
322
322
  function _withCommon(extra) {
323
- var out = {};
323
+ var out = intrinsic.create(null);
324
324
  Object.keys(_COMMON_KEYS).forEach(function (k) { out[k] = 1; });
325
325
  Object.keys(extra).forEach(function (k) { out[k] = 1; });
326
326
  return out;
@@ -348,12 +348,12 @@ function _mode(opts, keys, who) {
348
348
  }
349
349
 
350
350
  // @module @intro; a data registry, not a callable primitive).
351
- var suites = {
352
- KEM: { DHKEM_P256_HKDF_SHA256: 0x0010, DHKEM_P521_HKDF_SHA512: 0x0012, DHKEM_X25519_HKDF_SHA256: 0x0020, DHKEM_X448_HKDF_SHA512: 0x0021 },
353
- KDF: { HKDF_SHA256: 0x0001, HKDF_SHA512: 0x0003 },
354
- AEAD: { AES_128_GCM: 0x0001, AES_256_GCM: 0x0002, CHACHA20_POLY1305: 0x0003, EXPORT_ONLY: 0xFFFF },
355
- MODE: { BASE: MODE_BASE, PSK: MODE_PSK, AUTH: MODE_AUTH, AUTH_PSK: MODE_AUTH_PSK },
356
- };
351
+ var suites = intrinsic.assign(intrinsic.create(null), {
352
+ KEM: intrinsic.assign(intrinsic.create(null), { DHKEM_P256_HKDF_SHA256: 0x0010, DHKEM_P521_HKDF_SHA512: 0x0012, DHKEM_X25519_HKDF_SHA256: 0x0020, DHKEM_X448_HKDF_SHA512: 0x0021 }),
353
+ KDF: intrinsic.assign(intrinsic.create(null), { HKDF_SHA256: 0x0001, HKDF_SHA512: 0x0003 }),
354
+ AEAD: intrinsic.assign(intrinsic.create(null), { AES_128_GCM: 0x0001, AES_256_GCM: 0x0002, CHACHA20_POLY1305: 0x0003, EXPORT_ONLY: 0xFFFF }),
355
+ MODE: intrinsic.assign(intrinsic.create(null), { BASE: MODE_BASE, PSK: MODE_PSK, AUTH: MODE_AUTH, AUTH_PSK: MODE_AUTH_PSK }),
356
+ });
357
357
 
358
358
 
359
359
  /**
@@ -17,10 +17,10 @@ var ALGS = intrinsic.assign(intrinsic.create(null), {
17
17
  "SHA-256": { hash: "sha256", rank: 2, sess: false }, "SHA-256-SESS": { hash: "sha256", rank: 2, sess: true },
18
18
  "MD5": { hash: "md5", rank: 1, sess: false }, "MD5-SESS": { hash: "md5", rank: 1, sess: true },
19
19
  });
20
- var DEFAULT_CODES = {
20
+ var DEFAULT_CODES = intrinsic.assign(intrinsic.create(null), {
21
21
  unsupportedAlgorithm: "digest/unsupported-algorithm", weakAlgorithm: "digest/weak-algorithm",
22
22
  noQop: "digest/no-qop", badChallenge: "digest/bad-challenge",
23
- };
23
+ });
24
24
 
25
25
  function H(hash, s) { return crypto.createHash(hash).update(s, "latin1").digest("hex"); }
26
26
  function KD(hash, secret, data) { return H(hash, secret + ":" + data); }
@@ -440,7 +440,7 @@ function httpsTransport(defaults) {
440
440
  var bodyIsFn = typeof body === "function";
441
441
  if (!bodyIsFn && guard.bytes.isByteSource(body)) body = guard.bytes.source(body, E, C("bad-input"), "the request body");
442
442
 
443
- var reqHeaders = Object.assign({}, request.headers || {});
443
+ var reqHeaders = Object.assign(Object.create(null), request.headers || {});
444
444
  Object.keys(reqHeaders).forEach(function (k) { var lk = k.toLowerCase(); if (lk === "proxy-authorization" || lk === "proxy-connection") delete reqHeaders[k]; });
445
445
  if (bodyIsFn) {
446
446
  Object.keys(reqHeaders).forEach(function (k) { var lk = k.toLowerCase(); if (lk === "content-length" || lk === "transfer-encoding" || lk === "expect") delete reqHeaders[k]; });
@@ -553,7 +553,7 @@ function httpsTransport(defaults) {
553
553
  if (settled) return;
554
554
  settled = true;
555
555
  clearTimer();
556
- var lower = {};
556
+ var lower = Object.create(null);
557
557
  Object.keys(res.headers || {}).forEach(function (k) { lower[k.toLowerCase()] = res.headers[k]; });
558
558
  resolve({
559
559
  status: res.statusCode,
@@ -595,7 +595,7 @@ function httpsTransport(defaults) {
595
595
  if (!prep.proxy) { issue(prep.options); return; }
596
596
 
597
597
  var pinfo = prep.proxy;
598
- var pheaders = { Host: pinfo.originAuthority, Connection: "keep-alive" };
598
+ var pheaders = Object.assign(Object.create(null), { Host: pinfo.originAuthority, Connection: "keep-alive" });
599
599
  if (pinfo.auth) pheaders["Proxy-Authorization"] = _basicProxyHeader(pinfo.auth);
600
600
  var connectOpts = { host: pinfo.host, port: pinfo.port, method: "CONNECT", path: pinfo.originAuthority, headers: pheaders, agent: false };
601
601
  var cr;
package/lib/inspect.js CHANGED
@@ -95,9 +95,9 @@ function _serial(cert, indent) {
95
95
  return "Serial Number:\n" + " ".repeat(indent) + _hexColon(buf, {});
96
96
  }
97
97
 
98
- var CURVE_BITS = { "P-256": 256, "P-384": 384, "P-521": 521, "prime256v1": 256, "secp384r1": 384, "secp521r1": 521 };
98
+ var CURVE_BITS = Object.assign(Object.create(null), { "P-256": 256, "P-384": 384, "P-521": 521, "prime256v1": 256, "secp384r1": 384, "secp521r1": 521 });
99
99
  var NIST_NAME = NAMES.NIST_CURVE;
100
- var RSA_KEY_ALGS = { rsaEncryption: 1, rsassaPss: 1, rsaesOaep: 1 };
100
+ var RSA_KEY_ALGS = Object.assign(Object.create(null), { rsaEncryption: 1, rsassaPss: 1, rsaesOaep: 1 });
101
101
  function _keyBlock(spki, pad) {
102
102
  var algName = _algName(spki.algorithm);
103
103
  var out = [pad + "Public Key Algorithm: " + algName];
@@ -214,7 +214,7 @@ function _renderCrlDp(decoded, inner) {
214
214
  }
215
215
 
216
216
 
217
- var EXT_RENDERERS = {
217
+ var EXT_RENDERERS = Object.assign(Object.create(null), {
218
218
  keyUsage: function (decoded, inner) {
219
219
  return inner + Object.keys(KU_LABEL).filter(function (k) { return decoded[k]; }).map(function (k) { return KU_LABEL[k]; }).join(", ");
220
220
  },
@@ -301,7 +301,7 @@ var EXT_RENDERERS = {
301
301
  cRLDistributionPoints: _renderCrlDp,
302
302
  freshestCRL: _renderCrlDp,
303
303
  authorityInfoAccess: function (decoded, inner) {
304
- var LABEL = { caIssuers: "CA Issuers", ocsp: "OCSP" };
304
+ var LABEL = Object.assign(Object.create(null), { caIssuers: "CA Issuers", ocsp: "OCSP" });
305
305
  return (decoded || []).map(function (ad) {
306
306
  var m = null;
307
307
  try { m = oid.name(ad.accessMethod); } catch (_e) { /* allow:swallow-unverified display best-effort: an unregistered accessMethod OID falls back to the raw dotted OID below (inspection is best-effort, never a verdict) */ }
@@ -369,7 +369,7 @@ var EXT_RENDERERS = {
369
369
  }
370
370
  return akiLines.length ? akiLines.join("\n") : inner + "keyid:(none)";
371
371
  },
372
- };
372
+ });
373
373
  EXT_RENDERERS.msApplicationPolicies = EXT_RENDERERS.certificatePolicies;
374
374
 
375
375
 
@@ -378,7 +378,7 @@ function _renderExtValue(ext, decoded, inner) {
378
378
  return fn ? fn(decoded, inner) : null;
379
379
  }
380
380
 
381
- var _STRING_TAGS = { 12: 1, 19: 1, 22: 1, 20: 1, 26: 1, 27: 1, 30: 1 };
381
+ var _STRING_TAGS = Object.assign(Object.create(null), { 12: 1, 19: 1, 22: 1, 20: 1, 26: 1, 27: 1, 30: 1 });
382
382
  function _printable(buf) {
383
383
  return buf.length > 0 && buf.every(function (b) { return b >= 0x20 && b < 0x7f; });
384
384
  }
@@ -499,7 +499,7 @@ function _looksParsedCms(o) {
499
499
  var shape = _CMS_SHAPE[o.contentType];
500
500
  return shape ? shape(o) : false;
501
501
  }
502
- var _INSPECT_ENTRY = { pemLabel: null, PemError: InspectError, ErrorClass: InspectError, prefix: "inspect" };
502
+ var _INSPECT_ENTRY = Object.assign(Object.create(null), { pemLabel: null, PemError: InspectError, ErrorClass: InspectError, prefix: "inspect" });
503
503
  function _coerce(input, spec) {
504
504
  if (input && typeof input === "object" && !Buffer.isBuffer(input) && !(input instanceof Uint8Array) && input[spec.marker] !== undefined) {
505
505
  if (!spec.looksParsed(input)) throw _err("inspect/bad-input", "input has a " + spec.marker + " property but is not a complete " + spec.parsedName + " result");
@@ -657,7 +657,7 @@ function csrReport(input) {
657
657
 
658
658
  var OID_SIGNED_DATA = oid.byName("signedData");
659
659
  function _isObj(x) { return !!x && typeof x === "object"; }
660
- var _CMS_SHAPE = {};
660
+ var _CMS_SHAPE = Object.create(null);
661
661
  _CMS_SHAPE[OID_SIGNED_DATA] = function (o) { return Array.isArray(o.digestAlgorithms) && _isObj(o.encapContentInfo) && Array.isArray(o.signerInfos); };
662
662
  _CMS_SHAPE[oid.byName("envelopedData")] = function (o) { return Array.isArray(o.recipientInfos) && _isObj(o.encryptedContentInfo); };
663
663
  _CMS_SHAPE[oid.byName("encryptedData")] = function (o) { return _isObj(o.encryptedContentInfo); };
@@ -784,7 +784,7 @@ function cmsReport(input) {
784
784
  }
785
785
 
786
786
 
787
- var _INSPECT_BY_FORMAT = { x509: certificate, crl: crlReport, csr: csrReport, cms: cmsReport };
787
+ var _INSPECT_BY_FORMAT = Object.assign(Object.create(null), { x509: certificate, crl: crlReport, csr: csrReport, cms: cmsReport });
788
788
 
789
789
  /**
790
790
  * @primitive pki.inspect.any
package/lib/jose.js CHANGED
@@ -129,7 +129,7 @@ function parseJson(input) {
129
129
  }
130
130
 
131
131
 
132
- var SIG_ALGS = {
132
+ var SIG_ALGS = intrinsic.assign(intrinsic.create(null), {
133
133
  ES256: { kty: "EC", crv: "P-256", hash: "SHA-256", subtle: "ECDSA", sigBytes: 64 },
134
134
  ES384: { kty: "EC", crv: "P-384", hash: "SHA-384", subtle: "ECDSA", sigBytes: 96 },
135
135
  ES512: { kty: "EC", crv: "P-521", hash: "SHA-512", subtle: "ECDSA", sigBytes: 132 },
@@ -139,26 +139,26 @@ var SIG_ALGS = {
139
139
  PS256: { kty: "RSA", hash: "SHA-256", subtle: "RSA-PSS", saltLength: 32 },
140
140
  PS384: { kty: "RSA", hash: "SHA-384", subtle: "RSA-PSS", saltLength: 48 },
141
141
  PS512: { kty: "RSA", hash: "SHA-512", subtle: "RSA-PSS", saltLength: 64 },
142
- EdDSA: { kty: "OKP", subtle: "EdDSA", sigBytesByCrv: { Ed25519: 64, Ed448: 114 } },
142
+ EdDSA: { kty: "OKP", subtle: "EdDSA", sigBytesByCrv: intrinsic.assign(intrinsic.create(null), { Ed25519: 64, Ed448: 114 }) },
143
143
  "ML-DSA-44": { kty: "AKP", subtle: "ML-DSA-44", sigBytes: 2420 },
144
144
  "ML-DSA-65": { kty: "AKP", subtle: "ML-DSA-65", sigBytes: 3309 },
145
145
  "ML-DSA-87": { kty: "AKP", subtle: "ML-DSA-87", sigBytes: 4627 },
146
- };
146
+ });
147
147
 
148
- var MAC_ALGS = {
148
+ var MAC_ALGS = intrinsic.assign(intrinsic.create(null), {
149
149
  HS256: { kty: "oct", hash: "SHA-256", sigBytes: 32 },
150
150
  HS384: { kty: "oct", hash: "SHA-384", sigBytes: 48 },
151
151
  HS512: { kty: "oct", hash: "SHA-512", sigBytes: 64 },
152
- };
152
+ });
153
153
 
154
- var UNDERSTOOD_HEADER = { alg: 1, nonce: 1, url: 1, jwk: 1, kid: 1, crit: 1 };
154
+ var UNDERSTOOD_HEADER = intrinsic.assign(intrinsic.create(null), { alg: 1, nonce: 1, url: 1, jwk: 1, kid: 1, crit: 1 });
155
155
 
156
156
 
157
- var PROFILES = {
157
+ var PROFILES = intrinsic.assign(intrinsic.create(null), {
158
158
  "acme-outer": { algs: SIG_ALGS, nonce: "required", keyId: "one-of", requireUrl: true },
159
159
  "eab-inner": { algs: MAC_ALGS, nonce: "forbidden", keyId: "kid", requireUrl: true },
160
160
  "keychange-inner": { algs: SIG_ALGS, nonce: "forbidden", keyId: "jwk", requireUrl: true },
161
- };
161
+ });
162
162
 
163
163
  function _checkHeader(header, profileName) {
164
164
  var profile = PROFILES[profileName];
@@ -192,7 +192,7 @@ function _checkHeader(header, profileName) {
192
192
  if (_hasOwn(header, "crit")) {
193
193
  var crit = header.crit;
194
194
  if (!_isArray(crit) || crit.length === 0) throw E("jose/bad-crit", "crit must be a non-empty array");
195
- var seen = {};
195
+ var seen = intrinsic.create(null);
196
196
  for (var c = 0; c < crit.length; c++) {
197
197
  var name = crit[c];
198
198
  if (typeof name !== "string") throw E("jose/bad-crit", "crit entries must be strings");
@@ -315,7 +315,7 @@ function assertPublicJwk(jwk) {
315
315
  * var v = await pki.jose.verify(jws, { profile: "acme-outer", key: accountJwk });
316
316
  * v.header.alg; // -> "ES256"
317
317
  */
318
- var _VERIFY_KEYS = { key: 1, profile: 1 };
318
+ var _VERIFY_KEYS = intrinsic.assign(intrinsic.create(null), { key: 1, profile: 1 });
319
319
  async function verify(jws, opts) {
320
320
  opts = opts || {};
321
321
  guard.identifier.assertKnownKeys(opts, _VERIFY_KEYS, E, "jose/bad-input", "unknown pki.jose.verify option ");
@@ -395,8 +395,8 @@ async function verify(jws, opts) {
395
395
  * nonce: "oFvnlFP1wIhRlYS2jTaXbA", url: "https://ca.example/acme/new-acct" };
396
396
  * var jws = await pki.jose.sign({ protected: hdr, payload: Buffer.from("{}"), key: priv });
397
397
  */
398
- var _SIGN_KEYS = { protected: 1, payload: 1, key: 1, jwk: 1, profile: 1 };
399
- var _SIGN_KEYS_EMBEDDED_JWK = { protected: 1, payload: 1, key: 1, profile: 1 };
398
+ var _SIGN_KEYS = intrinsic.assign(intrinsic.create(null), { protected: 1, payload: 1, key: 1, jwk: 1, profile: 1 });
399
+ var _SIGN_KEYS_EMBEDDED_JWK = intrinsic.assign(intrinsic.create(null), { protected: 1, payload: 1, key: 1, profile: 1 });
400
400
  async function sign(opts) {
401
401
  opts = opts || {};
402
402
  guard.identifier.assertKnownKeys(opts, _SIGN_KEYS, E, "jose/bad-input", "unknown pki.jose.sign option ");
@@ -442,13 +442,13 @@ async function sign(opts) {
442
442
  }
443
443
 
444
444
 
445
- var THUMBPRINT_MEMBERS = {
445
+ var THUMBPRINT_MEMBERS = intrinsic.assign(intrinsic.create(null), {
446
446
  EC: ["crv", "kty", "x", "y"],
447
447
  RSA: ["e", "kty", "n"],
448
448
  oct: ["k", "kty"],
449
449
  OKP: ["crv", "kty", "x"],
450
450
  AKP: ["alg", "kty", "pub"],
451
- };
451
+ });
452
452
 
453
453
  /**
454
454
  * @primitive pki.jose.thumbprint
package/lib/key.js CHANGED
@@ -38,7 +38,7 @@ function _err(code, msg, cause) { return new KeyError(code, msg, cause); }
38
38
 
39
39
  var CIPHER_NAME = Object.assign(Object.create(null), { "aes-128-cbc": "aes128-CBC", "aes-192-cbc": "aes192-CBC", "aes-256-cbc": "aes256-CBC" });
40
40
 
41
- var INFER_ALG = {};
41
+ var INFER_ALG = Object.create(null);
42
42
  ["Ed25519", "Ed448", "X25519", "X448"].forEach(function (n) { INFER_ALG[O(n)] = { name: n }; });
43
43
  [["id-ml-dsa-44", "ML-DSA-44"], ["id-ml-dsa-65", "ML-DSA-65"], ["id-ml-dsa-87", "ML-DSA-87"],
44
44
  ["id-ml-kem-512", "ML-KEM-512"], ["id-ml-kem-768", "ML-KEM-768"], ["id-ml-kem-1024", "ML-KEM-1024"]
@@ -88,7 +88,7 @@ async function _toPrivateKeyDer(input) {
88
88
  * var enc = await pki.key.encrypt(der, "s3cr3t", { pem: true });
89
89
  * var back = await pki.key.decrypt(enc, "s3cr3t");
90
90
  */
91
- var _ENCRYPT_OPTS = { cipher: 1, iterations: 1, pem: 1, prf: 1, salt: 1 };
91
+ var _ENCRYPT_OPTS = Object.assign(Object.create(null), { cipher: 1, iterations: 1, pem: 1, prf: 1, salt: 1 });
92
92
 
93
93
  async function encrypt(privateKey, password, opts) {
94
94
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.encrypt options");
@@ -147,7 +147,7 @@ async function encrypt(privateKey, password, opts) {
147
147
  * var enc = await pki.key.encrypt(await pki.key.export(pair.privateKey), "s3cr3t", { pem: true });
148
148
  * var der = await pki.key.decrypt(enc, "s3cr3t");
149
149
  */
150
- var _DECRYPT_OPTS = { maxIterations: 1, pem: 1 };
150
+ var _DECRYPT_OPTS = Object.assign(Object.create(null), { maxIterations: 1, pem: 1 });
151
151
 
152
152
  async function decrypt(encrypted, password, opts) {
153
153
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.decrypt options");
@@ -203,7 +203,7 @@ function _decryptPbes2(encAlg, ciphertext, password, opts) {
203
203
  * var pair = await pki.key.generate("Ed25519");
204
204
  * var spkiPem = await pki.key.export(pair.publicKey, { format: "pem" });
205
205
  */
206
- var _EXPORT_OPTS = { format: 1, label: 1 };
206
+ var _EXPORT_OPTS = Object.assign(Object.create(null), { format: 1, label: 1 });
207
207
 
208
208
  async function export_(key, opts) {
209
209
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.export options");
@@ -246,7 +246,7 @@ async function export_(key, opts) {
246
246
  * var spki = await pki.key.export(pair.publicKey);
247
247
  * var pub = await pki.key.import(spki); // Ed25519 -- algorithm inferred
248
248
  */
249
- var _IMPORT_OPTS = { algorithm: 1, extractable: 1, password: 1, usages: 1 };
249
+ var _IMPORT_OPTS = Object.assign(Object.create(null), { algorithm: 1, extractable: 1, password: 1, usages: 1 });
250
250
 
251
251
  async function import_(input, opts) {
252
252
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.import options");
@@ -290,7 +290,7 @@ async function import_(input, opts) {
290
290
  * var pair = await pki.key.generate("Ed25519");
291
291
  * var pkcs8 = await pki.key.export(pair.privateKey);
292
292
  */
293
- var _GENERATE_OPTS = { extractable: 1, usages: 1 };
293
+ var _GENERATE_OPTS = Object.assign(Object.create(null), { extractable: 1, usages: 1 });
294
294
 
295
295
  async function generate(algorithm, opts) {
296
296
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.generate options");
@@ -325,7 +325,7 @@ async function generate(algorithm, opts) {
325
325
  * var pair = await pki.key.generate("Ed25519");
326
326
  * var spki = await pki.key.publicFromPrivate(await pki.key.export(pair.privateKey));
327
327
  */
328
- var _PUBLIC_FROM_PRIVATE_OPTS = { pem: 1 };
328
+ var _PUBLIC_FROM_PRIVATE_OPTS = Object.assign(Object.create(null), { pem: 1 });
329
329
 
330
330
  async function publicFromPrivate(privateKey, opts) {
331
331
  opts = guard.identifier.optionsObject(opts, _err, "key/bad-input", "pki.key.publicFromPrivate options");
package/lib/lint.js CHANGED
@@ -129,7 +129,8 @@ function _effective(rule, cert) {
129
129
  }
130
130
 
131
131
  function _runLints(rules, cert, ctx) {
132
- var findings = [], counts = { fatal: 0, error: 0, warn: 0, notice: 0, pass: 0, na: 0, ne: 0 }, ran = [];
132
+ var findings = [], ran = [];
133
+ var counts = Object.assign(Object.create(null), { fatal: 0, error: 0, warn: 0, notice: 0, pass: 0, na: 0, ne: 0 });
133
134
  rules.forEach(function (rule) {
134
135
  if (rule.appliesTo && !rule.appliesTo(cert, ctx)) { counts.na++; return; }
135
136
  if (!_effective(rule, cert)) { counts.ne++; return; }
@@ -172,7 +173,7 @@ function _subjectCNs(cert) {
172
173
  return out;
173
174
  }
174
175
 
175
- var _CRITICAL_LEGIT = {};
176
+ var _CRITICAL_LEGIT = Object.create(null);
176
177
  _CRITICAL_LEGIT[oid.byName("precertificatePoison")] = true;
177
178
  function _isUnknownExtension(extOid) {
178
179
  if (path.PROCESSED_EXTENSIONS[extOid] !== true) return _CRITICAL_LEGIT[extOid] !== true;
@@ -560,7 +561,7 @@ function _applyThreshold(report, severity) {
560
561
  * report.worst; // "notice" | "error" | ...
561
562
  * report.findings.map(function (f) { return f.id; });
562
563
  */
563
- var _CERTIFICATE_OPTS = { profile: 1, severity: 1 };
564
+ var _CERTIFICATE_OPTS = Object.assign(Object.create(null), { profile: 1, severity: 1 });
564
565
 
565
566
  function certificate(input, opts) {
566
567
  opts = guard.identifier.optionsObject(opts, _cfg, "lint/bad-input", "pki.lint options");
@@ -573,7 +574,8 @@ function certificate(input, opts) {
573
574
  var ingested = _ingest(input);
574
575
  var report;
575
576
  if (ingested.fatal) {
576
- report = { findings: [ingested.fatal], counts: { fatal: 1, error: 0, warn: 0, notice: 0, pass: 0, na: 0, ne: 0 }, ran: [] };
577
+ report = { findings: [ingested.fatal], ran: [],
578
+ counts: Object.assign(Object.create(null), { fatal: 1, error: 0, warn: 0, notice: 0, pass: 0, na: 0, ne: 0 }) };
577
579
  } else {
578
580
  var ctx = _makeCtx(ingested.cert, opts.profile);
579
581
  report = _runLints(rules, ingested.cert, ctx);
package/lib/merkle.js CHANGED
@@ -180,7 +180,7 @@ function emptyRootHash() {
180
180
  * var lh = pki.merkle.leafHash(Buffer.from([0]));
181
181
  * pki.merkle.verifyInclusion({ leafIndex: 0, treeSize: 1, leafHash: lh, proof: [], rootHash: lh }); // -> true
182
182
  */
183
- var _INCLUSION_KEYS = { leafIndex: 1, treeSize: 1, leafHash: 1, rootHash: 1, proof: 1 };
183
+ var _INCLUSION_KEYS = Object.assign(Object.create(null), { leafIndex: 1, treeSize: 1, leafHash: 1, rootHash: 1, proof: 1 });
184
184
  function verifyInclusion(opts) {
185
185
  opts = opts || {};
186
186
  guard.identifier.assertKnownKeys(opts, _INCLUSION_KEYS, function (c, m) { return new MerkleError(c, m); },
@@ -252,7 +252,7 @@ function verifyInclusion(opts) {
252
252
  * var r = pki.merkle.leafHash(Buffer.from([0]));
253
253
  * pki.merkle.verifyConsistency({ oldSize: 1, newSize: 1, oldRoot: r, newRoot: r, proof: [] }); // -> true
254
254
  */
255
- var _CONSISTENCY_KEYS = { oldSize: 1, newSize: 1, oldRoot: 1, newRoot: 1, proof: 1 };
255
+ var _CONSISTENCY_KEYS = Object.assign(Object.create(null), { oldSize: 1, newSize: 1, oldRoot: 1, newRoot: 1, proof: 1 });
256
256
  function verifyConsistency(opts) {
257
257
  opts = opts || {};
258
258
  guard.identifier.assertKnownKeys(opts, _CONSISTENCY_KEYS, function (c, m) { return new MerkleError(c, m); },
package/lib/mime.js CHANGED
@@ -68,7 +68,7 @@ function _unfoldHeaders(headerText) {
68
68
  function _parseStructured(headerValue) {
69
69
  var parts = _splitSemicolons(headerValue);
70
70
  var type = _stripComments(parts[0]).trim().toLowerCase();
71
- var params = {};
71
+ var params = Object.create(null);
72
72
  for (var i = 1; i < parts.length; i++) {
73
73
  var p = _stripComments(parts[i]);
74
74
  var eq = p.indexOf("=");
@@ -131,7 +131,7 @@ function parse(input, E, code) {
131
131
  var cte = (header("content-transfer-encoding") || "").trim().toLowerCase() || "7bit";
132
132
  return {
133
133
  headers: headers, header: header,
134
- contentType: ctv != null ? _parseStructured(ctv) : { value: "text/plain", type: "text/plain", params: {} },
134
+ contentType: ctv != null ? _parseStructured(ctv) : { value: "text/plain", type: "text/plain", params: Object.create(null) },
135
135
  cte: cte,
136
136
  headerBytes: headerBytes, bodyBytes: bodyBytes, body: bodyBytes, bytes: bytes,
137
137
  };
@@ -12,7 +12,7 @@ var compositeSig = require("./composite-sig");
12
12
  var webcrypto = require("./webcrypto");
13
13
  var subtle = webcrypto.webcrypto.subtle;
14
14
 
15
- var OCSP_CERTID_HASHES = {};
15
+ var OCSP_CERTID_HASHES = intrinsic.create(null);
16
16
  OCSP_CERTID_HASHES[oid.byName("sha1")] = "SHA-1";
17
17
  OCSP_CERTID_HASHES[oid.byName("sha256")] = "SHA-256";
18
18
  OCSP_CERTID_HASHES[oid.byName("sha384")] = "SHA-384";
package/lib/ocsp.js CHANGED
@@ -139,9 +139,9 @@ function buildRequest(query, opts) {
139
139
  ], _buildRequest);
140
140
  }
141
141
 
142
- var _BUILD_REQUEST_OPTS = {
142
+ var _BUILD_REQUEST_OPTS = Object.assign(Object.create(null), {
143
143
  hashAlgorithm: 1, nonce: 1, pem: 1, profile: 1, requestorName: 1, signer: 1
144
- };
144
+ });
145
145
 
146
146
  function _buildRequest(query, opts) {
147
147
  opts = guard.identifier.optionsObject(opts, _err, "ocsp/bad-input", "pki.ocsp.buildRequest options");
@@ -250,7 +250,7 @@ function sign(responseData, responder, opts) {
250
250
  ], _sign);
251
251
  }
252
252
 
253
- var _SIGN_OPTS = { embedCert: 1, extendedRevoke: 1, nonce: 1, pem: 1 };
253
+ var _SIGN_OPTS = Object.assign(Object.create(null), { embedCert: 1, extendedRevoke: 1, nonce: 1, pem: 1 });
254
254
 
255
255
  function _sign(responseData, responder, opts) {
256
256
  opts = guard.identifier.optionsObject(opts, _err, "ocsp/bad-input", "pki.ocsp.sign options");
@@ -425,7 +425,7 @@ function buildErrorResponse(status) {
425
425
  * var res = await pki.ocsp.verify(responseDer, { cert: leafDer, issuer: caDer });
426
426
  * res.status; // "good" | "revoked" | "unknown"
427
427
  */
428
- var _VERIFY_OPTS = { cert: 1, historicalMode: 1, issuer: 1, requestNonce: 1, time: 1 };
428
+ var _VERIFY_OPTS = Object.assign(Object.create(null), { cert: 1, historicalMode: 1, issuer: 1, requestNonce: 1, time: 1 });
429
429
 
430
430
  function verify(response, opts) {
431
431
  try {
@@ -465,7 +465,7 @@ function _responseNonce(parsed) {
465
465
  return null;
466
466
  }
467
467
 
468
- var _VERIFY_REQUEST_OPTS = { certs: 1 };
468
+ var _VERIFY_REQUEST_OPTS = Object.assign(Object.create(null), { certs: 1 });
469
469
  function _requestFromBytes(request) {
470
470
  if (guard.bytes.isByteSource(request)) request = guard.bytes.snapshotSource(request, OcspError, "ocsp/bad-input", "the OCSP request");
471
471
  return ocspSchema.parseRequest(request);
package/lib/oid.js CHANGED
@@ -42,7 +42,7 @@ var OidError = frameworkError.OidError;
42
42
 
43
43
  function _oidError(c, m) { return new OidError(c, m); }
44
44
 
45
- var FAMILIES = {
45
+ var FAMILIES = Object.assign(Object.create(null), {
46
46
  attributeType: { base: [2, 5, 4], of: {
47
47
  commonName: 3, surname: 4, serialNumber: 5, countryName: 6,
48
48
  localityName: 7, stateOrProvinceName: 8, streetAddress: 9,
@@ -335,7 +335,7 @@ var FAMILIES = {
335
335
  scepMessageType: 2, scepPkiStatus: 3, scepFailInfo: 4,
336
336
  scepSenderNonce: 5, scepRecipientNonce: 6, scepTransactionId: 7 } },
337
337
  scep: { base: [1, 3, 6, 1, 5, 5, 7, 24], of: { scepFailInfoText: 1 } },
338
- };
338
+ });
339
339
 
340
340
  var _byOid = new Map();
341
341
  var _byName = new Map();
@@ -483,7 +483,7 @@ function registerFamily(base, members) {
483
483
  }
484
484
 
485
485
  function all() {
486
- var out = {};
486
+ var out = Object.create(null);
487
487
  _byOid.forEach(function (v, k) { out[k] = v; });
488
488
  return out;
489
489
  }