| 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>
|
|
|