Index: LayoutTests/crypto/normalize-algorithm.html |
diff --git a/LayoutTests/crypto/normalize-algorithm.html b/LayoutTests/crypto/normalize-algorithm.html |
index 9a869c0171fcb7f595dc0cc3e20a00e5efe63bbc..edea0aeb101be9723a12bf5fa69af79ffa24cf99 100644 |
--- a/LayoutTests/crypto/normalize-algorithm.html |
+++ b/LayoutTests/crypto/normalize-algorithm.html |
@@ -10,152 +10,124 @@ |
<script> |
description("Tests algorithm normalization."); |
-jsTestIsAsync = true; |
- |
// ------------------------------- |
// Helpers to return a normalized algorithm identifier. |
// ------------------------------- |
-key = null; |
- |
-function normalizeDigest(algorithmIdentifier) |
-{ |
+function normalizeDigest(algorithmIdentifier) { |
return crypto.subtle.digest(algorithmIdentifier).algorithm; |
} |
-function normalizeEncrypt(algorithmIdentifier) |
-{ |
+function normalizeEncrypt(algorithmIdentifier) { |
+ // TODO(eroman): Use a valid key. |
+ var key; |
return crypto.subtle.encrypt(algorithmIdentifier, key).algorithm; |
} |
-function normalizeSign(algorithmIdentifier) |
-{ |
+function normalizeSign(algorithmIdentifier) { |
+ // TODO(eroman): Use a valid key. |
+ var 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 }); |
- |
- // 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)"); |
- |
- // ------------------------------- |
- // 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 }); |
- // 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); |
- shouldBe("algorithm.name", "'AES-CBC'"); |
- shouldBe("algorithm.iv.length", "16"); |
- shouldBe("algorithm.iv[1]", "1"); |
- |
- // ------------------------------- |
- // Unsupported operation on algorithm |
- // ------------------------------- |
- shouldThrow("normalizeEncrypt({ name: 'SHA-1' })"); |
- shouldThrow("normalizeDigest({ name: 'AES-CBC', iv: originalIv })"); |
- |
- // ------------------------------- |
- // Normalize HMAC |
- // ------------------------------- |
- shouldThrow("normalizeSign({name: 'hmac'})"); // Missing "hash" |
- shouldThrow("normalizeSign({name: 'hmac', hash: 'foo'})"); // Not a valid "hash" |
- shouldThrow("normalizeSign({name: 'hmac', hash: { name: 'AES-CBC', iv: originalIv }})"); // Not a valid "hash" |
- |
- validHmacSha1 = {name: 'hmac', hash: {name: 'Sha-1'}}; |
- algorithm = normalizeSign(validHmacSha1); |
- shouldBe("algorithm.name", "'HMAC'"); |
- shouldBe("algorithm.hash.name", "'SHA-1'"); |
- |
- shouldThrow("normalizeEncrypt(validHmacSha1)"); // Not defined for encrypt() |
-} |
+// ------------------------------- |
+// Case insensitivity of "name" |
+// ------------------------------- |
+algorithm = normalizeDigest({name: "SHA-1"}); |
+shouldBe("algorithm.name", "'SHA-1'"); |
+algorithm = normalizeDigest({name: "sHa-256"}); |
+shouldBe("algorithm.name", "'SHA-256'"); |
-function keyImported(newKey) |
-{ |
- key = newKey; |
- runTests(); |
- finishJSTest(); |
-} |
+// ------------------------------- |
+// 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'})"); |
-function failedKeyImport(value) |
-{ |
- debug("Failed importing key: " + value); |
- finishJSTest(); |
-} |
+// ------------------------------- |
+// 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 }); |
+ |
+// 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)"); |
+ |
+// ------------------------------- |
+// 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 }); |
+// 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); |
+shouldBe("algorithm.name", "'AES-CBC'"); |
+shouldBe("algorithm.iv.length", "16"); |
+shouldBe("algorithm.iv[1]", "1"); |
+ |
+// ------------------------------- |
+// Unsupported operation on algorithm |
+// ------------------------------- |
+shouldThrow("normalizeEncrypt({ name: 'SHA-1' })"); |
+shouldThrow("normalizeDigest({ name: 'AES-CBC', iv: originalIv })"); |
+ |
+// ------------------------------- |
+// Normalize HMAC |
+// ------------------------------- |
+shouldThrow("normalizeSign({name: 'hmac'})"); // Missing "hash" |
+shouldThrow("normalizeSign({name: 'hmac', hash: 'foo'})"); // Not a valid "hash" |
+shouldThrow("normalizeSign({name: 'hmac', hash: { name: 'AES-CBC', iv: originalIv }})"); // Not a valid "hash" |
-// This is a bogus key import, however the mock constructs something usable. |
-keyFormat = "spki"; |
-data = new Uint8Array([]); |
-algorithm = {name: "Sha-256"}; |
-extractable = false; |
-keyUsages = []; |
+validHmacSha1 = {name: 'hmac', hash: {name: 'Sha-1'}}; |
+algorithm = normalizeSign(validHmacSha1); |
+shouldBe("algorithm.name", "'HMAC'"); |
+shouldBe("algorithm.hash.name", "'SHA-1'"); |
-crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then(keyImported, failedKeyImport); |
+shouldThrow("normalizeEncrypt(validHmacSha1)"); // Not defined for encrypt() |
</script> |