SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
AES.cpp
Go to the documentation of this file.
2
3#include <tomcrypt.h>
4
6
7using namespace sourcepp;
8
9namespace sourcepp::crypto {
10
11const std::array<std::byte, 16> NULL_IV{};
12
13} // namespace sourcepp::crypto
14
15bool crypto::decryptAES_CFB(std::span<std::byte> buffer, std::span<const std::byte> key, std::span<const std::byte> iv) {
16 if (!LTM_MATH || AES_INDEX < 0 || buffer.empty()) {
17 return {};
18 }
19
20 const std::unique_ptr<symmetric_CFB, void(*)(symmetric_CFB*)> cfb{new symmetric_CFB, [](symmetric_CFB* c) { cfb_done(c); delete c; }};
21 if (cfb_start(AES_INDEX, reinterpret_cast<const unsigned char*>(iv.data()), reinterpret_cast<const unsigned char*>(key.data()), static_cast<int>(key.size()), 0, cfb.get()) != CRYPT_OK) {
22 return {};
23 }
24 const unsigned long bufferLen = buffer.size();
25 return cfb_decrypt(reinterpret_cast<const unsigned char*>(buffer.data()), reinterpret_cast<unsigned char*>(buffer.data()), bufferLen, cfb.get()) == CRYPT_OK;
26}
27
28bool crypto::encryptAES_CFB(std::span<std::byte> buffer, std::span<const std::byte> key, std::span<const std::byte> iv) {
29 if (!LTM_MATH || AES_INDEX < 0 || buffer.empty()) {
30 return {};
31 }
32
33 const std::unique_ptr<symmetric_CFB, void(*)(symmetric_CFB*)> cfb{new symmetric_CFB, [](symmetric_CFB* c) { cfb_done(c); delete c; }};
34 if (cfb_start(AES_INDEX, reinterpret_cast<const unsigned char*>(iv.data()), reinterpret_cast<const unsigned char*>(key.data()), static_cast<int>(key.size()), 0, cfb.get()) != CRYPT_OK) {
35 return {};
36 }
37 const unsigned long bufferLen = buffer.size();
38 return cfb_encrypt(reinterpret_cast<const unsigned char*>(buffer.data()), reinterpret_cast<unsigned char*>(buffer.data()), bufferLen, cfb.get()) == CRYPT_OK;
39}
bool decryptAES_CFB(std::span< std::byte > buffer, std::span< const std::byte > key, std::span< const std::byte > iv=NULL_IV)
Definition AES.cpp:15
const int AES_INDEX
Definition Globals.cpp:12
const bool LTM_MATH
Definition Globals.cpp:7
bool encryptAES_CFB(std::span< std::byte > buffer, std::span< const std::byte > key, std::span< const std::byte > iv=NULL_IV)
Definition AES.cpp:28
const std::array< std::byte, 16 > NULL_IV
Definition AES.cpp:11