@blamejs/pki 0.6.40 → 0.6.42

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 (75) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +1 -1
  3. package/lib/acme.js +24 -13
  4. package/lib/asn1-der.js +5 -5
  5. package/lib/attrcert-sign.js +14 -14
  6. package/lib/cbor-det.js +2 -2
  7. package/lib/cmc-build.js +16 -16
  8. package/lib/cmc-verify.js +5 -5
  9. package/lib/cmp-build.js +29 -19
  10. package/lib/cmp-session.js +21 -16
  11. package/lib/cmp-verify.js +4 -4
  12. package/lib/cms-decrypt.js +8 -8
  13. package/lib/cms-encrypt.js +22 -22
  14. package/lib/cms-sign.js +17 -17
  15. package/lib/cms-verify.js +6 -6
  16. package/lib/composite-kem.js +1 -1
  17. package/lib/composite-sig.js +4 -4
  18. package/lib/constants.js +13 -9
  19. package/lib/crl-sign.js +17 -17
  20. package/lib/crmf-sign.js +11 -11
  21. package/lib/csr-sign.js +2 -2
  22. package/lib/ct.js +19 -11
  23. package/lib/edwards-point.js +2 -2
  24. package/lib/est.js +74 -43
  25. package/lib/guard-async.js +17 -1
  26. package/lib/guard-bytes.js +2 -2
  27. package/lib/guard-compress.js +5 -5
  28. package/lib/guard-identifier.js +45 -1
  29. package/lib/guard-name.js +272 -1
  30. package/lib/guard-time.js +3 -1
  31. package/lib/hpke.js +10 -10
  32. package/lib/http-digest.js +2 -2
  33. package/lib/http-transport.js +3 -3
  34. package/lib/inspect.js +9 -9
  35. package/lib/jose.js +14 -14
  36. package/lib/key.js +7 -7
  37. package/lib/lint.js +6 -4
  38. package/lib/merkle.js +2 -2
  39. package/lib/mime.js +2 -2
  40. package/lib/ocsp-verify.js +1 -1
  41. package/lib/ocsp.js +5 -5
  42. package/lib/oid.js +3 -3
  43. package/lib/path-validate.js +50 -120
  44. package/lib/pbes2.js +2 -2
  45. package/lib/pkcs12-build.js +15 -15
  46. package/lib/pki-build.js +2 -2
  47. package/lib/scep.js +47 -16
  48. package/lib/schema-all.js +1 -1
  49. package/lib/schema-attrcert.js +4 -3
  50. package/lib/schema-c509.js +23 -23
  51. package/lib/schema-cmc.js +6 -6
  52. package/lib/schema-cmp.js +3 -3
  53. package/lib/schema-cms.js +15 -8
  54. package/lib/schema-crmf.js +1 -1
  55. package/lib/schema-csr.js +1 -1
  56. package/lib/schema-engine.js +2 -1
  57. package/lib/schema-pkcs12.js +1 -1
  58. package/lib/schema-pkix.js +3 -0
  59. package/lib/schema-tsp.js +2 -2
  60. package/lib/shbs.js +2 -2
  61. package/lib/sign-scheme.js +9 -9
  62. package/lib/sigstore.js +9 -8
  63. package/lib/smime.js +12 -12
  64. package/lib/tls-cert-compress.js +6 -6
  65. package/lib/trust.js +179 -10
  66. package/lib/tsp-sign.js +11 -11
  67. package/lib/validator-attcert.js +2 -2
  68. package/lib/validator-cose.js +5 -5
  69. package/lib/validator-sig.js +3 -3
  70. package/lib/validator-tpm.js +5 -4
  71. package/lib/webauthn.js +12 -12
  72. package/lib/webcrypto.js +22 -14
  73. package/lib/x509-sign.js +8 -8
  74. package/package.json +1 -1
  75. package/sbom.cdx.json +6 -6
@@ -30,13 +30,13 @@ var OID_IMPLICIT_CONFIRM = oid.byName("implicitConfirm");
30
30
  var _engine = null;
31
31
  function setEngine(engine) { _engine = engine; }
32
32
 
33
- var HASHLESS_SIG_OIDS = {};
33
+ var HASHLESS_SIG_OIDS = Object.create(null);
34
34
  (function () {
35
35
  var names = ["Ed25519", "Ed448", "id-ml-dsa-44", "id-ml-dsa-65", "id-ml-dsa-87"];
36
36
  ["sha2", "shake"].forEach(function (h) { ["128s", "128f", "192s", "192f", "256s", "256f"].forEach(function (s) { names.push("id-slh-dsa-" + h + "-" + s); }); });
37
37
  names.forEach(function (n) { var o = oid.byName(n); if (o) HASHLESS_SIG_OIDS[o] = 1; });
38
38
  })();
39
- var SIG_OID_TO_HASH = {};
39
+ var SIG_OID_TO_HASH = Object.create(null);
40
40
  [["sha256WithRSAEncryption", "SHA-256"], ["sha384WithRSAEncryption", "SHA-384"], ["sha512WithRSAEncryption", "SHA-512"],
41
41
  ["ecdsaWithSHA256", "SHA-256"], ["ecdsaWithSHA384", "SHA-384"], ["ecdsaWithSHA512", "SHA-512"]].forEach(function (row) {
42
42
  var o = oid.byName(row[0]); if (o) SIG_OID_TO_HASH[o] = row[1];
@@ -46,24 +46,24 @@ var OID_RSA_ENCRYPTION = oid.byName("rsaEncryption");
46
46
  var OID_IDP = oid.byName("issuingDistributionPoint");
47
47
  var OID_BASIC_CONSTRAINTS = oid.byName("basicConstraints");
48
48
  var OID_KEY_USAGE = oid.byName("keyUsage");
49
- var HASH_OID_TO_DIGEST = {};
49
+ var HASH_OID_TO_DIGEST = Object.create(null);
50
50
  [["sha256", "SHA-256"], ["sha384", "SHA-384"], ["sha512", "SHA-512"]].forEach(function (row) { var o = oid.byName(row[0]); if (o) HASH_OID_TO_DIGEST[o] = row[1]; });
51
- var COMPOSITE_PH_HASHALG = { "SHA-256": "sha256", "SHA-384": "sha384", "SHA-512": "sha512" };
51
+ var COMPOSITE_PH_HASHALG = Object.assign(Object.create(null), { "SHA-256": "sha256", "SHA-384": "sha384", "SHA-512": "sha512" });
52
52
 
53
- var KNOWN_SESSION_OPTS = {
53
+ var KNOWN_SESSION_OPTS = Object.assign(Object.create(null), {
54
54
  url: 1, key: 1, cert: 1, mac: 1, trustAnchors: 1, intermediates: 1, recipient: 1, sender: 1,
55
55
  extraCerts: 1, implicitConfirm: 1, maxPolls: 1, maxTotalWait: 1, sleep: 1, time: 1,
56
56
  transport: 1, tls: 1, headers: 1, timeout: 1, maxResponseBytes: 1, proxy: 1, pss: 1, digestAlgorithm: 1,
57
57
  acceptCert: 1, senderKID: 1, recipKID: 1, expectedSender: 1,
58
- };
58
+ });
59
59
 
60
60
  var TRANSCRIPT_RETAIN_RESPONSES = 2;
61
61
  var DEFAULT_MAX_POLLS = 20;
62
62
  var DEFAULT_MAX_TOTAL_WAIT = retryAfter.MAX_RETRY_AFTER_SECONDS;
63
63
  var DEFAULT_CERT_REQ_ID = 0;
64
64
  var P10CR_CERT_REQ_ID = -1;
65
- var ENROLL_ARMS = { ir: 1, cr: 1, kur: 1, p10cr: 1 };
66
- var RESPONSE_ARM = { ir: "ip", cr: "cp", kur: "kup", p10cr: "cp", rr: "rp", genm: "genp" };
65
+ var ENROLL_ARMS = Object.assign(Object.create(null), { ir: 1, cr: 1, kur: 1, p10cr: 1 });
66
+ var RESPONSE_ARM = Object.assign(Object.create(null), { ir: "ip", cr: "cp", kur: "kup", p10cr: "cp", rr: "rp", genm: "genp" });
67
67
  var WHOLE_MESSAGE_CERT_REQ_ID = -1;
68
68
 
69
69
  var INFO_OPS = Object.assign(Object.create(null), {
@@ -72,7 +72,7 @@ var INFO_OPS = Object.assign(Object.create(null), {
72
72
  certReqTemplate: { name: "certReqTemplate", requestOid: "certReqTemplate", responseOid: "certReqTemplate", value: false, read: "readCertReqTemplate" },
73
73
  crlUpdate: { name: "crlUpdate", requestOid: "crlStatusList", responseOid: "crls", value: "crlStatus", read: "readCrls" },
74
74
  });
75
- var KNOWN_REVOKE_KEYS = { certificate: 1, certDetails: 1, reason: 1 };
75
+ var KNOWN_REVOKE_KEYS = Object.assign(Object.create(null), { certificate: 1, certDetails: 1, reason: 1 });
76
76
  var RSA_ARCS = ["rsaEncryption", "rsaSignatureWithripemd160", "id-TA-RSA-v1-5-SHA-256",
77
77
  "sigS-ISO9796-1-DFUE", "sigS-ISO9796-2Withrsa", "sigS-ISO9796-2rndWithrsa"].map(function (n) {
78
78
  return oid.toArcs(oid.byName(n)).slice(0, -1);
@@ -97,7 +97,7 @@ var CRL_REASON_NAMES = Object.create(null);
97
97
  Object.keys(constants.NAMES.CRL_REASON).forEach(function (v) { CRL_REASON_NAMES[constants.NAMES.CRL_REASON[v]] = 1; });
98
98
 
99
99
  function _isGranted(code) { return code === 0 || code === 1; }
100
- var PKI_STATUS_NAMES = { 0: "accepted", 1: "grantedWithMods", 2: "rejection", 3: "waiting" };
100
+ var PKI_STATUS_NAMES = Object.assign(Object.create(null), { 0: "accepted", 1: "grantedWithMods", 2: "rejection", 3: "waiting" });
101
101
 
102
102
  function _certReqIdEq(a, b) { return a != null && b != null && BigInt(a) === BigInt(b); }
103
103
 
@@ -308,6 +308,11 @@ function session(opts) {
308
308
  guard.identifier.assertPlainRecord(opts, _err, "cmp/bad-input", "opts");
309
309
  guard.identifier.optionsObject(opts, _err, "cmp/bad-input", "opts");
310
310
  guard.identifier.assertKnownKeys(opts, KNOWN_SESSION_OPTS, _err, "cmp/bad-input", "unknown session opts field ");
311
+ /** @internal Taken from the caller's object, before the copy below keeps own properties only. A
312
+ * defaults bag carries its options on a prototype, so checking the copy would find no transport,
313
+ * drop the one the caller supplied, and send the session to the default client instead. */
314
+ var _transport = guard.identifier.assertCallableOption(opts, "transport", _err, "cmp/bad-input",
315
+ "opts.transport", "(url, reqDer, opts) => Promise<{ responseBytes, status }>");
311
316
  opts = Object.assign({}, opts);
312
317
  if (typeof opts.url !== "string" || !opts.url) throw _err("cmp/bad-input", "opts.url (the CMP endpoint) is required");
313
318
 
@@ -349,7 +354,6 @@ function session(opts) {
349
354
  if (opts.acceptCert != null && typeof opts.acceptCert !== "function") throw _err("cmp/bad-input", "opts.acceptCert must be a function (certDer, info) => boolean");
350
355
  if (opts.implicitConfirm != null && typeof opts.implicitConfirm !== "boolean") throw _err("cmp/bad-input", "opts.implicitConfirm must be a boolean");
351
356
  if (opts.sleep != null && typeof opts.sleep !== "function") throw _err("cmp/bad-input", "opts.sleep must be a function (delayMs) => Promise");
352
- if (opts.transport != null && typeof opts.transport !== "function") throw _err("cmp/bad-input", "opts.transport must be a function (url, reqDer, opts) => Promise<{ responseBytes, status }>");
353
357
  if (opts.acceptCert != null && opts.implicitConfirm) throw _err("cmp/bad-input", "opts.acceptCert cannot be combined with opts.implicitConfirm -- implicit confirmation leaves no certConf leg to reject on (drop implicitConfirm to vet a grant)");
354
358
 
355
359
  if (opts.time != null) guard.time.assertValid(opts.time, _err, "cmp/bad-input", "opts.time (the verify/validation clock)");
@@ -413,7 +417,7 @@ function session(opts) {
413
417
  return o;
414
418
  }
415
419
  function _verifyOpts(fresh, signerCertOverride, extraIntermediates, responseExtra) {
416
- var o = { transactionID: transactionID, expectRecipNonce: fresh };
420
+ var o = Object.assign(Object.create(null), { transactionID: transactionID, expectRecipNonce: fresh });
417
421
  if (isMac) o.sharedSecret = opts.mac.secret;
418
422
  else if (opts.trustAnchors != null) o.trustAnchors = opts.trustAnchors;
419
423
  var issuers = Array.isArray(responseExtra) ? responseExtra : [];
@@ -430,8 +434,9 @@ function session(opts) {
430
434
  return o;
431
435
  }
432
436
  function _transferOpts() {
433
- var o = {};
434
- ["transport", "tls", "headers", "timeout", "maxResponseBytes"].forEach(function (k) { if (opts[k] != null) o[k] = opts[k]; });
437
+ var o = Object.create(null);
438
+ ["tls", "headers", "timeout", "maxResponseBytes"].forEach(function (k) { if (opts[k] != null) o[k] = opts[k]; });
439
+ if (_transport !== undefined) o.transport = _transport;
435
440
  if (_proxySnap != null) o.proxy = _proxySnap;
436
441
  return o;
437
442
  }
@@ -443,12 +448,12 @@ function session(opts) {
443
448
  _recordTranscript({ direction: "out", arm: arm, bytes: reqDer });
444
449
  var engaged = false;
445
450
  var topts = _transferOpts();
446
- if (opts.transport != null) topts.transport = function (a) { engaged = true; return opts.transport(a); };
451
+ if (_transport !== undefined) topts.transport = function (a) { engaged = true; return _transport(a); };
447
452
  var res;
448
453
  try {
449
454
  res = await cmp.transfer(opts.url, reqDer, topts);
450
455
  } catch (e) {
451
- var reached = opts.transport != null
456
+ var reached = _transport !== undefined
452
457
  ? engaged
453
458
  : !(e && (e.code === "cmp/bad-url" || e.code === "cmp/no-trust-anchors" || e.code === "cmp/bad-input"));
454
459
  if (reached) started = true;
package/lib/cmp-verify.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  var intrinsic = require("./guard-intrinsic");
8
8
  var _sizeOf = intrinsic.sizeOf;
9
- var util = { types: intrinsic.types };
9
+ var util = intrinsic.assign(intrinsic.create(null), { types: intrinsic.types });
10
10
  var _isBuffer = intrinsic.isBuffer;
11
11
  var _bufferFrom = intrinsic.bufferFrom;
12
12
  var _fromCharCode = intrinsic.fromCharCode;
@@ -49,10 +49,10 @@ var NS = pkix.makeNS("cmp", CmpError, oid);
49
49
  var PBMAC1_PARAMS = pkix.pbmac1Params(NS);
50
50
  var _certExtDecoders = pkix.certExtensionDecoders(NS).byOid;
51
51
 
52
- var KNOWN_VERIFY_OPTS = {
52
+ var KNOWN_VERIFY_OPTS = intrinsic.assign(intrinsic.create(null), {
53
53
  sharedSecret: 1, signerCert: 1, trustAnchors: 1, intermediates: 1, time: 1,
54
54
  transactionID: 1, expectRecipNonce: 1, revocationChecker: 1, maxIterations: 1,
55
- };
55
+ });
56
56
 
57
57
  var PRF_HASH = _create(null);
58
58
  PRF_HASH[oid.byName("hmacWithSHA256")] = "SHA-256";
@@ -65,7 +65,7 @@ var PBMAC1_MIN_SALT = 8;
65
65
  var PBMAC1_MAX_SALT = constants.LIMITS.PBKDF2_MAX_SALT;
66
66
  var PBMAC1_KEYLEN_MIN = 20;
67
67
  var PBMAC1_KEYLEN_MAX = 1024;
68
- var PRF_HLEN = { "SHA-256": 32, "SHA-384": 48, "SHA-512": 64 };
68
+ var PRF_HLEN = intrinsic.assign(intrinsic.create(null), { "SHA-256": 32, "SHA-384": 48, "SHA-512": 64 });
69
69
 
70
70
  var UNSUPPORTED_MAC_OIDS = _create(null);
71
71
  ["passwordBasedMac", "dhBasedMac", "kemBasedMac"].forEach(function (n) {
@@ -160,7 +160,7 @@ function _kekIdMatches(ri, kekId) {
160
160
  return Buffer.compare(id, guard.bytes.view(kekId, CmsError, "cms/bad-input", "kekId")) === 0;
161
161
  }
162
162
 
163
- var _passThrough = { "cms/unsupported-algorithm": 1, "cms/unsupported-recipient-type": 1, "cms/bad-input": 1, "cms/iteration-limit": 1, "cms/missing-key-derivation": 1, "cms/no-encrypted-content": 1 };
163
+ var _passThrough = intrinsic.assign(intrinsic.create(null), { "cms/unsupported-algorithm": 1, "cms/unsupported-recipient-type": 1, "cms/bad-input": 1, "cms/iteration-limit": 1, "cms/missing-key-derivation": 1, "cms/no-encrypted-content": 1 });
164
164
 
165
165
  async function _acquireCek(ri, km, opts) {
166
166
  try {
@@ -478,10 +478,10 @@ function _oaepHashFromParams(paramsBytes) {
478
478
  if (label != null && label.length > 0) throw _err("cms/unsupported-algorithm", "a non-empty OAEP label is not supported");
479
479
  return hashName;
480
480
  }
481
- var HASH_W3C = {}; HASH_W3C[O("sha1")] = "SHA-1"; HASH_W3C[O("sha256")] = "SHA-256"; HASH_W3C[O("sha384")] = "SHA-384"; HASH_W3C[O("sha512")] = "SHA-512";
481
+ var HASH_W3C = intrinsic.create(null); HASH_W3C[O("sha1")] = "SHA-1"; HASH_W3C[O("sha256")] = "SHA-256"; HASH_W3C[O("sha384")] = "SHA-384"; HASH_W3C[O("sha512")] = "SHA-512";
482
482
  function _hashW3c(o) { if (!HASH_W3C[o]) throw _err("cms/unsupported-algorithm", "unsupported OAEP hash " + o); return HASH_W3C[o]; }
483
483
 
484
- var X963_HASH = {};
484
+ var X963_HASH = intrinsic.create(null);
485
485
  [["dhSinglePass-stdDH-sha1kdf-scheme", "SHA-1"], ["dhSinglePass-stdDH-sha224kdf-scheme", "SHA-224"], ["dhSinglePass-stdDH-sha256kdf-scheme", "SHA-256"], ["dhSinglePass-stdDH-sha384kdf-scheme", "SHA-384"], ["dhSinglePass-stdDH-sha512kdf-scheme", "SHA-512"],
486
486
  ["dhSinglePass-cofactorDH-sha1kdf-scheme", "SHA-1"], ["dhSinglePass-cofactorDH-sha224kdf-scheme", "SHA-224"], ["dhSinglePass-cofactorDH-sha256kdf-scheme", "SHA-256"], ["dhSinglePass-cofactorDH-sha384kdf-scheme", "SHA-384"], ["dhSinglePass-cofactorDH-sha512kdf-scheme", "SHA-512"]
487
487
  ].forEach(function (r) { X963_HASH[O(r[0])] = r[1]; });
@@ -498,10 +498,10 @@ function _originatorSpki(originator) {
498
498
  if (v.algorithm.parameters != null) algKids.push(b.raw(v.algorithm.parameters));
499
499
  return b.sequence([b.sequence(algKids), b.bitString(v.publicKey.bytes, v.publicKey.unusedBits)]);
500
500
  }
501
- var MONT = {}; MONT[O("X25519")] = { name: "X25519", hkdf: "SHA-256" }; MONT[O("X448")] = { name: "X448", hkdf: "SHA-512" };
501
+ var MONT = intrinsic.create(null); MONT[O("X25519")] = { name: "X25519", hkdf: "SHA-256" }; MONT[O("X448")] = { name: "X448", hkdf: "SHA-512" };
502
502
  function _isMont(spki) { var o = asn1.read.oid(asn1.decode(spki).children[0].children[0]); return !!MONT[o]; }
503
503
  function _montName(spki) { return MONT[asn1.read.oid(asn1.decode(spki).children[0].children[0])]; }
504
- var CURVE = {}; CURVE[O("prime256v1")] = { curve: "P-256" }; CURVE[O("secp384r1")] = { curve: "P-384" }; CURVE[O("secp521r1")] = { curve: "P-521" };
504
+ var CURVE = intrinsic.create(null); CURVE[O("prime256v1")] = { curve: "P-256" }; CURVE[O("secp384r1")] = { curve: "P-384" }; CURVE[O("secp521r1")] = { curve: "P-521" };
505
505
  function _ecCurveFromCert(cert) {
506
506
  var spki = x509.parse(_normCertDer(cert)).subjectPublicKeyInfo;
507
507
  if (spki.algorithm.oid !== O("ecPublicKey") || spki.algorithm.parameters == null) return null;
@@ -512,7 +512,7 @@ function _withEcCurveParams(spki, curveOid) {
512
512
  var alg = node.children[0];
513
513
  return b.sequence([b.sequence([b.raw(alg.children[0].bytes), b.oid(curveOid)]), b.raw(node.children[1].bytes)]);
514
514
  }
515
- var MLKEM = {}; MLKEM[O("id-ml-kem-512")] = "ML-KEM-512"; MLKEM[O("id-ml-kem-768")] = "ML-KEM-768"; MLKEM[O("id-ml-kem-1024")] = "ML-KEM-1024";
515
+ var MLKEM = intrinsic.create(null); MLKEM[O("id-ml-kem-512")] = "ML-KEM-512"; MLKEM[O("id-ml-kem-768")] = "ML-KEM-768"; MLKEM[O("id-ml-kem-1024")] = "ML-KEM-1024";
516
516
  function _mlkemName(o) { return MLKEM[o]; }
517
517
 
518
518
  function _explicitSetOf(implicitBytes) {
@@ -521,8 +521,8 @@ function _explicitSetOf(implicitBytes) {
521
521
  return out;
522
522
  }
523
523
 
524
- var MAC_HASH = { hmacWithSHA256: "SHA-256", hmacWithSHA384: "SHA-384", hmacWithSHA512: "SHA-512" };
525
- var DIGEST_WC = { sha256: "SHA-256", sha384: "SHA-384", sha512: "SHA-512" };
524
+ var MAC_HASH = intrinsic.assign(intrinsic.create(null), { hmacWithSHA256: "SHA-256", hmacWithSHA384: "SHA-384", hmacWithSHA512: "SHA-512" });
525
+ var DIGEST_WC = intrinsic.assign(intrinsic.create(null), { sha256: "SHA-256", sha384: "SHA-384", sha512: "SHA-512" });
526
526
  var MAC_KEY_MIN_OCTETS = 16;
527
527
  function _isDerNull(p) { return Buffer.isBuffer(p) && p.length === 2 && p[0] === 0x05 && p[1] === 0x00; }
528
528
 
@@ -100,11 +100,11 @@ async function _buildKtri(cek, cert, opts) {
100
100
  return { tag: null, _riVersion: rid.riVersion, node: b.sequence([b.integer(BigInt(rid.riVersion)), rid.node, keyEncAlg, b.octetString(encryptedKey)]) };
101
101
  }
102
102
 
103
- var EC_KA = {};
103
+ var EC_KA = intrinsic.create(null);
104
104
  EC_KA[O("prime256v1")] = { curve: "P-256", hash: "SHA-256", scheme: "dhSinglePass-stdDH-sha256kdf-scheme" };
105
105
  EC_KA[O("secp384r1")] = { curve: "P-384", hash: "SHA-384", scheme: "dhSinglePass-stdDH-sha384kdf-scheme" };
106
106
  EC_KA[O("secp521r1")] = { curve: "P-521", hash: "SHA-512", scheme: "dhSinglePass-stdDH-sha512kdf-scheme" };
107
- var MONT_KA = {};
107
+ var MONT_KA = intrinsic.create(null);
108
108
  MONT_KA[O("X25519")] = { name: "X25519", hkdf: "SHA-256", scheme: "dhSinglePass-stdDH-hkdf-sha256-scheme" };
109
109
  MONT_KA[O("X448")] = { name: "X448", hkdf: "SHA-512", scheme: "dhSinglePass-stdDH-hkdf-sha512-scheme" };
110
110
 
@@ -202,11 +202,11 @@ async function _buildPwri(cek, desc) {
202
202
  }
203
203
  }
204
204
 
205
- var KEM_WRAP = {};
205
+ var KEM_WRAP = intrinsic.create(null);
206
206
  KEM_WRAP[O("id-ml-kem-512")] = "aes128-wrap";
207
207
  KEM_WRAP[O("id-ml-kem-768")] = "aes256-wrap";
208
208
  KEM_WRAP[O("id-ml-kem-1024")] = "aes256-wrap";
209
- var KEM_WC = {}; KEM_WC[O("id-ml-kem-512")] = "ML-KEM-512"; KEM_WC[O("id-ml-kem-768")] = "ML-KEM-768"; KEM_WC[O("id-ml-kem-1024")] = "ML-KEM-1024";
209
+ var KEM_WC = intrinsic.create(null); KEM_WC[O("id-ml-kem-512")] = "ML-KEM-512"; KEM_WC[O("id-ml-kem-768")] = "ML-KEM-768"; KEM_WC[O("id-ml-kem-1024")] = "ML-KEM-1024";
210
210
 
211
211
  function _kemOtherInfo(wrapName, kekBytes, ukm) {
212
212
  var kids = [_algId(wrapName, "absent"), b.integer(BigInt(kekBytes))];
@@ -285,10 +285,10 @@ function _pwriWrapIv(kek, cek, iv) {
285
285
  var PRF_HASH = intrinsic.assign(intrinsic.create(null), { hmacWithSHA1: "SHA-1", hmacWithSHA256: "SHA-256", hmacWithSHA384: "SHA-384", hmacWithSHA512: "SHA-512" });
286
286
  function _prfHash(prf) { if (!PRF_HASH[guard.text.keyOf(prf)]) throw _err("cms/bad-input", "unsupported pwri prf " + guard.text.showValue(prf)); return PRF_HASH[guard.text.keyOf(prf)]; }
287
287
 
288
- var _PWRI_KEYS = { password: 1, iterations: 1, prf: 1, salt: 1 };
289
- var _KEKRI_KEYS = { kek: 1, kekId: 1 };
290
- var _KTRI_RECIPIENT_KEYS = { cert: 1, oaepHash: 1, keyIdentifier: 1 };
291
- var _AGREE_RECIPIENT_KEYS = { cert: 1, keyIdentifier: 1, ukm: 1 };
288
+ var _PWRI_KEYS = intrinsic.assign(intrinsic.create(null), { password: 1, iterations: 1, prf: 1, salt: 1 });
289
+ var _KEKRI_KEYS = intrinsic.assign(intrinsic.create(null), { kek: 1, kekId: 1 });
290
+ var _KTRI_RECIPIENT_KEYS = intrinsic.assign(intrinsic.create(null), { cert: 1, oaepHash: 1, keyIdentifier: 1 });
291
+ var _AGREE_RECIPIENT_KEYS = intrinsic.assign(intrinsic.create(null), { cert: 1, keyIdentifier: 1, ukm: 1 });
292
292
 
293
293
  var _RECIPIENT_DEFAULTS = ["oaepHash", "keyIdentifier", "ukm"];
294
294
 
@@ -358,21 +358,21 @@ function _envelopedVersion(recips, hasUnprotected) {
358
358
  return forcesTwo ? 2 : 0;
359
359
  }
360
360
 
361
- var _ENCRYPT_OPTS_AEAD = {
361
+ var _ENCRYPT_OPTS_AEAD = intrinsic.assign(intrinsic.create(null), {
362
362
  contentEncryptionAlgorithm: 1, contentType: 1, authAttrs: 1, oaepHash: 1, keyIdentifier: 1,
363
363
  ukm: 1, pem: 1,
364
- };
365
- var _ENCRYPT_OPTS_CBC = {
364
+ });
365
+ var _ENCRYPT_OPTS_CBC = intrinsic.assign(intrinsic.create(null), {
366
366
  contentEncryptionAlgorithm: 1, contentType: 1, oaepHash: 1, keyIdentifier: 1, ukm: 1, pem: 1,
367
- };
368
- var _AUTHENTICATE_OPTS_ATTRS = {
367
+ });
368
+ var _AUTHENTICATE_OPTS_ATTRS = intrinsic.assign(intrinsic.create(null), {
369
369
  macAlgorithm: 1, digestAlgorithm: 1, authenticatedAttributes: 1, authAttrs: 1, contentType: 1,
370
370
  keyIdentifier: 1, oaepHash: 1, ukm: 1, pem: 1,
371
- };
372
- var _AUTHENTICATE_OPTS_BARE = {
371
+ });
372
+ var _AUTHENTICATE_OPTS_BARE = intrinsic.assign(intrinsic.create(null), {
373
373
  macAlgorithm: 1, authenticatedAttributes: 1, contentType: 1,
374
374
  keyIdentifier: 1, oaepHash: 1, ukm: 1, pem: 1,
375
- };
375
+ });
376
376
 
377
377
  function encrypt(content, recipients, opts) {
378
378
  return guard.bytes.fixedCall(CmsError, "cms/bad-input", [
@@ -404,7 +404,7 @@ async function _encryptImpl(content, recipients, opts) {
404
404
 
405
405
  if (!recipients.length) throw _err("cms/bad-input", "at least one recipient is required (RFC 5652 sec. 6.1)");
406
406
  var recips = [];
407
- var consumed = {};
407
+ var consumed = intrinsic.create(null);
408
408
  for (var i = 0; i < recipients.length; i++) recips.push(await _buildRecipient(cek, recipients[i], opts, consumed));
409
409
  _assertDefaultsConsumed(opts, consumed);
410
410
  var riNodes = recips.map(_taggedRecipient);
@@ -440,7 +440,7 @@ async function _envelopedData(contentBytes, contentStream, cek, ca, contentType,
440
440
 
441
441
  function _assertAuthAttrs(pairs, forbidden) {
442
442
  var dense = pkiBuild.reqDenseArray(pairs, "authAttrs", _err, "cms/bad-input");
443
- var seenTypes = {};
443
+ var seenTypes = intrinsic.create(null);
444
444
  dense.forEach(function (p) {
445
445
  var node;
446
446
  try { node = asn1.decode(p); } catch (e) { throw _err("cms/bad-input", "an authenticated attribute is not well-formed DER", e); }
@@ -458,10 +458,10 @@ function _assertAuthAttrs(pairs, forbidden) {
458
458
  return dense;
459
459
  }
460
460
 
461
- var AUTH_ENVELOPED_FORBIDDEN = {
461
+ var AUTH_ENVELOPED_FORBIDDEN = intrinsic.assign(intrinsic.create(null), {
462
462
  oid: O("messageDigest"),
463
463
  why: "authAttrs must not carry the message-digest attribute in an AuthEnvelopedData: its value is the unencrypted hash of the plaintext, which enables content tracking and confirmation of a guessed plaintext (RFC 5083 sec. 2.1, sec. 5)",
464
- };
464
+ });
465
465
 
466
466
  async function _authEnvelopedData(contentBytes, contentStream, cek, ca, contentType, opts, riNodes, recips) {
467
467
  var nonce = nodeCrypto.randomBytes(12);
@@ -489,8 +489,8 @@ async function _authEnvelopedData(contentBytes, contentStream, cek, ca, contentT
489
489
  return b.sequence(kids);
490
490
  }
491
491
 
492
- var _ENCRYPTED_DATA_CEK_KEYS = { cek: 1 };
493
- var _ENCRYPTED_DATA_PW_KEYS = { password: 1, iterations: 1, salt: 1, prf: 1 };
492
+ var _ENCRYPTED_DATA_CEK_KEYS = intrinsic.assign(intrinsic.create(null), { cek: 1 });
493
+ var _ENCRYPTED_DATA_PW_KEYS = intrinsic.assign(intrinsic.create(null), { password: 1, iterations: 1, salt: 1, prf: 1 });
494
494
 
495
495
  async function _encryptedData(contentBytes, contentStream, desc, ca, contentType, opts, cek) {
496
496
  if (ca.aead) throw _err("cms/bad-input", "EncryptedData supports only CBC content encryption");
package/lib/cms-sign.js CHANGED
@@ -25,26 +25,26 @@ function _err(code, message, cause) { return new CmsError(code, message, cause);
25
25
  function _signE(kind, message, cause) { return new CmsError("cms/" + kind, message, cause); }
26
26
  function O(name) { return oid.byName(name); }
27
27
 
28
- var KNOWN_SIGN_OPTS = {
28
+ var KNOWN_SIGN_OPTS = intrinsic.assign(intrinsic.create(null), {
29
29
  signedAttributes: 1, signingTime: 1, additionalSignedAttributes: 1, unsignedAttributes: 1,
30
30
  sid: 1, eContentType: 1, detached: 1, certificates: 1, pem: 1,
31
- };
32
- var KNOWN_SIGNER_CERT_KEYS = { cert: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 };
33
- var KNOWN_SIGNER_KEY_ONLY_KEYS = { spki: 1, keyIdentifier: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 };
34
- var KNOWN_COUNTERSIGN_OPTS = {
31
+ });
32
+ var KNOWN_SIGNER_CERT_KEYS = intrinsic.assign(intrinsic.create(null), { cert: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 });
33
+ var KNOWN_SIGNER_KEY_ONLY_KEYS = intrinsic.assign(intrinsic.create(null), { spki: 1, keyIdentifier: 1, key: 1, pss: 1, digestAlgorithm: 1, combinedRsaSig: 1 });
34
+ var KNOWN_COUNTERSIGN_OPTS = intrinsic.assign(intrinsic.create(null), {
35
35
  signerIndex: 1, countersignatureOf: 1, signingTime: 1, certificates: 1, pem: 1,
36
36
  signedAttributes: 1, additionalSignedAttributes: 1, sid: 1,
37
- };
37
+ });
38
38
  var NS = pkix.makeNS("cms", CmsError, oid);
39
39
  var _b = pkiBuild.makeBuilder({
40
40
  ErrorClass: CmsError, prefix: "cms", O: O, NS: NS,
41
41
  NAME_SCHEMA: pkix.name(NS), SPKI_SCHEMA: pkix.spki(NS), EXT_DECODERS: {},
42
42
  });
43
43
 
44
- var DIGEST_HASH = {
44
+ var DIGEST_HASH = intrinsic.assign(intrinsic.create(null), {
45
45
  sha256: "SHA-256", sha384: "SHA-384", sha512: "SHA-512",
46
46
  shake128: "SHAKE128", shake256: "SHAKE256",
47
- };
47
+ });
48
48
 
49
49
  var OID_DATA = O("data");
50
50
  var OID_PKI_DATA = O("id-cct-PKIData");
@@ -73,7 +73,7 @@ function _buildSid(cert, useSki) {
73
73
  }
74
74
 
75
75
  function _buildSignedAttrs(pairs) {
76
- var seenTypes = {};
76
+ var seenTypes = intrinsic.create(null);
77
77
  var attrs = intrinsic.map(pairs, function (p) {
78
78
  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);
79
79
  seenTypes[p.type] = 1;
@@ -92,7 +92,7 @@ function _resolveAttrPairs(list, what) {
92
92
  });
93
93
  }
94
94
 
95
- var UNSIGNED_FORBIDDEN = {};
95
+ var UNSIGNED_FORBIDDEN = intrinsic.create(null);
96
96
  UNSIGNED_FORBIDDEN[O("contentType")] = "content-type";
97
97
  UNSIGNED_FORBIDDEN[O("messageDigest")] = "message-digest";
98
98
  UNSIGNED_FORBIDDEN[O("signingTime")] = "signing-time";
@@ -102,7 +102,7 @@ function _buildUnsignedAttrs(list) {
102
102
  if (!intrinsic.isArray(list)) throw _err("cms/bad-input", "opts.unsignedAttributes must be an array of { type, values }");
103
103
  if (!list.length) return null;
104
104
  var pairs = _resolveAttrPairs(list, "an unsigned attribute value");
105
- var seen = {};
105
+ var seen = intrinsic.create(null);
106
106
  intrinsic.forEach(pairs, function (p) {
107
107
  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)");
108
108
  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);
@@ -277,7 +277,7 @@ async function _signStream(stream, signers, opts) {
277
277
  }
278
278
  if (opts.signingTime != null && opts.signingTime !== false) guard.time.assertValid(opts.signingTime, _err, "cms/bad-input", "signingTime");
279
279
  var rcs = intrinsic.map(list, function (s) { return _resolveSignerContext(s, opts); });
280
- var digestNames = [], seenDigest = {};
280
+ var digestNames = [], seenDigest = intrinsic.create(null);
281
281
  intrinsic.forEach(rcs, function (r) { if (!seenDigest[r.scheme.digest]) { seenDigest[r.scheme.digest] = 1; intrinsic.push(digestNames, r.scheme.digest); } });
282
282
  var wcNames = intrinsic.map(digestNames, function (n) { return DIGEST_HASH[n]; });
283
283
  var digests;
@@ -286,7 +286,7 @@ async function _signStream(stream, signers, opts) {
286
286
  } catch (e) {
287
287
  guard.bytes.translateStreamError(e, _err, "cms/bad-input");
288
288
  }
289
- var byName = {};
289
+ var byName = intrinsic.create(null);
290
290
  intrinsic.forEach(digestNames, function (n, i) { byName[n] = intrinsic.bufferFrom(digests[i]); });
291
291
  var built = [];
292
292
  for (var _ip = 0; _ip < rcs.length; _ip++) {
@@ -322,7 +322,7 @@ function _sign(content, signers, opts) {
322
322
  }
323
323
 
324
324
  function _assembleSignedData(built, eContentType, opts, contentBuf) {
325
- var seen = {}, digestAlgs = [];
325
+ var seen = intrinsic.create(null), digestAlgs = [];
326
326
  intrinsic.forEach(built, function (x) { var k = intrinsic.bufToString(x.digestAlgId, "hex"); if (!seen[k]) { seen[k] = 1; intrinsic.push(digestAlgs, x.digestAlgId); } });
327
327
  var v3 = intrinsic.some(built, function (x) { return x.version === 3; }) || eContentType !== OID_DATA;
328
328
  var version = v3 ? 3 : 1;
@@ -342,14 +342,14 @@ function _assembleSignedData(built, eContentType, opts, contentBuf) {
342
342
  }
343
343
 
344
344
  function _dedupe(ders) {
345
- var seen = {}, out = [];
345
+ var seen = intrinsic.create(null), out = [];
346
346
  intrinsic.forEach(ders, function (d) { var k = intrinsic.bufToString(d, "hex"); if (!seen[k]) { seen[k] = 1; intrinsic.push(out, d); } });
347
347
  return out;
348
348
  }
349
349
 
350
350
  // certificates and/or CRLs and signs nothing. Documented by the @primitive block in cms-verify.js
351
351
  // (the @module pki.cms home).
352
- var KNOWN_CERTS_ONLY_OPTS = { crls: 1, pem: 1 };
352
+ var KNOWN_CERTS_ONLY_OPTS = intrinsic.assign(intrinsic.create(null), { crls: 1, pem: 1 });
353
353
 
354
354
  function _certsOnlyList(v, what) {
355
355
  if (v == null) return [];
@@ -529,7 +529,7 @@ function _countersign(cmsInput, signers, opts) {
529
529
  list.forEach(function (cs) { jobs.push({ t: t, p: _buildCountersignature(preimage, cs, opts) }); });
530
530
  });
531
531
  return Promise.all(jobs.map(function (j) { return j.p; })).then(function (built) {
532
- var byTarget = {}, certDers = [];
532
+ var byTarget = intrinsic.create(null), certDers = [];
533
533
  built.forEach(function (res, i) { (byTarget[jobs[i].t] = byTarget[jobs[i].t] || []).push(res.value); certDers.push(res.certDer); });
534
534
 
535
535
  var newSiSet = b.set(siSet.children.map(function (siNode, idx) {
package/lib/cms-verify.js CHANGED
@@ -147,7 +147,7 @@ function _certSki(cert) {
147
147
  }
148
148
 
149
149
  var OID_MGF1 = oid.byName("mgf1");
150
- var PSS_HASH = {};
150
+ var PSS_HASH = intrinsic.create(null);
151
151
  PSS_HASH[oid.byName("sha256")] = "SHA-256";
152
152
  PSS_HASH[oid.byName("sha384")] = "SHA-384";
153
153
  PSS_HASH[oid.byName("sha512")] = "SHA-512";
@@ -492,7 +492,7 @@ function _snapshotIfBytes(input, label) {
492
492
 
493
493
  async function _resolveContentDigests(parsed, streamSource) {
494
494
  if (streamSource == null) return null;
495
- var names = [], seen = {};
495
+ var names = [], seen = intrinsic.create(null);
496
496
  intrinsic.forEach(parsed.signerInfos, function (si) {
497
497
  var dn = si.digestAlgorithm.name;
498
498
  if (si.signedAttrsBytes && _supportedDigest(dn) && !seen[dn]) { seen[dn] = 1; guard.list.append(names, dn); }
@@ -504,12 +504,12 @@ async function _resolveContentDigests(parsed, streamSource) {
504
504
  } catch (e) {
505
505
  guard.bytes.translateStreamError(e, _err, "cms/bad-input");
506
506
  }
507
- var byName = {};
507
+ var byName = intrinsic.create(null);
508
508
  intrinsic.forEach(names, function (n, i) { byName[n] = intrinsic.bufferFrom(ds[i]); });
509
509
  return byName;
510
510
  }
511
511
 
512
- var _VERIFY_OPTS = { certs: 1, content: 1, trustAnchors: 1, time: 1, requiredEku: 1, checkPurpose: 1 };
512
+ var _VERIFY_OPTS = intrinsic.assign(intrinsic.create(null), { certs: 1, content: 1, trustAnchors: 1, time: 1, requiredEku: 1, checkPurpose: 1 });
513
513
 
514
514
  function verify(input, opts) {
515
515
  return guard.async.deferred(function () { return _verify(input, opts); });
@@ -581,7 +581,7 @@ function _cloneAnchorValue(v, depth) {
581
581
  " levels, so it cannot be copied before the chain is walked; pass the anchor as certificate DER or a { name, publicKey, algorithm } tuple");
582
582
  }
583
583
  if (Array.isArray(v)) return v.map(function (e) { return _cloneAnchorValue(e, depth + 1); });
584
- var out = {}, k;
584
+ var out = intrinsic.create(null), k;
585
585
  for (k in v) {
586
586
  if (!intrinsic.hasOwn(v, k)) continue;
587
587
  out[k] = _cloneAnchorValue(v[k], depth + 1);
@@ -983,7 +983,7 @@ var compress = cmsCompress.compress;
983
983
  */
984
984
  var decompress = cmsCompress.decompress;
985
985
 
986
- var KNOWN_PARSE_CERTS_ONLY_OPTS = { maxCerts: 1 };
986
+ var KNOWN_PARSE_CERTS_ONLY_OPTS = intrinsic.assign(intrinsic.create(null), { maxCerts: 1 });
987
987
  function _certsOnlyInputDer(input, verb) {
988
988
  if (guard.bytes.isByteSource(input)) {
989
989
  var buf = guard.bytes.snapshotSource(input, CmsError, "cms/bad-input", verb + " input");
@@ -45,7 +45,7 @@ function _pemToDer(text, label) {
45
45
  catch (e) { throw _err("kem/bad-key", "the PEM input is not a valid " + label + " block", e); }
46
46
  }
47
47
 
48
- var COMPOSITE_KEM = {};
48
+ var COMPOSITE_KEM = Object.create(null);
49
49
  function _comp(name, mlkemBits, label, trad) {
50
50
  var mlOidName = "id-ml-kem-" + mlkemBits;
51
51
  var kp = oid.kemParams(mlOidName);
@@ -17,13 +17,13 @@ function _codeOf(e, fallback) {
17
17
  }
18
18
 
19
19
  var COMPOSITE_PREFIX = Buffer.from("CompositeAlgorithmSignatures2025", "ascii");
20
- var MLDSA_COMPONENT = {
20
+ var MLDSA_COMPONENT = Object.assign(Object.create(null), {
21
21
  "ML-DSA-44": { pk: 1312, sig: 2420, oid: "id-ml-dsa-44" },
22
22
  "ML-DSA-65": { pk: 1952, sig: 3309, oid: "id-ml-dsa-65" },
23
23
  "ML-DSA-87": { pk: 2592, sig: 4627, oid: "id-ml-dsa-87" },
24
- };
25
- var EC_CURVE_OID = { "P-256": "prime256v1", "P-384": "secp384r1", "P-521": "secp521r1" };
26
- var PH_CMS = { "SHA-256": "sha256", "SHA-512": "sha512", "SHAKE256": "shake256" };
24
+ });
25
+ var EC_CURVE_OID = Object.assign(Object.create(null), { "P-256": "prime256v1", "P-384": "secp384r1", "P-521": "secp521r1" });
26
+ var PH_CMS = Object.assign(Object.create(null), { "SHA-256": "sha256", "SHA-512": "sha512", "SHAKE256": "shake256" });
27
27
  var COMPOSITE_ALGS = Object.create(null);
28
28
  function _comp(name, mldsa, ph, label, trad) {
29
29
  var sz = MLDSA_COMPONENT[mldsa];
package/lib/constants.js CHANGED
@@ -75,14 +75,14 @@ var DAYS_PER_WEEK = 7;
75
75
  * var oneYear = pki.C.TIME.days(365);
76
76
  * // -> 31536000000
77
77
  */
78
- var TIME = {
78
+ var TIME = Object.assign(Object.create(null), {
79
79
  milliseconds: function (n) { return _scale(n, "C.TIME.milliseconds", 1); },
80
80
  seconds: function (n) { return _scale(n, "C.TIME.seconds", MS_PER_SECOND); },
81
81
  minutes: function (n) { return _scale(n, "C.TIME.minutes", SECONDS_PER_MINUTE * MS_PER_SECOND); },
82
82
  hours: function (n) { return _scale(n, "C.TIME.hours", MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MS_PER_SECOND); },
83
83
  days: function (n) { return _scale(n, "C.TIME.days", HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MS_PER_SECOND); },
84
84
  weeks: function (n) { return _scale(n, "C.TIME.weeks", DAYS_PER_WEEK * HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MS_PER_SECOND); },
85
- };
85
+ });
86
86
 
87
87
  var BYTES_PER_KIB = 1024;
88
88
 
@@ -101,14 +101,14 @@ var BYTES_PER_KIB = 1024;
101
101
  * var cap = pki.C.BYTES.mib(16);
102
102
  * // -> 16777216
103
103
  */
104
- var BYTES = {
104
+ var BYTES = Object.assign(Object.create(null), {
105
105
  b: function (n) { return _scale(n, "C.BYTES.b", 1); },
106
106
  kib: function (n) { return _scale(n, "C.BYTES.kib", BYTES_PER_KIB); },
107
107
  mib: function (n) { return _scale(n, "C.BYTES.mib", BYTES_PER_KIB * BYTES_PER_KIB); },
108
108
  gib: function (n) { return _scale(n, "C.BYTES.gib", BYTES_PER_KIB * BYTES_PER_KIB * BYTES_PER_KIB); },
109
- };
109
+ });
110
110
 
111
- var LIMITS = {
111
+ var LIMITS = Object.assign(Object.create(null), {
112
112
  DER_MAX_BYTES: BYTES.mib(16),
113
113
  DER_MAX_DEPTH: 64,
114
114
  DER_MAX_ITEMS: 4000000,
@@ -169,9 +169,9 @@ var LIMITS = {
169
169
  TRUST_MAX_OBJECTS: 10000,
170
170
  TRUST_MAX_CSV_ROWS: 10000,
171
171
  TRUST_MAX_CSV_FIELD_BYTES: BYTES.kib(64),
172
- };
172
+ });
173
173
 
174
- var NAMES = {
174
+ var NAMES = Object.assign(Object.create(null), {
175
175
  DN_SHORT: {
176
176
  commonName: "CN", surname: "SN", serialNumber: "SERIALNUMBER", countryName: "C",
177
177
  localityName: "L", stateOrProvinceName: "ST", streetAddress: "STREET",
@@ -227,9 +227,13 @@ var NAMES = {
227
227
  "SLH-DSA-SHA2-128s": "SLH-DSA-SHA2-128s", "SLH-DSA-SHA2-128f": "SLH-DSA-SHA2-128f",
228
228
  "SLH-DSA-SHA2-192s": "SLH-DSA-SHA2-192s", "SLH-DSA-SHA2-256s": "SLH-DSA-SHA2-256s",
229
229
  },
230
- };
230
+ });
231
231
 
232
- Object.keys(NAMES).forEach(function (k) { Object.freeze(NAMES[k]); });
232
+ /** @internal Each inner table is looked up by a name a certificate supplies, so it answers from
233
+ * its own entries alone rather than from whatever Object.prototype carries under that name. */
234
+ Object.keys(NAMES).forEach(function (k) {
235
+ NAMES[k] = Object.freeze(Object.assign(Object.create(null), NAMES[k]));
236
+ });
233
237
  Object.freeze(NAMES);
234
238
 
235
239
  var VERSION = require("../package.json").version;