@@ -605,52 +605,67 @@ async function importKey(
605
605
} ) ;
606
606
607
607
algorithm = normalizeAlgorithm ( algorithm , 'importKey' ) ;
608
+ let result ;
608
609
switch ( algorithm . name ) {
609
610
case 'RSASSA-PKCS1-v1_5' :
610
611
// Fall through
611
612
case 'RSA-PSS' :
612
613
// Fall through
613
614
case 'RSA-OAEP' :
614
- return require ( 'internal/crypto/rsa' )
615
+ result = await require ( 'internal/crypto/rsa' )
615
616
. rsaImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
617
+ break ;
616
618
case 'ECDSA' :
617
619
// Fall through
618
620
case 'ECDH' :
619
- return require ( 'internal/crypto/ec' )
621
+ result = await require ( 'internal/crypto/ec' )
620
622
. ecImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
623
+ break ;
621
624
case 'Ed25519' :
622
625
// Fall through
623
626
case 'Ed448' :
624
627
// Fall through
625
628
case 'X25519' :
626
629
// Fall through
627
630
case 'X448' :
628
- return require ( 'internal/crypto/cfrg' )
631
+ result = await require ( 'internal/crypto/cfrg' )
629
632
. cfrgImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
633
+ break ;
630
634
case 'HMAC' :
631
- return require ( 'internal/crypto/mac' )
635
+ result = await require ( 'internal/crypto/mac' )
632
636
. hmacImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
637
+ break ;
633
638
case 'AES-CTR' :
634
639
// Fall through
635
640
case 'AES-CBC' :
636
641
// Fall through
637
642
case 'AES-GCM' :
638
643
// Fall through
639
644
case 'AES-KW' :
640
- return require ( 'internal/crypto/aes' )
645
+ result = await require ( 'internal/crypto/aes' )
641
646
. aesImportKey ( algorithm , format , keyData , extractable , keyUsages ) ;
647
+ break ;
642
648
case 'HKDF' :
643
649
// Fall through
644
650
case 'PBKDF2' :
645
- return importGenericSecretKey (
651
+ result = await importGenericSecretKey (
646
652
algorithm ,
647
653
format ,
648
654
keyData ,
649
655
extractable ,
650
656
keyUsages ) ;
657
+ break ;
658
+ default :
659
+ throw lazyDOMException ( 'Unrecognized algorithm name' , 'NotSupportedError' ) ;
651
660
}
652
661
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 ;
654
669
}
655
670
656
671
// subtle.wrapKey() is essentially a subtle.exportKey() followed
0 commit comments