@@ -605,52 +605,67 @@ async function importKey(
605605 } ) ;
606606
607607 algorithm = normalizeAlgorithm ( algorithm , 'importKey' ) ;
608+ let result ;
608609 switch ( algorithm . name ) {
609610 case 'RSASSA-PKCS1-v1_5' :
610611 // Fall through
611612 case 'RSA-PSS' :
612613 // Fall through
613614 case 'RSA-OAEP' :
614- return require ( 'internal/crypto/rsa' )
615+ result = await require ( 'internal/crypto/rsa' )
615616 . rsaImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
617+ break ;
616618 case 'ECDSA' :
617619 // Fall through
618620 case 'ECDH' :
619- return require ( 'internal/crypto/ec' )
621+ result = await require ( 'internal/crypto/ec' )
620622 . ecImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
623+ break ;
621624 case 'Ed25519' :
622625 // Fall through
623626 case 'Ed448' :
624627 // Fall through
625628 case 'X25519' :
626629 // Fall through
627630 case 'X448' :
628- return require ( 'internal/crypto/cfrg' )
631+ result = await require ( 'internal/crypto/cfrg' )
629632 . cfrgImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
633+ break ;
630634 case 'HMAC' :
631- return require ( 'internal/crypto/mac' )
635+ result = await require ( 'internal/crypto/mac' )
632636 . hmacImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
637+ break ;
633638 case 'AES-CTR' :
634639 // Fall through
635640 case 'AES-CBC' :
636641 // Fall through
637642 case 'AES-GCM' :
638643 // Fall through
639644 case 'AES-KW' :
640- return require ( 'internal/crypto/aes' )
645+ result = await require ( 'internal/crypto/aes' )
641646 . aesImportKey ( algorithm , format , keyData , extractable , keyUsages ) ;
647+ break ;
642648 case 'HKDF' :
643649 // Fall through
644650 case 'PBKDF2' :
645- return importGenericSecretKey (
651+ result = await importGenericSecretKey (
646652 algorithm ,
647653 format ,
648654 keyData ,
649655 extractable ,
650656 keyUsages ) ;
657+ break ;
658+ default :
659+ throw lazyDOMException ( 'Unrecognized algorithm name' , 'NotSupportedError' ) ;
651660 }
652661
653- throw lazyDOMException ( 'Unrecognized algorithm name' , 'NotSupportedError' ) ;
662+ if ( ( result . type === 'secret' || result . type === 'private' ) && result . usages . length === 0 ) {
663+ throw lazyDOMException (
664+ `Usages cannot be empty when importing a ${ result . type } key.` ,
665+ 'SyntaxError' ) ;
666+ }
667+
668+ return result ;
654669}
655670
656671// subtle.wrapKey() is essentially a subtle.exportKey() followed
0 commit comments