DEFINE_CIPHER(AesGcmEncryption256, RawBuffer, EVP_aes_256_gcm(), true);
DEFINE_CIPHER(AesGcmDecryption256, RawBuffer, EVP_aes_256_gcm(), false);
+DEFINE_CIPHER(AesCtrEncryption128, RawBuffer, EVP_aes_128_ctr(), true);
+DEFINE_CIPHER(AesCtrDecryption128, RawBuffer, EVP_aes_128_ctr(), false);
+DEFINE_CIPHER(AesCtrEncryption192, RawBuffer, EVP_aes_192_ctr(), true);
+DEFINE_CIPHER(AesCtrDecryption192, RawBuffer, EVP_aes_192_ctr(), false);
+DEFINE_CIPHER(AesCtrEncryption256, RawBuffer, EVP_aes_256_ctr(), true);
+DEFINE_CIPHER(AesCtrDecryption256, RawBuffer, EVP_aes_256_ctr(), false);
+
+DEFINE_CIPHER(AesCfbEncryption128, RawBuffer, EVP_aes_128_cfb(), true);
+DEFINE_CIPHER(AesCfbDecryption128, RawBuffer, EVP_aes_128_cfb(), false);
+DEFINE_CIPHER(AesCfbEncryption192, RawBuffer, EVP_aes_192_cfb(), true);
+DEFINE_CIPHER(AesCfbDecryption192, RawBuffer, EVP_aes_192_cfb(), false);
+DEFINE_CIPHER(AesCfbEncryption256, RawBuffer, EVP_aes_256_cfb(), true);
+DEFINE_CIPHER(AesCfbDecryption256, RawBuffer, EVP_aes_256_cfb(), false);
+
#undef DEFINE_CIPHER
} // namespace Cipher
tree[AlgoType::AES_GCM][192][false] = initCipher<Cipher::AesGcmDecryption192>;
tree[AlgoType::AES_GCM][256][false] = initCipher<Cipher::AesGcmDecryption256>;
+ tree[AlgoType::AES_CTR][128][true] = initCipher<Cipher::AesCtrEncryption128>;
+ tree[AlgoType::AES_CTR][192][true] = initCipher<Cipher::AesCtrEncryption192>;
+ tree[AlgoType::AES_CTR][256][true] = initCipher<Cipher::AesCtrEncryption256>;
+
+ tree[AlgoType::AES_CTR][128][false] = initCipher<Cipher::AesCtrDecryption128>;
+ tree[AlgoType::AES_CTR][192][false] = initCipher<Cipher::AesCtrDecryption192>;
+ tree[AlgoType::AES_CTR][256][false] = initCipher<Cipher::AesCtrDecryption256>;
+
+ tree[AlgoType::AES_CFB][128][true] = initCipher<Cipher::AesCfbEncryption128>;
+ tree[AlgoType::AES_CFB][192][true] = initCipher<Cipher::AesCfbEncryption192>;
+ tree[AlgoType::AES_CFB][256][true] = initCipher<Cipher::AesCfbEncryption256>;
+
+ tree[AlgoType::AES_CFB][128][false] = initCipher<Cipher::AesCfbDecryption128>;
+ tree[AlgoType::AES_CFB][192][false] = initCipher<Cipher::AesCfbDecryption192>;
+ tree[AlgoType::AES_CFB][256][false] = initCipher<Cipher::AesCfbDecryption256>;
+
return tree;
}
return createKeyAES(backendId, keySizeBits);
}
-RawBuffer encryptDataAesCbc(
+RawBuffer encryptDataAes(
+ AlgoType type,
const RawBuffer &key,
const RawBuffer &data,
const RawBuffer &iv)
{
EvpCipherPtr enc;
- selectCipher(AlgoType::AES_CBC, key.size())(enc, key, iv);
+ selectCipher(type, key.size())(enc, key, iv);
RawBuffer result = enc->Append(data);
RawBuffer tmp = enc->Finalize();
std::copy(tmp.begin(), tmp.end(), std::back_inserter(result));
return pair.first;
}
-RawBuffer decryptDataAesCbc(
+RawBuffer decryptDataAes(
+ AlgoType type,
const RawBuffer &key,
const RawBuffer &data,
const RawBuffer &iv)
{
EvpCipherPtr dec;
- selectCipher(AlgoType::AES_CBC, key.size(), false)(dec, key, iv);
+ selectCipher(type, key.size(), false)(dec, key, iv);
RawBuffer result = dec->Append(data);
RawBuffer tmp = dec->Finalize();
std::copy(tmp.begin(), tmp.end(), std::back_inserter(result));
switch(keyType)
{
case AlgoType::AES_CBC:
- return encryptDataAesCbc(key, data, unpack<RawBuffer>(alg, ParamName::ED_IV));
+ case AlgoType::AES_CTR:
+ case AlgoType::AES_CFB:
+ return encryptDataAes(keyType, key, data, unpack<RawBuffer>(alg, ParamName::ED_IV));
case AlgoType::AES_GCM:
{
int tagLenBits = DEFAULT_AES_GCM_TAG_LEN;
switch(keyType)
{
case AlgoType::AES_CBC:
- return decryptDataAesCbc(key, data, unpack<RawBuffer>(alg, ParamName::ED_IV));
+ case AlgoType::AES_CTR:
+ case AlgoType::AES_CFB:
+ return decryptDataAes(keyType, key, data, unpack<RawBuffer>(alg, ParamName::ED_IV));
case AlgoType::AES_GCM:
{
int tagLenBits = DEFAULT_AES_GCM_TAG_LEN;
if (!password.empty()) {
key = passwordToKey(password, crow.iv, AES_CBC_KEY_SIZE);
- crow.data = Crypto::SW::Internals::encryptDataAesCbc(key, crow.data, crow.iv);
+ crow.data = Crypto::SW::Internals::encryptDataAes(AlgoType::AES_CBC, key, crow.data, crow.iv);
crow.encryptionScheme |= ENCR_PASSWORD;
}
if (crow.encryptionScheme & ENCR_PASSWORD) {
key = passwordToKey(password, crow.iv, AES_CBC_KEY_SIZE);
- crow.data = Crypto::SW::Internals::decryptDataAesCbc(key, crow.data, crow.iv);
+ crow.data = Crypto::SW::Internals::decryptDataAes(AlgoType::AES_CBC, key, crow.data, crow.iv);
}
if (crow.encryptionScheme & ENCR_APPKEY) {