void CryptoAlgorithmSHA1::digest(Vector<uint8_t>&& message, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue) { auto digest = CryptoDigest::create(CryptoDigest::Algorithm::SHA_1); if (!digest) { exceptionCallback(OperationError); return; } context.ref(); workQueue.dispatch([digest = WTFMove(digest), message = WTFMove(message), callback = WTFMove(callback), &context]() mutable { digest->addBytes(message.data(), message.size()); auto result = digest->computeHash(); context.postTask([callback = WTFMove(callback), result = WTFMove(result)](ScriptExecutionContext& context) { callback(result); context.deref(); }); }); }
void CryptoAlgorithmRSA_OAEP::platformDecrypt(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& key, Vector<uint8_t>&& cipherText, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue) { context.ref(); workQueue.dispatch([parameters = WTFMove(parameters), key = WTFMove(key), cipherText = WTFMove(cipherText), callback = WTFMove(callback), exceptionCallback = WTFMove(exceptionCallback), &context]() mutable { auto& rsaParameters = downcast<CryptoAlgorithmRsaOaepParams>(*parameters); auto& rsaKey = downcast<CryptoKeyRSA>(key.get()); auto result = decryptRSA_OAEP(rsaKey.hashAlgorithmIdentifier(), rsaParameters.labelVector(), rsaKey.platformKey(), rsaKey.keySizeInBits(), cipherText.data(), cipherText.size()); if (result.hasException()) { context.postTask([exceptionCallback = WTFMove(exceptionCallback), ec = result.releaseException().code()](ScriptExecutionContext& context) { exceptionCallback(ec); context.deref(); }); return; } context.postTask([callback = WTFMove(callback), result = result.releaseReturnValue()](ScriptExecutionContext& context) { callback(result); context.deref(); }); }); }