[WebCrypto] Support HKDF
https://bugs.webkit.org/show_bug.cgi?id=170636
<rdar://problem/23539827>

Reviewed by Brent Fulgham.

LayoutTests/imported/w3c:

* web-platform-tests/WebCryptoAPI/derive_bits_keys/hkdf.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/derive_bits_keys/test_hkdf-expected.txt:
* web-platform-tests/WebCryptoAPI/import_export/symmetric_importKey.worker-expected.txt:
* web-platform-tests/WebCryptoAPI/import_export/test_symmetric_importKey-expected.txt:

Source/WebCore:

This patch implements HKDF according to the spec: https://www.w3.org/TR/WebCryptoAPI/#hkdf.
Supported operations include deriveKey, deriveBits, importKey and getKeyLength.

Tests: crypto/subtle/ecdh-import-key-derive-hkdf-key.html
       crypto/subtle/hkdf-derive-bits-malformed-parametrs.html
       crypto/subtle/hkdf-import-key-derive-bits.html
       crypto/subtle/hkdf-import-key-derive-hmac-key.html
       crypto/subtle/hkdf-import-key-malformed-parameters.html
       crypto/subtle/hkdf-import-key.html
       crypto/workers/subtle/hkdf-import-key-derive-bits.html
       crypto/workers/subtle/hkdf-import-key-derive-hmac-key.html
       crypto/workers/subtle/hkdf-import-key.html

* CMakeLists.txt:
* DerivedSources.make:
* PlatformGTK.cmake:
* PlatformMac.cmake:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSCryptoAlgorithmDictionary.cpp:
(WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
(WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
Rename HKDF_CTR to HKDF.
* bindings/js/JSSubtleCryptoCustom.cpp:
(WebCore::normalizeCryptoAlgorithmParameters):
* bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneSerializer::write):
(WebCore::CloneDeserializer::read):
Rename HKDF_CTR to HKDF.
* crypto/CommonCryptoUtilities.h:
* crypto/CryptoAlgorithmIdentifier.h:
* crypto/CryptoAlgorithmParameters.h:
* crypto/algorithms/CryptoAlgorithmHKDF.cpp: Added.
(WebCore::CryptoAlgorithmHKDF::create):
(WebCore::CryptoAlgorithmHKDF::identifier):
(WebCore::CryptoAlgorithmHKDF::deriveBits):
(WebCore::CryptoAlgorithmHKDF::importKey):
(WebCore::CryptoAlgorithmHKDF::getKeyLength):
* crypto/algorithms/CryptoAlgorithmHKDF.h: Added.
* crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp: Added.
(WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
* crypto/mac/CryptoAlgorithmHKDFMac.cpp: Added.
(WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
* crypto/mac/CryptoAlgorithmRegistryMac.cpp:
(WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
* crypto/parameters/CryptoAlgorithmHkdfParams.h: Added.
* crypto/parameters/HkdfParams.idl: Added.

LayoutTests:

* TestExpectations:
* crypto/subtle/ecdh-import-key-derive-hkdf-key-expected.txt: Added.
* crypto/subtle/ecdh-import-key-derive-hkdf-key.html: Added.
* crypto/subtle/hkdf-derive-bits-malformed-parametrs-expected.txt: Added.
* crypto/subtle/hkdf-derive-bits-malformed-parametrs.html: Added.
* crypto/subtle/hkdf-import-key-derive-bits-expected.txt: Added.
* crypto/subtle/hkdf-import-key-derive-bits.html: Added.
* crypto/subtle/hkdf-import-key-derive-hmac-key-expected.txt: Added.
* crypto/subtle/hkdf-import-key-derive-hmac-key.html: Added.
* crypto/subtle/hkdf-import-key-expected.txt: Added.
* crypto/subtle/hkdf-import-key-malformed-parameters-expected.txt: Added.
* crypto/subtle/hkdf-import-key-malformed-parameters.html: Added.
* crypto/subtle/hkdf-import-key.html: Added.
* crypto/workers/subtle/hkdf-import-key-derive-bits-expected.txt: Added.
* crypto/workers/subtle/hkdf-import-key-derive-bits.html: Added.
* crypto/workers/subtle/hkdf-import-key-derive-hmac-key-expected.txt: Added.
* crypto/workers/subtle/hkdf-import-key-derive-hmac-key.html: Added.
* crypto/workers/subtle/hkdf-import-key-expected.txt: Added.
* crypto/workers/subtle/hkdf-import-key.html: Added.
* crypto/workers/subtle/resources/hkdf-import-key-derive-bits.js: Added.
* crypto/workers/subtle/resources/hkdf-import-key-derive-hmac-key.js: Added.
* crypto/workers/subtle/resources/hkdf-import-key.js: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@215382 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index a1cfe93..9304f8d 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,34 @@
+2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [WebCrypto] Support HKDF
+        https://bugs.webkit.org/show_bug.cgi?id=170636
+        <rdar://problem/23539827>
+
+        Reviewed by Brent Fulgham.
+
+        * TestExpectations:
+        * crypto/subtle/ecdh-import-key-derive-hkdf-key-expected.txt: Added.
+        * crypto/subtle/ecdh-import-key-derive-hkdf-key.html: Added.
+        * crypto/subtle/hkdf-derive-bits-malformed-parametrs-expected.txt: Added.
+        * crypto/subtle/hkdf-derive-bits-malformed-parametrs.html: Added.
+        * crypto/subtle/hkdf-import-key-derive-bits-expected.txt: Added.
+        * crypto/subtle/hkdf-import-key-derive-bits.html: Added.
+        * crypto/subtle/hkdf-import-key-derive-hmac-key-expected.txt: Added.
+        * crypto/subtle/hkdf-import-key-derive-hmac-key.html: Added.
+        * crypto/subtle/hkdf-import-key-expected.txt: Added.
+        * crypto/subtle/hkdf-import-key-malformed-parameters-expected.txt: Added.
+        * crypto/subtle/hkdf-import-key-malformed-parameters.html: Added.
+        * crypto/subtle/hkdf-import-key.html: Added.
+        * crypto/workers/subtle/hkdf-import-key-derive-bits-expected.txt: Added.
+        * crypto/workers/subtle/hkdf-import-key-derive-bits.html: Added.
+        * crypto/workers/subtle/hkdf-import-key-derive-hmac-key-expected.txt: Added.
+        * crypto/workers/subtle/hkdf-import-key-derive-hmac-key.html: Added.
+        * crypto/workers/subtle/hkdf-import-key-expected.txt: Added.
+        * crypto/workers/subtle/hkdf-import-key.html: Added.
+        * crypto/workers/subtle/resources/hkdf-import-key-derive-bits.js: Added.
+        * crypto/workers/subtle/resources/hkdf-import-key-derive-hmac-key.js: Added.
+        * crypto/workers/subtle/resources/hkdf-import-key.js: Added.
+
 2017-04-14  Ryan Haddad  <ryanhaddad@apple.com>
 
         Skip workers/wasm-* LayoutTests on ios-simulator.