| Index: LayoutTests/crypto/aes-generateKey.html
|
| diff --git a/LayoutTests/crypto/aes-generateKey.html b/LayoutTests/crypto/aes-generateKey.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..af1c9484b51475a4781526bc3f013b78c408388d
|
| --- /dev/null
|
| +++ b/LayoutTests/crypto/aes-generateKey.html
|
| @@ -0,0 +1,86 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<script src="../resources/js-test.js"></script>
|
| +<script src="resources/common.js"></script>
|
| +</head>
|
| +<body>
|
| +<p id="description"></p>
|
| +<div id="console"></div>
|
| +
|
| +<script>
|
| +description("Tests generating AES keys");
|
| +
|
| +jsTestIsAsync = true;
|
| +
|
| +// Tests the 48 permutations of keys generated by:
|
| +// kPossibleAlgorithms x kPossibleExtractable x kPossibleKeyUsages x kPossibleKeyLengths
|
| +//
|
| +// For practical reasons these tests are not exhaustive.
|
| +
|
| +var kPossibleAlgorithms = ['AES-CBC', 'AES-GCM'];
|
| +var kPossibleExtractable = [true, false];
|
| +var kPossibleKeyUsages = [[], ['encrypt'], ['decrypt', 'wrapKey'], ['encrypt', 'wrapKey', 'unwrapKey']];
|
| +var kPossibleKeyLengths = [128, 192, 256];
|
| +
|
| +// Set of all key data generated so far.
|
| +var allKeyDataGenerated = {};
|
| +
|
| +function runTest(algorithmName, extractable, keyUsages, keyLengthBits)
|
| +{
|
| + var genAlgorithm = { name: algorithmName, length: keyLengthBits };
|
| +
|
| + var results = {};
|
| +
|
| + var promise = crypto.subtle.generateKey(genAlgorithm, extractable, keyUsages).then(function(result) {
|
| + generatedKey = result;
|
| +
|
| + shouldEvaluateAs("generatedKey.extractable", extractable);
|
| + shouldEvaluateAs("generatedKey.algorithm.name", algorithmName);
|
| + shouldEvaluateAs("generatedKey.algorithm.length", keyLengthBits);
|
| + shouldEvaluateAs("generatedKey.usages.join(',')", keyUsages.join(","));
|
| +
|
| + if (extractable)
|
| + return crypto.subtle.exportKey('raw', generatedKey);
|
| + });
|
| +
|
| + if (extractable) {
|
| + promise = promise.then(function(result) {
|
| + keyData = result;
|
| + shouldEvaluateAs("keyData.byteLength", keyLengthBits / 8);
|
| +
|
| + var keyDataHex = bytesToHexString(keyData);
|
| +
|
| + // It is very unlikely to generate two identical keys, so
|
| + // assume if that happens something is broken.
|
| + // (8 extractable keys are generated for each bit length).
|
| + if (allKeyDataGenerated[keyDataHex]) {
|
| + testFailed("Generated identical key data: " + keyDataHex);
|
| + } else {
|
| + allKeyDataGenerated[keyDataHex] = true;
|
| + testPassed("Generated unique key data of length: " + (keyData.byteLength * 8) + " bits");
|
| + }
|
| + });
|
| + }
|
| +
|
| + return promise;
|
| +}
|
| +
|
| +var lastPromise = Promise.resolve(null);
|
| +
|
| +kPossibleAlgorithms.forEach(function(algorithmName) {
|
| + kPossibleExtractable.forEach(function(extractable) {
|
| + kPossibleKeyUsages.forEach(function(keyUsages) {
|
| + kPossibleKeyLengths.forEach(function(keyLengthBits) {
|
| + lastPromise = lastPromise.then(runTest.bind(null, algorithmName, extractable, keyUsages, keyLengthBits));
|
| + });
|
| + });
|
| + });
|
| +});
|
| +
|
| +lastPromise.then(finishJSTest, failAndFinishJSTest);
|
| +
|
| +</script>
|
| +
|
| +</body>
|
| +</html>
|
|
|