(algorithmNames)
| 1 | function run_test(algorithmNames) { |
| 2 | var subtle = crypto.subtle; // Change to test prefixed implementations |
| 3 | |
| 4 | setup({explicit_timeout: true}); |
| 5 | |
| 6 | // These tests check that generateKey throws an error, and that |
| 7 | // the error is of the right type, for a wide set of incorrect parameters. |
| 8 | // |
| 9 | // Error testing occurs by setting the parameter that should trigger the |
| 10 | // error to an invalid value, then combining that with all valid |
| 11 | // parameters that should be checked earlier by generateKey, and all |
| 12 | // valid and invalid parameters that should be checked later by |
| 13 | // generateKey. |
| 14 | // |
| 15 | // There are a lot of combinations of possible parameters for both |
| 16 | // success and failure modes, resulting in a very large number of tests |
| 17 | // performed. |
| 18 | |
| 19 | |
| 20 | // Setup: define the correct behaviors that should be sought, and create |
| 21 | // helper functions that generate all possible test parameters for |
| 22 | // different situations. |
| 23 | |
| 24 | var allTestVectors = [ // Parameters that should work for generateKey |
| 25 | {name: "AES-CTR", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 26 | {name: "AES-CBC", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 27 | {name: "AES-GCM", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 28 | {name: "AES-OCB", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 29 | {name: "ChaCha20-Poly1305", resultType: CryptoKey, usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 30 | {name: "AES-KW", resultType: CryptoKey, usages: ["wrapKey", "unwrapKey"], mandatoryUsages: []}, |
| 31 | {name: "HMAC", resultType: CryptoKey, usages: ["sign", "verify"], mandatoryUsages: []}, |
| 32 | {name: "RSASSA-PKCS1-v1_5", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 33 | {name: "RSA-PSS", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 34 | {name: "RSA-OAEP", resultType: "CryptoKeyPair", usages: ["encrypt", "decrypt", "wrapKey", "unwrapKey"], mandatoryUsages: ["decrypt", "unwrapKey"]}, |
| 35 | {name: "ECDSA", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 36 | {name: "ECDH", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, |
| 37 | {name: "Ed25519", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 38 | {name: "Ed448", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 39 | {name: "ML-DSA-44", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 40 | {name: "ML-DSA-65", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 41 | {name: "ML-DSA-87", resultType: "CryptoKeyPair", usages: ["sign", "verify"], mandatoryUsages: ["sign"]}, |
| 42 | {name: "ML-KEM-512", resultType: "CryptoKeyPair", usages: ["decapsulateBits", "decapsulateKey", "encapsulateBits", "encapsulateKey"], mandatoryUsages: ["decapsulateBits", "decapsulateKey"]}, |
| 43 | {name: "ML-KEM-768", resultType: "CryptoKeyPair", usages: ["decapsulateBits", "decapsulateKey", "encapsulateBits", "encapsulateKey"], mandatoryUsages: ["decapsulateBits", "decapsulateKey"]}, |
| 44 | {name: "ML-KEM-1024", resultType: "CryptoKeyPair", usages: ["decapsulateBits", "decapsulateKey", "encapsulateBits", "encapsulateKey"], mandatoryUsages: ["decapsulateBits", "decapsulateKey"]}, |
| 45 | {name: "X25519", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, |
| 46 | {name: "X448", resultType: "CryptoKeyPair", usages: ["deriveKey", "deriveBits"], mandatoryUsages: ["deriveKey", "deriveBits"]}, |
| 47 | {name: "KMAC128", resultType: CryptoKey, usages: ["sign", "verify"], mandatoryUsages: []}, |
| 48 | {name: "KMAC256", resultType: CryptoKey, usages: ["sign", "verify"], mandatoryUsages: []}, |
| 49 | ]; |
| 50 | |
| 51 | var testVectors = []; |
| 52 | if (algorithmNames && !Array.isArray(algorithmNames)) { |
| 53 | algorithmNames = [algorithmNames]; |
| 54 | }; |
| 55 | allTestVectors.forEach(function(vector) { |
| 56 | if (!algorithmNames || algorithmNames.includes(vector.name)) { |
| 57 | testVectors.push(vector); |
| 58 | } |
| 59 | }); |
| 60 |
no test coverage detected