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