| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -242,6 +242,8 @@ async function cfrgImportKey( | |||
| 242 | 242 | throw lazyDOMException('Invalid JWK keyData', 'DataError'); | |
| 243 | 243 | if (keyData.kty !== 'OKP') | |
| 244 | 244 | throw lazyDOMException('Invalid key type', 'DataError'); | |
| 245 | + if (keyData.crv !== name) | ||
| 246 | + throw lazyDOMException('Subtype mismatch', 'DataError'); | ||
| 245 | 247 | const isPublic = keyData.d === undefined; | |
| 246 | 248 | ||
| 247 | 249 | if (usagesSet.size > 0 && keyData.use !== undefined) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -195,11 +195,12 @@ async function ecImportKey( | |||
| 195 | 195 | break; | |
| 196 | 196 | } | |
| 197 | 197 | case 'jwk': { | |
| 198 | - let curve; | ||
| 199 | 198 | if (keyData == null || typeof keyData !== 'object') | |
| 200 | 199 | throw lazyDOMException('Invalid JWK keyData', 'DataError'); | |
| 201 | 200 | if (keyData.kty !== 'EC') | |
| 202 | 201 | throw lazyDOMException('Invalid key type', 'DataError'); | |
| 202 | + if (keyData.crv !== namedCurve) | ||
| 203 | + throw lazyDOMException('Named curve mismatch', 'DataError'); | ||
| 203 | 204 | ||
| 204 | 205 | if (keyData.d !== undefined) { | |
| 205 | 206 | verifyAcceptableEcKeyUse(name, 'private', usagesSet); | |
@@ -225,12 +226,13 @@ async function ecImportKey( | |||
| 225 | 226 | if (algorithm.name === 'ECDSA' && keyData.alg !== undefined) { | |
| 226 | 227 | if (typeof keyData.alg !== 'string') | |
| 227 | 228 | throw lazyDOMException('Invalid alg', 'DataError'); | |
| 229 | + let algNamedCurve; | ||
| 228 | 230 | switch (keyData.alg) { | |
| 229 | - case 'ES256': curve = 'P-256'; break; | ||
| 230 | - case 'ES384': curve = 'P-384'; break; | ||
| 231 | - case 'ES512': curve = 'P-521'; break; | ||
| 231 | + case 'ES256': algNamedCurve = 'P-256'; break; | ||
| 232 | + case 'ES384': algNamedCurve = 'P-384'; break; | ||
| 233 | + case 'ES512': algNamedCurve = 'P-521'; break; | ||
| 232 | 234 | } | |
| 233 | - if (curve !== namedCurve) | ||
| 235 | + if (algNamedCurve !== namedCurve) | ||
| 234 | 236 | throw lazyDOMException('Named curve mismatch', 'DataError'); | |
| 235 | 237 | } | |
| 236 | 238 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -259,6 +259,26 @@ async function testImportJwk({ name, publicUsages, privateUsages }, extractable) | |||
| 259 | 259 | message: /key is not extractable/ | |
| 260 | 260 | }); | |
| 261 | 261 | } | |
| 262 | + | ||
| 263 | + for (const crv of [undefined, name === 'Ed25519' ? 'Ed448' : 'Ed25519']) { | ||
| 264 | + await assert.rejects( | ||
| 265 | + subtle.importKey( | ||
| 266 | + 'jwk', | ||
| 267 | + { kty: jwk.kty, x: jwk.x, y: jwk.y, crv }, | ||
| 268 | + { name }, | ||
| 269 | + extractable, | ||
| 270 | + publicUsages), | ||
| 271 | + { message: /Subtype mismatch/ }); | ||
| 272 | + | ||
| 273 | + await assert.rejects( | ||
| 274 | + subtle.importKey( | ||
| 275 | + 'jwk', | ||
| 276 | + { kty: jwk.kty, d: jwk.d, x: jwk.x, y: jwk.y, crv }, | ||
| 277 | + { name }, | ||
| 278 | + extractable, | ||
| 279 | + publicUsages), | ||
| 280 | + { message: /Subtype mismatch/ }); | ||
| 281 | + } | ||
| 262 | 282 | } | |
| 263 | 283 | ||
| 264 | 284 | (async function() { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -260,6 +260,26 @@ async function testImportJwk( | |||
| 260 | 260 | message: /key is not extractable/ | |
| 261 | 261 | }); | |
| 262 | 262 | } | |
| 263 | + | ||
| 264 | + for (const crv of [undefined, namedCurve === 'P-256' ? 'P-384' : 'P-256']) { | ||
| 265 | + await assert.rejects( | ||
| 266 | + subtle.importKey( | ||
| 267 | + 'jwk', | ||
| 268 | + { kty: jwk.kty, x: jwk.x, y: jwk.y, crv }, | ||
| 269 | + { name, namedCurve }, | ||
| 270 | + extractable, | ||
| 271 | + publicUsages), | ||
| 272 | + { message: /Named curve mismatch/ }); | ||
| 273 | + | ||
| 274 | + await assert.rejects( | ||
| 275 | + subtle.importKey( | ||
| 276 | + 'jwk', | ||
| 277 | + { kty: jwk.kty, d: jwk.d, x: jwk.x, y: jwk.y, crv }, | ||
| 278 | + { name, namedCurve }, | ||
| 279 | + extractable, | ||
| 280 | + publicUsages), | ||
| 281 | + { message: /Named curve mismatch/ }); | ||
| 282 | + } | ||
| 263 | 283 | } | |
| 264 | 284 | ||
| 265 | 285 | (async function() { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments