jose 4.11.2 → 4.11.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.
package/README.md CHANGED
@@ -38,7 +38,7 @@ const jose = require('jose')
38
38
 
39
39
  **`example`** Deno import
40
40
  ```js
41
- import * as jose from 'https://deno.land/x/jose@v4.11.2/index.ts'
41
+ import * as jose from 'https://deno.land/x/jose@v4.11.4/index.ts'
42
42
  ```
43
43
 
44
44
  - JSON Web Tokens (JWT)
@@ -71,13 +71,13 @@ export function checkSigCryptoKey(key, alg, ...usages) {
71
71
  throw unusable(`SHA-${expected}`, 'algorithm.hash');
72
72
  break;
73
73
  }
74
- case isCloudflareWorkers() && 'EdDSA': {
75
- if (!isAlgorithm(key.algorithm, 'NODE-ED25519'))
76
- throw unusable('NODE-ED25519');
77
- break;
78
- }
79
74
  case 'EdDSA': {
80
75
  if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
76
+ if (isCloudflareWorkers()) {
77
+ if (isAlgorithm(key.algorithm, 'NODE-ED25519'))
78
+ break;
79
+ throw unusable('Ed25519, Ed448, or NODE-ED25519');
80
+ }
81
81
  throw unusable('Ed25519 or Ed448');
82
82
  }
83
83
  break;
@@ -57,7 +57,7 @@ const getNamedCurve = (keyData) => {
57
57
  }
58
58
  };
59
59
  const genericImport = async (replace, keyFormat, pem, alg, options) => {
60
- var _a;
60
+ var _a, _b;
61
61
  let algorithm;
62
62
  let keyUsages;
63
63
  const keyData = new Uint8Array(atob(pem.replace(replace, ''))
@@ -108,12 +108,6 @@ const genericImport = async (replace, keyFormat, pem, alg, options) => {
108
108
  keyUsages = isPublic ? [] : ['deriveBits'];
109
109
  break;
110
110
  }
111
- case isCloudflareWorkers() && 'EdDSA': {
112
- const namedCurve = getNamedCurve(keyData).toUpperCase();
113
- algorithm = { name: `NODE-${namedCurve}`, namedCurve: `NODE-${namedCurve}` };
114
- keyUsages = isPublic ? ['verify'] : ['sign'];
115
- break;
116
- }
117
111
  case 'EdDSA':
118
112
  algorithm = { name: getNamedCurve(keyData) };
119
113
  keyUsages = isPublic ? ['verify'] : ['sign'];
@@ -121,7 +115,18 @@ const genericImport = async (replace, keyFormat, pem, alg, options) => {
121
115
  default:
122
116
  throw new JOSENotSupported('Invalid or unsupported "alg" (Algorithm) value');
123
117
  }
124
- return crypto.subtle.importKey(keyFormat, keyData, algorithm, (_a = options === null || options === void 0 ? void 0 : options.extractable) !== null && _a !== void 0 ? _a : false, keyUsages);
118
+ try {
119
+ return await crypto.subtle.importKey(keyFormat, keyData, algorithm, (_a = options === null || options === void 0 ? void 0 : options.extractable) !== null && _a !== void 0 ? _a : false, keyUsages);
120
+ }
121
+ catch (err) {
122
+ if (algorithm.name === 'Ed25519' &&
123
+ (err === null || err === void 0 ? void 0 : err.name) === 'NotSupportedError' &&
124
+ isCloudflareWorkers()) {
125
+ algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
126
+ return await crypto.subtle.importKey(keyFormat, keyData, algorithm, (_b = options === null || options === void 0 ? void 0 : options.extractable) !== null && _b !== void 0 ? _b : false, keyUsages);
127
+ }
128
+ throw err;
129
+ }
125
130
  };
126
131
  export const fromPKCS8 = (pem, alg, options) => {
127
132
  return genericImport(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g, 'pkcs8', pem, alg, options);
@@ -51,7 +51,7 @@ function getModulusLengthOption(options) {
51
51
  return modulusLength;
52
52
  }
53
53
  export async function generateKeyPair(alg, options) {
54
- var _a, _b, _c;
54
+ var _a, _b, _c, _d;
55
55
  let algorithm;
56
56
  let keyUsages;
57
57
  switch (alg) {
@@ -101,17 +101,6 @@ export async function generateKeyPair(alg, options) {
101
101
  algorithm = { name: 'ECDSA', namedCurve: 'P-521' };
102
102
  keyUsages = ['sign', 'verify'];
103
103
  break;
104
- case isCloudflareWorkers() && 'EdDSA':
105
- switch (options === null || options === void 0 ? void 0 : options.crv) {
106
- case undefined:
107
- case 'Ed25519':
108
- algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
109
- keyUsages = ['sign', 'verify'];
110
- break;
111
- default:
112
- throw new JOSENotSupported('Invalid or unsupported crv option provided');
113
- }
114
- break;
115
104
  case 'EdDSA':
116
105
  keyUsages = ['sign', 'verify'];
117
106
  const crv = (_a = options === null || options === void 0 ? void 0 : options.crv) !== null && _a !== void 0 ? _a : 'Ed25519';
@@ -149,5 +138,16 @@ export async function generateKeyPair(alg, options) {
149
138
  default:
150
139
  throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
151
140
  }
152
- return (crypto.subtle.generateKey(algorithm, (_c = options === null || options === void 0 ? void 0 : options.extractable) !== null && _c !== void 0 ? _c : false, keyUsages));
141
+ try {
142
+ return (await crypto.subtle.generateKey(algorithm, (_c = options === null || options === void 0 ? void 0 : options.extractable) !== null && _c !== void 0 ? _c : false, keyUsages));
143
+ }
144
+ catch (err) {
145
+ if (algorithm.name === 'Ed25519' &&
146
+ (err === null || err === void 0 ? void 0 : err.name) === 'NotSupportedError' &&
147
+ isCloudflareWorkers()) {
148
+ algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
149
+ return (await crypto.subtle.generateKey(algorithm, (_d = options === null || options === void 0 ? void 0 : options.extractable) !== null && _d !== void 0 ? _d : false, keyUsages));
150
+ }
151
+ throw err;
152
+ }
153
153
  }
@@ -99,19 +99,6 @@ function subtleMapping(jwk) {
99
99
  }
100
100
  break;
101
101
  }
102
- case isCloudflareWorkers() && 'OKP':
103
- if (jwk.alg !== 'EdDSA') {
104
- throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
105
- }
106
- switch (jwk.crv) {
107
- case 'Ed25519':
108
- algorithm = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
109
- keyUsages = jwk.d ? ['sign'] : ['verify'];
110
- break;
111
- default:
112
- throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
113
- }
114
- break;
115
102
  case 'OKP': {
116
103
  switch (jwk.alg) {
117
104
  case 'EdDSA':
@@ -149,6 +136,17 @@ const parse = async (jwk) => {
149
136
  const keyData = { ...jwk };
150
137
  delete keyData.alg;
151
138
  delete keyData.use;
152
- return crypto.subtle.importKey('jwk', keyData, ...rest);
139
+ try {
140
+ return await crypto.subtle.importKey('jwk', keyData, ...rest);
141
+ }
142
+ catch (err) {
143
+ if (algorithm.name === 'Ed25519' &&
144
+ (err === null || err === void 0 ? void 0 : err.name) === 'NotSupportedError' &&
145
+ isCloudflareWorkers()) {
146
+ rest[0] = { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
147
+ return await crypto.subtle.importKey('jwk', keyData, ...rest);
148
+ }
149
+ throw err;
150
+ }
153
151
  };
154
152
  export default parse;
@@ -19,10 +19,10 @@ export default function subtleDsa(alg, algorithm) {
19
19
  case 'ES384':
20
20
  case 'ES512':
21
21
  return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };
22
- case isCloudflareWorkers() && 'EdDSA':
23
- const { namedCurve } = algorithm;
24
- return { name: namedCurve, namedCurve };
25
22
  case 'EdDSA':
23
+ if (isCloudflareWorkers() && algorithm.name === 'NODE-ED25519') {
24
+ return { name: 'NODE-ED25519', namedCurve: 'NODE-ED25519' };
25
+ }
26
26
  return { name: algorithm.name };
27
27
  default:
28
28
  throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
@@ -74,13 +74,13 @@ function checkSigCryptoKey(key, alg, ...usages) {
74
74
  throw unusable(`SHA-${expected}`, 'algorithm.hash');
75
75
  break;
76
76
  }
77
- case (0, env_js_1.isCloudflareWorkers)() && 'EdDSA': {
78
- if (!isAlgorithm(key.algorithm, 'NODE-ED25519'))
79
- throw unusable('NODE-ED25519');
80
- break;
81
- }
82
77
  case 'EdDSA': {
83
78
  if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
79
+ if ((0, env_js_1.isCloudflareWorkers)()) {
80
+ if (isAlgorithm(key.algorithm, 'NODE-ED25519'))
81
+ break;
82
+ throw unusable('Ed25519, Ed448, or NODE-ED25519');
83
+ }
84
84
  throw unusable('Ed25519 or Ed448');
85
85
  }
86
86
  break;
@@ -71,13 +71,13 @@ export function checkSigCryptoKey(key, alg, ...usages) {
71
71
  throw unusable(`SHA-${expected}`, 'algorithm.hash');
72
72
  break;
73
73
  }
74
- case isCloudflareWorkers() && 'EdDSA': {
75
- if (!isAlgorithm(key.algorithm, 'NODE-ED25519'))
76
- throw unusable('NODE-ED25519');
77
- break;
78
- }
79
74
  case 'EdDSA': {
80
75
  if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
76
+ if (isCloudflareWorkers()) {
77
+ if (isAlgorithm(key.algorithm, 'NODE-ED25519'))
78
+ break;
79
+ throw unusable('Ed25519, Ed448, or NODE-ED25519');
80
+ }
81
81
  throw unusable('Ed25519 or Ed448');
82
82
  }
83
83
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jose",
3
- "version": "4.11.2",
3
+ "version": "4.11.4",
4
4
  "description": "'JSON Web Almost Everything' - JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes",
5
5
  "keywords": [
6
6
  "browser",
@@ -83,7 +83,8 @@
83
83
  "!dist/**/*.min.js",
84
84
  "!dist/node/webcrypto/**/*",
85
85
  "!dist/types/runtime/*",
86
- "!dist/types/lib/*"
86
+ "!dist/types/lib/*",
87
+ "!dist/deno/**/*"
87
88
  ],
88
89
  "deno": "./dist/browser/index.js"
89
90
  }