diff --git a/.dprint.json b/.dprint.json index a0f502b943..1f1ff51e86 100644 --- a/.dprint.json +++ b/.dprint.json @@ -36,9 +36,9 @@ "tools/wpt/manifest.json" ], "plugins": [ - "https://plugins.dprint.dev/typescript-0.50.0.wasm", - "https://plugins.dprint.dev/json-0.12.1.wasm", - "https://plugins.dprint.dev/markdown-0.9.2.wasm", - "https://plugins.dprint.dev/toml-0.4.1.wasm" + "https://plugins.dprint.dev/typescript-0.53.0.wasm", + "https://plugins.dprint.dev/json-0.12.3.wasm", + "https://plugins.dprint.dev/markdown-0.9.6.wasm", + "https://plugins.dprint.dev/toml-0.5.1.wasm" ] } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b0833e9b8..4cf411c9e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: # stay mostly up-to-date in situations where a single job fails due to # e.g. a flaky test. # Don't fast-fail on tag build because publishing binaries shouldn't be - # prevented if if any of the stages fails (which can be a false negative). + # prevented if any of the stages fail (which can be a false negative). fail-fast: ${{ github.event_name == 'pull_request' || (github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/')) }} diff --git a/Cargo.lock b/Cargo.lock index f6c332b8cc..7d897c2066 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -563,6 +563,7 @@ dependencies = [ "deno_doc", "deno_fetch", "deno_ffi", + "deno_graph", "deno_http", "deno_lint", "deno_net", @@ -713,10 +714,12 @@ dependencies = [ [[package]] name = "deno_doc" -version = "0.10.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a543b39492532835f00b94758cf2b731b50c5168e8059608246aaf8e02c229" +checksum = "23c860b2359120f1565aafd4e9e5eddf7fcbdb70dc55a97719c00d327570ffce" dependencies = [ + "cfg-if 1.0.0", + "deno_graph", "futures", "lazy_static", "regex", @@ -755,6 +758,28 @@ dependencies = [ "serde", ] +[[package]] +name = "deno_graph" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6c70108e13d63f6fa51975f0557d5c0fec80a247c3e51f2a215ef6614b53dc" +dependencies = [ + "anyhow", + "cfg-if 1.0.0", + "data-url", + "futures", + "lazy_static", + "regex", + "ring", + "serde", + "serde_json", + "swc_common", + "swc_ecmascript", + "termcolor", + "text_lines", + "url", +] + [[package]] name = "deno_http" version = "0.7.0" @@ -772,9 +797,9 @@ dependencies = [ [[package]] name = "deno_lint" -version = "0.12.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9f741b34ff43cdf67f3c43d5b7824a4b6c330d1cfb644b1420d3ca68a1787d" +checksum = "c0cbb4f64c7884703198d8fb0f67a900e4dfbc456efaabebc419a4d3612da064" dependencies = [ "anyhow", "derive_more", @@ -1043,9 +1068,9 @@ dependencies = [ [[package]] name = "dprint-plugin-typescript" -version = "0.50.2" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e1bd07c904835664ed50d0c04ecd5a4f2259a156e3cd2ae5ceeab02e0c9257" +checksum = "63674b5e577e3244436463aa8ab59947aba0a3d5b4de6d181c6bd7a3e190b336" dependencies = [ "dprint-core", "dprint-swc-ecma-ast-view", @@ -1057,9 +1082,9 @@ dependencies = [ [[package]] name = "dprint-swc-ecma-ast-view" -version = "0.25.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31911862aff0e98a1864984450f842b108aa0f4e95aa314539605b093774d329" +checksum = "c44a27f32f2bc9347d08e4b8f47db055f4df9b8d9e1236cc2036a9e95707ba7b" dependencies = [ "bumpalo", "fnv", @@ -1067,6 +1092,7 @@ dependencies = [ "swc_atoms", "swc_common", "swc_ecmascript", + "text_lines", ] [[package]] @@ -1334,9 +1360,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ "futures-channel", "futures-core", @@ -1349,9 +1375,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", "futures-sink", @@ -1359,15 +1385,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-executor" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ "futures-core", "futures-task", @@ -1376,15 +1402,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-macro" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ "autocfg 1.0.1", "proc-macro-hack", @@ -1395,21 +1421,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] name = "futures-task" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-util" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ "autocfg 1.0.1", "futures-channel", @@ -2729,14 +2755,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -2925,9 +2950,9 @@ dependencies = [ [[package]] name = "rusty_v8" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced8bcb4fdc4820792030377a71cedbde5b49b340c2174ee0ea368ef244bf8f1" +checksum = "81fc062fb861b82fa7ac4e1a009da873279a10180d2133574e4219d870038c1c" dependencies = [ "bitflags", "fslock", @@ -3074,18 +3099,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.129" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1f72836d2aa753853178eda473a3b9d8e4eefdaf20523b919677e6de489f8f1" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.129" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57ae87ad533d9a56427558b516d0adac283614e347abf85b0dc0cbbf0a249f3" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2 1.0.28", "quote 1.0.9", @@ -3094,9 +3119,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" +checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" dependencies = [ "indexmap", "itoa", @@ -3129,9 +3154,9 @@ dependencies = [ [[package]] name = "serde_v8" -version = "0.9.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ce7662cda194ff443bddf146c952e83075889590838cd41df768fba7d152d0" +checksum = "ae88e9b49b6d2d7c7eae9fd270111e3728ab40b421d57cf58051ce84f9fe560f" dependencies = [ "rusty_v8", "serde", @@ -3353,9 +3378,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.50.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "543c7f91128363277dfbfbe0ac574e654b3671717f56f7ba360f1994e020a495" +checksum = "1e00938122669f1358a570dad80626ac9007053967aa3e4066440c7946609784" dependencies = [ "ahash 0.7.4", "anyhow", @@ -3382,9 +3407,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.11.7" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2bcafc4aad3933ee8e00a560521dcf77b39f66713a073de19841c1bd2c4c49c" +checksum = "0a873d7284ebc53a9051f41068dc2cb979e399a4a1fab25d9c0dee9f8db4d1f5" dependencies = [ "ahash 0.7.4", "ast_node", @@ -3407,9 +3432,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.49.5" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f135a9c200f058d5bec4e63b34712f412db0d2e894bf22b8b44b0740be6607" +checksum = "0541aee098b52870ef6181deae2fbe3f3025605f2e6f27b3993e6f66607a46a1" dependencies = [ "is-macro", "num-bigint", @@ -3421,9 +3446,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.66.3" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "582151b33ccf0b17981572d0d8082c8e3259ffbab21d47078f23a68d65e9e8a0" +checksum = "58e7b482064bc6386168de843b85fddb6b70fc2cd86323962821642a253fa427" dependencies = [ "bitflags", "num-bigint", @@ -3450,9 +3475,9 @@ dependencies = [ [[package]] name = "swc_ecma_dep_graph" -version = "0.34.1" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f04ff0de9a70fa06a23e85fddd2dc077fe840905635e9ecc6211169cdf6717d" +checksum = "630fe1a1464a64c64cdc9ca8c0d0a8358c66e1ca79cb8acf577e429dff56a104" dependencies = [ "swc_atoms", "swc_common", @@ -3462,11 +3487,13 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.12.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05e3b054b690e610384fc8f5d244182cbd62691423755ca1c4b05cb0bfa6b46" +checksum = "2e9796ff40909d124ac382bf89fd94bb3a108e1f6a5c7786e3dd54b9fb579dff" dependencies = [ "anyhow", + "fxhash", + "log", "swc_atoms", "swc_common", "swc_ecma_ast", @@ -3475,9 +3502,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.66.6" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e57597bc7e16e815f1634f84b9e77dedba2f3fc56ba7168d55dbeb6546e902" +checksum = "c7eb1f1c556118750c7871bef5c9f37cd9cac9f5d6479b922aa026cebf1fac18" dependencies = [ "either", "enum_kind", @@ -3496,9 +3523,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.63.0" +version = "0.69.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f53f948b9fb8a315b1e0d5f121b8c88786feb11b7f01f8406c16301e0ad2227" +checksum = "9214e4c1349c7cbdaa364fb9f67c4db3b028425be605e05fb7c387af1e788113" dependencies = [ "swc_atoms", "swc_common", @@ -3516,9 +3543,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.26.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db308cf88089d13235d103a53a6c5c670457ad0203c41712f26d19320c851b3f" +checksum = "3b0aa724a347be8c2a14e3debdec192531a865388595114d7685f123e9780731" dependencies = [ "fxhash", "once_cell", @@ -3535,9 +3562,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.12.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32671ce21128abec95aae6dbb7aa03f6bc117de0ff3b3cb70022480f18fd17a9" +checksum = "5f55f90a828f89127ebf063e60b3ad97c3e6c339999e9304e350f72cd3187e5c" dependencies = [ "swc_atoms", "swc_common", @@ -3549,9 +3576,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.33.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47dc701cc94f8b4b8d2b4b79b91457b91b565edffe67e2a497adcb3f48b716fe" +checksum = "c28f88330eed13b1e58522ae42acd09d516ed65d3bf80b64d0bc794ffc4627b5" dependencies = [ "dashmap", "fxhash", @@ -3571,9 +3598,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.30.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2ce24868d4a97bcd6f38ab7e96798c16a1efa821564e32d07d137e3d904fc7" +checksum = "8f926eb4c5e1526f52da2b56d66649d64a0f77da417c30d144789fa7eb741007" dependencies = [ "either", "fxhash", @@ -3591,9 +3618,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.31.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7174a06bfb2f507eb35dbb919679e3df73fc41f152261cbf191f1afe5e14823" +checksum = "2ce5289df2c034b45edf839cc3a356dcd035102f5e591b1eb5c37204e3007006" dependencies = [ "base64 0.13.0", "dashmap", @@ -3614,9 +3641,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.32.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6fe1a79c928e9844f199365746b482accb6ca7a25a9d0d8b6b1bf3277a357ec" +checksum = "86c22e8077c8fa6225d5d2ab4fcef223d155c1fa30304c06aaf0e6b6934396f3" dependencies = [ "fxhash", "serde", @@ -3631,9 +3658,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.41.4" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50339f726a63cde28f74ae2b4b98949bced74841ba7e02a135b915063c8e1566" +checksum = "7755b2d35e93fc371186335d0cc65b1cc647c113b60e1a44ab8f679bf09521d6" dependencies = [ "once_cell", "scoped-tls", @@ -3646,9 +3673,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.35.2" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51ce688b7c984d0325261edb3ced4195790c7ac76982e269d2114ec04e3ae7c" +checksum = "253528a42ad8a646ff7904e3770464f014331f7647467166a8ad92725910d85c" dependencies = [ "num-bigint", "swc_atoms", @@ -3659,9 +3686,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.52.1" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c0f3969671267e85a7a387e2db40d01c0e7e6e979d7fd27bdeef501a2f6d14" +checksum = "2cb79d3e236ce0118e370f75a37a85ccc527338cf8d4697a7d23419711a6169f" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -3821,6 +3848,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "288cb548dbe72b652243ea797201f3d481a0609a967980fcc5b2315ea811560a" +[[package]] +name = "text_lines" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "116279ecd8fa26fbdcf20c79ee6f85a5ce325a953486e11e71c51670bdaa308f" + [[package]] name = "textwrap" version = "0.11.0" @@ -3850,15 +3883,6 @@ dependencies = [ "syn 1.0.65", ] -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - [[package]] name = "time" version = "0.1.44" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 7be78ab9fa..05c5fa76b0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -44,8 +44,9 @@ winres = "0.1.11" [dependencies] deno_core = { version = "0.98.0", path = "../core" } -deno_doc = "0.10.0" -deno_lint = "0.12.0" +deno_doc = "0.12.1" +deno_graph = "0.3.1" +deno_lint = { version = "0.14.0", features = ["docs"] } deno_runtime = { version = "0.24.0", path = "../runtime" } deno_tls = { version = "0.3.0", path = "../ext/tls" } @@ -57,7 +58,7 @@ data-url = "0.1.0" dissimilar = "1.0.2" dprint-plugin-json = "0.12.3" dprint-plugin-markdown = "0.9.6" -dprint-plugin-typescript = "0.50.2" +dprint-plugin-typescript = "0.53.0" encoding_rs = "0.8.28" env_logger = "0.8.4" fancy-regex = "0.7.1" @@ -83,9 +84,9 @@ semver-parser = "0.10.2" serde = { version = "1.0.129", features = ["derive"] } shell-escape = "0.1.5" sourcemap = "6.0.1" -swc_bundler = "0.50.0" -swc_common = { version = "0.11.7", features = ["sourcemap"] } -swc_ecmascript = { version = "0.52.1", features = ["codegen", "dep_graph", "parser", "proposal", "react", "transforms", "typescript", "visit"] } +swc_bundler = "0.56.0" +swc_common = { version = "0.11.9", features = ["sourcemap"] } +swc_ecmascript = { version = "0.60.0", features = ["codegen", "dep_graph", "parser", "proposal", "react", "transforms", "typescript", "visit"] } tempfile = "3.2.0" termcolor = "1.1.2" text-size = "1.1.0" diff --git a/cli/bench/deno_common.js b/cli/bench/deno_common.js index 42f447e3c2..1e3034c275 100644 --- a/cli/bench/deno_common.js +++ b/cli/bench/deno_common.js @@ -6,13 +6,24 @@ function benchSync(name, n, innerLoop) { innerLoop(i); } const t2 = Date.now(); + console.log(benchStats(name, n, t1, t2)); +} + +async function benchAsync(name, n, innerLoop) { + const t1 = Date.now(); + for (let i = 0; i < n; i++) { + await innerLoop(i); + } + const t2 = Date.now(); + console.log(benchStats(name, n, t1, t2)); +} + +function benchStats(name, n, t1, t2) { const dt = (t2 - t1) / 1e3; const r = n / dt; const ns = Math.floor(dt / n * 1e9); - console.log( - `${name}:${" ".repeat(20 - name.length)}\t` + - `n = ${n}, dt = ${dt.toFixed(3)}s, r = ${r.toFixed(0)}/s, t = ${ns}ns/op`, - ); + return `${name}:${" ".repeat(20 - name.length)}\t` + + `n = ${n}, dt = ${dt.toFixed(3)}s, r = ${r.toFixed(0)}/s, t = ${ns}ns/op`; } function benchUrlParse() { @@ -52,7 +63,15 @@ function benchReadZero() { Deno.close(file.rid); } -function main() { +function benchRead128k() { + return benchAsync( + "read_128k", + 5e4, + () => Deno.readFile("./cli/bench/fixtures/128k.bin"), + ); +} + +async function main() { // v8 builtin that's close to the upper bound non-NOPs benchDateNow(); // A very lightweight op, that should be highly optimizable @@ -63,5 +82,6 @@ function main() { // IO ops benchReadZero(); benchWriteNull(); + await benchRead128k(); } -main(); +await main(); diff --git a/cli/bench/deno_http_native.js b/cli/bench/deno_http_native.js index 2b576255ee..d68f8ea81e 100644 --- a/cli/bench/deno_http_native.js +++ b/cli/bench/deno_http_native.js @@ -12,11 +12,8 @@ for await (const conn of listener) { (async () => { const requests = Deno.serveHttp(conn); for await (const { respondWith } of requests) { - try { - respondWith(new Response(body)); - } catch { - // Ignore. - } + respondWith(new Response(body)) + .catch((e) => console.log(e)); } })(); } diff --git a/cli/bench/fixtures/128k.bin b/cli/bench/fixtures/128k.bin new file mode 100644 index 0000000000..300d9726ba Binary files /dev/null and b/cli/bench/fixtures/128k.bin differ diff --git a/cli/build.rs b/cli/build.rs index 22fb152225..7d131de86d 100644 --- a/cli/build.rs +++ b/cli/build.rs @@ -69,10 +69,6 @@ fn create_compiler_snapshot( deno_broadcast_channel::get_declaration(), ); op_crate_libs.insert("deno.net", deno_net::get_declaration()); - op_crate_libs - .insert("deno.net_unstable", deno_net::get_unstable_declaration()); - op_crate_libs - .insert("deno.http_unstable", deno_http::get_unstable_declaration()); // ensure we invalidate the build properly. for (_, path) in op_crate_libs.iter() { @@ -320,14 +316,6 @@ fn main() { "cargo:rustc-env=DENO_NET_LIB_PATH={}", deno_net::get_declaration().display() ); - println!( - "cargo:rustc-env=DENO_NET_UNSTABLE_LIB_PATH={}", - deno_net::get_unstable_declaration().display() - ); - println!( - "cargo:rustc-env=DENO_HTTP_UNSTABLE_LIB_PATH={}", - deno_http::get_unstable_declaration().display() - ); println!("cargo:rustc-env=TARGET={}", env::var("TARGET").unwrap()); println!("cargo:rustc-env=PROFILE={}", env::var("PROFILE").unwrap()); diff --git a/cli/dts/lib.deno.unstable.d.ts b/cli/dts/lib.deno.unstable.d.ts index ead4609c6d..3ee628a8b6 100644 --- a/cli/dts/lib.deno.unstable.d.ts +++ b/cli/dts/lib.deno.unstable.d.ts @@ -2,8 +2,6 @@ /// /// -/// -/// declare namespace Deno { /** @@ -1094,6 +1092,305 @@ declare namespace Deno { write?: "inherit" | boolean | Array; }; } + + export interface WebSocketUpgrade { + response: Response; + socket: WebSocket; + } + + export interface UpgradeWebSocketOptions { + protocol?: string; + } + + /** **UNSTABLE**: new API, yet to be vetted. + * + * Used to upgrade an incoming HTTP request to a WebSocket. + * + * Given a request, returns a pair of WebSocket and Response. The original + * request must be responded to with the returned response for the websocket + * upgrade to be successful. + * + * ```ts + * const conn = await Deno.connect({ port: 80, hostname: "127.0.0.1" }); + * const httpConn = Deno.serveHttp(conn); + * const e = await httpConn.nextRequest(); + * if (e) { + * const { socket, response } = Deno.upgradeWebSocket(e.request); + * socket.onopen = () => { + * socket.send("Hello World!"); + * }; + * socket.onmessage = (e) => { + * console.log(e.data); + * socket.close(); + * }; + * socket.onclose = () => console.log("WebSocket has been closed."); + * socket.onerror = (e) => console.error("WebSocket error:", e); + * e.respondWith(response); + * } + * ``` + * + * If the request body is disturbed (read from) before the upgrade is + * completed, upgrading fails. + * + * This operation does not yet consume the request or open the websocket. This + * only happens once the returned response has been passed to `respondWith`. + */ + export function upgradeWebSocket( + request: Request, + options?: UpgradeWebSocketOptions, + ): WebSocketUpgrade; + + /** The type of the resource record. + * Only the listed types are supported currently. */ + export type RecordType = + | "A" + | "AAAA" + | "ANAME" + | "CNAME" + | "MX" + | "PTR" + | "SRV" + | "TXT"; + + export interface ResolveDnsOptions { + /** The name server to be used for lookups. + * If not specified, defaults to the system configuration e.g. `/etc/resolv.conf` on Unix. */ + nameServer?: { + /** The IP address of the name server */ + ipAddr: string; + /** The port number the query will be sent to. + * If not specified, defaults to 53. */ + port?: number; + }; + } + + /** If `resolveDns` is called with "MX" record type specified, it will return an array of this interface. */ + export interface MXRecord { + preference: number; + exchange: string; + } + + /** If `resolveDns` is called with "SRV" record type specified, it will return an array of this interface. */ + export interface SRVRecord { + priority: number; + weight: number; + port: number; + target: string; + } + + export function resolveDns( + query: string, + recordType: "A" | "AAAA" | "ANAME" | "CNAME" | "PTR", + options?: ResolveDnsOptions, + ): Promise; + + export function resolveDns( + query: string, + recordType: "MX", + options?: ResolveDnsOptions, + ): Promise; + + export function resolveDns( + query: string, + recordType: "SRV", + options?: ResolveDnsOptions, + ): Promise; + + export function resolveDns( + query: string, + recordType: "TXT", + options?: ResolveDnsOptions, + ): Promise; + + /** ** UNSTABLE**: new API, yet to be vetted. + * + * Performs DNS resolution against the given query, returning resolved records. + * Fails in the cases such as: + * - the query is in invalid format + * - the options have an invalid parameter, e.g. `nameServer.port` is beyond the range of 16-bit unsigned integer + * - timed out + * + * ```ts + * const a = await Deno.resolveDns("example.com", "A"); + * + * const aaaa = await Deno.resolveDns("example.com", "AAAA", { + * nameServer: { ipAddr: "8.8.8.8", port: 1234 }, + * }); + * ``` + * + * Requires `allow-net` permission. + */ + export function resolveDns( + query: string, + recordType: RecordType, + options?: ResolveDnsOptions, + ): Promise; + + /** **UNSTABLE**: new API, yet to be vetted. + * + * A generic transport listener for message-oriented protocols. */ + export interface DatagramConn extends AsyncIterable<[Uint8Array, Addr]> { + /** **UNSTABLE**: new API, yet to be vetted. + * + * Waits for and resolves to the next message to the `UDPConn`. */ + receive(p?: Uint8Array): Promise<[Uint8Array, Addr]>; + /** UNSTABLE: new API, yet to be vetted. + * + * Sends a message to the target. */ + send(p: Uint8Array, addr: Addr): Promise; + /** UNSTABLE: new API, yet to be vetted. + * + * Close closes the socket. Any pending message promises will be rejected + * with errors. */ + close(): void; + /** Return the address of the `UDPConn`. */ + readonly addr: Addr; + [Symbol.asyncIterator](): AsyncIterableIterator<[Uint8Array, Addr]>; + } + + export interface UnixListenOptions { + /** A Path to the Unix Socket. */ + path: string; + } + + /** **UNSTABLE**: new API, yet to be vetted. + * + * Listen announces on the local transport address. + * + * ```ts + * const listener = Deno.listen({ path: "/foo/bar.sock", transport: "unix" }) + * ``` + * + * Requires `allow-read` and `allow-write` permission. */ + export function listen( + options: UnixListenOptions & { transport: "unix" }, + ): Listener; + + /** **UNSTABLE**: new API, yet to be vetted + * + * Listen announces on the local transport address. + * + * ```ts + * const listener1 = Deno.listenDatagram({ + * port: 80, + * transport: "udp" + * }); + * const listener2 = Deno.listenDatagram({ + * hostname: "golang.org", + * port: 80, + * transport: "udp" + * }); + * ``` + * + * Requires `allow-net` permission. */ + export function listenDatagram( + options: ListenOptions & { transport: "udp" }, + ): DatagramConn; + + /** **UNSTABLE**: new API, yet to be vetted + * + * Listen announces on the local transport address. + * + * ```ts + * const listener = Deno.listenDatagram({ + * path: "/foo/bar.sock", + * transport: "unixpacket" + * }); + * ``` + * + * Requires `allow-read` and `allow-write` permission. */ + export function listenDatagram( + options: UnixListenOptions & { transport: "unixpacket" }, + ): DatagramConn; + + export interface UnixConnectOptions { + transport: "unix"; + path: string; + } + + /** **UNSTABLE**: The unix socket transport is unstable as a new API yet to + * be vetted. The TCP transport is considered stable. + * + * Connects to the hostname (default is "127.0.0.1") and port on the named + * transport (default is "tcp"), and resolves to the connection (`Conn`). + * + * ```ts + * const conn1 = await Deno.connect({ port: 80 }); + * const conn2 = await Deno.connect({ hostname: "192.0.2.1", port: 80 }); + * const conn3 = await Deno.connect({ hostname: "[2001:db8::1]", port: 80 }); + * const conn4 = await Deno.connect({ hostname: "golang.org", port: 80, transport: "tcp" }); + * const conn5 = await Deno.connect({ path: "/foo/bar.sock", transport: "unix" }); + * ``` + * + * Requires `allow-net` permission for "tcp" and `allow-read` for "unix". */ + export function connect( + options: ConnectOptions | UnixConnectOptions, + ): Promise; + + export interface ConnectTlsClientCertOptions { + /** PEM formatted client certificate chain. */ + certChain: string; + /** PEM formatted (RSA or PKCS8) private key of client certificate. */ + privateKey: string; + } + + /** **UNSTABLE** New API, yet to be vetted. + * + * Create a TLS connection with an attached client certificate. + * + * ```ts + * const conn = await Deno.connectTls({ + * hostname: "deno.land", + * port: 443, + * certChain: "---- BEGIN CERTIFICATE ----\n ...", + * privateKey: "---- BEGIN PRIVATE KEY ----\n ...", + * }); + * ``` + * + * Requires `allow-net` permission. + */ + export function connectTls( + options: ConnectTlsOptions & ConnectTlsClientCertOptions, + ): Promise; + + export interface StartTlsOptions { + /** A literal IP address or host name that can be resolved to an IP address. + * If not specified, defaults to `127.0.0.1`. */ + hostname?: string; + /** Server certificate file. */ + certFile?: string; + } + + /** **UNSTABLE**: new API, yet to be vetted. + * + * Start TLS handshake from an existing connection using + * an optional cert file, hostname (default is "127.0.0.1"). The + * cert file is optional and if not included Mozilla's root certificates will + * be used (see also https://github.com/ctz/webpki-roots for specifics) + * Using this function requires that the other end of the connection is + * prepared for TLS handshake. + * + * ```ts + * const conn = await Deno.connect({ port: 80, hostname: "127.0.0.1" }); + * const tlsConn = await Deno.startTls(conn, { certFile: "./certs/my_custom_root_CA.pem", hostname: "localhost" }); + * ``` + * + * Requires `allow-net` permission. + */ + export function startTls( + conn: Conn, + options?: StartTlsOptions, + ): Promise; + + export interface ListenTlsOptions { + /** **UNSTABLE**: new API, yet to be vetted. + * + * Application-Layer Protocol Negotiation (ALPN) protocols to announce to + * the client. If not specified, no ALPN extension will be included in the + * TLS handshake. + */ + alpnProtocols?: string[]; + } } declare function fetch( diff --git a/cli/file_fetcher.rs b/cli/file_fetcher.rs index a1729825f1..17bbb76f0a 100644 --- a/cli/file_fetcher.rs +++ b/cli/file_fetcher.rs @@ -56,6 +56,8 @@ pub struct File { /// The _final_ specifier for the file. The requested specifier and the final /// specifier maybe different for remote files that have been redirected. pub specifier: ModuleSpecifier, + + pub maybe_headers: Option>, } /// Simple struct implementing in-process caching to prevent multiple @@ -137,6 +139,7 @@ fn fetch_local(specifier: &ModuleSpecifier) -> Result { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } @@ -274,6 +277,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: Some(headers.clone()), }) } @@ -365,6 +369,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } @@ -426,6 +431,7 @@ impl FileFetcher { media_type, source, specifier: specifier.clone(), + maybe_headers: None, }) } /// Asynchronously fetch remote source file specified by the URL following @@ -894,6 +900,7 @@ mod tests { media_type: MediaType::TypeScript, source: "some source code".to_string(), specifier: specifier.clone(), + maybe_headers: None, }; file_fetcher.insert_cached(file.clone()); diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs index 17fdf5d4c1..4c5f1fea7e 100644 --- a/cli/lsp/analysis.rs +++ b/cli/lsp/analysis.rs @@ -120,12 +120,12 @@ impl Reference { fn as_lsp_range(range: &deno_lint::diagnostic::Range) -> Range { Range { start: Position { - line: (range.start.line - 1) as u32, - character: range.start.col as u32, + line: range.start.line_index as u32, + character: range.start.column_index as u32, }, end: Position { - line: (range.end.line - 1) as u32, - character: range.end.col as u32, + line: range.end.line_index as u32, + character: range.end.column_index as u32, }, } } @@ -1172,13 +1172,13 @@ mod tests { fn test_as_lsp_range() { let fixture = deno_lint::diagnostic::Range { start: deno_lint::diagnostic::Position { - line: 1, - col: 2, + line_index: 0, + column_index: 2, byte_pos: 23, }, end: deno_lint::diagnostic::Position { - line: 2, - col: 0, + line_index: 1, + column_index: 0, byte_pos: 33, }, }; diff --git a/cli/main.rs b/cli/main.rs index 8de1f1fc51..b68539ad82 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -358,8 +358,6 @@ pub fn get_types(unstable: bool) -> String { if unstable { types.push(crate::tsc::UNSTABLE_NS_LIB); - types.push(crate::tsc::DENO_NET_UNSTABLE_LIB); - types.push(crate::tsc::DENO_HTTP_UNSTABLE_LIB); } types.join("\n") @@ -568,6 +566,7 @@ async fn eval_command( }, source: String::from_utf8(source_code)?, specifier: main_module.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache @@ -817,6 +816,7 @@ async fn run_from_stdin(flags: Flags) -> Result<(), AnyError> { media_type: MediaType::TypeScript, source: String::from_utf8(source)?, specifier: main_module.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache // to allow module access by TS compiler diff --git a/cli/tests/integration/test_tests.rs b/cli/tests/integration/test_tests.rs index 971e756a91..d9d1eed45b 100644 --- a/cli/tests/integration/test_tests.rs +++ b/cli/tests/integration/test_tests.rs @@ -67,6 +67,12 @@ itest!(doc { output: "test/doc.out", }); +itest!(doc_only { + args: "test --doc --allow-all test/doc_only", + exit_code: 0, + output: "test/doc_only.out", +}); + itest!(markdown { args: "test --doc --allow-all test/markdown.md", exit_code: 1, diff --git a/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out b/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out index f1a5077d8d..ac30268268 100644 --- a/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out +++ b/cli/tests/testdata/060_deno_doc_displays_all_overloads_in_details_view.ts.out @@ -1,12 +1,12 @@ -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:3:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:3:2 function test(name: string, fn: Function): void -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:4:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:4:2 function test(options: object): void -Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:5:2 +Defined in [WILDCARD]/060_deno_doc_displays_all_overloads_in_details_view.ts:5:2 function test(name: string | object, fn?: Function): void diff --git a/cli/tests/testdata/bundle/fixture11.out b/cli/tests/testdata/bundle/fixture11.out index d143e8723b..4f333a513f 100644 --- a/cli/tests/testdata/bundle/fixture11.out +++ b/cli/tests/testdata/bundle/fixture11.out @@ -2,10 +2,10 @@ function a() { console.log("a"); } var O1; -(function(O1) { - O1[O1["A"] = 0] = "A"; - O1[O1["B"] = 1] = "B"; - O1[O1["C"] = 2] = "C"; +(function(O) { + O[O["A"] = 0] = "A"; + O[O["B"] = 1] = "B"; + O[O["C"] = 2] = "C"; })(O1 || (O1 = { })); export { O1 as O }; diff --git a/cli/tests/testdata/doc/types_header.out b/cli/tests/testdata/doc/types_header.out index ccff1a373d..c7eda2d873 100644 --- a/cli/tests/testdata/doc/types_header.out +++ b/cli/tests/testdata/doc/types_header.out @@ -1,6 +1,6 @@ Download http://127.0.0.1:4545/xTypeScriptTypes.js Download http://127.0.0.1:4545/xTypeScriptTypes.d.ts -Defined in http://127.0.0.1:4545/xTypeScriptTypes.d.ts:1:0 +Defined in http://127.0.0.1:4545/xTypeScriptTypes.d.ts:1:0 const foo: "foo" diff --git a/cli/tests/testdata/doc/types_hint.out b/cli/tests/testdata/doc/types_hint.out index 7eb05faed8..dd975360a5 100644 --- a/cli/tests/testdata/doc/types_hint.out +++ b/cli/tests/testdata/doc/types_hint.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 +Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 const foo: string An exported value. diff --git a/cli/tests/testdata/doc/types_ref.out b/cli/tests/testdata/doc/types_ref.out index 7eb05faed8..dd975360a5 100644 --- a/cli/tests/testdata/doc/types_ref.out +++ b/cli/tests/testdata/doc/types_ref.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 +Defined in [WILDCARD]/type_definitions/foo.d.ts:2:0 const foo: string An exported value. diff --git a/cli/tests/testdata/doc/use_import_map.out b/cli/tests/testdata/doc/use_import_map.out index 0b27ccf186..82de4dbb00 100644 --- a/cli/tests/testdata/doc/use_import_map.out +++ b/cli/tests/testdata/doc/use_import_map.out @@ -1,4 +1,4 @@ -Defined in [WILDCARD]/doc/module/fun.js:2:0 +Defined in [WILDCARD]/doc/module/fun.js:2:0 function fun(_a, _b) This is some documentation diff --git a/cli/tests/testdata/lint/expected_json.out b/cli/tests/testdata/lint/expected_json.out index dbeb8039b7..9af79ce3d3 100644 --- a/cli/tests/testdata/lint/expected_json.out +++ b/cli/tests/testdata/lint/expected_json.out @@ -58,7 +58,7 @@ "errors": [ { "file_path": "[WILDCARD]malformed.js", - "message": "Expected }, got at [WILDCARD]malformed.js:4:15" + "message": "Expected }, got at [WILDCARD]malformed.js:4:16" } ] } diff --git a/cli/tests/testdata/test/doc_only.out b/cli/tests/testdata/test/doc_only.out new file mode 100644 index 0000000000..c2a91cae75 --- /dev/null +++ b/cli/tests/testdata/test/doc_only.out @@ -0,0 +1,5 @@ +Check [WILDCARD]/test/doc_only/mod.ts$2-5.ts +running 0 tests from [WILDCARD]/test/doc_only/mod.ts + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ([WILDCARD]) + diff --git a/cli/tests/testdata/test/doc_only/mod.ts b/cli/tests/testdata/test/doc_only/mod.ts new file mode 100644 index 0000000000..467d850a27 --- /dev/null +++ b/cli/tests/testdata/test/doc_only/mod.ts @@ -0,0 +1,10 @@ +/** + * ```ts + * import "./mod.ts"; + * ``` + */ +Deno.test("unreachable", function () { + throw new Error( + "modules that don't end with _test are scanned for documentation tests only should not be executed", + ); +}); diff --git a/cli/tests/testdata/workers/deno_worker.ts b/cli/tests/testdata/workers/deno_worker.ts index 2a29c8c4df..a4dca15068 100644 --- a/cli/tests/testdata/workers/deno_worker.ts +++ b/cli/tests/testdata/workers/deno_worker.ts @@ -1,7 +1,16 @@ +import { assert } from "../../../../test_util/std/testing/asserts.ts"; + onmessage = function (e) { if (typeof self.Deno === "undefined") { throw new Error("Deno namespace not available in worker"); } + assert(!Object.isFrozen(self.Deno)); + + const desc = Object.getOwnPropertyDescriptor(self, "Deno"); + assert(desc); + assert(desc.configurable); + assert(!desc.writable); + postMessage(e.data); }; diff --git a/cli/tests/unit/event_target_test.ts b/cli/tests/unit/event_target_test.ts index 0d0d891544..a6c942773e 100644 --- a/cli/tests/unit/event_target_test.ts +++ b/cli/tests/unit/event_target_test.ts @@ -1,4 +1,5 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +// deno-lint-ignore-file no-window-prefix import { assertEquals, unitTest } from "./test_util.ts"; unitTest(function addEventListenerTest() { diff --git a/cli/tests/unit/globals_test.ts b/cli/tests/unit/globals_test.ts index 0051dce490..d989ab54a9 100644 --- a/cli/tests/unit/globals_test.ts +++ b/cli/tests/unit/globals_test.ts @@ -1,4 +1,5 @@ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +// deno-lint-ignore-file no-window-prefix import { assert, unitTest } from "./test_util.ts"; unitTest(function globalThisExists() { diff --git a/cli/tests/unit/webcrypto_test.ts b/cli/tests/unit/webcrypto_test.ts index 0e4b17b9ae..475efde6c0 100644 --- a/cli/tests/unit/webcrypto_test.ts +++ b/cli/tests/unit/webcrypto_test.ts @@ -243,22 +243,45 @@ unitTest(async function testSignRSASSAKey() { assert(signature); }); +// deno-fmt-ignore +const rawKey = new Uint8Array([ + 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16 +]); + +const jwk: JsonWebKey = { + kty: "oct", + // unpadded base64 for rawKey. + k: "AQIDBAUGBwgJCgsMDQ4PEA", + alg: "HS256", + ext: true, + "key_ops": ["sign"], +}; + unitTest(async function subtleCryptoHmacImportExport() { - // deno-fmt-ignore - const rawKey = new Uint8Array([ - 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16 - ]); - const key = await crypto.subtle.importKey( + const key1 = await crypto.subtle.importKey( "raw", rawKey, { name: "HMAC", hash: "SHA-256" }, true, ["sign"], ); - const actual = await crypto.subtle.sign( + const key2 = await crypto.subtle.importKey( + "jwk", + jwk, + { name: "HMAC", hash: "SHA-256" }, + true, + ["sign"], + ); + const actual1 = await crypto.subtle.sign( { name: "HMAC" }, - key, + key1, + new Uint8Array([1, 2, 3, 4]), + ); + + const actual2 = await crypto.subtle.sign( + { name: "HMAC" }, + key2, new Uint8Array([1, 2, 3, 4]), ); // deno-fmt-ignore @@ -269,10 +292,17 @@ unitTest(async function subtleCryptoHmacImportExport() { 23, 122, 222, 1, 146, 46, 182, 87, ]); assertEquals( - new Uint8Array(actual), + new Uint8Array(actual1), + expected, + ); + assertEquals( + new Uint8Array(actual2), expected, ); - const exportedKey = await crypto.subtle.exportKey("raw", key); - assertEquals(new Uint8Array(exportedKey), rawKey); + const exportedKey1 = await crypto.subtle.exportKey("raw", key1); + assertEquals(new Uint8Array(exportedKey1), rawKey); + + const exportedKey2 = await crypto.subtle.exportKey("jwk", key2); + assertEquals(exportedKey2, jwk); }); diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index ab9ea127e6..339e046c32 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -5,75 +5,89 @@ use crate::colors; use crate::file_fetcher::File; use crate::flags::Flags; use crate::get_types; +use crate::import_map::ImportMap; use crate::media_type::MediaType; -use crate::module_graph; use crate::program_state::ProgramState; -use crate::specifier_handler::FetchHandler; use crate::write_json_to_stdout; use crate::write_to_stdout_ignore_sigpipe; use deno_core::error::AnyError; +use deno_core::futures::future; use deno_core::futures::future::FutureExt; -use deno_core::futures::Future; -use deno_core::parking_lot::Mutex; use deno_core::resolve_url_or_path; use deno_doc as doc; -use deno_doc::parser::DocFileLoader; +use deno_graph::create_graph; +use deno_graph::source::LoadFuture; +use deno_graph::source::LoadResponse; +use deno_graph::source::Loader; +use deno_graph::source::Resolver; +use deno_graph::ModuleSpecifier; use deno_runtime::permissions::Permissions; use std::path::PathBuf; -use std::pin::Pin; use std::sync::Arc; -use swc_ecmascript::parser::Syntax; -type DocResult = Result<(Syntax, String), doc::DocError>; - -/// When parsing lib.deno.d.ts, only `DocParser::parse_source` is used, -/// which never even references the loader, so this is just a stub for that scenario. -/// -/// TODO(Liamolucko): Refactor `deno_doc` so this isn't necessary. struct StubDocLoader; -impl DocFileLoader for StubDocLoader { - fn resolve( - &self, - _specifier: &str, - _referrer: &str, - ) -> Result { - unreachable!() - } - - fn load_source_code( - &self, - _specifier: &str, - ) -> Pin>> { - unreachable!() +impl Loader for StubDocLoader { + fn load( + &mut self, + specifier: &ModuleSpecifier, + _is_dynamic: bool, + ) -> LoadFuture { + Box::pin(future::ready((specifier.clone(), Ok(None)))) } } -impl DocFileLoader for module_graph::Graph { +#[derive(Debug)] +struct DocResolver { + import_map: Option, +} + +impl Resolver for DocResolver { fn resolve( &self, specifier: &str, - referrer: &str, - ) -> Result { - let referrer = - resolve_url_or_path(referrer).expect("Expected valid specifier"); - match self.resolve(specifier, &referrer, true) { - Ok(specifier) => Ok(specifier.to_string()), - Err(e) => Err(doc::DocError::Resolve(e.to_string())), + referrer: &ModuleSpecifier, + ) -> Result { + if let Some(import_map) = &self.import_map { + return import_map + .resolve(specifier, referrer.as_str()) + .map_err(AnyError::from); } - } - fn load_source_code( - &self, - specifier: &str, - ) -> Pin>> { - let specifier = - resolve_url_or_path(specifier).expect("Expected valid specifier"); - let source = self.get_source(&specifier).expect("Unknown dependency"); - let media_type = - self.get_media_type(&specifier).expect("Unknown media type"); - let syntax = ast::get_syntax(&media_type); - async move { Ok((syntax, source)) }.boxed_local() + let module_specifier = + deno_core::resolve_import(specifier, referrer.as_str())?; + + Ok(module_specifier) + } +} + +struct DocLoader { + program_state: Arc, +} + +impl Loader for DocLoader { + fn load( + &mut self, + specifier: &ModuleSpecifier, + _is_dynamic: bool, + ) -> LoadFuture { + let specifier = specifier.clone(); + let program_state = self.program_state.clone(); + async move { + let result = program_state + .file_fetcher + .fetch(&specifier, &mut Permissions::allow_all()) + .await + .map(|file| { + Some(LoadResponse { + specifier: specifier.clone(), + content: Arc::new(file.source), + maybe_headers: file.maybe_headers, + }) + }); + (specifier.clone(), result) + } + .boxed_local() } } @@ -88,12 +102,21 @@ pub async fn print_docs( let source_file = source_file.unwrap_or_else(|| "--builtin".to_string()); let parse_result = if source_file == "--builtin" { - let loader = Box::new(StubDocLoader); - let doc_parser = doc::DocParser::new(loader, private); - + let mut loader = StubDocLoader; + let source_file_specifier = + ModuleSpecifier::parse("deno://lib.deno.d.ts").unwrap(); + let graph = create_graph( + source_file_specifier.clone(), + &mut loader, + None, + None, + None, + ) + .await; + let doc_parser = doc::DocParser::new(graph, private); let syntax = ast::get_syntax(&MediaType::Dts); doc_parser.parse_source( - "lib.deno.d.ts", + &source_file_specifier, syntax, get_types(flags.unstable).as_str(), ) @@ -109,31 +132,28 @@ pub async fn print_docs( media_type: MediaType::TypeScript, source: format!("export * from \"{}\";", module_specifier), specifier: root_specifier.clone(), + maybe_headers: None, }; // Save our fake file into file fetcher cache. program_state.file_fetcher.insert_cached(root); - let handler = Arc::new(Mutex::new(FetchHandler::new( - &program_state, - Permissions::allow_all(), - Permissions::allow_all(), - )?)); - let mut builder = module_graph::GraphBuilder::new( - handler, - program_state.maybe_import_map.clone(), - program_state.lockfile.clone(), - ); - builder.add(&root_specifier, false).await?; - builder - .analyze_config_file(&program_state.maybe_config_file) - .await?; - let graph = builder.get_graph(); - - let doc_parser = doc::DocParser::new(Box::new(graph), private); - doc_parser - .parse_with_reexports(root_specifier.as_str()) - .await + let mut loader = DocLoader { + program_state: program_state.clone(), + }; + let resolver = DocResolver { + import_map: program_state.maybe_import_map.clone(), + }; + let graph = create_graph( + root_specifier.clone(), + &mut loader, + Some(&resolver), + None, + None, + ) + .await; + let doc_parser = doc::DocParser::new(graph, private); + doc_parser.parse_with_reexports(&root_specifier) }; let mut doc_nodes = match parse_result { diff --git a/cli/tools/lint.rs b/cli/tools/lint.rs index f87ad4359a..7e6d2e9230 100644 --- a/cli/tools/lint.rs +++ b/cli/tools/lint.rs @@ -239,8 +239,9 @@ impl LintReporter for PrettyLintReporter { d.hint.as_ref(), &fmt_errors::format_location(&JsStackFrame::from_location( Some(d.filename.clone()), - Some(d.range.start.line as i64), - Some(d.range.start.col as i64), + Some(d.range.start.line_index as i64 + 1), // 1-indexed + // todo(#11111): make 1-indexed as well + Some(d.range.start.column_index as i64), )), ); @@ -277,24 +278,32 @@ pub fn format_diagnostic( ) -> String { let mut lines = vec![]; - for i in range.start.line..=range.end.line { - lines.push(source_lines[i - 1].to_string()); - if range.start.line == range.end.line { + for (i, line) in source_lines + .iter() + .enumerate() + .take(range.end.line_index + 1) + .skip(range.start.line_index) + { + lines.push(line.to_string()); + if range.start.line_index == range.end.line_index { lines.push(format!( "{}{}", - " ".repeat(range.start.col), - colors::red(&"^".repeat(range.end.col - range.start.col)) + " ".repeat(range.start.column_index), + colors::red( + &"^".repeat(range.end.column_index - range.start.column_index) + ) )); } else { - let line_len = source_lines[i - 1].len(); - if range.start.line == i { + let line_len = line.len(); + if range.start.line_index == i { lines.push(format!( "{}{}", - " ".repeat(range.start.col), - colors::red(&"^".repeat(line_len - range.start.col)) + " ".repeat(range.start.column_index), + colors::red(&"^".repeat(line_len - range.start.column_index)) )); - } else if range.end.line == i { - lines.push(colors::red(&"^".repeat(range.end.col)).to_string()); + } else if range.end.line_index == i { + lines + .push(colors::red(&"^".repeat(range.end.column_index)).to_string()); } else if line_len != 0 { lines.push(colors::red(&"^".repeat(line_len)).to_string()); } @@ -363,9 +372,12 @@ fn sort_diagnostics(diagnostics: &mut Vec) { let file_order = a.filename.cmp(&b.filename); match file_order { Ordering::Equal => { - let line_order = a.range.start.line.cmp(&b.range.start.line); + let line_order = + a.range.start.line_index.cmp(&b.range.start.line_index); match line_order { - Ordering::Equal => a.range.start.col.cmp(&b.range.start.col), + Ordering::Equal => { + a.range.start.column_index.cmp(&b.range.start.column_index) + } _ => line_order, } } diff --git a/cli/tools/test.rs b/cli/tools/test.rs index 62621a232c..90293173b3 100644 --- a/cli/tools/test.rs +++ b/cli/tools/test.rs @@ -262,6 +262,7 @@ async fn test_specifier( media_type: MediaType::JavaScript, source: test_source.clone(), specifier: test_specifier.clone(), + maybe_headers: None, }; program_state.file_fetcher.insert_cached(test_file); @@ -381,6 +382,7 @@ fn extract_files_from_regex_blocks( media_type: file_media_type, source: file_source, specifier: file_specifier, + maybe_headers: None, }) }) .collect(); @@ -757,9 +759,7 @@ async fn fetch_specifiers_with_test_mode( .fetch(specifier, &mut Permissions::allow_all()) .await?; - if file.media_type != MediaType::Unknown { - *mode = TestMode::Both - } else { + if file.media_type == MediaType::Unknown { *mode = TestMode::Documentation } } diff --git a/cli/tsc.rs b/cli/tsc.rs index 57bbeeca38..144ff8021f 100644 --- a/cli/tsc.rs +++ b/cli/tsc.rs @@ -45,10 +45,6 @@ pub static DENO_CRYPTO_LIB: &str = include_str!(env!("DENO_CRYPTO_LIB_PATH")); pub static DENO_BROADCAST_CHANNEL_LIB: &str = include_str!(env!("DENO_BROADCAST_CHANNEL_LIB_PATH")); pub static DENO_NET_LIB: &str = include_str!(env!("DENO_NET_LIB_PATH")); -pub static DENO_NET_UNSTABLE_LIB: &str = - include_str!(env!("DENO_NET_UNSTABLE_LIB_PATH")); -pub static DENO_HTTP_UNSTABLE_LIB: &str = - include_str!(env!("DENO_HTTP_UNSTABLE_LIB_PATH")); pub static SHARED_GLOBALS_LIB: &str = include_str!("dts/lib.deno.shared_globals.d.ts"); pub static WINDOW_LIB: &str = include_str!("dts/lib.deno.window.d.ts"); diff --git a/core/Cargo.toml b/core/Cargo.toml index 19f30c87cf..47ac32b8df 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -22,10 +22,10 @@ libc = "0.2.101" log = "0.4.14" parking_lot = "0.11.1" pin-project = "1.0.7" -rusty_v8 = "0.26.0" +rusty_v8 = "0.27.0" serde = { version = "1.0.129", features = ["derive"] } serde_json = { version = "1.0.66", features = ["preserve_order"] } -serde_v8 = { version = "0.9.3" } +serde_v8 = { version = "0.10.0" } url = { version = "2.2.2", features = ["serde"] } [[example]] diff --git a/core/examples/disable_ops.rs b/core/examples/disable_ops.rs new file mode 100644 index 0000000000..2d28908bf5 --- /dev/null +++ b/core/examples/disable_ops.rs @@ -0,0 +1,27 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +//! This example shows you how to define ops in Rust and then call them from +//! JavaScript. + +use deno_core::Extension; +use deno_core::JsRuntime; +use deno_core::RuntimeOptions; + +fn main() { + let my_ext = Extension::builder() + .middleware(|name, opfn| match name { + "op_print" => deno_core::void_op_sync(), + _ => opfn, + }) + .build(); + + // Initialize a runtime instance + let mut runtime = JsRuntime::new(RuntimeOptions { + extensions: vec![my_ext], + ..Default::default() + }); + + // Deno.core.print() will now be a NOP + runtime + .execute_script("", r#"Deno.core.print("I'm broken")"#) + .unwrap(); +} diff --git a/core/lib.rs b/core/lib.rs index a9f6d5d8bd..b190298846 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -79,6 +79,8 @@ pub use crate::ops_builtin::op_resources; pub use crate::ops_json::op_async; pub use crate::ops_json::op_async_unref; pub use crate::ops_json::op_sync; +pub use crate::ops_json::void_op_async; +pub use crate::ops_json::void_op_sync; pub use crate::resources::Resource; pub use crate::resources::ResourceId; pub use crate::resources::ResourceTable; diff --git a/core/ops_json.rs b/core/ops_json.rs index 25752322a1..22a84154da 100644 --- a/core/ops_json.rs +++ b/core/ops_json.rs @@ -11,6 +11,33 @@ use std::cell::RefCell; use std::future::Future; use std::rc::Rc; +/// A helper function that returns a sync NOP OpFn +/// +/// It's mainly intended for embedders who want to disable ops, see ./examples/disable_ops.rs +pub fn void_op_sync() -> Box { + // TODO(@AaronO): use this simpler implementation after changing serde_v8 to allow all values + // to deserialize to the unit type instead of failing with `ExpectedNull` + // op_sync(|_, _: (), _: ()| Ok(())) + Box::new(move |state, _| -> Op { + let op_result = serialize_op_result(Ok(()), state); + Op::Sync(op_result) + }) +} + +/// A helper function that returns an async NOP OpFn +/// +/// It's mainly intended for embedders who want to disable ops, see ./examples/disable_ops.rs +pub fn void_op_async() -> Box { + // TODO(@AaronO): use this simpler implementation after changing serde_v8 to allow all values + // to deserialize to the unit type instead of failing with `ExpectedNull` + // op_async(|_, _: (), _: ()| futures::future::ok(())) + Box::new(move |state, payload| -> Op { + let pid = payload.promise_id; + let op_result = serialize_op_result(Ok(()), state); + Op::Async(Box::pin(futures::future::ready((pid, op_result)))) + }) +} + /// Creates an op that passes data synchronously using JSON. /// /// The provided function `op_fn` has the following parameters: diff --git a/ext/crypto/00_crypto.js b/ext/crypto/00_crypto.js index 5c80ac0ca6..3546540771 100644 --- a/ext/crypto/00_crypto.js +++ b/ext/crypto/00_crypto.js @@ -12,13 +12,18 @@ const core = window.Deno.core; const webidl = window.__bootstrap.webidl; const { DOMException } = window.__bootstrap.domException; + const { atob, btoa } = window.__bootstrap.base64; const { ArrayPrototypeFind, - ArrayBufferIsView, + ArrayPrototypeEvery, ArrayPrototypeIncludes, + ArrayBuffer, + ArrayBufferIsView, BigInt64Array, StringPrototypeToUpperCase, + StringPrototypeReplace, + StringPrototypeCharCodeAt, Symbol, SymbolFor, SymbolToStringTag, @@ -72,6 +77,10 @@ "RSA-PSS": "RsaHashedKeyGenParams", "RSA-OAEP": "RsaHashedKeyGenParams", "ECDSA": "EcKeyGenParams", + "AES-CTR": "AesKeyGenParams", + "AES-CBC": "AesKeyGenParams", + "AES-GCM": "AesKeyGenParams", + "AES-KW": "AesKeyGenParams", "HMAC": "HmacKeyGenParams", }, "sign": { @@ -100,6 +109,30 @@ }, }; + // Decodes the unpadded base64 to the octet sequence containing key value `k` defined in RFC7518 Section 6.4 + function decodeSymmetricKey(key) { + // Decode from base64url without `=` padding. + const base64 = StringPrototypeReplace( + StringPrototypeReplace(key, /\-/g, "+"), + /\_/g, + "/", + ); + const decodedKey = atob(base64); + const keyLength = decodedKey.length; + const keyBytes = new Uint8Array(keyLength); + for (let i = 0; i < keyLength; i++) { + keyBytes[i] = StringPrototypeCharCodeAt(decodedKey, i); + } + return keyBytes; + } + + function unpaddedBase64(bytes) { + const binaryString = core.decode(bytes); + const base64String = btoa(binaryString); + + return StringPrototypeReplace(base64String, /=/g, ""); + } + // See https://www.w3.org/TR/WebCryptoAPI/#dfn-normalize-an-algorithm // 18.4.4 function normalizeAlgorithm(algorithm, op) { @@ -631,7 +664,7 @@ prefix, context: "Argument 1", }); - keyData = webidl.converters.BufferSource(keyData, { + keyData = webidl.converters["BufferSource or JsonWebKey"](keyData, { prefix, context: "Argument 2", }); @@ -649,22 +682,32 @@ }); // 2. - if (ArrayBufferIsView(keyData)) { - keyData = new Uint8Array( - keyData.buffer, - keyData.byteOffset, - keyData.byteLength, - ); + if (format !== "jwk") { + if (ArrayBufferIsView(keyData) || keyData instanceof ArrayBuffer) { + if (ArrayBufferIsView(keyData)) { + keyData = new Uint8Array( + keyData.buffer, + keyData.byteOffset, + keyData.byteLength, + ); + } else { + keyData = new Uint8Array(keyData); + } + keyData = TypedArrayPrototypeSlice(keyData); + } else { + throw new TypeError("keyData is a JsonWebKey"); + } } else { - keyData = new Uint8Array(keyData); + if (ArrayBufferIsView(keyData) || keyData instanceof ArrayBuffer) { + throw new TypeError("keyData is not a JsonWebKey"); + } } - keyData = TypedArrayPrototypeSlice(keyData); const normalizedAlgorithm = normalizeAlgorithm(algorithm, "importKey"); switch (normalizedAlgorithm.name) { - // https://w3c.github.io/webcrypto/#hmac-operations case "HMAC": { + // 2. if ( ArrayPrototypeFind( keyUsages, @@ -674,59 +717,177 @@ throw new DOMException("Invalid key usages", "SyntaxError"); } + // 3. + let hash; + let data; + + // 4. https://w3c.github.io/webcrypto/#hmac-operations switch (format) { case "raw": { - const hash = normalizedAlgorithm.hash; - // 5. - let length = keyData.byteLength * 8; - // 6. - if (length === 0) { - throw new DOMException("Key length is zero", "DataError"); + data = keyData; + hash = normalizedAlgorithm.hash; + break; + } + case "jwk": { + // TODO(@littledivy): Why does the spec validate JWK twice? + const jwk = keyData; + // 2. + if (jwk.kty !== "oct") { + throw new DOMException( + "`kty` member of JsonWebKey must be `oct`", + "DataError", + ); } - if (normalizeAlgorithm.length) { - // 7. + + // Section 6.4.1 of RFC7518 + if (!jwk.k) { + throw new DOMException( + "`k` member of JsonWebKey must be present", + "DataError", + ); + } + + // 4. + data = decodeSymmetricKey(jwk.k); + // 5. + hash = normalizedAlgorithm.hash; + // 6. + switch (hash.name) { + case "SHA-1": { + if (jwk.alg !== undefined && jwk.alg !== "HS1") { + throw new DOMException( + "`alg` member of JsonWebKey must be `HS1`", + "DataError", + ); + } + break; + } + case "SHA-256": { + if (jwk.alg !== undefined && jwk.alg !== "HS256") { + throw new DOMException( + "`alg` member of JsonWebKey must be `HS256`", + "DataError", + ); + } + break; + } + case "SHA-384": { + if (jwk.alg !== undefined && jwk.alg !== "HS384") { + throw new DOMException( + "`alg` member of JsonWebKey must be `HS384`", + "DataError", + ); + } + break; + } + case "SHA-512": { + if (jwk.alg !== undefined && jwk.alg !== "HS512") { + throw new DOMException( + "`alg` member of JsonWebKey must be `HS512`", + "DataError", + ); + } + break; + } + default: + throw new TypeError("unreachable"); + } + + // 7. + if (keyUsages.length > 0 && jwk.use && jwk.use !== "sign") { + throw new DOMException( + "`use` member of JsonWebKey must be `sign`", + "DataError", + ); + } + + // 8. + // Section 4.3 of RFC7517 + if (jwk.key_ops) { if ( - normalizedAlgorithm.length > length || - normalizedAlgorithm.length <= (length - 8) + ArrayPrototypeFind( + jwk.key_ops, + (u) => !ArrayPrototypeIncludes(recognisedUsages, u), + ) !== undefined ) { throw new DOMException( - "Key length is invalid", + "`key_ops` member of JsonWebKey is invalid", + "DataError", + ); + } + + if ( + !ArrayPrototypeEvery( + jwk.key_ops, + (u) => ArrayPrototypeIncludes(keyUsages, u), + ) + ) { + throw new DOMException( + "`key_ops` member of JsonWebKey is invalid", "DataError", ); } - length = normalizeAlgorithm.length; } - if (keyUsages.length == 0) { - throw new DOMException("Key usage is empty", "SyntaxError"); + // 9. + if (jwk.ext === false && extractable == true) { + throw new DOMException( + "`ext` member of JsonWebKey is invalid", + "DataError", + ); } - const handle = {}; - WeakMapPrototypeSet(KEY_STORE, handle, { - type: "raw", - data: keyData, - }); - - const algorithm = { - name: "HMAC", - length, - hash, - }; - - const key = constructKey( - "secret", - extractable, - usageIntersection(keyUsages, recognisedUsages), - algorithm, - handle, - ); - - return key; + break; } - // TODO(@littledivy): jwk default: throw new DOMException("Not implemented", "NotSupportedError"); } + + // 5. + let length = data.byteLength * 8; + // 6. + if (length === 0) { + throw new DOMException("Key length is zero", "DataError"); + } + // 7. + if (normalizedAlgorithm.length !== undefined) { + if ( + normalizedAlgorithm.length > length || + normalizedAlgorithm.length <= (length - 8) + ) { + throw new DOMException( + "Key length is invalid", + "DataError", + ); + } + length = normalizedAlgorithm.length; + } + + if (keyUsages.length == 0) { + throw new DOMException("Key usage is empty", "SyntaxError"); + } + + const handle = {}; + WeakMapPrototypeSet(KEY_STORE, handle, { + type: "raw", + data, + }); + + const algorithm = { + name: "HMAC", + length, + hash, + }; + + const key = constructKey( + "secret", + extractable, + usageIntersection(keyUsages, recognisedUsages), + algorithm, + handle, + ); + + return key; } // TODO(@littledivy): RSASSA-PKCS1-v1_5 // TODO(@littledivy): RSA-PSS @@ -820,10 +981,48 @@ // 4-5. return bits.buffer; } - // TODO(@littledivy): jwk + case "jwk": { + // 1-3. + const jwk = { + kty: "oct", + k: unpaddedBase64(innerKey.data), + }; + // 4. + const algorithm = key[_algorithm]; + // 5. + const hash = algorithm.hash; + // 6. + switch (hash.name) { + case "SHA-1": + jwk.alg = "HS1"; + break; + case "SHA-256": + jwk.alg = "HS256"; + break; + case "SHA-384": + jwk.alg = "HS384"; + break; + case "SHA-512": + jwk.alg = "HS512"; + break; + default: + throw new DOMException( + "Hash algorithm not supported", + "NotSupportedError", + ); + } + // 7. + jwk.key_ops = key.usages; + // 8. + jwk.ext = key[_extractable]; + // 9. + return jwk; + } default: throw new DOMException("Not implemented", "NotSupportedError"); } + // TODO(@littledivy): Redundant break but deno_lint complains without it + break; } // TODO(@littledivy): RSASSA-PKCS1-v1_5 // TODO(@littledivy): RSA-PSS @@ -1220,10 +1419,40 @@ return { publicKey, privateKey }; } // TODO(lucacasonato): ECDH - // TODO(lucacasonato): AES-CTR - // TODO(lucacasonato): AES-CBC - // TODO(lucacasonato): AES-GCM - // TODO(lucacasonato): AES-KW + case "AES-CTR": + case "AES-CBC": + case "AES-GCM": { + // 1. + if ( + ArrayPrototypeFind( + usages, + (u) => + !ArrayPrototypeIncludes([ + "encrypt", + "decrypt", + "wrapKey", + "unwrapKey", + ], u), + ) !== undefined + ) { + throw new DOMException("Invalid key usages", "SyntaxError"); + } + + return generateKeyAES(normalizedAlgorithm, extractable, usages); + } + case "AES-KW": { + // 1. + if ( + ArrayPrototypeFind( + usages, + (u) => !ArrayPrototypeIncludes(["wrapKey", "unwrapKey"], u), + ) !== undefined + ) { + throw new DOMException("Invalid key usages", "SyntaxError"); + } + + return generateKeyAES(normalizedAlgorithm, extractable, usages); + } case "HMAC": { // 1. if ( @@ -1278,6 +1507,42 @@ } } + async function generateKeyAES(normalizedAlgorithm, extractable, usages) { + // 2. + if (!ArrayPrototypeIncludes([128, 192, 256], normalizedAlgorithm.length)) { + throw new DOMException("Invalid key length", "OperationError"); + } + + // 3. + const keyData = await core.opAsync("op_crypto_generate_key", { + name: normalizedAlgorithm.name, + length: normalizedAlgorithm.length, + }); + const handle = {}; + WeakMapPrototypeSet(KEY_STORE, handle, { + type: "raw", + data: keyData, + }); + + // 6-8. + const algorithm = { + name: normalizedAlgorithm.name, + length: normalizedAlgorithm.length, + }; + + // 9-11. + const key = constructKey( + "secret", + extractable, + usages, + algorithm, + handle, + ); + + // 12. + return key; + } + async function deriveBits(normalizedAlgorithm, baseKey, length) { switch (normalizedAlgorithm.name) { case "PBKDF2": { diff --git a/ext/crypto/01_webidl.js b/ext/crypto/01_webidl.js index 43bc5e822e..3ef3eb175c 100644 --- a/ext/crypto/01_webidl.js +++ b/ext/crypto/01_webidl.js @@ -9,6 +9,7 @@ ((window) => { const webidl = window.__bootstrap.webidl; const { CryptoKey } = window.__bootstrap.crypto; + const { ArrayBufferIsView, ArrayBuffer } = window.__bootstrap.primordials; webidl.converters.AlgorithmIdentifier = (V, opts) => { // Union for (object or DOMString) @@ -18,6 +19,14 @@ return webidl.converters.DOMString(V, opts); }; + webidl.converters["BufferSource or JsonWebKey"] = (V, opts) => { + // Union for (BufferSource or JsonWebKey) + if (ArrayBufferIsView(V) || V instanceof ArrayBuffer) { + return webidl.converters.BufferSource(V, opts); + } + return webidl.converters.JsonWebKey(V, opts); + }; + webidl.converters.KeyType = webidl.createEnumConverter("KeyType", [ "public", "private", @@ -108,6 +117,19 @@ webidl.converters.EcKeyGenParams = webidl .createDictionaryConverter("EcKeyGenParams", dictEcKeyGenParams); + const dictAesKeyGenParams = [ + ...dictAlgorithm, + { + key: "length", + converter: (V, opts) => + webidl.converters["unsigned short"](V, { ...opts, enforceRange: true }), + required: true, + }, + ]; + + webidl.converters.AesKeyGenParams = webidl + .createDictionaryConverter("AesKeyGenParams", dictAesKeyGenParams); + const dictHmacKeyGenParams = [ ...dictAlgorithm, { @@ -178,6 +200,115 @@ webidl.converters.HmacImportParams = webidl .createDictionaryConverter("HmacImportParams", dictHmacImportParams); + const dictRsaOtherPrimesInfo = [ + { + key: "r", + converter: webidl.converters["DOMString"], + }, + { + key: "d", + converter: webidl.converters["DOMString"], + }, + { + key: "t", + converter: webidl.converters["DOMString"], + }, + ]; + + webidl.converters.RsaOtherPrimesInfo = webidl.createDictionaryConverter( + "RsaOtherPrimesInfo", + dictRsaOtherPrimesInfo, + ); + webidl.converters["sequence"] = webidl + .createSequenceConverter( + webidl.converters.RsaOtherPrimesInfo, + ); + + const dictJsonWebKey = [ + // Sections 4.2 and 4.3 of RFC7517. + // https://datatracker.ietf.org/doc/html/rfc7517#section-4 + { + key: "kty", + converter: webidl.converters["DOMString"], + }, + { + key: "use", + converter: webidl.converters["DOMString"], + }, + { + key: "key_ops", + converter: webidl.converters["sequence"], + }, + { + key: "alg", + converter: webidl.converters["DOMString"], + }, + // JSON Web Key Parameters Registration + { + key: "ext", + converter: webidl.converters["boolean"], + }, + // Section 6 of RFC7518 JSON Web Algorithms + // https://datatracker.ietf.org/doc/html/rfc7518#section-6 + { + key: "crv", + converter: webidl.converters["DOMString"], + }, + { + key: "x", + converter: webidl.converters["DOMString"], + }, + { + key: "y", + converter: webidl.converters["DOMString"], + }, + { + key: "d", + converter: webidl.converters["DOMString"], + }, + { + key: "n", + converter: webidl.converters["DOMString"], + }, + { + key: "e", + converter: webidl.converters["DOMString"], + }, + { + key: "p", + converter: webidl.converters["DOMString"], + }, + { + key: "q", + converter: webidl.converters["DOMString"], + }, + { + key: "dp", + converter: webidl.converters["DOMString"], + }, + { + key: "dq", + converter: webidl.converters["DOMString"], + }, + { + key: "qi", + converter: webidl.converters["DOMString"], + }, + { + key: "oth", + converter: webidl.converters["sequence"], + }, + { + key: "k", + converter: webidl.converters["DOMString"], + }, + ]; + + webidl.converters.JsonWebKey = webidl.createDictionaryConverter( + "JsonWebKey", + dictJsonWebKey, + ); + const dictPbkdf2Params = [ ...dictAlgorithm, { diff --git a/ext/crypto/lib.deno_crypto.d.ts b/ext/crypto/lib.deno_crypto.d.ts index 6b19016117..5169e5c3bd 100644 --- a/ext/crypto/lib.deno_crypto.d.ts +++ b/ext/crypto/lib.deno_crypto.d.ts @@ -25,9 +25,37 @@ type KeyUsage = | "unwrapKey" | "verify" | "wrapKey"; - +type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki"; type NamedCurve = string; +interface RsaOtherPrimesInfo { + d?: string; + r?: string; + t?: string; +} + +interface JsonWebKey { + alg?: string; + crv?: string; + d?: string; + dp?: string; + dq?: string; + e?: string; + ext?: boolean; + k?: string; + // deno-lint-ignore camelcase + key_ops?: string[]; + kty?: string; + n?: string; + oth?: RsaOtherPrimesInfo[]; + p?: string; + q?: string; + qi?: string; + use?: string; + x?: string; + y?: string; +} + interface HmacKeyGenParams extends Algorithm { hash: HashAlgorithmIdentifier; length?: number; @@ -122,6 +150,13 @@ interface SubtleCrypto { extractable: boolean, keyUsages: KeyUsage[], ): Promise; + importKey( + format: "jwk", + keyData: JsonWebKey, + algorithm: AlgorithmIdentifier | HmacImportParams, + extractable: boolean, + keyUsages: KeyUsage[], + ): Promise; importKey( format: "raw", keyData: BufferSource, @@ -129,7 +164,11 @@ interface SubtleCrypto { extractable: boolean, keyUsages: KeyUsage[], ): Promise; - exportKey(format: "raw", key: CryptoKey): Promise; + exportKey(format: "jwk", key: CryptoKey): Promise; + exportKey( + format: Exclude, + key: CryptoKey, + ): Promise; sign( algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, diff --git a/ext/crypto/lib.rs b/ext/crypto/lib.rs index b68bd78874..7c4010f53d 100644 --- a/ext/crypto/lib.rs +++ b/ext/crypto/lib.rs @@ -180,6 +180,18 @@ pub async fn op_crypto_generate_key( private_key } + Algorithm::AesCtr + | Algorithm::AesCbc + | Algorithm::AesGcm + | Algorithm::AesKw => { + let length = args.length.ok_or_else(not_supported)?; + let mut key_data = vec![0u8; length]; + let rng = RingRand::SystemRandom::new(); + rng.fill(&mut key_data).map_err(|_| { + custom_error("DOMExceptionOperationError", "Key generation failed") + })?; + key_data + } Algorithm::Hmac => { let hash: HmacAlgorithm = args.hash.ok_or_else(not_supported)?.into(); diff --git a/ext/http/README.md b/ext/http/README.md deleted file mode 100644 index ab557017a5..0000000000 --- a/ext/http/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# deno_http - -This crate implements server-side HTTP based on primitives from the -[Fetch API](https://fetch.spec.whatwg.org/). diff --git a/ext/http/lib.deno_http.unstable.d.ts b/ext/http/lib.deno_http.unstable.d.ts deleted file mode 100644 index 5c5bf78df9..0000000000 --- a/ext/http/lib.deno_http.unstable.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -/// -/// - -declare namespace Deno { - export interface WebSocketUpgrade { - response: Response; - socket: WebSocket; - } - - export interface UpgradeWebSocketOptions { - protocol?: string; - } - - /** **UNSTABLE**: new API, yet to be vetted. - * - * Used to upgrade an incoming HTTP request to a WebSocket. - * - * Given a request, returns a pair of WebSocket and Response. The original - * request must be responded to with the returned response for the websocket - * upgrade to be successful. - * - * ```ts - * const conn = await Deno.connect({ port: 80, hostname: "127.0.0.1" }); - * const httpConn = Deno.serveHttp(conn); - * const e = await httpConn.nextRequest(); - * if (e) { - * const { socket, response } = Deno.upgradeWebSocket(e.request); - * socket.onopen = () => { - * socket.send("Hello World!"); - * }; - * socket.onmessage = (e) => { - * console.log(e.data); - * socket.close(); - * }; - * socket.onclose = () => console.log("WebSocket has been closed."); - * socket.onerror = (e) => console.error("WebSocket error:", e.message); - * e.respondWith(response); - * } - * ``` - * - * If the request body is disturbed (read from) before the upgrade is - * completed, upgrading fails. - * - * This operation does not yet consume the request or open the websocket. This - * only happens once the returned response has been passed to `respondWith`. - */ - export function upgradeWebSocket( - request: Request, - options?: UpgradeWebSocketOptions, - ): WebSocketUpgrade; -} diff --git a/ext/http/lib.rs b/ext/http/lib.rs index 8221a6b0d8..ba6d73d5c0 100644 --- a/ext/http/lib.rs +++ b/ext/http/lib.rs @@ -34,7 +34,6 @@ use std::borrow::Cow; use std::cell::RefCell; use std::future::Future; use std::net::SocketAddr; -use std::path::PathBuf; use std::pin::Pin; use std::rc::Rc; use std::task::Context; @@ -45,10 +44,6 @@ use tokio::io::AsyncWrite; use tokio::sync::oneshot; use tokio_util::io::StreamReader; -pub fn get_unstable_declaration() -> PathBuf { - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_http.unstable.d.ts") -} - pub fn init() -> Extension { Extension::builder() .js(include_js_files!( diff --git a/ext/net/lib.deno_net.unstable.d.ts b/ext/net/lib.deno_net.unstable.d.ts deleted file mode 100644 index 145f232c09..0000000000 --- a/ext/net/lib.deno_net.unstable.d.ts +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -/// -/// - -declare namespace Deno { - /** The type of the resource record. - * Only the listed types are supported currently. */ - export type RecordType = - | "A" - | "AAAA" - | "ANAME" - | "CNAME" - | "MX" - | "PTR" - | "SRV" - | "TXT"; - - export interface ResolveDnsOptions { - /** The name server to be used for lookups. - * If not specified, defaults to the system configuration e.g. `/etc/resolv.conf` on Unix. */ - nameServer?: { - /** The IP address of the name server */ - ipAddr: string; - /** The port number the query will be sent to. - * If not specified, defaults to 53. */ - port?: number; - }; - } - - /** If `resolveDns` is called with "MX" record type specified, it will return an array of this interface. */ - export interface MXRecord { - preference: number; - exchange: string; - } - - /** If `resolveDns` is called with "SRV" record type specified, it will return an array of this interface. */ - export interface SRVRecord { - priority: number; - weight: number; - port: number; - target: string; - } - - export function resolveDns( - query: string, - recordType: "A" | "AAAA" | "ANAME" | "CNAME" | "PTR", - options?: ResolveDnsOptions, - ): Promise; - - export function resolveDns( - query: string, - recordType: "MX", - options?: ResolveDnsOptions, - ): Promise; - - export function resolveDns( - query: string, - recordType: "SRV", - options?: ResolveDnsOptions, - ): Promise; - - export function resolveDns( - query: string, - recordType: "TXT", - options?: ResolveDnsOptions, - ): Promise; - - /** ** UNSTABLE**: new API, yet to be vetted. -* -* Performs DNS resolution against the given query, returning resolved records. -* Fails in the cases such as: -* - the query is in invalid format -* - the options have an invalid parameter, e.g. `nameServer.port` is beyond the range of 16-bit unsigned integer -* - timed out -* -* ```ts -* const a = await Deno.resolveDns("example.com", "A"); -* -* const aaaa = await Deno.resolveDns("example.com", "AAAA", { -* nameServer: { ipAddr: "8.8.8.8", port: 1234 }, -* }); -* ``` -* -* Requires `allow-net` permission. - */ - export function resolveDns( - query: string, - recordType: RecordType, - options?: ResolveDnsOptions, - ): Promise; - - /** **UNSTABLE**: new API, yet to be vetted. -* -* A generic transport listener for message-oriented protocols. */ - export interface DatagramConn extends AsyncIterable<[Uint8Array, Addr]> { - /** **UNSTABLE**: new API, yet to be vetted. - * - * Waits for and resolves to the next message to the `UDPConn`. */ - receive(p?: Uint8Array): Promise<[Uint8Array, Addr]>; - /** UNSTABLE: new API, yet to be vetted. - * - * Sends a message to the target. */ - send(p: Uint8Array, addr: Addr): Promise; - /** UNSTABLE: new API, yet to be vetted. - * - * Close closes the socket. Any pending message promises will be rejected - * with errors. */ - close(): void; - /** Return the address of the `UDPConn`. */ - readonly addr: Addr; - [Symbol.asyncIterator](): AsyncIterableIterator<[Uint8Array, Addr]>; - } - - export interface UnixListenOptions { - /** A Path to the Unix Socket. */ - path: string; - } - - /** **UNSTABLE**: new API, yet to be vetted. -* -* Listen announces on the local transport address. -* -* ```ts -* const listener = Deno.listen({ path: "/foo/bar.sock", transport: "unix" }) -* ``` -* -* Requires `allow-read` and `allow-write` permission. */ - export function listen( - options: UnixListenOptions & { transport: "unix" }, - ): Listener; - - /** **UNSTABLE**: new API, yet to be vetted -* -* Listen announces on the local transport address. -* -* ```ts -* const listener1 = Deno.listenDatagram({ -* port: 80, -* transport: "udp" -* }); -* const listener2 = Deno.listenDatagram({ -* hostname: "golang.org", -* port: 80, -* transport: "udp" -* }); -* ``` -* -* Requires `allow-net` permission. */ - export function listenDatagram( - options: ListenOptions & { transport: "udp" }, - ): DatagramConn; - - /** **UNSTABLE**: new API, yet to be vetted -* -* Listen announces on the local transport address. -* -* ```ts -* const listener = Deno.listenDatagram({ -* path: "/foo/bar.sock", -* transport: "unixpacket" -* }); -* ``` -* -* Requires `allow-read` and `allow-write` permission. */ - export function listenDatagram( - options: UnixListenOptions & { transport: "unixpacket" }, - ): DatagramConn; - - export interface UnixConnectOptions { - transport: "unix"; - path: string; - } - - /** **UNSTABLE**: The unix socket transport is unstable as a new API yet to -* be vetted. The TCP transport is considered stable. -* -* Connects to the hostname (default is "127.0.0.1") and port on the named -* transport (default is "tcp"), and resolves to the connection (`Conn`). -* -* ```ts -* const conn1 = await Deno.connect({ port: 80 }); -* const conn2 = await Deno.connect({ hostname: "192.0.2.1", port: 80 }); -* const conn3 = await Deno.connect({ hostname: "[2001:db8::1]", port: 80 }); -* const conn4 = await Deno.connect({ hostname: "golang.org", port: 80, transport: "tcp" }); -* const conn5 = await Deno.connect({ path: "/foo/bar.sock", transport: "unix" }); -* ``` -* -* Requires `allow-net` permission for "tcp" and `allow-read` for "unix". */ - export function connect( - options: ConnectOptions | UnixConnectOptions, - ): Promise; - - export interface ConnectTlsClientCertOptions { - /** PEM formatted client certificate chain. */ - certChain: string; - /** PEM formatted (RSA or PKCS8) private key of client certificate. */ - privateKey: string; - } - - /** **UNSTABLE** New API, yet to be vetted. - * - * Create a TLS connection with an attached client certificate. - * - * ```ts - * const conn = await Deno.connectTls({ - * hostname: "deno.land", - * port: 443, - * certChain: "---- BEGIN CERTIFICATE ----\n ...", - * privateKey: "---- BEGIN PRIVATE KEY ----\n ...", - * }); - * ``` - * - * Requires `allow-net` permission. - */ - export function connectTls( - options: ConnectTlsOptions & ConnectTlsClientCertOptions, - ): Promise; - - export interface StartTlsOptions { - /** A literal IP address or host name that can be resolved to an IP address. - * If not specified, defaults to `127.0.0.1`. */ - hostname?: string; - /** Server certificate file. */ - certFile?: string; - } - - /** **UNSTABLE**: new API, yet to be vetted. -* -* Start TLS handshake from an existing connection using -* an optional cert file, hostname (default is "127.0.0.1"). The -* cert file is optional and if not included Mozilla's root certificates will -* be used (see also https://github.com/ctz/webpki-roots for specifics) -* Using this function requires that the other end of the connection is -* prepared for TLS handshake. -* -* ```ts -* const conn = await Deno.connect({ port: 80, hostname: "127.0.0.1" }); -* const tlsConn = await Deno.startTls(conn, { certFile: "./certs/my_custom_root_CA.pem", hostname: "localhost" }); -* ``` -* -* Requires `allow-net` permission. - */ - export function startTls( - conn: Conn, - options?: StartTlsOptions, - ): Promise; - - export interface ListenTlsOptions { - /** **UNSTABLE**: new API, yet to be vetted. - * - * Application-Layer Protocol Negotiation (ALPN) protocols to announce to - * the client. If not specified, no ALPN extension will be included in the - * TLS handshake. - */ - alpnProtocols?: string[]; - } -} diff --git a/ext/net/lib.rs b/ext/net/lib.rs index 3764433e3b..068a865eb2 100644 --- a/ext/net/lib.rs +++ b/ext/net/lib.rs @@ -85,10 +85,6 @@ pub fn get_declaration() -> PathBuf { PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_net.d.ts") } -pub fn get_unstable_declaration() -> PathBuf { - PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_net.unstable.d.ts") -} - #[derive(Clone)] pub struct DefaultTlsOptions { pub root_cert_store: Option, diff --git a/runtime/errors.rs b/runtime/errors.rs index db14bd8bfb..463b1af6c5 100644 --- a/runtime/errors.rs +++ b/runtime/errors.rs @@ -140,17 +140,15 @@ fn get_hyper_error_class(_error: &hyper::Error) -> &'static str { fn get_nix_error_class(error: &nix::Error) -> &'static str { use nix::errno::Errno::*; match error { - nix::Error::Sys(ECHILD) => "NotFound", - nix::Error::Sys(EINVAL) => "TypeError", - nix::Error::Sys(ENOENT) => "NotFound", - nix::Error::Sys(ENOTTY) => "BadResource", - nix::Error::Sys(EPERM) => "PermissionDenied", - nix::Error::Sys(ESRCH) => "NotFound", - nix::Error::Sys(UnknownErrno) => "Error", - nix::Error::Sys(_) => "Error", - nix::Error::InvalidPath => "TypeError", - nix::Error::InvalidUtf8 => "InvalidData", - nix::Error::UnsupportedOperation => unreachable!(), + nix::Error::ECHILD => "NotFound", + nix::Error::EINVAL => "TypeError", + nix::Error::ENOENT => "NotFound", + nix::Error::ENOTTY => "BadResource", + nix::Error::EPERM => "PermissionDenied", + nix::Error::ESRCH => "NotFound", + nix::Error::Sys::UnknownErrno => "Error", + nix::Error::ENOTSUP => unreachable!(), + _ => "Error", } } diff --git a/runtime/js/06_util.js b/runtime/js/06_util.js index b6a3c3438d..97c0adea4e 100644 --- a/runtime/js/06_util.js +++ b/runtime/js/06_util.js @@ -3,7 +3,6 @@ ((window) => { const { - ObjectDefineProperty, StringPrototypeReplace, TypeError, Promise, @@ -55,18 +54,6 @@ return promise; } - function immutableDefine( - o, - p, - value, - ) { - ObjectDefineProperty(o, p, { - value, - configurable: false, - writable: false, - }); - } - // Keep in sync with `fromFileUrl()` in `std/path/win32.ts`. function pathFromURLWin32(url) { let p = StringPrototypeReplace( @@ -164,7 +151,6 @@ createResolvable, assert, AssertionError, - immutableDefine, pathFromURL, writable, nonEnumerable, diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index fc3eeeccae..c9dd611da5 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -695,8 +695,7 @@ delete Object.prototype.__proto__; }); // Setup `Deno` global - we're actually overriding already // existing global `Deno` with `Deno` namespace from "./deno.ts". - util.immutableDefine(globalThis, "Deno", finalDenoNs); - ObjectFreeze(globalThis.Deno); + ObjectDefineProperty(globalThis, "Deno", util.readOnly(finalDenoNs)); ObjectFreeze(globalThis.Deno.core); signals.setSignals(); } else { diff --git a/tools/release/01_bump_dependency_crate_versions.ts b/tools/release/01_bump_dependency_crate_versions.ts index 3bfe53d771..b5ee6968db 100644 --- a/tools/release/01_bump_dependency_crate_versions.ts +++ b/tools/release/01_bump_dependency_crate_versions.ts @@ -7,3 +7,5 @@ const workspace = await DenoWorkspace.load(); for (const crate of workspace.getDependencyCrates()) { await crate.increment("minor"); } + +await workspace.updateLockFile(); diff --git a/tools/release/03_bump_cli_version.ts b/tools/release/03_bump_cli_version.ts index 5ecf3bf6e3..d652f933d7 100644 --- a/tools/release/03_bump_cli_version.ts +++ b/tools/release/03_bump_cli_version.ts @@ -13,6 +13,7 @@ const originalVersion = cliCrate.version; // increment the version await cliCrate.increment(getVersionIncrement()); +await workspace.updateLockFile(); // output the Releases.md markdown text console.log( diff --git a/tools/release/helpers/cargo.ts b/tools/release/helpers/cargo.ts index 619d7a0f7c..2f750779cb 100644 --- a/tools/release/helpers/cargo.ts +++ b/tools/release/helpers/cargo.ts @@ -33,10 +33,34 @@ export async function getMetadata(directory: string) { return JSON.parse(result!) as CargoMetadata; } -export async function publishCrate(directory: string) { +export function publishCrate(directory: string) { + return runCargoSubCommand({ + directory, + args: ["publish"], + }); +} + +export function build(directory: string) { + return runCargoSubCommand({ + directory, + args: ["build", "-vv"], + }); +} + +export function check(directory: string) { + return runCargoSubCommand({ + directory, + args: ["check"], + }); +} + +async function runCargoSubCommand(params: { + args: string[]; + directory: string; +}) { const p = Deno.run({ - cwd: directory, - cmd: ["cargo", "publish"], + cwd: params.directory, + cmd: ["cargo", ...params.args], stderr: "inherit", stdout: "inherit", }); diff --git a/tools/release/helpers/deno_workspace.ts b/tools/release/helpers/deno_workspace.ts index f964d24b30..169394af95 100644 --- a/tools/release/helpers/deno_workspace.ts +++ b/tools/release/helpers/deno_workspace.ts @@ -2,12 +2,7 @@ import * as path from "https://deno.land/std@0.105.0/path/mod.ts"; import * as semver from "https://deno.land/x/semver@v1.4.0/mod.ts"; -import { - CargoMetadata, - CargoPackageMetadata, - getMetadata, - publishCrate, -} from "./cargo.ts"; +import * as cargo from "./cargo.ts"; import { getCratesIoMetadata } from "./crates_io.ts"; import { withRetries } from "./helpers.ts"; @@ -21,10 +16,12 @@ export class DenoWorkspace { } static async load(): Promise { - return new DenoWorkspace(await getMetadata(DenoWorkspace.rootDirPath)); + return new DenoWorkspace( + await cargo.getMetadata(DenoWorkspace.rootDirPath), + ); } - private constructor(metadata: CargoMetadata) { + private constructor(metadata: cargo.CargoMetadata) { const crates = []; for (const memberId of metadata.workspace_members) { const pkg = metadata.packages.find((pkg) => pkg.id === memberId); @@ -82,14 +79,22 @@ export class DenoWorkspace { } return crate; } + + build() { + return cargo.build(DenoWorkspace.rootDirPath); + } + + updateLockFile() { + return cargo.check(DenoWorkspace.rootDirPath); + } } export class DenoWorkspaceCrate { #workspace: DenoWorkspace; - #pkg: CargoPackageMetadata; + #pkg: cargo.CargoPackageMetadata; #isUpdatingManifest = false; - constructor(workspace: DenoWorkspace, pkg: CargoPackageMetadata) { + constructor(workspace: DenoWorkspace, pkg: cargo.CargoPackageMetadata) { this.#workspace = workspace; this.#pkg = pkg; } @@ -141,7 +146,7 @@ export class DenoWorkspaceCrate { // times before failing hard. return await withRetries({ action: async () => { - await publishCrate(this.directoryPath); + await cargo.publishCrate(this.directoryPath); return true; }, retryCount: 3, @@ -149,6 +154,14 @@ export class DenoWorkspaceCrate { }); } + build() { + return cargo.build(this.directoryPath); + } + + updateLockFile() { + return cargo.check(this.directoryPath); + } + increment(part: "major" | "minor" | "patch") { const newVersion = semver.parse(this.version)!.inc(part).toString(); return this.setVersion(newVersion); diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json index e71d06c10b..5b2baaecb8 100644 --- a/tools/wpt/expectation.json +++ b/tools/wpt/expectation.json @@ -12307,1412 +12307,10 @@ ] }, "generateKey": { - "failures_AES-CBC.https.any.html": [ - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Empty usages: generateKey({length: 128, name: AES-CBC}, false, [])", - "Empty usages: generateKey({length: 128, name: AES-CBC}, true, [])", - "Empty usages: generateKey({length: 192, name: AES-CBC}, false, [])", - "Empty usages: generateKey({length: 192, name: AES-CBC}, true, [])", - "Empty usages: generateKey({length: 256, name: AES-CBC}, false, [])", - "Empty usages: generateKey({length: 256, name: AES-CBC}, true, [])" - ], - "failures_AES-CTR.https.any.html": [ - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Empty usages: generateKey({length: 128, name: AES-CTR}, false, [])", - "Empty usages: generateKey({length: 128, name: AES-CTR}, true, [])", - "Empty usages: generateKey({length: 192, name: AES-CTR}, false, [])", - "Empty usages: generateKey({length: 192, name: AES-CTR}, true, [])", - "Empty usages: generateKey({length: 256, name: AES-CTR}, false, [])", - "Empty usages: generateKey({length: 256, name: AES-CTR}, true, [])" - ], - "failures_AES-GCM.https.any.html": [ - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, encrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, decrypt])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey])", - "Empty usages: generateKey({length: 128, name: AES-GCM}, false, [])", - "Empty usages: generateKey({length: 128, name: AES-GCM}, true, [])", - "Empty usages: generateKey({length: 192, name: AES-GCM}, false, [])", - "Empty usages: generateKey({length: 192, name: AES-GCM}, true, [])", - "Empty usages: generateKey({length: 256, name: AES-GCM}, false, [])", - "Empty usages: generateKey({length: 256, name: AES-GCM}, true, [])" - ], - "failures_AES-KW.https.any.html": [ - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits])", - "Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 64, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 127, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 129, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 255, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 257, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey, wrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, false, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Bad algorithm property: generateKey({length: 512, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey])", - "Empty usages: generateKey({length: 128, name: AES-KW}, false, [])", - "Empty usages: generateKey({length: 128, name: AES-KW}, true, [])", - "Empty usages: generateKey({length: 192, name: AES-KW}, false, [])", - "Empty usages: generateKey({length: 192, name: AES-KW}, true, [])", - "Empty usages: generateKey({length: 256, name: AES-KW}, false, [])", - "Empty usages: generateKey({length: 256, name: AES-KW}, true, [])" - ], + "failures_AES-CBC.https.any.html": true, + "failures_AES-CTR.https.any.html": true, + "failures_AES-GCM.https.any.html": true, + "failures_AES-KW.https.any.html": true, "failures_ECDH.https.any.html": [ "Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt])", "Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt])", @@ -13819,10 +12417,10 @@ "failures_RSA-OAEP.https.any.html": true, "failures_RSA-PSS.https.any.html": true, "failures_RSASSA-PKCS1-v1_5.https.any.html": true, - "successes_AES-CBC.https.any.html": false, - "successes_AES-CTR.https.any.html": false, - "successes_AES-GCM.https.any.html": false, - "successes_AES-KW.https.any.html": false, + "successes_AES-CBC.https.any.html": true, + "successes_AES-CTR.https.any.html": true, + "successes_AES-GCM.https.any.html": true, + "successes_AES-KW.https.any.html": true, "successes_HMAC.https.any.html": true, "successes_ECDH.https.any.html": false, "successes_ECDSA.https.any.html": [ @@ -14041,42 +12639,6 @@ "Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, true, [unwrapKey])", "Good parameters: 256 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 2: 3, 20: 21, 21: 22, 22: 23, 23: 24, 24: 25, 25: 26, 26: 27, 27: 28, 28: 29, 29: 30, 3: 4, 30: 31, 31: 32, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: AES-KW}, false, [unwrapKey])", "Good parameters: 256 bits (jwk, {alg: A256KW, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {name: AES-KW}, false, [unwrapKey])", - "Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign])", - "Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign])", - "Good parameters: 128 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify])", - "Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign])", - "Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign])", - "Good parameters: 192 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify])", - "Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [sign])", - "Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify, sign])", - "Good parameters: 256 bits (jwk, {alg: HS1, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-1, name: HMAC}, false, [verify])", - "Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign])", - "Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign])", - "Good parameters: 128 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify])", - "Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign])", - "Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign])", - "Good parameters: 192 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify])", - "Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [sign])", - "Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify, sign])", - "Good parameters: 256 bits (jwk, {alg: HS256, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-256, name: HMAC}, false, [verify])", - "Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign])", - "Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign])", - "Good parameters: 128 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify])", - "Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign])", - "Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign])", - "Good parameters: 192 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify])", - "Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [sign])", - "Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify, sign])", - "Good parameters: 256 bits (jwk, {alg: HS384, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-384, name: HMAC}, false, [verify])", - "Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign])", - "Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign])", - "Good parameters: 128 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify])", - "Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign])", - "Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign])", - "Good parameters: 192 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcY, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify])", - "Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [sign])", - "Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify, sign])", - "Good parameters: 256 bits (jwk, {alg: HS512, k: AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA, kty: oct}, {hash: SHA-512, name: HMAC}, false, [verify])", "Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveBits])", "Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey, deriveBits])", "Good parameters: 128 bits (raw, {0: 1, 1: 2, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, {name: HKDF}, false, [deriveKey])",