Bug 1464910 [wpt PR 11204] - Split up WebCryptoAPI/derive_bits_keys/ with variant, a=testonly

Automatic update from web-platform-testsSplit up WebCryptoAPI/derive_bits_keys/ with `variant`

Also use .any.js.

Fixes #11203.
--

wpt-commits: 864cba25d0ac3d2f49e851623370f565ca293cbe
wpt-pr: 11204
This commit is contained in:
Simon Pieters 2018-07-06 21:28:10 +00:00 committed by James Graham
parent 739b536b16
commit 43e6f56c9c
43 changed files with 211 additions and 439 deletions

View File

@ -310305,123 +310305,165 @@
}
]
],
"WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js": [
"WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [
[
"/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.html",
"/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.html",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.worker.html",
{}
]
],
"WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js": [
"WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [
[
"/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.html",
"/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.html",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.worker.html",
{}
]
],
"WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js": [
"WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.worker.html",
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1-1000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?1001-2000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?2001-3000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.html?3001-last",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1-1000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?1001-2000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?2001-3000",
{}
],
[
"/WebCryptoAPI/derive_bits_keys/hkdf.https.any.worker.html?3001-last",
{}
]
],
"WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js": [
"WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1-1000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?1001-2000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?2001-3000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_hkdf.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?3001-4000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?4001-5000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?5001-6000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?6001-7000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?7001-8000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.html?8001-last",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1-1000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?1001-2000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?2001-3000",
{
"timeout": "long"
}
]
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [
],
[
"/WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html",
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?3001-4000",
{
"timeout": "long"
}
],
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?4001-5000",
{
"timeout": "long"
}
],
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?5001-6000",
{
"timeout": "long"
}
],
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?6001-7000",
{
"timeout": "long"
}
],
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?7001-8000",
{
"timeout": "long"
}
],
[
"/WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.worker.html?8001-last",
{
"timeout": "long"
}
@ -414394,94 +414436,46 @@
"de7dd2ee8b4d23b5170349e7c2dc94862e5faed2",
"support"
],
"WebCryptoAPI/derive_bits_keys/ecdh_bits.https.worker.js": [
"b5b14e550d5dbff9f63666b42bd46e29b5be8709",
"WebCryptoAPI/derive_bits_keys/ecdh_bits.https.any.js": [
"864eecab9e1a79b80118c0c3f678b8f38d204bed",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/ecdh_bits.js": [
"becf212639e53f6cae83994feeb2a2d0ecb6feeb",
"support"
],
"WebCryptoAPI/derive_bits_keys/ecdh_keys.https.worker.js": [
"25bcc549b62ecc99df4e2af27753e311c3910e70",
"WebCryptoAPI/derive_bits_keys/ecdh_keys.https.any.js": [
"e18057a3c9fda70c897950a6e6eb4251efef55c4",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/ecdh_keys.js": [
"c030ebe3984538c73ee1fca4ec378e4356bccbf4",
"support"
],
"WebCryptoAPI/derive_bits_keys/hkdf.https.worker.js": [
"0ea6fb5e51a60e8a521da7a2853fde9a4ff2af8f",
"WebCryptoAPI/derive_bits_keys/hkdf.https.any.js": [
"ab1a44ea74a479a73c122537505b8655479e515f",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/hkdf.js": [
"7c50dfe98c29038cc758cf90d56cf4b328d1fc37",
"0b64461f3017121398eee84980565ffdec11da78",
"support"
],
"WebCryptoAPI/derive_bits_keys/hkdf_vectors.js": [
"766a7184da406918e9dc6718125975a59d3d5d36",
"support"
],
"WebCryptoAPI/derive_bits_keys/pbkdf2.https.worker.js": [
"1149c335951baa52b7d1ad3192292fb46176d491",
"WebCryptoAPI/derive_bits_keys/pbkdf2.https.any.js": [
"1570f67d4d803e12d1711e861e0ea1b37e76db45",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/pbkdf2.js": [
"dfd8eea5707720186820549837c8a1a319a8ecc4",
"d91520b4b779d5a8ecd55398a23a1e0fdbe1a9b3",
"support"
],
"WebCryptoAPI/derive_bits_keys/pbkdf2_vectors.js": [
"0a073cb726ad239110545eb3cecada2a0ce5daf7",
"support"
],
"WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [
"eb82990143fa33de7b62cdacd2db566512d74d44",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https.html": [
"d896626491b4f710970b28d30eb89604034fb8c4",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [
"6d0def388fed4db1606d03f2cbfd59020bd00c56",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [
"48b0c6ac60cc130a5bc109fd43b5b1da74bad6da",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [
"9f28363c1c182c354d688a44249abe3f6c6e9ff5",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [
"2a6b28ee191cc62575872c19a21b402f668cd0d5",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [
"e1d654a4ccefef12b57ef32388debf5df170e938",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [
"2e3e354fe0b4b96d2429bd6e3b5b702a327d9e84",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [
"b53dd1eb6d350d6546e71e77d829eb3da4fc4c68",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [
"d36de62c712d53d29aa8cc6995851493d814654f",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [
"518afb29e8f859a793e0e39317c6516aae99fb67",
"testharness"
],
"WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [
"5e776aa3f202bb72a328947983b020f03ba6ec4d",
"testharness"
],
"WebCryptoAPI/digest/digest.https.worker.js": [
"a9a6b7a15bf0b795729190a94bdda6ed1ddc013d",
"testharness"
@ -414555,43 +414549,43 @@
"support"
],
"WebCryptoAPI/generateKey/failures_AES-CBC.https.any.js": [
"43e43b7fbf6441d1fcd6ddf46c30f0621b1edba7",
"8dcb56464b85de7d54bb3bc1c06d6bda630cf4a0",
"testharness"
],
"WebCryptoAPI/generateKey/failures_AES-CTR.https.any.js": [
"2c884e027696683642ea9a554fbb458c80d7c250",
"135d0fdf4e8ca3c44af7af73919ea8ffe7129c5b",
"testharness"
],
"WebCryptoAPI/generateKey/failures_AES-GCM.https.any.js": [
"a04245d270369f78f8043d0e18e78813d023143c",
"3d5858db114e2bcd58c7a5f2fd60c47643433007",
"testharness"
],
"WebCryptoAPI/generateKey/failures_AES-KW.https.any.js": [
"926c029def9b80da51ebff1185692f24d403cecf",
"c1cba74aeccf6d59d9b1d8aa84cacf2352d1aa93",
"testharness"
],
"WebCryptoAPI/generateKey/failures_ECDH.https.any.js": [
"89fe37aa9252d976f76823cdf285630ddadfbfce",
"a4e5c1acc05e321904fda9a8ab442aa63af2fb43",
"testharness"
],
"WebCryptoAPI/generateKey/failures_ECDSA.https.any.js": [
"ab6acf474fb27f7a630847ce07d6fb6a9167ad92",
"a2bc85c93a660752db6250b9798240de8b3d3f96",
"testharness"
],
"WebCryptoAPI/generateKey/failures_HMAC.https.any.js": [
"6f00681d254f24abf00f073806a162738bcbe8e7",
"13e7fd5352320e6e9e2af9cf54c45e2eae5032ca",
"testharness"
],
"WebCryptoAPI/generateKey/failures_RSA-OAEP.https.any.js": [
"c6d7efb5ed58bb1ea96e141763e249b1ad99a6be",
"fb73abf86b9aaf51b032b57d1813d45256e2cbeb",
"testharness"
],
"WebCryptoAPI/generateKey/failures_RSA-PSS.https.any.js": [
"dc18838f5c4f84436c892051a728de7ad83fe854",
"51b1195ef2c2f3084b35460c772c355515e2803c",
"testharness"
],
"WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.https.any.js": [
"170964b911cd3d1aacaa261de01b013ee3fd745a",
"eebe6f227f86a0359690c36d118fb6d516991b5b",
"testharness"
],
"WebCryptoAPI/generateKey/successes.js": [
@ -414599,43 +414593,43 @@
"support"
],
"WebCryptoAPI/generateKey/successes_AES-CBC.https.any.js": [
"49ce28516303c7525f74d29fbbe36b578e9e0d08",
"4f11c263cf8c1a10805dbdbf37e68441cc1524db",
"testharness"
],
"WebCryptoAPI/generateKey/successes_AES-CTR.https.any.js": [
"377e8f0ec969f36949c9dc08ae935063d25c08d8",
"7f71cabebd7c4771b0338a86f0db249275c166e6",
"testharness"
],
"WebCryptoAPI/generateKey/successes_AES-GCM.https.any.js": [
"a65a71f8f83b017fe9eb8fccbd8da3489ed1f9f0",
"b2818ac6f3bd48fc5343e11c9f3a5fb4e7e159b7",
"testharness"
],
"WebCryptoAPI/generateKey/successes_AES-KW.https.any.js": [
"165159903403f67cc27d29f78d46369eb598811c",
"7fb055fd3d32f9b0f0934f0bcf6e4cc8e914c0bc",
"testharness"
],
"WebCryptoAPI/generateKey/successes_ECDH.https.any.js": [
"525b874eff610c6db8cca7f50ba0c074b8975001",
"e9ac12b43efef8652a12a3a7dfdaf1f6d14c31fc",
"testharness"
],
"WebCryptoAPI/generateKey/successes_ECDSA.https.any.js": [
"2a63f8d0d12987ca2e4c41e5eb28a53741a091f5",
"c1e3ea8f949413099f4d5c9903d4f86ae6b9ddeb",
"testharness"
],
"WebCryptoAPI/generateKey/successes_HMAC.https.any.js": [
"af064fd9cc422c35718d1dcf2f6c861aab7385cc",
"6bc1c27059fca5fd8ec0eacb5a4092affd934aa2",
"testharness"
],
"WebCryptoAPI/generateKey/successes_RSA-OAEP.https.any.js": [
"f82ce4307fea94a097ccdf470b766f110d876b87",
"c18bce1c96c0904d80ed0e8f6c6f52c422bd04cd",
"testharness"
],
"WebCryptoAPI/generateKey/successes_RSA-PSS.https.any.js": [
"8ff33e42d855b7482455ebb3caab5ac311e7cbf5",
"e91f38538a40c448cbeaea5e3188df4a4c02870a",
"testharness"
],
"WebCryptoAPI/generateKey/successes_RSASSA-PKCS1-v1_5.https.any.js": [
"fbbbef333461a7845ea1b3cba2169435c7f82761",
"7a507269004b76a7455cb41e476f69178fed7162",
"testharness"
],
"WebCryptoAPI/getRandomValues.any.js": [

View File

@ -0,0 +1,3 @@
// META: title=WebCryptoAPI: deriveBits() Using ECDH
// META: script=ecdh_bits.js
run_test();

View File

@ -1,4 +0,0 @@
importScripts("/resources/testharness.js");
importScripts("ecdh_bits.js");
run_test();

View File

@ -0,0 +1,3 @@
// META: title=WebCryptoAPI: deriveKey() Using ECDH
// META: script=ecdh_keys.js
run_test();

View File

@ -1,4 +0,0 @@
importScripts("/resources/testharness.js");
importScripts("ecdh_keys.js");
run_test();

View File

@ -0,0 +1,9 @@
// META: title=WebCryptoAPI: deriveBits() and deriveKey() Using HKDF
// META: variant=?1-1000
// META: variant=?1001-2000
// META: variant=?2001-3000
// META: variant=?3001-last
// META: script=/common/subset-tests.js
// META: script=hkdf_vectors.js
// META: script=hkdf.js
run_test();

View File

@ -1,5 +0,0 @@
importScripts("/resources/testharness.js");
importScripts("hkdf_vectors.js");
importScripts("hkdf.js");
run_test();

View File

@ -36,7 +36,7 @@ function run_test() {
var algorithm = {name: "HKDF", salt: salts[saltSize], info: infos[infoSize], hash: hashName};
// Check for correct deriveBits result
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 256)
.then(function(derivation) {
assert_true(equalBuffers(derivation, derivations[derivedKeySize][saltSize][hashName][infoSize]), "Derived correct key");
@ -46,7 +46,7 @@ function run_test() {
}, testName);
// 0 length (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 0)
.then(function(derivation) {
assert_equals(derivation.byteLength, 0, "Derived correctly empty key");
@ -65,7 +65,7 @@ function run_test() {
testName += " using " + derivedKeySize + " derivedKey, " + saltSize + " salt, " + hashName + ", with " + infoSize + " info";
// Test the particular key derivation.
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey(algorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
// Need to export the key to see that the correct bits were set.
@ -85,7 +85,7 @@ function run_test() {
// - illegal name for hash algorithm (NotSupportedError)
var badHash = hashName.substring(0, 3) + hashName.substring(4);
promise_test(function(test) {
subsetTest(promise_test, function(test) {
var badAlgorithm = {name: "HKDF", salt: salts[saltSize], hash: badHash};
return subtle.deriveKey(badAlgorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
@ -96,7 +96,7 @@ function run_test() {
}, testName + " with bad hash name " + badHash);
// - baseKey usages missing "deriveKey" (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey(algorithm, noKey[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
assert_unreached("missing deriveKey usage should have thrown an InvalidAccessError");
@ -106,7 +106,7 @@ function run_test() {
}, testName + " with missing deriveKey usage");
// - baseKey algorithm does not match HKDF (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey(algorithm, wrongKey, derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@ -120,7 +120,7 @@ function run_test() {
// Test various error conditions for deriveBits below:
// missing salt (TypeError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "HKDF", info: infos[infoSize], hash: hashName}, baseKeys[derivedKeySize], 0)
.then(function(derivation) {
assert_equals(derivation.byteLength, 0, "Derived even with missing salt");
@ -130,7 +130,7 @@ function run_test() {
}, testName + " with missing salt");
// missing info (TypeError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "HKDF", salt: salts[saltSize], hash: hashName}, baseKeys[derivedKeySize], 0)
.then(function(derivation) {
assert_equals(derivation.byteLength, 0, "Derived even with missing info");
@ -140,7 +140,7 @@ function run_test() {
}, testName + " with missing info");
// length null (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], null)
.then(function(derivation) {
assert_unreached("null length should have thrown an TypeError");
@ -150,7 +150,7 @@ function run_test() {
}, testName + " with null length");
// length not multiple of 8 (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 44)
.then(function(derivation) {
assert_unreached("non-multiple of 8 length should have thrown an OperationError");
@ -161,7 +161,7 @@ function run_test() {
// - illegal name for hash algorithm (NotSupportedError)
var badHash = hashName.substring(0, 3) + hashName.substring(4);
promise_test(function(test) {
subsetTest(promise_test, function(test) {
var badAlgorithm = {name: "HKDF", salt: salts[saltSize], hash: badHash};
return subtle.deriveBits(badAlgorithm, baseKeys[derivedKeySize], 256)
.then(function(derivation) {
@ -172,7 +172,7 @@ function run_test() {
}, testName + " with bad hash name " + badHash);
// - baseKey usages missing "deriveBits" (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, noBits[derivedKeySize], 256)
.then(function(derivation) {
assert_unreached("missing deriveBits usage should have thrown an InvalidAccessError");
@ -182,7 +182,7 @@ function run_test() {
}, testName + " with missing deriveBits usage");
// - baseKey algorithm does not match HKDF (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, wrongKey, 256)
.then(function(derivation) {
assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@ -202,7 +202,7 @@ function run_test() {
algorithm.info = infos[infoSize];
}
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits(algorithm, baseKeys[derivedKeySize], 256)
.then(function(derivation) {
assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@ -218,7 +218,7 @@ function run_test() {
});
testName += " using " + derivedKeySize + " derivedKey, " + saltSize + " salt, " + nonDigestHash + ", with " + infoSize + " info";
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey(algorithm, baseKeys[derivedKeySize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(derivation) {
assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@ -235,7 +235,7 @@ function run_test() {
done();
}, function(err) {
test(function(test) {
subsetTest(test, function(test) {
assert_unreached("setUpBaseKeys failed with error '" + err.message + "'");
}, "setUpBaseKeys");
done();

View File

@ -0,0 +1,15 @@
// META: title=WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2
// META: timeout=long
// META: variant=?1-1000
// META: variant=?1001-2000
// META: variant=?2001-3000
// META: variant=?3001-4000
// META: variant=?4001-5000
// META: variant=?5001-6000
// META: variant=?6001-7000
// META: variant=?7001-8000
// META: variant=?8001-last
// META: script=/common/subset-tests.js
// META: script=pbkdf2_vectors.js
// META: script=pbkdf2.js
run_test();

View File

@ -1,6 +0,0 @@
// META: timeout=long
importScripts("/resources/testharness.js");
importScripts("pbkdf2_vectors.js");
importScripts("pbkdf2.js");
run_test();

View File

@ -1,4 +1,4 @@
function run_test(testPasswordSize, testSaltSize) {
function run_test() {
// May want to test prefixed implementations.
var subtle = self.crypto.subtle;
@ -27,15 +27,13 @@ function run_test(testPasswordSize, testSaltSize) {
// and number of iterations. The derivations object is structured in
// that way, so navigate it to run tests and compare with correct results.
Object.keys(derivations).forEach(function(passwordSize) {
if (typeof testPasswordSize != 'undefined' && testPasswordSize != passwordSize) return;
Object.keys(derivations[passwordSize]).forEach(function(saltSize) {
if (typeof testSaltSize != 'undefined' && testSaltSize != saltSize) return;
Object.keys(derivations[passwordSize][saltSize]).forEach(function(hashName) {
Object.keys(derivations[passwordSize][saltSize][hashName]).forEach(function(iterations) {
var testName = passwordSize + " password, " + saltSize + " salt, " + hashName + ", with " + iterations + " iterations";
// Check for correct deriveBits result
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
.then(function(derivation) {
assert_true(equalBuffers(derivation, derivations[passwordSize][saltSize][hashName][iterations]), "Derived correct key");
@ -54,7 +52,7 @@ function run_test(testPasswordSize, testSaltSize) {
testName += " using " + passwordSize + " password, " + saltSize + " salt, " + hashName + ", with " + iterations + " iterations";
// Test the particular key derivation.
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
// Need to export the key to see that the correct bits were set.
@ -74,7 +72,7 @@ function run_test(testPasswordSize, testSaltSize) {
// - illegal name for hash algorithm (NotSupportedError)
var badHash = hashName.substring(0, 3) + hashName.substring(4);
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: badHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
assert_unreached("bad hash name should have thrown an NotSupportedError");
@ -84,7 +82,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with bad hash name " + badHash);
// - baseKey usages missing "deriveKey" (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, noKey[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
assert_unreached("missing deriveKey usage should have thrown an InvalidAccessError");
@ -94,7 +92,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with missing deriveKey usage");
// - baseKey algorithm does not match PBKDF2 (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, wrongKey, derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(key) {
assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@ -107,7 +105,7 @@ function run_test(testPasswordSize, testSaltSize) {
// Test various error conditions for deriveBits below:
// length null (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], null)
.then(function(derivation) {
assert_unreached("null length should have thrown an OperationError");
@ -117,7 +115,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with null length");
// 0 length (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 0)
.then(function(derivation) {
assert_unreached("0 length should have thrown an OperationError");
@ -127,7 +125,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with 0 length");
// length not multiple of 8 (OperationError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, baseKeys[passwordSize], 44)
.then(function(derivation) {
assert_unreached("non-multiple of 8 length should have thrown an OperationError");
@ -138,7 +136,7 @@ function run_test(testPasswordSize, testSaltSize) {
// - illegal name for hash algorithm (NotSupportedError)
var badHash = hashName.substring(0, 3) + hashName.substring(4);
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: badHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
.then(function(derivation) {
assert_unreached("bad hash name should have thrown an NotSupportedError");
@ -148,7 +146,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with bad hash name " + badHash);
// - baseKey usages missing "deriveBits" (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, noBits[passwordSize], 256)
.then(function(derivation) {
assert_unreached("missing deriveBits usage should have thrown an InvalidAccessError");
@ -158,7 +156,7 @@ function run_test(testPasswordSize, testSaltSize) {
}, testName + " with missing deriveBits usage");
// - baseKey algorithm does not match PBKDF2 (InvalidAccessError)
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: parseInt(iterations)}, wrongKey, 256)
.then(function(derivation) {
assert_unreached("wrong (ECDH) key should have thrown an InvalidAccessError");
@ -169,7 +167,7 @@ function run_test(testPasswordSize, testSaltSize) {
});
// Check that 0 iterations throws proper error
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: 0}, baseKeys[passwordSize], 256)
.then(function(derivation) {
assert_unreached("0 iterations should have thrown an error");
@ -185,7 +183,7 @@ function run_test(testPasswordSize, testSaltSize) {
});
testName += " using " + passwordSize + " password, " + saltSize + " salt, " + hashName + ", with 0 iterations";
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: hashName, iterations: 0}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(derivation) {
assert_unreached("0 iterations should have thrown an error");
@ -201,7 +199,7 @@ function run_test(testPasswordSize, testSaltSize) {
[1, 1000, 100000].forEach(function(iterations) {
var testName = passwordSize + " password, " + saltSize + " salt, " + nonDigestHash + ", with " + iterations + " iterations";
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveBits({name: "PBKDF2", salt: salts[saltSize], hash: nonDigestHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], 256)
.then(function(derivation) {
assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@ -217,7 +215,7 @@ function run_test(testPasswordSize, testSaltSize) {
});
testName += " using " + passwordSize + " password, " + saltSize + " salt, " + nonDigestHash + ", with " + iterations + " iterations";
promise_test(function(test) {
subsetTest(promise_test, function(test) {
return subtle.deriveKey({name: "PBKDF2", salt: salts[saltSize], hash: nonDigestHash, iterations: parseInt(iterations)}, baseKeys[passwordSize], derivedKeyType.algorithm, true, derivedKeyType.usages)
.then(function(derivation) {
assert_unreached("non-digest algorithm should have thrown an NotSupportedError");
@ -234,7 +232,7 @@ function run_test(testPasswordSize, testSaltSize) {
done();
}, function(err) {
test(function(test) {
subsetTest(test, function(test) {
assert_unreached("setUpBaseKeys failed with error '" + err.message + "'");
}, "setUpBaseKeys");
done();

View File

@ -1,17 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() Using ECDH</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="ecdh_bits.js"></script>
<h1>deriveBits Tests for ECDH</h1>
<div id="log"></div>
<script>
run_test();
</script>

View File

@ -1,17 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI:deriveKey() Using ECDH</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="ecdh_keys.js"></script>
<h1>deriveKey Tests for ECDH</h1>
<div id="log"></div>
<script>
run_test();
</script>

View File

@ -1,19 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using HKDF</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="hkdf_vectors.js"></script>
<script src="hkdf.js"></script>
<h1>deriveBits and deriveKey Tests for HKDF</h1>
<div id="log"></div>
<script>
run_test();
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"empty", //password size
"empty" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"empty", //password size
"long" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"empty", //password size
"short" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"long", //password size
"empty" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"long", //password size
"long" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"long", //password size
"short" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"short", //password size
"empty" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"short", //password size
"long" //salt size
);
</script>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<meta charset=utf-8>
<meta name="timeout" content="long">
<title>WebCryptoAPI: deriveBits() and deriveKey() Using PBKDF2</title>
<link rel="author" title="Charles Engelke" href="mailto:w3c@engelke.com">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveBits">
<link rel="help" href="https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-deriveKey">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="pbkdf2_vectors.js"></script>
<script src="pbkdf2.js"></script>
<h1>deriveBits and deriveKey Tests for PBKDF2</h1>
<div id="log"></div>
<script>
run_test(
"short", //password size
"short" //salt size
);
</script>

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() for Failures
// META: timeout=long
// META: script=../util/helpers.js
// META: script=failures.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: variant=?1-10
// META: variant=?11-20

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: variant=?1-10
// META: variant=?11-20

View File

@ -1,3 +1,4 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: variant=?1-10
// META: variant=?11-20