| Index: LayoutTests/crypto/normalize-algorithm.html | 
| diff --git a/LayoutTests/crypto/normalize-algorithm.html b/LayoutTests/crypto/normalize-algorithm.html | 
| deleted file mode 100644 | 
| index c867fd469131cdf74412e081145f8debaca699ef..0000000000000000000000000000000000000000 | 
| --- a/LayoutTests/crypto/normalize-algorithm.html | 
| +++ /dev/null | 
| @@ -1,223 +0,0 @@ | 
| -<!DOCTYPE html> | 
| -<html> | 
| -<head> | 
| -<script src="../fast/js/resources/js-test-pre.js"></script> | 
| -<script src="resources/common.js"></script> | 
| -</head> | 
| -<body> | 
| -<p id="description"></p> | 
| -<div id="console"></div> | 
| - | 
| -<script> | 
| -description("Tests algorithm normalization."); | 
| - | 
| -jsTestIsAsync = true; | 
| - | 
| -// FIXME: Rename this to crypto-operation.html, since it tests the basic | 
| -//        construction of CryptoOperations. | 
| - | 
| -// ------------------------------- | 
| -// Helpers to return a normalized algorithm identifier. | 
| -// ------------------------------- | 
| - | 
| -aesCbcKey = null; | 
| -hmacSha1Key = null; | 
| -rsaSsaKey = null; | 
| - | 
| -function normalizeDigest(algorithmIdentifier) | 
| -{ | 
| -    return crypto.subtle.digest(algorithmIdentifier).algorithm; | 
| -} | 
| - | 
| -function normalizeEncrypt(algorithmIdentifier, key) | 
| -{ | 
| -    return crypto.subtle.encrypt(algorithmIdentifier, key).algorithm; | 
| -} | 
| - | 
| -function normalizeSign(algorithmIdentifier, key) | 
| -{ | 
| -    return crypto.subtle.sign(algorithmIdentifier, key).algorithm; | 
| -} | 
| - | 
| -function runTests() | 
| -{ | 
| -    // ------------------------------- | 
| -    // Case insensitivity of "name" | 
| -    // ------------------------------- | 
| -    algorithm = normalizeDigest({name: "SHA-1"}); | 
| -    shouldBe("algorithm.name", "'SHA-1'"); | 
| -    algorithm = normalizeDigest({name: "sHa-256"}); | 
| -    shouldBe("algorithm.name", "'SHA-256'"); | 
| - | 
| -    // ------------------------------- | 
| -    // Failures if "name" is invalid | 
| -    // ------------------------------- | 
| -    shouldThrow("normalizeDigest({})"); | 
| -    shouldThrow("normalizeDigest({name: null})"); | 
| -    shouldThrow("normalizeDigest({name: -1})"); | 
| -    shouldThrow("normalizeDigest({name: ''})"); | 
| -    shouldThrow("normalizeDigest({name: 'nosuchalgorithm'})"); | 
| -    shouldThrow("normalizeDigest({name: '\\u0189'})"); | 
| - | 
| -    // ------------------------------- | 
| -    // Failures if the algorithm identifier is not an object | 
| -    // ------------------------------- | 
| -    shouldThrow("normalizeDigest(null)"); | 
| -    shouldThrow("normalizeDigest(0)"); | 
| -    shouldThrow("normalizeDigest(undefined)"); | 
| -    shouldThrow("normalizeDigest('')"); | 
| - | 
| -    // ------------------------------- | 
| -    // Skip unrecognized parameters. | 
| -    // ------------------------------- | 
| -    algorithm = normalizeDigest({name: "sHa-1", noSuchParam: 3}); | 
| -    shouldBeUndefined("algorithm.noSuchParam"); | 
| - | 
| -    // ------------------------------- | 
| -    // Normalized algorithm COPIES all data | 
| -    // ------------------------------- | 
| -    originalIv = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]); | 
| -    algorithm = normalizeEncrypt({ name: "aes-cbc", iv: originalIv }, aesCbcKey); | 
| - | 
| -    // Make sure it constructed the normalized result. | 
| -    shouldBe("algorithm.name", "'AES-CBC'"); | 
| -    shouldBe("algorithm.iv.length", "16"); | 
| -    shouldBe("algorithm.iv[3]", "3"); | 
| - | 
| -    // Mutate the original (un-normalized) algorithm. Verify that this doesn't affect the normalized output. | 
| -    originalIv[3] = 0; | 
| -    shouldBe("algorithm.iv[3]", "3"); | 
| - | 
| -    // ------------------------------- | 
| -    // AES-CBC normalization failures | 
| -    // ------------------------------- | 
| - | 
| -    // The "iv" MUST be 16 bytes long. | 
| -    rawAlgorithm = { | 
| -        name: "AES-CBC", | 
| -        iv: new Uint8Array([1, 2, 3]) | 
| -    }; | 
| -    shouldThrow("normalizeEncrypt(rawAlgorithm, aesCbcKey)"); | 
| - | 
| -    // ------------------------------- | 
| -    // Normalize a normalized algorithm (SHA-384) | 
| -    // ------------------------------- | 
| -    algorithm = normalizeDigest({name: "sHa-384"}); | 
| -    shouldBe("algorithm.name", "'SHA-384'"); | 
| -    algorithm = normalizeDigest(algorithm); | 
| -    shouldBe("algorithm.name", "'SHA-384'"); | 
| - | 
| -    // ------------------------------- | 
| -    // Normalize a normalized algorithm (AES-CBC, encrypt) | 
| -    // ------------------------------- | 
| -    algorithm = normalizeEncrypt({ name: "aEs-cbc", iv: originalIv }, aesCbcKey); | 
| -    // Make sure it constructed the normalized result. | 
| -    shouldBe("algorithm.name", "'AES-CBC'"); | 
| -    shouldBe("algorithm.iv.length", "16"); | 
| -    shouldBe("algorithm.iv[1]", "1"); | 
| -    algorithm = normalizeEncrypt(algorithm, aesCbcKey); | 
| -    shouldBe("algorithm.name", "'AES-CBC'"); | 
| -    shouldBe("algorithm.iv.length", "16"); | 
| -    shouldBe("algorithm.iv[1]", "1"); | 
| - | 
| -    // ------------------------------- | 
| -    // Unsupported operation on algorithm | 
| -    // ------------------------------- | 
| -    shouldThrow("normalizeEncrypt({ name: 'SHA-1' }, aesCbcKey)"); | 
| -    shouldThrow("normalizeDigest({ name: 'AES-CBC', iv: originalIv })"); | 
| - | 
| -    // ------------------------------- | 
| -    // Normalize HMAC | 
| -    // ------------------------------- | 
| -    shouldThrow("normalizeSign({name: 'hmac'}, hmacSha1Key)"); // Missing "hash" | 
| -    shouldThrow("normalizeSign({name: 'hmac', hash: 'foo'}, hmacSha1Key)"); // Not a valid "hash" | 
| -    shouldThrow("normalizeSign({name: 'hmac', hash: { name: 'AES-CBC', iv: originalIv }}, hmacSha1Key)"); // Not a valid "hash" | 
| - | 
| -    validHmacSha1 = {name: 'hmac', hash: {name: 'Sha-1'}}; | 
| -    algorithm = normalizeSign(validHmacSha1, hmacSha1Key); | 
| -    shouldBe("algorithm.name", "'HMAC'"); | 
| -    shouldBe("algorithm.hash.name", "'SHA-1'"); | 
| - | 
| -    shouldThrow("normalizeEncrypt(validHmacSha1, hmacSha1Key)"); // Not defined for encrypt() | 
| - | 
| -    // ------------------------------- | 
| -    // Normalize RSASSA-PKCS1-v1_5 | 
| -    // ------------------------------- | 
| -    shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5'}, rsaSsaKey)"); // Missing "hash" | 
| -    shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5', hash: 'foo'}, rsaSsaKey)"); // Not a valid "hash" | 
| -    shouldThrow("normalizeSign({name: 'RSASSA-PKCS1-v1_5', hash: { name: 'AES-CBC', iv: originalIv }}, rsaSsaKey)"); // Not a valid "hash" | 
| - | 
| -    validRsaSsa = {name: 'RsaSsa-PKCS1-v1_5', hash: {name: 'Sha-256'}}; | 
| -    algorithm = normalizeSign(validRsaSsa, rsaSsaKey); | 
| -    shouldBe("algorithm.name", "'RSASSA-PKCS1-v1_5'"); | 
| -    shouldBe("algorithm.hash.name", "'SHA-256'"); | 
| - | 
| -    shouldThrow("normalizeEncrypt(validRsaSsa, rsaSsaKey)"); // Not defined for encrypt() | 
| - | 
| -    // FIXME: Test the normalization of RsaSsaKeyGen parameters. | 
| - | 
| -    // ------------------------------- | 
| -    // Try using a key for an unsupported operation. | 
| -    // ------------------------------- | 
| -    algorithmIdentifier = { name: "aes-cbc", iv: originalIv }; | 
| -    shouldThrow("crypto.subtle.encrypt(algorithmIdentifier, aesCbcKeyNoEncrypt)"); | 
| - | 
| -    // ------------------------------- | 
| -    // Try using an HMAC-SHA1 key for encrypting AES-CBC | 
| -    // ------------------------------- | 
| -    algorithmIdentifier = { name: "aes-cbc", iv: originalIv }; | 
| -    shouldThrow("crypto.subtle.encrypt(algorithmIdentifier, hmacSha1Key)"); | 
| - | 
| -    // ------------------------------- | 
| -    // Try using an HMAC-SHA1 key for signing HMAC-SHA256 | 
| -    // ------------------------------- | 
| -    algorithmIdentifier = {name: 'hmac', hash: {name: 'sha-256'}}; | 
| -    shouldThrow("crypto.subtle.sign(algorithmIdentifier, hmacSha1Key)"); | 
| -} | 
| - | 
| -function importAesCbcKey(keyUsages) | 
| -{ | 
| -    var keyFormat = "spki"; | 
| -    var data = new Uint8Array([]); | 
| -    var algorithm = {name: "aes-cbc"}; | 
| -    var extractable = false; | 
| - | 
| -    return crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages); | 
| -} | 
| - | 
| -function importRsaSsaKey() | 
| -{ | 
| -    var keyFormat = "spki"; | 
| -    var data = new Uint8Array([]); | 
| -    var algorithm = {name: "RSASSA-PKCS1-v1_5"}; | 
| -    var extractable = false; | 
| -    var keyUsages = ["encrypt", "decrypt", "verify", "sign"]; | 
| - | 
| -    return crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages); | 
| -} | 
| - | 
| -function failedKeyImport(value) | 
| -{ | 
| -    debug("Failed importing key: " + value); | 
| -    finishJSTest(); | 
| -} | 
| - | 
| -// Import two keys before starting the tests: one for AES-CBC, and one for | 
| -// HMAC SHA1. | 
| -Promise.every(importAesCbcKey(['encrypt', 'decrypt', 'sign', 'verify']), importAesCbcKey(['decrypt', 'sign', 'verify']), importHmacSha1Key(), importRsaSsaKey()).then(function(keys) | 
| -{ | 
| -    aesCbcKey = keys[0]; | 
| -    aesCbcKeyNoEncrypt = keys[1]; | 
| -    hmacSha1Key = keys[2]; | 
| -    rsaSsaKey = keys[3]; | 
| - | 
| -    runTests(); | 
| -    finishJSTest(); | 
| - | 
| -}, failedKeyImport); | 
| - | 
| -</script> | 
| - | 
| -<script src="../fast/js/resources/js-test-post.js"></script> | 
| -</body> | 
| -</html> | 
|  |