Diff
Modified: trunk/Source/WebCore/ChangeLog (221234 => 221235)
--- trunk/Source/WebCore/ChangeLog 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/ChangeLog 2017-08-28 08:16:07 UTC (rev 221235)
@@ -1,3 +1,78 @@
+2017-08-28 Zan Dobersek <[email protected]>
+
+ [WebCrypto] Push WorkQueue dispatches for AES algorithms into shared code
+ https://bugs.webkit.org/show_bug.cgi?id=175539
+
+ Reviewed by Sam Weinig.
+
+ Push the WorkQueue dispatch code and other code duplicated between the
+ Mac and libgcrypt implementations of Web Crypto into the shared layer.
+ This patch focuses on the AES-based algorithms.
+
+ Functions with platform-specific implementations that are invoked from
+ these asynchronous dispatches are made static and return an ExceptionOr
+ value. CryptoAlgorithmParameters objects are passed through non-const
+ references because data getters could lazily construct the underlying
+ Vector objects. CryptoKey objects are passed through const references.
+ Implementations can then manually retrieve and further validate any key
+ or parameter data, as required for that specific implementation. Input
+ data is passed through const references to the original Vector objects.
+
+ No new tests -- no changes in behavior that's covered by existing tests.
+
+ * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
+ (WebCore::CryptoAlgorithmAES_CBC::encrypt):
+ (WebCore::CryptoAlgorithmAES_CBC::decrypt):
+ * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
+ * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
+ (WebCore::CryptoAlgorithmAES_CFB::encrypt):
+ (WebCore::CryptoAlgorithmAES_CFB::decrypt):
+ * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
+ * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
+ (WebCore::CryptoAlgorithmAES_CTR::encrypt):
+ (WebCore::CryptoAlgorithmAES_CTR::decrypt):
+ * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
+ * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
+ (WebCore::CryptoAlgorithmAES_GCM::encrypt):
+ (WebCore::CryptoAlgorithmAES_GCM::decrypt):
+ * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
+ * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
+ (WebCore::CryptoAlgorithmAES_KW::wrapKey):
+ (WebCore::CryptoAlgorithmAES_KW::unwrapKey):
+ * crypto/algorithms/CryptoAlgorithmAES_KW.h:
+ * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
+ (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
+ * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
+ (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
+ * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
+ (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
+ * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
+ (WebCore::gcryptEncrypt):
+ (WebCore::gcryptDecrypt):
+ (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
+ * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
+ (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
+ (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
+ * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
+ (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
+ * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
+ (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
+ * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
+ (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
+ * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
+ (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
+ (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
+ * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
+ (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
+ (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
+
2017-08-27 Wenson Hsieh <[email protected]>
[iOS WK2] Web process crashes after changing selection to the end of the document when speaking a selection
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -62,7 +62,11 @@
exceptionCallback(OperationError);
return;
}
- platformEncrypt(WTFMove(parameters), WTFMove(key), WTFMove(plainText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText)] {
+ return platformEncrypt(*parameters, key, plainText);
+ });
}
void CryptoAlgorithmAES_CBC::decrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
@@ -73,7 +77,11 @@
exceptionCallback(OperationError);
return;
}
- platformDecrypt(WTFMove(parameters), WTFMove(key), WTFMove(cipherText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText)] {
+ return platformDecrypt(*parameters, key, cipherText);
+ });
}
void CryptoAlgorithmAES_CBC::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyOrKeyPairCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&)
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h 2017-08-28 08:16:07 UTC (rev 221235)
@@ -50,8 +50,8 @@
void exportKey(CryptoKeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
ExceptionOr<size_t> getKeyLength(const CryptoAlgorithmParameters&) final;
- void platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
- void platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+ static ExceptionOr<Vector<uint8_t>> platformEncrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
+ static ExceptionOr<Vector<uint8_t>> platformDecrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -62,7 +62,11 @@
exceptionCallback(OperationError);
return;
}
- platformEncrypt(WTFMove(parameters), WTFMove(key), WTFMove(plainText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText)] {
+ return platformEncrypt(*parameters, key, plainText);
+ });
}
void CryptoAlgorithmAES_CFB::decrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
@@ -73,7 +77,11 @@
exceptionCallback(OperationError);
return;
}
- platformDecrypt(WTFMove(parameters), WTFMove(key), WTFMove(cipherText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText)] {
+ return platformDecrypt(*parameters, key, cipherText);
+ });
}
void CryptoAlgorithmAES_CFB::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyOrKeyPairCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&)
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.h (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.h 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CFB.h 2017-08-28 08:16:07 UTC (rev 221235)
@@ -50,8 +50,8 @@
void exportKey(CryptoKeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
ExceptionOr<size_t> getKeyLength(const CryptoAlgorithmParameters&) final;
- void platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
- void platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+ static ExceptionOr<Vector<uint8_t>> platformEncrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
+ static ExceptionOr<Vector<uint8_t>> platformDecrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -71,7 +71,11 @@
exceptionCallback(OperationError);
return;
}
- platformEncrypt(WTFMove(parameters), WTFMove(key), WTFMove(plainText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText)] {
+ return platformEncrypt(*parameters, key, plainText);
+ });
}
void CryptoAlgorithmAES_CTR::decrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
@@ -82,7 +86,11 @@
exceptionCallback(OperationError);
return;
}
- platformDecrypt(WTFMove(parameters), WTFMove(key), WTFMove(cipherText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText)] {
+ return platformDecrypt(*parameters, key, cipherText);
+ });
}
void CryptoAlgorithmAES_CTR::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyOrKeyPairCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&)
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.h (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.h 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CTR.h 2017-08-28 08:16:07 UTC (rev 221235)
@@ -50,8 +50,8 @@
void exportKey(CryptoKeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
ExceptionOr<size_t> getKeyLength(const CryptoAlgorithmParameters&) final;
- void platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
- void platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+ static ExceptionOr<Vector<uint8_t>> platformEncrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
+ static ExceptionOr<Vector<uint8_t>> platformDecrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -93,7 +93,10 @@
return;
}
- platformEncrypt(WTFMove(parameters), WTFMove(key), WTFMove(plainText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText)] {
+ return platformEncrypt(*parameters, key, plainText);
+ });
}
void CryptoAlgorithmAES_GCM::decrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
@@ -122,7 +125,10 @@
}
#endif
- platformDecrypt(WTFMove(parameters), WTFMove(key), WTFMove(cipherText), WTFMove(callback), WTFMove(exceptionCallback), context, workQueue);
+ dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
+ [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText)] {
+ return platformDecrypt(*parameters, key, cipherText);
+ });
}
void CryptoAlgorithmAES_GCM::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyOrKeyPairCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext&)
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.h (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.h 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_GCM.h 2017-08-28 08:16:07 UTC (rev 221235)
@@ -50,8 +50,8 @@
void exportKey(CryptoKeyFormat, Ref<CryptoKey>&&, KeyDataCallback&&, ExceptionCallback&&) final;
ExceptionOr<size_t> getKeyLength(const CryptoAlgorithmParameters&) final;
- void platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
- void platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&);
+ static ExceptionOr<Vector<uint8_t>> platformEncrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
+ static ExceptionOr<Vector<uint8_t>> platformDecrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -154,12 +154,25 @@
exceptionCallback(OperationError);
return;
}
- platformWrapKey(WTFMove(key), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback));
+
+ auto result = platformWrapKey(key, WTFMove(data));
+ if (result.hasException()) {
+ exceptionCallback(result.releaseException().code());
+ return;
+ }
+
+ callback(result.releaseReturnValue());
}
void CryptoAlgorithmAES_KW::unwrapKey(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback)
{
- platformUnwrapKey(WTFMove(key), WTFMove(data), WTFMove(callback), WTFMove(exceptionCallback));
+ auto result = platformUnwrapKey(key, WTFMove(data));
+ if (result.hasException()) {
+ exceptionCallback(result.releaseException().code());
+ return;
+ }
+
+ callback(result.releaseReturnValue());
}
ExceptionOr<size_t> CryptoAlgorithmAES_KW::getKeyLength(const CryptoAlgorithmParameters& parameters)
Modified: trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.h (221234 => 221235)
--- trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.h 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_KW.h 2017-08-28 08:16:07 UTC (rev 221235)
@@ -50,8 +50,8 @@
void unwrapKey(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&) final;
ExceptionOr<size_t> getKeyLength(const CryptoAlgorithmParameters&) final;
- void platformWrapKey(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&);
- void platformUnwrapKey(Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&);
+ static ExceptionOr<Vector<uint8_t>> platformWrapKey(const CryptoKey&, const Vector<uint8_t>&);
+ static ExceptionOr<Vector<uint8_t>> platformUnwrapKey(const CryptoKey&, const Vector<uint8_t>&);
};
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -31,7 +31,6 @@
#include "CryptoAlgorithmAesCbcCfbParams.h"
#include "CryptoKeyAES.h"
#include "NotImplemented.h"
-#include "ScriptExecutionContext.h"
#include <pal/crypto/gcrypt/Handle.h>
#include <pal/crypto/gcrypt/Utilities.h>
@@ -167,60 +166,26 @@
return output;
}
-void CryptoAlgorithmAES_CBC::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CBC::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptEncrypt(aesKey.key(), aesParameters.ivVector(), WTFMove(plainText));
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptEncrypt(aesKey.key(), aesParameters.ivVector(), Vector<uint8_t>(plainText));
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
-void CryptoAlgorithmAES_CBC::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CBC::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptDecrypt(aesKey.key(), aesParameters.ivVector(), WTFMove(cipherText));
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptDecrypt(aesKey.key(), aesParameters.ivVector(), cipherText);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -28,18 +28,16 @@
#if ENABLE(SUBTLE_CRYPTO)
-#include "NotImplemented.h"
-
namespace WebCore {
-void CryptoAlgorithmAES_CFB::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CFB::platformEncrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&)
{
- notImplemented();
+ return Exception { NotSupportedError };
}
-void CryptoAlgorithmAES_CFB::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&&, Ref<CryptoKey>&&, Vector<uint8_t>&&, VectorCallback&&, ExceptionCallback&&, ScriptExecutionContext&, WorkQueue&)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CFB::platformDecrypt(CryptoAlgorithmParameters&, const CryptoKey&, const Vector<uint8_t>&)
{
- notImplemented();
+ return Exception { NotSupportedError };
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -32,7 +32,6 @@
#include "CryptoAlgorithmAesCtrParams.h"
#include "CryptoKeyAES.h"
-#include "ScriptExecutionContext.h"
#include <pal/crypto/gcrypt/Handle.h>
#include <pal/crypto/gcrypt/Utilities.h>
@@ -196,60 +195,26 @@
return output;
}
-void CryptoAlgorithmAES_CTR::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CTR::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptAES_CTR(gcry_cipher_encrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, plainText);
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptAES_CTR(gcry_cipher_encrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, plainText);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
-void CryptoAlgorithmAES_CTR::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CTR::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptAES_CTR(gcry_cipher_decrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, cipherText);
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptAES_CTR(gcry_cipher_decrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, cipherText);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -33,7 +33,6 @@
#include "CryptoAlgorithmAesGcmParams.h"
#include "CryptoKeyAES.h"
#include "NotImplemented.h"
-#include "ScriptExecutionContext.h"
#include <pal/crypto/gcrypt/Handle.h>
#include <pal/crypto/gcrypt/Utilities.h>
#include <wtf/CryptographicUtilities.h>
@@ -40,7 +39,7 @@
namespace WebCore {
-static std::optional<Vector<uint8_t>> gcryptEncrypt(const Vector<uint8_t>& key, const Vector<uint8_t>& iv, Vector<uint8_t>&& plainText, const Vector<uint8_t>& additionalData, uint8_t tagLength)
+static std::optional<Vector<uint8_t>> gcryptEncrypt(const Vector<uint8_t>& key, const Vector<uint8_t>& iv, const Vector<uint8_t>& plainText, const Vector<uint8_t>& additionalData, uint8_t tagLength)
{
// Determine the AES algorithm for the given key size.
auto algorithm = PAL::GCrypt::aesAlgorithmForKeySize(key.size() * 8);
@@ -108,7 +107,7 @@
return output;
}
-static std::optional<Vector<uint8_t>> gcryptDecrypt(const Vector<uint8_t>& key, const Vector<uint8_t>& iv, Vector<uint8_t>&& cipherText, const Vector<uint8_t>& additionalData, uint8_t tagLength)
+static std::optional<Vector<uint8_t>> gcryptDecrypt(const Vector<uint8_t>& key, const Vector<uint8_t>& iv, const Vector<uint8_t>& cipherText, const Vector<uint8_t>& additionalData, uint8_t tagLength)
{
// Determine the AES algorithm for the given key size.
auto algorithm = PAL::GCrypt::aesAlgorithmForKeySize(key.size() * 8);
@@ -180,60 +179,26 @@
return output;
}
-void CryptoAlgorithmAES_GCM::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_GCM::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptEncrypt(aesKey.key(), aesParameters.ivVector(), WTFMove(plainText), aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptEncrypt(aesKey.key(), aesParameters.ivVector(), plainText, aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
-void CryptoAlgorithmAES_GCM::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_GCM::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch(
- [parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
+ auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
- auto output = gcryptDecrypt(aesKey.key(), aesParameters.ivVector(), WTFMove(cipherText), aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
- if (!output) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- exceptionCallback(OperationError);
- context.deref();
- });
- return;
- }
-
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask(
- [output = WTFMove(*output), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) mutable {
- callback(WTFMove(output));
- context.deref();
- });
- });
+ auto output = gcryptDecrypt(aesKey.key(), aesParameters.ivVector(), cipherText, aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -115,28 +115,20 @@
return output;
}
-void CryptoAlgorithmAES_KW::platformWrapKey(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_KW::platformWrapKey(const CryptoKey& key, const Vector<uint8_t>& data)
{
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto output = gcryptWrapKey(aesKey.key(), data);
- if (!output) {
- exceptionCallback(OperationError);
- return;
- }
-
- callback(*output);
+ auto output = gcryptWrapKey(downcast<CryptoKeyAES>(key).key(), data);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
-void CryptoAlgorithmAES_KW::platformUnwrapKey(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_KW::platformUnwrapKey(const CryptoKey& key, const Vector<uint8_t>& data)
{
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto output = gcryptUnwrapKey(aesKey.key(), data);
- if (!output) {
- exceptionCallback(OperationError);
- return;
- }
-
- callback(*output);
+ auto output = gcryptUnwrapKey(downcast<CryptoKeyAES>(key).key(), data);
+ if (!output)
+ return Exception { OperationError };
+ return WTFMove(*output);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -30,7 +30,6 @@
#include "CryptoAlgorithmAesCbcCfbParams.h"
#include "CryptoKeyAES.h"
-#include "ScriptExecutionContext.h"
#include <CommonCrypto/CommonCrypto.h>
namespace WebCore {
@@ -63,52 +62,20 @@
return WTFMove(result);
}
-void CryptoAlgorithmAES_CBC::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CBC::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CBC(kCCEncrypt, aesParameters.ivVector(), aesKey.key(), plainText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
+ return transformAES_CBC(kCCEncrypt, aesParameters.ivVector(), aesKey.key(), plainText);
}
-void CryptoAlgorithmAES_CBC::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CBC::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- assert(aesParameters.ivVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CBC(kCCDecrypt, aesParameters.ivVector(), aesKey.key(), cipherText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
+ return transformAES_CBC(kCCDecrypt, aesParameters.ivVector(), aesKey.key(), cipherText);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CFBMac.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -30,7 +30,6 @@
#include "CryptoAlgorithmAesCbcCfbParams.h"
#include "CryptoKeyAES.h"
-#include "ScriptExecutionContext.h"
#include <CommonCrypto/CommonCrypto.h>
namespace WebCore {
@@ -63,52 +62,20 @@
return WTFMove(result);
}
-void CryptoAlgorithmAES_CFB::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CFB::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CFB(kCCEncrypt, aesParameters.ivVector(), aesKey.key(), plainText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
+ return transformAES_CFB(kCCEncrypt, aesParameters.ivVector(), aesKey.key(), plainText);
}
-void CryptoAlgorithmAES_CFB::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CFB::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- assert(aesParameters.ivVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CFB(kCCDecrypt, aesParameters.ivVector(), aesKey.key(), cipherText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCbcCfbParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.ivVector().size() == kCCBlockSizeAES128);
+ return transformAES_CFB(kCCDecrypt, aesParameters.ivVector(), aesKey.key(), cipherText);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_CTRMac.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -30,7 +30,6 @@
#include "CryptoAlgorithmAesCtrParams.h"
#include "CryptoKeyAES.h"
-#include "ScriptExecutionContext.h"
#include <CommonCrypto/CommonCrypto.h>
namespace WebCore {
@@ -139,52 +138,20 @@
return WTFMove(head);
}
-void CryptoAlgorithmAES_CTR::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CTR::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- ASSERT(aesParameters.counterVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CTR(kCCEncrypt, aesParameters.counterVector(), aesParameters.length, aesKey.key(), plainText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.counterVector().size() == kCCBlockSizeAES128);
+ return transformAES_CTR(kCCEncrypt, aesParameters.counterVector(), aesParameters.length, aesKey.key(), plainText);
}
-void CryptoAlgorithmAES_CTR::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_CTR::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- assert(aesParameters.counterVector().size() == kCCBlockSizeAES128);
- auto result = transformAES_CTR(kCCDecrypt, aesParameters.counterVector(), aesParameters.length, aesKey.key(), cipherText);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesCtrParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ ASSERT(aesParameters.counterVector().size() == kCCBlockSizeAES128);
+ return transformAES_CTR(kCCDecrypt, aesParameters.counterVector(), aesParameters.length, aesKey.key(), cipherText);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_GCMMac.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -31,7 +31,6 @@
#include "CommonCryptoUtilities.h"
#include "CryptoAlgorithmAesGcmParams.h"
#include "CryptoKeyAES.h"
-#include "ScriptExecutionContext.h"
#include <wtf/CryptographicUtilities.h>
namespace WebCore {
@@ -73,50 +72,18 @@
return WTFMove(plainText);
}
-void CryptoAlgorithmAES_GCM::platformEncrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& plainText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_GCM::platformEncrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& plainText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), plainText = WTFMove(plainText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto result = encryptAES_GCM(aesParameters.ivVector(), aesKey.key(), plainText, aesParameters.additionalDataVector(), *(aesParameters.tagLength) / 8);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ return encryptAES_GCM(aesParameters.ivVector(), aesKey.key(), plainText, aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
}
-void CryptoAlgorithmAES_GCM::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_GCM::platformDecrypt(CryptoAlgorithmParameters& parameters, const CryptoKey& key, const Vector<uint8_t>& cipherText)
{
- context.ref();
- workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable {
- auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(*parameters);
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto result = decyptAES_GCM(aesParameters.ivVector(), aesKey.key(), cipherText, aesParameters.additionalDataVector(), *(aesParameters.tagLength) / 8);
- if (result.hasException()) {
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code(), callback = WTFMove(callback)](ScriptExecutionContext& context) {
- exceptionCallback(ec);
- context.deref();
- });
- return;
- }
- // We should only dereference callbacks after being back to the Document/Worker threads.
- context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue(), exceptionCallback = WTFMove(exceptionCallback)](ScriptExecutionContext& context) {
- callback(result);
- context.deref();
- });
- });
+ auto& aesParameters = downcast<CryptoAlgorithmAesGcmParams>(parameters);
+ auto& aesKey = downcast<CryptoKeyAES>(key);
+ return decyptAES_GCM(aesParameters.ivVector(), aesKey.key(), cipherText, aesParameters.additionalDataVector(), aesParameters.tagLength.value_or(0) / 8);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp (221234 => 221235)
--- trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp 2017-08-28 05:12:56 UTC (rev 221234)
+++ trunk/Source/WebCore/crypto/mac/CryptoAlgorithmAES_KWMac.cpp 2017-08-28 08:16:07 UTC (rev 221235)
@@ -59,26 +59,14 @@
return WTFMove(result);
}
-void CryptoAlgorithmAES_KW::platformWrapKey(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_KW::platformWrapKey(const CryptoKey& key, const Vector<uint8_t>& data)
{
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto result = wrapKeyAES_KW(aesKey.key(), data);
- if (result.hasException()) {
- exceptionCallback(result.releaseException().code());
- return;
- }
- callback(result.releaseReturnValue());
+ return wrapKeyAES_KW(downcast<CryptoKeyAES>(key).key(), data);
}
-void CryptoAlgorithmAES_KW::platformUnwrapKey(Ref<CryptoKey>&& key, Vector<uint8_t>&& data, VectorCallback&& callback, ExceptionCallback&& exceptionCallback)
+ExceptionOr<Vector<uint8_t>> CryptoAlgorithmAES_KW::platformUnwrapKey(const CryptoKey& key, const Vector<uint8_t>& data)
{
- auto& aesKey = downcast<CryptoKeyAES>(key.get());
- auto result = unwrapKeyAES_KW(aesKey.key(), data);
- if (result.hasException()) {
- exceptionCallback(result.releaseException().code());
- return;
- }
- callback(result.releaseReturnValue());
+ return unwrapKeyAES_KW(downcast<CryptoKeyAES>(key).key(), data);
}
} // namespace WebCore