CryptoAlgorithmHKDF.cpp [plain text]
#include "config.h"
#include "CryptoAlgorithmHKDF.h"
#if ENABLE(SUBTLE_CRYPTO)
#include "CryptoAlgorithmHkdfParams.h"
#include "CryptoKeyRaw.h"
namespace WebCore {
Ref<CryptoAlgorithm> CryptoAlgorithmHKDF::create()
{
return adoptRef(*new CryptoAlgorithmHKDF);
}
CryptoAlgorithmIdentifier CryptoAlgorithmHKDF::identifier() const
{
return s_identifier;
}
void CryptoAlgorithmHKDF::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<CryptoAlgorithmHkdfParams>(*parameters), downcast<CryptoKeyRaw>(baseKey.get()), length);
});
}
void CryptoAlgorithmHKDF::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> CryptoAlgorithmHKDF::getKeyLength(const CryptoAlgorithmParameters&)
{
return 0;
}
}
#endif // ENABLE(SUBTLE_CRYPTO)