haikuwebkit/LayoutTests/crypto/subtle/ecdh-import-jwk-public-key-...

17 lines
434 B
Plaintext
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
Test importing a JWK ECDH public key with P-384
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
Importing a key...
PASS publicKey.toString() is '[object CryptoKey]'
PASS publicKey.type is 'public'
PASS publicKey.extractable is true
PASS publicKey.algorithm.name is 'ECDH'
PASS publicKey.algorithm.namedCurve is 'P-384'
PASS publicKey.usages is [ ]
PASS successfullyParsed is true
TEST COMPLETE