@@ -600,52 +600,67 @@ async function importKey(
600
600
} ) ;
601
601
602
602
algorithm = normalizeAlgorithm ( algorithm , 'importKey' ) ;
603
+ let result ;
603
604
switch ( algorithm . name ) {
604
605
case 'RSASSA-PKCS1-v1_5' :
605
606
// Fall through
606
607
case 'RSA-PSS' :
607
608
// Fall through
608
609
case 'RSA-OAEP' :
609
- return require ( 'internal/crypto/rsa' )
610
+ result = await require ( 'internal/crypto/rsa' )
610
611
. rsaImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
612
+ break ;
611
613
case 'ECDSA' :
612
614
// Fall through
613
615
case 'ECDH' :
614
- return require ( 'internal/crypto/ec' )
616
+ result = await require ( 'internal/crypto/ec' )
615
617
. ecImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
618
+ break ;
616
619
case 'Ed25519' :
617
620
// Fall through
618
621
case 'Ed448' :
619
622
// Fall through
620
623
case 'X25519' :
621
624
// Fall through
622
625
case 'X448' :
623
- return require ( 'internal/crypto/cfrg' )
626
+ result = await require ( 'internal/crypto/cfrg' )
624
627
. cfrgImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
628
+ break ;
625
629
case 'HMAC' :
626
- return require ( 'internal/crypto/mac' )
630
+ result = await require ( 'internal/crypto/mac' )
627
631
. hmacImportKey ( format , keyData , algorithm , extractable , keyUsages ) ;
632
+ break ;
628
633
case 'AES-CTR' :
629
634
// Fall through
630
635
case 'AES-CBC' :
631
636
// Fall through
632
637
case 'AES-GCM' :
633
638
// Fall through
634
639
case 'AES-KW' :
635
- return require ( 'internal/crypto/aes' )
640
+ result = await require ( 'internal/crypto/aes' )
636
641
. aesImportKey ( algorithm , format , keyData , extractable , keyUsages ) ;
642
+ break ;
637
643
case 'HKDF' :
638
644
// Fall through
639
645
case 'PBKDF2' :
640
- return importGenericSecretKey (
646
+ result = await importGenericSecretKey (
641
647
algorithm ,
642
648
format ,
643
649
keyData ,
644
650
extractable ,
645
651
keyUsages ) ;
652
+ break ;
653
+ default :
654
+ throw lazyDOMException ( 'Unrecognized algorithm name' , 'NotSupportedError' ) ;
646
655
}
647
656
648
- throw lazyDOMException ( 'Unrecognized algorithm name' , 'NotSupportedError' ) ;
657
+ if ( ( result . type === 'secret' || result . type === 'private' ) && result . usages . length === 0 ) {
658
+ throw lazyDOMException (
659
+ `Usages cannot be empty when importing a ${ result . type } key.` ,
660
+ 'SyntaxError' ) ;
661
+ }
662
+
663
+ return result ;
649
664
}
650
665
651
666
// subtle.wrapKey() is essentially a subtle.exportKey() followed
0 commit comments