haikuwebkit/LayoutTests/crypto/subtle/ecdsa-generate-export-key-p...

40 lines
904 B
HTML
Raw Permalink Normal View History

[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
<!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">
description("Test exporting an ECDSA private key with PKCS8 format.");
[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
jsTestIsAsync = true;
var algorithmKeyGen = {
[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
name: "ECDSA",
[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
namedCurve: "P-256"
};
var extractable = true;
var keyPair;
debug("Generating a key pair...");
[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
crypto.subtle.generateKey(algorithmKeyGen, extractable, ["sign", "verify"]).then(function(result) {
[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
keyPair = result;
debug("Exporting the public key...");
return crypto.subtle.exportKey("pkcs8", keyPair.privateKey);
}).then(function(result) {
privateKey = result;
shouldBe("privateKey.byteLength", "138");
finishJSTest();
});
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>