[WebCrypto] Add support for ECDSA
authorjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Apr 2017 20:07:56 +0000 (20:07 +0000)
committerjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Apr 2017 20:07:56 +0000 (20:07 +0000)
https://bugs.webkit.org/show_bug.cgi?id=170789
<rdar://problem/31588604>

Reviewed by Brent Fulgham.

LayoutTests/imported/w3c:

* web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt:
* web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt:
* web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt:
* web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/sign_verify/hmac.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa-expected.txt:
* web-platform-tests/WebCryptoAPI/sign_verify/test_hmac-expected.txt:

Source/WebCore:

This patch implements ECDSA according to the spec: https://www.w3.org/TR/WebCryptoAPI/#ecdsa.
Supported operations include sign, verify, generateKey, importKey and exportKey.

Tests: crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html
       crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html
       crypto/subtle/ecdsa-generate-export-jwk-key.html
       crypto/subtle/ecdsa-generate-export-key-pkcs8.html
       crypto/subtle/ecdsa-generate-export-key-raw.html
       crypto/subtle/ecdsa-generate-export-key-spki.html
       crypto/subtle/ecdsa-generate-key-sign-verify-p256.html
       crypto/subtle/ecdsa-generate-key-sign-verify-p384.html
       crypto/subtle/ecdsa-generate-key.html
       crypto/subtle/ecdsa-import-jwk-private-key.html
       crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html
       crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html
       crypto/subtle/ecdsa-import-jwk-public-key.html
       crypto/subtle/ecdsa-import-key-sign-p256.html
       crypto/subtle/ecdsa-import-key-sign-p384.html
       crypto/subtle/ecdsa-import-key-verify-p256.html
       crypto/subtle/ecdsa-import-key-verify-p384.html
       crypto/subtle/ecdsa-import-pkcs8-key.html
       crypto/subtle/ecdsa-import-raw-key.html
       crypto/subtle/ecdsa-import-spki-key.html
       crypto/subtle/ecdsa-verify-malformed-parameters.html
       crypto/workers/subtle/ecdsa-import-key-sign.html
       crypto/workers/subtle/ecdsa-import-key-verify.html

* CMakeLists.txt:
* DerivedSources.make:
* PlatformGTK.cmake:
* PlatformMac.cmake:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSSubtleCryptoCustom.cpp:
(WebCore::normalizeCryptoAlgorithmParameters):
(WebCore::jsSubtleCryptoFunctionSignPromise):
(WebCore::jsSubtleCryptoFunctionVerifyPromise):
Add missing parameters.
* crypto/CommonCryptoUtilities.h:
* crypto/CryptoAlgorithm.cpp:
(WebCore::CryptoAlgorithm::sign):
(WebCore::CryptoAlgorithm::verify):
* crypto/CryptoAlgorithm.h:
Add missing parameters.
* crypto/CryptoAlgorithmParameters.h:
* crypto/algorithms/CryptoAlgorithmECDSA.cpp: Added.
(WebCore::CryptoAlgorithmECDSA::create):
(WebCore::CryptoAlgorithmECDSA::identifier):
(WebCore::CryptoAlgorithmECDSA::sign):
(WebCore::CryptoAlgorithmECDSA::verify):
(WebCore::CryptoAlgorithmECDSA::generateKey):
(WebCore::CryptoAlgorithmECDSA::importKey):
(WebCore::CryptoAlgorithmECDSA::exportKey):
* crypto/algorithms/CryptoAlgorithmECDSA.h: Added.
* crypto/algorithms/CryptoAlgorithmHMAC.cpp:
(WebCore::CryptoAlgorithmHMAC::sign):
(WebCore::CryptoAlgorithmHMAC::verify):
* crypto/algorithms/CryptoAlgorithmHMAC.h:
Add missing parameters.
* crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
(WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
(WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
* crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
Add missing parameters.
* crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp: Added.
(WebCore::CryptoAlgorithmECDSA::platformSign):
(WebCore::CryptoAlgorithmECDSA::platformVerify):
* crypto/mac/CommonCryptoDERUtilities.cpp: Added.
(WebCore::bytesUsedToEncodedLength):
(WebCore::extraBytesNeededForEncodedLength):
(WebCore::addEncodedASN1Length):
(WebCore::bytesNeededForEncodedLength):
* crypto/mac/CommonCryptoDERUtilities.h:
(WebCore::bytesUsedToEncodedLength): Deleted.
(WebCore::extraBytesNeededForEncodedLength): Deleted.
(WebCore::addEncodedASN1Length): Deleted.
(WebCore::bytesNeededForEncodedLength): Deleted.
Move implementations to a .cpp file.
* crypto/mac/CryptoAlgorithmECDSAMac.cpp: Added.
(WebCore::cryptoDigestAlgorithm):
(WebCore::signECDSA):
(WebCore::verifyECDSA):
(WebCore::CryptoAlgorithmECDSA::platformSign):
(WebCore::CryptoAlgorithmECDSA::platformVerify):
* crypto/mac/CryptoAlgorithmRegistryMac.cpp:
(WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
* crypto/parameters/CryptoAlgorithmEcdsaParams.h: Added.
* crypto/parameters/EcdsaParams.idl: Added.

LayoutTests:

* crypto/subtle/ec-generate-key-malformed-parameters-expected.txt:
* crypto/subtle/ec-generate-key-malformed-parameters.html:
* crypto/subtle/ec-import-key-malformed-parameters-expected.txt:
* crypto/subtle/ec-import-key-malformed-parameters.html:
* crypto/subtle/ecdh-generate-export-key-pkcs8-p256-expected.txt: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt.
* crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256.html.
* crypto/subtle/ecdh-generate-export-key-pkcs8-p384-expected.txt: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt.
* crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384.html.
* crypto/subtle/ecdsa-generate-export-jwk-key-expected.txt: Added.
* crypto/subtle/ecdsa-generate-export-jwk-key.html: Added.
* crypto/subtle/ecdsa-generate-export-key-pkcs8-expected.txt: Added.
* crypto/subtle/ecdsa-generate-export-key-pkcs8.html: Added.
* crypto/subtle/ecdsa-generate-export-key-raw-expected.txt: Added.
* crypto/subtle/ecdsa-generate-export-key-raw.html: Added.
* crypto/subtle/ecdsa-generate-export-key-spki-expected.txt: Added.
* crypto/subtle/ecdsa-generate-export-key-spki.html: Added.
* crypto/subtle/ecdsa-generate-key-expected.txt: Added.
* crypto/subtle/ecdsa-generate-key-sign-verify-p256-expected.txt: Added.
* crypto/subtle/ecdsa-generate-key-sign-verify-p256.html: Added.
* crypto/subtle/ecdsa-generate-key-sign-verify-p384-expected.txt: Added.
* crypto/subtle/ecdsa-generate-key-sign-verify-p384.html: Added.
* crypto/subtle/ecdsa-generate-key.html: Added.
* crypto/subtle/ecdsa-import-jwk-private-key-expected.txt: Added.
* crypto/subtle/ecdsa-import-jwk-private-key.html: Added.
* crypto/subtle/ecdsa-import-jwk-public-key-alg-256-expected.txt: Added.
* crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html: Added.
* crypto/subtle/ecdsa-import-jwk-public-key-alg-384-expected.txt: Added.
* crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html: Added.
* crypto/subtle/ecdsa-import-jwk-public-key-expected.txt: Added.
* crypto/subtle/ecdsa-import-jwk-public-key.html: Added.
* crypto/subtle/ecdsa-import-key-sign-p256-expected.txt: Added.
* crypto/subtle/ecdsa-import-key-sign-p256.html: Added.
* crypto/subtle/ecdsa-import-key-sign-p384-expected.txt: Added.
* crypto/subtle/ecdsa-import-key-sign-p384.html: Added.
* crypto/subtle/ecdsa-import-key-verify-p256-expected.txt: Added.
* crypto/subtle/ecdsa-import-key-verify-p256.html: Added.
* crypto/subtle/ecdsa-import-key-verify-p384-expected.txt: Added.
* crypto/subtle/ecdsa-import-key-verify-p384.html: Added.
* crypto/subtle/ecdsa-import-pkcs8-key-expected.txt: Added.
* crypto/subtle/ecdsa-import-pkcs8-key.html: Added.
* crypto/subtle/ecdsa-import-raw-key-expected.txt: Added.
* crypto/subtle/ecdsa-import-raw-key.html: Added.
* crypto/subtle/ecdsa-import-spki-key-expected.txt: Added.
* crypto/subtle/ecdsa-import-spki-key.html: Added.
* crypto/subtle/ecdsa-verify-malformed-parameters-expected.txt: Added.
* crypto/subtle/ecdsa-verify-malformed-parameters.html: Added.
* crypto/workers/subtle/ecdsa-import-key-sign-expected.txt: Added.
* crypto/workers/subtle/ecdsa-import-key-sign.html: Added.
* crypto/workers/subtle/ecdsa-import-key-verify-expected.txt: Added.
* crypto/workers/subtle/ecdsa-import-key-verify.html: Added.
* crypto/workers/subtle/resources/ecdsa-import-key-sign.js: Added.
* crypto/workers/subtle/resources/ecdsa-import-key-verify.js: Added.

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

88 files changed:
LayoutTests/ChangeLog
LayoutTests/crypto/subtle/ec-generate-key-malformed-parameters-expected.txt
LayoutTests/crypto/subtle/ec-generate-key-malformed-parameters.html
LayoutTests/crypto/subtle/ec-import-key-malformed-parameters-expected.txt
LayoutTests/crypto/subtle/ec-import-key-malformed-parameters.html
LayoutTests/crypto/subtle/ecdh-generate-export-key-pkcs8-p256-expected.txt [moved from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt with 100% similarity]
LayoutTests/crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html [moved from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256.html with 100% similarity]
LayoutTests/crypto/subtle/ecdh-generate-export-key-pkcs8-p384-expected.txt [moved from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt with 100% similarity]
LayoutTests/crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html [moved from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384.html with 100% similarity]
LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-generate-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-raw-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-raw-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-spki-key-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-import-spki-key.html [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters-expected.txt [new file with mode: 0644]
LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters.html [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign-expected.txt [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign.html [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify-expected.txt [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify.html [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-sign.js [new file with mode: 0644]
LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-verify.js [new file with mode: 0644]
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/hmac.worker-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa-expected.txt
LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/sign_verify/test_hmac-expected.txt
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/PlatformGTK.cmake
Source/WebCore/PlatformMac.cmake
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp
Source/WebCore/crypto/CommonCryptoUtilities.h
Source/WebCore/crypto/CryptoAlgorithm.cpp
Source/WebCore/crypto/CryptoAlgorithm.h
Source/WebCore/crypto/CryptoAlgorithmParameters.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.cpp [new file with mode: 0644]
Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.h [new file with mode: 0644]
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h
Source/WebCore/crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp [new file with mode: 0644]
Source/WebCore/crypto/mac/CommonCryptoDERUtilities.cpp [new file with mode: 0644]
Source/WebCore/crypto/mac/CommonCryptoDERUtilities.h
Source/WebCore/crypto/mac/CryptoAlgorithmECDSAMac.cpp [new file with mode: 0644]
Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp
Source/WebCore/crypto/parameters/CryptoAlgorithmEcdsaParams.h [new file with mode: 0644]
Source/WebCore/crypto/parameters/EcdsaParams.idl [new file with mode: 0644]

index e9e17d1..4f69d54 100644 (file)
@@ -1,3 +1,64 @@
+2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebCrypto] Add support for ECDSA
+        https://bugs.webkit.org/show_bug.cgi?id=170789
+        <rdar://problem/31588604>
+
+        Reviewed by Brent Fulgham.
+
+        * crypto/subtle/ec-generate-key-malformed-parameters-expected.txt:
+        * crypto/subtle/ec-generate-key-malformed-parameters.html:
+        * crypto/subtle/ec-import-key-malformed-parameters-expected.txt:
+        * crypto/subtle/ec-import-key-malformed-parameters.html:
+        * crypto/subtle/ecdh-generate-export-key-pkcs8-p256-expected.txt: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt.
+        * crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p256.html.
+        * crypto/subtle/ecdh-generate-export-key-pkcs8-p384-expected.txt: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt.
+        * crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html: Renamed from LayoutTests/crypto/subtle/ecdh-generate-export-pkcs8-p384.html.
+        * crypto/subtle/ecdsa-generate-export-jwk-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-export-jwk-key.html: Added.
+        * crypto/subtle/ecdsa-generate-export-key-pkcs8-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-export-key-pkcs8.html: Added.
+        * crypto/subtle/ecdsa-generate-export-key-raw-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-export-key-raw.html: Added.
+        * crypto/subtle/ecdsa-generate-export-key-spki-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-export-key-spki.html: Added.
+        * crypto/subtle/ecdsa-generate-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-key-sign-verify-p256-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-key-sign-verify-p256.html: Added.
+        * crypto/subtle/ecdsa-generate-key-sign-verify-p384-expected.txt: Added.
+        * crypto/subtle/ecdsa-generate-key-sign-verify-p384.html: Added.
+        * crypto/subtle/ecdsa-generate-key.html: Added.
+        * crypto/subtle/ecdsa-import-jwk-private-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-jwk-private-key.html: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key-alg-256-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key-alg-384-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-jwk-public-key.html: Added.
+        * crypto/subtle/ecdsa-import-key-sign-p256-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-key-sign-p256.html: Added.
+        * crypto/subtle/ecdsa-import-key-sign-p384-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-key-sign-p384.html: Added.
+        * crypto/subtle/ecdsa-import-key-verify-p256-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-key-verify-p256.html: Added.
+        * crypto/subtle/ecdsa-import-key-verify-p384-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-key-verify-p384.html: Added.
+        * crypto/subtle/ecdsa-import-pkcs8-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-pkcs8-key.html: Added.
+        * crypto/subtle/ecdsa-import-raw-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-raw-key.html: Added.
+        * crypto/subtle/ecdsa-import-spki-key-expected.txt: Added.
+        * crypto/subtle/ecdsa-import-spki-key.html: Added.
+        * crypto/subtle/ecdsa-verify-malformed-parameters-expected.txt: Added.
+        * crypto/subtle/ecdsa-verify-malformed-parameters.html: Added.
+        * crypto/workers/subtle/ecdsa-import-key-sign-expected.txt: Added.
+        * crypto/workers/subtle/ecdsa-import-key-sign.html: Added.
+        * crypto/workers/subtle/ecdsa-import-key-verify-expected.txt: Added.
+        * crypto/workers/subtle/ecdsa-import-key-verify.html: Added.
+        * crypto/workers/subtle/resources/ecdsa-import-key-sign.js: Added.
+        * crypto/workers/subtle/resources/ecdsa-import-key-verify.js: Added.
+
 2017-04-17  Youenn Fablet  <youenn@apple.com>
 
         LayoutTestwebrtc/audio-replace-track.html is a flaky failure
index 70d5c45..352fda0 100644 (file)
@@ -17,6 +17,12 @@ PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable,
 PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-521"}, extractable, ["deriveKey"]) rejected promise  with NotSupportedError (DOM Exception 9): The algorithm is not supported.
 PASS successfullyParsed is true
 
index 11e03d9..8545552 100644 (file)
@@ -8,7 +8,7 @@
 <p id="description"></p>
 <div id="console"></div>
 
-<script>
+<script type="text/javascript">
 description("Test generating an EC key pair with malformed-paramters.");
 
 var extractable = true;
@@ -29,6 +29,12 @@ shouldReject('crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, ext
 shouldReject('crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["verify"])');
 shouldReject('crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["wrapKey"])');
 shouldReject('crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-256"}, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.generateKey({name: "ecdsa", namedCurve: "P-256"}, extractable, ["unwrapKey"])');
 // Not supported NamedCurve
 shouldReject('crypto.subtle.generateKey({name: "ecdh", namedCurve: "P-521"}, extractable, ["deriveKey"])');
 </script>
index c74c929..2384c91 100644 (file)
@@ -6,6 +6,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 PASS crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("raw", rawP384Key, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("raw", rawP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-521" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
@@ -14,7 +15,24 @@ PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, {
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, alg: "ES384"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y, alg: "ES256"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d, use: "sig"}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
+PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d, use: "enc"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "RSA", crv: "P-256", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d, key_ops: ["sign", "verify"]}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, ext: false}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
@@ -28,6 +46,13 @@ PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x384, y:y}, { na
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y384}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x384, y:y384, d:d}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("spki", truncatedSpkiP256Key1, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("spki", truncatedSpkiP256Key2, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("spki", truncatedSpkiP256Key3, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
@@ -48,6 +73,13 @@ PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve:
 PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
+PASS crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"]) rejected promise  with SyntaxError (DOM Exception 12): A required parameter was missing or out-of-range.
 PASS crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key1, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key2, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
 PASS crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key3, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"]) rejected promise  with DataError (DOM Exception 30): Data provided to an operation does not meet requirements.
index 11dc96f..73ffa98 100644 (file)
@@ -8,7 +8,7 @@
 <p id="description"></p>
 <div id="console"></div>
 
-<script>
+<script type="text/javascript">
 description("Test importing a EC key with malformed parameters");
 
 var extractable = true;
@@ -54,8 +54,9 @@ var truncatedPkcs8P384Key2 = hexStringToUint8Array("3081b6020100301006072a8648ce
 // Named curves mismatch raw keys
 shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
 shouldReject('crypto.subtle.importKey("raw", rawP384Key, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
-// Raw: Non-empty usages
+// Raw: Wrong usages
 shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"])');
 // Raw: Not support named curve
 shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-521" }, extractable, [ ])');
 // Jwk: Wrong usages
@@ -66,8 +67,26 @@ shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y,
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["verify"])');
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["wrapKey"])');
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
+// Jwk: Wrong alg
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, alg: "ES384"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y, alg: "ES256"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"])');
 // Jwk: Wrong use
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d, use: "sig"}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d, use: "enc"}, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"])');
 // Jwk: Wrong kty
 shouldReject('crypto.subtle.importKey("jwk", {kty: "RSA", crv: "P-256", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
 // Jwk: Wrong key_ops
@@ -88,8 +107,15 @@ shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y}
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x384, y:y}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y384}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
 shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x384, y:y384, d:d}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
-// Spki: Non-empty usages
+// Spki: Wrong usages
 shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
 // Spki: Truncated keys
 shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key1, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
 shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key2, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
@@ -114,6 +140,13 @@ shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", nam
 shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["verify"])');
 shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["wrapKey"])');
 shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["encrypt"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["decrypt"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveKey"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["deriveBits"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["wrapKey"])');
+shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["unwrapKey"])');
 // Pkcs8: Truncated keys
 shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key1, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
 shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key2, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key-expected.txt
new file mode 100644 (file)
index 0000000..c2458da
--- /dev/null
@@ -0,0 +1,26 @@
+Test exporting a ECDSA key pair with JWK format.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+Exporting the public key...
+PASS publicKey.kty is 'EC'
+PASS publicKey.crv is 'P-256'
+PASS Base64URL.parse(publicKey.x).byteLength is 32
+PASS Base64URL.parse(publicKey.y).byteLength is 32
+PASS publicKey.d is undefined.
+PASS publicKey.key_ops is ['verify']
+PASS publicKey.ext is true
+Exporting the private key...
+PASS privateKey.kty is 'EC'
+PASS privateKey.crv is 'P-256'
+PASS Base64URL.parse(privateKey.x).byteLength is 32
+PASS Base64URL.parse(privateKey.y).byteLength is 32
+PASS Base64URL.parse(privateKey.d).byteLength is 32
+PASS privateKey.key_ops is ['sign']
+PASS privateKey.ext is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key.html b/LayoutTests/crypto/subtle/ecdsa-generate-export-jwk-key.html
new file mode 100644 (file)
index 0000000..47e5b86
--- /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 type="text/javascript">
+description("Test exporting a ECDSA key pair with JWK format.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "ECDSA",
+    namedCurve: "P-256"
+};
+var extractable = true;
+
+var keyPair;
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    debug("Exporting the public key...");
+    return crypto.subtle.exportKey("jwk", keyPair.publicKey);
+}).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.kty", "'EC'");
+    shouldBe("publicKey.crv", "'P-256'");
+    shouldBe("Base64URL.parse(publicKey.x).byteLength", "32");
+    shouldBe("Base64URL.parse(publicKey.y).byteLength", "32");
+    shouldBeUndefined("publicKey.d");
+    shouldBe("publicKey.key_ops", "['verify']");
+    shouldBe("publicKey.ext", "true");
+
+    debug("Exporting the private key...");
+    return crypto.subtle.exportKey("jwk", keyPair.privateKey);
+}).then(function(result) {
+    privateKey = result;
+
+    shouldBe("privateKey.kty", "'EC'");
+    shouldBe("privateKey.crv", "'P-256'");
+    shouldBe("Base64URL.parse(privateKey.x).byteLength", "32");
+    shouldBe("Base64URL.parse(privateKey.y).byteLength", "32");
+    shouldBe("Base64URL.parse(privateKey.d).byteLength", "32");
+    shouldBe("privateKey.key_ops", "['sign']");
+    shouldBe("privateKey.ext", "true");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8-expected.txt
new file mode 100644 (file)
index 0000000..0b2f50d
--- /dev/null
@@ -0,0 +1,12 @@
+Test exporting an ECDSA private key with PKCS8 format.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+Exporting the public key...
+PASS privateKey.byteLength is 138
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8.html b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-pkcs8.html
new file mode 100644 (file)
index 0000000..61da2e3
--- /dev/null
@@ -0,0 +1,39 @@
+<!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 type="text/javascript">
+description("Test exporting an ECDSA private key with PKCS8 format.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "ECDSA",
+    namedCurve: "P-256"
+};
+var extractable = true;
+
+var keyPair;
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    debug("Exporting the public key...");
+    return crypto.subtle.exportKey("pkcs8", keyPair.privateKey);
+}).then(function(result) {
+    privateKey = result;
+
+    shouldBe("privateKey.byteLength", "138");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw-expected.txt
new file mode 100644 (file)
index 0000000..b27272b
--- /dev/null
@@ -0,0 +1,12 @@
+Test exporting an ECDSA public key with raw format.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+Exporting the public key...
+PASS publicKey.byteLength is 65
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw.html b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-raw.html
new file mode 100644 (file)
index 0000000..1367f2c
--- /dev/null
@@ -0,0 +1,39 @@
+<!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 type="text/javascript">
+description("Test exporting an ECDSA public key with raw format.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "ECDSA",
+    namedCurve: "P-256"
+};
+var extractable = true;
+
+var keyPair;
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    debug("Exporting the public key...");
+    return crypto.subtle.exportKey("raw", keyPair.publicKey);
+}).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.byteLength", "65");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki-expected.txt
new file mode 100644 (file)
index 0000000..b2de897
--- /dev/null
@@ -0,0 +1,12 @@
+Test exporting an ECDSA public key with SPKI format.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+Exporting the public key...
+PASS publicKey.byteLength is 91
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki.html b/LayoutTests/crypto/subtle/ecdsa-generate-export-key-spki.html
new file mode 100644 (file)
index 0000000..3f594b5
--- /dev/null
@@ -0,0 +1,39 @@
+<!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 type="text/javascript">
+description("Test exporting an ECDSA public key with SPKI format.");
+
+jsTestIsAsync = true;
+
+var algorithmKeyGen = {
+    name: "ECDSA",
+    namedCurve: "P-256"
+};
+var extractable = true;
+
+var keyPair;
+debug("Generating a key pair...");
+crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    debug("Exporting the public key...");
+    return crypto.subtle.exportKey("spki", keyPair.publicKey);
+}).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.byteLength", "91");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-key-expected.txt
new file mode 100644 (file)
index 0000000..b2952c6
--- /dev/null
@@ -0,0 +1,21 @@
+Test generating an EC key pair with P-256 using ECDSA algorithm.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating a key pair...
+PASS keyPair.toString() is '[object Object]'
+PASS keyPair.publicKey.type is 'public'
+PASS keyPair.publicKey.extractable is true
+PASS keyPair.publicKey.algorithm.name is 'ECDSA'
+PASS keyPair.publicKey.algorithm.namedCurve is 'P-256'
+PASS keyPair.publicKey.usages is ['verify']
+PASS keyPair.privateKey.type is 'private'
+PASS keyPair.privateKey.extractable is true
+PASS keyPair.privateKey.algorithm.name is 'ECDSA'
+PASS keyPair.privateKey.algorithm.namedCurve is 'P-256'
+PASS keyPair.privateKey.usages is ['sign']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256-expected.txt
new file mode 100644 (file)
index 0000000..1ecd0db
--- /dev/null
@@ -0,0 +1,14 @@
+Test ECDSA signing/verifying operations with generated P-256 keys
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating keys
+Signing
+PASS signature.byteLength is 64
+Verifying
+PASS verified is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256.html b/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p256.html
new file mode 100644 (file)
index 0000000..9db45bc
--- /dev/null
@@ -0,0 +1,47 @@
+<!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 type="text/javascript">
+description("Test ECDSA signing/verifying operations with generated P-256 keys");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+
+debug("Generating keys");
+crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+
+    debug("Signing");
+    return crypto.subtle.sign(ecdsaParams, keyPair.privateKey, data);
+}).then(function(result) {
+    signature = result;
+
+    shouldBe("signature.byteLength", "64");
+
+    debug("Verifying");
+    return crypto.subtle.verify(ecdsaParams, keyPair.publicKey, signature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeTrue("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384-expected.txt b/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384-expected.txt
new file mode 100644 (file)
index 0000000..65051d1
--- /dev/null
@@ -0,0 +1,14 @@
+Test ECDSA signing/verifying operations with generated P-384 keys
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Generating keys
+Signing
+PASS signature.byteLength is 96
+Verifying
+PASS verified is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384.html b/LayoutTests/crypto/subtle/ecdsa-generate-key-sign-verify-p384.html
new file mode 100644 (file)
index 0000000..f2a7070
--- /dev/null
@@ -0,0 +1,47 @@
+<!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 type="text/javascript">
+description("Test ECDSA signing/verifying operations with generated P-384 keys");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+
+debug("Generating keys");
+crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-384" }, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+
+    debug("Signing");
+    return crypto.subtle.sign(ecdsaParams, keyPair.privateKey, data);
+}).then(function(result) {
+    signature = result;
+
+    shouldBe("signature.byteLength", "96");
+
+    debug("Verifying");
+    return crypto.subtle.verify(ecdsaParams, keyPair.publicKey, signature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeTrue("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-generate-key.html b/LayoutTests/crypto/subtle/ecdsa-generate-key.html
new file mode 100644 (file)
index 0000000..2f26f52
--- /dev/null
@@ -0,0 +1,39 @@
+<!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 type="text/javascript">
+description("Test generating an EC key pair with P-256 using ECDSA algorithm.");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+
+debug("Generating a key pair...");
+crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256"}, extractable, ["sign", "verify"]).then(function(result) {
+    keyPair = result;
+    shouldBe("keyPair.toString()", "'[object Object]'");
+    shouldBe("keyPair.publicKey.type", "'public'");
+    shouldBe("keyPair.publicKey.extractable", "true");
+    shouldBe("keyPair.publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("keyPair.publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("keyPair.publicKey.usages", "['verify']");
+    shouldBe("keyPair.privateKey.type", "'private'");
+    shouldBe("keyPair.privateKey.extractable", "true");
+    shouldBe("keyPair.privateKey.algorithm.name", "'ECDSA'");
+    shouldBe("keyPair.privateKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("keyPair.privateKey.usages", "['sign']");
+
+    finishJSTest();
+});
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key-expected.txt
new file mode 100644 (file)
index 0000000..58b742f
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a JWK ECDSA private key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS privateKey.toString() is '[object CryptoKey]'
+PASS privateKey.type is 'private'
+PASS privateKey.extractable is false
+PASS privateKey.algorithm.name is 'ECDSA'
+PASS privateKey.algorithm.namedCurve is 'P-256'
+PASS privateKey.usages is ['sign']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key.html b/LayoutTests/crypto/subtle/ecdsa-import-jwk-private-key.html
new file mode 100644 (file)
index 0000000..a271e8f
--- /dev/null
@@ -0,0 +1,46 @@
+<!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 type="text/javascript">
+description("Test importing a JWK ECDSA private key");
+
+jsTestIsAsync = true;
+
+var jwkKey = {
+    kty: "EC",
+    use: "sig",
+    ext: false,
+    key_ops: ["sign"],
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+    d: "ppxBSov3N8_AUcisAuvmLV4yE8e_L_BLE8bZb9Z1Xjg",
+};
+var nonExtractable = false;
+
+debug("Importing a key...");
+crypto.subtle.importKey("jwk", jwkKey, { name: "ECDSA", namedCurve: "P-256" }, nonExtractable, ["sign"]).then(function(result) {
+    privateKey = result;
+
+    shouldBe("privateKey.toString()", "'[object CryptoKey]'");
+    shouldBe("privateKey.type", "'private'");
+    shouldBe("privateKey.extractable", "false");
+    shouldBe("privateKey.algorithm.name", "'ECDSA'");
+    shouldBe("privateKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("privateKey.usages", "['sign']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256-expected.txt
new file mode 100644 (file)
index 0000000..c6fe3d5
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a JWK ECDSA public key with ES256
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is ['verify']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html
new file mode 100644 (file)
index 0000000..6f20eab
--- /dev/null
@@ -0,0 +1,45 @@
+<!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 type="text/javascript">
+description("Test importing a JWK ECDSA public key with ES256");
+
+jsTestIsAsync = true;
+
+var jwkKey = {
+    kty: "EC",
+    use: "sig",
+    ext: true,
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+    alg: "ES256"
+};
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("jwk", jwkKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ['verify']).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'public'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("publicKey.usages", "['verify']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384-expected.txt
new file mode 100644 (file)
index 0000000..e4d6411
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a JWK ECDSA public key with ES384
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-384'
+PASS publicKey.usages is ['verify']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html
new file mode 100644 (file)
index 0000000..9331e8a
--- /dev/null
@@ -0,0 +1,45 @@
+<!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 type="text/javascript">
+description("Test importing a JWK ECDSA public key with ES384");
+
+jsTestIsAsync = true;
+
+var jwkKey = {
+    kty: "EC",
+    use: "sig",
+    ext: true,
+    crv: "P-384",
+    x: "1bHwFrsaPRjYq-zFOyLXK8Ugv3EqbVF075ct7ouTl_pwyhjeBu03JHjKTsyVbNWK",
+    y: "1bHwFrsaPRjYq-zFOyLXK8Ugv3EqbVF075ct7ouTl_pwyhjeBu03JHjKTsyVbNWK",
+    alg: "ES384"
+};
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("jwk", jwkKey, { name: "ECDSA", namedCurve: "P-384" }, extractable, ['verify']).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'public'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-384'");
+    shouldBe("publicKey.usages", "['verify']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key-expected.txt
new file mode 100644 (file)
index 0000000..cc02030
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a JWK ECDSA public key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is ['verify']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key.html b/LayoutTests/crypto/subtle/ecdsa-import-jwk-public-key.html
new file mode 100644 (file)
index 0000000..3a33a2f
--- /dev/null
@@ -0,0 +1,44 @@
+<!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 type="text/javascript">
+description("Test importing a JWK ECDSA public key");
+
+jsTestIsAsync = true;
+
+var jwkKey = {
+    kty: "EC",
+    use: "sig",
+    ext: true,
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+};
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("jwk", jwkKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ['verify']).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'public'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("publicKey.usages", "['verify']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256-expected.txt
new file mode 100644 (file)
index 0000000..e8c8f29
--- /dev/null
@@ -0,0 +1,10 @@
+Test ECDSA signing operation with a P-256 private key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS signature.byteLength is 64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256.html b/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p256.html
new file mode 100644 (file)
index 0000000..6fb9b20
--- /dev/null
@@ -0,0 +1,44 @@
+<!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 type="text/javascript">
+description("Test ECDSA signing operation with a P-256 private key");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPrivateKey = {
+    kty: "EC",
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+    d: "ppxBSov3N8_AUcisAuvmLV4yE8e_L_BLE8bZb9Z1Xjg",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+
+crypto.subtle.importKey("jwk", jwkPrivateKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]).then(function(key) {
+    return crypto.subtle.sign(ecdsaParams, key, data);
+}).then(function(result) {
+    signature = result;
+
+    shouldBe("signature.byteLength", "64");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384-expected.txt
new file mode 100644 (file)
index 0000000..ed151f3
--- /dev/null
@@ -0,0 +1,10 @@
+Test ECDSA signing operation with a P-384 private key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS signature.byteLength is 96
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384.html b/LayoutTests/crypto/subtle/ecdsa-import-key-sign-p384.html
new file mode 100644 (file)
index 0000000..8b29869
--- /dev/null
@@ -0,0 +1,44 @@
+<!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 type="text/javascript">
+description("Test ECDSA signing operation with a P-384 private key");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPrivateKey = {
+    kty: "EC",
+    crv: "P-384",
+    x: "5ugBBtfAK6EkhCcZRmpq_ULgoGH4iBfhH1z6RAnJgiWKRO8tVPvOJHZKGSw05puS",
+    y: "e5gXPiwGTKqwj_Ixvf_swUz2pVuWIcd9Z_hccP6EDKV1hph2bItMIOz4M1Pf7ErZ",
+    d: "4sxEb3O0Wavpb6lWKWkaAX9z_nM1VXnIx9A8ldBzeUqnWX7ZYQt6auwodiXPMaiV",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+
+crypto.subtle.importKey("jwk", jwkPrivateKey, { name: "ECDSA", namedCurve: "P-384" }, extractable, ["sign"]).then(function(key) {
+    return crypto.subtle.sign(ecdsaParams, key, data);
+}).then(function(result) {
+    signature = result;
+
+    shouldBe("signature.byteLength", "96");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256-expected.txt
new file mode 100644 (file)
index 0000000..0efa818
--- /dev/null
@@ -0,0 +1,10 @@
+Test ECDSA verifying operation with a P-256 public key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS verified is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256.html b/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p256.html
new file mode 100644 (file)
index 0000000..a97e02e
--- /dev/null
@@ -0,0 +1,44 @@
+<!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 type="text/javascript">
+description("Test ECDSA verifying operation with a P-256 public key");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPublicKey = {
+    kty: "EC",
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+var signature = hexStringToUint8Array("d60737267c717deb1f3547c85d3f49b167fb3b4fd7ed7d974c2adc4f89171f9884a2637d5d5a7c5d475dc13d37522b958d5bf333a06e9ad445e831f220900a1b");
+
+crypto.subtle.importKey("jwk", jwkPublicKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]).then(function(key) {
+    return crypto.subtle.verify(ecdsaParams, key, signature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeTrue("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384-expected.txt
new file mode 100644 (file)
index 0000000..b6758fd
--- /dev/null
@@ -0,0 +1,10 @@
+Test ECDSA verifying operation with a P-384 public key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS verified is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384.html b/LayoutTests/crypto/subtle/ecdsa-import-key-verify-p384.html
new file mode 100644 (file)
index 0000000..475c1f2
--- /dev/null
@@ -0,0 +1,44 @@
+<!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 type="text/javascript">
+description("Test ECDSA verifying operation with a P-384 public key");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPublicKey = {
+    kty: "EC",
+    crv: "P-384",
+    x: "5ugBBtfAK6EkhCcZRmpq_ULgoGH4iBfhH1z6RAnJgiWKRO8tVPvOJHZKGSw05puS",
+    y: "e5gXPiwGTKqwj_Ixvf_swUz2pVuWIcd9Z_hccP6EDKV1hph2bItMIOz4M1Pf7ErZ",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+var signature = hexStringToUint8Array("ae30b4edb6872a83f8333f67d20043649efa5f599bdeaf6164f8c2eb61ae552696c23710d94d25cbc1997285c8b07c773da820b5639176be4ec6b59cda4d436a97dd43f7de18b08d1e5f9c69d7358672bdecac2765e12cb0895a05fd5a636620");
+
+crypto.subtle.importKey("jwk", jwkPublicKey, { name: "ECDSA", namedCurve: "P-384" }, extractable, ["verify"]).then(function(key) {
+    return crypto.subtle.verify(ecdsaParams, key, signature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeTrue("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key-expected.txt
new file mode 100644 (file)
index 0000000..c3d5365
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a PKCS8 ECDSA key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'private'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is [ 'sign' ]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key.html b/LayoutTests/crypto/subtle/ecdsa-import-pkcs8-key.html
new file mode 100644 (file)
index 0000000..ebecdf7
--- /dev/null
@@ -0,0 +1,37 @@
+<!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 type="text/javascript">
+description("Test importing a PKCS8 ECDSA key");
+
+jsTestIsAsync = true;
+
+var pkcs8Key = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104200a21f3f048b893b0f2b5a8459bd6d2bc112614aa86437f8fa2496a0e27f5b0a8a14403420004d726bd565878f24ee3616890d3668503334b84da3434b2774a44d6e4b9c536dd60e9181e1d1469ba3e6aba8987225f6e797d01a0dc400a4a298c902bae66abe2");
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("pkcs8", pkcs8Key, {name: "ECDSA", namedCurve: "P-256"}, extractable, ["sign"]).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'private'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("publicKey.usages", "[ 'sign' ]");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-raw-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-raw-key-expected.txt
new file mode 100644 (file)
index 0000000..7aa7474
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing an ECDSA raw key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is ['verify']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-raw-key.html b/LayoutTests/crypto/subtle/ecdsa-import-raw-key.html
new file mode 100644 (file)
index 0000000..b536fbf
--- /dev/null
@@ -0,0 +1,37 @@
+<!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 type="text/javascript">
+description("Test importing an ECDSA raw key");
+
+jsTestIsAsync = true;
+
+var rawKey = hexStringToUint8Array("04dc08d9bf603333eab1ad29cef41a6203ab6ecce03c5a4a9bf5771a3fb9f971d89a09664bfb87c61199b3453220eadec714c49ad1e24bf5d7ec5bddeca6420893");
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("raw", rawKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ['verify']).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'public'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("publicKey.usages", "['verify']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-spki-key-expected.txt b/LayoutTests/crypto/subtle/ecdsa-import-spki-key-expected.txt
new file mode 100644 (file)
index 0000000..309442f
--- /dev/null
@@ -0,0 +1,16 @@
+Test importing a SPKI ECDSA key
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Importing a key...
+PASS publicKey.toString() is '[object CryptoKey]'
+PASS publicKey.type is 'public'
+PASS publicKey.extractable is true
+PASS publicKey.algorithm.name is 'ECDSA'
+PASS publicKey.algorithm.namedCurve is 'P-256'
+PASS publicKey.usages is ['verify']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-import-spki-key.html b/LayoutTests/crypto/subtle/ecdsa-import-spki-key.html
new file mode 100644 (file)
index 0000000..a4a661c
--- /dev/null
@@ -0,0 +1,37 @@
+<!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 type="text/javascript">
+description("Test importing a SPKI ECDSA key");
+
+jsTestIsAsync = true;
+
+var spkiKey = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d03010703420004c3ee3a2c3380072b9b2a59fed2cada65121806e22c4f4f8a25e740fc3e54d75d86c200298e6dfc1611d185eedbdb3c2661b0eb0441f7fd57c90d08112e9ae71c");
+var extractable = true;
+
+debug("Importing a key...");
+crypto.subtle.importKey("spki", spkiKey, {name: "ECDSA", namedCurve: "P-256"}, extractable, ['verify']).then(function(result) {
+    publicKey = result;
+
+    shouldBe("publicKey.toString()", "'[object CryptoKey]'");
+    shouldBe("publicKey.type", "'public'");
+    shouldBe("publicKey.extractable", "true");
+    shouldBe("publicKey.algorithm.name", "'ECDSA'");
+    shouldBe("publicKey.algorithm.namedCurve", "'P-256'");
+    shouldBe("publicKey.usages", "['verify']");
+
+    finishJSTest();
+});
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters-expected.txt b/LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters-expected.txt
new file mode 100644 (file)
index 0000000..7b8aee5
--- /dev/null
@@ -0,0 +1,11 @@
+Test ECDSA verifying operation with malformed parameters
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS verified is false
+PASS verified is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters.html b/LayoutTests/crypto/subtle/ecdsa-verify-malformed-parameters.html
new file mode 100644 (file)
index 0000000..6597a08
--- /dev/null
@@ -0,0 +1,53 @@
+<!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 type="text/javascript">
+description("Test ECDSA verifying operation with malformed parameters");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPublicKey = {
+    kty: "EC",
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+var corruptedSignature = hexStringToUint8Array("d60737267c707deb1f3547c85d3f49b167fb3b4fd7ed7d974c2adc4f89171f9884a2637d5d5a7c5d475dc13d37522b958d5bf333a06e9ad445e831f220900a1b");
+var shortenSignature = hexStringToUint8Array("d60737267c707deb1f3547c85d3f49b167fb3b4fd7ed7d974c2adc4f89171f9884a2637d5d5a7c5d475dc13d37522b958d5bf333a06e9ad445e831f220900a");
+
+crypto.subtle.importKey("jwk", jwkPublicKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]).then(function(result) {
+    key = result;
+
+    return crypto.subtle.verify(ecdsaParams, key, corruptedSignature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeFalse("verified");
+
+    return crypto.subtle.verify(ecdsaParams, key, corruptedSignature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeFalse("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
+
+</script>
+
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign-expected.txt b/LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign-expected.txt
new file mode 100644 (file)
index 0000000..b81300c
--- /dev/null
@@ -0,0 +1,11 @@
+[Worker] Test ECDSA signing operation with a P-256 private key in workers
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/ecdsa-import-key-sign.js
+PASS [Worker] signature.byteLength is 64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign.html b/LayoutTests/crypto/workers/subtle/ecdsa-import-key-sign.html
new file mode 100644 (file)
index 0000000..f25958a
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+    <script type="text/javascript">
+        worker = startWorker('resources/ecdsa-import-key-sign.js');
+    </script>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify-expected.txt b/LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify-expected.txt
new file mode 100644 (file)
index 0000000..750f851
--- /dev/null
@@ -0,0 +1,11 @@
+[Worker] Test ECDSA verifying operation with a P-256 public key in workers
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: resources/ecdsa-import-key-verify.js
+PASS [Worker] verified is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify.html b/LayoutTests/crypto/workers/subtle/ecdsa-import-key-verify.html
new file mode 100644 (file)
index 0000000..3450b12
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+    <script type="text/javascript">
+        worker = startWorker('resources/ecdsa-import-key-verify.js');
+    </script>
+    <script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-sign.js b/LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-sign.js
new file mode 100644 (file)
index 0000000..f5fc264
--- /dev/null
@@ -0,0 +1,30 @@
+importScripts('../../../../resources/js-test-pre.js');
+importScripts("../../../resources/common.js");
+
+description("Test ECDSA signing operation with a P-256 private key in workers");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPrivateKey = {
+    kty: "EC",
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+    d: "ppxBSov3N8_AUcisAuvmLV4yE8e_L_BLE8bZb9Z1Xjg",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+
+crypto.subtle.importKey("jwk", jwkPrivateKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"]).then(function(key) {
+    return crypto.subtle.sign(ecdsaParams, key, data);
+}).then(function(result) {
+    signature = result;
+
+    shouldBe("signature.byteLength", "64");
+
+    finishJSTest();
+}, failAndFinishJSTest);
diff --git a/LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-verify.js b/LayoutTests/crypto/workers/subtle/resources/ecdsa-import-key-verify.js
new file mode 100644 (file)
index 0000000..8b85c7c
--- /dev/null
@@ -0,0 +1,30 @@
+importScripts('../../../../resources/js-test-pre.js');
+importScripts("../../../resources/common.js");
+
+description("Test ECDSA verifying operation with a P-256 public key in workers");
+
+jsTestIsAsync = true;
+
+var extractable = true;
+var jwkPublicKey = {
+    kty: "EC",
+    crv: "P-256",
+    x: "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA",
+    y: "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI",
+};
+var ecdsaParams = {
+    name: "ECDSA",
+    hash: "SHA-256",
+}
+var data = asciiToUint8Array("Hello, World!");
+var signature = hexStringToUint8Array("d60737267c717deb1f3547c85d3f49b167fb3b4fd7ed7d974c2adc4f89171f9884a2637d5d5a7c5d475dc13d37522b958d5bf333a06e9ad445e831f220900a1b");
+
+crypto.subtle.importKey("jwk", jwkPublicKey, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["verify"]).then(function(key) {
+    return crypto.subtle.verify(ecdsaParams, key, signature, data);
+}).then(function(result) {
+    verified = result;
+
+    shouldBeTrue("verified");
+
+    finishJSTest();
+}, failAndFinishJSTest);
index 51ef108..482e6cd 100644 (file)
@@ -1,3 +1,22 @@
+2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebCrypto] Add support for ECDSA
+        https://bugs.webkit.org/show_bug.cgi?id=170789
+        <rdar://problem/31588604>
+
+        Reviewed by Brent Fulgham.
+
+        * web-platform-tests/WebCryptoAPI/generateKey/failures_ECDSA.worker-expected.txt:
+        * web-platform-tests/WebCryptoAPI/generateKey/successes_ECDSA.worker-expected.txt:
+        * web-platform-tests/WebCryptoAPI/generateKey/test_failures_ECDSA-expected.txt:
+        * web-platform-tests/WebCryptoAPI/generateKey/test_successes_ECDSA-expected.txt:
+        * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt:
+        * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt:
+        * web-platform-tests/WebCryptoAPI/sign_verify/ecdsa.worker-expected.txt:
+        * web-platform-tests/WebCryptoAPI/sign_verify/hmac.worker-expected.txt:
+        * web-platform-tests/WebCryptoAPI/sign_verify/test_ecdsa-expected.txt:
+        * web-platform-tests/WebCryptoAPI/sign_verify/test_hmac-expected.txt:
+
 2017-04-17  Tim Horton  <timothy_horton@apple.com>
 
         Remove some accidentally-added .orig files
index 5538ba2..e2532ee 100644 (file)
@@ -323,78 +323,78 @@ PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, s
 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({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"
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
@@ -411,10 +411,10 @@ PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519},
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
 FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
 FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
 
index 013a3f5..62024c2 100644 (file)
@@ -1,56 +1,56 @@
 
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
 
index 5e46074..02ae363 100644 (file)
@@ -325,78 +325,78 @@ PASS Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, s
 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({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"
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, encrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, decrypt]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, wrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, unwrapKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveKey]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign, deriveBits]) 
+PASS Bad usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify, deriveBits]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign]) 
@@ -413,10 +413,10 @@ PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519},
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, []) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify]) 
 PASS Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify]) 
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
-FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Empty usages: generateKey({name: ECDSA, namedCurve: P-384}, true, []) 
 FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
 FAIL Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, []) assert_equals: Empty usages not supported expected "SyntaxError" but got "NotSupportedError"
 
index ed7842a..201af4a 100644 (file)
@@ -3,58 +3,58 @@ 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({name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ECDSA, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-256}, true, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [verify, sign]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, false, [sign, verify, sign, sign, verify]) 
+PASS Success: generateKey({name: Ecdsa, namedCurve: P-384}, true, [sign, verify, sign, sign, verify]) 
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
+FAIL Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The algorithm is not supported Reached unreachable code
 
index d7d8e25..3526dd3 100644 (file)
@@ -1,28 +1,28 @@
 
-FAIL Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
 PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, true, []) 
 PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, []) 
 PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
index d7d8e25..3526dd3 100644 (file)
@@ -1,28 +1,28 @@
 
-FAIL Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
-FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: NotSupportedError (DOM Exception 9): The operation is not supported. Reached unreachable code
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign]) 
+PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, []) 
+PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign]) 
+PASS Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, []) 
+PASS Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+PASS Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign]) 
+FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, []) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
+FAIL Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign]) assert_unreached: Threw an unexpected error: DataError (DOM Exception 30): Data provided to an operation does not meet requirements Reached unreachable code
 PASS Good parameters: P-256 bits (spki, buffer(91), {name: ECDH, namedCurve: P-256}, true, []) 
 PASS Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, []) 
 PASS Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey]) 
index 3271930..218482e 100644 (file)
 
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification 
+PASS ECDSA P-256 with SHA-256 verification 
+PASS ECDSA P-256 with SHA-384 verification 
+PASS ECDSA P-256 with SHA-512 verification 
+PASS ECDSA P-384 with SHA-1 verification 
+PASS ECDSA P-384 with SHA-256 verification 
+PASS ECDSA P-384 with SHA-384 verification 
+PASS ECDSA P-384 with SHA-512 verification 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-512 verification with altered signature after call 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-512 with altered plaintext after call 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 using privateKey to verify 
+PASS ECDSA P-256 with SHA-256 using privateKey to verify 
+PASS ECDSA P-256 with SHA-384 using privateKey to verify 
+PASS ECDSA P-256 with SHA-512 using privateKey to verify 
+PASS ECDSA P-384 with SHA-1 using privateKey to verify 
+PASS ECDSA P-384 with SHA-256 using privateKey to verify 
+PASS ECDSA P-384 with SHA-384 using privateKey to verify 
+PASS ECDSA P-384 with SHA-512 using privateKey to verify 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 using publicKey to sign 
+PASS ECDSA P-256 with SHA-256 using publicKey to sign 
+PASS ECDSA P-256 with SHA-384 using publicKey to sign 
+PASS ECDSA P-256 with SHA-512 using publicKey to sign 
+PASS ECDSA P-384 with SHA-1 using publicKey to sign 
+PASS ECDSA P-384 with SHA-256 using publicKey to sign 
+PASS ECDSA P-384 with SHA-384 using publicKey to sign 
+PASS ECDSA P-384 with SHA-512 using publicKey to sign 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 no verify usage 
+PASS ECDSA P-256 with SHA-256 no verify usage 
+PASS ECDSA P-256 with SHA-384 no verify usage 
+PASS ECDSA P-256 with SHA-512 no verify usage 
+PASS ECDSA P-384 with SHA-1 no verify usage 
+PASS ECDSA P-384 with SHA-256 no verify usage 
+PASS ECDSA P-384 with SHA-384 no verify usage 
+PASS ECDSA P-384 with SHA-512 no verify usage 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 round trip 
+PASS ECDSA P-256 with SHA-256 round trip 
+PASS ECDSA P-256 with SHA-384 round trip 
+PASS ECDSA P-256 with SHA-512 round trip 
+PASS ECDSA P-384 with SHA-1 round trip 
+PASS ECDSA P-384 with SHA-256 round trip 
+PASS ECDSA P-384 with SHA-384 round trip 
+PASS ECDSA P-384 with SHA-512 round trip 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered signature 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-512 verification failure due to wrong hash 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-512 verification failure due to bad hash name 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to shortened signature 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered plaintext 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
 
index 4885b24..d3eab40 100644 (file)
@@ -1,12 +1,4 @@
 
-FAIL generate wrong key step: HMAC with SHA-1 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-1 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-256 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-256 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-384 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-384 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-512 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-512 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-1 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-1 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-256 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-256 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-384 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-384 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-512 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-512 failed: 'The operation is not supported.' Reached unreachable code
 PASS HMAC with SHA-1 verification 
 PASS HMAC with SHA-256 verification 
 PASS HMAC with SHA-384 verification 
@@ -27,6 +19,14 @@ PASS HMAC with SHA-1 round trip
 PASS HMAC with SHA-256 round trip 
 PASS HMAC with SHA-384 round trip 
 PASS HMAC with SHA-512 round trip 
+PASS HMAC with SHA-1 signing with wrong algorithm name 
+PASS HMAC with SHA-256 signing with wrong algorithm name 
+PASS HMAC with SHA-384 signing with wrong algorithm name 
+PASS HMAC with SHA-512 signing with wrong algorithm name 
+PASS HMAC with SHA-1 verifying with wrong algorithm name 
+PASS HMAC with SHA-256 verifying with wrong algorithm name 
+PASS HMAC with SHA-384 verifying with wrong algorithm name 
+PASS HMAC with SHA-512 verifying with wrong algorithm name 
 PASS HMAC with SHA-1 verification failure due to wrong plaintext 
 PASS HMAC with SHA-256 verification failure due to wrong plaintext 
 PASS HMAC with SHA-384 verification failure due to wrong plaintext 
index b457861..4dbf638 100644 (file)
 sign and verify Tests for ECDSA
 
 
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-256 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-256 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-384 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-384 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''The operation is not supported.'' Reached unreachable code
-FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''The operation is not supported.'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification 
+PASS ECDSA P-256 with SHA-256 verification 
+PASS ECDSA P-256 with SHA-384 verification 
+PASS ECDSA P-256 with SHA-512 verification 
+PASS ECDSA P-384 with SHA-1 verification 
+PASS ECDSA P-384 with SHA-256 verification 
+PASS ECDSA P-384 with SHA-384 verification 
+PASS ECDSA P-384 with SHA-512 verification 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-256 with SHA-512 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-1 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-256 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-384 verification with altered signature after call 
+PASS ECDSA P-384 with SHA-512 verification with altered signature after call 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification with altered signature after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-256 with SHA-512 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-1 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-256 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-384 with altered plaintext after call 
+PASS ECDSA P-384 with SHA-512 with altered plaintext after call 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 with altered plaintext after call assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 using privateKey to verify 
+PASS ECDSA P-256 with SHA-256 using privateKey to verify 
+PASS ECDSA P-256 with SHA-384 using privateKey to verify 
+PASS ECDSA P-256 with SHA-512 using privateKey to verify 
+PASS ECDSA P-384 with SHA-1 using privateKey to verify 
+PASS ECDSA P-384 with SHA-256 using privateKey to verify 
+PASS ECDSA P-384 with SHA-384 using privateKey to verify 
+PASS ECDSA P-384 with SHA-512 using privateKey to verify 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using privateKey to verify assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 using publicKey to sign 
+PASS ECDSA P-256 with SHA-256 using publicKey to sign 
+PASS ECDSA P-256 with SHA-384 using publicKey to sign 
+PASS ECDSA P-256 with SHA-512 using publicKey to sign 
+PASS ECDSA P-384 with SHA-1 using publicKey to sign 
+PASS ECDSA P-384 with SHA-256 using publicKey to sign 
+PASS ECDSA P-384 with SHA-384 using publicKey to sign 
+PASS ECDSA P-384 with SHA-512 using publicKey to sign 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 using publicKey to sign assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 no verify usage 
+PASS ECDSA P-256 with SHA-256 no verify usage 
+PASS ECDSA P-256 with SHA-384 no verify usage 
+PASS ECDSA P-256 with SHA-512 no verify usage 
+PASS ECDSA P-384 with SHA-1 no verify usage 
+PASS ECDSA P-384 with SHA-256 no verify usage 
+PASS ECDSA P-384 with SHA-384 no verify usage 
+PASS ECDSA P-384 with SHA-512 no verify usage 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 no verify usage assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 round trip 
+PASS ECDSA P-256 with SHA-256 round trip 
+PASS ECDSA P-256 with SHA-384 round trip 
+PASS ECDSA P-256 with SHA-512 round trip 
+PASS ECDSA P-384 with SHA-1 round trip 
+PASS ECDSA P-384 with SHA-256 round trip 
+PASS ECDSA P-384 with SHA-384 round trip 
+PASS ECDSA P-384 with SHA-512 round trip 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 round trip assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 signing with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 signing with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-1 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-256 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-384 verifying with wrong algorithm name 
+PASS ECDSA P-384 with SHA-512 verifying with wrong algorithm name 
+PASS ECDSA P-256 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered signature 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-256 with SHA-512 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-1 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-256 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-384 verification failure due to wrong hash 
+PASS ECDSA P-384 with SHA-512 verification failure due to wrong hash 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to wrong hash assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-256 with SHA-512 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-1 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-256 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-384 verification failure due to bad hash name 
+PASS ECDSA P-384 with SHA-512 verification failure due to bad hash name 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to bad hash name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-256 with SHA-512 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-1 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-256 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-384 verification failure due to shortened signature 
+PASS ECDSA P-384 with SHA-512 verification failure due to shortened signature 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to shortened signature assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+PASS ECDSA P-256 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-256 with SHA-512 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-1 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-256 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-384 verification failure due to altered plaintext 
+PASS ECDSA P-384 with SHA-512 verification failure due to altered plaintext 
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verification failure due to altered plaintext assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 signing with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-1 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-1. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-256 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-256. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-384 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-384. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
+FAIL importVectorKeys step: ECDSA P-521 with SHA-512 verifying with wrong algorithm name assert_unreached: importVectorKeys failed for ECDSA P-521 with SHA-512. Message: ''Data provided to an operation does not meet requirements'' Reached unreachable code
 
index dc03902..9770ce0 100644 (file)
@@ -1,14 +1,6 @@
 sign and verify Tests for HMAC
 
 
-FAIL generate wrong key step: HMAC with SHA-1 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-1 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-256 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-256 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-384 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-384 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-512 signing with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-512 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-1 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-1 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-256 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-256 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-384 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-384 failed: 'The operation is not supported.' Reached unreachable code
-FAIL generate wrong key step: HMAC with SHA-512 verifying with wrong algorithm name assert_unreached: Generate wrong key for test HMAC with SHA-512 failed: 'The operation is not supported.' Reached unreachable code
 PASS HMAC with SHA-1 verification 
 PASS HMAC with SHA-256 verification 
 PASS HMAC with SHA-384 verification 
@@ -29,6 +21,14 @@ PASS HMAC with SHA-1 round trip
 PASS HMAC with SHA-256 round trip 
 PASS HMAC with SHA-384 round trip 
 PASS HMAC with SHA-512 round trip 
+PASS HMAC with SHA-1 signing with wrong algorithm name 
+PASS HMAC with SHA-256 signing with wrong algorithm name 
+PASS HMAC with SHA-384 signing with wrong algorithm name 
+PASS HMAC with SHA-512 signing with wrong algorithm name 
+PASS HMAC with SHA-1 verifying with wrong algorithm name 
+PASS HMAC with SHA-256 verifying with wrong algorithm name 
+PASS HMAC with SHA-384 verifying with wrong algorithm name 
+PASS HMAC with SHA-512 verifying with wrong algorithm name 
 PASS HMAC with SHA-1 verification failure due to wrong plaintext 
 PASS HMAC with SHA-256 verification failure due to wrong plaintext 
 PASS HMAC with SHA-384 verification failure due to wrong plaintext 
index 8719c39..f5fbb9e 100644 (file)
@@ -356,6 +356,7 @@ set(WebCore_NON_SVG_IDL_FILES
     crypto/parameters/AesKeyParams.idl
     crypto/parameters/EcKeyParams.idl
     crypto/parameters/EcdhKeyDeriveParams.idl
+    crypto/parameters/EcdsaParams.idl
     crypto/parameters/HkdfParams.idl
     crypto/parameters/HmacKeyParams.idl
     crypto/parameters/Pbkdf2Params.idl
index 7ac8ef7..525a308 100644 (file)
@@ -1,3 +1,99 @@
+2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebCrypto] Add support for ECDSA
+        https://bugs.webkit.org/show_bug.cgi?id=170789
+        <rdar://problem/31588604>
+
+        Reviewed by Brent Fulgham.
+
+        This patch implements ECDSA according to the spec: https://www.w3.org/TR/WebCryptoAPI/#ecdsa.
+        Supported operations include sign, verify, generateKey, importKey and exportKey.
+
+        Tests: crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html
+               crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html
+               crypto/subtle/ecdsa-generate-export-jwk-key.html
+               crypto/subtle/ecdsa-generate-export-key-pkcs8.html
+               crypto/subtle/ecdsa-generate-export-key-raw.html
+               crypto/subtle/ecdsa-generate-export-key-spki.html
+               crypto/subtle/ecdsa-generate-key-sign-verify-p256.html
+               crypto/subtle/ecdsa-generate-key-sign-verify-p384.html
+               crypto/subtle/ecdsa-generate-key.html
+               crypto/subtle/ecdsa-import-jwk-private-key.html
+               crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html
+               crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html
+               crypto/subtle/ecdsa-import-jwk-public-key.html
+               crypto/subtle/ecdsa-import-key-sign-p256.html
+               crypto/subtle/ecdsa-import-key-sign-p384.html
+               crypto/subtle/ecdsa-import-key-verify-p256.html
+               crypto/subtle/ecdsa-import-key-verify-p384.html
+               crypto/subtle/ecdsa-import-pkcs8-key.html
+               crypto/subtle/ecdsa-import-raw-key.html
+               crypto/subtle/ecdsa-import-spki-key.html
+               crypto/subtle/ecdsa-verify-malformed-parameters.html
+               crypto/workers/subtle/ecdsa-import-key-sign.html
+               crypto/workers/subtle/ecdsa-import-key-verify.html
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * PlatformGTK.cmake:
+        * PlatformMac.cmake:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/JSSubtleCryptoCustom.cpp:
+        (WebCore::normalizeCryptoAlgorithmParameters):
+        (WebCore::jsSubtleCryptoFunctionSignPromise):
+        (WebCore::jsSubtleCryptoFunctionVerifyPromise):
+        Add missing parameters.
+        * crypto/CommonCryptoUtilities.h:
+        * crypto/CryptoAlgorithm.cpp:
+        (WebCore::CryptoAlgorithm::sign):
+        (WebCore::CryptoAlgorithm::verify):
+        * crypto/CryptoAlgorithm.h:
+        Add missing parameters.
+        * crypto/CryptoAlgorithmParameters.h:
+        * crypto/algorithms/CryptoAlgorithmECDSA.cpp: Added.
+        (WebCore::CryptoAlgorithmECDSA::create):
+        (WebCore::CryptoAlgorithmECDSA::identifier):
+        (WebCore::CryptoAlgorithmECDSA::sign):
+        (WebCore::CryptoAlgorithmECDSA::verify):
+        (WebCore::CryptoAlgorithmECDSA::generateKey):
+        (WebCore::CryptoAlgorithmECDSA::importKey):
+        (WebCore::CryptoAlgorithmECDSA::exportKey):
+        * crypto/algorithms/CryptoAlgorithmECDSA.h: Added.
+        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
+        (WebCore::CryptoAlgorithmHMAC::sign):
+        (WebCore::CryptoAlgorithmHMAC::verify):
+        * crypto/algorithms/CryptoAlgorithmHMAC.h:
+        Add missing parameters.
+        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
+        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
+        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
+        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
+        Add missing parameters.
+        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp: Added.
+        (WebCore::CryptoAlgorithmECDSA::platformSign):
+        (WebCore::CryptoAlgorithmECDSA::platformVerify):
+        * crypto/mac/CommonCryptoDERUtilities.cpp: Added.
+        (WebCore::bytesUsedToEncodedLength):
+        (WebCore::extraBytesNeededForEncodedLength):
+        (WebCore::addEncodedASN1Length):
+        (WebCore::bytesNeededForEncodedLength):
+        * crypto/mac/CommonCryptoDERUtilities.h:
+        (WebCore::bytesUsedToEncodedLength): Deleted.
+        (WebCore::extraBytesNeededForEncodedLength): Deleted.
+        (WebCore::addEncodedASN1Length): Deleted.
+        (WebCore::bytesNeededForEncodedLength): Deleted.
+        Move implementations to a .cpp file.
+        * crypto/mac/CryptoAlgorithmECDSAMac.cpp: Added.
+        (WebCore::cryptoDigestAlgorithm):
+        (WebCore::signECDSA):
+        (WebCore::verifyECDSA):
+        (WebCore::CryptoAlgorithmECDSA::platformSign):
+        (WebCore::CryptoAlgorithmECDSA::platformVerify):
+        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
+        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
+        * crypto/parameters/CryptoAlgorithmEcdsaParams.h: Added.
+        * crypto/parameters/EcdsaParams.idl: Added.
+
 2017-04-17  Jeremy Jones  <jeremyj@apple.com>
 
         Refactor enumerateDevices to allow separate CaptureDeviceManagers for audio and video.
index 10fa9c7..cce5f75 100644 (file)
@@ -293,6 +293,7 @@ JS_BINDING_IDLS = \
     $(WebCore)/crypto/parameters/AesKeyParams.idl \
     $(WebCore)/crypto/parameters/EcKeyParams.idl \
     $(WebCore)/crypto/parameters/EcdhKeyDeriveParams.idl \
+    $(WebCore)/crypto/parameters/EcdsaParams.idl \
     $(WebCore)/crypto/parameters/HkdfParams.idl \
     $(WebCore)/crypto/parameters/HmacKeyParams.idl \
     $(WebCore)/crypto/parameters/Pbkdf2Params.idl \
index 88a74c6..0866c5a 100644 (file)
@@ -387,6 +387,7 @@ if (ENABLE_SUBTLE_CRYPTO)
         crypto/algorithms/CryptoAlgorithmAES_GCM.cpp
         crypto/algorithms/CryptoAlgorithmAES_KW.cpp
         crypto/algorithms/CryptoAlgorithmECDH.cpp
+        crypto/algorithms/CryptoAlgorithmECDSA.cpp
         crypto/algorithms/CryptoAlgorithmHKDF.cpp
         crypto/algorithms/CryptoAlgorithmHMAC.cpp
         crypto/algorithms/CryptoAlgorithmPBKDF2.cpp
@@ -405,6 +406,7 @@ if (ENABLE_SUBTLE_CRYPTO)
         crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp
         crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp
         crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp
+        crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp
         crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp
         crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp
         crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp
index f69b683..6e03b90 100644 (file)
@@ -188,6 +188,7 @@ list(APPEND WebCore_SOURCES
     crypto/algorithms/CryptoAlgorithmAES_GCM.cpp
     crypto/algorithms/CryptoAlgorithmAES_KW.cpp
     crypto/algorithms/CryptoAlgorithmECDH.cpp
+    crypto/algorithms/CryptoAlgorithmECDSA.cpp
     crypto/algorithms/CryptoAlgorithmHKDF.cpp
     crypto/algorithms/CryptoAlgorithmHMAC.cpp
     crypto/algorithms/CryptoAlgorithmPBKDF2.cpp
@@ -215,6 +216,7 @@ list(APPEND WebCore_SOURCES
     crypto/mac/CryptoAlgorithmAES_GCMMac.cpp
     crypto/mac/CryptoAlgorithmAES_KWMac.cpp
     crypto/mac/CryptoAlgorithmECDHMac.cpp
+    crypto/mac/CryptoAlgorithmECDSAMac.cpp
     crypto/mac/CryptoAlgorithmHKDFMac.cpp
     crypto/mac/CryptoAlgorithmHMACMac.cpp
     crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp
index f2c649e..30482c9 100644 (file)
                57E657EF1E71665400F941CA /* JSPbkdf2Params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57E657ED1E71665400F941CA /* JSPbkdf2Params.cpp */; };
                57E657F01E71665400F941CA /* JSPbkdf2Params.h in Headers */ = {isa = PBXBuildFile; fileRef = 57E657EE1E71665400F941CA /* JSPbkdf2Params.h */; };
                57E664FC1E73703300765536 /* CommonCryptoDERUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 57E664FB1E73703300765536 /* CommonCryptoDERUtilities.h */; };
+               57EEAA461E9ED2DD00701124 /* CryptoAlgorithmECDSA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57EEAA441E9ED2DD00701124 /* CryptoAlgorithmECDSA.cpp */; };
+               57EEAA471E9ED2DD00701124 /* CryptoAlgorithmECDSA.h in Headers */ = {isa = PBXBuildFile; fileRef = 57EEAA451E9ED2DD00701124 /* CryptoAlgorithmECDSA.h */; };
+               57EEAA4A1E9F2D3200701124 /* CryptoAlgorithmECDSAMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57EEAA481E9F2D3200701124 /* CryptoAlgorithmECDSAMac.cpp */; };
+               57EEAA501E9FFBFC00701124 /* CryptoAlgorithmEcdsaParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 57EEAA4D1E9FFBFC00701124 /* CryptoAlgorithmEcdsaParams.h */; };
+               57EEAA541EA001B100701124 /* JSEcdsaParams.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57EEAA521EA001B100701124 /* JSEcdsaParams.cpp */; };
+               57EEAA551EA001B100701124 /* JSEcdsaParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 57EEAA531EA001B100701124 /* JSEcdsaParams.h */; };
+               57EEAA581EA0AFBB00701124 /* CommonCryptoDERUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57EEAA571EA0AFBB00701124 /* CommonCryptoDERUtilities.cpp */; };
                57EF5E601D20C83900171E60 /* TextCodecReplacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 57EF5E5F1D20C83900171E60 /* TextCodecReplacement.h */; };
                57EF5E621D20D28700171E60 /* TextCodecReplacement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 57EF5E611D20D28700171E60 /* TextCodecReplacement.cpp */; };
                57FEDD3F1DB6D59200EB96F5 /* CryptoAlgorithmRsaKeyGenParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 57FEDD3E1DB6D59200EB96F5 /* CryptoAlgorithmRsaKeyGenParams.h */; };
                57E657ED1E71665400F941CA /* JSPbkdf2Params.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPbkdf2Params.cpp; sourceTree = "<group>"; };
                57E657EE1E71665400F941CA /* JSPbkdf2Params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPbkdf2Params.h; sourceTree = "<group>"; };
                57E664FB1E73703300765536 /* CommonCryptoDERUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonCryptoDERUtilities.h; sourceTree = "<group>"; };
+               57EEAA441E9ED2DD00701124 /* CryptoAlgorithmECDSA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoAlgorithmECDSA.cpp; sourceTree = "<group>"; };
+               57EEAA451E9ED2DD00701124 /* CryptoAlgorithmECDSA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoAlgorithmECDSA.h; sourceTree = "<group>"; };
+               57EEAA481E9F2D3200701124 /* CryptoAlgorithmECDSAMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CryptoAlgorithmECDSAMac.cpp; sourceTree = "<group>"; };
+               57EEAA4D1E9FFBFC00701124 /* CryptoAlgorithmEcdsaParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoAlgorithmEcdsaParams.h; sourceTree = "<group>"; };
+               57EEAA4E1E9FFBFC00701124 /* EcdsaParams.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EcdsaParams.idl; sourceTree = "<group>"; };
+               57EEAA521EA001B100701124 /* JSEcdsaParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSEcdsaParams.cpp; sourceTree = "<group>"; };
+               57EEAA531EA001B100701124 /* JSEcdsaParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSEcdsaParams.h; sourceTree = "<group>"; };
+               57EEAA571EA0AFBB00701124 /* CommonCryptoDERUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommonCryptoDERUtilities.cpp; sourceTree = "<group>"; };
                57EF5E5F1D20C83900171E60 /* TextCodecReplacement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCodecReplacement.h; sourceTree = "<group>"; };
                57EF5E611D20D28700171E60 /* TextCodecReplacement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextCodecReplacement.cpp; sourceTree = "<group>"; };
                57F827391DB72C22009D2BF4 /* RsaHashedKeyGenParams.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = RsaHashedKeyGenParams.idl; sourceTree = "<group>"; };
                E172AF71180F343400FBADB9 /* mac */ = {
                        isa = PBXGroup;
                        children = (
+                               57EEAA571EA0AFBB00701124 /* CommonCryptoDERUtilities.cpp */,
                                57E664FB1E73703300765536 /* CommonCryptoDERUtilities.h */,
                                E125F843182425C900D84CD9 /* CryptoAlgorithmAES_CBCMac.cpp */,
                                570440571E53851600356601 /* CryptoAlgorithmAES_CFBMac.cpp */,
                                57B5F80D1E5D2F2D00F34F90 /* CryptoAlgorithmAES_GCMMac.cpp */,
                                E1FE137C184D270200892F13 /* CryptoAlgorithmAES_KWMac.cpp */,
                                576814341E6FE3E800E77754 /* CryptoAlgorithmECDHMac.cpp */,
+                               57EEAA481E9F2D3200701124 /* CryptoAlgorithmECDSAMac.cpp */,
                                57957CAA1E97247B008072AB /* CryptoAlgorithmHKDFMac.cpp */,
                                E125F8371822F1EB00D84CD9 /* CryptoAlgorithmHMACMac.cpp */,
                                57E657E81E714D1A00F941CA /* CryptoAlgorithmPBKDF2Mac.cpp */,
                                E1FE1379184D21BB00892F13 /* CryptoAlgorithmAES_KW.h */,
                                5750A9841E6A216800705C4A /* CryptoAlgorithmECDH.cpp */,
                                5750A9851E6A216800705C4A /* CryptoAlgorithmECDH.h */,
+                               57EEAA441E9ED2DD00701124 /* CryptoAlgorithmECDSA.cpp */,
+                               57EEAA451E9ED2DD00701124 /* CryptoAlgorithmECDSA.h */,
                                57957CA61E971DE0008072AB /* CryptoAlgorithmHKDF.cpp */,
                                57957CA71E971DE0008072AB /* CryptoAlgorithmHKDF.h */,
                                E125F82F1822F11B00D84CD9 /* CryptoAlgorithmHMAC.cpp */,
                                E19AC3F61824E5D100349426 /* CryptoAlgorithmAesKeyGenParamsDeprecated.h */,
                                577483111DADC55D00716EF9 /* CryptoAlgorithmAesKeyParams.h */,
                                576814291E6F99C100E77754 /* CryptoAlgorithmEcdhKeyDeriveParams.h */,
+                               57EEAA4D1E9FFBFC00701124 /* CryptoAlgorithmEcdsaParams.h */,
                                5750A97D1E6A13EF00705C4A /* CryptoAlgorithmEcKeyParams.h */,
                                57957CAF1E972645008072AB /* CryptoAlgorithmHkdfParams.h */,
                                577483181DB4491F00716EF9 /* CryptoAlgorithmHmacKeyParams.h */,
                                E1FE1376184D1E3300892F13 /* CryptoAlgorithmRsaOaepParamsDeprecated.h */,
                                E1BD331B182D8EE900C05D9F /* CryptoAlgorithmRsaSsaParamsDeprecated.h */,
                                576814281E6F98AD00E77754 /* EcdhKeyDeriveParams.idl */,
+                               57EEAA4E1E9FFBFC00701124 /* EcdsaParams.idl */,
                                5750A97C1E6A12B400705C4A /* EcKeyParams.idl */,
                                57957CB01E972645008072AB /* HkdfParams.idl */,
                                577483171DB1FE8900716EF9 /* HmacKeyParams.idl */,
                                57D0018C1DD5413200ED19D9 /* JSCryptoKeyUsage.h */,
                                5768143D1E709C3600E77754 /* JSEcdhKeyDeriveParams.cpp */,
                                5768143E1E709C3600E77754 /* JSEcdhKeyDeriveParams.h */,
+                               57EEAA521EA001B100701124 /* JSEcdsaParams.cpp */,
+                               57EEAA531EA001B100701124 /* JSEcdsaParams.h */,
                                5750A97F1E6A150800705C4A /* JSEcKeyParams.cpp */,
                                5750A9801E6A150800705C4A /* JSEcKeyParams.h */,
                                57957CB41E972C78008072AB /* JSHkdfParams.cpp */,
                                A80E7E9F0A1A83E3007FB8C5 /* JSHTMLButtonElement.h in Headers */,
                                938E666209F09B87008A48EC /* JSHTMLCanvasElement.h in Headers */,
                                BCCBAD410C18C14200CE890F /* JSHTMLCollection.h in Headers */,
+                               57EEAA551EA001B100701124 /* JSEcdsaParams.h in Headers */,
                                8367587F1C56E99B008A1087 /* JSHTMLDataElement.h in Headers */,
                                F5C041E70FFCA96D00839D4A /* JSHTMLDataListElement.h in Headers */,
                                D359D8BF129CA55C0006E5D2 /* JSHTMLDetailsElement.h in Headers */,
                                D3F3D3641A69B1900059FC2B /* JSWebGL2RenderingContext.h in Headers */,
                                A7D20F63107F406900A80392 /* JSWebGLActiveInfo.h in Headers */,
                                49C7B9941042D2D30009D447 /* JSWebGLBuffer.h in Headers */,
+                               57EEAA471E9ED2DD00701124 /* CryptoAlgorithmECDSA.h in Headers */,
                                7EA30F6A16DFFE7500257D0B /* JSWebGLCompressedTextureATC.h in Headers */,
                                7EA30F6A17EFFE7500257D0B /* JSWebGLCompressedTexturePVRTC.h in Headers */,
                                6E3FAD3914733F4000E42306 /* JSWebGLCompressedTextureS3TC.h in Headers */,
                                7AA3A69C194A64E7001CBD24 /* TileGrid.h in Headers */,
                                498770F31242C535002226BA /* TilingData.h in Headers */,
                                F55B3DDC1251F12D003EF269 /* TimeInputType.h in Headers */,
+                               57EEAA501E9FFBFC00701124 /* CryptoAlgorithmEcdsaParams.h in Headers */,
                                7553CFE8108F473F00EA281E /* TimelineRecordFactory.h in Headers */,
                                9305B24D098F1B6B00C28855 /* Timer.h in Headers */,
                                E44613B00CD6331000FADA75 /* TimeRanges.h in Headers */,
                                316BDBBE1E73881300DE0D5A /* GPUCommandQueueMetal.mm in Sources */,
                                389117431E8F4BF00061033E /* GPUComputeCommandEncoder.cpp in Sources */,
                                389117411E8F4BF00061033E /* GPUComputeCommandEncoderMetal.mm in Sources */,
+                               57EEAA461E9ED2DD00701124 /* CryptoAlgorithmECDSA.cpp in Sources */,
                                389117441E8F4BF00061033E /* GPUComputePipelineState.cpp in Sources */,
                                389117421E8F4BF00061033E /* GPUComputePipelineStateMetal.mm in Sources */,
                                316BDBF61E762AD100DE0D5A /* GPUDepthStencilDescriptor.cpp in Sources */,
                                5185FC961BB4C4E80012898F /* IDBKeyData.cpp in Sources */,
                                5185FC981BB4C4E80012898F /* IDBKeyPath.cpp in Sources */,
                                5185FC9A1BB4C4E80012898F /* IDBKeyRange.cpp in Sources */,
+                               57EEAA581EA0AFBB00701124 /* CommonCryptoDERUtilities.cpp in Sources */,
                                5185FC9D1BB4C4E80012898F /* IDBKeyRangeData.cpp in Sources */,
                                5185FC9F1BB4C4E80012898F /* IDBObjectStore.cpp in Sources */,
                                5160712E1BD8307800DBC4F2 /* IDBObjectStoreInfo.cpp in Sources */,
                                BC926F800C0552470082776B /* JSHTMLFrameSetElement.cpp in Sources */,
                                BCD41ABB0C060DE800C0E446 /* JSHTMLFrameSetElementCustom.cpp in Sources */,
                                A80E7B140A19D606007FB8C5 /* JSHTMLHeadElement.cpp in Sources */,
+                               57EEAA541EA001B100701124 /* JSEcdsaParams.cpp in Sources */,
                                1AE2AA2E0A1CDAB400B42B25 /* JSHTMLHeadingElement.cpp in Sources */,
                                1AE2AA300A1CDAB400B42B25 /* JSHTMLHRElement.cpp in Sources */,
                                1A85B18F0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp in Sources */,
                                832B843619D8E57400B26055 /* SVGAnimateElementBase.cpp in Sources */,
                                B22279920D00BF220071B782 /* SVGAnimateMotionElement.cpp in Sources */,
                                B22279940D00BF220071B782 /* SVGAnimateTransformElement.cpp in Sources */,
+                               57EEAA4A1E9F2D3200701124 /* CryptoAlgorithmECDSAMac.cpp in Sources */,
                                B22279970D00BF220071B782 /* SVGAnimationElement.cpp in Sources */,
                                08FB17C113BC7E9100040086 /* SVGAttributeToPropertyMap.cpp in Sources */,
                                B222799B0D00BF220071B782 /* SVGCircleElement.cpp in Sources */,
index f288841..33d470a 100644 (file)
@@ -41,6 +41,7 @@
 #include "JSDOMWrapper.h"
 #include "JSEcKeyParams.h"
 #include "JSEcdhKeyDeriveParams.h"
+#include "JSEcdsaParams.h"
 #include "JSHkdfParams.h"
 #include "JSHmacKeyParams.h"
 #include "JSJsonWebKey.h"
@@ -150,6 +151,15 @@ static std::unique_ptr<CryptoAlgorithmParameters> normalizeCryptoAlgorithmParame
             case CryptoAlgorithmIdentifier::HMAC:
                 result = std::make_unique<CryptoAlgorithmParameters>(params);
                 break;
+            case CryptoAlgorithmIdentifier::ECDSA: {
+                auto params = convertDictionary<CryptoAlgorithmEcdsaParams>(state, value);
+                RETURN_IF_EXCEPTION(scope, nullptr);
+                params.hashIdentifier = toHashIdentifier(state, params.hash);
+                RETURN_IF_EXCEPTION(scope, nullptr);
+                result = std::make_unique<CryptoAlgorithmEcdsaParams>(params);
+                break;
+
+            }
             default:
                 throwNotSupportedError(state, scope);
                 return nullptr;
@@ -644,7 +654,7 @@ static void jsSubtleCryptoFunctionSignPromise(ExecState& state, Ref<DeferredProm
 
     JSSubtleCrypto* subtle = jsDynamicDowncast<JSSubtleCrypto*>(vm, state.thisValue());
     ASSERT(subtle);
-    algorithm->sign(key.releaseNonNull(), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), *scriptExecutionContextFromExecState(&state), subtle->wrapped().workQueue());
+    algorithm->sign(WTFMove(params), key.releaseNonNull(), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), *scriptExecutionContextFromExecState(&state), subtle->wrapped().workQueue());
 }
 
 static void jsSubtleCryptoFunctionVerifyPromise(ExecState& state, Ref<DeferredPromise>&& promise)
@@ -694,7 +704,7 @@ static void jsSubtleCryptoFunctionVerifyPromise(ExecState& state, Ref<DeferredPr
 
     auto subtle = jsDynamicDowncast<JSSubtleCrypto*>(vm, state.thisValue());
     ASSERT(subtle);
-    algorithm->verify(key.releaseNonNull(), WTFMove(signature), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), *scriptExecutionContextFromExecState(&state), subtle->wrapped().workQueue());
+    algorithm->verify(WTFMove(params), key.releaseNonNull(), WTFMove(signature), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), *scriptExecutionContextFromExecState(&state), subtle->wrapped().workQueue());
 }
 
 static void jsSubtleCryptoFunctionDigestPromise(ExecState& state, Ref<DeferredPromise>&& promise)
index b074c2c..8ad4d5c 100644 (file)
@@ -109,6 +109,10 @@ extern "C" int CCECGetKeySize(CCECCryptorRef key);
 extern "C" CCCryptorStatus CCECCryptorCreateFromData(size_t keySize, uint8_t *qX, size_t qXLength, uint8_t *qY, size_t qYLength, CCECCryptorRef *ref);
 extern "C" CCCryptorStatus CCECCryptorGetKeyComponents(CCECCryptorRef ecKey, size_t *keySize, uint8_t *qX, size_t *qXLength, uint8_t *qY, size_t *qYLength, uint8_t *d, size_t *dLength);
 extern "C" CCCryptorStatus CCECCryptorComputeSharedSecret(CCECCryptorRef privateKey, CCECCryptorRef publicKey, void *out, size_t *outLen);
+extern "C" CCCryptorStatus CCECCryptorSignHash(CCECCryptorRef privateKey, const void *hashToSign, size_t hashSignLen, void *signedData, size_t *signedDataLen);
+extern "C" CCCryptorStatus CCECCryptorVerifyHash(CCECCryptorRef publicKey, const void *hash, size_t hashLen, const void *signedData, size_t signedDataLen, uint32_t *valid);
+
+
 
 #ifndef CommonCrypto_CommonNistKeyDerivation_h
 enum {
index 34885cf..870b25d 100644 (file)
@@ -42,12 +42,12 @@ void CryptoAlgorithm::decrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<
     exceptionCallback(NOT_SUPPORTED_ERR);
 }
 
-void CryptoAlgorithm::sign(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&, WorkQueue&)
+void CryptoAlgorithm::sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&, WorkQueue&)
 {
     exceptionCallback(NOT_SUPPORTED_ERR);
 }
 
-void CryptoAlgorithm::verify(Ref<CryptoKey>&&, Vector<uint8_t>&&, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&, WorkQueue&)
+void CryptoAlgorithm::verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&, WorkQueue&)
 {
     exceptionCallback(NOT_SUPPORTED_ERR);
 }
index ea0bb59..41732ed 100644 (file)
@@ -69,8 +69,8 @@ public:
 
     virtual void encrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
     virtual void decrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
-    virtual void sign(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
-    virtual void verify(Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+    virtual void sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+    virtual void verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
     virtual void digest(Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
     virtual void generateKey(const CryptoAlgorithmParameters&, bool extractable, CryptoKeyUsageBitmap, KeyOrKeyPairCallback&&, ExceptionCallback&&, ScriptExecutionContext&);
     virtual void deriveBits(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, size_t length, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
index ca6f2c8..503ed4a 100644 (file)
@@ -43,6 +43,7 @@ public:
         AesKeyParams,
         EcKeyParams,
         EcdhKeyDeriveParams,
+        EcdsaParams,
         HkdfParams,
         HmacKeyParams,
         Pbkdf2Params,
diff --git a/Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.cpp b/Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.cpp
new file mode 100644 (file)
index 0000000..d896a51
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CryptoAlgorithmECDSA.h"
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+#include "CryptoAlgorithmEcKeyParams.h"
+#include "CryptoKeyEC.h"
+#include "ExceptionCode.h"
+
+namespace WebCore {
+
+static const char* const ALG256 = "ES256";
+static const char* const ALG384 = "ES384";
+static const char* const P256 = "P-256";
+static const char* const P384 = "P-384";
+
+Ref<CryptoAlgorithm> CryptoAlgorithmECDSA::create()
+{
+    return adoptRef(*new CryptoAlgorithmECDSA);
+}
+
+CryptoAlgorithmIdentifier CryptoAlgorithmECDSA::identifier() const
+{
+    return s_identifier;
+}
+
+void CryptoAlgorithmECDSA::sign(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+{
+    if (key->type() != CryptoKeyType::Private) {
+        exceptionCallback(INVALID_ACCESS_ERR);
+        return;
+    }
+    platformSign(WTFMove(parameters), WTFMove(key), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+}
+
+void CryptoAlgorithmECDSA::verify(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+{
+    if (key->type() != CryptoKeyType::Public) {
+        exceptionCallback(INVALID_ACCESS_ERR);
+        return;
+    }
+    platformVerify(WTFMove(parameters), WTFMove(key), WTFMove(signature), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+}
+
+void CryptoAlgorithmECDSA::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyOrKeyPairCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&)
+{
+    const auto& ecParameters = downcast<CryptoAlgorithmEcKeyParams>(parameters);
+
+    if (usages & (CryptoKeyUsageEncrypt | CryptoKeyUsageDecrypt | CryptoKeyUsageDeriveKey | CryptoKeyUsageDeriveBits | CryptoKeyUsageWrapKey | CryptoKeyUsageUnwrapKey)) {
+        exceptionCallback(SYNTAX_ERR);
+        return;
+    }
+
+    auto result = CryptoKeyEC::generatePair(CryptoAlgorithmIdentifier::ECDSA, ecParameters.namedCurve, extractable, usages);
+    if (result.hasException()) {
+        exceptionCallback(result.releaseException().code());
+        return;
+    }
+
+    auto pair = result.releaseReturnValue();
+    pair.publicKey->setUsagesBitmap(pair.publicKey->usagesBitmap() & CryptoKeyUsageVerify);
+    pair.privateKey->setUsagesBitmap(pair.privateKey->usagesBitmap() & CryptoKeyUsageSign);
+    callback(WTFMove(pair));
+}
+
+void CryptoAlgorithmECDSA::importKey(SubtleCrypto::KeyFormat format, KeyData&& data, const std::unique_ptr<CryptoAlgorithmParameters>&& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyCallback&& callback, ExceptionCallback&& exceptionCallback)
+{
+    ASSERT(parameters);
+    const auto& ecParameters = downcast<CryptoAlgorithmEcKeyParams>(*parameters);
+
+    RefPtr<CryptoKeyEC> result;
+    switch (format) {
+    case SubtleCrypto::KeyFormat::Jwk: {
+        JsonWebKey key = WTFMove(WTF::get<JsonWebKey>(data));
+
+        if (usages && ((!key.d.isNull() && (usages ^ CryptoKeyUsageSign)) || (key.d.isNull() && (usages ^ CryptoKeyUsageVerify)))) {
+            exceptionCallback(SYNTAX_ERR);
+            return;
+        }
+        if (usages && !key.use.isNull() && key.use != "sig") {
+            exceptionCallback(DataError);
+            return;
+        }
+
+        bool isMatched = false;
+        if (key.crv == P256)
+            isMatched = key.alg.isNull() || key.alg == ALG256;
+        if (key.crv == P384)
+            isMatched = key.alg.isNull() || key.alg == ALG384;
+        if (!isMatched) {
+            exceptionCallback(DataError);
+            return;
+        }
+
+        result = CryptoKeyEC::importJwk(ecParameters.identifier, ecParameters.namedCurve, WTFMove(key), extractable, usages);
+        break;
+    }
+    case SubtleCrypto::KeyFormat::Raw:
+        if (usages && (usages ^ CryptoKeyUsageVerify)) {
+            exceptionCallback(SYNTAX_ERR);
+            return;
+        }
+        result = CryptoKeyEC::importRaw(ecParameters.identifier, ecParameters.namedCurve, WTFMove(WTF::get<Vector<uint8_t>>(data)), extractable, usages);
+        break;
+    case SubtleCrypto::KeyFormat::Spki:
+        if (usages && (usages ^ CryptoKeyUsageVerify)) {
+            exceptionCallback(SYNTAX_ERR);
+            return;
+        }
+        result = CryptoKeyEC::importSpki(ecParameters.identifier, ecParameters.namedCurve, WTFMove(WTF::get<Vector<uint8_t>>(data)), extractable, usages);
+        break;
+    case SubtleCrypto::KeyFormat::Pkcs8:
+        if (usages && (usages ^ CryptoKeyUsageSign)) {
+            exceptionCallback(SYNTAX_ERR);
+            return;
+        }
+        result = CryptoKeyEC::importPkcs8(ecParameters.identifier, ecParameters.namedCurve, WTFMove(WTF::get<Vector<uint8_t>>(data)), extractable, usages);
+        break;
+    }
+    if (!result) {
+        exceptionCallback(DataError);
+        return;
+    }
+
+    callback(*result);
+}
+
+void CryptoAlgorithmECDSA::exportKey(SubtleCrypto::KeyFormat format, Ref<CryptoKey>&& key, KeyDataCallback&& callback, ExceptionCallback&& exceptionCallback)
+{
+    const auto& ecKey = downcast<CryptoKeyEC>(key.get());
+
+    if (!ecKey.keySizeInBits()) {
+        exceptionCallback(OperationError);
+        return;
+    }
+
+    KeyData result;
+    switch (format) {
+    case SubtleCrypto::KeyFormat::Jwk:
+        result = ecKey.exportJwk();
+        break;
+    case SubtleCrypto::KeyFormat::Raw: {
+        auto raw = ecKey.exportRaw();
+        if (raw.hasException()) {
+            exceptionCallback(raw.releaseException().code());
+            return;
+        }
+        result = raw.releaseReturnValue();
+        break;
+    }
+    case SubtleCrypto::KeyFormat::Spki: {
+        auto spki = ecKey.exportSpki();
+        if (spki.hasException()) {
+            exceptionCallback(spki.releaseException().code());
+            return;
+        }
+        result = spki.releaseReturnValue();
+        break;
+    }
+    case SubtleCrypto::KeyFormat::Pkcs8: {
+        auto pkcs8 = ecKey.exportPkcs8();
+        if (pkcs8.hasException()) {
+            exceptionCallback(pkcs8.releaseException().code());
+            return;
+        }
+        result = pkcs8.releaseReturnValue();
+        break;
+    }
+    }
+
+    callback(format, WTFMove(result));
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SUBTLE_CRYPTO)
diff --git a/Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.h b/Source/WebCore/crypto/algorithms/CryptoAlgorithmECDSA.h
new file mode 100644 (file)
index 0000000..0f88e04
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "CryptoAlgorithm.h"
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+namespace WebCore {
+
+class CryptoAlgorithmECDSA final : public CryptoAlgorithm {
+public:
+    static constexpr const char* s_name = "ECDSA";
+    static constexpr CryptoAlgorithmIdentifier s_identifier = CryptoAlgorithmIdentifier::ECDSA;
+    static Ref<CryptoAlgorithm> create();
+
+private:
+    CryptoAlgorithmECDSA() = default;
+    CryptoAlgorithmIdentifier identifier() const final;
+
+    void sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void generateKey(const CryptoAlgorithmParameters&, bool extractable, CryptoKeyUsageBitmap, KeyOrKeyPairCallback&&, ExceptionCallback&&, ScriptExecutionContext&) final;
+    void importKey(SubtleCrypto::KeyFormat, KeyData&&, const std::unique_ptr<CryptoAlgorithmParameters>&&, bool extractable, CryptoKeyUsageBitmap, KeyCallback&&, ExceptionCallback&&) final;
+    void exportKey(SubtleCrypto::KeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
+
+    void platformSign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+    void platformVerify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(SUBTLE_CRYPTO)
index 56e5a9c..46f3329 100644 (file)
@@ -70,12 +70,12 @@ bool CryptoAlgorithmHMAC::keyAlgorithmMatches(const CryptoAlgorithmHmacParamsDep
     return true;
 }
 
-void CryptoAlgorithmHMAC::sign(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+void CryptoAlgorithmHMAC::sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
 {
     platformSign(WTFMove(key), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
 }
 
-void CryptoAlgorithmHMAC::verify(Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+void CryptoAlgorithmHMAC::verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
 {
     platformVerify(WTFMove(key), WTFMove(signature), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
 }
index 454b11a..4f702ad 100644 (file)
@@ -44,8 +44,8 @@ private:
     CryptoAlgorithmHMAC() = default;
     CryptoAlgorithmIdentifier identifier() const final;
 
-    void sign(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
-    void verify(Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
     void generateKey(const CryptoAlgorithmParameters&, bool extractable, CryptoKeyUsageBitmap, KeyOrKeyPairCallback&&, ExceptionCallback&&, ScriptExecutionContext&) final;
     void importKey(SubtleCrypto::KeyFormat, KeyData&&, const std::unique_ptr<CryptoAlgorithmParameters>&&, bool extractable, CryptoKeyUsageBitmap, KeyCallback&&, ExceptionCallback&&) final;
     void exportKey(SubtleCrypto::KeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
index e3e9ed0..2767e9c 100644 (file)
@@ -69,7 +69,7 @@ bool CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches(const CryptoAlgorithm
     return true;
 }
 
-void CryptoAlgorithmRSASSA_PKCS1_v1_5::sign(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+void CryptoAlgorithmRSASSA_PKCS1_v1_5::sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
 {
     if (key->type() != CryptoKeyType::Private) {
         exceptionCallback(INVALID_ACCESS_ERR);
@@ -78,7 +78,7 @@ void CryptoAlgorithmRSASSA_PKCS1_v1_5::sign(Ref<CryptoKey>&& key, Vector<uint8_t
     platformSign(WTFMove(key), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
 }
 
-void CryptoAlgorithmRSASSA_PKCS1_v1_5::verify(Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+void CryptoAlgorithmRSASSA_PKCS1_v1_5::verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
 {
     if (key->type() != CryptoKeyType::Public) {
         exceptionCallback(INVALID_ACCESS_ERR);
index 01d8693..e982c40 100644 (file)
@@ -44,8 +44,8 @@ private:
     CryptoAlgorithmRSASSA_PKCS1_v1_5() = default;
     CryptoAlgorithmIdentifier identifier() const final;
 
-    void sign(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
-    void verify(Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void sign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
+    void verify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&& signature, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&) final;
     void generateKey(const CryptoAlgorithmParameters&, bool extractable, CryptoKeyUsageBitmap, KeyOrKeyPairCallback&&, ExceptionCallback&&, ScriptExecutionContext&) final;
     void importKey(SubtleCrypto::KeyFormat, KeyData&&, const std::unique_ptr<CryptoAlgorithmParameters>&&, bool extractable, CryptoKeyUsageBitmap, KeyCallback&&, ExceptionCallback&&) final;
     void exportKey(SubtleCrypto::KeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
diff --git a/Source/WebCore/crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp b/Source/WebCore/crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp
new file mode 100644 (file)
index 0000000..aba95b1
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CryptoAlgorithmECDSA.h"
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+#include "NotImplemented.h"
+
+namespace WebCore {
+
+void CryptoAlgorithmECDSA::platformSign(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&)
+{
+    notImplemented();
+}
+
+void CryptoAlgorithmECDSA::platformVerify(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, Vector<uint8_t>&&, BoolCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&)
+{
+    notImplemented();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SUBTLE_CRYPTO)
diff --git a/Source/WebCore/crypto/mac/CommonCryptoDERUtilities.cpp b/Source/WebCore/crypto/mac/CommonCryptoDERUtilities.cpp
new file mode 100644 (file)
index 0000000..f7c8aac
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CommonCryptoDERUtilities.h"
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+namespace WebCore {
+
+size_t bytesUsedToEncodedLength(uint8_t octet)
+{
+    if (octet < MaxLengthInOneByte)
+        return 1;
+    return octet - MaxLengthInOneByte + 1;
+}
+
+size_t extraBytesNeededForEncodedLength(size_t length)
+{
+    if (!length)
+        return 0;
+    size_t result = 1;
+    while (result < sizeof(length) && length >= (1 << (result * 8)))
+        result += 1;
+    return result;
+}
+
+void addEncodedASN1Length(Vector<uint8_t>& in, size_t length)
+{
+    if (length < MaxLengthInOneByte) {
+        in.append(length);
+        return;
+    }
+
+    size_t extraBytes = extraBytesNeededForEncodedLength(length);
+    in.append(128 + extraBytes); // 128 is used to set the first bit of this byte.
+
+    size_t lastPosition = in.size() + extraBytes - 1;
+    in.grow(in.size() + extraBytes);
+    for (size_t i = 0; i < extraBytes; i++) {
+        in[lastPosition - i] = length & 0xff;
+        length = length >> 8;
+    }
+}
+
+size_t bytesNeededForEncodedLength(size_t length)
+{
+    if (length < MaxLengthInOneByte)
+        return 1;
+    return 1 + extraBytesNeededForEncodedLength(length);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SUBTLE_CRYPTO)
index 8edf0f3..9089d0b 100644 (file)
 
 #pragma once
 
+#include <wtf/Vector.h>
+
 #if ENABLE(SUBTLE_CRYPTO)
 
+// FIXME: <rdar://problem/31618371>
+// The following constants and functions are for customized DER implementations.
+// They are not intended to be used outside Crypto codes, and should be removed
+// once the above bug is fixed.
 namespace WebCore {
 
 // Per X.690 08/2015: https://www.itu.int/rec/T-REC-X.680-X.693/en
 static const unsigned char BitStringMark = 0x03;
+static const unsigned char IntegerMark = 0x02;
 static const unsigned char OctetStringMark = 0x04;
 static const unsigned char SequenceMark = 0x30;
 // Version 0. Per https://tools.ietf.org/html/rfc5208#section-5
@@ -39,47 +46,10 @@ static const unsigned char Version[] = {0x02, 0x01, 0x00};
 static const unsigned char InitialOctet = 0x00;
 static const size_t MaxLengthInOneByte = 128;
 
-static size_t bytesUsedToEncodedLength(uint8_t octet)
-{
-    if (octet < MaxLengthInOneByte)
-        return 1;
-    return octet - MaxLengthInOneByte + 1;
-}
-
-static size_t extraBytesNeededForEncodedLength(size_t length)
-{
-    if (!length)
-        return 0;
-    size_t result = 1;
-    while (result < sizeof(length) && length >= (1 << (result * 8)))
-        result += 1;
-    return result;
-}
-
-static void addEncodedASN1Length(Vector<uint8_t>& in, size_t length)
-{
-    if (length < MaxLengthInOneByte) {
-        in.append(length);
-        return;
-    }
-
-    size_t extraBytes = extraBytesNeededForEncodedLength(length);
-    in.append(128 + extraBytes); // 128 is used to set the first bit of this byte.
-
-    size_t lastPosition = in.size() + extraBytes - 1;
-    in.grow(in.size() + extraBytes);
-    for (size_t i = 0; i < extraBytes; i++) {
-        in[lastPosition - i] = length & 0xff;
-        length = length >> 8;
-    }
-}
-
-static size_t bytesNeededForEncodedLength(size_t length)
-{
-    if (length < MaxLengthInOneByte)
-        return 1;
-    return 1 + extraBytesNeededForEncodedLength(length);
-}
+size_t bytesUsedToEncodedLength(uint8_t);
+size_t extraBytesNeededForEncodedLength(size_t);
+void addEncodedASN1Length(Vector<uint8_t>&, size_t);
+size_t bytesNeededForEncodedLength(size_t);
 
 } // namespace WebCore
 
diff --git a/Source/WebCore/crypto/mac/CryptoAlgorithmECDSAMac.cpp b/Source/WebCore/crypto/mac/CryptoAlgorithmECDSAMac.cpp
new file mode 100644 (file)
index 0000000..b0440bb
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CryptoAlgorithmECDSA.h"
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+#include "CommonCryptoDERUtilities.h"
+#include "CommonCryptoUtilities.h"
+#include "CryptoAlgorithmEcdsaParams.h"
+#include "CryptoKeyEC.h"
+#include "ExceptionCode.h"
+#include "ScriptExecutionContext.h"
+#include <pal/crypto/CryptoDigest.h>
+
+namespace WebCore {
+
+inline std::optional<PAL::CryptoDigest::Algorithm> cryptoDigestAlgorithm(CryptoAlgorithmIdentifier hashFunction)
+{
+    switch (hashFunction) {
+    case CryptoAlgorithmIdentifier::SHA_1:
+        return PAL::CryptoDigest::Algorithm::SHA_1;
+    case CryptoAlgorithmIdentifier::SHA_224:
+        return PAL::CryptoDigest::Algorithm::SHA_224;
+    case CryptoAlgorithmIdentifier::SHA_256:
+        return PAL::CryptoDigest::Algorithm::SHA_256;
+    case CryptoAlgorithmIdentifier::SHA_384:
+        return PAL::CryptoDigest::Algorithm::SHA_384;
+    case CryptoAlgorithmIdentifier::SHA_512:
+        return PAL::CryptoDigest::Algorithm::SHA_512;
+    default:
+        return std::nullopt;
+    }
+}
+
+static ExceptionOr<Vector<uint8_t>> signECDSA(CryptoAlgorithmIdentifier hash, const PlatformECKey key, size_t keyLengthInBytes, const Vector<uint8_t>& data)
+{
+    CCDigestAlgorithm digestAlgorithm;
+    if (!getCommonCryptoDigestAlgorithm(hash, digestAlgorithm))
+        return Exception { OperationError };
+
+    auto cryptoDigestAlgorithm = WebCore::cryptoDigestAlgorithm(hash);
+    if (!cryptoDigestAlgorithm)
+        return Exception { OperationError };
+    auto digest = PAL::CryptoDigest::create(*cryptoDigestAlgorithm);
+    if (!digest)
+        return Exception { OperationError };
+    digest->addBytes(data.data(), data.size());
+    auto digestData = digest->computeHash();
+
+    // The signature produced by CCECCryptorSignHash is in DER format.
+    // tag + length(1) + tag + length(1) + InitialOctet(?) + keyLength in bytes + tag + length(1) + InitialOctet(?) + keyLength in bytes
+    Vector<uint8_t> signature(8 + keyLengthInBytes * 2);
+    size_t signatureSize = signature.size();
+
+    CCCryptorStatus status = CCECCryptorSignHash(key, digestData.data(), digestData.size(), signature.data(), &signatureSize);
+    if (status)
+        return Exception { OperationError };
+
+    // FIXME: <rdar://problem/31618371>
+    // convert the DER binary into r + s
+    Vector<uint8_t> newSignature;
+    newSignature.reserveCapacity(keyLengthInBytes * 2);
+    size_t offset = 4;
+    if (signature[offset] == InitialOctet)
+        offset += 1;
+    ASSERT_WITH_SECURITY_IMPLICATION(signature.size() > offset + keyLengthInBytes);
+    newSignature.append(signature.data() + offset, keyLengthInBytes);
+    offset += keyLengthInBytes + 2;
+    if (signature[offset] == InitialOctet)
+        offset += 1;
+    ASSERT_WITH_SECURITY_IMPLICATION(signature.size() >= offset + keyLengthInBytes);
+    newSignature.append(signature.data() + offset, keyLengthInBytes);
+
+    return WTFMove(newSignature);
+}
+
+static ExceptionOr<bool> verifyECDSA(CryptoAlgorithmIdentifier hash, const PlatformECKey key, size_t keyLengthInBytes, const Vector<uint8_t>& signature, const Vector<uint8_t> data)
+{
+    CCDigestAlgorithm digestAlgorithm;
+    if (!getCommonCryptoDigestAlgorithm(hash, digestAlgorithm))
+        return Exception { OperationError };
+
+    auto cryptoDigestAlgorithm = WebCore::cryptoDigestAlgorithm(hash);
+    if (!cryptoDigestAlgorithm)
+        return Exception { OperationError };
+    auto digest = PAL::CryptoDigest::create(*cryptoDigestAlgorithm);
+    if (!digest)
+        return Exception { OperationError };
+    digest->addBytes(data.data(), data.size());
+    auto digestData = digest->computeHash();
+
+    if (signature.size() != keyLengthInBytes * 2)
+        return false;
+
+    // FIXME: <rdar://problem/31618371>
+    // Convert the signature into DER format.
+    // tag + length(1) + tag + length(1) + InitialOctet + r + tag + length(1) + InitialOctet + s
+    Vector<uint8_t> newSignature;
+    newSignature.reserveCapacity(8 + keyLengthInBytes * 2);
+    newSignature.append(SequenceMark);
+    addEncodedASN1Length(newSignature, 6 + keyLengthInBytes * 2);
+    newSignature.append(IntegerMark);
+    addEncodedASN1Length(newSignature, keyLengthInBytes + 1);
+    newSignature.append(InitialOctet);
+    newSignature.append(signature.data(), keyLengthInBytes);
+    newSignature.append(IntegerMark);
+    addEncodedASN1Length(newSignature, keyLengthInBytes + 1);
+    newSignature.append(InitialOctet);
+    newSignature.append(signature.data() + keyLengthInBytes, keyLengthInBytes);
+
+    uint32_t valid;
+    CCCryptorStatus status = CCECCryptorVerifyHash(key, digestData.data(), digestData.size(), newSignature.data(), newSignature.size(), &valid);
+    if (status)
+        return Exception { OperationError };
+    return valid;
+}
+
+void CryptoAlgorithmECDSA::platformSign(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+{
+    context.ref();
+    workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), data = WTFMove(data), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
+        auto& ecKey = downcast<CryptoKeyEC>(key.get());
+        auto& ecParameters = downcast<CryptoAlgorithmEcdsaParams>(*parameters);
+
+        auto result = signECDSA(ecParameters.hashIdentifier, ecKey.platformKey(), ecKey.keySizeInBits() / 8, data);
+        if (result.hasException()) {
+            // We should only dereference callbacks after being back to the Document/Worker threads.
+            context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
+                exceptionCallback(ec);
+                context.deref();
+            });
+            return;
+        }
+        // We should only dereference callbacks after being back to the Document/Worker threads.
+        context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
+            callback(result);
+            context.deref();
+        });
+    });
+}
+
+void CryptoAlgorithmECDSA::platformVerify(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& signature, Vector<uint8_t>&& data, BoolCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+{
+    context.ref();
+    workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), signature = WTFMove(signature), data = WTFMove(data), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
+        auto& ecKey = downcast<CryptoKeyEC>(key.get());
+        auto& ecParameters = downcast<CryptoAlgorithmEcdsaParams>(*parameters);
+
+        auto result = verifyECDSA(ecParameters.hashIdentifier, ecKey.platformKey(), ecKey.keySizeInBits() / 8, signature, data);
+        if (result.hasException()) {
+            // We should only dereference callbacks after being back to the Document/Worker threads.
+            context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
+                exceptionCallback(ec);
+                context.deref();
+            });
+            return;
+        }
+        // We should only dereference callbacks after being back to the Document/Worker threads.
+        context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
+            callback(result);
+            context.deref();
+        });
+    });
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(SUBTLE_CRYPTO)
index 49c0061..918e480 100644 (file)
@@ -34,6 +34,7 @@
 #include "CryptoAlgorithmAES_GCM.h"
 #include "CryptoAlgorithmAES_KW.h"
 #include "CryptoAlgorithmECDH.h"
+#include "CryptoAlgorithmECDSA.h"
 #include "CryptoAlgorithmHKDF.h"
 #include "CryptoAlgorithmHMAC.h"
 #include "CryptoAlgorithmPBKDF2.h"
@@ -56,6 +57,7 @@ void CryptoAlgorithmRegistry::platformRegisterAlgorithms()
     registerAlgorithm<CryptoAlgorithmAES_GCM>();
     registerAlgorithm<CryptoAlgorithmAES_KW>();
     registerAlgorithm<CryptoAlgorithmECDH>();
+    registerAlgorithm<CryptoAlgorithmECDSA>();
     registerAlgorithm<CryptoAlgorithmHKDF>();
     registerAlgorithm<CryptoAlgorithmHMAC>();
     registerAlgorithm<CryptoAlgorithmPBKDF2>();
diff --git a/Source/WebCore/crypto/parameters/CryptoAlgorithmEcdsaParams.h b/Source/WebCore/crypto/parameters/CryptoAlgorithmEcdsaParams.h
new file mode 100644 (file)
index 0000000..bbb3ee8
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "CryptoAlgorithmParameters.h"
+#include <runtime/JSCJSValue.h>
+
+#if ENABLE(SUBTLE_CRYPTO)
+
+namespace WebCore {
+
+class CryptoAlgorithmEcdsaParams final : public CryptoAlgorithmParameters {
+public:
+    // FIXME: Consider merging hash and hashIdentifier.
+    JSC::JSValue hash;
+    CryptoAlgorithmIdentifier hashIdentifier;
+
+    Class parametersClass() const final { return Class::EcdsaParams; }
+};
+
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CRYPTO_ALGORITHM_PARAMETERS(EcdsaParams)
+
+#endif // ENABLE(SUBTLE_CRYPTO)
diff --git a/Source/WebCore/crypto/parameters/EcdsaParams.idl b/Source/WebCore/crypto/parameters/EcdsaParams.idl
new file mode 100644 (file)
index 0000000..c97d55b
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    Conditional=SUBTLE_CRYPTO,
+    ImplementedAs=CryptoAlgorithmEcdsaParams
+] dictionary EcdsaParams : CryptoAlgorithmParameters {
+    // The hash algorithm to use
+    required any hash;
+};