Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Unified Diff: LayoutTests/crypto/aes-generateKey.html

Issue 246693007: [webcrypto] Add layout test for generated AES keys. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | LayoutTests/crypto/aes-generateKey-expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
« no previous file with comments | « no previous file | LayoutTests/crypto/aes-generateKey-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698