@@ -400,15 +400,81 @@ async function testImportRaw({ name, publicUsages }, namedCurve) {
400400 [ 'ECDSA' , [ 'verify' ] , [ 'sign' ] ] ,
401401 [ 'ECDH' , [ ] , [ 'deriveBits' , 'deriveBits' ] ] ,
402402 ] ) {
403- assert . rejects ( subtle . importKey (
404- 'spki' ,
405- rsaPublic . export ( { format : 'der' , type : 'spki' } ) ,
406- { name, hash : 'SHA-256' , namedCurve : 'P-256' } ,
407- true , publicUsages ) , { message : / I n v a l i d k e y t y p e / } ) ;
408- assert . rejects ( subtle . importKey (
409- 'pkcs8' ,
410- rsaPrivate . export ( { format : 'der' , type : 'pkcs8' } ) ,
411- { name, hash : 'SHA-256' , namedCurve : 'P-256' } ,
412- true , privateUsages ) , { message : / I n v a l i d k e y t y p e / } ) ;
403+ assert . rejects (
404+ subtle . importKey (
405+ 'spki' ,
406+ rsaPublic . export ( { format : 'der' , type : 'spki' } ) ,
407+ { name, hash : 'SHA-256' , namedCurve : 'P-256' } ,
408+ true , publicUsages ) , { message : / I n v a l i d k e y t y p e / } ,
409+ ) . then ( common . mustCall ( ) ) ;
410+ assert . rejects (
411+ subtle . importKey (
412+ 'pkcs8' ,
413+ rsaPrivate . export ( { format : 'der' , type : 'pkcs8' } ) ,
414+ { name, hash : 'SHA-256' , namedCurve : 'P-256' } ,
415+ true , privateUsages ) , { message : / I n v a l i d k e y t y p e / } ,
416+ ) . then ( common . mustCall ( ) ) ;
417+ }
418+ }
419+
420+ // Bad private keys
421+ {
422+ for ( const { namedCurve, key : pkcs8 } of [
423+ // The private key is exactly equal to the order, and the public key is
424+ // private key * order.
425+ {
426+ namedCurve : 'P-256' ,
427+ key : Buffer . from (
428+ '3066020100301306072a8648ce3d020106082a8648ce3d030107044c304a0201' +
429+ '010420ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc' +
430+ '632551a12303210000ffffff00000000ffffffffffffffffbce6faada7179e84' +
431+ 'f3b9cac2fc632551' , 'hex' ) ,
432+ } ,
433+ // The private key is exactly equal to the order, and the public key is
434+ // omitted.
435+ {
436+ namedCurve : 'P-256' ,
437+ key : Buffer . from (
438+ '3041020100301306072a8648ce3d020106082a8648ce3d030107042730250201' +
439+ '010420ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc' +
440+ '632551' , 'hex' ) ,
441+ } ,
442+ // The private key is exactly equal to the order + 11, and the public key is
443+ // private key * order.
444+ {
445+ namedCurve : 'P-521' ,
446+ key : Buffer . from (
447+ '3081ee020100301006072a8648ce3d020106052b810400230481d63081d30201' +
448+ '01044201ffffffffffffffffffffffffffffffffffffffffffffffffffffffff' +
449+ 'fffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb7' +
450+ '1e91386414a181890381860004008a75841259fdedff546f1a39573b4315cfed' +
451+ '5dc7ed7c17849543ef2c54f2991652f3dbc5332663da1bd19b1aebe319108501' +
452+ '5c024fa4c9a902ecc0e02dda0cdb9a0096fb303fcbba2129849d0ca877054fb2' +
453+ '293add566210bd0493ed2e95d4e0b9b82b1bc8a90e8b42a4ab3892331914a953' +
454+ '36dcac80e3f4819b5d58874f92ce48c808' , 'hex' ) ,
455+ } ,
456+ // The private key is exactly equal to the order + 11, and the public key is
457+ // omitted.
458+ {
459+ namedCurve : 'P-521' ,
460+ key : Buffer . from (
461+ '3060020100301006072a8648ce3d020106052b81040023044930470201010442' +
462+ '01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' +
463+ 'fffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138' +
464+ '6414' , 'hex' ) ,
465+ } ,
466+ ] ) {
467+ for ( const [ name , privateUsages ] of [
468+ [ 'ECDSA' , [ 'sign' ] ] ,
469+ [ 'ECDH' , [ 'deriveBits' , 'deriveBits' ] ] ,
470+ ] ) {
471+ assert . rejects (
472+ subtle . importKey (
473+ 'pkcs8' ,
474+ pkcs8 ,
475+ { name, hash : 'SHA-256' , namedCurve } ,
476+ true , privateUsages ) , { name : 'DataError' , message : / I n v a l i d k e y D a t a / } ,
477+ ) . then ( common . mustCall ( ) ) ;
478+ }
413479 }
414480}
0 commit comments