@@ -54,28 +54,18 @@ const {
54
54
55
55
const generateKeyPair = promisify ( _generateKeyPair ) ;
56
56
57
- function verifyAcceptableEcKeyUse ( name , type , usages ) {
57
+ function verifyAcceptableEcKeyUse ( name , isPublic , usages ) {
58
58
let checkSet ;
59
59
switch ( name ) {
60
60
case 'ECDH' :
61
- switch ( type ) {
62
- case 'private' :
63
- checkSet = [ 'deriveKey' , 'deriveBits' ] ;
64
- break ;
65
- case 'public' :
66
- checkSet = [ ] ;
67
- break ;
68
- }
61
+ checkSet = isPublic ? [ ] : [ 'deriveKey' , 'deriveBits' ] ;
69
62
break ;
70
63
case 'ECDSA' :
71
- switch ( type ) {
72
- case 'private' :
73
- checkSet = [ 'sign' ] ;
74
- break ;
75
- case 'public' :
76
- checkSet = [ 'verify' ] ;
77
- break ;
78
- }
64
+ checkSet = isPublic ? [ 'verify' ] : [ 'sign' ] ;
65
+ break ;
66
+ default :
67
+ throw lazyDOMException (
68
+ 'The algorithm is not supported' , 'NotSupportedError' ) ;
79
69
}
80
70
if ( hasAnyNotIn ( usages , checkSet ) ) {
81
71
throw lazyDOMException (
@@ -186,7 +176,7 @@ async function ecImportKey(
186
176
const usagesSet = new SafeSet ( keyUsages ) ;
187
177
switch ( format ) {
188
178
case 'spki' : {
189
- verifyAcceptableEcKeyUse ( name , 'public' , usagesSet ) ;
179
+ verifyAcceptableEcKeyUse ( name , true , usagesSet ) ;
190
180
try {
191
181
keyObject = createPublicKey ( {
192
182
key : keyData ,
@@ -200,7 +190,7 @@ async function ecImportKey(
200
190
break ;
201
191
}
202
192
case 'pkcs8' : {
203
- verifyAcceptableEcKeyUse ( name , 'private' , usagesSet ) ;
193
+ verifyAcceptableEcKeyUse ( name , false , usagesSet ) ;
204
194
try {
205
195
keyObject = createPrivateKey ( {
206
196
key : keyData ,
@@ -221,11 +211,10 @@ async function ecImportKey(
221
211
if ( keyData . crv !== namedCurve )
222
212
throw lazyDOMException ( 'Named curve mismatch' , 'DataError' ) ;
223
213
224
- if ( keyData . d !== undefined ) {
225
- verifyAcceptableEcKeyUse ( name , 'private' , usagesSet ) ;
226
- } else {
227
- verifyAcceptableEcKeyUse ( name , 'public' , usagesSet ) ;
228
- }
214
+ verifyAcceptableEcKeyUse (
215
+ name ,
216
+ keyData . d === undefined ,
217
+ usagesSet ) ;
229
218
230
219
if ( usagesSet . size > 0 && keyData . use !== undefined ) {
231
220
if ( algorithm . name === 'ECDSA' && keyData . use !== 'sig' )
@@ -265,7 +254,7 @@ async function ecImportKey(
265
254
break ;
266
255
}
267
256
case 'raw' : {
268
- verifyAcceptableEcKeyUse ( name , 'public' , usagesSet ) ;
257
+ verifyAcceptableEcKeyUse ( name , true , usagesSet ) ;
269
258
keyObject = createECPublicKeyRaw ( namedCurve , keyData ) ;
270
259
break ;
271
260
}
0 commit comments