(algorithmName)
| 3 | |
| 4 | |
| 5 | function runTests(algorithmName) { |
| 6 | var subtle = crypto.subtle; |
| 7 | |
| 8 | // keying material for algorithms that can use any bit string. |
| 9 | var rawKeyData = [ |
| 10 | new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]), |
| 11 | new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, |
| 12 | 17, 18, 19, 20, 21, 22, 23, 24]), |
| 13 | new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, |
| 14 | 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]) |
| 15 | ]; |
| 16 | |
| 17 | // combinations of algorithms, usages, parameters, and formats to test |
| 18 | var testVectors = [ |
| 19 | {name: "AES-CTR", legalUsages: ["encrypt", "decrypt"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 20 | {name: "AES-CBC", legalUsages: ["encrypt", "decrypt"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 21 | {name: "AES-GCM", legalUsages: ["encrypt", "decrypt"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 22 | {name: "AES-KW", legalUsages: ["wrapKey", "unwrapKey"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 23 | {name: "HMAC", hash: "SHA-1", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 24 | {name: "HMAC", hash: "SHA-256", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 25 | {name: "HMAC", hash: "SHA-384", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 26 | {name: "HMAC", hash: "SHA-512", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw", "jwk"]}, |
| 27 | {name: "HKDF", legalUsages: ["deriveBits", "deriveKey"], extractable: [false], formats: ["raw"]}, |
| 28 | {name: "PBKDF2", legalUsages: ["deriveBits", "deriveKey"], extractable: [false], formats: ["raw"]}, |
| 29 | {name: "Argon2i", legalUsages: ["deriveBits", "deriveKey"], extractable: [false], formats: ["raw-secret"]}, |
| 30 | {name: "Argon2d", legalUsages: ["deriveBits", "deriveKey"], extractable: [false], formats: ["raw-secret"]}, |
| 31 | {name: "Argon2id", legalUsages: ["deriveBits", "deriveKey"], extractable: [false], formats: ["raw-secret"]}, |
| 32 | {name: "AES-OCB", legalUsages: ["encrypt", "decrypt"], extractable: [true, false], formats: ["raw-secret", "jwk"]}, |
| 33 | {name: "ChaCha20-Poly1305", legalUsages: ["encrypt", "decrypt"], extractable: [true, false], formats: ["raw-secret", "jwk"]}, |
| 34 | {name: "KMAC128", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw-secret", "jwk"]}, |
| 35 | {name: "KMAC256", legalUsages: ["sign", "verify"], extractable: [true, false], formats: ["raw-secret", "jwk"]}, |
| 36 | ]; |
| 37 | |
| 38 | |
| 39 | |
| 40 | // TESTS ARE HERE: |
| 41 | // Test every test vector, along with all available key data |
| 42 | testVectors.filter(({ name }) => name === algorithmName).forEach(function(vector) { |
| 43 | var algorithm = {name: vector.name}; |
| 44 | if ("hash" in vector) { |
| 45 | algorithm.hash = vector.hash; |
| 46 | } |
| 47 | |
| 48 | rawKeyData.forEach(function(keyData) { |
| 49 | if (vector.name === 'ChaCha20-Poly1305' && keyData.byteLength !== 32) return; |
| 50 | // Try each legal value of the extractable parameter |
| 51 | vector.extractable.forEach(function(extractable) { |
| 52 | vector.formats.forEach(function(format) { |
| 53 | var data = keyData; |
| 54 | if (format === "jwk") { |
| 55 | data = jwkData(keyData, algorithm); |
| 56 | } |
| 57 | // Generate all combinations of valid usages for testing |
| 58 | allValidUsages(vector.legalUsages).forEach(function(usages) { |
| 59 | testFormat(format, algorithm, data, keyData.length * 8, usages, extractable); |
| 60 | }); |
| 61 | testEmptyUsages(format, algorithm, data, keyData.length * 8, extractable); |
| 62 |
nothing calls this directly
no test coverage detected