Update SubtleCrypto::generateKey to match the latest spec
authorjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Oct 2016 06:07:04 +0000 (06:07 +0000)
committerjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Oct 2016 06:07:04 +0000 (06:07 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163718
<rdar://problem/28864380>

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

* WebCryptoAPI/generateKey/test_aes-cbc-expected.txt:
* WebCryptoAPI/generateKey/test_aes-cbc.html:
* WebCryptoAPI/generateKey/test_aes-ctr-expected.txt:
* WebCryptoAPI/generateKey/test_aes-ctr.html:
* WebCryptoAPI/generateKey/test_failures-expected.txt:
* WebCryptoAPI/generateKey/test_failures.html:
* WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt:
* WebCryptoAPI/generateKey/test_failures_AES-CBC.html:
* WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt:
* WebCryptoAPI/generateKey/test_failures_AES-CTR.html:
* WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt:
* WebCryptoAPI/generateKey/test_failures_AES-GCM.html:
* WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt:
* WebCryptoAPI/generateKey/test_failures_AES-KW.html:
* WebCryptoAPI/generateKey/test_failures_ECDH-expected.txt:
* WebCryptoAPI/generateKey/test_failures_ECDH.html:
* WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt:
* WebCryptoAPI/generateKey/test_failures_ECDSA.html:
* WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt:
* WebCryptoAPI/generateKey/test_failures_HMAC.html:
* WebCryptoAPI/generateKey/test_failures_RSA-OAEP-expected.txt:
* WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html:
* WebCryptoAPI/generateKey/test_failures_RSA-PSS-expected.txt:
* WebCryptoAPI/generateKey/test_failures_RSA-PSS.html:
* WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5-expected.txt:
* WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html:
* WebCryptoAPI/generateKey/test_successes-expected.txt:
* WebCryptoAPI/generateKey/test_successes.html:
* WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt:
* WebCryptoAPI/generateKey/test_successes_AES-CBC.html:
* WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt:
* WebCryptoAPI/generateKey/test_successes_AES-CTR.html:
* WebCryptoAPI/generateKey/test_successes_AES-GCM-expected.txt:
* WebCryptoAPI/generateKey/test_successes_AES-GCM.html:
* WebCryptoAPI/generateKey/test_successes_AES-KW-expected.txt:
* WebCryptoAPI/generateKey/test_successes_AES-KW.html:
* WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt:
* WebCryptoAPI/generateKey/test_successes_ECDH.html:
* WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt:
* WebCryptoAPI/generateKey/test_successes_ECDSA.html:
* WebCryptoAPI/generateKey/test_successes_HMAC-expected.txt:
* WebCryptoAPI/generateKey/test_successes_HMAC.html:
* WebCryptoAPI/generateKey/test_successes_RSA-OAEP-expected.txt:
* WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html:
* WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt:
* WebCryptoAPI/generateKey/test_successes_RSA-PSS.html:
* WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5-expected.txt:
* WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html:
* WebCryptoAPI/idlharness-expected.txt:

Source/WebCore:

This patch does following few things:
1. It updates the SubtleCrypto::generateKey method to match the latest spec:
   https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-generateKey.
   It also refers to the latest Editor's Draft at a certain degree:
   https://w3c.github.io/webcrypto/Overview.html#SubtleCrypto-method-generateKey.
2. It implements generateKey operations of following algorithms: AES-CBC, AES-KW,
   HMAC, RSAES-PKCS1-V1_5, RSASSA-PKCS1-V1_5, and RSA-OAEP.
3. It replaces SPECIALIZE_TYPE_TRAITS_CRYPTO_ALGORITHM_PARAMETERS with
SPECIALIZE_TYPE_TRAITS_CRYPTO_ALGORITHM_PARAMETERS_DEPRECATED for deprecated params.
4. It fixes https://bugs.webkit.org/show_bug.cgi?id=129750 as well.

Tests: crypto/subtle/aes-cbc-generate-key-length-128.html
       crypto/subtle/aes-cbc-generate-key-length-192.html
       crypto/subtle/aes-cbc-generate-key-length-256.html
       crypto/subtle/aes-generate-key-malformed-parameters.html
       crypto/subtle/aes-kw-generate-key.html
       crypto/subtle/generate-key-malformed-paramters.html
       crypto/subtle/hmac-generate-key-customized-length.html
       crypto/subtle/hmac-generate-key-hash-object.html
       crypto/subtle/hmac-generate-key-malformed-parameters.html
       crypto/subtle/hmac-generate-key-sha1.html
       crypto/subtle/hmac-generate-key-sha224.html
       crypto/subtle/hmac-generate-key-sha256.html
       crypto/subtle/hmac-generate-key-sha384.html
       crypto/subtle/hmac-generate-key-sha512.html
       crypto/subtle/rsa-generate-key-malformed-parameters.html
       crypto/subtle/rsa-oaep-generate-key.html
       crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html
       crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html
       crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
       crypto/webkitSubtle/hmac-generate-key.html:
       crypto/workers/subtle/aes-generate-key.html
       crypto/workers/subtle/hmac-generate-key.html
       crypto/workers/subtle/rsa-generate-key.html

* CMakeLists.txt:
* DerivedSources.make:
* Modules/encryptedmedia/CDMSessionClearKey.cpp:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSSubtleCryptoCustom.cpp: Added.
(WebCore::toHashIdentifier):
(WebCore::normalizeCryptoAlgorithmParameters):
(WebCore::cryptoKeyUsagesFromJSValue):
(WebCore::createAlgorithm):
(WebCore::rejectWithException):
(WebCore::jsSubtleCryptoFunctionGenerateKeyPromise):
(WebCore::JSSubtleCrypto::generateKey):
* bindings/js/JSWebKitSubtleCryptoCustom.cpp:
(WebCore::JSWebKitSubtleCrypto::generateKey):
* crypto/CryptoAlgorithm.cpp:
(WebCore::CryptoAlgorithm::generateKey):
* crypto/CryptoAlgorithm.h:
* crypto/CryptoAlgorithmParameters.h: Added.
(WebCore::CryptoAlgorithmParameters::CryptoAlgorithmParameters):
(WebCore::CryptoAlgorithmParameters::~CryptoAlgorithmParameters):
(WebCore::CryptoAlgorithmParameters::parametersClass):
* crypto/CryptoAlgorithmParameters.idl: Added.
* crypto/CryptoAlgorithmParametersDeprecated.h:
* crypto/CryptoKey.cpp:
(WebCore::CryptoKey::setUsagesBitmap):
* crypto/CryptoKey.h:
* crypto/CryptoKeyPair.idl:
* crypto/SubtleCrypto.idl:
* crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
(WebCore::CryptoAlgorithmAES_CBC::generateKey):
* crypto/algorithms/CryptoAlgorithmAES_CBC.h:
* crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
(WebCore::CryptoAlgorithmAES_KW::generateKey):
* crypto/algorithms/CryptoAlgorithmAES_KW.h:
* crypto/algorithms/CryptoAlgorithmHMAC.cpp:
(WebCore::CryptoAlgorithmHMAC::generateKey):
* crypto/algorithms/CryptoAlgorithmHMAC.h:
* crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
(WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
* crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
* crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
(WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
* crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
* crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
(WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
* crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
* crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
(WebCore::CryptoKeyRSA::generatePair):
* crypto/keys/CryptoKeyAES.cpp:
(WebCore::CryptoKeyAES::generate):
* crypto/keys/CryptoKeyHMAC.cpp:
(WebCore::CryptoKeyHMAC::generate):
* crypto/keys/CryptoKeyRSA.h:
* crypto/mac/CryptoKeyRSAMac.cpp:
(WebCore::CryptoKeyRSA::generatePair):
* crypto/parameters/AesKeyGenParams.idl: Added.
* crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: Added.
* crypto/parameters/CryptoAlgorithmAesKeyGenParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmHmacKeyGenParams.h: Added.
* crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmHmacParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h: Added.
* crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
(WebCore::CryptoAlgorithmRsaKeyGenParams::arrayToVector):
* crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHashDeprecated.h:
* crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h:
* crypto/parameters/CryptoAlgorithmRsaSsaParamsDeprecated.h:
* crypto/parameters/HmacKeyGenParams.idl: Added.
* crypto/parameters/RsaHashedKeyGenParams.idl: Added.
* crypto/parameters/RsaKeyGenParams.idl: Added.

LayoutTests:

Besides adding tests for SubtleCrypto::generateKey related stuff and fixing HMAC. This patch also add
shouldReject(_a, _rejectCallback, _resolveCallback, _message) in js-test-pre.js.

* TestExpectations:
* crypto/subtle/aes-cbc-generate-key-length-128-expected.txt: Added.
* crypto/subtle/aes-cbc-generate-key-length-128.html: Added.
* crypto/subtle/aes-cbc-generate-key-length-192-expected.txt: Added.
* crypto/subtle/aes-cbc-generate-key-length-192.html: Added.
* crypto/subtle/aes-cbc-generate-key-length-256-expected.txt: Added.
* crypto/subtle/aes-cbc-generate-key-length-256.html: Added.
* crypto/subtle/aes-generate-key-malformed-parameters-expected.txt: Added.
* crypto/subtle/aes-generate-key-malformed-parameters.html: Added.
* crypto/subtle/aes-kw-generate-key-expected.txt: Added.
* crypto/subtle/aes-kw-generate-key.html: Added.
* crypto/subtle/generate-key-malformed-paramters-expected.txt: Added.
* crypto/subtle/generate-key-malformed-paramters.html: Added.
* crypto/subtle/hmac-generate-key-customized-length-expected.txt: Added.
* crypto/subtle/hmac-generate-key-customized-length.html: Added.
* crypto/subtle/hmac-generate-key-hash-object-expected.txt: Added.
* crypto/subtle/hmac-generate-key-hash-object.html: Added.
* crypto/subtle/hmac-generate-key-malformed-parameters-expected.txt: Added.
* crypto/subtle/hmac-generate-key-malformed-parameters.html: Added.
* crypto/subtle/hmac-generate-key-sha1-expected.txt: Added.
* crypto/subtle/hmac-generate-key-sha1.html: Added.
* crypto/subtle/hmac-generate-key-sha224-expected.txt: Added.
* crypto/subtle/hmac-generate-key-sha224.html: Added.
* crypto/subtle/hmac-generate-key-sha256-expected.txt: Added.
* crypto/subtle/hmac-generate-key-sha256.html: Added.
* crypto/subtle/hmac-generate-key-sha384-expected.txt: Added.
* crypto/subtle/hmac-generate-key-sha384.html: Added.
* crypto/subtle/hmac-generate-key-sha512-expected.txt: Added.
* crypto/subtle/hmac-generate-key-sha512.html: Added.
* crypto/subtle/rsa-generate-key-malformed-parameters-expected.txt: Added.
* crypto/subtle/rsa-generate-key-malformed-parameters.html: Added.
* crypto/subtle/rsa-oaep-generate-key-expected.txt: Added.
* crypto/subtle/rsa-oaep-generate-key.html: Added.
* crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt: Added.
* crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt: Added.
* crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html: Added.
* crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html: Added.
* crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt: Added.
* crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html: Added.
* crypto/webkitSubtle/hmac-generate-key-expected.txt:
* crypto/webkitSubtle/hmac-generate-key.html:
* crypto/workers/subtle/aes-generate-key-expected.txt: Added.
* crypto/workers/subtle/aes-generate-key.html: Added.
* crypto/workers/subtle/hmac-generate-key-expected.txt: Added.
* crypto/workers/subtle/hmac-generate-key.html: Added.
* crypto/workers/subtle/resources/aes-generate-key.js: Added.
* crypto/workers/subtle/resources/hmac-generate-key.js: Added.
* crypto/workers/subtle/resources/rsa-generate-key.js: Added.
* crypto/workers/subtle/rsa-generate-key-expected.txt: Added.
* crypto/workers/subtle/rsa-generate-key.html: Added.
* resources/js-test-pre.js:

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

150 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128.html [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192.html [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters.html [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-kw-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/aes-kw-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/generate-key-malformed-paramters-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/generate-key-malformed-paramters.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-customized-length-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-customized-length.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-hash-object-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-hash-object.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha1-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha1.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha224-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha224.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha384-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha384.html [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha512-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/hmac-generate-key-sha512.html [new file with mode: 0644]
LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters.html [new file with mode: 0644]
LayoutTests/crypto/subtle/rsa-oaep-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/rsa-oaep-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html [new file with mode: 0644]
LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/webkitSubtle/hmac-generate-key-expected.txt
LayoutTests/crypto/webkitSubtle/hmac-generate-key.html
LayoutTests/crypto/workers/subtle/aes-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/aes-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/hmac-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/hmac-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/resources/aes-generate-key.js [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/resources/hmac-generate-key.js [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/resources/rsa-generate-key.js [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/rsa-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/rsa-generate-key.html [new file with mode: 0644]
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_aes-cbc-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_aes-cbc.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_aes-ctr-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_aes-ctr.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CBC.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CTR.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-GCM.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-KW.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDH-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDH.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDSA.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_HMAC.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-OAEP-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-PSS-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CBC.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CTR.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-GCM-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-GCM.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-KW-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-KW.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDH.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDSA.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_HMAC-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_HMAC.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-OAEP-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5-expected.txt
LayoutTests/imported/w3c/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html
LayoutTests/imported/w3c/WebCryptoAPI/idlharness-expected.txt
LayoutTests/resources/js-test-pre.js
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/Modules/encryptedmedia/CDMSessionClearKey.cpp
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp [new file with mode: 0644]
Source/WebCore/bindings/js/JSWebKitSubtleCryptoCustom.cpp
Source/WebCore/crypto/CryptoAlgorithm.cpp
Source/WebCore/crypto/CryptoAlgorithm.h
Source/WebCore/crypto/CryptoAlgorithmParameters.h [new file with mode: 0644]
Source/WebCore/crypto/CryptoAlgorithmParameters.idl [new file with mode: 0644]
Source/WebCore/crypto/CryptoAlgorithmParametersDeprecated.h
Source/WebCore/crypto/CryptoKey.h
Source/WebCore/crypto/CryptoKeyPair.idl
Source/WebCore/crypto/SubtleCrypto.idl
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSA_OAEP.h
Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp
Source/WebCore/crypto/keys/CryptoKeyAES.cpp
Source/WebCore/crypto/keys/CryptoKeyHMAC.cpp
Source/WebCore/crypto/keys/CryptoKeyRSA.h
Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp
Source/WebCore/crypto/parameters/AesKeyGenParams.idl [new file with mode: 0644]
Source/WebCore/crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmAesKeyGenParams.h [new file with mode: 0644]
Source/WebCore/crypto/parameters/CryptoAlgorithmAesKeyGenParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmHmacKeyGenParams.h [new file with mode: 0644]
Source/WebCore/crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmHmacParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h [new file with mode: 0644]
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h [new file with mode: 0644]
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHashDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h
Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaParamsDeprecated.h
Source/WebCore/crypto/parameters/HmacKeyGenParams.idl [new file with mode: 0644]
Source/WebCore/crypto/parameters/RsaHashedKeyGenParams.idl [new file with mode: 0644]
Source/WebCore/crypto/parameters/RsaKeyGenParams.idl [new file with mode: 0644]

index bdbea74..09e4fc9 100644 (file)
@@ -1,3 +1,66 @@
+2016-10-24  Jiewen Tan  <jiewen_tan@apple.com>
+
+        Update SubtleCrypto::generateKey to match the latest spec
+        https://bugs.webkit.org/show_bug.cgi?id=163718
+        <rdar://problem/28864380>
+
+        Reviewed by Chris Dumez.
+
+        Besides adding tests for SubtleCrypto::generateKey related stuff and fixing HMAC. This patch also add
+        shouldReject(_a, _rejectCallback, _resolveCallback, _message) in js-test-pre.js.
+
+        * TestExpectations:
+        * crypto/subtle/aes-cbc-generate-key-length-128-expected.txt: Added.
+        * crypto/subtle/aes-cbc-generate-key-length-128.html: Added.
+        * crypto/subtle/aes-cbc-generate-key-length-192-expected.txt: Added.
+        * crypto/subtle/aes-cbc-generate-key-length-192.html: Added.
+        * crypto/subtle/aes-cbc-generate-key-length-256-expected.txt: Added.
+        * crypto/subtle/aes-cbc-generate-key-length-256.html: Added.
+        * crypto/subtle/aes-generate-key-malformed-parameters-expected.txt: Added.
+        * crypto/subtle/aes-generate-key-malformed-parameters.html: Added.
+        * crypto/subtle/aes-kw-generate-key-expected.txt: Added.
+        * crypto/subtle/aes-kw-generate-key.html: Added.
+        * crypto/subtle/generate-key-malformed-paramters-expected.txt: Added.
+        * crypto/subtle/generate-key-malformed-paramters.html: Added.
+        * crypto/subtle/hmac-generate-key-customized-length-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-customized-length.html: Added.
+        * crypto/subtle/hmac-generate-key-hash-object-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-hash-object.html: Added.
+        * crypto/subtle/hmac-generate-key-malformed-parameters-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-malformed-parameters.html: Added.
+        * crypto/subtle/hmac-generate-key-sha1-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-sha1.html: Added.
+        * crypto/subtle/hmac-generate-key-sha224-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-sha224.html: Added.
+        * crypto/subtle/hmac-generate-key-sha256-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-sha256.html: Added.
+        * crypto/subtle/hmac-generate-key-sha384-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-sha384.html: Added.
+        * crypto/subtle/hmac-generate-key-sha512-expected.txt: Added.
+        * crypto/subtle/hmac-generate-key-sha512.html: Added.
+        * crypto/subtle/rsa-generate-key-malformed-parameters-expected.txt: Added.
+        * crypto/subtle/rsa-generate-key-malformed-parameters.html: Added.
+        * crypto/subtle/rsa-oaep-generate-key-expected.txt: Added.
+        * crypto/subtle/rsa-oaep-generate-key.html: Added.
+        * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt: Added.
+        * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt: Added.
+        * crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html: Added.
+        * crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html: Added.
+        * crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt: Added.
+        * crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html: Added.
+        * crypto/webkitSubtle/hmac-generate-key-expected.txt:
+        * crypto/webkitSubtle/hmac-generate-key.html:
+        * crypto/workers/subtle/aes-generate-key-expected.txt: Added.
+        * crypto/workers/subtle/aes-generate-key.html: Added.
+        * crypto/workers/subtle/hmac-generate-key-expected.txt: Added.
+        * crypto/workers/subtle/hmac-generate-key.html: Added.
+        * crypto/workers/subtle/resources/aes-generate-key.js: Added.
+        * crypto/workers/subtle/resources/hmac-generate-key.js: Added.
+        * crypto/workers/subtle/resources/rsa-generate-key.js: Added.
+        * crypto/workers/subtle/rsa-generate-key-expected.txt: Added.
+        * crypto/workers/subtle/rsa-generate-key.html: Added.
+        * resources/js-test-pre.js:
+
 2016-10-24  Chris Dumez  <cdumez@apple.com>
 
         IDBDatabase.createObjectStore() should take a IDBObjectStoreParameters dictionary in parameter
 2016-10-24  Chris Dumez  <cdumez@apple.com>
 
         IDBDatabase.createObjectStore() should take a IDBObjectStoreParameters dictionary in parameter
index 34cbc95..15c2114 100644 (file)
@@ -927,30 +927,9 @@ imported/w3c/WebCryptoAPI/encrypt_decrypt/test_aes_cbc.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_aes_ctr.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_aes_gcm.html [ Skip ]
 imported/w3c/WebCryptoAPI/encrypt_decrypt/test_rsa_oaep.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_aes-cbc.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_aes-ctr.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CBC.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-CTR.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-GCM.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_AES-KW.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDH.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_ECDSA.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_HMAC.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_RSA-PSS.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_failures.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CBC.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-CTR.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-GCM.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_AES-KW.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDH.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_ECDSA.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_HMAC.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-PSS.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html [ Skip ]
-imported/w3c/WebCryptoAPI/generateKey/test_successes.html [ Skip ]
+# Take too long to complete, need to scale down.
+imported/w3c/WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html [ Slow ]
+imported/w3c/WebCryptoAPI/generateKey/test_successes.html [ Slow ]
 
 editing/deleting/delete-emoji.html [ Slow ]
 
 
 editing/deleting/delete-emoji.html [ Slow ]
 
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128-expected.txt b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128-expected.txt
new file mode 100644 (file)
index 0000000..74849a2
--- /dev/null
@@ -0,0 +1,15 @@
+Test generating an AES key with length 128 using AES-CBC algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'AES-CBC'
+PASS key.algorithm.length is 128
+PASS key.usages is ['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128.html b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-128.html
new file mode 100644 (file)
index 0000000..c9b6294
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an AES key with length 128 using AES-CBC algorithm.");
+
+jsTestIsAsync = true;
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "aes-cbc", length: 128}, true, ["decrypt", "encrypt", "unwrapKey", "wrapKey"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'AES-CBC'");
+    shouldBe("key.algorithm.length", "128");
+    shouldBe("key.usages", "['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192-expected.txt b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192-expected.txt
new file mode 100644 (file)
index 0000000..6c4d885
--- /dev/null
@@ -0,0 +1,15 @@
+Test generating an AES key with length 192 using AES-CBC algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'AES-CBC'
+PASS key.algorithm.length is 192
+PASS key.usages is ['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192.html b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-192.html
new file mode 100644 (file)
index 0000000..61f0b7e
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an AES key with length 192 using AES-CBC algorithm.");
+
+jsTestIsAsync = true;
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "aes-cbc", length: 192}, true, ["decrypt", "encrypt", "unwrapKey", "wrapKey"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'AES-CBC'");
+    shouldBe("key.algorithm.length", "192");
+    shouldBe("key.usages", "['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256-expected.txt b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256-expected.txt
new file mode 100644 (file)
index 0000000..5533c6b
--- /dev/null
@@ -0,0 +1,15 @@
+Test generating an AES key with length 256 using AES-CBC algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'AES-CBC'
+PASS key.algorithm.length is 256
+PASS key.usages is ['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256.html b/LayoutTests/crypto/subtle/aes-cbc-generate-key-length-256.html
new file mode 100644 (file)
index 0000000..59df447
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an AES key with length 256 using AES-CBC algorithm.");
+
+jsTestIsAsync = true;
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "aes-cbc", length: 256}, true, ["decrypt", "encrypt", "unwrapKey", "wrapKey"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'AES-CBC'");
+    shouldBe("key.algorithm.length", "256");
+    shouldBe("key.usages", "['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters-expected.txt b/LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..432dbbd
--- /dev/null
@@ -0,0 +1,29 @@
+Test generating an AES key with malformed-paramters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey("aes-cbc", extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member AesKeyGenParams.length is required and must be an instance of unsigned short.
+PASS crypto.subtle.generateKey({name: "aes-cbc"}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member AesKeyGenParams.length is required and must be an instance of unsigned short.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: true}, extractable, ["encrypt", "decrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: null}, extractable, ["encrypt", "decrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: undefined}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member AesKeyGenParams.length is required and must be an instance of unsigned short.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: Symbol()}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Cannot convert a symbol to a number.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: { }}, extractable, ["encrypt", "decrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: "foo"}, extractable, ["encrypt", "decrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "aes-cbc", length: 111}, extractable, ["encrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "aes-kw", length: 111}, extractable, ["wrapKey"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters.html b/LayoutTests/crypto/subtle/aes-generate-key-malformed-parameters.html
new file mode 100644 (file)
index 0000000..1a4f1d6
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an AES key with malformed-paramters.");
+
+var extractable = true;
+
+// Malformed AlgorithmIdentifiers
+shouldReject('crypto.subtle.generateKey("aes-cbc", extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc"}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: true}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: null}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: undefined}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: Symbol()}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: { }}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: "foo"}, extractable, ["encrypt", "decrypt"])');
+// Wrong usages
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["verify"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["verify"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 128}, extractable, ["deriveBits"])');
+// Wrong length
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 111}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-kw", length: 111}, extractable, ["wrapKey"])');
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/aes-kw-generate-key-expected.txt b/LayoutTests/crypto/subtle/aes-kw-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..3f88527
--- /dev/null
@@ -0,0 +1,15 @@
+Test generating an AES key with length 128 using AES-KW algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'AES-KW'
+PASS key.algorithm.length is 128
+PASS key.usages is ['unwrapKey', 'wrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/aes-kw-generate-key.html b/LayoutTests/crypto/subtle/aes-kw-generate-key.html
new file mode 100644 (file)
index 0000000..2327d65
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an AES key with length 128 using AES-KW algorithm.");
+
+jsTestIsAsync = true;
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "aes-kw", length: 128}, true, ["unwrapKey", "wrapKey"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'AES-KW'");
+    shouldBe("key.algorithm.length", "128");
+    shouldBe("key.usages", "['unwrapKey', 'wrapKey']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/generate-key-malformed-paramters-expected.txt b/LayoutTests/crypto/subtle/generate-key-malformed-paramters-expected.txt
new file mode 100644 (file)
index 0000000..2a8d633
--- /dev/null
@@ -0,0 +1,48 @@
+Test generating a CryptoKey object with malformed parameters
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey() rejected promise  with TypeError: Not enough arguments.
+PASS crypto.subtle.generateKey(1) rejected promise  with TypeError: Not enough arguments.
+PASS crypto.subtle.generateKey(1, 2) rejected promise  with TypeError: Not enough arguments.
+PASS crypto.subtle.generateKey(1, 2, 3) rejected promise  with TypeError: Invalid AlgorithmIdentifier.
+PASS crypto.subtle.generateKey("foo", 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: 1}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: true}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: null}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: undefined}, 2, 3) rejected promise  with TypeError: Member CryptoAlgorithmParameters.name is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: Symbol()}, 2, 3) rejected promise  with TypeError: Cannot convert a symbol to a string.
+PASS crypto.subtle.generateKey({name: { }}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "foo"}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: true}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Invalid AlgorithmIdentifier.
+PASS crypto.subtle.generateKey({name: "hmac", hash: 1}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Invalid AlgorithmIdentifier.
+PASS crypto.subtle.generateKey({name: "hmac", hash: null}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Invalid AlgorithmIdentifier.
+PASS crypto.subtle.generateKey({name: "hmac", hash: undefined}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Member HmacKeyGenParams.hash is required and must be an instance of any.
+PASS crypto.subtle.generateKey({name: "hmac", hash: Symbol()}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Invalid AlgorithmIdentifier.
+PASS crypto.subtle.generateKey({name: "hmac", hash: { }}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Member CryptoAlgorithmParameters.name is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "foo"}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: true}}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: 1}}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: null}}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: undefined}}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Member CryptoAlgorithmParameters.name is required and must be an instance of DOMString.
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: Symbol()}}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Cannot convert a symbol to a string.
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: { }}}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "hmac", hash: {name: "foo"}}, extractable, ["sign", "verify"]) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "SHA-1"}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "SHA-256"}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "SHA-384"}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "SHA-512"}, 2, 3) rejected promise  with NotSupportedError (DOM Exception 9): The operation is not supported..
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, 3) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, true) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, null) rejected promise  with TypeError: null is not an object (evaluating 'crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, null)').
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, undefined) rejected promise  with TypeError: undefined is not an object (evaluating 'crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, undefined)').
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, Symbol()) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, { }) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, "foo") rejected promise  with TypeError: Invalid KeyUsages.
+PASS crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, [ ]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01])}, extractable, [ ]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/generate-key-malformed-paramters.html b/LayoutTests/crypto/subtle/generate-key-malformed-paramters.html
new file mode 100644 (file)
index 0000000..c245cca
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a CryptoKey object with malformed parameters");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+// Not enough arguments.
+shouldReject('crypto.subtle.generateKey()');
+shouldReject('crypto.subtle.generateKey(1)');
+shouldReject('crypto.subtle.generateKey(1, 2)');
+shouldReject('crypto.subtle.generateKey(1, 2, 3)');
+// Malformed AlgorithmIdentifiers.
+shouldReject('crypto.subtle.generateKey("foo", 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: 1}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: true}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: null}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: undefined}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: Symbol()}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: { }}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: "foo"}, 2, 3)');
+// Malformed Hash.
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: true}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: 1}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: null}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: undefined}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: Symbol()}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: { }}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "foo"}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: true}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: 1}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: null}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: undefined}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: Symbol()}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: { }}}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: {name: "foo"}}, extractable, ["sign", "verify"])');
+// Algorithms not supported generateKey op.
+shouldReject('crypto.subtle.generateKey({name: "SHA-1"}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: "SHA-256"}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: "SHA-384"}, 2, 3)');
+shouldReject('crypto.subtle.generateKey({name: "SHA-512"}, 2, 3)');
+// Wrong KeyUsage type.
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, 3)');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, true)');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, null)');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, undefined)');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, Symbol())');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, { })');
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, "foo")');
+// Syntax error.
+shouldReject('crypto.subtle.generateKey({name: "AES-CBC", length: 128}, extractable, [ ])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01])}, extractable, [ ])', finishJSTest);
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-customized-length-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-customized-length-expected.txt
new file mode 100644 (file)
index 0000000..283bddf
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with customized length.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 111
+PASS key.algorithm.hash.name is 'SHA-512'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-customized-length.html b/LayoutTests/crypto/subtle/hmac-generate-key-customized-length.html
new file mode 100644 (file)
index 0000000..8be230f
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with customized length.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-512", length: 111}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "111");
+    shouldBe("key.algorithm.hash.name", "'SHA-512'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-hash-object-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-hash-object-expected.txt
new file mode 100644 (file)
index 0000000..e38e65c
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-1 object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 512
+PASS key.algorithm.hash.name is 'SHA-1'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-hash-object.html b/LayoutTests/crypto/subtle/hmac-generate-key-hash-object.html
new file mode 100644 (file)
index 0000000..1f2e5e9
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-1 object.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: {name: "sha-1"}}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "512");
+    shouldBe("key.algorithm.hash.name", "'SHA-1'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..0d04ca7
--- /dev/null
@@ -0,0 +1,22 @@
+Test generating an HMAC key with malformed-paramters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey("hmac", extractable, ["sign", "verify"]) rejected promise  with TypeError: Member HmacKeyGenParams.hash is required and must be an instance of any.
+PASS crypto.subtle.generateKey({name: "hmac"}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Member HmacKeyGenParams.hash is required and must be an instance of any.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: null}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: Symbol()}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Cannot convert a symbol to a number.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: { }}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: "foo"}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: 0}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters.html b/LayoutTests/crypto/subtle/hmac-generate-key-malformed-parameters.html
new file mode 100644 (file)
index 0000000..abf8918
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an HMAC key with malformed-paramters.");
+
+var extractable = true;
+
+// Malformed AlgorithmIdentifiers
+shouldReject('crypto.subtle.generateKey("hmac", extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac"}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: null}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: Symbol()}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: { }}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: "foo"}, extractable, ["sign", "verify"])');
+// Wrong usages
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["unwrapKey"])');
+// Wrong length
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: 0}, extractable, ["sign", "verify"])');
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha1-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-sha1-expected.txt
new file mode 100644 (file)
index 0000000..2ae902c
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-1.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 512
+PASS key.algorithm.hash.name is 'SHA-1'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha1.html b/LayoutTests/crypto/subtle/hmac-generate-key-sha1.html
new file mode 100644 (file)
index 0000000..d27faa5
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-1.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "512");
+    shouldBe("key.algorithm.hash.name", "'SHA-1'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha224-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-sha224-expected.txt
new file mode 100644 (file)
index 0000000..15891b9
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-224.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 512
+PASS key.algorithm.hash.name is 'SHA-224'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha224.html b/LayoutTests/crypto/subtle/hmac-generate-key-sha224.html
new file mode 100644 (file)
index 0000000..182ced8
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-224.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-224"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "512");
+    shouldBe("key.algorithm.hash.name", "'SHA-224'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha256-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-sha256-expected.txt
new file mode 100644 (file)
index 0000000..43b8cc3
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-256.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 512
+PASS key.algorithm.hash.name is 'SHA-256'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha256.html b/LayoutTests/crypto/subtle/hmac-generate-key-sha256.html
new file mode 100644 (file)
index 0000000..4f381e5
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-256.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-256"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "512");
+    shouldBe("key.algorithm.hash.name", "'SHA-256'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha384-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-sha384-expected.txt
new file mode 100644 (file)
index 0000000..8464db9
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-384.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 1024
+PASS key.algorithm.hash.name is 'SHA-384'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha384.html b/LayoutTests/crypto/subtle/hmac-generate-key-sha384.html
new file mode 100644 (file)
index 0000000..8eba818
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-384.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-384"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "1024");
+    shouldBe("key.algorithm.hash.name", "'SHA-384'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha512-expected.txt b/LayoutTests/crypto/subtle/hmac-generate-key-sha512-expected.txt
new file mode 100644 (file)
index 0000000..8296cf2
--- /dev/null
@@ -0,0 +1,17 @@
+Test generating a HMAC key with sha-512.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Generating a key...
+PASS key.type is 'secret'
+PASS key.extractable is true
+PASS key.algorithm.name is 'HMAC'
+PASS key.algorithm.length is 1024
+PASS key.algorithm.hash.name is 'SHA-512'
+PASS key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/hmac-generate-key-sha512.html b/LayoutTests/crypto/subtle/hmac-generate-key-sha512.html
new file mode 100644 (file)
index 0000000..3549025
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating a HMAC key with sha-512.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("\nGenerating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-512"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "1024");
+    shouldBe("key.algorithm.hash.name", "'SHA-512'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters-expected.txt b/LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..1659002
--- /dev/null
@@ -0,0 +1,40 @@
+Test generating an RSA key with malformed-paramters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS crypto.subtle.generateKey("RSAES-PKCS1-v1_5", extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member RsaKeyGenParams.modulusLength is required and must be an instance of unsigned long.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5"}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member RsaKeyGenParams.modulusLength is required and must be an instance of unsigned long.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: undefined, publicExponent: publicExponent}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member RsaKeyGenParams.modulusLength is required and must be an instance of unsigned long.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: Symbol(), publicExponent: publicExponent}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Cannot convert a symbol to a number.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: 1}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: true}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: null}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: undefined}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Member RsaKeyGenParams.publicExponent is required and must be an instance of Uint8Array.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: { }}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: Symbol()}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: "foo"}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: [ ]}, extractable, ["encrypt", "decrypt"]) rejected promise  with TypeError: Type error.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["sign", "verify"]) rejected promise  with TypeError: Member RsaHashedKeyGenParams.hash is required and must be an instance of any.
+PASS crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["decrypt", "encrypt"]) rejected promise  with TypeError: Member RsaHashedKeyGenParams.hash is required and must be an instance of any.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 0, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters.html b/LayoutTests/crypto/subtle/rsa-generate-key-malformed-parameters.html
new file mode 100644 (file)
index 0000000..8c13dd9
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an RSA key with malformed-paramters.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var publicExponent = new Uint8Array([0x01, 0x00, 0x01]);
+
+// Malformed AlgorithmIdentifiers
+shouldReject('crypto.subtle.generateKey("RSAES-PKCS1-v1_5", extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5"}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: undefined, publicExponent: publicExponent}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: Symbol(), publicExponent: publicExponent}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: 1}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: true}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: null}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: undefined}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: { }}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: Symbol()}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: "foo"}, extractable, ["encrypt", "decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: [ ]}, extractable, ["encrypt", "decrypt"])');
+// Missing hash
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["sign", "verify"])');
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["decrypt", "encrypt"])');
+// Wrong usages
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["verify"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSAES-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent}, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["verify"])');
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["deriveBits"])');
+// modulusLength = 0
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 0, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign", "verify"])', finishJSTest);
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/rsa-oaep-generate-key-expected.txt b/LayoutTests/crypto/subtle/rsa-oaep-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..5c5f2f5
--- /dev/null
@@ -0,0 +1,25 @@
+Test generating an RSA key using RSA-OAEP algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+PASS keyPair.toString() is '[object CryptoKeyPair]'
+PASS keyPair.publicKey.type is 'public'
+PASS keyPair.publicKey.extractable is true
+PASS keyPair.publicKey.algorithm.name is 'RSA-OAEP'
+PASS keyPair.publicKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.publicKey.algorithm.publicExponent) is '010001'
+PASS keyPair.publicKey.algorithm.hash.name is 'SHA-1'
+PASS keyPair.publicKey.usages is ['encrypt', 'wrapKey']
+PASS keyPair.privateKey.type is 'private'
+PASS keyPair.privateKey.extractable is false
+PASS keyPair.privateKey.algorithm.name is 'RSA-OAEP'
+PASS keyPair.privateKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.privateKey.algorithm.publicExponent) is '010001'
+PASS keyPair.privateKey.algorithm.hash.name is 'SHA-1'
+PASS keyPair.privateKey.usages is ['decrypt', 'unwrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/rsa-oaep-generate-key.html b/LayoutTests/crypto/subtle/rsa-oaep-generate-key.html
new file mode 100644 (file)
index 0000000..44f7f51
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an RSA key using RSA-OAEP algorithm.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "RSA-OAEP",
+    // RsaKeyGenParams
+    modulusLength: 2048,
+    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
+    hash: "sha-1"
+};
+var nonExtractable = false;
+
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["decrypt", "encrypt", "wrapKey", "unwrapKey"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'RSA-OAEP'");
+    shouldBe("keyPair.publicKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.publicKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.publicKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.publicKey.usages", "['encrypt', 'wrapKey']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "false");
+    shouldBe("keyPair.privateKey.algorithm.name", "'RSA-OAEP'");
+    shouldBe("keyPair.privateKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.privateKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.privateKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.privateKey.usages", "['decrypt', 'unwrapKey']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt b/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..1c51cf8
--- /dev/null
@@ -0,0 +1,25 @@
+Test generating an RSA key using RSAES-PKCS1-v1_5 algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+PASS keyPair.toString() is '[object CryptoKeyPair]'
+PASS keyPair.publicKey.type is 'public'
+PASS keyPair.publicKey.extractable is true
+PASS keyPair.publicKey.algorithm.name is 'RSAES-PKCS1-v1_5'
+PASS keyPair.publicKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.publicKey.algorithm.publicExponent) is '010001'
+PASS keyPair.publicKey.algorithm.hash is undefined.
+PASS keyPair.publicKey.usages is ['encrypt']
+PASS keyPair.privateKey.type is 'private'
+PASS keyPair.privateKey.extractable is false
+PASS keyPair.privateKey.algorithm.name is 'RSAES-PKCS1-v1_5'
+PASS keyPair.privateKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.privateKey.algorithm.publicExponent) is '010001'
+PASS keyPair.privateKey.algorithm.hash is undefined.
+PASS keyPair.privateKey.usages is ['decrypt']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt b/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable-expected.txt
new file mode 100644 (file)
index 0000000..8defaf6
--- /dev/null
@@ -0,0 +1,25 @@
+Test generating an RSA key using RSAES-PKCS1-v1_5 algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+PASS keyPair.toString() is '[object CryptoKeyPair]'
+PASS keyPair.publicKey.type is 'public'
+PASS keyPair.publicKey.extractable is true
+PASS keyPair.publicKey.algorithm.name is 'RSAES-PKCS1-v1_5'
+PASS keyPair.publicKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.publicKey.algorithm.publicExponent) is '010001'
+PASS keyPair.publicKey.algorithm.hash is undefined.
+PASS keyPair.publicKey.usages is ['encrypt']
+PASS keyPair.privateKey.type is 'private'
+PASS keyPair.privateKey.extractable is true
+PASS keyPair.privateKey.algorithm.name is 'RSAES-PKCS1-v1_5'
+PASS keyPair.privateKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.privateKey.algorithm.publicExponent) is '010001'
+PASS keyPair.privateKey.algorithm.hash is undefined.
+PASS keyPair.privateKey.usages is ['decrypt']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html b/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key-extractable.html
new file mode 100644 (file)
index 0000000..b596eed
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an RSA key using RSAES-PKCS1-v1_5 algorithm.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "RSAES-PKCS1-v1_5",
+    // RsaKeyGenParams
+    modulusLength: 2048,
+    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
+};
+var extractable = true;
+
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, extractable, ["decrypt", "encrypt"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'RSAES-PKCS1-v1_5'");
+    shouldBe("keyPair.publicKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.publicKey.algorithm.publicExponent)", "'010001'");
+    shouldBeUndefined("keyPair.publicKey.algorithm.hash");
+    shouldBe("keyPair.publicKey.usages", "['encrypt']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "true");
+    shouldBe("keyPair.privateKey.algorithm.name", "'RSAES-PKCS1-v1_5'");
+    shouldBe("keyPair.privateKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.privateKey.algorithm.publicExponent)", "'010001'");
+    shouldBeUndefined("keyPair.privateKey.algorithm.hash");
+    shouldBe("keyPair.privateKey.usages", "['decrypt']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html b/LayoutTests/crypto/subtle/rsaes-pkcs1-v1_5-generate-key.html
new file mode 100644 (file)
index 0000000..a68d135
--- /dev/null
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an RSA key using RSAES-PKCS1-v1_5 algorithm.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "RSAES-PKCS1-v1_5",
+    // RsaKeyGenParams
+    modulusLength: 2048,
+    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
+};
+var nonExtractable = false;
+
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["decrypt", "encrypt"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'RSAES-PKCS1-v1_5'");
+    shouldBe("keyPair.publicKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.publicKey.algorithm.publicExponent)", "'010001'");
+    shouldBeUndefined("keyPair.publicKey.algorithm.hash");
+    shouldBe("keyPair.publicKey.usages", "['encrypt']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "false");
+    shouldBe("keyPair.privateKey.algorithm.name", "'RSAES-PKCS1-v1_5'");
+    shouldBe("keyPair.privateKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.privateKey.algorithm.publicExponent)", "'010001'");
+    shouldBeUndefined("keyPair.privateKey.algorithm.hash");
+    shouldBe("keyPair.privateKey.usages", "['decrypt']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt b/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..9914441
--- /dev/null
@@ -0,0 +1,25 @@
+Test generating an RSA key using RSASSA-PKCS1-v1_5 algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+PASS keyPair.toString() is '[object CryptoKeyPair]'
+PASS keyPair.publicKey.type is 'public'
+PASS keyPair.publicKey.extractable is true
+PASS keyPair.publicKey.algorithm.name is 'RSASSA-PKCS1-v1_5'
+PASS keyPair.publicKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.publicKey.algorithm.publicExponent) is '010001'
+PASS keyPair.publicKey.algorithm.hash.name is 'SHA-1'
+PASS keyPair.publicKey.usages is ['verify']
+PASS keyPair.privateKey.type is 'private'
+PASS keyPair.privateKey.extractable is false
+PASS keyPair.privateKey.algorithm.name is 'RSASSA-PKCS1-v1_5'
+PASS keyPair.privateKey.algorithm.modulusLength is 2048
+PASS bytesToHexString(keyPair.privateKey.algorithm.publicExponent) is '010001'
+PASS keyPair.privateKey.algorithm.hash.name is 'SHA-1'
+PASS keyPair.privateKey.usages is ['sign']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html b/LayoutTests/crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
new file mode 100644 (file)
index 0000000..1c91ea1
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/common.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+description("Test generating an RSA key using RSASSA-PKCS1-v1_5 algorithm.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "RSASSA-PKCS1-v1_5",
+    // RsaKeyGenParams
+    modulusLength: 2048,
+    publicExponent: new Uint8Array([0x01, 0x00, 0x01]),  // Equivalent to 65537
+    hash: "sha-1",
+};
+var nonExtractable = false;
+
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, nonExtractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'RSASSA-PKCS1-v1_5'");
+    shouldBe("keyPair.publicKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.publicKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.publicKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.publicKey.usages", "['verify']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "false");
+    shouldBe("keyPair.privateKey.algorithm.name", "'RSASSA-PKCS1-v1_5'");
+    shouldBe("keyPair.privateKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.privateKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.privateKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.privateKey.usages", "['sign']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
index e2d2b5c..015131a 100644 (file)
@@ -12,7 +12,7 @@ Generating a key with default length...
 PASS key.type is 'secret'
 PASS key.extractable is true
 PASS key.algorithm.name is 'HMAC'
 PASS key.type is 'secret'
 PASS key.extractable is true
 PASS key.algorithm.name is 'HMAC'
-PASS key.algorithm.length is 64
+PASS key.algorithm.length is 512
 PASS key.algorithm.hash.name is 'SHA-1'
 PASS key.usages is ["sign", "verify"]
 
 PASS key.algorithm.hash.name is 'SHA-1'
 PASS key.usages is ["sign", "verify"]
 
index d670fbb..6cde55a 100644 (file)
@@ -27,7 +27,7 @@ crypto.webkitSubtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["si
     shouldBe("key.type", "'secret'");
     shouldBe("key.extractable", "true");
     shouldBe("key.algorithm.name", "'HMAC'");
     shouldBe("key.type", "'secret'");
     shouldBe("key.extractable", "true");
     shouldBe("key.algorithm.name", "'HMAC'");
-    shouldBe("key.algorithm.length", "64");
+    shouldBe("key.algorithm.length", "512");
     shouldBe("key.algorithm.hash.name", "'SHA-1'");
     shouldBe("key.usages", '["sign", "verify"]');
 
     shouldBe("key.algorithm.hash.name", "'SHA-1'");
     shouldBe("key.usages", '["sign", "verify"]');
 
diff --git a/LayoutTests/crypto/workers/subtle/aes-generate-key-expected.txt b/LayoutTests/crypto/workers/subtle/aes-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..f473431
--- /dev/null
@@ -0,0 +1,18 @@
+[Worker] Test generating an AES key using AES-CBC algorithm in workers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/aes-generate-key.js
+[Worker] Generating a key...
+PASS [Worker] crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS [Worker] crypto.subtle.generateKey({name: "aes-cbc", length: 111}, extractable, ["encrypt"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS [Worker] key.type is 'secret'
+PASS [Worker] key.extractable is true
+PASS [Worker] key.algorithm.name is 'AES-CBC'
+PASS [Worker] key.algorithm.length is 128
+PASS [Worker] key.usages is ['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/workers/subtle/aes-generate-key.html b/LayoutTests/crypto/workers/subtle/aes-generate-key.html
new file mode 100644 (file)
index 0000000..546eafe
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+    <script>
+        worker = startWorker('resources/aes-generate-key.js');
+    </script>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/workers/subtle/hmac-generate-key-expected.txt b/LayoutTests/crypto/workers/subtle/hmac-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..fed34db
--- /dev/null
@@ -0,0 +1,19 @@
+[Worker] Test generating an HMAC key using SHA-1 algorithm in workers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/hmac-generate-key.js
+[Worker] Generating a key...
+PASS [Worker] crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS [Worker] crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: 0}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS [Worker] key.type is 'secret'
+PASS [Worker] key.extractable is true
+PASS [Worker] key.algorithm.name is 'HMAC'
+PASS [Worker] key.algorithm.length is 512
+PASS [Worker] key.algorithm.hash.name is 'SHA-1'
+PASS [Worker] key.usages is ["sign", "verify"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/workers/subtle/hmac-generate-key.html b/LayoutTests/crypto/workers/subtle/hmac-generate-key.html
new file mode 100644 (file)
index 0000000..8341b08
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+    <script>
+        worker = startWorker('resources/hmac-generate-key.js');
+    </script>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/workers/subtle/resources/aes-generate-key.js b/LayoutTests/crypto/workers/subtle/resources/aes-generate-key.js
new file mode 100644 (file)
index 0000000..b8d5a0d
--- /dev/null
@@ -0,0 +1,22 @@
+importScripts('../../../../resources/js-test-pre.js');
+
+description("Test generating an AES key using AES-CBC algorithm in workers.");
+jsTestIsAsync = true;
+
+var extractable = true;
+
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "aes-cbc", length: 111}, extractable, ["encrypt"])');
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "aes-cbc", length: 128}, extractable, ["decrypt", "encrypt", "unwrapKey", "wrapKey"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'AES-CBC'");
+    shouldBe("key.algorithm.length", "128");
+    shouldBe("key.usages", "['decrypt', 'encrypt', 'unwrapKey', 'wrapKey']");
+
+    finishJSTest();
+});
diff --git a/LayoutTests/crypto/workers/subtle/resources/hmac-generate-key.js b/LayoutTests/crypto/workers/subtle/resources/hmac-generate-key.js
new file mode 100644 (file)
index 0000000..6529acd
--- /dev/null
@@ -0,0 +1,23 @@
+importScripts('../../../../resources/js-test-pre.js');
+
+description("Test generating an HMAC key using SHA-1 algorithm in workers.");
+jsTestIsAsync = true;
+
+var extractable = true;
+
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "hmac", hash: "sha-1", length: 0}, extractable, ["sign", "verify"])');
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "hmac", hash: "sha-1"}, extractable, ["sign", "verify"]).then(function(result) {
+    key = result;
+
+    shouldBe("key.type", "'secret'");
+    shouldBe("key.extractable", "true");
+    shouldBe("key.algorithm.name", "'HMAC'");
+    shouldBe("key.algorithm.length", "512");
+    shouldBe("key.algorithm.hash.name", "'SHA-1'");
+    shouldBe("key.usages", '["sign", "verify"]');
+
+    finishJSTest();
+});
diff --git a/LayoutTests/crypto/workers/subtle/resources/rsa-generate-key.js b/LayoutTests/crypto/workers/subtle/resources/rsa-generate-key.js
new file mode 100644 (file)
index 0000000..79f6fe4
--- /dev/null
@@ -0,0 +1,41 @@
+importScripts('../../../../resources/js-test-pre.js');
+importScripts("../../../resources/common.js");
+
+description("Test generating a RSA keypair using RSA-OAEP algorithm in workers.");
+jsTestIsAsync = true;
+
+var extractable = true;
+var publicExponent = new Uint8Array([0x01, 0x00, 0x01]);
+
+var count = 0;
+function finishTest()
+{
+    count = count + 1;
+    if (count == 2)
+        finishJSTest();
+}
+
+shouldReject('crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign"])');
+shouldReject('crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 0, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign", "verify"])', finishTest);
+
+debug("Generating a key...");
+crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: 'sha-1'}, extractable, ["decrypt", "encrypt", "wrapKey", "unwrapKey"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object CryptoKeyPair]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'RSA-OAEP'");
+    shouldBe("keyPair.publicKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.publicKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.publicKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.publicKey.usages", "['encrypt', 'wrapKey']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "true");
+    shouldBe("keyPair.privateKey.algorithm.name", "'RSA-OAEP'");
+    shouldBe("keyPair.privateKey.algorithm.modulusLength", "2048");
+    shouldBe("bytesToHexString(keyPair.privateKey.algorithm.publicExponent)", "'010001'");
+    shouldBe("keyPair.privateKey.algorithm.hash.name", "'SHA-1'");
+    shouldBe("keyPair.privateKey.usages", "['decrypt', 'unwrapKey']");
+
+    finishTest();
+});
diff --git a/LayoutTests/crypto/workers/subtle/rsa-generate-key-expected.txt b/LayoutTests/crypto/workers/subtle/rsa-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..6716560
--- /dev/null
@@ -0,0 +1,28 @@
+[Worker] Test generating a RSA keypair using RSA-OAEP algorithm in workers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/rsa-generate-key.js
+[Worker] Generating a key...
+PASS [Worker] crypto.subtle.generateKey({name: "RSA-OAEP", modulusLength: 2048, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS [Worker] crypto.subtle.generateKey({name: "RSASSA-PKCS1-v1_5", modulusLength: 0, publicExponent: publicExponent, hash: "sha-1"}, extractable, ["sign", "verify"]) rejected promise  with OperationError (DOM Exception 34): The operation failed for an operation-specific reason.
+PASS [Worker] keyPair.toString() is '[object CryptoKeyPair]'
+PASS [Worker] keyPair.publicKey.type is 'public'
+PASS [Worker] keyPair.publicKey.extractable is true
+PASS [Worker] keyPair.publicKey.algorithm.name is 'RSA-OAEP'
+PASS [Worker] keyPair.publicKey.algorithm.modulusLength is 2048
+PASS [Worker] bytesToHexString(keyPair.publicKey.algorithm.publicExponent) is '010001'
+PASS [Worker] keyPair.publicKey.algorithm.hash.name is 'SHA-1'
+PASS [Worker] keyPair.publicKey.usages is ['encrypt', 'wrapKey']
+PASS [Worker] keyPair.privateKey.type is 'private'
+PASS [Worker] keyPair.privateKey.extractable is true
+PASS [Worker] keyPair.privateKey.algorithm.name is 'RSA-OAEP'
+PASS [Worker] keyPair.privateKey.algorithm.modulusLength is 2048
+PASS [Worker] bytesToHexString(keyPair.privateKey.algorithm.publicExponent) is '010001'
+PASS [Worker] keyPair.privateKey.algorithm.hash.name is 'SHA-1'
+PASS [Worker] keyPair.privateKey.usages is ['decrypt', 'unwrapKey']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/workers/subtle/rsa-generate-key.html b/LayoutTests/crypto/workers/subtle/rsa-generate-key.html
new file mode 100644 (file)
index 0000000..0e0124e
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+    <script>
+        worker = startWorker('resources/rsa-generate-key.js');
+    </script>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
index e7df0db..47b25e8 100644 (file)
@@ -1,3 +1,61 @@
+2016-10-24  Jiewen Tan  <jiewen_tan@apple.com>
+
+        Update SubtleCrypto::generateKey to match the latest spec
+        https://bugs.webkit.org/show_bug.cgi?id=163718
+        <rdar://problem/28864380>
+
+        Reviewed by Chris Dumez.
+
+        * WebCryptoAPI/generateKey/test_aes-cbc-expected.txt:
+        * WebCryptoAPI/generateKey/test_aes-cbc.html:
+        * WebCryptoAPI/generateKey/test_aes-ctr-expected.txt:
+        * WebCryptoAPI/generateKey/test_aes-ctr.html:
+        * WebCryptoAPI/generateKey/test_failures-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures.html:
+        * WebCryptoAPI/generateKey/test_failures_AES-CBC-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_AES-CBC.html:
+        * WebCryptoAPI/generateKey/test_failures_AES-CTR-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_AES-CTR.html:
+        * WebCryptoAPI/generateKey/test_failures_AES-GCM-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_AES-GCM.html:
+        * WebCryptoAPI/generateKey/test_failures_AES-KW-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_AES-KW.html:
+        * WebCryptoAPI/generateKey/test_failures_ECDH-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_ECDH.html:
+        * WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_ECDSA.html:
+        * WebCryptoAPI/generateKey/test_failures_HMAC-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_HMAC.html:
+        * WebCryptoAPI/generateKey/test_failures_RSA-OAEP-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_RSA-OAEP.html:
+        * WebCryptoAPI/generateKey/test_failures_RSA-PSS-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_RSA-PSS.html:
+        * WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5-expected.txt:
+        * WebCryptoAPI/generateKey/test_failures_RSASSA-PKCS1-v1_5.html:
+        * WebCryptoAPI/generateKey/test_successes-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes.html:
+        * WebCryptoAPI/generateKey/test_successes_AES-CBC-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_AES-CBC.html:
+        * WebCryptoAPI/generateKey/test_successes_AES-CTR-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_AES-CTR.html:
+        * WebCryptoAPI/generateKey/test_successes_AES-GCM-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_AES-GCM.html:
+        * WebCryptoAPI/generateKey/test_successes_AES-KW-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_AES-KW.html:
+        * WebCryptoAPI/generateKey/test_successes_ECDH-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_ECDH.html:
+        * WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_ECDSA.html:
+        * WebCryptoAPI/generateKey/test_successes_HMAC-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_HMAC.html:
+        * WebCryptoAPI/generateKey/test_successes_RSA-OAEP-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_RSA-OAEP.html:
+        * WebCryptoAPI/generateKey/test_successes_RSA-PSS-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_RSA-PSS.html:
+        * WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5-expected.txt:
+        * WebCryptoAPI/generateKey/test_successes_RSASSA-PKCS1-v1_5.html:
+        * WebCryptoAPI/idlharness-expected.txt:
+
 2016-10-24  Alex Christensen  <achristensen@webkit.org>
 
         URLParser should match old URL::parse with %2E in path
 2016-10-24  Alex Christensen  <achristensen@webkit.org>
 
         URLParser should match old URL::parse with %2E in path
index 3dcb317..8a27e46 100644 (file)
@@ -1,3 +1,294 @@
-CONSOLE MESSAGE: line 20: ReferenceError: Can't find variable: CryptoKey
-FAIL: Timed out waiting for notifyDone to be called
+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({length: 128, name: AES-CBC}, false, [encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 128, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 128, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 192, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, encrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, decrypt]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [wrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey, wrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [unwrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
+PASS Success: generateKey({length: 256, name: Aes-cbc}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) 
 
 
index 9f3323c..3e958b2 100644 (file)
@@ -7,7 +7,7 @@
 <script src="../../../../resources/testharness.js"></script>
 <script src="../../../../resources/testharnessreport.js"></script>
 
 <script src="../../../../resources/testharness.js"></script>
 <script src="../../../../resources/testharnessreport.js"></script>
 
-<script src="/WebCryptoAPI/util/helpers.js"></script>
+<script src="../util/helpers.js"></script>
 <script src="successes.js"></script>
 
 <h1>generateKey Tests for Good Parameters</h1>
 <script src="successes.js"></script>
 
 <h1>generateKey Tests for Good Parameters</h1>
index 3dcb317..aec5009 100644 (file)
@@ -1,3 +1,294 @@
-CONSOLE MESSAGE: line 20: ReferenceError: Can't find variable: CryptoKey
-FAIL: Timed out waiting for notifyDone to be called
+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!
+
+
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 128, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 192, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, encrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, decrypt]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey, wrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+FAIL Success: generateKey({length: 256, name: Aes-ctr}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
 
 
index 23d6018..13453f6 100644 (file)
@@ -7,7 +7,7 @@
 <script src="../../../../resources/testharness.js"></script>
 <script src="../../../../resources/testharnessreport.js"></script>
 
 <script src="../../../../resources/testharness.js"></script>
 <script src="../../../../resources/testharnessreport.js"></script>
 
-<script src="/WebCryptoAPI/util/helpers.js"></script>
+<script src="../util/helpers.js"></script>
 <script src="successes.js"></script>
 
 <h1>generateKey Tests for Good Parameters</h1>
 <script src="successes.js"></script>
 
 <h1>generateKey Tests for Good Parameters</h1>
index c93ce3f..6ff4785 100644 (file)
-CONSOLE MESSAGE: line 25: ReferenceError: Can't find variable: CryptoKey
-FAIL: Timed out waiting for notifyDone to be called
+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]) 
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-CBC}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) 
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 128, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 192, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, encrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, decrypt, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, wrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({length: 256, name: AES-GCM}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [encrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [decrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 128, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [encrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [decrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 192, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [encrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, encrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [decrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, decrypt]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({length: 256, name: AES-KW}, true, [wrapKey, unwrapKey, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSASSA-PKCS1-v1_5, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-1, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, sign]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, verify]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveKey]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, encrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, decrypt, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, wrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [unwrapKey, deriveBits]) 
+PASS Bad usages: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA-OAEP, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [encrypt, decrypt, wrapKey, unwrapKey, decrypt, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey, deriveBits]) 
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad usages: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey]) assert_equals: Bad usages not supported expected "SyntaxError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 64, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 127, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 129, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 255, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 257, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, encrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, decrypt]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey, wrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, []) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, false, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+FAIL Bad algorithm property: generateKey({length: 512, name: AES-CTR}, true, [encrypt, decrypt, wrapKey, unwrapKey, encrypt, decrypt, wrapKey, unwrapKey]) assert_equals: Bad algorithm property not supported expected "OperationError" but got "NotSupportedError"
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, encrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, decrypt]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [wrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [wrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey, wrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey, wrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [unwrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, [unwrapKey]) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, []) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, true, []) 
+PASS Bad algorithm property: generateKey({length: 64, name: AES-CBC}, false, [encrypt, decry