@@ -11,7 +11,7 @@ function runTests(algorithmName) {
1111 [ 'spki' , 'jwk' , 'raw' ] . forEach ( function ( format ) {
1212 if ( format === "jwk" ) { // Not all fields used for public keys
1313 testFormat ( format , algorithm , jwkData , algorithmName , usages , extractable ) ;
14- // Test for https://github.com/WICG /webcrypto-secure-curves /pull/24
14+ // Test for https://github.com/w3c /webcrypto/pull/401
1515 if ( extractable ) {
1616 testJwkAlgBehaviours ( algorithm , jwkData . jwk , algorithmName , usages ) ;
1717 }
@@ -27,7 +27,7 @@ function runTests(algorithmName) {
2727 [ 'pkcs8' , 'jwk' ] . forEach ( function ( format ) {
2828 testFormat ( format , algorithm , data , algorithmName , usages , extractable ) ;
2929
30- // Test for https://github.com/WICG /webcrypto-secure-curves /pull/24
30+ // Test for https://github.com/w3c /webcrypto/pull/401
3131 if ( format === "jwk" && extractable ) {
3232 testJwkAlgBehaviours ( algorithm , data . jwk , algorithmName , usages ) ;
3333 }
@@ -67,27 +67,34 @@ function testFormat(format, algorithm, keyData, keySize, usages, extractable) {
6767 } ) ;
6868}
6969
70- // Test importKey/exportKey "alg" behaviours, alg is ignored upon import and alg is missing for Ed25519 and Ed448 JWK export
71- // https://github.com/WICG/webcrypto-secure-curves/pull/24
70+ // Test importKey/exportKey "alg" behaviours (https://github.com/w3c/webcrypto/pull/401)
71+ // - alg is ignored for ECDH import
72+ // - TODO: alg is checked to be the algorithm.name or EdDSA for Ed25519 and Ed448 import
73+ // - alg is missing for ECDH export
74+ // - alg is the algorithm name for Ed25519 and Ed448 export
7275function testJwkAlgBehaviours ( algorithm , keyData , crv , usages ) {
7376 [ algorithm , algorithm . name ] . forEach ( ( alg ) => {
74- promise_test ( function ( test ) {
75- return subtle . importKey ( 'jwk' , { ...keyData , alg : 'this is ignored' } , alg , true , usages ) .
76- then ( function ( key ) {
77- assert_equals ( key . constructor , CryptoKey , "Imported a CryptoKey object" ) ;
78-
79- return subtle . exportKey ( 'jwk' , key ) .
80- then ( function ( result ) {
81- assert_equals ( Object . keys ( result ) . length , keyData . d ? 6 : 5 , "Correct number of JWK members" ) ;
82- assert_equals ( result . alg , undefined , 'No JWK "alg" member is present' ) ;
83- assert_true ( equalJwk ( keyData , result ) , "Round trip works" ) ;
84- } , function ( err ) {
77+ ( crv . startsWith ( 'Ed' ) ? [ algorithm . name , 'EdDSA' ] : [ 'this is ignored' ] ) . forEach ( ( jwkAlg ) => {
78+ promise_test ( function ( test ) {
79+ return subtle . importKey ( 'jwk' , { ...keyData , alg : jwkAlg } , alg , true , usages ) .
80+ then ( function ( key ) {
81+ assert_equals ( key . constructor , CryptoKey , "Imported a CryptoKey object" ) ;
82+
83+ return subtle . exportKey ( 'jwk' , key ) .
84+ then ( function ( result ) {
85+ let expectedKeys = crv . startsWith ( 'Ed' ) ? 6 : 5
86+ if ( keyData . d ) expectedKeys ++
87+ assert_equals ( Object . keys ( result ) . length , expectedKeys , "Correct number of JWK members" ) ;
88+ assert_equals ( result . alg , crv . startsWith ( 'Ed' ) ? algorithm . name : undefined , 'Expected JWK "alg" member' ) ;
89+ assert_true ( equalJwk ( keyData , result ) , "Round trip works" ) ;
90+ } , function ( err ) {
91+ assert_unreached ( "Threw an unexpected error: " + err . toString ( ) ) ;
92+ } ) ;
93+ } , function ( err ) {
8594 assert_unreached ( "Threw an unexpected error: " + err . toString ( ) ) ;
86- } ) ;
87- } , function ( err ) {
88- assert_unreached ( "Threw an unexpected error: " + err . toString ( ) ) ;
89- } ) ;
90- } , "Good parameters with ignored JWK alg: " + crv . toString ( ) + " " + parameterString ( 'jwk' , keyData , alg , true , usages ) ) ;
95+ } ) ;
96+ } , 'Good parameters with JWK alg' + ( crv . startsWith ( 'Ed' ) ? ` ${ jwkAlg } : ` : ': ' ) + crv . toString ( ) + " " + parameterString ( 'jwk' , keyData , alg , true , usages , jwkAlg ) ) ;
97+ } ) ;
9198 } ) ;
9299}
93100
0 commit comments