24 EVP_CIPHER_CTX_init(
_ctx);
25 EVP_CIPHER
const* cipher =
nullptr;
29 cipher = EVP_aes_128_gcm();
32 cipher = EVP_aes_192_gcm();
35 cipher = EVP_aes_256_gcm();
38 ASSERT(
false,
"Invalid AES key size " SZFMTD, keySizeBits);
41 int status = EVP_CipherInit_ex(
_ctx, cipher,
nullptr,
nullptr,
nullptr,
_encrypting ? 1 : 0);
65 ASSERT(length <=
static_cast<size_t>(std::numeric_limits<int>::max()));
66 int len =
static_cast<int>(length);
67 if (!EVP_CipherInit_ex(_ctx,
nullptr,
nullptr,
nullptr, iv.data(), -1))
71 if (!EVP_CipherUpdate(_ctx, data, &outLen, data, len))
76 if (!_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_SET_TAG,
sizeof(tag), tag))
79 if (!EVP_CipherFinal_ex(_ctx, data + outLen, &outLen))
84 if (_encrypting && !EVP_CIPHER_CTX_ctrl(_ctx, EVP_CTRL_GCM_GET_TAG,
sizeof(tag), tag))
92 ASSERT(!_encrypting,
"Partial encryption is not allowed");
93 ASSERT(partialLength <=
static_cast<size_t>(std::numeric_limits<int>::max()));
94 int len =
static_cast<int>(partialLength);
95 if (!EVP_CipherInit_ex(_ctx,
nullptr,
nullptr,
nullptr, iv.data(), -1))
99 if (!EVP_CipherUpdate(_ctx, data, &outLen, data, len))
104 if (!EVP_CipherFinal_ex(_ctx, data + outLen, &outLen))