haikuwebkit/LayoutTests/crypto/subtle/ec-import-key-malformed-par...

173 lines
19 KiB
HTML
Raw Permalink Normal View History

[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
<!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>
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
<script type="text/javascript">
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
description("Test importing a EC key with malformed parameters");
var extractable = true;
var rawP256Key = hexStringToUint8Array("04dc08d9bf603333eab1ad29cef41a6203ab6ecce03c5a4a9bf5771a3fb9f971d89a09664bfb87c61199b3453220eadec714c49ad1e24bf5d7ec5bddeca6420893");
var rawP384Key = hexStringToUint8Array("048ba3e0a0ac5c9bb25476323570fa11dff30745a13da751a5eb1dacb5e9b439df0f77979077ee9ac97c02ca1e3cd72677cbbc256a69b99fd83a519ca9a9a26c62d45b51659274b1cea3c9858543abf5c64bfcfcd1948b7075c0409da4494f9060");
var x = "1FSVWieTvikFkG1NOyhkUCaMbdQhxwH6aCu4Ez-sRtA"; // P-256
var y = "9jmNTLqM4cjBhdAnHcNI9YQV3O8LFmo-EdZWk8ntAaI"; // P-256
var d = "ppxBSov3N8_AUcisAuvmLV4yE8e_L_BLE8bZb9Z1Xjg"; // P-256
var x384 = "1bHwFrsaPRjYq-zFOyLXK8Ugv3EqbVF075ct7ouTl_pwyhjeBu03JHjKTsyVbNWK";
var y384 = "OPQLbvRDpocNk4FRQLUVRBbqiauWcnUn7cAC2uSOH6GpSLoTo6B-4LtHq0ydd-iu";
[WebCrypto] Support SPKI/PKCS8 for Elliptic Curve https://bugs.webkit.org/show_bug.cgi?id=169318 <rdar://problem/31081956> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch adds SPKI/PKCS8 support for Elliptic Curve cryptos. We can now import/export SPKI/PKCS8 Elliptic Curve keys after this change. Few things to note: 1) This patch implements a loose DER encoder/decoder for hacking the underlying CommonCrypto library. 2) It only permits id-ecPublicKey as the AlgorithmIdentifier following OpenSSL/Chrome(BoringSSL). 3) It follows OpenSSL/Chrome(BoringSSL) to replace ECParameters in ECPrivateKey with custom tags. Hence, we should fully comply with OpenSSL/Chrome(BoringSSL). Tests: crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html crypto/subtle/ec-import-jwk-key-export-spki-key.html crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html crypto/subtle/ec-import-raw-key-export-spki-key.html crypto/subtle/ec-import-spki-key-export-jwk-key.html crypto/subtle/ec-import-spki-key-export-raw-key.html crypto/subtle/ec-import-spki-key-export-spki-key-p256.html crypto/subtle/ec-import-spki-key-export-spki-key-p384.html crypto/subtle/ecdh-generate-export-key-spki-p256.html crypto/subtle/ecdh-generate-export-key-spki-p384.html crypto/subtle/ecdh-generate-export-pkcs8-p256.html crypto/subtle/ecdh-generate-export-pkcs8-p384.html crypto/subtle/ecdh-import-pkcs8-key-p256.html crypto/subtle/ecdh-import-pkcs8-key-p384.html crypto/subtle/ecdh-import-spki-key-p256.html crypto/subtle/ecdh-import-spki-key-p384.html crypto/workers/subtle/ec-generate-export-pkcs8-key.html crypto/workers/subtle/ec-generate-export-spki-key.html crypto/workers/subtle/ec-import-pkcs8-key.html crypto/workers/subtle/ec-import-spki-key.html * WebCore.xcodeproj/project.pbxproj: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. * crypto/keys/CryptoKeyEC.cpp: (WebCore::CryptoKeyEC::importSpki): (WebCore::CryptoKeyEC::importPkcs8): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::exportSpki): (WebCore::CryptoKeyEC::exportPkcs8): * crypto/keys/CryptoKeyEC.h: * crypto/mac/CommonCryptoDERUtilities.h: Added. (WebCore::bytesUsedToEncodedLength): (WebCore::extraBytesNeededForEncodedLength): (WebCore::addEncodedASN1Length): (WebCore::bytesNeededForEncodedLength): * crypto/mac/CryptoKeyECMac.cpp: (WebCore::compareBytes): (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::getOID): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. Enlarge the robust of exportRaw. * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::exportSpki): (WebCore::CryptoKeyRSA::exportPkcs8): Enhance the implementation. (WebCore::bytesUsedToEncodedLength): Deleted. (WebCore::bytesNeededForEncodedLength): Deleted. (WebCore::addEncodedASN1Length): Deleted. Moved to CommonCryptoDERUtilities.h. LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: * crypto/subtle/ec-export-key-malformed-parameters.html: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: * crypto/subtle/ec-import-jwk-key-export-pkcs8-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: * crypto/subtle/ec-import-key-malformed-parameters.html: * crypto/subtle/ec-import-pkcs8-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html: Added. * crypto/subtle/ec-import-raw-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-spki-key.html: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-spki-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-raw-key.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384.html: Added. * crypto/subtle/ecdh-import-spki-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p256.html: Added. * crypto/subtle/ecdh-import-spki-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p384.html: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key.html: Added. * crypto/workers/subtle/ec-generate-export-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-spki-key.html: Added. * crypto/workers/subtle/ec-import-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-import-pkcs8-key.html: Added. * crypto/workers/subtle/ec-import-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-import-spki-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-spki-key.js: Added. * crypto/workers/subtle/resources/ec-import-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-import-spki-key.js: Added. Canonical link: https://commits.webkit.org/186739@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 22:32:20 +00:00
var spkiP256Key = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d03010703420004c3ee3a2c3380072b9b2a59fed2cada65121806e22c4f4f8a25e740fc3e54d75d86c200298e6dfc1611d185eedbdb3c2661b0eb0441f7fd57c90d08112e9ae71c");
var spkiP384Key = hexStringToUint8Array("3076301006072a8648ce3d020106052b8104002203620004478f6119747475f94b742654be32ab6ebbdc371afa34fbee6d12c32fe2d586231262b17d13a1f271f19c8008c034d8716b7df0ce1d987990c5b175ecae1aa40f2fb89e4778528e1234e56d69638db135d103fa68448fee2b4f58ecc86d7f4b7a");
var truncatedSpkiP256Key1 = hexStringToUint8Array("30");
var truncatedSpkiP256Key2 = hexStringToUint8Array("305930");
var truncatedSpkiP256Key3 = hexStringToUint8Array("305930130607");
var truncatedSpkiP256Key4 = hexStringToUint8Array("3059301306072b8648ce3d0201");
var truncatedSpkiP256Key5 = hexStringToUint8Array("3059301306072a8648ce3d02010608");
var truncatedSpkiP256Key6 = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d030108");
var truncatedSpkiP256Key7 = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d030107034200");
var truncatedSpkiP256Key8 = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d03010703420004c3ee3a2c3380072b9b2a59fed2cada65121806e22c4f4f8a25e740fc3e54d75d86c200298e6dfc1611d185eedbdb3c2661b0eb0441f7fd57c90d08112e9ae7");
var truncatedSpkiP384Key1 = hexStringToUint8Array("3076301006072a8648ce3d02010605");
var truncatedSpkiP384Key2 = hexStringToUint8Array("3076301006072a8648ce3d020106052b81040022");
var truncatedSpkiP384Key3 = hexStringToUint8Array("3076301006072a8648ce3d020106052b8104002203620004478f6119747475f94b742654be32ab6ebbdc371afa34fbee6d12c32fe2d586231262b17d13a1f271f19c8008c034d8716b7df0ce1d987990c5b175ecae1aa40f2fb89e4778528e1234e56d69638db135d103fa68448fee2b4f58ecc86d7f4b");
var corruptedSpkiP256Key = hexStringToUint8Array("3059301306072a8648ce3d020106082a8648ce3d03010703420000c3ee3a2c3380072b9b2a59fed2cada65121806e22c4f4f8a25e740fc3e54d75d86c200298e6dfc1611d185eedbdb3c2661b0eb0441f7fd57c90d08112e9ae71c");
var pkcs8P256Key = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104200a21f3f048b893b0f2b5a8459bd6d2bc112614aa86437f8fa2496a0e27f5b0a8a14403420004d726bd565878f24ee3616890d3668503334b84da3434b2774a44d6e4b9c536dd60e9181e1d1469ba3e6aba8987225f6e797d01a0dc400a4a298c902bae66abe2");
var pkcs8P384Key = hexStringToUint8Array("3081b6020100301006072a8648ce3d020106052b8104002204819e30819b0201010430c38e34a7cd58961c8deda9c9118548724945d3f3b3bd71f03c93247304c1f7d86b8507501e4e05a0fbae76e44bbe8cc2a16403620004cb75013d8ba42edd022e9de8dfe856a2ee3f48ec28a666c4a73cf3d16e09c7d5747e6c5b5795a656e175c71feed01ec5e282b19e6650f6ea31970114f3e1e6e2275dd6811f87e7f7128c48806a9763785ac31bd345436e57eae23a1151355ef2");
var truncatedPkcs8P256Key1 = hexStringToUint8Array("30");
var truncatedPkcs8P256Key2 = hexStringToUint8Array("30818702010030");
var truncatedPkcs8P256Key3 = hexStringToUint8Array("3081870201003013");
var truncatedPkcs8P256Key4 = hexStringToUint8Array("308187020100301306072b8648ce3d0201");
var truncatedPkcs8P256Key5 = hexStringToUint8Array("308187020100301306072a8648ce3d0201");
var truncatedPkcs8P256Key6 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082b8648ce3d030107");
var truncatedPkcs8P256Key7 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d03010704");
var truncatedPkcs8P256Key8 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d30");
var truncatedPkcs8P256Key9 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104");
var truncatedPkcs8P256Key10 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b0201010420");
var truncatedPkcs8P256Key11 = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104200a21f3f048b893b0f2b5a8459bd6d2bc112614aa86437f8fa2496a0e27f5b0a8a14403");
var longPkcs8P256Key = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104200a21f3f048b893b0f2b5a8459bd6d2bc112614aa86437f8fa2496a0e27f5b0a8a14403420004d726bd565878f24ee3616890d3668503334b84da3434b2774a44d6e4b9c536dd60e9181e1d1469ba3e6aba8987225f6e797d01a0dc400a4a298c902bae66abe2badbad");
var corruptedPkcs8P256Key = hexStringToUint8Array("308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b02010104200a21f3f048b893b0f2b5a8459bd6d2bc112614aa86437f8fa2496a0e27f5b0a8a14403420005d726bd565878f24ee3616890d3668503334b84da3434b2774a44d6e4b9c536dd60e9181e1d1469ba3e6aba8987225f6e797d01a0dc400a4a298c902bae66abe2");
var truncatedPkcs8P384Key1 = hexStringToUint8Array("3081b6020100301006072a8648ce3d0201");
var truncatedPkcs8P384Key2 = hexStringToUint8Array("3081b6020100301006072a8648ce3d020106052b81040023");
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
// 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, [ ])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
// Raw: Wrong usages
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDSA", namedCurve: "P-256" }, extractable, ["sign"])');
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
// Raw: Not support named curve
shouldReject('crypto.subtle.importKey("raw", rawP256Key, { name: "ECDH", namedCurve: "P-521" }, extractable, [ ])');
// Jwk: Wrong usages
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["encrypt"])');
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["decrypt"])');
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, d:d}, { name: "ECDH", namedCurve: "P-256" }, extractable, ["sign"])');
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"])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
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"])');
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
// 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"])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
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"])');
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
// 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
shouldReject('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"])');
// Jwk: Wrong ext
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x, y:y, ext: false}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Jwk: Missing crv
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Jwk: Mismatched crv
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Jwk: Not supported crv
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-521", x:x, y:y}, { name: "ECDH", namedCurve: "P-521" }, extractable, [ ])');
// Jwk: Missing x, y
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", y:y}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-256", x:x}, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Jwk: Mismatched x, y, d
shouldReject('crypto.subtle.importKey("jwk", {kty: "EC", crv: "P-384", x:x, y:y}, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
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, [ ])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
// Spki: Wrong usages
[WebCrypto] Support SPKI/PKCS8 for Elliptic Curve https://bugs.webkit.org/show_bug.cgi?id=169318 <rdar://problem/31081956> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch adds SPKI/PKCS8 support for Elliptic Curve cryptos. We can now import/export SPKI/PKCS8 Elliptic Curve keys after this change. Few things to note: 1) This patch implements a loose DER encoder/decoder for hacking the underlying CommonCrypto library. 2) It only permits id-ecPublicKey as the AlgorithmIdentifier following OpenSSL/Chrome(BoringSSL). 3) It follows OpenSSL/Chrome(BoringSSL) to replace ECParameters in ECPrivateKey with custom tags. Hence, we should fully comply with OpenSSL/Chrome(BoringSSL). Tests: crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html crypto/subtle/ec-import-jwk-key-export-spki-key.html crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html crypto/subtle/ec-import-raw-key-export-spki-key.html crypto/subtle/ec-import-spki-key-export-jwk-key.html crypto/subtle/ec-import-spki-key-export-raw-key.html crypto/subtle/ec-import-spki-key-export-spki-key-p256.html crypto/subtle/ec-import-spki-key-export-spki-key-p384.html crypto/subtle/ecdh-generate-export-key-spki-p256.html crypto/subtle/ecdh-generate-export-key-spki-p384.html crypto/subtle/ecdh-generate-export-pkcs8-p256.html crypto/subtle/ecdh-generate-export-pkcs8-p384.html crypto/subtle/ecdh-import-pkcs8-key-p256.html crypto/subtle/ecdh-import-pkcs8-key-p384.html crypto/subtle/ecdh-import-spki-key-p256.html crypto/subtle/ecdh-import-spki-key-p384.html crypto/workers/subtle/ec-generate-export-pkcs8-key.html crypto/workers/subtle/ec-generate-export-spki-key.html crypto/workers/subtle/ec-import-pkcs8-key.html crypto/workers/subtle/ec-import-spki-key.html * WebCore.xcodeproj/project.pbxproj: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. * crypto/keys/CryptoKeyEC.cpp: (WebCore::CryptoKeyEC::importSpki): (WebCore::CryptoKeyEC::importPkcs8): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::exportSpki): (WebCore::CryptoKeyEC::exportPkcs8): * crypto/keys/CryptoKeyEC.h: * crypto/mac/CommonCryptoDERUtilities.h: Added. (WebCore::bytesUsedToEncodedLength): (WebCore::extraBytesNeededForEncodedLength): (WebCore::addEncodedASN1Length): (WebCore::bytesNeededForEncodedLength): * crypto/mac/CryptoKeyECMac.cpp: (WebCore::compareBytes): (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::getOID): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. Enlarge the robust of exportRaw. * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::exportSpki): (WebCore::CryptoKeyRSA::exportPkcs8): Enhance the implementation. (WebCore::bytesUsedToEncodedLength): Deleted. (WebCore::bytesNeededForEncodedLength): Deleted. (WebCore::addEncodedASN1Length): Deleted. Moved to CommonCryptoDERUtilities.h. LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: * crypto/subtle/ec-export-key-malformed-parameters.html: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: * crypto/subtle/ec-import-jwk-key-export-pkcs8-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: * crypto/subtle/ec-import-key-malformed-parameters.html: * crypto/subtle/ec-import-pkcs8-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html: Added. * crypto/subtle/ec-import-raw-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-spki-key.html: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-spki-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-raw-key.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384.html: Added. * crypto/subtle/ecdh-import-spki-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p256.html: Added. * crypto/subtle/ecdh-import-spki-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p384.html: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key.html: Added. * crypto/workers/subtle/ec-generate-export-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-spki-key.html: Added. * crypto/workers/subtle/ec-import-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-import-pkcs8-key.html: Added. * crypto/workers/subtle/ec-import-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-import-spki-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-spki-key.js: Added. * crypto/workers/subtle/resources/ec-import-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-import-spki-key.js: Added. Canonical link: https://commits.webkit.org/186739@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 22:32:20 +00:00
shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveBits"])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
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"])');
[WebCrypto] Support SPKI/PKCS8 for Elliptic Curve https://bugs.webkit.org/show_bug.cgi?id=169318 <rdar://problem/31081956> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch adds SPKI/PKCS8 support for Elliptic Curve cryptos. We can now import/export SPKI/PKCS8 Elliptic Curve keys after this change. Few things to note: 1) This patch implements a loose DER encoder/decoder for hacking the underlying CommonCrypto library. 2) It only permits id-ecPublicKey as the AlgorithmIdentifier following OpenSSL/Chrome(BoringSSL). 3) It follows OpenSSL/Chrome(BoringSSL) to replace ECParameters in ECPrivateKey with custom tags. Hence, we should fully comply with OpenSSL/Chrome(BoringSSL). Tests: crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html crypto/subtle/ec-import-jwk-key-export-spki-key.html crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html crypto/subtle/ec-import-raw-key-export-spki-key.html crypto/subtle/ec-import-spki-key-export-jwk-key.html crypto/subtle/ec-import-spki-key-export-raw-key.html crypto/subtle/ec-import-spki-key-export-spki-key-p256.html crypto/subtle/ec-import-spki-key-export-spki-key-p384.html crypto/subtle/ecdh-generate-export-key-spki-p256.html crypto/subtle/ecdh-generate-export-key-spki-p384.html crypto/subtle/ecdh-generate-export-pkcs8-p256.html crypto/subtle/ecdh-generate-export-pkcs8-p384.html crypto/subtle/ecdh-import-pkcs8-key-p256.html crypto/subtle/ecdh-import-pkcs8-key-p384.html crypto/subtle/ecdh-import-spki-key-p256.html crypto/subtle/ecdh-import-spki-key-p384.html crypto/workers/subtle/ec-generate-export-pkcs8-key.html crypto/workers/subtle/ec-generate-export-spki-key.html crypto/workers/subtle/ec-import-pkcs8-key.html crypto/workers/subtle/ec-import-spki-key.html * WebCore.xcodeproj/project.pbxproj: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. * crypto/keys/CryptoKeyEC.cpp: (WebCore::CryptoKeyEC::importSpki): (WebCore::CryptoKeyEC::importPkcs8): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::exportSpki): (WebCore::CryptoKeyEC::exportPkcs8): * crypto/keys/CryptoKeyEC.h: * crypto/mac/CommonCryptoDERUtilities.h: Added. (WebCore::bytesUsedToEncodedLength): (WebCore::extraBytesNeededForEncodedLength): (WebCore::addEncodedASN1Length): (WebCore::bytesNeededForEncodedLength): * crypto/mac/CryptoKeyECMac.cpp: (WebCore::compareBytes): (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::getOID): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. Enlarge the robust of exportRaw. * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::exportSpki): (WebCore::CryptoKeyRSA::exportPkcs8): Enhance the implementation. (WebCore::bytesUsedToEncodedLength): Deleted. (WebCore::bytesNeededForEncodedLength): Deleted. (WebCore::addEncodedASN1Length): Deleted. Moved to CommonCryptoDERUtilities.h. LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: * crypto/subtle/ec-export-key-malformed-parameters.html: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: * crypto/subtle/ec-import-jwk-key-export-pkcs8-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: * crypto/subtle/ec-import-key-malformed-parameters.html: * crypto/subtle/ec-import-pkcs8-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html: Added. * crypto/subtle/ec-import-raw-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-spki-key.html: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-spki-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-raw-key.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384.html: Added. * crypto/subtle/ecdh-import-spki-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p256.html: Added. * crypto/subtle/ecdh-import-spki-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p384.html: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key.html: Added. * crypto/workers/subtle/ec-generate-export-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-spki-key.html: Added. * crypto/workers/subtle/ec-import-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-import-pkcs8-key.html: Added. * crypto/workers/subtle/ec-import-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-import-spki-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-spki-key.js: Added. * crypto/workers/subtle/resources/ec-import-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-import-spki-key.js: Added. Canonical link: https://commits.webkit.org/186739@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 22:32:20 +00:00
// 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, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key3, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key4, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key5, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key6, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key7, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP256Key8, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP384Key1, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP384Key2, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", truncatedSpkiP384Key3, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
// Spki: Missmatched Curves
shouldReject('crypto.subtle.importKey("spki", spkiP256Key, { name: "ECDH", namedCurve: "P-384" }, extractable, [ ])');
shouldReject('crypto.subtle.importKey("spki", spkiP384Key, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Spki: Corrupted Key Data
shouldReject('crypto.subtle.importKey("spki", corruptedSpkiP256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, [ ])');
// Pkcs8: Wrong usages
shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["encrypt"])');
shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["decrypt"])');
shouldReject('crypto.subtle.importKey("pkcs8", pkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["sign"])');
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"])');
[WebCrypto] Add support for ECDSA 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. Canonical link: https://commits.webkit.org/187837@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@215423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-04-17 20:07:56 +00:00
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"])');
[WebCrypto] Support SPKI/PKCS8 for Elliptic Curve https://bugs.webkit.org/show_bug.cgi?id=169318 <rdar://problem/31081956> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch adds SPKI/PKCS8 support for Elliptic Curve cryptos. We can now import/export SPKI/PKCS8 Elliptic Curve keys after this change. Few things to note: 1) This patch implements a loose DER encoder/decoder for hacking the underlying CommonCrypto library. 2) It only permits id-ecPublicKey as the AlgorithmIdentifier following OpenSSL/Chrome(BoringSSL). 3) It follows OpenSSL/Chrome(BoringSSL) to replace ECParameters in ECPrivateKey with custom tags. Hence, we should fully comply with OpenSSL/Chrome(BoringSSL). Tests: crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html crypto/subtle/ec-import-jwk-key-export-spki-key.html crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html crypto/subtle/ec-import-raw-key-export-spki-key.html crypto/subtle/ec-import-spki-key-export-jwk-key.html crypto/subtle/ec-import-spki-key-export-raw-key.html crypto/subtle/ec-import-spki-key-export-spki-key-p256.html crypto/subtle/ec-import-spki-key-export-spki-key-p384.html crypto/subtle/ecdh-generate-export-key-spki-p256.html crypto/subtle/ecdh-generate-export-key-spki-p384.html crypto/subtle/ecdh-generate-export-pkcs8-p256.html crypto/subtle/ecdh-generate-export-pkcs8-p384.html crypto/subtle/ecdh-import-pkcs8-key-p256.html crypto/subtle/ecdh-import-pkcs8-key-p384.html crypto/subtle/ecdh-import-spki-key-p256.html crypto/subtle/ecdh-import-spki-key-p384.html crypto/workers/subtle/ec-generate-export-pkcs8-key.html crypto/workers/subtle/ec-generate-export-spki-key.html crypto/workers/subtle/ec-import-pkcs8-key.html crypto/workers/subtle/ec-import-spki-key.html * WebCore.xcodeproj/project.pbxproj: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. * crypto/keys/CryptoKeyEC.cpp: (WebCore::CryptoKeyEC::importSpki): (WebCore::CryptoKeyEC::importPkcs8): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::exportSpki): (WebCore::CryptoKeyEC::exportPkcs8): * crypto/keys/CryptoKeyEC.h: * crypto/mac/CommonCryptoDERUtilities.h: Added. (WebCore::bytesUsedToEncodedLength): (WebCore::extraBytesNeededForEncodedLength): (WebCore::addEncodedASN1Length): (WebCore::bytesNeededForEncodedLength): * crypto/mac/CryptoKeyECMac.cpp: (WebCore::compareBytes): (WebCore::CryptoKeyEC::platformExportRaw): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::getOID): (WebCore::CryptoKeyEC::platformImportSpki): (WebCore::CryptoKeyEC::platformExportSpki): (WebCore::CryptoKeyEC::platformImportPkcs8): (WebCore::CryptoKeyEC::platformExportPkcs8): (WebCore::CryptoKeyEC::exportRaw): Deleted. Enlarge the robust of exportRaw. * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::exportSpki): (WebCore::CryptoKeyRSA::exportPkcs8): Enhance the implementation. (WebCore::bytesUsedToEncodedLength): Deleted. (WebCore::bytesNeededForEncodedLength): Deleted. (WebCore::addEncodedASN1Length): Deleted. Moved to CommonCryptoDERUtilities.h. LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: * crypto/subtle/ec-export-key-malformed-parameters.html: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: * crypto/subtle/ec-import-jwk-key-export-pkcs8-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-pkcs8-key.html: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-spki-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: * crypto/subtle/ec-import-key-malformed-parameters.html: * crypto/subtle/ec-import-pkcs8-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p256.html: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ec-import-pkcs8-key-export-pkcs8-key-p384.html: Added. * crypto/subtle/ec-import-raw-key-export-spki-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-spki-key.html: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-spki-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-raw-key.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p256.html: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384-expected.txt: Added. * crypto/subtle/ec-import-spki-key-export-spki-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-spki-p384.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p256.html: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-pkcs8-p384.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p256.html: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-pkcs8-key-p384.html: Added. * crypto/subtle/ecdh-import-spki-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p256.html: Added. * crypto/subtle/ecdh-import-spki-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-spki-key-p384.html: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-pkcs8-key.html: Added. * crypto/workers/subtle/ec-generate-export-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-spki-key.html: Added. * crypto/workers/subtle/ec-import-pkcs8-key-expected.txt: Added. * crypto/workers/subtle/ec-import-pkcs8-key.html: Added. * crypto/workers/subtle/ec-import-spki-key-expected.txt: Added. * crypto/workers/subtle/ec-import-spki-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-spki-key.js: Added. * crypto/workers/subtle/resources/ec-import-pkcs8-key.js: Added. * crypto/workers/subtle/resources/ec-import-spki-key.js: Added. Canonical link: https://commits.webkit.org/186739@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214074 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-16 22:32:20 +00:00
// 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"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key3, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key4, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key5, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key6, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key7, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key8, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key9, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key10, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P256Key11, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P384Key1, { name: "ECDH", namedCurve: "P-384" }, extractable, ["deriveKey"])');
shouldReject('crypto.subtle.importKey("pkcs8", truncatedPkcs8P384Key2, { name: "ECDH", namedCurve: "P-384" }, extractable, ["deriveKey"])');
// Pkcs8: Long key
shouldReject('crypto.subtle.importKey("pkcs8", longPkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
// Pkcs8: Corrupted Key Data
shouldReject('crypto.subtle.importKey("pkcs8", corruptedPkcs8P256Key, { name: "ECDH", namedCurve: "P-256" }, extractable, ["deriveKey"])');
[WebCrypto] Implement ECDH ImportKey/ExportKey operations https://bugs.webkit.org/show_bug.cgi?id=169257 <rdar://problem/23789585> Reviewed by Brent Fulgham. LayoutTests/imported/w3c: * web-platform-tests/WebCryptoAPI/import_export/ec_importKey.worker-expected.txt: * web-platform-tests/WebCryptoAPI/import_export/test_ec_importKey-expected.txt: Source/WebCore: This patch implements ECDH ImportKey/ExportKey operations according to: https://www.w3.org/TR/WebCryptoAPI/#ecdh-operations. Sad that we can't support SPKI/PKCS8 formats at this moment due to lack of necessary support in the underlying crypto library. Bug 169318 is tracking the issue. Also, this patch fixes minor bugs while importing JWK keys for HMAC/RSA. Tests: crypto/subtle/ec-export-key-malformed-parameters.html crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html crypto/subtle/ec-import-jwk-key-export-raw-key.html crypto/subtle/ec-import-key-malformed-parameters.html crypto/subtle/ec-import-raw-key-export-jwk-key.html crypto/subtle/ec-import-raw-key-export-raw-key.html crypto/subtle/ecdh-generate-export-jwk-key-p256.html crypto/subtle/ecdh-generate-export-jwk-key-p384.html crypto/subtle/ecdh-generate-export-key-raw-p256.html crypto/subtle/ecdh-generate-export-key-raw-p384.html crypto/subtle/ecdh-import-jwk-key-minimum.html crypto/subtle/ecdh-import-jwk-private-key-p256.html crypto/subtle/ecdh-import-jwk-private-key-p384.html crypto/subtle/ecdh-import-jwk-public-key-p256.html crypto/subtle/ecdh-import-jwk-public-key-p384.html crypto/subtle/ecdh-import-raw-key-p256.html crypto/subtle/ecdh-import-raw-key-p384.html crypto/workers/subtle/ec-generate-export-jwk-key.html crypto/workers/subtle/ec-generate-export-raw-key.html crypto/workers/subtle/ec-import-jwk-key-private.html crypto/workers/subtle/ec-import-jwk-key-public.html crypto/workers/subtle/ec-import-raw-key.html * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::supportExportKeyThrow): Added EC family support. * crypto/CommonCryptoUtilities.h: Added needed CommonCrypto SPIs. * crypto/CryptoAlgorithm.h: * crypto/algorithms/CryptoAlgorithmECDH.cpp: (WebCore::CryptoAlgorithmECDH::importKey): (WebCore::CryptoAlgorithmECDH::exportKey): * crypto/algorithms/CryptoAlgorithmECDH.h: * crypto/gnutls/CryptoKeyECGnuTLS.cpp: (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): Faked implementations for GTK+. * crypto/keys/CryptoKeyEC.cpp: (WebCore::toNamedCurve): (WebCore::CryptoKeyEC::generatePair): (WebCore::CryptoKeyEC::importRaw): (WebCore::CryptoKeyEC::importJwk): (WebCore::CryptoKeyEC::exportJwk): * crypto/keys/CryptoKeyEC.h: * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::importJwk): Fixed a bug. * crypto/keys/CryptoKeyRSA.cpp: (WebCore::CryptoKeyRSA::importJwk): Fixed a bug. * crypto/mac/CryptoKeyECMac.cpp: (WebCore::doesUncompressedPointMatchNamedCurve): (WebCore::doesFieldElementMatchNamedCurve): (WebCore::getKeySizeFromNamedCurve): (WebCore::CryptoKeyEC::~CryptoKeyEC): (WebCore::CryptoKeyEC::keySizeInBits): (WebCore::CryptoKeyEC::exportRaw): (WebCore::CryptoKeyEC::platformGeneratePair): (WebCore::CryptoKeyEC::platformImportRaw): (WebCore::CryptoKeyEC::platformImportJWKPublic): (WebCore::CryptoKeyEC::platformImportJWKPrivate): (WebCore::CryptoKeyEC::platformAddFieldElements): LayoutTests: * crypto/subtle/ec-export-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-export-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-private.html: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-jwk-key-public.html: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-jwk-key-export-raw-key.html: Added. * crypto/subtle/ec-import-key-malformed-parameters-expected.txt: Added. * crypto/subtle/ec-import-key-malformed-parameters.html: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-jwk-key.html: Added. * crypto/subtle/ec-import-raw-key-export-raw-key-expected.txt: Added. * crypto/subtle/ec-import-raw-key-export-raw-key.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p256.html: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-jwk-key-p384.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p256.html: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384-expected.txt: Added. * crypto/subtle/ecdh-generate-export-key-raw-p384.html: Added. * crypto/subtle/ecdh-import-jwk-key-minimum-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-key-minimum.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-private-key-p384.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p256.html: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-jwk-public-key-p384.html: Added. * crypto/subtle/ecdh-import-raw-key-p256-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p256.html: Added. * crypto/subtle/ecdh-import-raw-key-p384-expected.txt: Added. * crypto/subtle/ecdh-import-raw-key-p384.html: Added. * crypto/subtle/hmac-import-key-malformed-parameters-expected.txt: * crypto/subtle/hmac-import-key-malformed-parameters.html: * crypto/subtle/rsa-import-key-malformed-parameters-expected.txt: * crypto/subtle/rsa-import-key-malformed-parameters.html: Fixed some minor bugs. * crypto/workers/subtle/ec-generate-export-jwk-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-jwk-key.html: Added. * crypto/workers/subtle/ec-generate-export-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-generate-export-raw-key.html: Added. * crypto/workers/subtle/ec-import-jwk-key-private-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-private.html: Added. * crypto/workers/subtle/ec-import-jwk-key-public-expected.txt: Added. * crypto/workers/subtle/ec-import-jwk-key-public.html: Added. * crypto/workers/subtle/ec-import-raw-key-expected.txt: Added. * crypto/workers/subtle/ec-import-raw-key.html: Added. * crypto/workers/subtle/resources/ec-generate-export-jwk-key.js: Added. * crypto/workers/subtle/resources/ec-generate-export-raw-key.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-private.js: Added. * crypto/workers/subtle/resources/ec-import-jwk-key-public.js: Added. * crypto/workers/subtle/resources/ec-import-raw-key.js: Added. Canonical link: https://commits.webkit.org/186320@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213560 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-08 02:09:38 +00:00
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>