@@ -11,7 +11,7 @@ function runTests(algorithmName) {
11
11
[ 'spki' , 'jwk' , 'raw' ] . forEach ( function ( format ) {
12
12
if ( format === "jwk" ) { // Not all fields used for public keys
13
13
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
15
15
if ( extractable ) {
16
16
testJwkAlgBehaviours ( algorithm , jwkData . jwk , algorithmName , usages ) ;
17
17
}
@@ -27,7 +27,7 @@ function runTests(algorithmName) {
27
27
[ 'pkcs8' , 'jwk' ] . forEach ( function ( format ) {
28
28
testFormat ( format , algorithm , data , algorithmName , usages , extractable ) ;
29
29
30
- // Test for https://github.com/WICG /webcrypto-secure-curves /pull/24
30
+ // Test for https://github.com/w3c /webcrypto/pull/401
31
31
if ( format === "jwk" && extractable ) {
32
32
testJwkAlgBehaviours ( algorithm , data . jwk , algorithmName , usages ) ;
33
33
}
@@ -67,27 +67,34 @@ function testFormat(format, algorithm, keyData, keySize, usages, extractable) {
67
67
} ) ;
68
68
}
69
69
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
72
75
function testJwkAlgBehaviours ( algorithm , keyData , crv , usages ) {
73
76
[ 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 ) {
85
94
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
+ } ) ;
91
98
} ) ;
92
99
}
93
100
0 commit comments