(algorithm, extractable, usages, resultType, testTag)
| 66 | |
| 67 | // Test that a given combination of parameters is successful |
| 68 | function testSuccess(algorithm, extractable, usages, resultType, testTag) { |
| 69 | // algorithm, extractable, and usages are the generateKey parameters |
| 70 | // resultType is the expected result, either the CryptoKey object or "CryptoKeyPair" |
| 71 | // testTag is a string to prepend to the test name. |
| 72 | |
| 73 | promise_test(function(test) { |
| 74 | return subtle.generateKey(algorithm, extractable, usages) |
| 75 | .then(function(result) { |
| 76 | if (resultType === "CryptoKeyPair") { |
| 77 | assert_goodCryptoKey(result.privateKey, algorithm, extractable, usages, "private"); |
| 78 | assert_goodCryptoKey(result.publicKey, algorithm, true, usages, "public"); |
| 79 | } else { |
| 80 | assert_goodCryptoKey(result, algorithm, extractable, usages, "secret"); |
| 81 | } |
| 82 | return result; |
| 83 | }, function(err) { |
| 84 | assert_unreached("generateKey threw an unexpected error: " + err.toString()); |
| 85 | }) |
| 86 | .then(async function (result) { |
| 87 | // TODO: remove this block to enable ML-KEM JWK when its definition is done in IETF JOSE WG |
| 88 | if (result.publicKey?.algorithm.name.startsWith('ML-KEM')) { |
| 89 | const promises = [ |
| 90 | subtle.exportKey('spki', result.publicKey), |
| 91 | extractable ? subtle.exportKey('pkcs8', result.privateKey) : undefined, |
| 92 | subtle.exportKey('raw-public', result.publicKey), |
| 93 | ]; |
| 94 | if (extractable) |
| 95 | promises.push(subtle.exportKey('raw-seed', result.privateKey)); |
| 96 | } else if (resultType === "CryptoKeyPair") { |
| 97 | const promises = [ |
| 98 | subtle.exportKey('jwk', result.publicKey), |
| 99 | extractable ? subtle.exportKey('jwk', result.privateKey) : undefined, |
| 100 | subtle.exportKey('spki', result.publicKey), |
| 101 | extractable ? subtle.exportKey('pkcs8', result.privateKey) : undefined, |
| 102 | ]; |
| 103 | |
| 104 | switch (result.publicKey.algorithm.name.substring(0, 2)) { |
| 105 | case 'ML': |
| 106 | promises.push(subtle.exportKey('raw-public', result.publicKey)); |
| 107 | if (extractable) |
| 108 | promises.push(subtle.exportKey('raw-seed', result.privateKey)); |
| 109 | break; |
| 110 | case 'SL': |
| 111 | promises.push(subtle.exportKey('raw-public', result.publicKey)); |
| 112 | if (extractable) |
| 113 | promises.push(subtle.exportKey('raw-private', result.privateKey)); |
| 114 | break; |
| 115 | case 'EC': |
| 116 | case 'Ed': |
| 117 | case 'X2': |
| 118 | case 'X4': |
| 119 | promises.push(subtle.exportKey('raw', result.publicKey)); |
| 120 | break; |
| 121 | case 'RS': |
| 122 | break; |
| 123 | default: |
| 124 | throw new Error('not implemented'); |
| 125 | } |
nothing calls this directly
no test coverage detected