Index: LayoutTests/crypto/importKey.html |
diff --git a/LayoutTests/crypto/importKey.html b/LayoutTests/crypto/importKey.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d66506f8f825c8d18903db2cd0b903d432444588 |
--- /dev/null |
+++ b/LayoutTests/crypto/importKey.html |
@@ -0,0 +1,219 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../fast/js/resources/js-test-pre.js"></script> |
+</head> |
+<body> |
+<p id="description"></p> |
+<div id="console"></div> |
+ |
+<script> |
+description("Tests cypto.subtle.importKey."); |
+ |
+jsTestIsAsync = true; |
+ |
+function asciiToArrayBuffer(str) |
+{ |
+ var chars = []; |
+ for (var i = 0; i < str.length; ++i) |
+ chars.push(str.charCodeAt(i)); |
+ return new Uint8Array(chars); |
+} |
+ |
+// Each sub-test run in this file is asynchronous. Chaining them together |
+// manually leads to very unreadable code, due to having closures within |
+// closures within closures. Instead of doing that, each subtest calls |
+// "startNextTest()" once it has completed. |
+ |
+currentTestIndex = 0; |
+ |
+function startNextTest() |
+{ |
+ var currentTest = allTests[currentTestIndex++]; |
+ |
+ if (!currentTest) { |
+ finishJSTest(); |
+ return; |
+ } |
+ |
+ currentTest(); |
+} |
+ |
+function rejectHandler(value) |
+{ |
+ debug(" rejected with value of " + value); |
+ startNextTest(); |
+} |
+ |
+function failHandler(value) |
+{ |
+ testFailed(value); |
+ startNextTest(); |
+} |
+ |
+allTests = [ |
+ function() |
+ { |
+ keyFormat = "raw"; |
+ data = asciiToArrayBuffer("private"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = true; |
+ // Note there are duplicates |
+ keyUsages = ['encrypt', 'encrypt', 'encrypt', 'sign']; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ function(value) { |
+ key = value; |
+ shouldBe("key.type", "'private'") |
+ shouldBe("key.extractable", "true") |
+ shouldBe("key.algorithm.name", "'SHA-256'") |
+ shouldBe("key.usages.join(',')", "'encrypt,sign'") |
+ |
+ startNextTest(); |
+ }, failHandler); |
+ }, |
+ |
+ // Same test as above, but with an keyUsages. |
+ function() |
+ { |
+ keyFormat = "raw"; |
+ data = asciiToArrayBuffer("private"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = true; |
+ keyUsages = []; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ function(value) { |
+ key = value; |
+ shouldBe("key.type", "'private'") |
+ shouldBe("key.extractable", "true") |
+ shouldBe("key.algorithm.name", "'SHA-256'") |
+ shouldBe("key.usages.join(',')", "''") |
+ |
+ startNextTest(); |
+ }, failHandler); |
+ }, |
+ |
+ // Same test as above, but with extractable = false. |
+ function() |
+ { |
+ keyFormat = "raw"; |
+ data = asciiToArrayBuffer("private"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = false; |
+ keyUsages = []; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ function(value) { |
+ key = value; |
+ shouldBe("key.type", "'private'") |
+ shouldBe("key.extractable", "false") |
+ shouldBe("key.algorithm.name", "'SHA-256'") |
+ shouldBe("key.usages.join(',')", "''") |
+ |
+ startNextTest(); |
+ }, failHandler); |
+ }, |
+ |
+ // Same test as above, but with key.type of public. |
+ function() |
+ { |
+ keyFormat = "raw"; |
+ data = asciiToArrayBuffer("public"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = false; |
+ keyUsages = []; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ function(value) { |
+ key = value; |
+ shouldBe("key.type", "'public'") |
+ shouldBe("key.extractable", "false") |
+ shouldBe("key.algorithm.name", "'SHA-256'") |
+ shouldBe("key.usages.join(',')", "''") |
+ |
+ startNextTest(); |
+ }, failHandler); |
+ }, |
+ |
+ // Same test as above, but with keyFormat = spki |
+ function() |
+ { |
+ keyFormat = "spki"; |
+ data = asciiToArrayBuffer("public"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = false; |
+ keyUsages = []; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ function(value) { |
+ key = value; |
+ shouldBe("key.type", "'public'") |
+ shouldBe("key.extractable", "false") |
+ shouldBe("key.algorithm.name", "'SHA-256'") |
+ shouldBe("key.usages.join(',')", "''") |
+ |
+ startNextTest(); |
+ }, failHandler); |
+ }, |
+ |
+ function() |
+ { |
+ keyFormat = "spki"; |
+ data = asciiToArrayBuffer("reject"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = false; |
+ keyUsages = []; |
+ |
+ crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages).then( |
+ failHandler, |
+ function(value) { |
+ debug("rejected with " + value); |
+ startNextTest(); |
+ }); |
+ }, |
+ |
+ function() |
+ { |
+ keyFormat = "spki"; |
+ data = asciiToArrayBuffer("throw"); |
+ algorithm = {name: "Sha-256"}; |
+ extractable = false; |
+ keyUsages = []; |
+ |
+ shouldThrow("crypto.subtle.importKey(keyFormat, data, algorithm, extractable, keyUsages)"); |
+ startNextTest(); |
+ }, |
+ |
+ function() |
+ { |
+ keyFormat = "raw"; |
+ data = asciiToArrayBuffer("private"); |
+ algorithm = {name: 'sha-256'}; |
+ extractable = true; |
+ |
+ // Note contains duplicates and invalid entries. |
+ keyUsages = []; |
+ |
+ // Invalid format. |
+ shouldThrow("crypto.subtle.importKey('invalid format', data, algorithm, extractable, keyUsages)"); |
+ |
+ // Invalid key usage. |
+ shouldThrow("crypto.subtle.importKey(keyFormat, data, algorithm, extractable, ['SIGN'])"); |
+ |
+ // Undefined key usage. |
+ // FIXME: http://crbug.com/262383 |
+ //shouldThrow("crypto.subtle.importKey(keyFormat, data, algorithm, extractable, undefined)"); |
+ |
+ startNextTest(); |
+ }, |
+ |
+]; |
+ |
+// Begin! |
+startNextTest(); |
+</script> |
+ |
+<script src="../fast/js/resources/js-test-post.js"></script> |
+</body> |
+</html> |