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