From 455f43e656d32172e35fa7743603f3dc1a717eee Mon Sep 17 00:00:00 2001 From: Filip Skokan Date: Mon, 30 Aug 2021 11:59:04 +0200 Subject: [PATCH] chore: update dev deps --- package.json | 12 ++++++------ src/runtime/browser/ecdhes.ts | 14 ++++++-------- src/runtime/browser/generate.ts | 2 +- src/runtime/browser/jwk_to_key.ts | 30 +++++++++++++++++++----------- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index fbd0e839..a4129f96 100644 --- a/package.json +++ b/package.json @@ -365,24 +365,24 @@ "prettier": "npx prettier --loglevel silent --write ./test ./src ./tools ./test-browser ./test-deno" }, "devDependencies": { - "@types/node": "^16.6.2", + "@types/node": "^16.7.6", "ava": "^3.15.0", "bowser": "^2.11.0", "c8": "^7.8.0", - "esbuild": "^0.12.21", + "esbuild": "^0.12.24", "glob": "^7.1.7", "karma": "^6.3.4", "karma-browserstack-launcher": "1.6.0", "karma-qunit": "^4.1.2", "karma-summary-reporter": "^2.0.2", - "nock": "^13.1.1", + "nock": "^13.1.3", "npm-run-all": "^4.1.5", "prettier": "^2.3.2", "qunit": "^2.16.0", - "tar": "^6.1.10", + "tar": "^6.1.11", "timekeeper": "^2.2.0", - "typedoc": "^0.21.6", + "typedoc": "^0.21.9", "typedoc-plugin-markdown": "^3.10.4", - "typescript": "^4.3.5" + "typescript": "^4.4.2" } } diff --git a/src/runtime/browser/ecdhes.ts b/src/runtime/browser/ecdhes.ts index 3abf0e10..30cf2c5f 100644 --- a/src/runtime/browser/ecdhes.ts +++ b/src/runtime/browser/ecdhes.ts @@ -56,14 +56,12 @@ export const generateEpk: GenerateEpkFunction = async (key: unknown) => { throw new TypeError(invalidKeyInput(key, 'CryptoKey')) } - return ( - await crypto.subtle.generateKey( - // @deno-expect-error - { name: 'ECDH', namedCurve: (key.algorithm).namedCurve }, - true, - ['deriveBits'], - ) - ).privateKey + return (<{ publicKey: CryptoKey; privateKey: CryptoKey }>await crypto.subtle.generateKey( + // @deno-expect-error + { name: 'ECDH', namedCurve: (key.algorithm).namedCurve }, + true, + ['deriveBits'], + )).privateKey } export const ecdhAllowed: EcdhAllowedFunction = (key: unknown) => { diff --git a/src/runtime/browser/generate.ts b/src/runtime/browser/generate.ts index 3f91782a..3d9ed05f 100644 --- a/src/runtime/browser/generate.ts +++ b/src/runtime/browser/generate.ts @@ -120,7 +120,7 @@ export async function generateKeyPair(alg: string, options?: GenerateKeyPairOpti throw new JOSENotSupported('unsupported or invalid JWK "alg" (Algorithm) Parameter value') } - return >( + return >( crypto.subtle.generateKey(algorithm, options?.extractable ?? false, keyUsages) ) } diff --git a/src/runtime/browser/jwk_to_key.ts b/src/runtime/browser/jwk_to_key.ts index 94ede6d0..915aa0c3 100644 --- a/src/runtime/browser/jwk_to_key.ts +++ b/src/runtime/browser/jwk_to_key.ts @@ -110,20 +110,28 @@ function subtleMapping(jwk: JWK): { const parse: JWKParseFunction = async (jwk: JWK): Promise => { const { algorithm, keyUsages } = subtleMapping(jwk) - let format = 'jwk' - let keyData: JWK | Uint8Array = { ...jwk } - delete keyData.alg - if (algorithm.name === 'PBKDF2') { - format = 'raw' - keyData = base64url(jwk.k!) - } - return crypto.subtle.importKey( - // @deno-expect-error - format, - keyData, + // @deno-expect-error + const rest: [RsaHashedImportParams | EcKeyAlgorithm | Algorithm, boolean, KeyUsage[]] = [ algorithm, jwk.ext ?? false, jwk.key_ops ?? keyUsages, + ] + + if (algorithm.name === 'PBKDF2') { + return crypto.subtle.importKey( + 'raw', + base64url(jwk.k!), + ...rest, + ) + } + + const keyData: JWK = { ...jwk } + delete keyData.alg + return crypto.subtle.importKey( + // @deno-expect-error + 'jwk', + keyData, + ...rest, ) } export default parse