jose 4.15.4 → 5.0.1

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 (155) hide show
  1. package/README.md +2 -1
  2. package/dist/browser/index.js +2 -4
  3. package/dist/browser/jwe/flattened/decrypt.js +13 -22
  4. package/dist/browser/jwe/flattened/encrypt.js +3 -18
  5. package/dist/browser/jwe/general/decrypt.js +1 -1
  6. package/dist/browser/jwe/general/encrypt.js +8 -13
  7. package/dist/browser/jwk/embedded.js +2 -2
  8. package/dist/browser/jwk/thumbprint.js +2 -2
  9. package/dist/browser/jwks/local.js +2 -2
  10. package/dist/browser/jwks/remote.js +4 -4
  11. package/dist/browser/jws/flattened/sign.js +1 -1
  12. package/dist/browser/jws/flattened/verify.js +6 -7
  13. package/dist/browser/jws/general/verify.js +1 -1
  14. package/dist/browser/jwt/produce.js +19 -4
  15. package/dist/browser/jwt/sign.js +1 -2
  16. package/dist/browser/jwt/unsecured.js +1 -1
  17. package/dist/browser/jwt/verify.js +1 -2
  18. package/dist/browser/key/import.js +1 -6
  19. package/dist/browser/lib/decrypt_key_management.js +6 -6
  20. package/dist/browser/lib/jwt_claims_set.js +1 -1
  21. package/dist/browser/runtime/asn1.js +1 -2
  22. package/dist/browser/runtime/base64url.js +1 -1
  23. package/dist/browser/runtime/decrypt.js +3 -3
  24. package/dist/browser/runtime/fetch_jwks.js +1 -1
  25. package/dist/browser/runtime/generate.js +5 -8
  26. package/dist/browser/runtime/jwk_to_key.js +2 -45
  27. package/dist/browser/runtime/verify.js +1 -1
  28. package/dist/browser/util/decode_jwt.js +2 -2
  29. package/dist/browser/util/decode_protected_header.js +1 -1
  30. package/dist/browser/util/errors.js +1 -2
  31. package/dist/node/cjs/jwe/compact/encrypt.js +1 -0
  32. package/dist/node/cjs/jwe/flattened/decrypt.js +7 -16
  33. package/dist/node/cjs/jwe/flattened/encrypt.js +12 -19
  34. package/dist/node/cjs/jwe/general/encrypt.js +16 -13
  35. package/dist/node/cjs/jwk/embedded.js +2 -2
  36. package/dist/node/cjs/jwk/thumbprint.js +2 -2
  37. package/dist/node/cjs/jwks/local.js +3 -2
  38. package/dist/node/cjs/jwks/remote.js +13 -6
  39. package/dist/node/cjs/jws/compact/sign.js +1 -0
  40. package/dist/node/cjs/jws/flattened/sign.js +4 -1
  41. package/dist/node/cjs/jws/flattened/verify.js +3 -4
  42. package/dist/node/cjs/jws/general/sign.js +7 -1
  43. package/dist/node/cjs/jwt/encrypt.js +7 -0
  44. package/dist/node/cjs/jwt/produce.js +20 -4
  45. package/dist/node/cjs/jwt/sign.js +2 -2
  46. package/dist/node/cjs/jwt/verify.js +1 -2
  47. package/dist/node/cjs/key/import.js +2 -7
  48. package/dist/node/cjs/lib/aesgcmkw.js +1 -1
  49. package/dist/node/cjs/lib/decrypt_key_management.js +1 -1
  50. package/dist/node/cjs/lib/encrypt_key_management.js +1 -1
  51. package/dist/node/cjs/runtime/aeskw.js +6 -6
  52. package/dist/node/cjs/runtime/asn1.js +8 -8
  53. package/dist/node/cjs/runtime/base64url.js +6 -11
  54. package/dist/node/cjs/runtime/cbc_tag.js +2 -2
  55. package/dist/node/cjs/runtime/check_key_length.js +8 -0
  56. package/dist/node/cjs/runtime/ciphers.js +2 -2
  57. package/dist/node/cjs/runtime/decrypt.js +4 -4
  58. package/dist/node/cjs/runtime/digest.js +2 -2
  59. package/dist/node/cjs/runtime/ecdhes.js +7 -7
  60. package/dist/node/cjs/runtime/encrypt.js +4 -4
  61. package/dist/node/cjs/runtime/fetch_jwks.js +4 -4
  62. package/dist/node/cjs/runtime/generate.js +7 -11
  63. package/dist/node/cjs/runtime/get_named_curve.js +7 -45
  64. package/dist/node/cjs/runtime/get_sign_verify_key.js +4 -4
  65. package/dist/node/cjs/runtime/is_key_like.js +1 -1
  66. package/dist/node/cjs/runtime/is_key_object.js +2 -5
  67. package/dist/node/cjs/runtime/jwk_to_key.js +2 -113
  68. package/dist/node/cjs/runtime/key_to_jwk.js +6 -130
  69. package/dist/node/cjs/runtime/node_key.js +9 -18
  70. package/dist/node/cjs/runtime/pbes2kw.js +4 -4
  71. package/dist/node/cjs/runtime/random.js +2 -2
  72. package/dist/node/cjs/runtime/rsaes.js +8 -8
  73. package/dist/node/cjs/runtime/sign.js +3 -9
  74. package/dist/node/cjs/runtime/timing_safe_equal.js +2 -2
  75. package/dist/node/cjs/runtime/verify.js +3 -10
  76. package/dist/node/cjs/runtime/webcrypto.js +4 -6
  77. package/dist/node/cjs/util/errors.js +26 -59
  78. package/dist/node/esm/jwe/compact/encrypt.js +1 -0
  79. package/dist/node/esm/jwe/flattened/decrypt.js +7 -16
  80. package/dist/node/esm/jwe/flattened/encrypt.js +12 -19
  81. package/dist/node/esm/jwe/general/encrypt.js +17 -14
  82. package/dist/node/esm/jwk/embedded.js +2 -2
  83. package/dist/node/esm/jwk/thumbprint.js +2 -2
  84. package/dist/node/esm/jwks/local.js +3 -2
  85. package/dist/node/esm/jwks/remote.js +13 -6
  86. package/dist/node/esm/jws/compact/sign.js +1 -0
  87. package/dist/node/esm/jws/flattened/sign.js +4 -1
  88. package/dist/node/esm/jws/flattened/verify.js +3 -4
  89. package/dist/node/esm/jws/general/sign.js +7 -1
  90. package/dist/node/esm/jwt/encrypt.js +7 -0
  91. package/dist/node/esm/jwt/produce.js +20 -4
  92. package/dist/node/esm/jwt/sign.js +2 -2
  93. package/dist/node/esm/jwt/verify.js +1 -2
  94. package/dist/node/esm/key/import.js +2 -7
  95. package/dist/node/esm/lib/aesgcmkw.js +1 -1
  96. package/dist/node/esm/lib/decrypt_key_management.js +1 -1
  97. package/dist/node/esm/lib/encrypt_key_management.js +1 -1
  98. package/dist/node/esm/runtime/aeskw.js +2 -2
  99. package/dist/node/esm/runtime/asn1.js +2 -2
  100. package/dist/node/esm/runtime/base64url.js +4 -10
  101. package/dist/node/esm/runtime/cbc_tag.js +1 -1
  102. package/dist/node/esm/runtime/check_key_length.js +6 -0
  103. package/dist/node/esm/runtime/ciphers.js +2 -2
  104. package/dist/node/esm/runtime/decrypt.js +1 -1
  105. package/dist/node/esm/runtime/digest.js +1 -1
  106. package/dist/node/esm/runtime/ecdhes.js +2 -2
  107. package/dist/node/esm/runtime/encrypt.js +1 -1
  108. package/dist/node/esm/runtime/fetch_jwks.js +3 -3
  109. package/dist/node/esm/runtime/generate.js +5 -9
  110. package/dist/node/esm/runtime/get_named_curve.js +5 -42
  111. package/dist/node/esm/runtime/get_sign_verify_key.js +1 -1
  112. package/dist/node/esm/runtime/is_key_like.js +1 -1
  113. package/dist/node/esm/runtime/is_key_object.js +2 -5
  114. package/dist/node/esm/runtime/jwk_to_key.js +2 -113
  115. package/dist/node/esm/runtime/key_to_jwk.js +5 -129
  116. package/dist/node/esm/runtime/node_key.js +7 -16
  117. package/dist/node/esm/runtime/pbes2kw.js +2 -2
  118. package/dist/node/esm/runtime/random.js +1 -1
  119. package/dist/node/esm/runtime/rsaes.js +3 -3
  120. package/dist/node/esm/runtime/sign.js +3 -9
  121. package/dist/node/esm/runtime/timing_safe_equal.js +1 -1
  122. package/dist/node/esm/runtime/verify.js +3 -10
  123. package/dist/node/esm/runtime/webcrypto.js +3 -6
  124. package/dist/node/esm/util/errors.js +26 -59
  125. package/dist/types/index.d.ts +1 -1
  126. package/dist/types/jwe/compact/decrypt.d.ts +1 -1
  127. package/dist/types/jwe/flattened/decrypt.d.ts +1 -1
  128. package/dist/types/jwe/general/decrypt.d.ts +1 -1
  129. package/dist/types/jwe/general/encrypt.d.ts +3 -7
  130. package/dist/types/jwk/embedded.d.ts +1 -1
  131. package/dist/types/jwks/local.d.ts +3 -3
  132. package/dist/types/jwks/remote.d.ts +1 -1
  133. package/dist/types/jws/compact/verify.d.ts +1 -1
  134. package/dist/types/jws/flattened/verify.d.ts +1 -1
  135. package/dist/types/jws/general/verify.d.ts +1 -1
  136. package/dist/types/jwt/decrypt.d.ts +3 -3
  137. package/dist/types/jwt/produce.d.ts +12 -12
  138. package/dist/types/jwt/unsecured.d.ts +3 -3
  139. package/dist/types/jwt/verify.d.ts +3 -3
  140. package/dist/types/key/generate_key_pair.d.ts +7 -5
  141. package/dist/types/key/generate_secret.d.ts +1 -1
  142. package/dist/types/key/import.d.ts +4 -6
  143. package/dist/types/types.d.ts +13 -50
  144. package/package.json +1 -1
  145. package/dist/browser/runtime/zlib.js +0 -7
  146. package/dist/node/cjs/runtime/asn1_sequence_decoder.js +0 -47
  147. package/dist/node/cjs/runtime/asn1_sequence_encoder.js +0 -91
  148. package/dist/node/cjs/runtime/check_modulus_length.js +0 -52
  149. package/dist/node/cjs/runtime/flags.js +0 -8
  150. package/dist/node/cjs/runtime/zlib.js +0 -11
  151. package/dist/node/esm/runtime/asn1_sequence_decoder.js +0 -44
  152. package/dist/node/esm/runtime/asn1_sequence_encoder.js +0 -88
  153. package/dist/node/esm/runtime/check_modulus_length.js +0 -48
  154. package/dist/node/esm/runtime/flags.js +0 -5
  155. package/dist/node/esm/runtime/zlib.js +0 -6
@@ -4,8 +4,15 @@ exports.ProduceJWT = void 0;
4
4
  const epoch_js_1 = require("../lib/epoch.js");
5
5
  const is_object_js_1 = require("../lib/is_object.js");
6
6
  const secs_js_1 = require("../lib/secs.js");
7
+ function validateInput(label, input) {
8
+ if (!Number.isFinite(input)) {
9
+ throw new TypeError(`Invalid ${label} input`);
10
+ }
11
+ return input;
12
+ }
7
13
  class ProduceJWT {
8
- constructor(payload) {
14
+ _payload;
15
+ constructor(payload = {}) {
9
16
  if (!(0, is_object_js_1.default)(payload)) {
10
17
  throw new TypeError('JWT Claims Set MUST be an object');
11
18
  }
@@ -29,7 +36,10 @@ class ProduceJWT {
29
36
  }
30
37
  setNotBefore(input) {
31
38
  if (typeof input === 'number') {
32
- this._payload = { ...this._payload, nbf: input };
39
+ this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };
40
+ }
41
+ else if (input instanceof Date) {
42
+ this._payload = { ...this._payload, nbf: validateInput('setNotBefore', (0, epoch_js_1.default)(input)) };
33
43
  }
34
44
  else {
35
45
  this._payload = { ...this._payload, nbf: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };
@@ -38,7 +48,10 @@ class ProduceJWT {
38
48
  }
39
49
  setExpirationTime(input) {
40
50
  if (typeof input === 'number') {
41
- this._payload = { ...this._payload, exp: input };
51
+ this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };
52
+ }
53
+ else if (input instanceof Date) {
54
+ this._payload = { ...this._payload, exp: validateInput('setExpirationTime', (0, epoch_js_1.default)(input)) };
42
55
  }
43
56
  else {
44
57
  this._payload = { ...this._payload, exp: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };
@@ -49,8 +62,11 @@ class ProduceJWT {
49
62
  if (typeof input === 'undefined') {
50
63
  this._payload = { ...this._payload, iat: (0, epoch_js_1.default)(new Date()) };
51
64
  }
65
+ else if (input instanceof Date) {
66
+ this._payload = { ...this._payload, iat: validateInput('setIssuedAt', (0, epoch_js_1.default)(input)) };
67
+ }
52
68
  else {
53
- this._payload = { ...this._payload, iat: input };
69
+ this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };
54
70
  }
55
71
  return this;
56
72
  }
@@ -6,15 +6,15 @@ const errors_js_1 = require("../util/errors.js");
6
6
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
7
7
  const produce_js_1 = require("./produce.js");
8
8
  class SignJWT extends produce_js_1.ProduceJWT {
9
+ _protectedHeader;
9
10
  setProtectedHeader(protectedHeader) {
10
11
  this._protectedHeader = protectedHeader;
11
12
  return this;
12
13
  }
13
14
  async sign(key, options) {
14
- var _a;
15
15
  const sig = new sign_js_1.CompactSign(buffer_utils_js_1.encoder.encode(JSON.stringify(this._payload)));
16
16
  sig.setProtectedHeader(this._protectedHeader);
17
- if (Array.isArray((_a = this._protectedHeader) === null || _a === void 0 ? void 0 : _a.crit) &&
17
+ if (Array.isArray(this._protectedHeader?.crit) &&
18
18
  this._protectedHeader.crit.includes('b64') &&
19
19
  this._protectedHeader.b64 === false) {
20
20
  throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');
@@ -5,9 +5,8 @@ const verify_js_1 = require("../jws/compact/verify.js");
5
5
  const jwt_claims_set_js_1 = require("../lib/jwt_claims_set.js");
6
6
  const errors_js_1 = require("../util/errors.js");
7
7
  async function jwtVerify(jwt, key, options) {
8
- var _a;
9
8
  const verified = await (0, verify_js_1.compactVerify)(jwt, key, options);
10
- if (((_a = verified.protectedHeader.crit) === null || _a === void 0 ? void 0 : _a.includes('b64')) && verified.protectedHeader.b64 === false) {
9
+ if (verified.protectedHeader.crit?.includes('b64') && verified.protectedHeader.b64 === false) {
11
10
  throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');
12
11
  }
13
12
  const payload = (0, jwt_claims_set_js_1.default)(verified.protectedHeader, verified.payload, options);
@@ -27,21 +27,16 @@ async function importPKCS8(pkcs8, alg, options) {
27
27
  return (0, asn1_js_1.fromPKCS8)(pkcs8, alg, options);
28
28
  }
29
29
  exports.importPKCS8 = importPKCS8;
30
- async function importJWK(jwk, alg, octAsKeyObject) {
31
- var _a;
30
+ async function importJWK(jwk, alg) {
32
31
  if (!(0, is_object_js_1.default)(jwk)) {
33
32
  throw new TypeError('JWK must be an object');
34
33
  }
35
- alg || (alg = jwk.alg);
34
+ alg ||= jwk.alg;
36
35
  switch (jwk.kty) {
37
36
  case 'oct':
38
37
  if (typeof jwk.k !== 'string' || !jwk.k) {
39
38
  throw new TypeError('missing "k" (Key Value) Parameter value');
40
39
  }
41
- octAsKeyObject !== null && octAsKeyObject !== void 0 ? octAsKeyObject : (octAsKeyObject = jwk.ext !== true);
42
- if (octAsKeyObject) {
43
- return (0, jwk_to_key_js_1.default)({ ...jwk, alg, ext: (_a = jwk.ext) !== null && _a !== void 0 ? _a : false });
44
- }
45
40
  return (0, base64url_js_1.decode)(jwk.k);
46
41
  case 'RSA':
47
42
  if (jwk.oth !== undefined) {
@@ -7,7 +7,7 @@ const iv_js_1 = require("./iv.js");
7
7
  const base64url_js_1 = require("../runtime/base64url.js");
8
8
  async function wrap(alg, key, cek, iv) {
9
9
  const jweAlgorithm = alg.slice(0, 7);
10
- iv || (iv = (0, iv_js_1.default)(jweAlgorithm));
10
+ iv ||= (0, iv_js_1.default)(jweAlgorithm);
11
11
  const { ciphertext: encryptedKey, tag } = await (0, encrypt_js_1.default)(jweAlgorithm, cek, key, iv, new Uint8Array(0));
12
12
  return { encryptedKey, iv: (0, base64url_js_1.encode)(iv), tag: (0, base64url_js_1.encode)(tag) };
13
13
  }
@@ -75,7 +75,7 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options)
75
75
  throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');
76
76
  if (typeof joseHeader.p2c !== 'number')
77
77
  throw new errors_js_1.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);
78
- const p2cLimit = (options === null || options === void 0 ? void 0 : options.maxPBES2Count) || 10000;
78
+ const p2cLimit = options?.maxPBES2Count || 10000;
79
79
  if (joseHeader.p2c > p2cLimit)
80
80
  throw new errors_js_1.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);
81
81
  if (typeof joseHeader.p2s !== 'string')
@@ -29,7 +29,7 @@ async function encryptKeyManagement(alg, enc, key, providedCek, providedParamete
29
29
  }
30
30
  const { apu, apv } = providedParameters;
31
31
  let { epk: ephemeralKey } = providedParameters;
32
- ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);
32
+ ephemeralKey ||= (await ECDH.generateEpk(key)).privateKey;
33
33
  const { x, y, crv, kty } = await (0, export_js_1.exportJWK)(ephemeralKey);
34
34
  const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);
35
35
  parameters = { epk: { x, crv, kty } };
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.unwrap = exports.wrap = void 0;
4
- const buffer_1 = require("buffer");
5
- const crypto_1 = require("crypto");
4
+ const node_buffer_1 = require("node:buffer");
5
+ const node_crypto_1 = require("node:crypto");
6
6
  const errors_js_1 = require("../util/errors.js");
7
7
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
8
8
  const webcrypto_js_1 = require("./webcrypto.js");
@@ -21,11 +21,11 @@ function ensureKeyObject(key, alg, usage) {
21
21
  return key;
22
22
  }
23
23
  if (key instanceof Uint8Array) {
24
- return (0, crypto_1.createSecretKey)(key);
24
+ return (0, node_crypto_1.createSecretKey)(key);
25
25
  }
26
26
  if ((0, webcrypto_js_1.isCryptoKey)(key)) {
27
27
  (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, usage);
28
- return crypto_1.KeyObject.from(key);
28
+ return node_crypto_1.KeyObject.from(key);
29
29
  }
30
30
  throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
31
31
  }
@@ -37,7 +37,7 @@ const wrap = (alg, key, cek) => {
37
37
  }
38
38
  const keyObject = ensureKeyObject(key, alg, 'wrapKey');
39
39
  checkKeySize(keyObject, alg);
40
- const cipher = (0, crypto_1.createCipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));
40
+ const cipher = (0, node_crypto_1.createCipheriv)(algorithm, keyObject, node_buffer_1.Buffer.alloc(8, 0xa6));
41
41
  return (0, buffer_utils_js_1.concat)(cipher.update(cek), cipher.final());
42
42
  };
43
43
  exports.wrap = wrap;
@@ -49,7 +49,7 @@ const unwrap = (alg, key, encryptedKey) => {
49
49
  }
50
50
  const keyObject = ensureKeyObject(key, alg, 'unwrapKey');
51
51
  checkKeySize(keyObject, alg);
52
- const cipher = (0, crypto_1.createDecipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));
52
+ const cipher = (0, node_crypto_1.createDecipheriv)(algorithm, keyObject, node_buffer_1.Buffer.alloc(8, 0xa6));
53
53
  return (0, buffer_utils_js_1.concat)(cipher.update(encryptedKey), cipher.final());
54
54
  };
55
55
  exports.unwrap = unwrap;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0;
4
- const crypto_1 = require("crypto");
5
- const buffer_1 = require("buffer");
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_buffer_1 = require("node:buffer");
6
6
  const webcrypto_js_1 = require("./webcrypto.js");
7
7
  const is_key_object_js_1 = require("./is_key_object.js");
8
8
  const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
@@ -13,7 +13,7 @@ const genericExport = (keyType, keyFormat, key) => {
13
13
  if (!key.extractable) {
14
14
  throw new TypeError('CryptoKey is not extractable');
15
15
  }
16
- keyObject = crypto_1.KeyObject.from(key);
16
+ keyObject = node_crypto_1.KeyObject.from(key);
17
17
  }
18
18
  else if ((0, is_key_object_js_1.default)(key)) {
19
19
  keyObject = key;
@@ -34,19 +34,19 @@ const toPKCS8 = (key) => {
34
34
  return genericExport('private', 'pkcs8', key);
35
35
  };
36
36
  exports.toPKCS8 = toPKCS8;
37
- const fromPKCS8 = (pem) => (0, crypto_1.createPrivateKey)({
38
- key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'),
37
+ const fromPKCS8 = (pem) => (0, node_crypto_1.createPrivateKey)({
38
+ key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, ''), 'base64'),
39
39
  type: 'pkcs8',
40
40
  format: 'der',
41
41
  });
42
42
  exports.fromPKCS8 = fromPKCS8;
43
- const fromSPKI = (pem) => (0, crypto_1.createPublicKey)({
44
- key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'),
43
+ const fromSPKI = (pem) => (0, node_crypto_1.createPublicKey)({
44
+ key: node_buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, ''), 'base64'),
45
45
  type: 'spki',
46
46
  format: 'der',
47
47
  });
48
48
  exports.fromSPKI = fromSPKI;
49
- const fromX509 = (pem) => (0, crypto_1.createPublicKey)({
49
+ const fromX509 = (pem) => (0, node_crypto_1.createPublicKey)({
50
50
  key: pem,
51
51
  type: 'spki',
52
52
  format: 'pem',
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.decode = exports.encode = exports.encodeBase64 = exports.decodeBase64 = void 0;
4
- const buffer_1 = require("buffer");
4
+ const node_buffer_1 = require("node:buffer");
5
5
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
6
- let encode;
7
6
  function normalize(input) {
8
7
  let encoded = input;
9
8
  if (encoded instanceof Uint8Array) {
@@ -11,15 +10,11 @@ function normalize(input) {
11
10
  }
12
11
  return encoded;
13
12
  }
14
- if (buffer_1.Buffer.isEncoding('base64url')) {
15
- exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64url');
16
- }
17
- else {
18
- exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
19
- }
20
- const decodeBase64 = (input) => buffer_1.Buffer.from(input, 'base64');
13
+ const encode = (input) => node_buffer_1.Buffer.from(input).toString('base64url');
14
+ exports.encode = encode;
15
+ const decodeBase64 = (input) => new Uint8Array(node_buffer_1.Buffer.from(input, 'base64'));
21
16
  exports.decodeBase64 = decodeBase64;
22
- const encodeBase64 = (input) => buffer_1.Buffer.from(input).toString('base64');
17
+ const encodeBase64 = (input) => node_buffer_1.Buffer.from(input).toString('base64');
23
18
  exports.encodeBase64 = encodeBase64;
24
- const decode = (input) => buffer_1.Buffer.from(normalize(input), 'base64');
19
+ const decode = (input) => new Uint8Array(node_buffer_1.Buffer.from(normalize(input), 'base64'));
25
20
  exports.decode = decode;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
3
+ const node_crypto_1 = require("node:crypto");
4
4
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
5
5
  function cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {
6
6
  const macData = (0, buffer_utils_js_1.concat)(aad, iv, ciphertext, (0, buffer_utils_js_1.uint64be)(aad.length << 3));
7
- const hmac = (0, crypto_1.createHmac)(`sha${macSize}`, macKey);
7
+ const hmac = (0, node_crypto_1.createHmac)(`sha${macSize}`, macKey);
8
8
  hmac.update(macData);
9
9
  return hmac.digest().slice(0, keySize >> 3);
10
10
  }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (key, alg) => {
4
+ const { modulusLength } = key.asymmetricKeyDetails;
5
+ if (typeof modulusLength !== 'number' || modulusLength < 2048) {
6
+ throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);
7
+ }
8
+ };
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
3
+ const node_crypto_1 = require("node:crypto");
4
4
  let ciphers;
5
5
  exports.default = (algorithm) => {
6
- ciphers || (ciphers = new Set((0, crypto_1.getCiphers)()));
6
+ ciphers ||= new Set((0, node_crypto_1.getCiphers)());
7
7
  return ciphers.has(algorithm);
8
8
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
3
+ const node_crypto_1 = require("node:crypto");
4
4
  const check_iv_length_js_1 = require("../lib/check_iv_length.js");
5
5
  const check_cek_length_js_1 = require("./check_cek_length.js");
6
6
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
@@ -37,7 +37,7 @@ function cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {
37
37
  }
38
38
  let plaintext;
39
39
  try {
40
- const decipher = (0, crypto_1.createDecipheriv)(algorithm, encKey, iv);
40
+ const decipher = (0, node_crypto_1.createDecipheriv)(algorithm, encKey, iv);
41
41
  plaintext = (0, buffer_utils_js_1.concat)(decipher.update(ciphertext), decipher.final());
42
42
  }
43
43
  catch {
@@ -54,7 +54,7 @@ function gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {
54
54
  throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
55
55
  }
56
56
  try {
57
- const decipher = (0, crypto_1.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });
57
+ const decipher = (0, node_crypto_1.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });
58
58
  decipher.setAuthTag(tag);
59
59
  if (aad.byteLength) {
60
60
  decipher.setAAD(aad, { plaintextLength: ciphertext.length });
@@ -71,7 +71,7 @@ const decrypt = (enc, cek, ciphertext, iv, tag, aad) => {
71
71
  let key;
72
72
  if ((0, webcrypto_js_1.isCryptoKey)(cek)) {
73
73
  (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'decrypt');
74
- key = crypto_1.KeyObject.from(cek);
74
+ key = node_crypto_1.KeyObject.from(cek);
75
75
  }
76
76
  else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {
77
77
  key = cek;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
4
- const digest = (algorithm, data) => (0, crypto_1.createHash)(algorithm).update(data).digest();
3
+ const node_crypto_1 = require("node:crypto");
4
+ const digest = (algorithm, data) => (0, node_crypto_1.createHash)(algorithm).update(data).digest();
5
5
  exports.default = digest;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ecdhAllowed = exports.generateEpk = exports.deriveKey = void 0;
4
- const crypto_1 = require("crypto");
5
- const util_1 = require("util");
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_util_1 = require("node:util");
6
6
  const get_named_curve_js_1 = require("./get_named_curve.js");
7
7
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
8
8
  const errors_js_1 = require("../util/errors.js");
@@ -11,12 +11,12 @@ const crypto_key_js_1 = require("../lib/crypto_key.js");
11
11
  const is_key_object_js_1 = require("./is_key_object.js");
12
12
  const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
13
13
  const is_key_like_js_1 = require("./is_key_like.js");
14
- const generateKeyPair = (0, util_1.promisify)(crypto_1.generateKeyPair);
14
+ const generateKeyPair = (0, node_util_1.promisify)(node_crypto_1.generateKeyPair);
15
15
  async function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {
16
16
  let publicKey;
17
17
  if ((0, webcrypto_js_1.isCryptoKey)(publicKee)) {
18
18
  (0, crypto_key_js_1.checkEncCryptoKey)(publicKee, 'ECDH');
19
- publicKey = crypto_1.KeyObject.from(publicKee);
19
+ publicKey = node_crypto_1.KeyObject.from(publicKee);
20
20
  }
21
21
  else if ((0, is_key_object_js_1.default)(publicKee)) {
22
22
  publicKey = publicKee;
@@ -27,7 +27,7 @@ async function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new
27
27
  let privateKey;
28
28
  if ((0, webcrypto_js_1.isCryptoKey)(privateKee)) {
29
29
  (0, crypto_key_js_1.checkEncCryptoKey)(privateKee, 'ECDH', 'deriveBits');
30
- privateKey = crypto_1.KeyObject.from(privateKee);
30
+ privateKey = node_crypto_1.KeyObject.from(privateKee);
31
31
  }
32
32
  else if ((0, is_key_object_js_1.default)(privateKee)) {
33
33
  privateKey = privateKee;
@@ -36,14 +36,14 @@ async function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new
36
36
  throw new TypeError((0, invalid_key_input_js_1.default)(privateKee, ...is_key_like_js_1.types));
37
37
  }
38
38
  const value = (0, buffer_utils_js_1.concat)((0, buffer_utils_js_1.lengthAndInput)(buffer_utils_js_1.encoder.encode(algorithm)), (0, buffer_utils_js_1.lengthAndInput)(apu), (0, buffer_utils_js_1.lengthAndInput)(apv), (0, buffer_utils_js_1.uint32be)(keyLength));
39
- const sharedSecret = (0, crypto_1.diffieHellman)({ privateKey, publicKey });
39
+ const sharedSecret = (0, node_crypto_1.diffieHellman)({ privateKey, publicKey });
40
40
  return (0, buffer_utils_js_1.concatKdf)(sharedSecret, keyLength, value);
41
41
  }
42
42
  exports.deriveKey = deriveKey;
43
43
  async function generateEpk(kee) {
44
44
  let key;
45
45
  if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
46
- key = crypto_1.KeyObject.from(kee);
46
+ key = node_crypto_1.KeyObject.from(kee);
47
47
  }
48
48
  else if ((0, is_key_object_js_1.default)(kee)) {
49
49
  key = kee;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
3
+ const node_crypto_1 = require("node:crypto");
4
4
  const check_iv_length_js_1 = require("../lib/check_iv_length.js");
5
5
  const check_cek_length_js_1 = require("./check_cek_length.js");
6
6
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
@@ -23,7 +23,7 @@ function cbcEncrypt(enc, plaintext, cek, iv, aad) {
23
23
  if (!(0, ciphers_js_1.default)(algorithm)) {
24
24
  throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
25
25
  }
26
- const cipher = (0, crypto_1.createCipheriv)(algorithm, encKey, iv);
26
+ const cipher = (0, node_crypto_1.createCipheriv)(algorithm, encKey, iv);
27
27
  const ciphertext = (0, buffer_utils_js_1.concat)(cipher.update(plaintext), cipher.final());
28
28
  const macSize = parseInt(enc.slice(-3), 10);
29
29
  const tag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);
@@ -35,7 +35,7 @@ function gcmEncrypt(enc, plaintext, cek, iv, aad) {
35
35
  if (!(0, ciphers_js_1.default)(algorithm)) {
36
36
  throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);
37
37
  }
38
- const cipher = (0, crypto_1.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });
38
+ const cipher = (0, node_crypto_1.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });
39
39
  if (aad.byteLength) {
40
40
  cipher.setAAD(aad, { plaintextLength: plaintext.length });
41
41
  }
@@ -48,7 +48,7 @@ const encrypt = (enc, plaintext, cek, iv, aad) => {
48
48
  let key;
49
49
  if ((0, webcrypto_js_1.isCryptoKey)(cek)) {
50
50
  (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'encrypt');
51
- key = crypto_1.KeyObject.from(cek);
51
+ key = node_crypto_1.KeyObject.from(cek);
52
52
  }
53
53
  else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {
54
54
  key = cek;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const http = require("http");
4
- const https = require("https");
5
- const events_1 = require("events");
3
+ const http = require("node:http");
4
+ const https = require("node:https");
5
+ const node_events_1 = require("node:events");
6
6
  const errors_js_1 = require("../util/errors.js");
7
7
  const buffer_utils_js_1 = require("../lib/buffer_utils.js");
8
8
  const fetchJwks = async (url, timeout, options) => {
@@ -23,7 +23,7 @@ const fetchJwks = async (url, timeout, options) => {
23
23
  timeout,
24
24
  headers,
25
25
  });
26
- const [response] = (await Promise.race([(0, events_1.once)(req, 'response'), (0, events_1.once)(req, 'timeout')]));
26
+ const [response] = (await Promise.race([(0, node_events_1.once)(req, 'response'), (0, node_events_1.once)(req, 'timeout')]));
27
27
  if (!response) {
28
28
  req.destroy();
29
29
  throw new errors_js_1.JWKSTimeout();
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateKeyPair = exports.generateSecret = void 0;
4
- const crypto_1 = require("crypto");
5
- const util_1 = require("util");
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_util_1 = require("node:util");
6
6
  const random_js_1 = require("./random.js");
7
- const check_modulus_length_js_1 = require("./check_modulus_length.js");
8
7
  const errors_js_1 = require("../util/errors.js");
9
- const generate = (0, util_1.promisify)(crypto_1.generateKeyPair);
8
+ const generate = (0, node_util_1.promisify)(node_crypto_1.generateKeyPair);
10
9
  async function generateSecret(alg, options) {
11
10
  let length;
12
11
  switch (alg) {
@@ -32,11 +31,10 @@ async function generateSecret(alg, options) {
32
31
  default:
33
32
  throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
34
33
  }
35
- return (0, crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));
34
+ return (0, node_crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));
36
35
  }
37
36
  exports.generateSecret = generateSecret;
38
37
  async function generateKeyPair(alg, options) {
39
- var _a, _b;
40
38
  switch (alg) {
41
39
  case 'RS256':
42
40
  case 'RS384':
@@ -49,7 +47,7 @@ async function generateKeyPair(alg, options) {
49
47
  case 'RSA-OAEP-384':
50
48
  case 'RSA-OAEP-512':
51
49
  case 'RSA1_5': {
52
- const modulusLength = (_a = options === null || options === void 0 ? void 0 : options.modulusLength) !== null && _a !== void 0 ? _a : 2048;
50
+ const modulusLength = options?.modulusLength ?? 2048;
53
51
  if (typeof modulusLength !== 'number' || modulusLength < 2048) {
54
52
  throw new errors_js_1.JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');
55
53
  }
@@ -57,8 +55,6 @@ async function generateKeyPair(alg, options) {
57
55
  modulusLength,
58
56
  publicExponent: 0x10001,
59
57
  });
60
- (0, check_modulus_length_js_1.setModulusLength)(keypair.privateKey, modulusLength);
61
- (0, check_modulus_length_js_1.setModulusLength)(keypair.publicKey, modulusLength);
62
58
  return keypair;
63
59
  }
64
60
  case 'ES256':
@@ -70,7 +66,7 @@ async function generateKeyPair(alg, options) {
70
66
  case 'ES512':
71
67
  return generate('ec', { namedCurve: 'P-521' });
72
68
  case 'EdDSA': {
73
- switch (options === null || options === void 0 ? void 0 : options.crv) {
69
+ switch (options?.crv) {
74
70
  case undefined:
75
71
  case 'Ed25519':
76
72
  return generate('ed25519');
@@ -84,7 +80,7 @@ async function generateKeyPair(alg, options) {
84
80
  case 'ECDH-ES+A128KW':
85
81
  case 'ECDH-ES+A192KW':
86
82
  case 'ECDH-ES+A256KW':
87
- const crv = (_b = options === null || options === void 0 ? void 0 : options.crv) !== null && _b !== void 0 ? _b : 'P-256';
83
+ const crv = options?.crv ?? 'P-256';
88
84
  switch (crv) {
89
85
  case undefined:
90
86
  case 'P-256':
@@ -1,17 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setCurve = exports.weakMap = void 0;
4
- const buffer_1 = require("buffer");
5
- const crypto_1 = require("crypto");
3
+ exports.weakMap = void 0;
4
+ const node_crypto_1 = require("node:crypto");
6
5
  const errors_js_1 = require("../util/errors.js");
7
6
  const webcrypto_js_1 = require("./webcrypto.js");
8
7
  const is_key_object_js_1 = require("./is_key_object.js");
9
8
  const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
10
9
  const is_key_like_js_1 = require("./is_key_like.js");
11
- const p256 = buffer_1.Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);
12
- const p384 = buffer_1.Buffer.from([43, 129, 4, 0, 34]);
13
- const p521 = buffer_1.Buffer.from([43, 129, 4, 0, 35]);
14
- const secp256k1 = buffer_1.Buffer.from([43, 129, 4, 0, 10]);
15
10
  exports.weakMap = new WeakMap();
16
11
  const namedCurveToJOSE = (namedCurve) => {
17
12
  switch (namedCurve) {
@@ -28,10 +23,9 @@ const namedCurveToJOSE = (namedCurve) => {
28
23
  }
29
24
  };
30
25
  const getNamedCurve = (kee, raw) => {
31
- var _a;
32
26
  let key;
33
27
  if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
34
- key = crypto_1.KeyObject.from(kee);
28
+ key = node_crypto_1.KeyObject.from(kee);
35
29
  }
36
30
  else if ((0, is_key_object_js_1.default)(kee)) {
37
31
  key = kee;
@@ -50,46 +44,14 @@ const getNamedCurve = (kee, raw) => {
50
44
  case 'x448':
51
45
  return `X${key.asymmetricKeyType.slice(1)}`;
52
46
  case 'ec': {
53
- if (exports.weakMap.has(key)) {
54
- return exports.weakMap.get(key);
55
- }
56
- let namedCurve = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.namedCurve;
57
- if (!namedCurve && key.type === 'private') {
58
- namedCurve = getNamedCurve((0, crypto_1.createPublicKey)(key), true);
59
- }
60
- else if (!namedCurve) {
61
- const buf = key.export({ format: 'der', type: 'spki' });
62
- const i = buf[1] < 128 ? 14 : 15;
63
- const len = buf[i];
64
- const curveOid = buf.slice(i + 1, i + 1 + len);
65
- if (curveOid.equals(p256)) {
66
- namedCurve = 'prime256v1';
67
- }
68
- else if (curveOid.equals(p384)) {
69
- namedCurve = 'secp384r1';
70
- }
71
- else if (curveOid.equals(p521)) {
72
- namedCurve = 'secp521r1';
73
- }
74
- else if (curveOid.equals(secp256k1)) {
75
- namedCurve = 'secp256k1';
76
- }
77
- else {
78
- throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');
79
- }
80
- }
81
- if (raw)
47
+ let namedCurve = key.asymmetricKeyDetails.namedCurve;
48
+ if (raw) {
82
49
  return namedCurve;
83
- const curve = namedCurveToJOSE(namedCurve);
84
- exports.weakMap.set(key, curve);
85
- return curve;
50
+ }
51
+ return namedCurveToJOSE(namedCurve);
86
52
  }
87
53
  default:
88
54
  throw new TypeError('Invalid asymmetric key type for this operation');
89
55
  }
90
56
  };
91
- function setCurve(keyObject, curve) {
92
- exports.weakMap.set(keyObject, curve);
93
- }
94
- exports.setCurve = setCurve;
95
57
  exports.default = getNamedCurve;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
3
+ const node_crypto_1 = require("node:crypto");
4
4
  const webcrypto_js_1 = require("./webcrypto.js");
5
5
  const crypto_key_js_1 = require("../lib/crypto_key.js");
6
6
  const invalid_key_input_js_1 = require("../lib/invalid_key_input.js");
@@ -10,14 +10,14 @@ function getSignVerifyKey(alg, key, usage) {
10
10
  if (!alg.startsWith('HS')) {
11
11
  throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));
12
12
  }
13
- return (0, crypto_1.createSecretKey)(key);
13
+ return (0, node_crypto_1.createSecretKey)(key);
14
14
  }
15
- if (key instanceof crypto_1.KeyObject) {
15
+ if (key instanceof node_crypto_1.KeyObject) {
16
16
  return key;
17
17
  }
18
18
  if ((0, webcrypto_js_1.isCryptoKey)(key)) {
19
19
  (0, crypto_key_js_1.checkSigCryptoKey)(key, alg, usage);
20
- return crypto_1.KeyObject.from(key);
20
+ return node_crypto_1.KeyObject.from(key);
21
21
  }
22
22
  throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));
23
23
  }
@@ -6,6 +6,6 @@ const is_key_object_js_1 = require("./is_key_object.js");
6
6
  exports.default = (key) => (0, is_key_object_js_1.default)(key) || (0, webcrypto_js_1.isCryptoKey)(key);
7
7
  const types = ['KeyObject'];
8
8
  exports.types = types;
9
- if (globalThis.CryptoKey || (webcrypto_js_1.default === null || webcrypto_js_1.default === void 0 ? void 0 : webcrypto_js_1.default.CryptoKey)) {
9
+ if (globalThis.CryptoKey || webcrypto_js_1.default?.CryptoKey) {
10
10
  types.push('CryptoKey');
11
11
  }
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const crypto_1 = require("crypto");
4
- const util = require("util");
5
- exports.default = util.types.isKeyObject
6
- ? (obj) => util.types.isKeyObject(obj)
7
- : (obj) => obj != null && obj instanceof crypto_1.KeyObject;
3
+ const util = require("node:util");
4
+ exports.default = (obj) => util.types.isKeyObject(obj);