@@ -54,28 +54,18 @@ const {
5454
5555const generateKeyPair = promisify ( _generateKeyPair ) ;
5656
57- function verifyAcceptableEcKeyUse ( name , type , usages ) {
57+ function verifyAcceptableEcKeyUse ( name , isPublic , usages ) {
5858 let checkSet ;
5959 switch ( name ) {
6060 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' ] ;
6962 break ;
7063 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' ) ;
7969 }
8070 if ( hasAnyNotIn ( usages , checkSet ) ) {
8171 throw lazyDOMException (
@@ -186,7 +176,7 @@ async function ecImportKey(
186176 const usagesSet = new SafeSet ( keyUsages ) ;
187177 switch ( format ) {
188178 case 'spki' : {
189- verifyAcceptableEcKeyUse ( name , 'public' , usagesSet ) ;
179+ verifyAcceptableEcKeyUse ( name , true , usagesSet ) ;
190180 try {
191181 keyObject = createPublicKey ( {
192182 key : keyData ,
@@ -200,7 +190,7 @@ async function ecImportKey(
200190 break ;
201191 }
202192 case 'pkcs8' : {
203- verifyAcceptableEcKeyUse ( name , 'private' , usagesSet ) ;
193+ verifyAcceptableEcKeyUse ( name , false , usagesSet ) ;
204194 try {
205195 keyObject = createPrivateKey ( {
206196 key : keyData ,
@@ -221,11 +211,10 @@ async function ecImportKey(
221211 if ( keyData . crv !== namedCurve )
222212 throw lazyDOMException ( 'Named curve mismatch' , 'DataError' ) ;
223213
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 ) ;
229218
230219 if ( usagesSet . size > 0 && keyData . use !== undefined ) {
231220 if ( algorithm . name === 'ECDSA' && keyData . use !== 'sig' )
@@ -265,7 +254,7 @@ async function ecImportKey(
265254 break ;
266255 }
267256 case 'raw' : {
268- verifyAcceptableEcKeyUse ( name , 'public' , usagesSet ) ;
257+ verifyAcceptableEcKeyUse ( name , true , usagesSet ) ;
269258 keyObject = createECPublicKeyRaw ( namedCurve , keyData ) ;
270259 break ;
271260 }
0 commit comments