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

17 lines
467 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 private key with P-256
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
Importing a key...
PASS privateKey.toString() is '[object CryptoKey]'
PASS privateKey.type is 'private'
PASS privateKey.extractable is false
PASS privateKey.algorithm.name is 'ECDH'
PASS privateKey.algorithm.namedCurve is 'P-256'
PASS privateKey.usages is ['deriveBits', 'deriveKey']
PASS successfullyParsed is true
TEST COMPLETE