[GCrypt] Add support for P-521 EC curves
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Oct 2017 08:23:16 +0000 (08:23 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Oct 2017 08:23:16 +0000 (08:23 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175199

Reviewed by Jiewen Tan.

Source/WebCore:

Add support for 521-bit elliptic curves in the libgcrypt-based
implementation of WebCrypto API.

In the CryptoAlgorithmECDH implementation, the bit-size of the key is now
rounded up to the next byte boundary and passed to the helper
gcryptDerive() function. There the size in bytes is used to zero-pad the
derived key data. This is done to properly handle derivation results for
the P-521 curves, where the leading zero bit could get clipped, resulting
in a derived key that is only 65 byes in length when it is expected to be
66 bytes. Further cleanups are done in gcryptDerive() to use the mpiData()
function where possible.

In the CryptoAlgorithmECDSA implementation, the bit-size of the key is
again rounded up to the nearest byte boundary before being passed to the
helper gcryptSign() and gcryptVerify() functions. This again properly
enforces the requirement of 66 bytes to handle P-521 elliptic curves.

In the CryptoKeyEC implementation, NamedCurve::P521 cases in helper
functions operating on NamedCurve values are now implemented to return
appropriate values. platformSupportedCurve() now returns true for the
NamedCurve::P521 value. Zero-padding of the private key data is used
wherever it is necessary to avoid clipping any leading zero bit in the
P-521 EC key.

No new tests -- affected tests have their baselines updated.

* crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
(WebCore::gcryptDerive):
(WebCore::CryptoAlgorithmECDH::platformDeriveBits):
* crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
(WebCore::CryptoAlgorithmECDSA::platformSign):
(WebCore::CryptoAlgorithmECDSA::platformVerify):
* crypto/gcrypt/CryptoKeyECGCrypt.cpp:
(WebCore::curveName):
(WebCore::curveIdentifier):
(WebCore::curveSize):
(WebCore::curveUncompressedFieldElementSize):
(WebCore::CryptoKeyEC::platformSupportedCurve):
(WebCore::curveForIdentifier):
(WebCore::CryptoKeyEC::platformImportPkcs8):
(WebCore::CryptoKeyEC::platformAddFieldElements const):
(WebCore::CryptoKeyEC::platformExportPkcs8 const):

LayoutTests:

Add or update Web Crypto test baselines for the GTK+ and WPE ports
to reflect the added EC P-521 support.

* platform/gtk/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt: Added.
* platform/gtk/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt: Added.
* platform/gtk/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt: Added.
* platform/wpe/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt: Added.
* platform/wpe/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt: Added.
* platform/wpe/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt: Added.
* platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224173 268f45cc-cd09-0410-ab3c-d52691b4dbfc

49 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/gtk/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt [new file with mode: 0644]
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp
Source/WebCore/crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp
Source/WebCore/crypto/gcrypt/CryptoKeyECGCrypt.cpp

index 10919ac..7ac4c84 100644 (file)
@@ -1,3 +1,58 @@
+2017-10-30  Zan Dobersek  <zdobersek@igalia.com>
+
+        [GCrypt] Add support for P-521 EC curves
+        https://bugs.webkit.org/show_bug.cgi?id=175199
+
+        Reviewed by Jiewen Tan.
+
+        Add or update Web Crypto test baselines for the GTK+ and WPE ports
+        to reflect the added EC P-521 support.
+
+        * platform/gtk/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt: Added.
+        * platform/gtk/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt: Added.
+        * platform/gtk/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt: Added.
+        * platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt: Added.
+        * platform/wpe/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt: Added.
+        * platform/wpe/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt: Added.
+        * platform/wpe/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures.worker-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes.worker-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures.https-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt: Added.
+        * platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt: Added.
+
 2017-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         Unreviewed WPE gardening. Skip Service Workers tests again after r224132.
diff --git a/LayoutTests/platform/gtk/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt b/LayoutTests/platform/gtk/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..be465e7
--- /dev/null
@@ -0,0 +1,30 @@
+Test generating an EC key pair with malformed-paramters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey("ecdh", extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh"}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: true}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: null}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: undefined}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: Symbol()}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Cannot convert a symbol to a string.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: { }}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: 1}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["encrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["decrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["sign"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["verify"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["encrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["decrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+FAIL crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-521"}, extractable, ["deriveKey"]) should reject promise. Resolved with [object Object].
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt b/LayoutTests/platform/gtk/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt
new file mode 100644 (file)
index 0000000..b7209b0
--- /dev/null
@@ -0,0 +1,24 @@
+Test ECDH deriveBits operation for corner-case length values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS deriveBits(..., 0) successfully derived 256 bits for a P-256 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-256 curve
+PASS deriveBits(..., 256) successfully derived 256 bits for a P-256 curve
+PASS Bit derivations for EC P-256 with minimum and maximum lengths succeeded
+PASS deriveBits(P256, 256 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS deriveBits(..., 0) successfully derived 384 bits for a P-384 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-384 curve
+PASS deriveBits(..., 384) successfully derived 384 bits for a P-384 curve
+PASS Bit derivations for EC P-384 with minimum and maximum lengths succeeded
+PASS deriveBits(P384, 384 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS deriveBits(..., 0) successfully derived 528 bits for a P-521 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-521 curve
+PASS deriveBits(..., 528) successfully derived 528 bits for a P-521 curve
+PASS Bit derivations for EC P-521 with minimum and maximum lengths succeeded
+PASS deriveBits(P521, 528 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt b/LayoutTests/platform/gtk/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt
new file mode 100644 (file)
index 0000000..3dbfdb7
--- /dev/null
@@ -0,0 +1,30 @@
+Test importing P-256, P-384 and P-521 SPKI ECDH keys that are using the ecDH algorithm identifier
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a P-256 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is [ ]
+Importing a P-384 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-384'
+PASS publicKey.usages is [ ]
+Importing a P-521 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-521'
+PASS publicKey.usages is [ ]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt
new file mode 100644 (file)
index 0000000..8e7907a
--- /dev/null
@@ -0,0 +1,44 @@
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 with null length 
+PASS P-521 short result 
+FAIL P-521 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveBits usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-521 asking for too many bits 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 with null length 
+PASS P-256 short result 
+FAIL P-256 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveBits usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-256 asking for too many bits 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 with null length 
+PASS P-384 short result 
+FAIL P-384 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveBits usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+PASS P-384 asking for too many bits 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt
new file mode 100644 (file)
index 0000000..60af001
--- /dev/null
@@ -0,0 +1,32 @@
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveKey usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveKey usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveKey usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt
new file mode 100644 (file)
index 0000000..9c7a6ac
--- /dev/null
@@ -0,0 +1,46 @@
+deriveBits Tests for ECDH
+
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 with null length 
+PASS P-521 short result 
+FAIL P-521 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveBits usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-521 asking for too many bits 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 with null length 
+PASS P-256 short result 
+FAIL P-256 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveBits usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-256 asking for too many bits 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 with null length 
+PASS P-384 short result 
+FAIL P-384 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveBits usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+PASS P-384 asking for too many bits 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt
new file mode 100644 (file)
index 0000000..a880bee
--- /dev/null
@@ -0,0 +1,34 @@
+deriveKey Tests for ECDH
+
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveKey usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveKey usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveKey usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+
index aa48203..1ce2c37 100644 (file)
@@ -2359,12 +2359,12 @@ PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, [])
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
 
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt
new file mode 100644 (file)
index 0000000..c70a1d5
--- /dev/null
@@ -0,0 +1,442 @@
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt
new file mode 100644 (file)
index 0000000..4c6b789
--- /dev/null
@@ -0,0 +1,420 @@
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
+
index 6ed3f9a..15f020c 100644 (file)
@@ -1271,12 +1271,12 @@ PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
@@ -1289,12 +1289,12 @@ PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
@@ -1307,12 +1307,12 @@ PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1329,14 +1329,14 @@ PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1353,14 +1353,14 @@ PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1377,12 +1377,12 @@ PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt
new file mode 100644 (file)
index 0000000..870ecb3
--- /dev/null
@@ -0,0 +1,74 @@
+
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt
new file mode 100644 (file)
index 0000000..95f4d5c
--- /dev/null
@@ -0,0 +1,56 @@
+
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+
index ce58104..ccb61ac 100644 (file)
@@ -2361,12 +2361,12 @@ PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, [])
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
 
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt
new file mode 100644 (file)
index 0000000..b8b240c
--- /dev/null
@@ -0,0 +1,444 @@
+generateKey Tests for Bad Parameters
+
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt
new file mode 100644 (file)
index 0000000..ab9709c
--- /dev/null
@@ -0,0 +1,422 @@
+generateKey Tests for Bad Parameters
+
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDH.https-expected.txt
new file mode 100644 (file)
index 0000000..1f26a7e
--- /dev/null
@@ -0,0 +1,78 @@
+generateKey Tests for Good Parameters
+
+Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser!
+
+
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA.https-expected.txt
new file mode 100644 (file)
index 0000000..f58362c
--- /dev/null
@@ -0,0 +1,60 @@
+generateKey Tests for Good Parameters
+
+Warning! RSA key generation is intrinsically very slow, so the related tests can take up to several minutes to complete, depending on browser!
+
+
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt
new file mode 100644 (file)
index 0000000..ff05f25
--- /dev/null
@@ -0,0 +1,74 @@
+
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey.https-expected.txt
new file mode 100644 (file)
index 0000000..ff05f25
--- /dev/null
@@ -0,0 +1,74 @@
+
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDH, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, true, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, []) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt
new file mode 100644 (file)
index 0000000..ba80449
--- /dev/null
@@ -0,0 +1,170 @@
+
+PASS ECDSA P-256 with SHA-1 verification 
+PASS ECDSA P-256 with SHA-256 verification 
+PASS ECDSA P-256 with SHA-384 verification 
+PASS ECDSA P-256 with SHA-512 verification 
+PASS ECDSA P-384 with SHA-1 verification 
+PASS ECDSA P-384 with SHA-256 verification 
+PASS ECDSA P-384 with SHA-384 verification 
+PASS ECDSA P-384 with SHA-512 verification 
+PASS ECDSA P-521 with SHA-1 verification 
+PASS ECDSA P-521 with SHA-256 verification 
+PASS ECDSA P-521 with SHA-384 verification 
+PASS ECDSA P-521 with SHA-512 verification 
+PASS ECDSA P-256 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-1 using privateKey to verify 
+PASS ECDSA P-256 with SHA-256 using privateKey to verify 
+PASS ECDSA P-256 with SHA-384 using privateKey to verify 
+PASS ECDSA P-256 with SHA-512 using privateKey to verify 
+PASS ECDSA P-384 with SHA-1 using privateKey to verify 
+PASS ECDSA P-384 with SHA-256 using privateKey to verify 
+PASS ECDSA P-384 with SHA-384 using privateKey to verify 
+PASS ECDSA P-384 with SHA-512 using privateKey to verify 
+PASS ECDSA P-521 with SHA-1 using privateKey to verify 
+PASS ECDSA P-521 with SHA-256 using privateKey to verify 
+PASS ECDSA P-521 with SHA-384 using privateKey to verify 
+PASS ECDSA P-521 with SHA-512 using privateKey to verify 
+PASS ECDSA P-256 with SHA-1 using publicKey to sign 
+PASS ECDSA P-256 with SHA-256 using publicKey to sign 
+PASS ECDSA P-256 with SHA-384 using publicKey to sign 
+PASS ECDSA P-256 with SHA-512 using publicKey to sign 
+PASS ECDSA P-384 with SHA-1 using publicKey to sign 
+PASS ECDSA P-384 with SHA-256 using publicKey to sign 
+PASS ECDSA P-384 with SHA-384 using publicKey to sign 
+PASS ECDSA P-384 with SHA-512 using publicKey to sign 
+PASS ECDSA P-521 with SHA-1 using publicKey to sign 
+PASS ECDSA P-521 with SHA-256 using publicKey to sign 
+PASS ECDSA P-521 with SHA-384 using publicKey to sign 
+PASS ECDSA P-521 with SHA-512 using publicKey to sign 
+PASS ECDSA P-256 with SHA-1 no verify usage 
+PASS ECDSA P-256 with SHA-256 no verify usage 
+PASS ECDSA P-256 with SHA-384 no verify usage 
+PASS ECDSA P-256 with SHA-512 no verify usage 
+PASS ECDSA P-384 with SHA-1 no verify usage 
+PASS ECDSA P-384 with SHA-256 no verify usage 
+PASS ECDSA P-384 with SHA-384 no verify usage 
+PASS ECDSA P-384 with SHA-512 no verify usage 
+PASS ECDSA P-521 with SHA-1 no verify usage 
+PASS ECDSA P-521 with SHA-256 no verify usage 
+PASS ECDSA P-521 with SHA-384 no verify usage 
+PASS ECDSA P-521 with SHA-512 no verify usage 
+PASS ECDSA P-256 with SHA-1 round trip 
+PASS ECDSA P-256 with SHA-256 round trip 
+PASS ECDSA P-256 with SHA-384 round trip 
+PASS ECDSA P-256 with SHA-512 round trip 
+PASS ECDSA P-384 with SHA-1 round trip 
+PASS ECDSA P-384 with SHA-256 round trip 
+PASS ECDSA P-384 with SHA-384 round trip 
+PASS ECDSA P-384 with SHA-512 round trip 
+PASS ECDSA P-521 with SHA-1 round trip 
+PASS ECDSA P-521 with SHA-256 round trip 
+PASS ECDSA P-521 with SHA-384 round trip 
+PASS ECDSA P-521 with SHA-512 round trip 
+PASS ECDSA P-256 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-512 verification failure due to altered plaintext 
+
diff --git a/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt b/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa.https-expected.txt
new file mode 100644 (file)
index 0000000..b07a867
--- /dev/null
@@ -0,0 +1,172 @@
+sign and verify Tests for ECDSA
+
+
+PASS ECDSA P-256 with SHA-1 verification 
+PASS ECDSA P-256 with SHA-256 verification 
+PASS ECDSA P-256 with SHA-384 verification 
+PASS ECDSA P-256 with SHA-512 verification 
+PASS ECDSA P-384 with SHA-1 verification 
+PASS ECDSA P-384 with SHA-256 verification 
+PASS ECDSA P-384 with SHA-384 verification 
+PASS ECDSA P-384 with SHA-512 verification 
+PASS ECDSA P-521 with SHA-1 verification 
+PASS ECDSA P-521 with SHA-256 verification 
+PASS ECDSA P-521 with SHA-384 verification 
+PASS ECDSA P-521 with SHA-512 verification 
+PASS ECDSA P-256 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-521 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-521 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-1 using privateKey to verify 
+PASS ECDSA P-256 with SHA-256 using privateKey to verify 
+PASS ECDSA P-256 with SHA-384 using privateKey to verify 
+PASS ECDSA P-256 with SHA-512 using privateKey to verify 
+PASS ECDSA P-384 with SHA-1 using privateKey to verify 
+PASS ECDSA P-384 with SHA-256 using privateKey to verify 
+PASS ECDSA P-384 with SHA-384 using privateKey to verify 
+PASS ECDSA P-384 with SHA-512 using privateKey to verify 
+PASS ECDSA P-521 with SHA-1 using privateKey to verify 
+PASS ECDSA P-521 with SHA-256 using privateKey to verify 
+PASS ECDSA P-521 with SHA-384 using privateKey to verify 
+PASS ECDSA P-521 with SHA-512 using privateKey to verify 
+PASS ECDSA P-256 with SHA-1 using publicKey to sign 
+PASS ECDSA P-256 with SHA-256 using publicKey to sign 
+PASS ECDSA P-256 with SHA-384 using publicKey to sign 
+PASS ECDSA P-256 with SHA-512 using publicKey to sign 
+PASS ECDSA P-384 with SHA-1 using publicKey to sign 
+PASS ECDSA P-384 with SHA-256 using publicKey to sign 
+PASS ECDSA P-384 with SHA-384 using publicKey to sign 
+PASS ECDSA P-384 with SHA-512 using publicKey to sign 
+PASS ECDSA P-521 with SHA-1 using publicKey to sign 
+PASS ECDSA P-521 with SHA-256 using publicKey to sign 
+PASS ECDSA P-521 with SHA-384 using publicKey to sign 
+PASS ECDSA P-521 with SHA-512 using publicKey to sign 
+PASS ECDSA P-256 with SHA-1 no verify usage 
+PASS ECDSA P-256 with SHA-256 no verify usage 
+PASS ECDSA P-256 with SHA-384 no verify usage 
+PASS ECDSA P-256 with SHA-512 no verify usage 
+PASS ECDSA P-384 with SHA-1 no verify usage 
+PASS ECDSA P-384 with SHA-256 no verify usage 
+PASS ECDSA P-384 with SHA-384 no verify usage 
+PASS ECDSA P-384 with SHA-512 no verify usage 
+PASS ECDSA P-521 with SHA-1 no verify usage 
+PASS ECDSA P-521 with SHA-256 no verify usage 
+PASS ECDSA P-521 with SHA-384 no verify usage 
+PASS ECDSA P-521 with SHA-512 no verify usage 
+PASS ECDSA P-256 with SHA-1 round trip 
+PASS ECDSA P-256 with SHA-256 round trip 
+PASS ECDSA P-256 with SHA-384 round trip 
+PASS ECDSA P-256 with SHA-512 round trip 
+PASS ECDSA P-384 with SHA-1 round trip 
+PASS ECDSA P-384 with SHA-256 round trip 
+PASS ECDSA P-384 with SHA-384 round trip 
+PASS ECDSA P-384 with SHA-512 round trip 
+PASS ECDSA P-521 with SHA-1 round trip 
+PASS ECDSA P-521 with SHA-256 round trip 
+PASS ECDSA P-521 with SHA-384 round trip 
+PASS ECDSA P-521 with SHA-512 round trip 
+PASS ECDSA P-256 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-521 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-521 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-521 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-521 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-521 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-521 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-521 with SHA-512 verification failure due to altered plaintext 
+
diff --git a/LayoutTests/platform/wpe/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt b/LayoutTests/platform/wpe/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..be465e7
--- /dev/null
@@ -0,0 +1,30 @@
+Test generating an EC key pair with malformed-paramters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey("ecdh", extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh"}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: true}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: null}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: undefined}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Member EcKeyParams.namedCurve is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: Symbol()}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with TypeError: Cannot convert a symbol to a string.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: { }}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: 1}, extractable, ["deriveKey", "deriveBits"]) rejected promise  with NotSupportedError: The algorithm is not supported.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["encrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["decrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["sign"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["verify"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["encrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["decrypt"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError: A required parameter was missing or out-of-range.
+FAIL crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-521"}, extractable, ["deriveKey"]) should reject promise. Resolved with [object Object].
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt b/LayoutTests/platform/wpe/crypto/subtle/ecdh-derive-bits-length-limits-expected.txt
new file mode 100644 (file)
index 0000000..b7209b0
--- /dev/null
@@ -0,0 +1,24 @@
+Test ECDH deriveBits operation for corner-case length values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS deriveBits(..., 0) successfully derived 256 bits for a P-256 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-256 curve
+PASS deriveBits(..., 256) successfully derived 256 bits for a P-256 curve
+PASS Bit derivations for EC P-256 with minimum and maximum lengths succeeded
+PASS deriveBits(P256, 256 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS deriveBits(..., 0) successfully derived 384 bits for a P-384 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-384 curve
+PASS deriveBits(..., 384) successfully derived 384 bits for a P-384 curve
+PASS Bit derivations for EC P-384 with minimum and maximum lengths succeeded
+PASS deriveBits(P384, 384 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS deriveBits(..., 0) successfully derived 528 bits for a P-521 curve
+PASS deriveBits(..., 8) successfully derived 8 bits for a P-521 curve
+PASS deriveBits(..., 528) successfully derived 528 bits for a P-521 curve
+PASS Bit derivations for EC P-521 with minimum and maximum lengths succeeded
+PASS deriveBits(P521, 528 + 8) rejected promise  with OperationError: The operation failed for an operation-specific reason.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt b/LayoutTests/platform/wpe/crypto/subtle/ecdh-import-spki-key-ecdh-identifier-expected.txt
new file mode 100644 (file)
index 0000000..3dbfdb7
--- /dev/null
@@ -0,0 +1,30 @@
+Test importing P-256, P-384 and P-521 SPKI ECDH keys that are using the ecDH algorithm identifier
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a P-256 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is [ ]
+Importing a P-384 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-384'
+PASS publicKey.usages is [ ]
+Importing a P-521 key that uses the ecDH algorithm identifier ...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDH'
+PASS publicKey.algorithm.namedCurve is 'P-521'
+PASS publicKey.usages is [ ]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_bits.worker-expected.txt
new file mode 100644 (file)
index 0000000..8e7907a
--- /dev/null
@@ -0,0 +1,44 @@
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 with null length 
+PASS P-521 short result 
+FAIL P-521 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveBits usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-521 asking for too many bits 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 with null length 
+PASS P-256 short result 
+FAIL P-256 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveBits usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-256 asking for too many bits 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 with null length 
+PASS P-384 short result 
+FAIL P-384 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveBits usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+PASS P-384 asking for too many bits 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/ecdh_keys.worker-expected.txt
new file mode 100644 (file)
index 0000000..60af001
--- /dev/null
@@ -0,0 +1,32 @@
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveKey usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveKey usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveKey usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt
new file mode 100644 (file)
index 0000000..9c7a6ac
--- /dev/null
@@ -0,0 +1,46 @@
+deriveBits Tests for ECDH
+
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 with null length 
+PASS P-521 short result 
+FAIL P-521 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveBits usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-521 asking for too many bits 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 with null length 
+PASS P-256 short result 
+FAIL P-256 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveBits usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-256 asking for too many bits 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 with null length 
+PASS P-384 short result 
+FAIL P-384 non-multiple of 8 bits assert_unreached: deriveBits failed with error OperationError: The operation failed for an operation-specific reason Reached unreachable code
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveBits usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+PASS P-384 asking for too many bits 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys.https-expected.txt
new file mode 100644 (file)
index 0000000..a880bee
--- /dev/null
@@ -0,0 +1,34 @@
+deriveKey Tests for ECDH
+
+
+PASS P-521 good parameters 
+PASS P-521 mixed case parameters 
+PASS P-521 missing public curve 
+PASS P-521 public property of algorithm is not a CryptoKey 
+PASS P-521 mismatched curves 
+PASS P-521 public property of algorithm is not an ECDSA public key 
+PASS P-521 no deriveKey usage for base key 
+PASS P-521 base key is not a private key 
+PASS P-521 public property value is a private key 
+PASS P-521 public property value is a secret key 
+PASS P-256 good parameters 
+PASS P-256 mixed case parameters 
+PASS P-256 missing public curve 
+PASS P-256 public property of algorithm is not a CryptoKey 
+PASS P-256 mismatched curves 
+PASS P-256 public property of algorithm is not an ECDSA public key 
+PASS P-256 no deriveKey usage for base key 
+PASS P-256 base key is not a private key 
+PASS P-256 public property value is a private key 
+PASS P-256 public property value is a secret key 
+PASS P-384 good parameters 
+PASS P-384 mixed case parameters 
+PASS P-384 missing public curve 
+PASS P-384 public property of algorithm is not a CryptoKey 
+PASS P-384 mismatched curves 
+PASS P-384 public property of algorithm is not an ECDSA public key 
+PASS P-384 no deriveKey usage for base key 
+PASS P-384 base key is not a private key 
+PASS P-384 public property value is a private key 
+PASS P-384 public property value is a secret key 
+
index aa48203..1ce2c37 100644 (file)
@@ -2359,12 +2359,12 @@ PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, [])
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
 
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDH.worker-expected.txt
new file mode 100644 (file)
index 0000000..c70a1d5
--- /dev/null
@@ -0,0 +1,442 @@
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt
new file mode 100644 (file)
index 0000000..4c6b789
--- /dev/null
@@ -0,0 +1,420 @@
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
+
index 6ed3f9a..15f020c 100644 (file)
@@ -1271,12 +1271,12 @@ PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
@@ -1289,12 +1289,12 @@ PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
@@ -1307,12 +1307,12 @@ PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1329,14 +1329,14 @@ PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1353,14 +1353,14 @@ PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
@@ -1377,12 +1377,12 @@ PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits])
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
-FAIL Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) assert_unreached: Threw an unexpected error: NotSupportedError: The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
 
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDH.worker-expected.txt
new file mode 100644 (file)
index 0000000..870ecb3
--- /dev/null
@@ -0,0 +1,74 @@
+
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt
new file mode 100644 (file)
index 0000000..95f4d5c
--- /dev/null
@@ -0,0 +1,56 @@
+
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) 
+
index ce58104..ccb61ac 100644 (file)
@@ -2361,12 +2361,12 @@ PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, [])
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
 PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
 
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDH.https-expected.txt
new file mode 100644 (file)
index 0000000..b8b240c
--- /dev/null
@@ -0,0 +1,444 @@
+generateKey Tests for Bad Parameters
+
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits]) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, []) 
+
diff --git a/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt b/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA.https-expected.txt
new file mode 100644 (file)
index 0000000..ab9709c
--- /dev/null
@@ -0,0 +1,422 @@
+generateKey Tests for Bad Parameters
+
+
+PASS Bad algorithm: generateKey(AES, false, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey(AES, false, [sign]) 
+PASS Bad algorithm: generateKey(AES, true, [sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey(AES, false, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey(AES, false, []) 
+PASS Bad algorithm: generateKey(AES, true, []) 
+PASS Bad algorithm: generateKey(AES, RED, []) 
+PASS Bad algorithm: generateKey(AES, 7, []) 
+PASS Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, false, []) 
+PASS Bad algorithm: generateKey({name: AES}, true, []) 
+PASS Bad algorithm: generateKey({name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, []) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, []) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, []) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, []) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
+PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) 
+