CryptoAlgorithmPBKDF2.cpp [plain text]
#include "config.h"
#include "CryptoAlgorithmPBKDF2.h"
#if ENABLE(SUBTLE_CRYPTO)
#include "CryptoAlgorithmPbkdf2Params.h"
#include "CryptoKeyRaw.h"
namespace WebCore {
Ref<CryptoAlgorithm> CryptoAlgorithmPBKDF2::create()
{
return adoptRef(*new CryptoAlgorithmPBKDF2);
}
CryptoAlgorithmIdentifier CryptoAlgorithmPBKDF2::identifier() const
{
return s_identifier;
}
void CryptoAlgorithmPBKDF2::deriveBits(std::unique_ptr<CryptoAlgorithmParameters>&& parameters, Ref<CryptoKey>&& baseKey, size_t length, VectorCallback&& callback, ExceptionCallback&& exceptionCallback, ScriptExecutionContext& context, WorkQueue& workQueue)
{
if (!length || length % 8) {
exceptionCallback(OperationError);
return;
}
dispatchOperation(workQueue, context, WTFMove(callback), WTFMove(exceptionCallback),
[parameters = WTFMove(parameters), baseKey = WTFMove(baseKey), length] {
return platformDeriveBits(downcast<CryptoAlgorithmPbkdf2Params>(*parameters), downcast<CryptoKeyRaw>(baseKey.get()), length);
});
}
void CryptoAlgorithmPBKDF2::importKey(CryptoKeyFormat format, KeyData&& data, const std::unique_ptr<CryptoAlgorithmParameters>&& parameters, bool extractable, CryptoKeyUsageBitmap usages, KeyCallback&& callback, ExceptionCallback&& exceptionCallback)
{
if (format != CryptoKeyFormat::Raw) {
exceptionCallback(NotSupportedError);
return;
}
if (usages & (CryptoKeyUsageEncrypt | CryptoKeyUsageDecrypt | CryptoKeyUsageSign | CryptoKeyUsageVerify | CryptoKeyUsageWrapKey | CryptoKeyUsageUnwrapKey)) {
exceptionCallback(SyntaxError);
return;
}
if (extractable) {
exceptionCallback(SyntaxError);
return;
}
callback(CryptoKeyRaw::create(parameters->identifier, WTFMove(WTF::get<Vector<uint8_t>>(data)), usages));
}
ExceptionOr<size_t> CryptoAlgorithmPBKDF2::getKeyLength(const CryptoAlgorithmParameters&)
{
return 0;
}
}
#endif // ENABLE(SUBTLE_CRYPTO)