CryptoAlgorithmAES_KW.cpp [plain text]
#include "config.h"
#include "CryptoAlgorithmAES_KW.h"
#if ENABLE(SUBTLE_CRYPTO)
#include "CryptoAlgorithmAesKeyGenParams.h"
#include "CryptoKeyAES.h"
#include "CryptoKeyDataOctetSequence.h"
#include "ExceptionCode.h"
namespace WebCore {
const char* const CryptoAlgorithmAES_KW::s_name = "AES-KW";
CryptoAlgorithmAES_KW::CryptoAlgorithmAES_KW()
{
}
CryptoAlgorithmAES_KW::~CryptoAlgorithmAES_KW()
{
}
std::unique_ptr<CryptoAlgorithm> CryptoAlgorithmAES_KW::create()
{
return std::unique_ptr<CryptoAlgorithm>(new CryptoAlgorithmAES_KW);
}
CryptoAlgorithmIdentifier CryptoAlgorithmAES_KW::identifier() const
{
return s_identifier;
}
bool CryptoAlgorithmAES_KW::keyAlgorithmMatches(const CryptoKey& key) const
{
if (key.algorithmIdentifier() != s_identifier)
return false;
ASSERT(is<CryptoKeyAES>(key));
return true;
}
void CryptoAlgorithmAES_KW::encryptForWrapKey(const CryptoAlgorithmParameters&, const CryptoKey& key, const CryptoOperationData& data, VectorCallback callback, VoidCallback failureCallback, ExceptionCode& ec)
{
if (!keyAlgorithmMatches(key)) {
ec = NOT_SUPPORTED_ERR;
return;
}
platformEncrypt(downcast<CryptoKeyAES>(key), data, WTF::move(callback), WTF::move(failureCallback), ec);
}
void CryptoAlgorithmAES_KW::decryptForUnwrapKey(const CryptoAlgorithmParameters&, const CryptoKey& key, const CryptoOperationData& data, VectorCallback callback, VoidCallback failureCallback, ExceptionCode& ec)
{
if (!keyAlgorithmMatches(key)) {
ec = NOT_SUPPORTED_ERR;
return;
}
platformDecrypt(downcast<CryptoKeyAES>(key), data, WTF::move(callback), WTF::move(failureCallback), ec);
}
void CryptoAlgorithmAES_KW::generateKey(const CryptoAlgorithmParameters& parameters, bool extractable, CryptoKeyUsage usages, KeyOrKeyPairCallback callback, VoidCallback failureCallback, ExceptionCode&)
{
const CryptoAlgorithmAesKeyGenParams& aesParameters = downcast<CryptoAlgorithmAesKeyGenParams>(parameters);
RefPtr<CryptoKeyAES> result = CryptoKeyAES::generate(CryptoAlgorithmIdentifier::AES_KW, aesParameters.length, extractable, usages);
if (!result) {
failureCallback();
return;
}
callback(result.get(), nullptr);
}
void CryptoAlgorithmAES_KW::importKey(const CryptoAlgorithmParameters&, const CryptoKeyData& keyData, bool extractable, CryptoKeyUsage usage, KeyCallback callback, VoidCallback, ExceptionCode& ec)
{
if (!is<CryptoKeyDataOctetSequence>(keyData)) {
ec = NOT_SUPPORTED_ERR;
return;
}
const CryptoKeyDataOctetSequence& keyDataOctetSequence = downcast<CryptoKeyDataOctetSequence>(keyData);
RefPtr<CryptoKeyAES> result = CryptoKeyAES::create(CryptoAlgorithmIdentifier::AES_KW, keyDataOctetSequence.octetSequence(), extractable, usage);
callback(*result);
}
}
#endif // ENABLE(SUBTLE_CRYPTO)