CryptoAlgorithmAES_CBC.cpp [plain text]
#include "config.h"
#include "CryptoAlgorithmAES_CBC.h"
#if ENABLE(SUBTLE_CRYPTO)
#include "CryptoAlgorithmAesCbcParams.h"
#include "CryptoAlgorithmAesKeyGenParams.h"
#include "CryptoKeyAES.h"
#include "CryptoKeyDataOctetSequence.h"
#include "ExceptionCode.h"
namespace WebCore {
const char* const CryptoAlgorithmAES_CBC::s_name = "AES-CBC";
CryptoAlgorithmAES_CBC::CryptoAlgorithmAES_CBC()
{
}
CryptoAlgorithmAES_CBC::~CryptoAlgorithmAES_CBC()
{
}
std::unique_ptr<CryptoAlgorithm> CryptoAlgorithmAES_CBC::create()
{
return std::unique_ptr<CryptoAlgorithm>(new CryptoAlgorithmAES_CBC);
}
CryptoAlgorithmIdentifier CryptoAlgorithmAES_CBC::identifier() const
{
return s_identifier;
}
bool CryptoAlgorithmAES_CBC::keyAlgorithmMatches(const CryptoAlgorithmAesCbcParams&, const CryptoKey& key) const
{
if (key.algorithmIdentifier() != s_identifier)
return false;
ASSERT(is<CryptoKeyAES>(key));
return true;
}
void CryptoAlgorithmAES_CBC::encrypt(const CryptoAlgorithmParameters& parameters, const CryptoKey& key, const CryptoOperationData& data, VectorCallback callback, VoidCallback failureCallback, ExceptionCode& ec)
{
const CryptoAlgorithmAesCbcParams& aesCBCParameters = downcast<CryptoAlgorithmAesCbcParams>(parameters);
if (!keyAlgorithmMatches(aesCBCParameters, key)) {
ec = NOT_SUPPORTED_ERR;
return;
}
platformEncrypt(aesCBCParameters, downcast<CryptoKeyAES>(key), data, WTF::move(callback), WTF::move(failureCallback), ec);
}
void CryptoAlgorithmAES_CBC::decrypt(const CryptoAlgorithmParameters& parameters, const CryptoKey& key, const CryptoOperationData& data, VectorCallback callback, VoidCallback failureCallback, ExceptionCode& ec)
{
const CryptoAlgorithmAesCbcParams& aesCBCParameters = downcast<CryptoAlgorithmAesCbcParams>(parameters);
if (!keyAlgorithmMatches(aesCBCParameters, key)) {
ec = NOT_SUPPORTED_ERR;
return;
}
platformDecrypt(aesCBCParameters, downcast<CryptoKeyAES>(key), data, WTF::move(callback), WTF::move(failureCallback), ec);
}
void CryptoAlgorithmAES_CBC::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_CBC, aesParameters.length, extractable, usages);
if (!result) {
failureCallback();
return;
}
callback(result.get(), nullptr);
}
void CryptoAlgorithmAES_CBC::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_CBC, keyDataOctetSequence.octetSequence(), extractable, usage);
callback(*result);
}
}
#endif // ENABLE(SUBTLE_CRYPTO)