jose 3.20.3 → 3.20.4

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 (59) hide show
  1. package/dist/browser/jwe/flattened/decrypt.js +2 -2
  2. package/dist/browser/lib/decrypt_key_management.js +4 -1
  3. package/dist/node/cjs/jwe/compact/decrypt.js +1 -1
  4. package/dist/node/cjs/jwe/flattened/decrypt.js +17 -17
  5. package/dist/node/cjs/jwe/flattened/encrypt.js +13 -13
  6. package/dist/node/cjs/jwe/general/decrypt.js +2 -2
  7. package/dist/node/cjs/jwk/embedded.js +2 -2
  8. package/dist/node/cjs/jwk/from_key_like.js +1 -1
  9. package/dist/node/cjs/jwk/parse.js +1 -1
  10. package/dist/node/cjs/jwk/thumbprint.js +2 -2
  11. package/dist/node/cjs/jwks/remote.js +3 -3
  12. package/dist/node/cjs/jws/compact/verify.js +1 -1
  13. package/dist/node/cjs/jws/flattened/sign.js +8 -8
  14. package/dist/node/cjs/jws/flattened/verify.js +11 -11
  15. package/dist/node/cjs/jws/general/verify.js +2 -2
  16. package/dist/node/cjs/jwt/decrypt.js +2 -2
  17. package/dist/node/cjs/jwt/produce.js +4 -4
  18. package/dist/node/cjs/jwt/unsecured.js +1 -1
  19. package/dist/node/cjs/jwt/verify.js +2 -2
  20. package/dist/node/cjs/key/export.js +3 -3
  21. package/dist/node/cjs/key/import.js +10 -10
  22. package/dist/node/cjs/lib/cek.js +1 -1
  23. package/dist/node/cjs/lib/check_key_type.js +4 -4
  24. package/dist/node/cjs/lib/decrypt_key_management.js +16 -13
  25. package/dist/node/cjs/lib/encrypt_key_management.js +14 -14
  26. package/dist/node/cjs/lib/iv.js +1 -1
  27. package/dist/node/cjs/lib/jwt_claims_set.js +4 -4
  28. package/dist/node/cjs/runtime/aesgcmkw.js +4 -4
  29. package/dist/node/cjs/runtime/aeskw.js +11 -11
  30. package/dist/node/cjs/runtime/asn1.js +6 -6
  31. package/dist/node/cjs/runtime/cbc_tag.js +2 -2
  32. package/dist/node/cjs/runtime/check_cek_length.js +1 -1
  33. package/dist/node/cjs/runtime/ciphers.js +1 -1
  34. package/dist/node/cjs/runtime/decrypt.js +15 -15
  35. package/dist/node/cjs/runtime/digest.js +1 -1
  36. package/dist/node/cjs/runtime/ecdhes.js +18 -18
  37. package/dist/node/cjs/runtime/encrypt.js +14 -14
  38. package/dist/node/cjs/runtime/fetch_jwks.js +2 -2
  39. package/dist/node/cjs/runtime/generate.js +4 -4
  40. package/dist/node/cjs/runtime/get_named_curve.js +5 -5
  41. package/dist/node/cjs/runtime/get_sign_verify_key.js +5 -5
  42. package/dist/node/cjs/runtime/invalid_key_input.js +2 -2
  43. package/dist/node/cjs/runtime/is_key_like.js +1 -1
  44. package/dist/node/cjs/runtime/jwk_to_key.js +11 -11
  45. package/dist/node/cjs/runtime/key_to_jwk.js +27 -27
  46. package/dist/node/cjs/runtime/node_key.js +4 -4
  47. package/dist/node/cjs/runtime/pbes2kw.js +13 -13
  48. package/dist/node/cjs/runtime/rsaes.js +7 -7
  49. package/dist/node/cjs/runtime/secret_key.js +1 -1
  50. package/dist/node/cjs/runtime/sign.js +4 -4
  51. package/dist/node/cjs/runtime/verify.js +5 -5
  52. package/dist/node/cjs/runtime/zlib.js +2 -2
  53. package/dist/node/cjs/util/decode_protected_header.js +2 -2
  54. package/dist/node/cjs/util/generate_key_pair.js +1 -1
  55. package/dist/node/cjs/util/generate_secret.js +1 -1
  56. package/dist/node/esm/jwe/flattened/decrypt.js +2 -2
  57. package/dist/node/esm/lib/decrypt_key_management.js +4 -1
  58. package/dist/types/types.d.ts +1 -0
  59. package/package.json +1 -1
@@ -6,7 +6,7 @@ const util_1 = require("util");
6
6
  const random_js_1 = require("./random.js");
7
7
  const check_modulus_length_js_1 = require("./check_modulus_length.js");
8
8
  const errors_js_1 = require("../util/errors.js");
9
- const generate = (0, util_1.promisify)(crypto_1.generateKeyPair);
9
+ const generate = util_1.promisify(crypto_1.generateKeyPair);
10
10
  async function generateSecret(alg, options) {
11
11
  let length;
12
12
  switch (alg) {
@@ -32,7 +32,7 @@ async function generateSecret(alg, options) {
32
32
  default:
33
33
  throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
34
34
  }
35
- return (0, crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));
35
+ return crypto_1.createSecretKey(random_js_1.default(new Uint8Array(length >> 3)));
36
36
  }
37
37
  exports.generateSecret = generateSecret;
38
38
  async function generateKeyPair(alg, options) {
@@ -57,8 +57,8 @@ async function generateKeyPair(alg, options) {
57
57
  modulusLength,
58
58
  publicExponent: 0x10001,
59
59
  });
60
- (0, check_modulus_length_js_1.setModulusLength)(keypair.privateKey, modulusLength);
61
- (0, check_modulus_length_js_1.setModulusLength)(keypair.publicKey, modulusLength);
60
+ check_modulus_length_js_1.setModulusLength(keypair.privateKey, modulusLength);
61
+ check_modulus_length_js_1.setModulusLength(keypair.publicKey, modulusLength);
62
62
  return keypair;
63
63
  }
64
64
  case 'ES256':
@@ -28,14 +28,14 @@ const namedCurveToJOSE = (namedCurve) => {
28
28
  const getNamedCurve = (kee, raw) => {
29
29
  var _a;
30
30
  let key;
31
- if ((0, webcrypto_js_1.isCryptoKey)(kee)) {
32
- key = (0, webcrypto_js_1.getKeyObject)(kee);
31
+ if (webcrypto_js_1.isCryptoKey(kee)) {
32
+ key = webcrypto_js_1.getKeyObject(kee);
33
33
  }
34
- else if ((0, is_key_object_js_1.default)(kee)) {
34
+ else if (is_key_object_js_1.default(kee)) {
35
35
  key = kee;
36
36
  }
37
37
  else {
38
- throw new TypeError((0, invalid_key_input_js_1.default)(kee, 'KeyObject', 'CryptoKey'));
38
+ throw new TypeError(invalid_key_input_js_1.default(kee, 'KeyObject', 'CryptoKey'));
39
39
  }
40
40
  if (key.type === 'secret') {
41
41
  throw new TypeError('only "private" or "public" type keys can be used for this operation');
@@ -53,7 +53,7 @@ const getNamedCurve = (kee, raw) => {
53
53
  }
54
54
  let namedCurve = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.namedCurve;
55
55
  if (!namedCurve && key.type === 'private') {
56
- namedCurve = getNamedCurve((0, crypto_1.createPublicKey)(key), true);
56
+ namedCurve = getNamedCurve(crypto_1.createPublicKey(key), true);
57
57
  }
58
58
  else if (!namedCurve) {
59
59
  const buf = key.export({ format: 'der', type: 'spki' });
@@ -7,16 +7,16 @@ const invalid_key_input_js_1 = require("./invalid_key_input.js");
7
7
  function getSignVerifyKey(alg, key, usage) {
8
8
  if (key instanceof Uint8Array) {
9
9
  if (!alg.startsWith('HS')) {
10
- throw new TypeError((0, invalid_key_input_js_1.default)(key, 'KeyObject', 'CryptoKey'));
10
+ throw new TypeError(invalid_key_input_js_1.default(key, 'KeyObject', 'CryptoKey'));
11
11
  }
12
- return (0, secret_key_js_1.default)(key);
12
+ return secret_key_js_1.default(key);
13
13
  }
14
14
  if (key instanceof crypto.KeyObject) {
15
15
  return key;
16
16
  }
17
- if ((0, webcrypto_js_1.isCryptoKey)(key)) {
18
- return (0, webcrypto_js_1.getKeyObject)(key, alg, new Set([usage]));
17
+ if (webcrypto_js_1.isCryptoKey(key)) {
18
+ return webcrypto_js_1.getKeyObject(key, alg, new Set([usage]));
19
19
  }
20
- throw new TypeError((0, invalid_key_input_js_1.default)(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
20
+ throw new TypeError(invalid_key_input_js_1.default(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
21
21
  }
22
22
  exports.default = getSignVerifyKey;
@@ -24,12 +24,12 @@ exports.default = (actual, ...types) => {
24
24
  msg += ` Received an instance of ${actual.constructor.name}`;
25
25
  }
26
26
  else {
27
- const inspected = (0, util_1.inspect)(actual, { depth: -1 });
27
+ const inspected = util_1.inspect(actual, { depth: -1 });
28
28
  msg += ` Received ${inspected}`;
29
29
  }
30
30
  }
31
31
  else {
32
- let inspected = (0, util_1.inspect)(actual, { colors: false });
32
+ let inspected = util_1.inspect(actual, { colors: false });
33
33
  if (inspected.length > 25)
34
34
  inspected = `${inspected.slice(0, 25)}...`;
35
35
  msg += ` Received type ${typeof actual} (${inspected})`;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.types = void 0;
4
4
  const webcrypto_js_1 = require("./webcrypto.js");
5
5
  const is_key_object_js_1 = require("./is_key_object.js");
6
- exports.default = (key) => (0, is_key_object_js_1.default)(key) || (0, webcrypto_js_1.isCryptoKey)(key);
6
+ exports.default = (key) => is_key_object_js_1.default(key) || webcrypto_js_1.isCryptoKey(key);
7
7
  const types = ['KeyObject'];
8
8
  exports.types = types;
9
9
  if (parseInt(process.versions.node) >= 16) {
@@ -14,12 +14,12 @@ const jwkImportSupported = major >= 16 || (major === 15 && minor >= 12);
14
14
  const parse = (jwk) => {
15
15
  if (jwkImportSupported && jwk.kty !== 'oct') {
16
16
  return jwk.d
17
- ? (0, crypto_1.createPrivateKey)({ format: 'jwk', key: jwk })
18
- : (0, crypto_1.createPublicKey)({ format: 'jwk', key: jwk });
17
+ ? crypto_1.createPrivateKey({ format: 'jwk', key: jwk })
18
+ : crypto_1.createPublicKey({ format: 'jwk', key: jwk });
19
19
  }
20
20
  switch (jwk.kty) {
21
21
  case 'oct': {
22
- return (0, crypto_1.createSecretKey)((0, base64url_js_1.decode)(jwk.k));
22
+ return crypto_1.createSecretKey(base64url_js_1.decode(jwk.k));
23
23
  }
24
24
  case 'RSA': {
25
25
  const enc = new asn1_sequence_encoder_js_1.default();
@@ -47,8 +47,8 @@ const parse = (jwk) => {
47
47
  format: 'der',
48
48
  type: 'pkcs1',
49
49
  };
50
- const keyObject = isPrivate ? (0, crypto_1.createPrivateKey)(createInput) : (0, crypto_1.createPublicKey)(createInput);
51
- (0, check_modulus_length_js_1.setModulusLength)(keyObject, modulus.length << 3);
50
+ const keyObject = isPrivate ? crypto_1.createPrivateKey(createInput) : crypto_1.createPublicKey(createInput);
51
+ check_modulus_length_js_1.setModulusLength(keyObject, modulus.length << 3);
52
52
  return keyObject;
53
53
  }
54
54
  case 'EC': {
@@ -78,8 +78,8 @@ const parse = (jwk) => {
78
78
  const f3 = enc$4.end(Buffer.from([0x04]));
79
79
  enc.add(f3);
80
80
  const der = enc.end();
81
- const keyObject = (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });
82
- (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);
81
+ const keyObject = crypto_1.createPrivateKey({ key: der, format: 'der', type: 'pkcs8' });
82
+ get_named_curve_js_1.setCurve(keyObject, jwk.crv);
83
83
  return keyObject;
84
84
  }
85
85
  const enc$1 = new asn1_sequence_encoder_js_1.default();
@@ -88,8 +88,8 @@ const parse = (jwk) => {
88
88
  enc.add(enc$1.end());
89
89
  enc.bitStr(pub);
90
90
  const der = enc.end();
91
- const keyObject = (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });
92
- (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);
91
+ const keyObject = crypto_1.createPublicKey({ key: der, format: 'der', type: 'spki' });
92
+ get_named_curve_js_1.setCurve(keyObject, jwk.crv);
93
93
  return keyObject;
94
94
  }
95
95
  case 'OKP': {
@@ -105,14 +105,14 @@ const parse = (jwk) => {
105
105
  const f = enc$2.end(Buffer.from([0x04]));
106
106
  enc.add(f);
107
107
  const der = enc.end();
108
- return (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });
108
+ return crypto_1.createPrivateKey({ key: der, format: 'der', type: 'pkcs8' });
109
109
  }
110
110
  const enc$1 = new asn1_sequence_encoder_js_1.default();
111
111
  enc$1.oidFor(jwk.crv);
112
112
  enc.add(enc$1.end());
113
113
  enc.bitStr(Buffer.from(jwk.x, 'base64'));
114
114
  const der = enc.end();
115
- return (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });
115
+ return crypto_1.createPublicKey({ key: der, format: 'der', type: 'spki' });
116
116
  }
117
117
  default:
118
118
  throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
@@ -15,23 +15,23 @@ const [major, minor] = process.version
15
15
  const jwkExportSupported = major >= 16 || (major === 15 && minor >= 9);
16
16
  const keyToJWK = (key) => {
17
17
  let keyObject;
18
- if ((0, webcrypto_js_1.isCryptoKey)(key)) {
18
+ if (webcrypto_js_1.isCryptoKey(key)) {
19
19
  if (!key.extractable) {
20
20
  throw new TypeError('CryptoKey is not extractable');
21
21
  }
22
- keyObject = (0, webcrypto_js_1.getKeyObject)(key);
22
+ keyObject = webcrypto_js_1.getKeyObject(key);
23
23
  }
24
- else if ((0, is_key_object_js_1.default)(key)) {
24
+ else if (is_key_object_js_1.default(key)) {
25
25
  keyObject = key;
26
26
  }
27
27
  else if (key instanceof Uint8Array) {
28
28
  return {
29
29
  kty: 'oct',
30
- k: (0, base64url_js_1.encode)(key),
30
+ k: base64url_js_1.encode(key),
31
31
  };
32
32
  }
33
33
  else {
34
- throw new TypeError((0, invalid_key_input_js_1.default)(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
34
+ throw new TypeError(invalid_key_input_js_1.default(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
35
35
  }
36
36
  if (jwkExportSupported) {
37
37
  return keyObject.export({ format: 'jwk' });
@@ -40,7 +40,7 @@ const keyToJWK = (key) => {
40
40
  case 'secret':
41
41
  return {
42
42
  kty: 'oct',
43
- k: (0, base64url_js_1.encode)(keyObject.export()),
43
+ k: base64url_js_1.encode(keyObject.export()),
44
44
  };
45
45
  case 'private':
46
46
  case 'public': {
@@ -51,24 +51,24 @@ const keyToJWK = (key) => {
51
51
  if (keyObject.type === 'private') {
52
52
  dec.unsignedInteger();
53
53
  }
54
- const n = (0, base64url_js_1.encode)(dec.unsignedInteger());
55
- const e = (0, base64url_js_1.encode)(dec.unsignedInteger());
54
+ const n = base64url_js_1.encode(dec.unsignedInteger());
55
+ const e = base64url_js_1.encode(dec.unsignedInteger());
56
56
  let jwk;
57
57
  if (keyObject.type === 'private') {
58
58
  jwk = {
59
- d: (0, base64url_js_1.encode)(dec.unsignedInteger()),
60
- p: (0, base64url_js_1.encode)(dec.unsignedInteger()),
61
- q: (0, base64url_js_1.encode)(dec.unsignedInteger()),
62
- dp: (0, base64url_js_1.encode)(dec.unsignedInteger()),
63
- dq: (0, base64url_js_1.encode)(dec.unsignedInteger()),
64
- qi: (0, base64url_js_1.encode)(dec.unsignedInteger()),
59
+ d: base64url_js_1.encode(dec.unsignedInteger()),
60
+ p: base64url_js_1.encode(dec.unsignedInteger()),
61
+ q: base64url_js_1.encode(dec.unsignedInteger()),
62
+ dp: base64url_js_1.encode(dec.unsignedInteger()),
63
+ dq: base64url_js_1.encode(dec.unsignedInteger()),
64
+ qi: base64url_js_1.encode(dec.unsignedInteger()),
65
65
  };
66
66
  }
67
67
  dec.end();
68
68
  return { kty: 'RSA', n, e, ...jwk };
69
69
  }
70
70
  case 'ec': {
71
- const crv = (0, get_named_curve_js_1.default)(keyObject);
71
+ const crv = get_named_curve_js_1.default(keyObject);
72
72
  let len;
73
73
  let offset;
74
74
  let correction;
@@ -101,8 +101,8 @@ const keyToJWK = (key) => {
101
101
  return {
102
102
  kty: 'EC',
103
103
  crv,
104
- x: (0, base64url_js_1.encode)(der.subarray(-len, -len / 2)),
105
- y: (0, base64url_js_1.encode)(der.subarray(-len / 2)),
104
+ x: base64url_js_1.encode(der.subarray(-len, -len / 2)),
105
+ y: base64url_js_1.encode(der.subarray(-len / 2)),
106
106
  };
107
107
  }
108
108
  const der = keyObject.export({ type: 'pkcs8', format: 'der' });
@@ -110,42 +110,42 @@ const keyToJWK = (key) => {
110
110
  offset += correction;
111
111
  }
112
112
  return {
113
- ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),
114
- d: (0, base64url_js_1.encode)(der.subarray(offset, offset + len / 2)),
113
+ ...keyToJWK(crypto_1.createPublicKey(keyObject)),
114
+ d: base64url_js_1.encode(der.subarray(offset, offset + len / 2)),
115
115
  };
116
116
  }
117
117
  case 'ed25519':
118
118
  case 'x25519': {
119
- const crv = (0, get_named_curve_js_1.default)(keyObject);
119
+ const crv = get_named_curve_js_1.default(keyObject);
120
120
  if (keyObject.type === 'public') {
121
121
  const der = keyObject.export({ type: 'spki', format: 'der' });
122
122
  return {
123
123
  kty: 'OKP',
124
124
  crv,
125
- x: (0, base64url_js_1.encode)(der.subarray(-32)),
125
+ x: base64url_js_1.encode(der.subarray(-32)),
126
126
  };
127
127
  }
128
128
  const der = keyObject.export({ type: 'pkcs8', format: 'der' });
129
129
  return {
130
- ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),
131
- d: (0, base64url_js_1.encode)(der.subarray(-32)),
130
+ ...keyToJWK(crypto_1.createPublicKey(keyObject)),
131
+ d: base64url_js_1.encode(der.subarray(-32)),
132
132
  };
133
133
  }
134
134
  case 'ed448':
135
135
  case 'x448': {
136
- const crv = (0, get_named_curve_js_1.default)(keyObject);
136
+ const crv = get_named_curve_js_1.default(keyObject);
137
137
  if (keyObject.type === 'public') {
138
138
  const der = keyObject.export({ type: 'spki', format: 'der' });
139
139
  return {
140
140
  kty: 'OKP',
141
141
  crv,
142
- x: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),
142
+ x: base64url_js_1.encode(der.subarray(crv === 'Ed448' ? -57 : -56)),
143
143
  };
144
144
  }
145
145
  const der = keyObject.export({ type: 'pkcs8', format: 'der' });
146
146
  return {
147
- ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),
148
- d: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),
147
+ ...keyToJWK(crypto_1.createPublicKey(keyObject)),
148
+ d: base64url_js_1.encode(der.subarray(crv === 'Ed448' ? -57 : -56)),
149
149
  };
150
150
  }
151
151
  default:
@@ -28,7 +28,7 @@ function keyForCrypto(alg, key) {
28
28
  if (key.asymmetricKeyType !== 'rsa') {
29
29
  throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
30
30
  }
31
- (0, check_modulus_length_js_1.default)(key, alg);
31
+ check_modulus_length_js_1.default(key, alg);
32
32
  return key;
33
33
  case rsaPssParams && 'PS256':
34
34
  case rsaPssParams && 'PS384':
@@ -47,7 +47,7 @@ function keyForCrypto(alg, key) {
47
47
  else if (key.asymmetricKeyType !== 'rsa') {
48
48
  throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');
49
49
  }
50
- (0, check_modulus_length_js_1.default)(key, alg);
50
+ check_modulus_length_js_1.default(key, alg);
51
51
  return {
52
52
  key,
53
53
  padding: crypto_1.constants.RSA_PKCS1_PSS_PADDING,
@@ -59,7 +59,7 @@ function keyForCrypto(alg, key) {
59
59
  if (key.asymmetricKeyType !== 'rsa') {
60
60
  throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
61
61
  }
62
- (0, check_modulus_length_js_1.default)(key, alg);
62
+ check_modulus_length_js_1.default(key, alg);
63
63
  return {
64
64
  key,
65
65
  padding: crypto_1.constants.RSA_PKCS1_PSS_PADDING,
@@ -72,7 +72,7 @@ function keyForCrypto(alg, key) {
72
72
  if (key.asymmetricKeyType !== 'ec') {
73
73
  throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');
74
74
  }
75
- const actual = (0, get_named_curve_js_1.default)(key);
75
+ const actual = get_named_curve_js_1.default(key);
76
76
  const expected = ecCurveAlgMap.get(alg);
77
77
  if (actual !== expected) {
78
78
  throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);
@@ -11,35 +11,35 @@ const check_p2s_js_1 = require("../lib/check_p2s.js");
11
11
  const webcrypto_js_1 = require("./webcrypto.js");
12
12
  const is_key_object_js_1 = require("./is_key_object.js");
13
13
  const invalid_key_input_js_1 = require("./invalid_key_input.js");
14
- const pbkdf2 = (0, util_1.promisify)(crypto_1.pbkdf2);
14
+ const pbkdf2 = util_1.promisify(crypto_1.pbkdf2);
15
15
  function getPassword(key, alg) {
16
- if ((0, is_key_object_js_1.default)(key)) {
16
+ if (is_key_object_js_1.default(key)) {
17
17
  return key.export();
18
18
  }
19
19
  if (key instanceof Uint8Array) {
20
20
  return key;
21
21
  }
22
- if ((0, webcrypto_js_1.isCryptoKey)(key)) {
23
- return (0, webcrypto_js_1.getKeyObject)(key, alg, new Set(['deriveBits', 'deriveKey'])).export();
22
+ if (webcrypto_js_1.isCryptoKey(key)) {
23
+ return webcrypto_js_1.getKeyObject(key, alg, new Set(['deriveBits', 'deriveKey'])).export();
24
24
  }
25
- throw new TypeError((0, invalid_key_input_js_1.default)(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
25
+ throw new TypeError(invalid_key_input_js_1.default(key, 'KeyObject', 'CryptoKey', 'Uint8Array'));
26
26
  }
27
- const encrypt = async (alg, key, cek, p2c = Math.floor(Math.random() * 2049) + 2048, p2s = (0, random_js_1.default)(new Uint8Array(16))) => {
28
- (0, check_p2s_js_1.default)(p2s);
29
- const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);
27
+ const encrypt = async (alg, key, cek, p2c = Math.floor(Math.random() * 2049) + 2048, p2s = random_js_1.default(new Uint8Array(16))) => {
28
+ check_p2s_js_1.default(p2s);
29
+ const salt = buffer_utils_js_1.p2s(alg, p2s);
30
30
  const keylen = parseInt(alg.substr(13, 3), 10) >> 3;
31
31
  const password = getPassword(key, alg);
32
32
  const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.substr(8, 3)}`);
33
- const encryptedKey = await (0, aeskw_js_1.wrap)(alg.substr(-6), derivedKey, cek);
34
- return { encryptedKey, p2c, p2s: (0, base64url_js_1.encode)(p2s) };
33
+ const encryptedKey = await aeskw_js_1.wrap(alg.substr(-6), derivedKey, cek);
34
+ return { encryptedKey, p2c, p2s: base64url_js_1.encode(p2s) };
35
35
  };
36
36
  exports.encrypt = encrypt;
37
37
  const decrypt = async (alg, key, encryptedKey, p2c, p2s) => {
38
- (0, check_p2s_js_1.default)(p2s);
39
- const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);
38
+ check_p2s_js_1.default(p2s);
39
+ const salt = buffer_utils_js_1.p2s(alg, p2s);
40
40
  const keylen = parseInt(alg.substr(13, 3), 10) >> 3;
41
41
  const password = getPassword(key, alg);
42
42
  const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.substr(8, 3)}`);
43
- return (0, aeskw_js_1.unwrap)(alg.substr(-6), derivedKey, encryptedKey);
43
+ return aeskw_js_1.unwrap(alg.substr(-6), derivedKey, encryptedKey);
44
44
  };
45
45
  exports.decrypt = decrypt;
@@ -10,7 +10,7 @@ const checkKey = (key, alg) => {
10
10
  if (key.asymmetricKeyType !== 'rsa') {
11
11
  throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');
12
12
  }
13
- (0, check_modulus_length_js_1.default)(key, alg);
13
+ check_modulus_length_js_1.default(key, alg);
14
14
  };
15
15
  const resolvePadding = (alg) => {
16
16
  switch (alg) {
@@ -40,20 +40,20 @@ const resolveOaepHash = (alg) => {
40
40
  }
41
41
  };
42
42
  function ensureKeyObject(key, alg, ...usages) {
43
- if ((0, is_key_object_js_1.default)(key)) {
43
+ if (is_key_object_js_1.default(key)) {
44
44
  return key;
45
45
  }
46
- if ((0, webcrypto_js_1.isCryptoKey)(key)) {
47
- return (0, webcrypto_js_1.getKeyObject)(key, alg, new Set(usages));
46
+ if (webcrypto_js_1.isCryptoKey(key)) {
47
+ return webcrypto_js_1.getKeyObject(key, alg, new Set(usages));
48
48
  }
49
- throw new TypeError((0, invalid_key_input_js_1.default)(key, 'KeyObject', 'CryptoKey'));
49
+ throw new TypeError(invalid_key_input_js_1.default(key, 'KeyObject', 'CryptoKey'));
50
50
  }
51
51
  const encrypt = async (alg, key, cek) => {
52
52
  const padding = resolvePadding(alg);
53
53
  const oaepHash = resolveOaepHash(alg);
54
54
  const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');
55
55
  checkKey(keyObject, alg);
56
- return (0, crypto_1.publicEncrypt)({ key: keyObject, oaepHash, padding }, cek);
56
+ return crypto_1.publicEncrypt({ key: keyObject, oaepHash, padding }, cek);
57
57
  };
58
58
  exports.encrypt = encrypt;
59
59
  const decrypt = async (alg, key, encryptedKey) => {
@@ -61,6 +61,6 @@ const decrypt = async (alg, key, encryptedKey) => {
61
61
  const oaepHash = resolveOaepHash(alg);
62
62
  const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');
63
63
  checkKey(keyObject, alg);
64
- return (0, crypto_1.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);
64
+ return crypto_1.privateDecrypt({ key: keyObject, oaepHash, padding }, encryptedKey);
65
65
  };
66
66
  exports.decrypt = decrypt;
@@ -4,7 +4,7 @@ const crypto_1 = require("crypto");
4
4
  function getSecretKey(key) {
5
5
  let keyObject;
6
6
  if (key instanceof Uint8Array) {
7
- keyObject = (0, crypto_1.createSecretKey)(key);
7
+ keyObject = crypto_1.createSecretKey(key);
8
8
  }
9
9
  else {
10
10
  keyObject = key;
@@ -8,22 +8,22 @@ const node_key_js_1 = require("./node_key.js");
8
8
  const get_sign_verify_key_js_1 = require("./get_sign_verify_key.js");
9
9
  let oneShotSign;
10
10
  if (crypto.sign.length > 3) {
11
- oneShotSign = (0, util_1.promisify)(crypto.sign);
11
+ oneShotSign = util_1.promisify(crypto.sign);
12
12
  }
13
13
  else {
14
14
  oneShotSign = crypto.sign;
15
15
  }
16
16
  const sign = async (alg, key, data) => {
17
- const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'sign');
17
+ const keyObject = get_sign_verify_key_js_1.default(alg, key, 'sign');
18
18
  if (alg.startsWith('HS')) {
19
19
  const bitlen = parseInt(alg.substr(-3), 10);
20
20
  if (!keyObject.symmetricKeySize || keyObject.symmetricKeySize << 3 < bitlen) {
21
21
  throw new TypeError(`${alg} requires symmetric keys to be ${bitlen} bits or larger`);
22
22
  }
23
- const hmac = crypto.createHmac((0, hmac_digest_js_1.default)(alg), keyObject);
23
+ const hmac = crypto.createHmac(hmac_digest_js_1.default(alg), keyObject);
24
24
  hmac.update(data);
25
25
  return hmac.digest();
26
26
  }
27
- return oneShotSign((0, dsa_digest_js_1.default)(alg), data, (0, node_key_js_1.default)(alg, keyObject));
27
+ return oneShotSign(dsa_digest_js_1.default(alg), data, node_key_js_1.default(alg, keyObject));
28
28
  };
29
29
  exports.default = sign;
@@ -13,15 +13,15 @@ const [major, minor] = process.version
13
13
  const oneShotCallbackSupported = major >= 16 || (major === 15 && minor >= 13);
14
14
  let oneShotVerify;
15
15
  if (crypto.verify.length > 4 && oneShotCallbackSupported) {
16
- oneShotVerify = (0, util_1.promisify)(crypto.verify);
16
+ oneShotVerify = util_1.promisify(crypto.verify);
17
17
  }
18
18
  else {
19
19
  oneShotVerify = crypto.verify;
20
20
  }
21
21
  const verify = async (alg, key, signature, data) => {
22
- const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'verify');
22
+ const keyObject = get_sign_verify_key_js_1.default(alg, key, 'verify');
23
23
  if (alg.startsWith('HS')) {
24
- const expected = await (0, sign_js_1.default)(alg, keyObject, data);
24
+ const expected = await sign_js_1.default(alg, keyObject, data);
25
25
  const actual = signature;
26
26
  try {
27
27
  return crypto.timingSafeEqual(actual, expected);
@@ -30,8 +30,8 @@ const verify = async (alg, key, signature, data) => {
30
30
  return false;
31
31
  }
32
32
  }
33
- const algorithm = (0, dsa_digest_js_1.default)(alg);
34
- const keyInput = (0, node_key_js_1.default)(alg, keyObject);
33
+ const algorithm = dsa_digest_js_1.default(alg);
34
+ const keyInput = node_key_js_1.default(alg, keyObject);
35
35
  try {
36
36
  return await oneShotVerify(algorithm, data, keyInput, signature);
37
37
  }
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deflate = exports.inflate = void 0;
4
4
  const util_1 = require("util");
5
5
  const zlib_1 = require("zlib");
6
- const inflateRaw = (0, util_1.promisify)(zlib_1.inflateRaw);
7
- const deflateRaw = (0, util_1.promisify)(zlib_1.deflateRaw);
6
+ const inflateRaw = util_1.promisify(zlib_1.inflateRaw);
7
+ const deflateRaw = util_1.promisify(zlib_1.deflateRaw);
8
8
  const inflate = (input) => inflateRaw(input);
9
9
  exports.inflate = inflate;
10
10
  const deflate = (input) => deflateRaw(input);
@@ -25,8 +25,8 @@ function decodeProtectedHeader(token) {
25
25
  if (typeof protectedB64u !== 'string' || !protectedB64u) {
26
26
  throw new Error();
27
27
  }
28
- const result = JSON.parse(buffer_utils_js_1.decoder.decode((0, base64url_js_1.decode)(protectedB64u)));
29
- if (!(0, is_object_js_1.default)(result)) {
28
+ const result = JSON.parse(buffer_utils_js_1.decoder.decode(base64url_js_1.decode(protectedB64u)));
29
+ if (!is_object_js_1.default(result)) {
30
30
  throw new Error();
31
31
  }
32
32
  return result;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateKeyPair = void 0;
4
4
  const generate_js_1 = require("../runtime/generate.js");
5
5
  async function generateKeyPair(alg, options) {
6
- return (0, generate_js_1.generateKeyPair)(alg, options);
6
+ return generate_js_1.generateKeyPair(alg, options);
7
7
  }
8
8
  exports.generateKeyPair = generateKeyPair;
9
9
  exports.default = generateKeyPair;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateSecret = void 0;
4
4
  const generate_js_1 = require("../runtime/generate.js");
5
5
  async function generateSecret(alg, options) {
6
- return (0, generate_js_1.generateSecret)(alg, options);
6
+ return generate_js_1.generateSecret(alg, options);
7
7
  }
8
8
  exports.generateSecret = generateSecret;
9
9
  exports.default = generateSecret;
@@ -95,10 +95,10 @@ async function flattenedDecrypt(jwe, key, options) {
95
95
  }
96
96
  let cek;
97
97
  try {
98
- cek = await decryptKeyManagement(alg, key, encryptedKey, joseHeader);
98
+ cek = await decryptKeyManagement(alg, key, encryptedKey, joseHeader, options);
99
99
  }
100
100
  catch (err) {
101
- if (err instanceof TypeError) {
101
+ if (err instanceof TypeError || err instanceof JWEInvalid || err instanceof JOSENotSupported) {
102
102
  throw err;
103
103
  }
104
104
  cek = generateCek(enc);
@@ -9,7 +9,7 @@ import { bitLengths as cekLengths } from '../lib/cek.js';
9
9
  import { importJWK } from '../key/import.js';
10
10
  import checkKeyType from './check_key_type.js';
11
11
  import isObject from './is_object.js';
12
- async function decryptKeyManagement(alg, key, encryptedKey, joseHeader) {
12
+ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {
13
13
  checkKeyType(alg, key, 'decrypt');
14
14
  switch (alg) {
15
15
  case 'dir': {
@@ -63,6 +63,9 @@ async function decryptKeyManagement(alg, key, encryptedKey, joseHeader) {
63
63
  throw new JWEInvalid('JWE Encrypted Key missing');
64
64
  if (typeof joseHeader.p2c !== 'number')
65
65
  throw new JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);
66
+ const p2cLimit = (options === null || options === void 0 ? void 0 : options.maxPBES2Count) || 10000;
67
+ if (joseHeader.p2c > p2cLimit)
68
+ throw new JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);
66
69
  if (typeof joseHeader.p2s !== 'string')
67
70
  throw new JWEInvalid(`JOSE Header "p2s" (PBES2 Salt) missing or invalid`);
68
71
  return pbes2Kw(alg, key, encryptedKey, joseHeader.p2c, base64url(joseHeader.p2s));
@@ -199,6 +199,7 @@ export interface DecryptOptions extends CritOption {
199
199
  keyManagementAlgorithms?: string[]
200
200
  contentEncryptionAlgorithms?: string[]
201
201
  inflateRaw?: InflateFunction
202
+ maxPBES2Count?: number
202
203
  }
203
204
  export interface EncryptOptions extends CritOption {
204
205
  deflateRaw?: DeflateFunction
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jose",
3
- "version": "3.20.3",
3
+ "version": "3.20.4",
4
4
  "description": "Universal 'JSON Web Almost Everything' - JWA, JWS, JWE, JWT, JWK with no dependencies",
5
5
  "keywords": [
6
6
  "browser",